Passed
Pull Request — master (#834)
by Kiran
11:34 queued 04:44
created
vendor/ayecode/wp-super-duper/includes/class-super-duper-bricks-element.php 1 patch
Indentation   +248 added lines, -248 removed lines patch added patch discarded remove patch
@@ -6,246 +6,246 @@  discard block
 block discarded – undo
6 6
 
7 7
 class Super_Duper_Bricks_Element extends \Bricks\Element {
8 8
 
9
-	public $widget;
10
-
11
-	public function __construct( $element = null ) {
12
-
13
-
14
-		$block_icon = !empty($this->widget->options['block-icon']) ? $this->widget->options['block-icon'] : '';
15
-
16
-
17
-		$this->category = !empty($this->widget->options['textdomain']) ? esc_attr( $this->widget->options['textdomain'] ) : 'Super Duper';
18
-		$this->name     = $this->widget->id_base;
19
-		$this->icon     = (strpos($block_icon, 'fa') === 0) ? esc_attr($this->widget->options['block-icon']) : 'fas fa-globe-americas';
20
-
21
-		parent::__construct($element);
22
-	}
23
-
24
-	/**
25
-	 * Set the element name.
26
-	 *
27
-	 * @return array|string|string[]|null
28
-	 */
29
-	public function get_label() {
30
-		$escaped_text = esc_attr( $this->widget->name );
31
-		return str_replace( ' > ', ' > ', $escaped_text ); // keep our > but have it safe
32
-	}
33
-
34
-	/**
35
-	 * Bricks function to set the controls
36
-	 *
37
-	 * @return void
38
-	 */
39
-	public function set_controls() {
40
-		$args = $this->sd_convert_arguments($this->widget);
41
-
42
-		if (!empty($args)) {
43
-			$this->controls = $this->controls + $args;
44
-		}
45
-
46
-	}
47
-
48
-	/**
49
-	 * Set the bricks control groups from the GD ones.
50
-	 *
51
-	 * @return void
52
-	 */
53
-	public function set_control_groups() {
54
-		$args = $this->sd_get_arguments();
55
-
56
-		$groups = array();
57
-		if(!empty($args)) {
58
-			foreach ($args as $k => $v) {
59
-				$g_slug = !empty($v['group']) ? sanitize_title( $v['group'] ) : '';
60
-				if($g_slug && empty($groups[$g_slug])) {
61
-					$groups[$g_slug] = array(
62
-						'title' => esc_html( $v['group'] ),
63
-						'tab' => 'content',
64
-					);
65
-				}
66
-			}
67
-		}
68
-
69
-		if(!empty($groups)) {
70
-			$this->control_groups = $this->control_groups + $groups;
71
-		}
72
-
73
-	}
74
-
75
-	/**
76
-	 * Get the setting input arguments.
77
-	 *
78
-	 * @return mixed
79
-	 */
80
-	public function sd_get_arguments() {
81
-		$args = $this->widget->set_arguments();
82
-		$arg_keys_subtract = $this->sd_remove_arguments();
83
-
84
-		if ( ! empty( $arg_keys_subtract ) ) {
85
-			foreach($arg_keys_subtract as $key ){
86
-				unset($args[$key]);
87
-			}
88
-		}
89
-
90
-		return $args;
91
-	}
92
-
93
-
94
-	/**
95
-	 * Simply use our own render function for the output.
96
-	 *
97
-	 * @return void
98
-	 */
99
-	public function render() {
100
-		$settings   = $this->sd_maybe_convert_values( $this->settings );
101
-
102
-
103
-		// set the AyeCode UI calss on the wrapper
104
-		$this->set_attribute( '_root', 'class', 'bsui' );
105
-
106
-		// we might need to add a placeholder here for previews.
107
-
108
-		// add the bricks attributes to wrapper
109
-		echo "<div {$this->render_attributes( '_root' )}>";
110
-		echo $this->widget->output($settings);
111
-		echo '</div>';
112
-	}
113
-
114
-	/**
115
-	 * Values can never be arrays so convert if bricks setting make it an array.
116
-	 *
117
-	 * @param $settings
118
-	 * @return mixed
119
-	 */
120
-	public function sd_maybe_convert_values( $settings ) {
121
-
122
-
123
-		if (!empty($settings)) {
124
-			foreach( $settings as $k => $v ) {
125
-				if(is_array($v)) {
126
-					$value = '';
127
-					// is color
128
-					if (isset($v['hex'])) {
129
-						$value = $v['hex'];
130
-					} elseif (isset($v['icon'])) {
131
-						$value = $v['icon'];
132
-					}
133
-
134
-
135
-					// set the value
136
-					$settings[$k] = $value;
137
-				}
138
-
139
-			}
140
-		}
141
-
142
-		return $settings;
143
-	}
144
-
145
-	/**
146
-	 * Convert SD arguments to Bricks arguments.
147
-	 *
148
-	 * @param $widget
149
-	 *
150
-	 * @return array
151
-	 */
152
-	public function sd_convert_arguments()
153
-	{
154
-		$bricks_args = array();
155
-
156
-		$args = $this->sd_get_arguments();
157
-
158
-		if (!empty($args)) {
159
-			foreach ($args as $key => $arg) {
160
-
161
-				// convert title
162
-				if (!empty($arg['title'])) {
163
-					$arg['label'] = $arg['title'];
164
-					unset($arg['title']);
165
-				}
166
-
167
-				// set fields not to use dynamic data
168
-				$arg['hasDynamicData'] = false;
169
-
170
-				if (!empty($arg['group'])) {
171
-					$arg['group'] =  sanitize_title($arg['group']);
172
-				}
173
-
174
-				$arg['rerender'] = true;
175
-
176
-				// required
177
-				if(!empty($arg['element_require'])) {
178
-					$arg['required'] = $this->sd_convert_required($arg['element_require']);
179
-					unset($arg['element_require']);
180
-				}
181
-
182
-				// icons
183
-				if ('icon' === $key) {
184
-					$arg['type'] = 'icon';
185
-				}
186
-
187
-				$bricks_args[$key] = $arg;
188
-
189
-			}
190
-
191
-		}
192
-
193
-		return $bricks_args;
194
-
195
-	}
196
-
197
-	/**
198
-	 * Convert the SD element_required to the Bricks required syntax.
199
-	 *
200
-	 * @param $element_require
201
-	 * @return array
202
-	 */
203
-	public function sd_convert_required($element_require) {
204
-		$bricks_required = [];
205
-
206
-		// Handle logical OR (||) for multiple values
207
-		if (strpos($element_require, '||') !== false) {
208
-			preg_match('/\[%(.+?)%\] *== *"(.*?)"/', $element_require, $matches);
209
-			if ($matches) {
210
-				$control_id = $matches[1];
211
-				preg_match_all('/\[%.*?%\] *== *"(.*?)"/', $element_require, $value_matches);
212
-				$values = $value_matches[1];
213
-				$bricks_required[] = [$control_id, '=', $values];
214
-			}
215
-			return $bricks_required;
216
-		}
217
-
218
-		// Match individual conditions
219
-		preg_match_all('/(!)?\[%(.*?)%\](?:\s*([!=<>]=?)\s*(".*?"|\'.*?\'|\d+))?/', $element_require, $matches, PREG_SET_ORDER);
220
-
221
-		foreach ($matches as $match) {
222
-			$is_negation = isset($match[1]) && $match[1] === '!';
223
-			$control_id = $match[2];
224
-			$operator = isset($match[3]) ? str_replace('==', '=', $match[3]) : ($is_negation ? '=' : '!=');
225
-			$value = isset($match[4]) ? trim($match[4], '"\'') : ($is_negation ? '' : '');
226
-
227
-			// Adjust for negation without explicit operator
228
-			if ($is_negation && !isset($match[3])) {
229
-				$operator = '=';
230
-				$value = '';
231
-			}
232
-
233
-			$bricks_required[] = [$control_id, $operator, $value];
234
-		}
235
-
236
-		return $bricks_required;
237
-	}
238
-
239
-
240
-	/**
241
-	 * A way to remove some settings by keys.
242
-	 *
243
-	 * @return array
244
-	 */
245
-	public function sd_remove_arguments()
246
-	{
247
-		return array();
248
-	}
9
+    public $widget;
10
+
11
+    public function __construct( $element = null ) {
12
+
13
+
14
+        $block_icon = !empty($this->widget->options['block-icon']) ? $this->widget->options['block-icon'] : '';
15
+
16
+
17
+        $this->category = !empty($this->widget->options['textdomain']) ? esc_attr( $this->widget->options['textdomain'] ) : 'Super Duper';
18
+        $this->name     = $this->widget->id_base;
19
+        $this->icon     = (strpos($block_icon, 'fa') === 0) ? esc_attr($this->widget->options['block-icon']) : 'fas fa-globe-americas';
20
+
21
+        parent::__construct($element);
22
+    }
23
+
24
+    /**
25
+     * Set the element name.
26
+     *
27
+     * @return array|string|string[]|null
28
+     */
29
+    public function get_label() {
30
+        $escaped_text = esc_attr( $this->widget->name );
31
+        return str_replace( ' &gt; ', ' > ', $escaped_text ); // keep our > but have it safe
32
+    }
33
+
34
+    /**
35
+     * Bricks function to set the controls
36
+     *
37
+     * @return void
38
+     */
39
+    public function set_controls() {
40
+        $args = $this->sd_convert_arguments($this->widget);
41
+
42
+        if (!empty($args)) {
43
+            $this->controls = $this->controls + $args;
44
+        }
45
+
46
+    }
47
+
48
+    /**
49
+     * Set the bricks control groups from the GD ones.
50
+     *
51
+     * @return void
52
+     */
53
+    public function set_control_groups() {
54
+        $args = $this->sd_get_arguments();
55
+
56
+        $groups = array();
57
+        if(!empty($args)) {
58
+            foreach ($args as $k => $v) {
59
+                $g_slug = !empty($v['group']) ? sanitize_title( $v['group'] ) : '';
60
+                if($g_slug && empty($groups[$g_slug])) {
61
+                    $groups[$g_slug] = array(
62
+                        'title' => esc_html( $v['group'] ),
63
+                        'tab' => 'content',
64
+                    );
65
+                }
66
+            }
67
+        }
68
+
69
+        if(!empty($groups)) {
70
+            $this->control_groups = $this->control_groups + $groups;
71
+        }
72
+
73
+    }
74
+
75
+    /**
76
+     * Get the setting input arguments.
77
+     *
78
+     * @return mixed
79
+     */
80
+    public function sd_get_arguments() {
81
+        $args = $this->widget->set_arguments();
82
+        $arg_keys_subtract = $this->sd_remove_arguments();
83
+
84
+        if ( ! empty( $arg_keys_subtract ) ) {
85
+            foreach($arg_keys_subtract as $key ){
86
+                unset($args[$key]);
87
+            }
88
+        }
89
+
90
+        return $args;
91
+    }
92
+
93
+
94
+    /**
95
+     * Simply use our own render function for the output.
96
+     *
97
+     * @return void
98
+     */
99
+    public function render() {
100
+        $settings   = $this->sd_maybe_convert_values( $this->settings );
101
+
102
+
103
+        // set the AyeCode UI calss on the wrapper
104
+        $this->set_attribute( '_root', 'class', 'bsui' );
105
+
106
+        // we might need to add a placeholder here for previews.
107
+
108
+        // add the bricks attributes to wrapper
109
+        echo "<div {$this->render_attributes( '_root' )}>";
110
+        echo $this->widget->output($settings);
111
+        echo '</div>';
112
+    }
113
+
114
+    /**
115
+     * Values can never be arrays so convert if bricks setting make it an array.
116
+     *
117
+     * @param $settings
118
+     * @return mixed
119
+     */
120
+    public function sd_maybe_convert_values( $settings ) {
121
+
122
+
123
+        if (!empty($settings)) {
124
+            foreach( $settings as $k => $v ) {
125
+                if(is_array($v)) {
126
+                    $value = '';
127
+                    // is color
128
+                    if (isset($v['hex'])) {
129
+                        $value = $v['hex'];
130
+                    } elseif (isset($v['icon'])) {
131
+                        $value = $v['icon'];
132
+                    }
133
+
134
+
135
+                    // set the value
136
+                    $settings[$k] = $value;
137
+                }
138
+
139
+            }
140
+        }
141
+
142
+        return $settings;
143
+    }
144
+
145
+    /**
146
+     * Convert SD arguments to Bricks arguments.
147
+     *
148
+     * @param $widget
149
+     *
150
+     * @return array
151
+     */
152
+    public function sd_convert_arguments()
153
+    {
154
+        $bricks_args = array();
155
+
156
+        $args = $this->sd_get_arguments();
157
+
158
+        if (!empty($args)) {
159
+            foreach ($args as $key => $arg) {
160
+
161
+                // convert title
162
+                if (!empty($arg['title'])) {
163
+                    $arg['label'] = $arg['title'];
164
+                    unset($arg['title']);
165
+                }
166
+
167
+                // set fields not to use dynamic data
168
+                $arg['hasDynamicData'] = false;
169
+
170
+                if (!empty($arg['group'])) {
171
+                    $arg['group'] =  sanitize_title($arg['group']);
172
+                }
173
+
174
+                $arg['rerender'] = true;
175
+
176
+                // required
177
+                if(!empty($arg['element_require'])) {
178
+                    $arg['required'] = $this->sd_convert_required($arg['element_require']);
179
+                    unset($arg['element_require']);
180
+                }
181
+
182
+                // icons
183
+                if ('icon' === $key) {
184
+                    $arg['type'] = 'icon';
185
+                }
186
+
187
+                $bricks_args[$key] = $arg;
188
+
189
+            }
190
+
191
+        }
192
+
193
+        return $bricks_args;
194
+
195
+    }
196
+
197
+    /**
198
+     * Convert the SD element_required to the Bricks required syntax.
199
+     *
200
+     * @param $element_require
201
+     * @return array
202
+     */
203
+    public function sd_convert_required($element_require) {
204
+        $bricks_required = [];
205
+
206
+        // Handle logical OR (||) for multiple values
207
+        if (strpos($element_require, '||') !== false) {
208
+            preg_match('/\[%(.+?)%\] *== *"(.*?)"/', $element_require, $matches);
209
+            if ($matches) {
210
+                $control_id = $matches[1];
211
+                preg_match_all('/\[%.*?%\] *== *"(.*?)"/', $element_require, $value_matches);
212
+                $values = $value_matches[1];
213
+                $bricks_required[] = [$control_id, '=', $values];
214
+            }
215
+            return $bricks_required;
216
+        }
217
+
218
+        // Match individual conditions
219
+        preg_match_all('/(!)?\[%(.*?)%\](?:\s*([!=<>]=?)\s*(".*?"|\'.*?\'|\d+))?/', $element_require, $matches, PREG_SET_ORDER);
220
+
221
+        foreach ($matches as $match) {
222
+            $is_negation = isset($match[1]) && $match[1] === '!';
223
+            $control_id = $match[2];
224
+            $operator = isset($match[3]) ? str_replace('==', '=', $match[3]) : ($is_negation ? '=' : '!=');
225
+            $value = isset($match[4]) ? trim($match[4], '"\'') : ($is_negation ? '' : '');
226
+
227
+            // Adjust for negation without explicit operator
228
+            if ($is_negation && !isset($match[3])) {
229
+                $operator = '=';
230
+                $value = '';
231
+            }
232
+
233
+            $bricks_required[] = [$control_id, $operator, $value];
234
+        }
235
+
236
+        return $bricks_required;
237
+    }
238
+
239
+
240
+    /**
241
+     * A way to remove some settings by keys.
242
+     *
243
+     * @return array
244
+     */
245
+    public function sd_remove_arguments()
246
+    {
247
+        return array();
248
+    }
249 249
 
250 250
 }
251 251
 
@@ -255,12 +255,12 @@  discard block
 block discarded – undo
255 255
  */
256 256
 add_action( 'wp_enqueue_scripts', function() {
257 257
 
258
-	// Check if we're in the Bricks Editor
259
-	if ( isset( $_GET['bricks'] ) && $_GET['bricks'] && bricks_is_builder_main() ) {
260
-		// Add inline script to the 'bricks-builder' script
261
-		wp_add_inline_script(
262
-			'bricks-builder',
263
-			"
258
+    // Check if we're in the Bricks Editor
259
+    if ( isset( $_GET['bricks'] ) && $_GET['bricks'] && bricks_is_builder_main() ) {
260
+        // Add inline script to the 'bricks-builder' script
261
+        wp_add_inline_script(
262
+            'bricks-builder',
263
+            "
264 264
 
265 265
 (function () {
266 266
     // Function to get the current breakpoint from the #bricks-preview class
@@ -467,6 +467,6 @@  discard block
 block discarded – undo
467 467
     addIconsToLabels();
468 468
 })();
469 469
 "
470
-		);
471
-	}
470
+        );
471
+    }
472 472
 });
Please login to merge, or discard this patch.
includes/class-wpinv-privacy.php 1 patch
Indentation   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -29,7 +29,7 @@  discard block
 block discarded – undo
29 29
         add_action( 'init', array( $this, 'register_erasers_exporters' ) );
30 30
     }
31 31
 
32
-   /**
32
+    /**
33 33
      * Initial registration of privacy erasers and exporters.
34 34
      *
35 35
      * Due to the use of translation functions, this should run only after plugins loaded.
@@ -49,25 +49,25 @@  discard block
 block discarded – undo
49 49
     public function get_privacy_message() {
50 50
 
51 51
         $content = '<div class="wp-suggested-text">' .
52
-                   '<h2>' . __( 'Invoices and checkout', 'invoicing' ) . '</h2>' .
53
-                   '<p class="privacy-policy-tutorial">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' .
54
-                   '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' .
55
-                   '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' .
56
-                   '<ul>' .
57
-                   '<li>' . __( '- Send you important account/invoice/service information.', 'invoicing' ) . '</li>' .
58
-                   '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' .
59
-                   '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' .
60
-                   '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
61
-                   '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' .
62
-                   '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
63
-                   '</ul>' .
64
-                   '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' .
65
-                   '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' .
66
-                   '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' .
67
-                   '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' .
68
-                   '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' .
69
-                   '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>' .
70
-                   '</div>';
52
+                    '<h2>' . __( 'Invoices and checkout', 'invoicing' ) . '</h2>' .
53
+                    '<p class="privacy-policy-tutorial">' . __( 'Example privacy texts.', 'invoicing' ) . '</p>' .
54
+                    '<p>' . __( 'We collect information about you during the checkout process on our site. This information may include, but is not limited to, your name, email address, phone number, address, IP and any other details that might be requested from you for the purpose of processing your payment and retaining your invoice details for legal reasons.', 'invoicing' ) . '</p>' .
55
+                    '<p>' . __( 'Handling this data also allows us to:', 'invoicing' ) . '</p>' .
56
+                    '<ul>' .
57
+                    '<li>' . __( '- Send you important account/invoice/service information.', 'invoicing' ) . '</li>' .
58
+                    '<li>' . __( '- Estimate taxes based on your location.', 'invoicing' ) . '</li>' .
59
+                    '<li>' . __( '- Respond to your queries or complaints.', 'invoicing' ) . '</li>' .
60
+                    '<li>' . __( '- Process payments and to prevent fraudulent transactions. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
61
+                    '<li>' . __( '- Retain historical payment and invoice history. We do this on the basis of legal obligations.', 'invoicing' ) . '</li>' .
62
+                    '<li>' . __( '- Set up and administer your account, provide technical and/or customer support, and to verify your identity. We do this on the basis of our legitimate business interests.', 'invoicing' ) . '</li>' .
63
+                    '</ul>' .
64
+                    '<p>' . __( 'In addition to collecting information at checkout we may also use and store your contact details when manually creating invoices for require payments relating to prior contractual agreements or agreed terms.', 'invoicing' ) . '</p>' .
65
+                    '<h2>' . __( 'What we share with others', 'invoicing' ) . '</h2>' .
66
+                    '<p>' . __( 'We share information with third parties who help us provide our payment and invoicing services to you; for example --', 'invoicing' ) . '</p>' .
67
+                    '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list which third party payment processors you’re using to take payments since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'invoicing' ) . '</p>' .
68
+                    '<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'invoicing' ) . '</p>' .
69
+                    '<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'invoicing' ) . '</p>' .
70
+                    '</div>';
71 71
 
72 72
         return apply_filters( 'wpinv_privacy_policy_content', $content );
73 73
     }
Please login to merge, or discard this patch.
includes/class-getpaid-invoice-notification-emails.php 1 patch
Indentation   +469 added lines, -469 removed lines patch added patch discarded remove patch
@@ -12,492 +12,492 @@
 block discarded – undo
12 12
  */
13 13
 class GetPaid_Invoice_Notification_Emails {
14 14
 
15
-	/**
16
-	 * The array of invoice email actions.
17
-	 *
18
-	 * @param array
19
-	 */
20
-	public $invoice_actions;
21
-
22
-	/**
23
-	 * Class constructor
24
-	 *
25
-	 */
26
-	public function __construct() {
27
-
28
-		$this->invoice_actions = apply_filters(
29
-			'getpaid_notification_email_invoice_triggers',
30
-			array(
31
-				'getpaid_new_invoice'                   => array( 'new_invoice', 'user_invoice' ),
32
-				'getpaid_invoice_status_wpi-cancelled'  => 'cancelled_invoice',
33
-				'getpaid_invoice_status_wpi-failed'     => 'failed_invoice',
34
-				'getpaid_invoice_status_wpi-onhold'     => 'onhold_invoice',
35
-				'getpaid_invoice_status_wpi-processing' => 'processing_invoice',
36
-				'getpaid_invoice_status_publish'        => 'completed_invoice',
37
-				'getpaid_invoice_status_wpi-renewal'    => 'completed_invoice',
38
-				'getpaid_invoice_status_wpi-refunded'   => 'refunded_invoice',
39
-				'getpaid_new_customer_note'             => 'user_note',
40
-				'getpaid_daily_maintenance'             => 'overdue',
41
-			)
42
-		);
43
-
44
-		add_action( 'init', array( $this, 'init_hooks' ) );
45
-	}
46
-
47
-	/**
48
-	 * Registers email hooks.
49
-	 */
50
-	public function init_hooks() {
51
-
52
-		add_filter( 'getpaid_get_email_merge_tags', array( $this, 'invoice_merge_tags' ), 10, 2 );
53
-		add_filter( 'getpaid_invoice_email_recipients', array( $this, 'filter_email_recipients' ), 10, 2 );
54
-
55
-		foreach ( $this->invoice_actions as $hook => $email_type ) {
56
-			$this->init_email_type_hook( $hook, $email_type );
57
-		}
58
-	}
59
-
60
-	/**
61
-	 * Registers an email hook for an invoice action.
62
-	 *
63
-	 * @param string $hook
64
-	 * @param string|array $email_type
65
-	 */
66
-	public function init_email_type_hook( $hook, $email_type ) {
67
-
68
-		$email_type = wpinv_parse_list( $email_type );
69
-
70
-		foreach ( $email_type as $type ) {
71
-
72
-			$email = new GetPaid_Notification_Email( $type );
73
-
74
-			// Abort if it is not active.
75
-			if ( ! $email->is_active() ) {
76
-				continue;
77
-			}
78
-
79
-			if ( method_exists( $this, $type ) ) {
80
-				add_action( $hook, array( $this, $type ), 100, 2 );
81
-				continue;
82
-			}
83
-
84
-			do_action( 'getpaid_invoice_init_email_type_hook', $type, $hook );
85
-		}
86
-
87
-	}
88
-
89
-	/**
90
-	 * Filters invoice merge tags.
91
-	 *
92
-	 * @param array $merge_tags
93
-	 * @param mixed|WPInv_Invoice|WPInv_Subscription $object
94
-	 */
95
-	public function invoice_merge_tags( $merge_tags, $object ) {
96
-
97
-		if ( is_a( $object, 'WPInv_Invoice' ) ) {
98
-			return array_merge(
99
-				$merge_tags,
100
-				$this->get_invoice_merge_tags( $object )
101
-			);
102
-		}
103
-
104
-		if ( is_a( $object, 'WPInv_Subscription' ) ) {
105
-			return array_merge(
106
-				$merge_tags,
107
-				$this->get_invoice_merge_tags( $object->get_parent_payment() )
108
-			);
109
-		}
110
-
111
-		return $merge_tags;
112
-
113
-	}
114
-
115
-	/**
116
-	 * Generates invoice merge tags.
117
-	 *
118
-	 * @param WPInv_Invoice $invoice
119
-	 * @return array
120
-	 */
121
-	public function get_invoice_merge_tags( $invoice ) {
122
-
123
-		// Abort if it does not exist.
124
-		if ( ! $invoice->get_id() ) {
125
-			return array();
126
-		}
127
-
128
-		$due_date   = $invoice->get_due_date();
129
-		$due_date   = empty( $due_date ) ? time() + MINUTE_IN_SECONDS : strtotime( $due_date ) + ( (int) get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
130
-		$merge_tags = array(
131
-			'{name}'                 => sanitize_text_field( $invoice->get_user_full_name() ),
132
-			'{full_name}'            => sanitize_text_field( $invoice->get_user_full_name() ),
133
-			'{first_name}'           => sanitize_text_field( $invoice->get_first_name() ),
134
-			'{last_name}'            => sanitize_text_field( $invoice->get_last_name() ),
135
-			'{email}'                => sanitize_email( $invoice->get_email() ),
136
-			'{invoice_number}'       => sanitize_text_field( $invoice->get_number() ),
137
-			'{invoice_currency}'     => sanitize_text_field( $invoice->get_currency() ),
138
-			'{invoice_total}'        => sanitize_text_field( wpinv_price( $invoice->get_total(), $invoice->get_currency() ) ),
139
-			'{invoice_link}'         => esc_url( $invoice->get_view_url() ),
140
-			'{invoice_pay_link}'     => esc_url( $invoice->get_checkout_payment_url() ),
141
-			'{invoice_receipt_link}' => esc_url( $invoice->get_receipt_url() ),
142
-			'{invoice_date}'         => getpaid_format_date_value( $invoice->get_date_created() ),
143
-			'{invoice_due_date}'     => getpaid_format_date_value( $invoice->get_due_date(), __( 'on receipt', 'invoicing' ) ),
144
-			'{invoice_quote}'        => sanitize_text_field( strtolower( $invoice->get_label() ) ),
145
-			'{invoice_label}'        => sanitize_text_field( ucfirst( $invoice->get_label() ) ),
146
-			'{invoice_description}'  => wp_kses_post( $invoice->get_description() ),
147
-			'{subscription_name}'    => wp_kses_post( $invoice->get_subscription_name() ),
148
-			'{is_was}'               => $due_date < time() ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ),
149
-		);
150
-
151
-		$payment_form_data = $invoice->get_meta( 'payment_form_data', true );
152
-
153
-		if ( is_array( $payment_form_data ) ) {
154
-
155
-			foreach ( $payment_form_data as $label => $value ) {
156
-
157
-				$label = preg_replace( '/[^a-z0-9]+/', '_', strtolower( $label ) );
158
-				$value = is_array( $value ) ? implode( ', ', $value ) : $value;
159
-
160
-				if ( is_scalar( $value ) ) {
161
-					$merge_tags[ "{{$label}}" ] = wp_kses_post( $value );
162
-				}
163
-			}
164
-		}
165
-
166
-		return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice );
167
-	}
168
-
169
-	/**
170
-	 * Helper function to send an email.
171
-	 *
172
-	 * @param WPInv_Invoice $invoice
173
-	 * @param GetPaid_Notification_Email $email
174
-	 * @param string $type
175
-	 * @param string|array $recipients
176
-	 * @param array $extra_args Extra template args.
177
-	 */
178
-	public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) {
179
-
180
-		do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email );
181
-
182
-		$skip = $invoice->is_free() && wpinv_get_option( 'skip_email_free_invoice' );
183
-		if ( apply_filters( 'getpaid_skip_invoice_email', $skip, $type, $invoice ) ) {
184
-			return;
185
-		}
186
-
187
-		$mailer     = new GetPaid_Notification_Email_Sender();
188
-		$merge_tags = $email->get_merge_tags();
189
-
190
-		$result = $mailer->send(
191
-			apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ),
192
-			$email->add_merge_tags( $email->get_subject(), $merge_tags ),
193
-			$email->get_content( $merge_tags, $extra_args ),
194
-			$email->get_attachments()
195
-		);
196
-
197
-		// Maybe send a copy to the admin.
198
-		if ( $email->include_admin_bcc() ) {
199
-			$mailer->send(
200
-				wpinv_get_admin_email(),
201
-				$email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ),
202
-				$email->get_content( $merge_tags ),
203
-				$email->get_attachments()
204
-			);
205
-		}
206
-
207
-		if ( $result ) {
208
-			$invoice->add_system_note(
209
-				sprintf(
210
-					// translators: %1 is the email type, %2 is the invoice recipient.
211
-					__( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
212
-					sanitize_key( $type ),
213
-					$email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
214
-				)
215
-			);
216
-		} else {
217
-			$invoice->add_system_note(
218
-				sprintf(
219
-					// translators: %1 is the email type, %2 is the invoice recipient.
220
-					__( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
221
-					sanitize_key( $type ),
222
-					$email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
223
-				)
224
-			);
225
-		}
226
-
227
-		do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email );
228
-
229
-		return $result;
230
-	}
231
-
232
-	/**
233
-	 * Also send emails to any cc users.
234
-	 *
235
-	 * @param array $recipients
236
-	 * @param GetPaid_Notification_Email $email
237
-	 */
238
-	public function filter_email_recipients( $recipients, $email ) {
239
-
240
-		if ( ! $email->is_admin_email() ) {
241
-			$cc   = $email->object->get_email_cc();
242
-			$cc_2 = get_user_meta( $email->object->get_user_id(), '_wpinv_email_cc', true );
243
-
244
-			if ( ! empty( $cc ) ) {
245
-				$cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
246
-				$recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
247
-			}
248
-
249
-			if ( ! empty( $cc_2 ) ) {
250
-				$cc_2 = array_map( 'sanitize_email', wpinv_parse_list( $cc_2 ) );
251
-				$recipients = array_filter( array_unique( array_merge( $recipients, $cc_2 ) ) );
252
-			}
253
-		}
254
-
255
-		return $recipients;
256
-
257
-	}
258
-
259
-	/**
260
-	 * Sends a new invoice notification.
261
-	 *
262
-	 * @param WPInv_Invoice $invoice
263
-	 */
264
-	public function new_invoice( $invoice ) {
265
-
266
-		// Only send this email for invoices created via the admin page.
267
-		if ( ! $invoice->is_type( 'invoice' ) || $invoice->is_paid() || $this->is_payment_form_invoice( $invoice->get_id() ) ) {
268
-			return;
269
-		}
270
-
271
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
272
-		$recipient = wpinv_get_admin_email();
273
-
274
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
275
-
276
-	}
277
-
278
-	/**
279
-	 * Sends a cancelled invoice notification.
280
-	 *
281
-	 * @param WPInv_Invoice $invoice
282
-	 */
283
-	public function cancelled_invoice( $invoice ) {
284
-
285
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
286
-		$recipient = $invoice->get_email();
287
-
288
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
289
-	}
290
-
291
-	/**
292
-	 * Sends a failed invoice notification.
293
-	 *
294
-	 * @param WPInv_Invoice $invoice
295
-	 */
296
-	public function failed_invoice( $invoice ) {
297
-
298
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
299
-		$recipient = wpinv_get_admin_email();
300
-
301
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
302
-
303
-	}
304
-
305
-	/**
306
-	 * Sends a notification whenever an invoice is put on hold.
307
-	 *
308
-	 * @param WPInv_Invoice $invoice
309
-	 */
310
-	public function onhold_invoice( $invoice ) {
311
-
312
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
313
-		$recipient = $invoice->get_email();
314
-
315
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
316
-
317
-	}
318
-
319
-	/**
320
-	 * Sends a notification whenever an invoice is marked as processing payment.
321
-	 *
322
-	 * @param WPInv_Invoice $invoice
323
-	 */
324
-	public function processing_invoice( $invoice ) {
325
-
326
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
327
-		$recipient = $invoice->get_email();
328
-
329
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
330
-
331
-	}
332
-
333
-	/**
334
-	 * Sends a notification whenever an invoice is paid.
335
-	 *
336
-	 * @param WPInv_Invoice $invoice
337
-	 */
338
-	public function completed_invoice( $invoice ) {
339
-
340
-		// (Maybe) abort if it is a renewal invoice.
341
-		if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) {
342
-			return;
343
-		}
344
-
345
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
346
-		$recipient = $invoice->get_email();
347
-
348
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
349
-
350
-	}
15
+    /**
16
+     * The array of invoice email actions.
17
+     *
18
+     * @param array
19
+     */
20
+    public $invoice_actions;
21
+
22
+    /**
23
+     * Class constructor
24
+     *
25
+     */
26
+    public function __construct() {
27
+
28
+        $this->invoice_actions = apply_filters(
29
+            'getpaid_notification_email_invoice_triggers',
30
+            array(
31
+                'getpaid_new_invoice'                   => array( 'new_invoice', 'user_invoice' ),
32
+                'getpaid_invoice_status_wpi-cancelled'  => 'cancelled_invoice',
33
+                'getpaid_invoice_status_wpi-failed'     => 'failed_invoice',
34
+                'getpaid_invoice_status_wpi-onhold'     => 'onhold_invoice',
35
+                'getpaid_invoice_status_wpi-processing' => 'processing_invoice',
36
+                'getpaid_invoice_status_publish'        => 'completed_invoice',
37
+                'getpaid_invoice_status_wpi-renewal'    => 'completed_invoice',
38
+                'getpaid_invoice_status_wpi-refunded'   => 'refunded_invoice',
39
+                'getpaid_new_customer_note'             => 'user_note',
40
+                'getpaid_daily_maintenance'             => 'overdue',
41
+            )
42
+        );
43
+
44
+        add_action( 'init', array( $this, 'init_hooks' ) );
45
+    }
46
+
47
+    /**
48
+     * Registers email hooks.
49
+     */
50
+    public function init_hooks() {
51
+
52
+        add_filter( 'getpaid_get_email_merge_tags', array( $this, 'invoice_merge_tags' ), 10, 2 );
53
+        add_filter( 'getpaid_invoice_email_recipients', array( $this, 'filter_email_recipients' ), 10, 2 );
54
+
55
+        foreach ( $this->invoice_actions as $hook => $email_type ) {
56
+            $this->init_email_type_hook( $hook, $email_type );
57
+        }
58
+    }
59
+
60
+    /**
61
+     * Registers an email hook for an invoice action.
62
+     *
63
+     * @param string $hook
64
+     * @param string|array $email_type
65
+     */
66
+    public function init_email_type_hook( $hook, $email_type ) {
67
+
68
+        $email_type = wpinv_parse_list( $email_type );
69
+
70
+        foreach ( $email_type as $type ) {
71
+
72
+            $email = new GetPaid_Notification_Email( $type );
73
+
74
+            // Abort if it is not active.
75
+            if ( ! $email->is_active() ) {
76
+                continue;
77
+            }
78
+
79
+            if ( method_exists( $this, $type ) ) {
80
+                add_action( $hook, array( $this, $type ), 100, 2 );
81
+                continue;
82
+            }
83
+
84
+            do_action( 'getpaid_invoice_init_email_type_hook', $type, $hook );
85
+        }
86
+
87
+    }
88
+
89
+    /**
90
+     * Filters invoice merge tags.
91
+     *
92
+     * @param array $merge_tags
93
+     * @param mixed|WPInv_Invoice|WPInv_Subscription $object
94
+     */
95
+    public function invoice_merge_tags( $merge_tags, $object ) {
96
+
97
+        if ( is_a( $object, 'WPInv_Invoice' ) ) {
98
+            return array_merge(
99
+                $merge_tags,
100
+                $this->get_invoice_merge_tags( $object )
101
+            );
102
+        }
103
+
104
+        if ( is_a( $object, 'WPInv_Subscription' ) ) {
105
+            return array_merge(
106
+                $merge_tags,
107
+                $this->get_invoice_merge_tags( $object->get_parent_payment() )
108
+            );
109
+        }
110
+
111
+        return $merge_tags;
112
+
113
+    }
114
+
115
+    /**
116
+     * Generates invoice merge tags.
117
+     *
118
+     * @param WPInv_Invoice $invoice
119
+     * @return array
120
+     */
121
+    public function get_invoice_merge_tags( $invoice ) {
122
+
123
+        // Abort if it does not exist.
124
+        if ( ! $invoice->get_id() ) {
125
+            return array();
126
+        }
127
+
128
+        $due_date   = $invoice->get_due_date();
129
+        $due_date   = empty( $due_date ) ? time() + MINUTE_IN_SECONDS : strtotime( $due_date ) + ( (int) get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
130
+        $merge_tags = array(
131
+            '{name}'                 => sanitize_text_field( $invoice->get_user_full_name() ),
132
+            '{full_name}'            => sanitize_text_field( $invoice->get_user_full_name() ),
133
+            '{first_name}'           => sanitize_text_field( $invoice->get_first_name() ),
134
+            '{last_name}'            => sanitize_text_field( $invoice->get_last_name() ),
135
+            '{email}'                => sanitize_email( $invoice->get_email() ),
136
+            '{invoice_number}'       => sanitize_text_field( $invoice->get_number() ),
137
+            '{invoice_currency}'     => sanitize_text_field( $invoice->get_currency() ),
138
+            '{invoice_total}'        => sanitize_text_field( wpinv_price( $invoice->get_total(), $invoice->get_currency() ) ),
139
+            '{invoice_link}'         => esc_url( $invoice->get_view_url() ),
140
+            '{invoice_pay_link}'     => esc_url( $invoice->get_checkout_payment_url() ),
141
+            '{invoice_receipt_link}' => esc_url( $invoice->get_receipt_url() ),
142
+            '{invoice_date}'         => getpaid_format_date_value( $invoice->get_date_created() ),
143
+            '{invoice_due_date}'     => getpaid_format_date_value( $invoice->get_due_date(), __( 'on receipt', 'invoicing' ) ),
144
+            '{invoice_quote}'        => sanitize_text_field( strtolower( $invoice->get_label() ) ),
145
+            '{invoice_label}'        => sanitize_text_field( ucfirst( $invoice->get_label() ) ),
146
+            '{invoice_description}'  => wp_kses_post( $invoice->get_description() ),
147
+            '{subscription_name}'    => wp_kses_post( $invoice->get_subscription_name() ),
148
+            '{is_was}'               => $due_date < time() ? __( 'was', 'invoicing' ) : __( 'is', 'invoicing' ),
149
+        );
150
+
151
+        $payment_form_data = $invoice->get_meta( 'payment_form_data', true );
152
+
153
+        if ( is_array( $payment_form_data ) ) {
154
+
155
+            foreach ( $payment_form_data as $label => $value ) {
156
+
157
+                $label = preg_replace( '/[^a-z0-9]+/', '_', strtolower( $label ) );
158
+                $value = is_array( $value ) ? implode( ', ', $value ) : $value;
159
+
160
+                if ( is_scalar( $value ) ) {
161
+                    $merge_tags[ "{{$label}}" ] = wp_kses_post( $value );
162
+                }
163
+            }
164
+        }
165
+
166
+        return apply_filters( 'getpaid_invoice_email_merge_tags', $merge_tags, $invoice );
167
+    }
351 168
 
352
-	/**
353
-	 * Sends a notification whenever an invoice is refunded.
354
-	 *
355
-	 * @param WPInv_Invoice $invoice
356
-	 */
357
-	public function refunded_invoice( $invoice ) {
358
-
359
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
360
-		$recipient = $invoice->get_email();
361
-
362
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
363
-
364
-	}
169
+    /**
170
+     * Helper function to send an email.
171
+     *
172
+     * @param WPInv_Invoice $invoice
173
+     * @param GetPaid_Notification_Email $email
174
+     * @param string $type
175
+     * @param string|array $recipients
176
+     * @param array $extra_args Extra template args.
177
+     */
178
+    public function send_email( $invoice, $email, $type, $recipients, $extra_args = array() ) {
365 179
 
366
-	/**
367
-	 * Notifies a user about new invoices
368
-	 *
369
-	 * @param WPInv_Invoice $invoice
370
-	 * @param bool $force
371
-	 */
372
-	public function user_invoice( $invoice, $force = false ) {
180
+        do_action( 'getpaid_before_send_invoice_notification', $type, $invoice, $email );
373 181
 
374
-		if ( ! $force && ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) {
375
-			return;
376
-		}
377
-
378
-		// Only send this email for invoices created via the admin page.
379
-		if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $invoice->is_paid() ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) {
380
-			return;
381
-		}
382
-
383
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
384
-		$recipient = $invoice->get_email();
385
-
386
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
387
-
388
-	}
389
-
390
-	/**
391
-	 * Checks if an invoice is a payment form invoice.
392
-	 *
393
-	 * @param int $invoice
394
-	 * @return bool
395
-	 */
396
-	public function is_payment_form_invoice( $invoice ) {
397
-		$created_via             = get_post_meta( $invoice, 'wpinv_created_via', true );
398
-		$is_payment_form_invoice = 'payment_form' === $created_via || 'geodirectory' === $created_via;
399
-		$is_payment_form_invoice = apply_filters( 'getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice );
400
-		return empty( $_GET['getpaid-admin-action'] ) && $is_payment_form_invoice;
401
-	}
402
-
403
-	/**
404
-	 * Notifies admin about new invoice notes
405
-	 *
406
-	 * @param WPInv_Invoice $invoice
407
-	 * @param string $note
408
-	 */
409
-	public function user_note( $invoice, $note ) {
410
-
411
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
412
-		$recipient = $invoice->get_email();
413
-
414
-		return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) );
415
-
416
-	}
417
-
418
-	/**
419
-	 * (Force) Sends overdue notices.
420
-	 *
421
-	 * @param WPInv_Invoice $invoice
422
-	 */
423
-	public function force_send_overdue_notice( $invoice ) {
424
-		$email = new GetPaid_Notification_Email( 'overdue', $invoice );
425
-		return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() );
426
-	}
427
-
428
-	/**
429
-	 * Sends overdue notices.
430
-	 *
431
-	 * @TODO: Create an invoices query class.
432
-	 */
433
-	public function overdue() {
434
-		global $wpdb;
435
-
436
-		$email = new GetPaid_Notification_Email( __FUNCTION__ );
437
-
438
-		// Fetch reminder days.
439
-		$reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
440
-
441
-		// Abort if non is set.
442
-		if ( empty( $reminder_days ) ) {
443
-			return;
444
-		}
445
-
446
-		// Retrieve date query.
447
-		$date_query = $this->get_date_query( $reminder_days );
448
-
449
-		// Invoices table.
450
-		$table = $wpdb->prefix . 'getpaid_invoices';
451
-
452
-		// Fetch invoices.
453
-		$invoices  = $wpdb->get_col(
454
-			"SELECT posts.ID FROM $wpdb->posts as posts
182
+        $skip = $invoice->is_free() && wpinv_get_option( 'skip_email_free_invoice' );
183
+        if ( apply_filters( 'getpaid_skip_invoice_email', $skip, $type, $invoice ) ) {
184
+            return;
185
+        }
186
+
187
+        $mailer     = new GetPaid_Notification_Email_Sender();
188
+        $merge_tags = $email->get_merge_tags();
189
+
190
+        $result = $mailer->send(
191
+            apply_filters( 'getpaid_invoice_email_recipients', wpinv_parse_list( $recipients ), $email ),
192
+            $email->add_merge_tags( $email->get_subject(), $merge_tags ),
193
+            $email->get_content( $merge_tags, $extra_args ),
194
+            $email->get_attachments()
195
+        );
196
+
197
+        // Maybe send a copy to the admin.
198
+        if ( $email->include_admin_bcc() ) {
199
+            $mailer->send(
200
+                wpinv_get_admin_email(),
201
+                $email->add_merge_tags( $email->get_subject() . __( ' - ADMIN BCC COPY', 'invoicing' ), $merge_tags ),
202
+                $email->get_content( $merge_tags ),
203
+                $email->get_attachments()
204
+            );
205
+        }
206
+
207
+        if ( $result ) {
208
+            $invoice->add_system_note(
209
+                sprintf(
210
+                    // translators: %1 is the email type, %2 is the invoice recipient.
211
+                    __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
212
+                    sanitize_key( $type ),
213
+                    $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
214
+                )
215
+            );
216
+        } else {
217
+            $invoice->add_system_note(
218
+                sprintf(
219
+                    // translators: %1 is the email type, %2 is the invoice recipient.
220
+                    __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
221
+                    sanitize_key( $type ),
222
+                    $email->is_admin_email() ? __( 'admin', 'invoicing' ) : __( 'the customer', 'invoicing' )
223
+                )
224
+            );
225
+        }
226
+
227
+        do_action( 'getpaid_after_send_invoice_notification', $type, $invoice, $email );
228
+
229
+        return $result;
230
+    }
231
+
232
+    /**
233
+     * Also send emails to any cc users.
234
+     *
235
+     * @param array $recipients
236
+     * @param GetPaid_Notification_Email $email
237
+     */
238
+    public function filter_email_recipients( $recipients, $email ) {
239
+
240
+        if ( ! $email->is_admin_email() ) {
241
+            $cc   = $email->object->get_email_cc();
242
+            $cc_2 = get_user_meta( $email->object->get_user_id(), '_wpinv_email_cc', true );
243
+
244
+            if ( ! empty( $cc ) ) {
245
+                $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
246
+                $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
247
+            }
248
+
249
+            if ( ! empty( $cc_2 ) ) {
250
+                $cc_2 = array_map( 'sanitize_email', wpinv_parse_list( $cc_2 ) );
251
+                $recipients = array_filter( array_unique( array_merge( $recipients, $cc_2 ) ) );
252
+            }
253
+        }
254
+
255
+        return $recipients;
256
+
257
+    }
258
+
259
+    /**
260
+     * Sends a new invoice notification.
261
+     *
262
+     * @param WPInv_Invoice $invoice
263
+     */
264
+    public function new_invoice( $invoice ) {
265
+
266
+        // Only send this email for invoices created via the admin page.
267
+        if ( ! $invoice->is_type( 'invoice' ) || $invoice->is_paid() || $this->is_payment_form_invoice( $invoice->get_id() ) ) {
268
+            return;
269
+        }
270
+
271
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
272
+        $recipient = wpinv_get_admin_email();
273
+
274
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
275
+
276
+    }
277
+
278
+    /**
279
+     * Sends a cancelled invoice notification.
280
+     *
281
+     * @param WPInv_Invoice $invoice
282
+     */
283
+    public function cancelled_invoice( $invoice ) {
284
+
285
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
286
+        $recipient = $invoice->get_email();
287
+
288
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
289
+    }
290
+
291
+    /**
292
+     * Sends a failed invoice notification.
293
+     *
294
+     * @param WPInv_Invoice $invoice
295
+     */
296
+    public function failed_invoice( $invoice ) {
297
+
298
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
299
+        $recipient = wpinv_get_admin_email();
300
+
301
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
302
+
303
+    }
304
+
305
+    /**
306
+     * Sends a notification whenever an invoice is put on hold.
307
+     *
308
+     * @param WPInv_Invoice $invoice
309
+     */
310
+    public function onhold_invoice( $invoice ) {
311
+
312
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
313
+        $recipient = $invoice->get_email();
314
+
315
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
316
+
317
+    }
318
+
319
+    /**
320
+     * Sends a notification whenever an invoice is marked as processing payment.
321
+     *
322
+     * @param WPInv_Invoice $invoice
323
+     */
324
+    public function processing_invoice( $invoice ) {
325
+
326
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
327
+        $recipient = $invoice->get_email();
328
+
329
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
330
+
331
+    }
332
+
333
+    /**
334
+     * Sends a notification whenever an invoice is paid.
335
+     *
336
+     * @param WPInv_Invoice $invoice
337
+     */
338
+    public function completed_invoice( $invoice ) {
339
+
340
+        // (Maybe) abort if it is a renewal invoice.
341
+        if ( $invoice->is_renewal() && ! wpinv_get_option( 'email_completed_invoice_renewal_active', false ) ) {
342
+            return;
343
+        }
344
+
345
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
346
+        $recipient = $invoice->get_email();
347
+
348
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
349
+
350
+    }
351
+
352
+    /**
353
+     * Sends a notification whenever an invoice is refunded.
354
+     *
355
+     * @param WPInv_Invoice $invoice
356
+     */
357
+    public function refunded_invoice( $invoice ) {
358
+
359
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
360
+        $recipient = $invoice->get_email();
361
+
362
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
363
+
364
+    }
365
+
366
+    /**
367
+     * Notifies a user about new invoices
368
+     *
369
+     * @param WPInv_Invoice $invoice
370
+     * @param bool $force
371
+     */
372
+    public function user_invoice( $invoice, $force = false ) {
373
+
374
+        if ( ! $force && ! empty( $GLOBALS['wpinv_skip_invoice_notification'] ) ) {
375
+            return;
376
+        }
377
+
378
+        // Only send this email for invoices created via the admin page.
379
+        if ( ! $invoice->is_type( 'invoice' ) || ( empty( $force ) && $invoice->is_paid() ) || ( empty( $force ) && $this->is_payment_form_invoice( $invoice->get_id() ) ) ) {
380
+            return;
381
+        }
382
+
383
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
384
+        $recipient = $invoice->get_email();
385
+
386
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient );
387
+
388
+    }
389
+
390
+    /**
391
+     * Checks if an invoice is a payment form invoice.
392
+     *
393
+     * @param int $invoice
394
+     * @return bool
395
+     */
396
+    public function is_payment_form_invoice( $invoice ) {
397
+        $created_via             = get_post_meta( $invoice, 'wpinv_created_via', true );
398
+        $is_payment_form_invoice = 'payment_form' === $created_via || 'geodirectory' === $created_via;
399
+        $is_payment_form_invoice = apply_filters( 'getpaid_invoice_notifications_is_payment_form_invoice', $is_payment_form_invoice, $invoice );
400
+        return empty( $_GET['getpaid-admin-action'] ) && $is_payment_form_invoice;
401
+    }
402
+
403
+    /**
404
+     * Notifies admin about new invoice notes
405
+     *
406
+     * @param WPInv_Invoice $invoice
407
+     * @param string $note
408
+     */
409
+    public function user_note( $invoice, $note ) {
410
+
411
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $invoice );
412
+        $recipient = $invoice->get_email();
413
+
414
+        return $this->send_email( $invoice, $email, __FUNCTION__, $recipient, array( 'customer_note' => $note ) );
415
+
416
+    }
417
+
418
+    /**
419
+     * (Force) Sends overdue notices.
420
+     *
421
+     * @param WPInv_Invoice $invoice
422
+     */
423
+    public function force_send_overdue_notice( $invoice ) {
424
+        $email = new GetPaid_Notification_Email( 'overdue', $invoice );
425
+        return $this->send_email( $invoice, $email, 'overdue', $invoice->get_email() );
426
+    }
427
+
428
+    /**
429
+     * Sends overdue notices.
430
+     *
431
+     * @TODO: Create an invoices query class.
432
+     */
433
+    public function overdue() {
434
+        global $wpdb;
435
+
436
+        $email = new GetPaid_Notification_Email( __FUNCTION__ );
437
+
438
+        // Fetch reminder days.
439
+        $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
440
+
441
+        // Abort if non is set.
442
+        if ( empty( $reminder_days ) ) {
443
+            return;
444
+        }
445
+
446
+        // Retrieve date query.
447
+        $date_query = $this->get_date_query( $reminder_days );
448
+
449
+        // Invoices table.
450
+        $table = $wpdb->prefix . 'getpaid_invoices';
451
+
452
+        // Fetch invoices.
453
+        $invoices  = $wpdb->get_col(
454
+            "SELECT posts.ID FROM $wpdb->posts as posts
455 455
 			LEFT JOIN $table as invoices ON invoices.post_id = posts.ID
456 456
 			WHERE posts.post_type = 'wpi_invoice' AND posts.post_status = 'wpi-pending' $date_query"
457 457
         );
458 458
 
459
-		foreach ( $invoices as $invoice ) {
459
+        foreach ( $invoices as $invoice ) {
460 460
 
461
-			// Only send this email for invoices created via the admin page.
462
-			if ( ! $this->is_payment_form_invoice( $invoice ) ) {
463
-				$invoice       = new WPInv_Invoice( $invoice );
464
-				$email->object = $invoice;
461
+            // Only send this email for invoices created via the admin page.
462
+            if ( ! $this->is_payment_form_invoice( $invoice ) ) {
463
+                $invoice       = new WPInv_Invoice( $invoice );
464
+                $email->object = $invoice;
465 465
 
466
-				if ( $invoice->needs_payment() && ! $invoice->is_renewal() ) {
467
-					$this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() );
468
-				}
469
-			}
470
-		}
466
+                if ( $invoice->needs_payment() && ! $invoice->is_renewal() ) {
467
+                    $this->send_email( $invoice, $email, __FUNCTION__, $invoice->get_email() );
468
+                }
469
+            }
470
+        }
471 471
 
472
-	}
472
+    }
473 473
 
474
-	/**
475
-	 * Calculates the date query for an invoices query
476
-	 *
477
-	 * @param array $reminder_days
478
-	 * @return string
479
-	 */
480
-	public function get_date_query( $reminder_days ) {
474
+    /**
475
+     * Calculates the date query for an invoices query
476
+     *
477
+     * @param array $reminder_days
478
+     * @return string
479
+     */
480
+    public function get_date_query( $reminder_days ) {
481 481
 
482
-		$date_query = array(
483
-			'relation' => 'OR',
484
-		);
482
+        $date_query = array(
483
+            'relation' => 'OR',
484
+        );
485 485
 
486
-		foreach ( $reminder_days as $days ) {
487
-			$date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) );
486
+        foreach ( $reminder_days as $days ) {
487
+            $date = date_parse( date( 'Y-m-d', strtotime( "-$days days", current_time( 'timestamp' ) ) ) );
488 488
 
489
-			$date_query[] = array(
490
-				'year'  => $date['year'],
491
-				'month' => $date['month'],
492
-				'day'   => $date['day'],
493
-			);
489
+            $date_query[] = array(
490
+                'year'  => $date['year'],
491
+                'month' => $date['month'],
492
+                'day'   => $date['day'],
493
+            );
494 494
 
495
-		}
495
+        }
496 496
 
497
-		$date_query = new WP_Date_Query( $date_query, 'invoices.due_date' );
497
+        $date_query = new WP_Date_Query( $date_query, 'invoices.due_date' );
498 498
 
499
-		return $date_query->get_sql();
499
+        return $date_query->get_sql();
500 500
 
501
-	}
501
+    }
502 502
 
503 503
 }
Please login to merge, or discard this patch.
includes/class-getpaid-subscription-notification-emails.php 1 patch
Indentation   +284 added lines, -284 removed lines patch added patch discarded remove patch
@@ -13,324 +13,324 @@
 block discarded – undo
13 13
 class GetPaid_Subscription_Notification_Emails {
14 14
 
15 15
     /**
16
-	 * The array of subscription email actions.
17
-	 *
18
-	 * @param array
19
-	 */
20
-	public $subscription_actions;
16
+     * The array of subscription email actions.
17
+     *
18
+     * @param array
19
+     */
20
+    public $subscription_actions;
21 21
 
22 22
     /**
23
-	 * Class constructor
23
+     * Class constructor
24 24
      *
25
-	 */
26
-	public function __construct() {
27
-
28
-		$this->subscription_actions = apply_filters(
29
-			'getpaid_notification_email_subscription_triggers',
30
-			array(
31
-				'getpaid_subscription_active'    => 'subscription_active',
32
-				'getpaid_subscription_trialling' => 'subscription_trial',
33
-				'getpaid_subscription_cancelled' => 'subscription_cancelled',
34
-				'getpaid_subscription_expired'   => 'subscription_expired',
35
-				'getpaid_subscription_completed' => 'subscription_complete',
36
-				'getpaid_daily_maintenance'      => 'renewal_reminder'
37
-			)
38
-		);
39
-
40
-		add_action( 'init', array( $this, 'init_hooks' ) );
41
-	}
25
+     */
26
+    public function __construct() {
27
+
28
+        $this->subscription_actions = apply_filters(
29
+            'getpaid_notification_email_subscription_triggers',
30
+            array(
31
+                'getpaid_subscription_active'    => 'subscription_active',
32
+                'getpaid_subscription_trialling' => 'subscription_trial',
33
+                'getpaid_subscription_cancelled' => 'subscription_cancelled',
34
+                'getpaid_subscription_expired'   => 'subscription_expired',
35
+                'getpaid_subscription_completed' => 'subscription_complete',
36
+                'getpaid_daily_maintenance'      => 'renewal_reminder'
37
+            )
38
+        );
39
+
40
+        add_action( 'init', array( $this, 'init_hooks' ) );
41
+    }
42 42
 
43 43
     /**
44
-	 * Registers email hooks.
45
-	 */
46
-	public function init_hooks() {
47
-
48
-		add_filter( 'getpaid_get_email_merge_tags', array( $this, 'subscription_merge_tags' ), 10, 2 );
49
-		foreach ( $this->subscription_actions as $hook => $email_type ) {
50
-
51
-			$email = new GetPaid_Notification_Email( $email_type );
52
-
53
-			if ( ! $email->is_active() ) {
54
-				continue;
55
-			}
56
-
57
-			if ( method_exists( $this, $email_type ) ) {
58
-				add_action( $hook, array( $this, $email_type ), 100, 2 );
59
-				continue;
60
-			}
61
-
62
-			do_action( 'getpaid_subscription_notification_email_register_hook', $email_type, $hook );
63
-
64
-		}
65
-
66
-	}
67
-
68
-	/**
69
-	 * Filters subscription merge tags.
70
-	 *
71
-	 * @param array $merge_tags
72
-	 * @param mixed|WPInv_Invoice|WPInv_Subscription $object
73
-	 */
74
-	public function subscription_merge_tags( $merge_tags, $object ) {
75
-
76
-		if ( is_a( $object, 'WPInv_Subscription' ) ) {
77
-			$merge_tags = array_merge(
78
-				$merge_tags,
79
-				$this->get_subscription_merge_tags( $object )
80
-			);
81
-		}
82
-
83
-		return $merge_tags;
84
-
85
-	}
86
-
87
-	/**
88
-	 * Generates subscription merge tags.
89
-	 *
90
-	 * @param WPInv_Subscription $subscription
91
-	 * @return array
92
-	 */
93
-	public function get_subscription_merge_tags( $subscription ) {
94
-
95
-		// Abort if it does not exist.
96
-		if ( ! $subscription->get_id() ) {
97
-			return array();
98
-		}
99
-
100
-		$invoice    = $subscription->get_parent_invoice();
101
-		return array(
102
-			'{subscription_renewal_date}'     => getpaid_format_date_value( $subscription->get_next_renewal_date(), __( 'Never', 'invoicing' ) ),
103
-			'{subscription_created}'          => getpaid_format_date_value( $subscription->get_date_created() ),
104
-			'{subscription_status}'           => sanitize_text_field( $subscription->get_status_label() ),
105
-			'{subscription_profile_id}'       => sanitize_text_field( $subscription->get_profile_id() ),
106
-			'{subscription_id}'               => absint( $subscription->get_id() ),
107
-			'{subscription_recurring_amount}' => sanitize_text_field( wpinv_price( $subscription->get_recurring_amount(), $invoice->get_currency() ) ),
108
-			'{subscription_initial_amount}'   => sanitize_text_field( wpinv_price( $subscription->get_initial_amount(), $invoice->get_currency() ) ),
109
-			'{subscription_recurring_period}' => getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency(), '' ),
110
-			'{subscription_bill_times}'       => $subscription->get_bill_times(),
111
-			'{subscription_url}'              => esc_url( $subscription->get_view_url() ),
112
-		);
113
-
114
-	}
115
-
116
-	/**
117
-	 * Checks if we should send a notification for a subscription.
118
-	 *
119
-	 * @param WPInv_Invoice $invoice
120
-	 * @return bool
121
-	 */
122
-	public function should_send_notification( $invoice ) {
123
-		return 0 != $invoice->get_id();
124
-	}
125
-
126
-	/**
127
-	 * Returns notification recipients.
128
-	 *
129
-	 * @param WPInv_Invoice $invoice
130
-	 * @return array
131
-	 */
132
-	public function get_recipients( $invoice ) {
133
-		$recipients = array( $invoice->get_email() );
134
-
135
-		$cc = $invoice->get_email_cc();
136
-
137
-		if ( ! empty( $cc ) ) {
138
-			$cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
139
-			$recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
140
-		}
141
-
142
-		return $recipients;
143
-	}
144
-
145
-	/**
146
-	 * Helper function to send an email.
147
-	 *
148
-	 * @param WPInv_Subscription $subscription
149
-	 * @param GetPaid_Notification_Email $email
150
-	 * @param string $type
151
-	 * @param array $extra_args Extra template args.
152
-	 */
153
-	public function send_email( $subscription, $email, $type, $extra_args = array() ) {
154
-
155
-		if ( empty( $subscription ) ) {
156
-			return;
157
-		}
158
-
159
-		if ( is_array( $subscription ) ) {
160
-			$subscription = current( $subscription );
161
-		}
162
-
163
-		if ( ! $subscription instanceof WPInv_Subscription ) {
164
-			return;
165
-		}
166
-
167
-		// Abort in case the parent invoice does not exist.
168
-		$invoice = $subscription->get_parent_invoice();
169
-		if ( ! $this->should_send_notification( $invoice ) ) {
170
-			return;
171
-		}
172
-
173
-		if ( apply_filters( 'getpaid_skip_subscription_email', false, $type, $subscription ) ) {
174
-			return;
175
-		}
176
-
177
-		do_action( 'getpaid_before_send_subscription_notification', $type, $subscription, $email );
178
-
179
-		$recipients  = $this->get_recipients( $invoice );
180
-		$mailer      = new GetPaid_Notification_Email_Sender();
181
-		$merge_tags  = $email->get_merge_tags();
182
-		$content     = $email->get_content( $merge_tags, $extra_args );
183
-		$subject     = $email->add_merge_tags( $email->get_subject(), $merge_tags );
184
-		$attachments = $email->get_attachments();
185
-
186
-		$result = $mailer->send(
187
-			apply_filters( 'getpaid_subscription_email_recipients', wpinv_parse_list( $recipients ), $email ),
188
-			$subject,
189
-			$content,
190
-			$attachments
191
-		);
192
-
193
-		// Maybe send a copy to the admin.
194
-		if ( $email->include_admin_bcc() ) {
195
-			$mailer->send(
196
-				wpinv_get_admin_email(),
197
-				$subject . __( ' - ADMIN BCC COPY', 'invoicing' ),
198
-				$content,
199
-				$attachments
200
-			);
201
-		}
202
-
203
-		if ( $result ) {
204
-			$invoice->add_system_note(
205
-				sprintf(
206
-					__( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
207
-					sanitize_key( $type ),
208
-					$email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
209
-				)
210
-			);
211
-		} else {
212
-			$invoice->add_system_note(
213
-				sprintf(
214
-					__( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
215
-					sanitize_key( $type ),
216
-					$email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
217
-				)
218
-			);
219
-		}
220
-
221
-		do_action( 'getpaid_after_send_subscription_notification', $type, $subscription, $email );
222
-
223
-	}
224
-
225
-	/**
226
-	 * Sends a subscription active.
227
-	 *
228
-	 * @since 2.8.4
229
-	 *
230
-	 * @param WPInv_Subscription $subscription
231
-	 */
232
-	public function subscription_active( $subscription ) {
233
-		$email = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
234
-
235
-		$this->send_email( $subscription, $email, __FUNCTION__ );
236
-	}
44
+     * Registers email hooks.
45
+     */
46
+    public function init_hooks() {
47
+
48
+        add_filter( 'getpaid_get_email_merge_tags', array( $this, 'subscription_merge_tags' ), 10, 2 );
49
+        foreach ( $this->subscription_actions as $hook => $email_type ) {
50
+
51
+            $email = new GetPaid_Notification_Email( $email_type );
52
+
53
+            if ( ! $email->is_active() ) {
54
+                continue;
55
+            }
56
+
57
+            if ( method_exists( $this, $email_type ) ) {
58
+                add_action( $hook, array( $this, $email_type ), 100, 2 );
59
+                continue;
60
+            }
61
+
62
+            do_action( 'getpaid_subscription_notification_email_register_hook', $email_type, $hook );
63
+
64
+        }
65
+
66
+    }
237 67
 
238 68
     /**
239
-	 * Sends a new trial notification.
240
-	 *
241
-	 * @param WPInv_Subscription $subscription
242
-	 */
243
-	public function subscription_trial( $subscription ) {
69
+     * Filters subscription merge tags.
70
+     *
71
+     * @param array $merge_tags
72
+     * @param mixed|WPInv_Invoice|WPInv_Subscription $object
73
+     */
74
+    public function subscription_merge_tags( $merge_tags, $object ) {
244 75
 
245
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
246
-		$this->send_email( $subscription, $email, __FUNCTION__ );
76
+        if ( is_a( $object, 'WPInv_Subscription' ) ) {
77
+            $merge_tags = array_merge(
78
+                $merge_tags,
79
+                $this->get_subscription_merge_tags( $object )
80
+            );
81
+        }
247 82
 
248
-	}
83
+        return $merge_tags;
249 84
 
250
-	/**
251
-	 * Sends a cancelled subscription notification.
252
-	 *
253
-	 * @param WPInv_Subscription $subscription
254
-	 */
255
-	public function subscription_cancelled( $subscription ) {
85
+    }
86
+
87
+    /**
88
+     * Generates subscription merge tags.
89
+     *
90
+     * @param WPInv_Subscription $subscription
91
+     * @return array
92
+     */
93
+    public function get_subscription_merge_tags( $subscription ) {
94
+
95
+        // Abort if it does not exist.
96
+        if ( ! $subscription->get_id() ) {
97
+            return array();
98
+        }
99
+
100
+        $invoice    = $subscription->get_parent_invoice();
101
+        return array(
102
+            '{subscription_renewal_date}'     => getpaid_format_date_value( $subscription->get_next_renewal_date(), __( 'Never', 'invoicing' ) ),
103
+            '{subscription_created}'          => getpaid_format_date_value( $subscription->get_date_created() ),
104
+            '{subscription_status}'           => sanitize_text_field( $subscription->get_status_label() ),
105
+            '{subscription_profile_id}'       => sanitize_text_field( $subscription->get_profile_id() ),
106
+            '{subscription_id}'               => absint( $subscription->get_id() ),
107
+            '{subscription_recurring_amount}' => sanitize_text_field( wpinv_price( $subscription->get_recurring_amount(), $invoice->get_currency() ) ),
108
+            '{subscription_initial_amount}'   => sanitize_text_field( wpinv_price( $subscription->get_initial_amount(), $invoice->get_currency() ) ),
109
+            '{subscription_recurring_period}' => getpaid_get_subscription_period_label( $subscription->get_period(), $subscription->get_frequency(), '' ),
110
+            '{subscription_bill_times}'       => $subscription->get_bill_times(),
111
+            '{subscription_url}'              => esc_url( $subscription->get_view_url() ),
112
+        );
113
+
114
+    }
256 115
 
257
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
258
-		$this->send_email( $subscription, $email, __FUNCTION__ );
116
+    /**
117
+     * Checks if we should send a notification for a subscription.
118
+     *
119
+     * @param WPInv_Invoice $invoice
120
+     * @return bool
121
+     */
122
+    public function should_send_notification( $invoice ) {
123
+        return 0 != $invoice->get_id();
124
+    }
259 125
 
260
-	}
126
+    /**
127
+     * Returns notification recipients.
128
+     *
129
+     * @param WPInv_Invoice $invoice
130
+     * @return array
131
+     */
132
+    public function get_recipients( $invoice ) {
133
+        $recipients = array( $invoice->get_email() );
261 134
 
262
-	/**
263
-	 * Sends a subscription expired notification.
264
-	 *
265
-	 * @param WPInv_Subscription $subscription
266
-	 */
267
-	public function subscription_expired( $subscription ) {
135
+        $cc = $invoice->get_email_cc();
268 136
 
269
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
270
-		$this->send_email( $subscription, $email, __FUNCTION__ );
137
+        if ( ! empty( $cc ) ) {
138
+            $cc = array_map( 'sanitize_email', wpinv_parse_list( $cc ) );
139
+            $recipients = array_filter( array_unique( array_merge( $recipients, $cc ) ) );
140
+        }
271 141
 
272
-	}
142
+        return $recipients;
143
+    }
273 144
 
274
-	/**
275
-	 * Sends a completed subscription notification.
276
-	 *
277
-	 * @param WPInv_Subscription $subscription
278
-	 */
279
-	public function subscription_complete( $subscription ) {
145
+    /**
146
+     * Helper function to send an email.
147
+     *
148
+     * @param WPInv_Subscription $subscription
149
+     * @param GetPaid_Notification_Email $email
150
+     * @param string $type
151
+     * @param array $extra_args Extra template args.
152
+     */
153
+    public function send_email( $subscription, $email, $type, $extra_args = array() ) {
154
+
155
+        if ( empty( $subscription ) ) {
156
+            return;
157
+        }
158
+
159
+        if ( is_array( $subscription ) ) {
160
+            $subscription = current( $subscription );
161
+        }
162
+
163
+        if ( ! $subscription instanceof WPInv_Subscription ) {
164
+            return;
165
+        }
166
+
167
+        // Abort in case the parent invoice does not exist.
168
+        $invoice = $subscription->get_parent_invoice();
169
+        if ( ! $this->should_send_notification( $invoice ) ) {
170
+            return;
171
+        }
172
+
173
+        if ( apply_filters( 'getpaid_skip_subscription_email', false, $type, $subscription ) ) {
174
+            return;
175
+        }
176
+
177
+        do_action( 'getpaid_before_send_subscription_notification', $type, $subscription, $email );
178
+
179
+        $recipients  = $this->get_recipients( $invoice );
180
+        $mailer      = new GetPaid_Notification_Email_Sender();
181
+        $merge_tags  = $email->get_merge_tags();
182
+        $content     = $email->get_content( $merge_tags, $extra_args );
183
+        $subject     = $email->add_merge_tags( $email->get_subject(), $merge_tags );
184
+        $attachments = $email->get_attachments();
185
+
186
+        $result = $mailer->send(
187
+            apply_filters( 'getpaid_subscription_email_recipients', wpinv_parse_list( $recipients ), $email ),
188
+            $subject,
189
+            $content,
190
+            $attachments
191
+        );
192
+
193
+        // Maybe send a copy to the admin.
194
+        if ( $email->include_admin_bcc() ) {
195
+            $mailer->send(
196
+                wpinv_get_admin_email(),
197
+                $subject . __( ' - ADMIN BCC COPY', 'invoicing' ),
198
+                $content,
199
+                $attachments
200
+            );
201
+        }
202
+
203
+        if ( $result ) {
204
+            $invoice->add_system_note(
205
+                sprintf(
206
+                    __( 'Successfully sent %1$s notification email to %2$s.', 'invoicing' ),
207
+                    sanitize_key( $type ),
208
+                    $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
209
+                )
210
+            );
211
+        } else {
212
+            $invoice->add_system_note(
213
+                sprintf(
214
+                    __( 'Failed sending %1$s notification email to %2$s.', 'invoicing' ),
215
+                    sanitize_key( $type ),
216
+                    $email->is_admin_email() ? __( 'admin' ) : __( 'the customer' )
217
+                )
218
+            );
219
+        }
220
+
221
+        do_action( 'getpaid_after_send_subscription_notification', $type, $subscription, $email );
222
+
223
+    }
280 224
 
281
-		$email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
282
-		$this->send_email( $subscription, $email, __FUNCTION__ );
225
+    /**
226
+     * Sends a subscription active.
227
+     *
228
+     * @since 2.8.4
229
+     *
230
+     * @param WPInv_Subscription $subscription
231
+     */
232
+    public function subscription_active( $subscription ) {
233
+        $email = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
283 234
 
284
-	}
235
+        $this->send_email( $subscription, $email, __FUNCTION__ );
236
+    }
285 237
 
286
-	/**
287
-	 * Sends a subscription renewal reminder notification.
288
-	 *
289
-	 */
290
-	public function renewal_reminder() {
238
+    /**
239
+     * Sends a new trial notification.
240
+     *
241
+     * @param WPInv_Subscription $subscription
242
+     */
243
+    public function subscription_trial( $subscription ) {
244
+
245
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
246
+        $this->send_email( $subscription, $email, __FUNCTION__ );
247
+
248
+    }
249
+
250
+    /**
251
+     * Sends a cancelled subscription notification.
252
+     *
253
+     * @param WPInv_Subscription $subscription
254
+     */
255
+    public function subscription_cancelled( $subscription ) {
256
+
257
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
258
+        $this->send_email( $subscription, $email, __FUNCTION__ );
259
+
260
+    }
261
+
262
+    /**
263
+     * Sends a subscription expired notification.
264
+     *
265
+     * @param WPInv_Subscription $subscription
266
+     */
267
+    public function subscription_expired( $subscription ) {
268
+
269
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
270
+        $this->send_email( $subscription, $email, __FUNCTION__ );
271
+
272
+    }
273
+
274
+    /**
275
+     * Sends a completed subscription notification.
276
+     *
277
+     * @param WPInv_Subscription $subscription
278
+     */
279
+    public function subscription_complete( $subscription ) {
280
+
281
+        $email     = new GetPaid_Notification_Email( __FUNCTION__, $subscription );
282
+        $this->send_email( $subscription, $email, __FUNCTION__ );
283
+
284
+    }
285
+
286
+    /**
287
+     * Sends a subscription renewal reminder notification.
288
+     *
289
+     */
290
+    public function renewal_reminder() {
291 291
 
292
-		$email = new GetPaid_Notification_Email( __FUNCTION__ );
292
+        $email = new GetPaid_Notification_Email( __FUNCTION__ );
293 293
 
294
-		// Fetch reminder days.
295
-		$reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
294
+        // Fetch reminder days.
295
+        $reminder_days = array_unique( wp_parse_id_list( $email->get_option( 'days' ) ) );
296 296
 
297
-		// Abort if non is set.
298
-		if ( empty( $reminder_days ) ) {
299
-			return;
300
-		}
297
+        // Abort if non is set.
298
+        if ( empty( $reminder_days ) ) {
299
+            return;
300
+        }
301 301
 
302
-		// Fetch matching subscriptions.
302
+        // Fetch matching subscriptions.
303 303
         $args  = array(
304 304
             'number'             => -1,
305
-			'count_total'        => false,
306
-			'status'             => 'trialling active',
305
+            'count_total'        => false,
306
+            'status'             => 'trialling active',
307 307
             'date_expires_query' => array(
308
-				'relation' => 'OR',
308
+                'relation' => 'OR',
309 309
             ),
310
-		);
310
+        );
311 311
 
312
-		foreach ( $reminder_days as $days ) {
313
-			$date = date_parse( date( 'Y-m-d', strtotime( "+$days days", current_time( 'timestamp' ) ) ) );
312
+        foreach ( $reminder_days as $days ) {
313
+            $date = date_parse( date( 'Y-m-d', strtotime( "+$days days", current_time( 'timestamp' ) ) ) );
314 314
 
315
-			$args['date_expires_query'][] = array(
316
-				'year'  => $date['year'],
317
-				'month' => $date['month'],
318
-				'day'   => $date['day'],
319
-			);
315
+            $args['date_expires_query'][] = array(
316
+                'year'  => $date['year'],
317
+                'month' => $date['month'],
318
+                'day'   => $date['day'],
319
+            );
320 320
 
321
-		}
321
+        }
322 322
 
323
-		$subscriptions = new GetPaid_Subscriptions_Query( $args );
323
+        $subscriptions = new GetPaid_Subscriptions_Query( $args );
324 324
 
325 325
         foreach ( $subscriptions->get_results() as $subscription ) {
326 326
 
327
-			// Skip packages.
328
-			if ( apply_filters( 'getpaid_send_subscription_renewal_reminder_email', true ) ) {
329
-				$email->object = $subscription;
330
-            	$this->send_email( $subscription, $email, __FUNCTION__ );
331
-			}
332
-		}
327
+            // Skip packages.
328
+            if ( apply_filters( 'getpaid_send_subscription_renewal_reminder_email', true ) ) {
329
+                $email->object = $subscription;
330
+                $this->send_email( $subscription, $email, __FUNCTION__ );
331
+            }
332
+        }
333 333
 
334
-	}
334
+    }
335 335
 
336 336
 }
Please login to merge, or discard this patch.
vendor/ayecode/wp-ayecode-ui/includes/ayecode-ui-settings.php 1 patch
Indentation   +2337 added lines, -2337 removed lines patch added patch discarded remove patch
@@ -13,7 +13,7 @@  discard block
 block discarded – undo
13 13
  * Bail if we are not in WP.
14 14
  */
15 15
 if ( ! defined( 'ABSPATH' ) ) {
16
-	exit;
16
+    exit;
17 17
 }
18 18
 
19 19
 /**
@@ -21,472 +21,472 @@  discard block
 block discarded – undo
21 21
  */
22 22
 if ( ! class_exists( 'AyeCode_UI_Settings' ) ) {
23 23
 
24
-	/**
25
-	 * A Class to be able to change settings for Font Awesome.
26
-	 *
27
-	 * Class AyeCode_UI_Settings
28
-	 * @ver 1.0.0
29
-	 * @todo decide how to implement textdomain
30
-	 */
31
-	class AyeCode_UI_Settings {
32
-
33
-		/**
34
-		 * Class version version.
35
-		 *
36
-		 * @var string
37
-		 */
38
-		public $version = '0.2.31';
39
-
40
-		/**
41
-		 * Class textdomain.
42
-		 *
43
-		 * @var string
44
-		 */
45
-		public $textdomain = 'aui';
46
-
47
-		/**
48
-		 * Latest version of Bootstrap at time of publish published.
49
-		 *
50
-		 * @var string
51
-		 */
52
-		public $latest = "5.2.2";
53
-
54
-		/**
55
-		 * Current version of select2 being used.
56
-		 *
57
-		 * @var string
58
-		 */
59
-		public $select2_version = "4.0.11";
60
-
61
-		/**
62
-		 * The title.
63
-		 *
64
-		 * @var string
65
-		 */
66
-		public $name = 'AyeCode UI';
67
-
68
-		/**
69
-		 * The relative url to the assets.
70
-		 *
71
-		 * @var string
72
-		 */
73
-		public $url = '';
74
-
75
-		/**
76
-		 * Holds the settings values.
77
-		 *
78
-		 * @var array
79
-		 */
80
-		private $settings;
81
-
82
-		/**
83
-		 * AyeCode_UI_Settings instance.
84
-		 *
85
-		 * @access private
86
-		 * @since  1.0.0
87
-		 * @var    AyeCode_UI_Settings There can be only one!
88
-		 */
89
-		private static $instance = null;
90
-
91
-
92
-		/**
93
-		 * Main AyeCode_UI_Settings Instance.
94
-		 *
95
-		 * Ensures only one instance of AyeCode_UI_Settings is loaded or can be loaded.
96
-		 *
97
-		 * @since 1.0.0
98
-		 * @static
99
-		 * @return AyeCode_UI_Settings - Main instance.
100
-		 */
101
-		public static function instance() {
102
-			if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_UI_Settings ) ) {
103
-
104
-				self::$instance = new AyeCode_UI_Settings;
105
-
106
-				add_action( 'init', array( self::$instance, 'init' ) ); // set settings
107
-
108
-				if ( is_admin() ) {
109
-					add_action( 'admin_menu', array( self::$instance, 'menu_item' ) );
110
-					add_action( 'admin_init', array( self::$instance, 'register_settings' ) );
111
-
112
-					// Maybe show example page
113
-					add_action( 'template_redirect', array( self::$instance,'maybe_show_examples' ) );
114
-
115
-					if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
116
-						add_filter( 'sd_aui_colors', array( self::$instance,'sd_aui_colors' ), 10, 3 );
117
-					}
118
-				}
24
+    /**
25
+     * A Class to be able to change settings for Font Awesome.
26
+     *
27
+     * Class AyeCode_UI_Settings
28
+     * @ver 1.0.0
29
+     * @todo decide how to implement textdomain
30
+     */
31
+    class AyeCode_UI_Settings {
32
+
33
+        /**
34
+         * Class version version.
35
+         *
36
+         * @var string
37
+         */
38
+        public $version = '0.2.31';
39
+
40
+        /**
41
+         * Class textdomain.
42
+         *
43
+         * @var string
44
+         */
45
+        public $textdomain = 'aui';
46
+
47
+        /**
48
+         * Latest version of Bootstrap at time of publish published.
49
+         *
50
+         * @var string
51
+         */
52
+        public $latest = "5.2.2";
53
+
54
+        /**
55
+         * Current version of select2 being used.
56
+         *
57
+         * @var string
58
+         */
59
+        public $select2_version = "4.0.11";
119 60
 
120
-				add_action( 'customize_register', array( self::$instance, 'customizer_settings' ));
61
+        /**
62
+         * The title.
63
+         *
64
+         * @var string
65
+         */
66
+        public $name = 'AyeCode UI';
121 67
 
122
-				do_action( 'ayecode_ui_settings_loaded' );
123
-			}
68
+        /**
69
+         * The relative url to the assets.
70
+         *
71
+         * @var string
72
+         */
73
+        public $url = '';
124 74
 
125
-			return self::$instance;
126
-		}
75
+        /**
76
+         * Holds the settings values.
77
+         *
78
+         * @var array
79
+         */
80
+        private $settings;
127 81
 
128
-		/**
129
-		 * Add custom colors to the color selector.
130
-		 *
131
-		 * @param $theme_colors
132
-		 * @param $include_outlines
133
-		 * @param $include_branding
134
-		 *
135
-		 * @return mixed
136
-		 */
137
-		public function sd_aui_colors( $theme_colors, $include_outlines, $include_branding ){
82
+        /**
83
+         * AyeCode_UI_Settings instance.
84
+         *
85
+         * @access private
86
+         * @since  1.0.0
87
+         * @var    AyeCode_UI_Settings There can be only one!
88
+         */
89
+        private static $instance = null;
138 90
 
139 91
 
140
-			$setting = wp_get_global_settings();
92
+        /**
93
+         * Main AyeCode_UI_Settings Instance.
94
+         *
95
+         * Ensures only one instance of AyeCode_UI_Settings is loaded or can be loaded.
96
+         *
97
+         * @since 1.0.0
98
+         * @static
99
+         * @return AyeCode_UI_Settings - Main instance.
100
+         */
101
+        public static function instance() {
102
+            if ( ! isset( self::$instance ) && ! ( self::$instance instanceof AyeCode_UI_Settings ) ) {
141 103
 
142
-			if(!empty($setting['color']['palette']['custom'])){
143
-				foreach($setting['color']['palette']['custom'] as $color){
144
-					$theme_colors[$color['slug']] = esc_attr($color['name']);
145
-				}
146
-			}
147
-
148
-			return $theme_colors;
149
-		}
150
-
151
-		/**
152
-		 * Setup some constants.
153
-		 */
154
-		public function constants(){
155
-			define( 'AUI_PRIMARY_COLOR_ORIGINAL', "#1e73be" );
156
-			define( 'AUI_SECONDARY_COLOR_ORIGINAL', '#6c757d' );
157
-			define( 'AUI_INFO_COLOR_ORIGINAL', '#17a2b8' );
158
-			define( 'AUI_WARNING_COLOR_ORIGINAL', '#ffc107' );
159
-			define( 'AUI_DANGER_COLOR_ORIGINAL', '#dc3545' );
160
-			define( 'AUI_SUCCESS_COLOR_ORIGINAL', '#44c553' );
161
-			define( 'AUI_LIGHT_COLOR_ORIGINAL', '#f8f9fa' );
162
-			define( 'AUI_DARK_COLOR_ORIGINAL', '#343a40' );
163
-			define( 'AUI_WHITE_COLOR_ORIGINAL', '#fff' );
164
-			define( 'AUI_PURPLE_COLOR_ORIGINAL', '#ad6edd' );
165
-			define( 'AUI_SALMON_COLOR_ORIGINAL', '#ff977a' );
166
-			define( 'AUI_CYAN_COLOR_ORIGINAL', '#35bdff' );
167
-			define( 'AUI_GRAY_COLOR_ORIGINAL', '#ced4da' );
168
-			define( 'AUI_INDIGO_COLOR_ORIGINAL', '#502c6c' );
169
-			define( 'AUI_ORANGE_COLOR_ORIGINAL', '#orange' );
170
-			define( 'AUI_BLACK_COLOR_ORIGINAL', '#000' );
171
-
172
-			if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
173
-				define( 'AUI_PRIMARY_COLOR', AUI_PRIMARY_COLOR_ORIGINAL );
174
-			}
175
-			if ( ! defined( 'AUI_SECONDARY_COLOR' ) ) {
176
-				define( 'AUI_SECONDARY_COLOR', AUI_SECONDARY_COLOR_ORIGINAL );
177
-			}
178
-			if ( ! defined( 'AUI_INFO_COLOR' ) ) {
179
-				define( 'AUI_INFO_COLOR', AUI_INFO_COLOR_ORIGINAL );
180
-			}
181
-			if ( ! defined( 'AUI_WARNING_COLOR' ) ) {
182
-				define( 'AUI_WARNING_COLOR', AUI_WARNING_COLOR_ORIGINAL );
183
-			}
184
-			if ( ! defined( 'AUI_DANGER_COLOR' ) ) {
185
-				define( 'AUI_DANGER_COLOR', AUI_DANGER_COLOR_ORIGINAL );
186
-			}
187
-			if ( ! defined( 'AUI_SUCCESS_COLOR' ) ) {
188
-				define( 'AUI_SUCCESS_COLOR', AUI_SUCCESS_COLOR_ORIGINAL );
189
-			}
190
-			if ( ! defined( 'AUI_LIGHT_COLOR' ) ) {
191
-				define( 'AUI_LIGHT_COLOR', AUI_LIGHT_COLOR_ORIGINAL );
192
-			}
193
-			if ( ! defined( 'AUI_DARK_COLOR' ) ) {
194
-				define( 'AUI_DARK_COLOR', AUI_DARK_COLOR_ORIGINAL );
195
-			}
196
-			if ( ! defined( 'AUI_WHITE_COLOR' ) ) {
197
-				define( 'AUI_WHITE_COLOR', AUI_WHITE_COLOR_ORIGINAL );
198
-			}
199
-			if ( ! defined( 'AUI_PURPLE_COLOR' ) ) {
200
-				define( 'AUI_PURPLE_COLOR', AUI_PURPLE_COLOR_ORIGINAL );
201
-			}
202
-			if ( ! defined( 'AUI_SALMON_COLOR' ) ) {
203
-				define( 'AUI_SALMON_COLOR', AUI_SALMON_COLOR_ORIGINAL );
204
-			}
205
-			if ( ! defined( 'AUI_CYAN_COLOR' ) ) {
206
-				define( 'AUI_CYAN_COLOR', AUI_CYAN_COLOR_ORIGINAL );
207
-			}
208
-			if ( ! defined( 'AUI_GRAY_COLOR' ) ) {
209
-				define( 'AUI_GRAY_COLOR', AUI_GRAY_COLOR_ORIGINAL );
210
-			}
211
-			if ( ! defined( 'AUI_INDIGO_COLOR' ) ) {
212
-				define( 'AUI_INDIGO_COLOR', AUI_INDIGO_COLOR_ORIGINAL );
213
-			}
214
-			if ( ! defined( 'AUI_ORANGE_COLOR' ) ) {
215
-				define( 'AUI_ORANGE_COLOR', AUI_ORANGE_COLOR_ORIGINAL );
216
-			}
217
-			if ( ! defined( 'AUI_BLACK_COLOR' ) ) {
218
-				define( 'AUI_BLACK_COLOR', AUI_BLACK_COLOR_ORIGINAL );
219
-			}
220
-
221
-		}
222
-
223
-		public static function get_colors( $original = false){
224
-
225
-			if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
226
-				return array();
227
-			}
228
-			if ( $original ) {
229
-				return array(
230
-					'primary'   => AUI_PRIMARY_COLOR_ORIGINAL,
231
-					'secondary' => AUI_SECONDARY_COLOR_ORIGINAL,
232
-					'info'      => AUI_INFO_COLOR_ORIGINAL,
233
-					'warning'   => AUI_WARNING_COLOR_ORIGINAL,
234
-					'danger'    => AUI_DANGER_COLOR_ORIGINAL,
235
-					'success'   => AUI_SUCCESS_COLOR_ORIGINAL,
236
-					'light'     => AUI_LIGHT_COLOR_ORIGINAL,
237
-					'dark'      => AUI_DARK_COLOR_ORIGINAL,
238
-					'white'     => AUI_WHITE_COLOR_ORIGINAL,
239
-					'purple'    => AUI_PURPLE_COLOR_ORIGINAL,
240
-					'salmon'    => AUI_SALMON_COLOR_ORIGINAL,
241
-					'cyan'      => AUI_CYAN_COLOR_ORIGINAL,
242
-					'gray'      => AUI_GRAY_COLOR_ORIGINAL,
243
-					'indigo'    => AUI_INDIGO_COLOR_ORIGINAL,
244
-					'orange'    => AUI_ORANGE_COLOR_ORIGINAL,
245
-					'black'     => AUI_BLACK_COLOR_ORIGINAL,
246
-				);
247
-			}
248
-
249
-			return array(
250
-				'primary'   => AUI_PRIMARY_COLOR,
251
-				'secondary' => AUI_SECONDARY_COLOR,
252
-				'info'      => AUI_INFO_COLOR,
253
-				'warning'   => AUI_WARNING_COLOR,
254
-				'danger'    => AUI_DANGER_COLOR,
255
-				'success'   => AUI_SUCCESS_COLOR,
256
-				'light'     => AUI_LIGHT_COLOR,
257
-				'dark'      => AUI_DARK_COLOR,
258
-				'white'     => AUI_WHITE_COLOR,
259
-				'purple'    => AUI_PURPLE_COLOR,
260
-				'salmon'    => AUI_SALMON_COLOR,
261
-				'cyan'      => AUI_CYAN_COLOR,
262
-				'gray'      => AUI_GRAY_COLOR,
263
-				'indigo'    => AUI_INDIGO_COLOR,
264
-				'orange'    => AUI_ORANGE_COLOR,
265
-				'black'     => AUI_BLACK_COLOR,
266
-			);
267
-		}
268
-
269
-		/**
270
-		 * Add admin body class to show when BS5 is active.
271
-		 *
272
-		 * @param $classes
273
-		 *
274
-		 * @return mixed
275
-		 */
276
-		public function add_bs5_admin_body_class( $classes = '' ) {
277
-			$classes .= ' aui_bs5';
278
-
279
-			return $classes;
280
-		}
281
-
282
-		/**
283
-		 * Add a body class to show when BS5 is active.
284
-		 *
285
-		 * @param $classes
286
-		 *
287
-		 * @return mixed
288
-		 */
289
-		public function add_bs5_body_class( $classes ) {
290
-			$classes[] = 'aui_bs5';
291
-
292
-			return $classes;
293
-		}
294
-
295
-		/**
296
-		 * Initiate the settings and add the required action hooks.
297
-		 */
298
-		public function init() {
104
+                self::$instance = new AyeCode_UI_Settings;
105
+
106
+                add_action( 'init', array( self::$instance, 'init' ) ); // set settings
107
+
108
+                if ( is_admin() ) {
109
+                    add_action( 'admin_menu', array( self::$instance, 'menu_item' ) );
110
+                    add_action( 'admin_init', array( self::$instance, 'register_settings' ) );
111
+
112
+                    // Maybe show example page
113
+                    add_action( 'template_redirect', array( self::$instance,'maybe_show_examples' ) );
114
+
115
+                    if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
116
+                        add_filter( 'sd_aui_colors', array( self::$instance,'sd_aui_colors' ), 10, 3 );
117
+                    }
118
+                }
119
+
120
+                add_action( 'customize_register', array( self::$instance, 'customizer_settings' ));
121
+
122
+                do_action( 'ayecode_ui_settings_loaded' );
123
+            }
124
+
125
+            return self::$instance;
126
+        }
127
+
128
+        /**
129
+         * Add custom colors to the color selector.
130
+         *
131
+         * @param $theme_colors
132
+         * @param $include_outlines
133
+         * @param $include_branding
134
+         *
135
+         * @return mixed
136
+         */
137
+        public function sd_aui_colors( $theme_colors, $include_outlines, $include_branding ){
138
+
139
+
140
+            $setting = wp_get_global_settings();
141
+
142
+            if(!empty($setting['color']['palette']['custom'])){
143
+                foreach($setting['color']['palette']['custom'] as $color){
144
+                    $theme_colors[$color['slug']] = esc_attr($color['name']);
145
+                }
146
+            }
147
+
148
+            return $theme_colors;
149
+        }
150
+
151
+        /**
152
+         * Setup some constants.
153
+         */
154
+        public function constants(){
155
+            define( 'AUI_PRIMARY_COLOR_ORIGINAL', "#1e73be" );
156
+            define( 'AUI_SECONDARY_COLOR_ORIGINAL', '#6c757d' );
157
+            define( 'AUI_INFO_COLOR_ORIGINAL', '#17a2b8' );
158
+            define( 'AUI_WARNING_COLOR_ORIGINAL', '#ffc107' );
159
+            define( 'AUI_DANGER_COLOR_ORIGINAL', '#dc3545' );
160
+            define( 'AUI_SUCCESS_COLOR_ORIGINAL', '#44c553' );
161
+            define( 'AUI_LIGHT_COLOR_ORIGINAL', '#f8f9fa' );
162
+            define( 'AUI_DARK_COLOR_ORIGINAL', '#343a40' );
163
+            define( 'AUI_WHITE_COLOR_ORIGINAL', '#fff' );
164
+            define( 'AUI_PURPLE_COLOR_ORIGINAL', '#ad6edd' );
165
+            define( 'AUI_SALMON_COLOR_ORIGINAL', '#ff977a' );
166
+            define( 'AUI_CYAN_COLOR_ORIGINAL', '#35bdff' );
167
+            define( 'AUI_GRAY_COLOR_ORIGINAL', '#ced4da' );
168
+            define( 'AUI_INDIGO_COLOR_ORIGINAL', '#502c6c' );
169
+            define( 'AUI_ORANGE_COLOR_ORIGINAL', '#orange' );
170
+            define( 'AUI_BLACK_COLOR_ORIGINAL', '#000' );
171
+
172
+            if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
173
+                define( 'AUI_PRIMARY_COLOR', AUI_PRIMARY_COLOR_ORIGINAL );
174
+            }
175
+            if ( ! defined( 'AUI_SECONDARY_COLOR' ) ) {
176
+                define( 'AUI_SECONDARY_COLOR', AUI_SECONDARY_COLOR_ORIGINAL );
177
+            }
178
+            if ( ! defined( 'AUI_INFO_COLOR' ) ) {
179
+                define( 'AUI_INFO_COLOR', AUI_INFO_COLOR_ORIGINAL );
180
+            }
181
+            if ( ! defined( 'AUI_WARNING_COLOR' ) ) {
182
+                define( 'AUI_WARNING_COLOR', AUI_WARNING_COLOR_ORIGINAL );
183
+            }
184
+            if ( ! defined( 'AUI_DANGER_COLOR' ) ) {
185
+                define( 'AUI_DANGER_COLOR', AUI_DANGER_COLOR_ORIGINAL );
186
+            }
187
+            if ( ! defined( 'AUI_SUCCESS_COLOR' ) ) {
188
+                define( 'AUI_SUCCESS_COLOR', AUI_SUCCESS_COLOR_ORIGINAL );
189
+            }
190
+            if ( ! defined( 'AUI_LIGHT_COLOR' ) ) {
191
+                define( 'AUI_LIGHT_COLOR', AUI_LIGHT_COLOR_ORIGINAL );
192
+            }
193
+            if ( ! defined( 'AUI_DARK_COLOR' ) ) {
194
+                define( 'AUI_DARK_COLOR', AUI_DARK_COLOR_ORIGINAL );
195
+            }
196
+            if ( ! defined( 'AUI_WHITE_COLOR' ) ) {
197
+                define( 'AUI_WHITE_COLOR', AUI_WHITE_COLOR_ORIGINAL );
198
+            }
199
+            if ( ! defined( 'AUI_PURPLE_COLOR' ) ) {
200
+                define( 'AUI_PURPLE_COLOR', AUI_PURPLE_COLOR_ORIGINAL );
201
+            }
202
+            if ( ! defined( 'AUI_SALMON_COLOR' ) ) {
203
+                define( 'AUI_SALMON_COLOR', AUI_SALMON_COLOR_ORIGINAL );
204
+            }
205
+            if ( ! defined( 'AUI_CYAN_COLOR' ) ) {
206
+                define( 'AUI_CYAN_COLOR', AUI_CYAN_COLOR_ORIGINAL );
207
+            }
208
+            if ( ! defined( 'AUI_GRAY_COLOR' ) ) {
209
+                define( 'AUI_GRAY_COLOR', AUI_GRAY_COLOR_ORIGINAL );
210
+            }
211
+            if ( ! defined( 'AUI_INDIGO_COLOR' ) ) {
212
+                define( 'AUI_INDIGO_COLOR', AUI_INDIGO_COLOR_ORIGINAL );
213
+            }
214
+            if ( ! defined( 'AUI_ORANGE_COLOR' ) ) {
215
+                define( 'AUI_ORANGE_COLOR', AUI_ORANGE_COLOR_ORIGINAL );
216
+            }
217
+            if ( ! defined( 'AUI_BLACK_COLOR' ) ) {
218
+                define( 'AUI_BLACK_COLOR', AUI_BLACK_COLOR_ORIGINAL );
219
+            }
220
+
221
+        }
222
+
223
+        public static function get_colors( $original = false){
224
+
225
+            if ( ! defined( 'AUI_PRIMARY_COLOR' ) ) {
226
+                return array();
227
+            }
228
+            if ( $original ) {
229
+                return array(
230
+                    'primary'   => AUI_PRIMARY_COLOR_ORIGINAL,
231
+                    'secondary' => AUI_SECONDARY_COLOR_ORIGINAL,
232
+                    'info'      => AUI_INFO_COLOR_ORIGINAL,
233
+                    'warning'   => AUI_WARNING_COLOR_ORIGINAL,
234
+                    'danger'    => AUI_DANGER_COLOR_ORIGINAL,
235
+                    'success'   => AUI_SUCCESS_COLOR_ORIGINAL,
236
+                    'light'     => AUI_LIGHT_COLOR_ORIGINAL,
237
+                    'dark'      => AUI_DARK_COLOR_ORIGINAL,
238
+                    'white'     => AUI_WHITE_COLOR_ORIGINAL,
239
+                    'purple'    => AUI_PURPLE_COLOR_ORIGINAL,
240
+                    'salmon'    => AUI_SALMON_COLOR_ORIGINAL,
241
+                    'cyan'      => AUI_CYAN_COLOR_ORIGINAL,
242
+                    'gray'      => AUI_GRAY_COLOR_ORIGINAL,
243
+                    'indigo'    => AUI_INDIGO_COLOR_ORIGINAL,
244
+                    'orange'    => AUI_ORANGE_COLOR_ORIGINAL,
245
+                    'black'     => AUI_BLACK_COLOR_ORIGINAL,
246
+                );
247
+            }
248
+
249
+            return array(
250
+                'primary'   => AUI_PRIMARY_COLOR,
251
+                'secondary' => AUI_SECONDARY_COLOR,
252
+                'info'      => AUI_INFO_COLOR,
253
+                'warning'   => AUI_WARNING_COLOR,
254
+                'danger'    => AUI_DANGER_COLOR,
255
+                'success'   => AUI_SUCCESS_COLOR,
256
+                'light'     => AUI_LIGHT_COLOR,
257
+                'dark'      => AUI_DARK_COLOR,
258
+                'white'     => AUI_WHITE_COLOR,
259
+                'purple'    => AUI_PURPLE_COLOR,
260
+                'salmon'    => AUI_SALMON_COLOR,
261
+                'cyan'      => AUI_CYAN_COLOR,
262
+                'gray'      => AUI_GRAY_COLOR,
263
+                'indigo'    => AUI_INDIGO_COLOR,
264
+                'orange'    => AUI_ORANGE_COLOR,
265
+                'black'     => AUI_BLACK_COLOR,
266
+            );
267
+        }
268
+
269
+        /**
270
+         * Add admin body class to show when BS5 is active.
271
+         *
272
+         * @param $classes
273
+         *
274
+         * @return mixed
275
+         */
276
+        public function add_bs5_admin_body_class( $classes = '' ) {
277
+            $classes .= ' aui_bs5';
278
+
279
+            return $classes;
280
+        }
281
+
282
+        /**
283
+         * Add a body class to show when BS5 is active.
284
+         *
285
+         * @param $classes
286
+         *
287
+         * @return mixed
288
+         */
289
+        public function add_bs5_body_class( $classes ) {
290
+            $classes[] = 'aui_bs5';
291
+
292
+            return $classes;
293
+        }
294
+
295
+        /**
296
+         * Initiate the settings and add the required action hooks.
297
+         */
298
+        public function init() {
299 299
             global $aui_bs5;
300 300
 
301
-			// Maybe fix settings
302
-			if ( ! empty( $_REQUEST['aui-fix-admin'] ) && !empty($_REQUEST['nonce']) && wp_verify_nonce( $_REQUEST['nonce'], "aui-fix-admin" ) ) {
303
-				$db_settings = get_option( 'ayecode-ui-settings' );
304
-				if ( ! empty( $db_settings ) ) {
305
-					$db_settings['css_backend'] = 'compatibility';
306
-					$db_settings['js_backend'] = 'core-popper';
307
-					update_option( 'ayecode-ui-settings', $db_settings );
308
-					wp_safe_redirect(admin_url("options-general.php?page=ayecode-ui-settings&updated=true"));
309
-				}
310
-			}
301
+            // Maybe fix settings
302
+            if ( ! empty( $_REQUEST['aui-fix-admin'] ) && !empty($_REQUEST['nonce']) && wp_verify_nonce( $_REQUEST['nonce'], "aui-fix-admin" ) ) {
303
+                $db_settings = get_option( 'ayecode-ui-settings' );
304
+                if ( ! empty( $db_settings ) ) {
305
+                    $db_settings['css_backend'] = 'compatibility';
306
+                    $db_settings['js_backend'] = 'core-popper';
307
+                    update_option( 'ayecode-ui-settings', $db_settings );
308
+                    wp_safe_redirect(admin_url("options-general.php?page=ayecode-ui-settings&updated=true"));
309
+                }
310
+            }
311 311
 
312
-			$this->constants();
313
-			$this->settings = $this->get_settings();
314
-			$this->url = $this->get_url();
312
+            $this->constants();
313
+            $this->settings = $this->get_settings();
314
+            $this->url = $this->get_url();
315 315
 
316 316
             // define the version
317
-			$aui_bs5 = $this->settings['bs_ver'] === '5';
318
-
319
-			if ( $aui_bs5 ) {
320
-				include_once( dirname( __FILE__ ) . '/inc/bs-conversion.php' );
321
-				add_filter( 'admin_body_class', array( $this, 'add_bs5_admin_body_class' ), 99, 1 );
322
-				add_filter( 'body_class', array( $this, 'add_bs5_body_class' ) );
323
-			}
324
-
325
-			/**
326
-			 * Maybe load CSS
327
-			 *
328
-			 * We load super early in case there is a theme version that might change the colors
329
-			 */
330
-			if ( $this->settings['css'] ) {
331
-				$priority = $this->is_bs3_compat() ? 100 : 1;
317
+            $aui_bs5 = $this->settings['bs_ver'] === '5';
318
+
319
+            if ( $aui_bs5 ) {
320
+                include_once( dirname( __FILE__ ) . '/inc/bs-conversion.php' );
321
+                add_filter( 'admin_body_class', array( $this, 'add_bs5_admin_body_class' ), 99, 1 );
322
+                add_filter( 'body_class', array( $this, 'add_bs5_body_class' ) );
323
+            }
324
+
325
+            /**
326
+             * Maybe load CSS
327
+             *
328
+             * We load super early in case there is a theme version that might change the colors
329
+             */
330
+            if ( $this->settings['css'] ) {
331
+                $priority = $this->is_bs3_compat() ? 100 : 1;
332 332
                 $priority = $aui_bs5 ? 10 : $priority;
333
-				add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), $priority );
334
-			}
335
-			if ( $this->settings['css_backend'] && $this->load_admin_scripts() ) {
336
-				add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 1 );
337
-			}
338
-
339
-			// maybe load JS
340
-			if ( $this->settings['js'] ) {
341
-				$priority = $this->is_bs3_compat() ? 100 : 1;
342
-				add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), $priority );
343
-			}
344
-			if ( $this->settings['js_backend'] && $this->load_admin_scripts() ) {
345
-				add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 1 );
346
-			}
347
-
348
-			// Maybe set the HTML font size
349
-			if ( $this->settings['html_font_size'] ) {
350
-				add_action( 'wp_footer', array( $this, 'html_font_size' ), 10 );
351
-			}
352
-
353
-			// Maybe show backend style error
354
-			if( $this->settings['css_backend'] != 'compatibility' || $this->settings['js_backend'] != 'core-popper' ){
355
-				add_action( 'admin_notices', array( $this, 'show_admin_style_notice' ) );
356
-			}
357
-
358
-		}
359
-
360
-		/**
361
-		 * Show admin notice if backend scripts not loaded.
362
-		 */
363
-		public function show_admin_style_notice(){
364
-			$fix_url = admin_url("options-general.php?page=ayecode-ui-settings&aui-fix-admin=true&nonce=".wp_create_nonce('aui-fix-admin'));
365
-			$button = '<a href="'.esc_url($fix_url).'" class="button-primary">Fix Now</a>';
366
-			$message = __( '<b>Style Issue:</b> AyeCode UI is disable or set wrong.')." " .$button;
367
-			echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
368
-		}
369
-
370
-		/**
371
-		 * Check if we should load the admin scripts or not.
372
-		 *
373
-		 * @return bool
374
-		 */
375
-		public function load_admin_scripts(){
376
-			$result = true;
377
-
378
-			// check if specifically disabled
379
-			if(!empty($this->settings['disable_admin'])){
380
-				$url_parts = explode("\n",$this->settings['disable_admin']);
381
-				foreach($url_parts as $part){
382
-					if( strpos($_SERVER['REQUEST_URI'], trim($part)) !== false ){
383
-						return false; // return early, no point checking further
384
-					}
385
-				}
386
-			}
387
-
388
-			return $result;
389
-		}
390
-
391
-		/**
392
-		 * Add a html font size to the footer.
393
-		 */
394
-		public function html_font_size(){
395
-			$this->settings = $this->get_settings();
396
-			echo "<style>html{font-size:".absint($this->settings['html_font_size'])."px;}</style>";
397
-		}
398
-
399
-		/**
400
-		 * Check if the current admin screen should load scripts.
401
-		 *
402
-		 * @return bool
403
-		 */
404
-		public function is_aui_screen(){
333
+                add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ), $priority );
334
+            }
335
+            if ( $this->settings['css_backend'] && $this->load_admin_scripts() ) {
336
+                add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_style' ), 1 );
337
+            }
338
+
339
+            // maybe load JS
340
+            if ( $this->settings['js'] ) {
341
+                $priority = $this->is_bs3_compat() ? 100 : 1;
342
+                add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), $priority );
343
+            }
344
+            if ( $this->settings['js_backend'] && $this->load_admin_scripts() ) {
345
+                add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 1 );
346
+            }
347
+
348
+            // Maybe set the HTML font size
349
+            if ( $this->settings['html_font_size'] ) {
350
+                add_action( 'wp_footer', array( $this, 'html_font_size' ), 10 );
351
+            }
352
+
353
+            // Maybe show backend style error
354
+            if( $this->settings['css_backend'] != 'compatibility' || $this->settings['js_backend'] != 'core-popper' ){
355
+                add_action( 'admin_notices', array( $this, 'show_admin_style_notice' ) );
356
+            }
357
+
358
+        }
359
+
360
+        /**
361
+         * Show admin notice if backend scripts not loaded.
362
+         */
363
+        public function show_admin_style_notice(){
364
+            $fix_url = admin_url("options-general.php?page=ayecode-ui-settings&aui-fix-admin=true&nonce=".wp_create_nonce('aui-fix-admin'));
365
+            $button = '<a href="'.esc_url($fix_url).'" class="button-primary">Fix Now</a>';
366
+            $message = __( '<b>Style Issue:</b> AyeCode UI is disable or set wrong.')." " .$button;
367
+            echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
368
+        }
369
+
370
+        /**
371
+         * Check if we should load the admin scripts or not.
372
+         *
373
+         * @return bool
374
+         */
375
+        public function load_admin_scripts(){
376
+            $result = true;
377
+
378
+            // check if specifically disabled
379
+            if(!empty($this->settings['disable_admin'])){
380
+                $url_parts = explode("\n",$this->settings['disable_admin']);
381
+                foreach($url_parts as $part){
382
+                    if( strpos($_SERVER['REQUEST_URI'], trim($part)) !== false ){
383
+                        return false; // return early, no point checking further
384
+                    }
385
+                }
386
+            }
387
+
388
+            return $result;
389
+        }
390
+
391
+        /**
392
+         * Add a html font size to the footer.
393
+         */
394
+        public function html_font_size(){
395
+            $this->settings = $this->get_settings();
396
+            echo "<style>html{font-size:".absint($this->settings['html_font_size'])."px;}</style>";
397
+        }
398
+
399
+        /**
400
+         * Check if the current admin screen should load scripts.
401
+         *
402
+         * @return bool
403
+         */
404
+        public function is_aui_screen(){
405 405
 //			echo '###';exit;
406
-			$load = false;
407
-			// check if we should load or not
408
-			if ( is_admin() ) {
409
-				// Only enable on set pages
410
-				$aui_screens = array(
411
-					'page',
406
+            $load = false;
407
+            // check if we should load or not
408
+            if ( is_admin() ) {
409
+                // Only enable on set pages
410
+                $aui_screens = array(
411
+                    'page',
412 412
                     //'docs',
413
-					'post',
414
-					'settings_page_ayecode-ui-settings',
415
-					'appearance_page_gutenberg-widgets',
416
-					'widgets',
417
-					'ayecode-ui-settings',
418
-					'site-editor'
419
-				);
420
-				$screen_ids = apply_filters( 'aui_screen_ids', $aui_screens );
413
+                    'post',
414
+                    'settings_page_ayecode-ui-settings',
415
+                    'appearance_page_gutenberg-widgets',
416
+                    'widgets',
417
+                    'ayecode-ui-settings',
418
+                    'site-editor'
419
+                );
420
+                $screen_ids = apply_filters( 'aui_screen_ids', $aui_screens );
421 421
 
422
-				$screen = get_current_screen();
422
+                $screen = get_current_screen();
423 423
 
424 424
 //				echo '###'.$screen->id;
425 425
 
426
-				// check if we are on a AUI screen
427
-				if ( $screen && in_array( $screen->id, $screen_ids ) ) {
428
-					$load = true;
429
-				}
426
+                // check if we are on a AUI screen
427
+                if ( $screen && in_array( $screen->id, $screen_ids ) ) {
428
+                    $load = true;
429
+                }
430 430
 
431
-				//load for widget previews in WP 5.8
432
-				if( !empty($_REQUEST['legacy-widget-preview'])){
433
-					$load = true;
434
-				}
435
-			}
431
+                //load for widget previews in WP 5.8
432
+                if( !empty($_REQUEST['legacy-widget-preview'])){
433
+                    $load = true;
434
+                }
435
+            }
436 436
 
437 437
 
438 438
 
439
-			return apply_filters( 'aui_load_on_admin' , $load );
440
-		}
439
+            return apply_filters( 'aui_load_on_admin' , $load );
440
+        }
441 441
 
442
-		/**
443
-		 * Check if the current theme is a block theme.
444
-		 *
445
-		 * @return bool
446
-		 */
447
-		public static function is_block_theme() {
448
-			if ( function_exists( 'wp_is_block_theme' && wp_is_block_theme() ) ) {
449
-				return true;
450
-			}
442
+        /**
443
+         * Check if the current theme is a block theme.
444
+         *
445
+         * @return bool
446
+         */
447
+        public static function is_block_theme() {
448
+            if ( function_exists( 'wp_is_block_theme' && wp_is_block_theme() ) ) {
449
+                return true;
450
+            }
451 451
 
452
-			return false;
453
-		}
452
+            return false;
453
+        }
454 454
 
455
-		/**
456
-		 * Adds the styles.
457
-		 */
458
-		public function enqueue_style() {
455
+        /**
456
+         * Adds the styles.
457
+         */
458
+        public function enqueue_style() {
459 459
             global $aui_bs5;
460 460
 
461 461
             $load_fse = false;
462 462
 
463
-			if ( is_admin() && ! $this->is_aui_screen() ) {
464
-				// Don't add wp-admin scripts if not requested to.
465
-			} else {
466
-				$css_setting = current_action() == 'wp_enqueue_scripts' ? 'css' : 'css_backend';
467
-				$rtl = is_rtl() && ! $aui_bs5 ? '-rtl' : '';
463
+            if ( is_admin() && ! $this->is_aui_screen() ) {
464
+                // Don't add wp-admin scripts if not requested to.
465
+            } else {
466
+                $css_setting = current_action() == 'wp_enqueue_scripts' ? 'css' : 'css_backend';
467
+                $rtl = is_rtl() && ! $aui_bs5 ? '-rtl' : '';
468 468
                 $bs_ver = $this->settings['bs_ver'] == '5' ? '-v5' : '';
469 469
 
470
-				if ( $this->settings[ $css_setting ] ) {
471
-					$compatibility = $this->settings[$css_setting]=='core' ? false : true;
472
-					$url = $this->settings[$css_setting]=='core' ? $this->url.'assets'.$bs_ver.'/css/ayecode-ui'.$rtl.'.css' : $this->url.'assets'.$bs_ver.'/css/ayecode-ui-compatibility'.$rtl.'.css';
470
+                if ( $this->settings[ $css_setting ] ) {
471
+                    $compatibility = $this->settings[$css_setting]=='core' ? false : true;
472
+                    $url = $this->settings[$css_setting]=='core' ? $this->url.'assets'.$bs_ver.'/css/ayecode-ui'.$rtl.'.css' : $this->url.'assets'.$bs_ver.'/css/ayecode-ui-compatibility'.$rtl.'.css';
473 473
 
474
-					wp_register_style( 'ayecode-ui', $url, array(), $this->version );
475
-					wp_enqueue_style( 'ayecode-ui' );
474
+                    wp_register_style( 'ayecode-ui', $url, array(), $this->version );
475
+                    wp_enqueue_style( 'ayecode-ui' );
476 476
 
477
-					if ( is_admin() && ( !empty($_REQUEST['postType']) || self::is_block_editor() ) && ( defined( 'BLOCKSTRAP_VERSION' ) || defined( 'AUI_FSE' ) )  ) {
478
-						$url = $this->url.'assets'.$bs_ver.'/css/ayecode-ui-fse.css';
479
-						wp_register_style( 'ayecode-ui-fse', $url, array(), $this->version );
480
-						wp_enqueue_style( 'ayecode-ui-fse' );
481
-						$load_fse = true;
482
-					}
477
+                    if ( is_admin() && ( !empty($_REQUEST['postType']) || self::is_block_editor() ) && ( defined( 'BLOCKSTRAP_VERSION' ) || defined( 'AUI_FSE' ) )  ) {
478
+                        $url = $this->url.'assets'.$bs_ver.'/css/ayecode-ui-fse.css';
479
+                        wp_register_style( 'ayecode-ui-fse', $url, array(), $this->version );
480
+                        wp_enqueue_style( 'ayecode-ui-fse' );
481
+                        $load_fse = true;
482
+                    }
483 483
 
484
-					// flatpickr
485
-					wp_register_style( 'flatpickr', $this->url.'assets'.$bs_ver.'/css/flatpickr.min.css', array(), $this->version );
484
+                    // flatpickr
485
+                    wp_register_style( 'flatpickr', $this->url.'assets'.$bs_ver.'/css/flatpickr.min.css', array(), $this->version );
486 486
 
487
-					// fix some wp-admin issues
488
-					if(is_admin()){
489
-						$custom_css = "
487
+                    // fix some wp-admin issues
488
+                    if(is_admin()){
489
+                        $custom_css = "
490 490
                 body{
491 491
                     background-color: #f1f1f1;
492 492
                     font-family: -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Oxygen-Sans,Ubuntu,Cantarell,\"Helvetica Neue\",sans-serif;
@@ -526,63 +526,63 @@  discard block
 block discarded – undo
526 526
 				}
527 527
                 ";
528 528
 
529
-						// @todo, remove once fixed :: fix for this bug https://github.com/WordPress/gutenberg/issues/14377
530
-						$custom_css .= "
529
+                        // @todo, remove once fixed :: fix for this bug https://github.com/WordPress/gutenberg/issues/14377
530
+                        $custom_css .= "
531 531
 						.edit-post-sidebar input[type=color].components-text-control__input{
532 532
 						    padding: 0;
533 533
 						}
534 534
 					";
535
-						wp_add_inline_style( 'ayecode-ui', $custom_css );
536
-					}
537
-
538
-					// custom changes
539
-					if ( $load_fse ) {
540
-						wp_add_inline_style( 'ayecode-ui-fse', self::custom_css($compatibility, true) );
541
-					}else{
542
-						wp_add_inline_style( 'ayecode-ui', self::custom_css($compatibility) );
543
-					}
544
-				}
545
-			}
546
-		}
547
-
548
-		/**
549
-		 * Get inline script used if bootstrap enqueued
550
-		 *
551
-		 * If this remains small then its best to use this than to add another JS file.
552
-		 */
553
-		public function inline_script() {
554
-            global $aui_bs5;
555
-			// Flatpickr calendar locale
556
-			$flatpickr_locale = self::flatpickr_locale();
535
+                        wp_add_inline_style( 'ayecode-ui', $custom_css );
536
+                    }
557 537
 
558
-			ob_start();
559
-			if ( $aui_bs5 ) {
560
-				include_once( dirname( __FILE__ ) . '/inc/bs5-js.php' );
561
-			}else{
562
-				include_once( dirname( __FILE__ ) . '/inc/bs4-js.php' );
538
+                    // custom changes
539
+                    if ( $load_fse ) {
540
+                        wp_add_inline_style( 'ayecode-ui-fse', self::custom_css($compatibility, true) );
541
+                    }else{
542
+                        wp_add_inline_style( 'ayecode-ui', self::custom_css($compatibility) );
543
+                    }
544
+                }
545
+            }
546
+        }
547
+
548
+        /**
549
+         * Get inline script used if bootstrap enqueued
550
+         *
551
+         * If this remains small then its best to use this than to add another JS file.
552
+         */
553
+        public function inline_script() {
554
+            global $aui_bs5;
555
+            // Flatpickr calendar locale
556
+            $flatpickr_locale = self::flatpickr_locale();
557
+
558
+            ob_start();
559
+            if ( $aui_bs5 ) {
560
+                include_once( dirname( __FILE__ ) . '/inc/bs5-js.php' );
561
+            }else{
562
+                include_once( dirname( __FILE__ ) . '/inc/bs4-js.php' );
563 563
             }
564 564
 
565
-			$output = ob_get_clean();
565
+            $output = ob_get_clean();
566 566
 
567
-			/*
567
+            /*
568 568
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
569 569
 			 */
570
-			return str_replace( array(
571
-				'<script>',
572
-				'</script>'
573
-			), '', self::minify_js($output) );
574
-		}
575
-
576
-
577
-		/**
578
-		 * JS to help with conflict issues with other plugins and themes using bootstrap v3.
579
-		 *
580
-		 * @TODO we may need this when other conflicts arrise.
581
-		 * @return mixed
582
-		 */
583
-		public static function bs3_compat_js() {
584
-			ob_start();
585
-			?>
570
+            return str_replace( array(
571
+                '<script>',
572
+                '</script>'
573
+            ), '', self::minify_js($output) );
574
+        }
575
+
576
+
577
+        /**
578
+         * JS to help with conflict issues with other plugins and themes using bootstrap v3.
579
+         *
580
+         * @TODO we may need this when other conflicts arrise.
581
+         * @return mixed
582
+         */
583
+        public static function bs3_compat_js() {
584
+            ob_start();
585
+            ?>
586 586
             <script>
587 587
 				<?php if( defined( 'FUSION_BUILDER_VERSION' ) ){ ?>
588 588
                 /* With Avada builder */
@@ -590,20 +590,20 @@  discard block
 block discarded – undo
590 590
 				<?php } ?>
591 591
             </script>
592 592
 			<?php
593
-			return str_replace( array(
594
-				'<script>',
595
-				'</script>'
596
-			), '', ob_get_clean());
597
-		}
598
-
599
-		/**
600
-		 * Get inline script used if bootstrap file browser enqueued.
601
-		 *
602
-		 * If this remains small then its best to use this than to add another JS file.
603
-		 */
604
-		public function inline_script_file_browser(){
605
-			ob_start();
606
-			?>
593
+            return str_replace( array(
594
+                '<script>',
595
+                '</script>'
596
+            ), '', ob_get_clean());
597
+        }
598
+
599
+        /**
600
+         * Get inline script used if bootstrap file browser enqueued.
601
+         *
602
+         * If this remains small then its best to use this than to add another JS file.
603
+         */
604
+        public function inline_script_file_browser(){
605
+            ob_start();
606
+            ?>
607 607
             <script>
608 608
                 // run on doc ready
609 609
                 jQuery(document).ready(function () {
@@ -611,127 +611,127 @@  discard block
 block discarded – undo
611 611
                 });
612 612
             </script>
613 613
 			<?php
614
-			$output = ob_get_clean();
614
+            $output = ob_get_clean();
615 615
 
616
-			/*
616
+            /*
617 617
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
618 618
 			 */
619
-			return str_replace( array(
620
-				'<script>',
621
-				'</script>'
622
-			), '', $output );
623
-		}
624
-
625
-		/**
626
-		 * Adds the Font Awesome JS.
627
-		 */
628
-		public function enqueue_scripts() {
629
-			if( is_admin() && !$this->is_aui_screen()){
630
-				// Don't add wp-admin scripts if not requested to.
631
-			} else {
632
-				$js_setting = current_action() == 'wp_enqueue_scripts' ? 'js' : 'js_backend';
633
-
634
-				$bs_ver = $this->settings['bs_ver'] == '5' ? '-v5' : '';
635
-
636
-				// select2
637
-				wp_register_script( 'select2', $this->url . 'assets/js/select2.min.js', array( 'jquery' ), $this->select2_version );
638
-
639
-				// flatpickr
640
-				wp_register_script( 'flatpickr', $this->url . 'assets/js/flatpickr.min.js', array(), $this->version );
641
-
642
-				// iconpicker
643
-				if ( defined( 'FAS_ICONPICKER_JS_URL' ) ) {
644
-					wp_register_script( 'iconpicker', FAS_ICONPICKER_JS_URL, array(), $this->version );
645
-				}else{
646
-					wp_register_script( 'iconpicker', $this->url . 'assets/js/fa-iconpicker.min.js', array(), $this->version );
647
-				}
619
+            return str_replace( array(
620
+                '<script>',
621
+                '</script>'
622
+            ), '', $output );
623
+        }
648 624
 
649
-				// Bootstrap file browser
650
-				wp_register_script( 'aui-custom-file-input', $url = $this->url . 'assets/js/bs-custom-file-input.min.js', array( 'jquery' ), $this->select2_version );
651
-				wp_add_inline_script( 'aui-custom-file-input', $this->inline_script_file_browser() );
625
+        /**
626
+         * Adds the Font Awesome JS.
627
+         */
628
+        public function enqueue_scripts() {
629
+            if( is_admin() && !$this->is_aui_screen()){
630
+                // Don't add wp-admin scripts if not requested to.
631
+            } else {
632
+                $js_setting = current_action() == 'wp_enqueue_scripts' ? 'js' : 'js_backend';
652 633
 
653
-				$load_inline = false;
634
+                $bs_ver = $this->settings['bs_ver'] == '5' ? '-v5' : '';
654 635
 
655
-				// Load select2 only when required.
656
-				if ( $this->force_load_select2() ) {
657
-					$dependency = array( 'select2', 'jquery' );
658
-				} else {
659
-					$dependency = array( 'jquery' );
660
-				}
636
+                // select2
637
+                wp_register_script( 'select2', $this->url . 'assets/js/select2.min.js', array( 'jquery' ), $this->select2_version );
661 638
 
662
-				if ( $this->settings[ $js_setting ] == 'core-popper' ) {
663
-					// Bootstrap bundle
664
-					$url = $this->url . 'assets' . $bs_ver . '/js/bootstrap.bundle.min.js';
665
-					wp_register_script( 'bootstrap-js-bundle', $url, $dependency, $this->version, $this->is_bs3_compat() );
666
-
667
-					// If in admin then add to footer for compatibility.
668
-					is_admin() ? wp_enqueue_script( 'bootstrap-js-bundle', '', null, null, true ) : wp_enqueue_script( 'bootstrap-js-bundle' );
669
-
670
-					$script = $this->inline_script();
671
-					wp_add_inline_script( 'bootstrap-js-bundle', $script );
672
-				} elseif ( $this->settings[ $js_setting ] == 'popper' ) {
673
-					$url = $this->url . 'assets/js/popper.min.js'; // @todo we need to update this to bs5
674
-					wp_register_script( 'bootstrap-js-popper', $url, $dependency, $this->version );
675
-					wp_enqueue_script( 'bootstrap-js-popper' );
676
-					$load_inline = true;
677
-				} else {
678
-					$load_inline = true;
679
-				}
639
+                // flatpickr
640
+                wp_register_script( 'flatpickr', $this->url . 'assets/js/flatpickr.min.js', array(), $this->version );
641
+
642
+                // iconpicker
643
+                if ( defined( 'FAS_ICONPICKER_JS_URL' ) ) {
644
+                    wp_register_script( 'iconpicker', FAS_ICONPICKER_JS_URL, array(), $this->version );
645
+                }else{
646
+                    wp_register_script( 'iconpicker', $this->url . 'assets/js/fa-iconpicker.min.js', array(), $this->version );
647
+                }
680 648
 
681
-				// Load needed inline scripts by faking the loading of a script if the main script is not being loaded
682
-				if ( $load_inline ) {
683
-					wp_register_script( 'bootstrap-dummy', '', $dependency );
684
-					wp_enqueue_script( 'bootstrap-dummy' );
649
+                // Bootstrap file browser
650
+                wp_register_script( 'aui-custom-file-input', $url = $this->url . 'assets/js/bs-custom-file-input.min.js', array( 'jquery' ), $this->select2_version );
651
+                wp_add_inline_script( 'aui-custom-file-input', $this->inline_script_file_browser() );
685 652
 
686
-					$script = $this->inline_script();
687
-					wp_add_inline_script( 'bootstrap-dummy', $script );
688
-				}
689
-			}
690
-		}
691
-
692
-		/**
693
-		 * Enqueue select2 if called.
694
-		 *
695
-		 * @since 0.2.29
696
-		 */
697
-		public function force_load_select2() {
698
-			global $aui_select2_enqueued;
699
-
700
-			$conditional_select2 = apply_filters( 'aui_is_conditional_select2', true );
701
-
702
-			if ( $conditional_select2 !== true ) {
703
-				return true;
704
-			}
705
-
706
-			$load = is_admin() && ! $aui_select2_enqueued;
707
-
708
-			return apply_filters( 'aui_force_load_select2', $load );
709
-		}
710
-
711
-		/**
712
-		 * Enqueue select2 if called.
713
-		 *
714
-		 * @since 0.2.29
715
-		 */
716
-		public function enqueue_select2() {
717
-			wp_enqueue_script( 'select2' );
718
-		}
719
-
720
-		/**
721
-		 * Enqueue flatpickr if called.
722
-		 */
723
-		public function enqueue_flatpickr(){
724
-			wp_enqueue_style( 'flatpickr' );
725
-			wp_enqueue_script( 'flatpickr' );
726
-		}
727
-
728
-		/**
729
-		 * Enqueue iconpicker if called.
730
-		 */
731
-		public function enqueue_iconpicker(){
732
-			wp_enqueue_style( 'iconpicker' );
733
-			wp_enqueue_script( 'iconpicker' );
734
-		}
653
+                $load_inline = false;
654
+
655
+                // Load select2 only when required.
656
+                if ( $this->force_load_select2() ) {
657
+                    $dependency = array( 'select2', 'jquery' );
658
+                } else {
659
+                    $dependency = array( 'jquery' );
660
+                }
661
+
662
+                if ( $this->settings[ $js_setting ] == 'core-popper' ) {
663
+                    // Bootstrap bundle
664
+                    $url = $this->url . 'assets' . $bs_ver . '/js/bootstrap.bundle.min.js';
665
+                    wp_register_script( 'bootstrap-js-bundle', $url, $dependency, $this->version, $this->is_bs3_compat() );
666
+
667
+                    // If in admin then add to footer for compatibility.
668
+                    is_admin() ? wp_enqueue_script( 'bootstrap-js-bundle', '', null, null, true ) : wp_enqueue_script( 'bootstrap-js-bundle' );
669
+
670
+                    $script = $this->inline_script();
671
+                    wp_add_inline_script( 'bootstrap-js-bundle', $script );
672
+                } elseif ( $this->settings[ $js_setting ] == 'popper' ) {
673
+                    $url = $this->url . 'assets/js/popper.min.js'; // @todo we need to update this to bs5
674
+                    wp_register_script( 'bootstrap-js-popper', $url, $dependency, $this->version );
675
+                    wp_enqueue_script( 'bootstrap-js-popper' );
676
+                    $load_inline = true;
677
+                } else {
678
+                    $load_inline = true;
679
+                }
680
+
681
+                // Load needed inline scripts by faking the loading of a script if the main script is not being loaded
682
+                if ( $load_inline ) {
683
+                    wp_register_script( 'bootstrap-dummy', '', $dependency );
684
+                    wp_enqueue_script( 'bootstrap-dummy' );
685
+
686
+                    $script = $this->inline_script();
687
+                    wp_add_inline_script( 'bootstrap-dummy', $script );
688
+                }
689
+            }
690
+        }
691
+
692
+        /**
693
+         * Enqueue select2 if called.
694
+         *
695
+         * @since 0.2.29
696
+         */
697
+        public function force_load_select2() {
698
+            global $aui_select2_enqueued;
699
+
700
+            $conditional_select2 = apply_filters( 'aui_is_conditional_select2', true );
701
+
702
+            if ( $conditional_select2 !== true ) {
703
+                return true;
704
+            }
705
+
706
+            $load = is_admin() && ! $aui_select2_enqueued;
707
+
708
+            return apply_filters( 'aui_force_load_select2', $load );
709
+        }
710
+
711
+        /**
712
+         * Enqueue select2 if called.
713
+         *
714
+         * @since 0.2.29
715
+         */
716
+        public function enqueue_select2() {
717
+            wp_enqueue_script( 'select2' );
718
+        }
719
+
720
+        /**
721
+         * Enqueue flatpickr if called.
722
+         */
723
+        public function enqueue_flatpickr(){
724
+            wp_enqueue_style( 'flatpickr' );
725
+            wp_enqueue_script( 'flatpickr' );
726
+        }
727
+
728
+        /**
729
+         * Enqueue iconpicker if called.
730
+         */
731
+        public function enqueue_iconpicker(){
732
+            wp_enqueue_style( 'iconpicker' );
733
+            wp_enqueue_script( 'iconpicker' );
734
+        }
735 735
 
736 736
         /**
737 737
          * Get the url path to the current folder.
@@ -763,171 +763,171 @@  discard block
 block discarded – undo
763 763
             return trailingslashit($url);
764 764
         }
765 765
 
766
-		/**
767
-		 * Get the url path to the current folder.
768
-		 * @todo remove
769
-		 * @return string
770
-		 */
771
-		public function get_url_old() {
772
-
773
-			$url = '';
774
-			// check if we are inside a plugin
775
-			$file_dir = str_replace( "/includes","", wp_normalize_path( dirname( __FILE__ ) ) );
776
-
777
-			// add check in-case user has changed wp-content dir name.
778
-			$wp_content_folder_name = basename(WP_CONTENT_DIR);
779
-			$dir_parts = explode("/$wp_content_folder_name/",$file_dir);
780
-			$url_parts = explode("/$wp_content_folder_name/",plugins_url());
781
-
782
-			if(!empty($url_parts[0]) && !empty($dir_parts[1])){
783
-				$url = trailingslashit( $url_parts[0]."/$wp_content_folder_name/".$dir_parts[1] );
784
-			}
785
-
786
-			return $url;
787
-		}
788
-
789
-		/**
790
-		 * Register the database settings with WordPress.
791
-		 */
792
-		public function register_settings() {
793
-			register_setting( 'ayecode-ui-settings', 'ayecode-ui-settings' );
794
-		}
795
-
796
-		/**
797
-		 * Add the WordPress settings menu item.
798
-		 * @since 1.0.10 Calling function name direct will fail theme check so we don't.
799
-		 */
800
-		public function menu_item() {
801
-			$menu_function = 'add' . '_' . 'options' . '_' . 'page'; // won't pass theme check if function name present in theme
802
-			call_user_func( $menu_function, $this->name, $this->name, 'manage_options', 'ayecode-ui-settings', array(
803
-				$this,
804
-				'settings_page'
805
-			) );
806
-		}
807
-
808
-		/**
809
-		 * Get a list of themes and their default JS settings.
810
-		 *
811
-		 * @return array
812
-		 */
813
-		public function theme_js_settings(){
814
-			return array(
815
-				'ayetheme' => 'popper',
816
-				'listimia' => 'required',
817
-				'listimia_backend' => 'core-popper',
818
-				//'avada'    => 'required', // removed as we now add compatibility
819
-			);
820
-		}
821
-
822
-		/**
766
+        /**
767
+         * Get the url path to the current folder.
768
+         * @todo remove
769
+         * @return string
770
+         */
771
+        public function get_url_old() {
772
+
773
+            $url = '';
774
+            // check if we are inside a plugin
775
+            $file_dir = str_replace( "/includes","", wp_normalize_path( dirname( __FILE__ ) ) );
776
+
777
+            // add check in-case user has changed wp-content dir name.
778
+            $wp_content_folder_name = basename(WP_CONTENT_DIR);
779
+            $dir_parts = explode("/$wp_content_folder_name/",$file_dir);
780
+            $url_parts = explode("/$wp_content_folder_name/",plugins_url());
781
+
782
+            if(!empty($url_parts[0]) && !empty($dir_parts[1])){
783
+                $url = trailingslashit( $url_parts[0]."/$wp_content_folder_name/".$dir_parts[1] );
784
+            }
785
+
786
+            return $url;
787
+        }
788
+
789
+        /**
790
+         * Register the database settings with WordPress.
791
+         */
792
+        public function register_settings() {
793
+            register_setting( 'ayecode-ui-settings', 'ayecode-ui-settings' );
794
+        }
795
+
796
+        /**
797
+         * Add the WordPress settings menu item.
798
+         * @since 1.0.10 Calling function name direct will fail theme check so we don't.
799
+         */
800
+        public function menu_item() {
801
+            $menu_function = 'add' . '_' . 'options' . '_' . 'page'; // won't pass theme check if function name present in theme
802
+            call_user_func( $menu_function, $this->name, $this->name, 'manage_options', 'ayecode-ui-settings', array(
803
+                $this,
804
+                'settings_page'
805
+            ) );
806
+        }
807
+
808
+        /**
809
+         * Get a list of themes and their default JS settings.
810
+         *
811
+         * @return array
812
+         */
813
+        public function theme_js_settings(){
814
+            return array(
815
+                'ayetheme' => 'popper',
816
+                'listimia' => 'required',
817
+                'listimia_backend' => 'core-popper',
818
+                //'avada'    => 'required', // removed as we now add compatibility
819
+            );
820
+        }
821
+
822
+        /**
823 823
          * Get the date the site was installed.
824 824
          *
825
-		 * @return false|string
826
-		 */
825
+         * @return false|string
826
+         */
827 827
         public function get_site_install_date() {
828
-	        global $wpdb; // This gives you access to the WordPress database object
828
+            global $wpdb; // This gives you access to the WordPress database object
829 829
 
830
-	        // Prepare the SQL query to get the oldest registration date
831
-	        $query = "SELECT MIN(user_registered) AS oldest_registration_date FROM {$wpdb->users}";
830
+            // Prepare the SQL query to get the oldest registration date
831
+            $query = "SELECT MIN(user_registered) AS oldest_registration_date FROM {$wpdb->users}";
832 832
 
833
-	        // Execute the query
834
-	        $date = $wpdb->get_var( $query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
833
+            // Execute the query
834
+            $date = $wpdb->get_var( $query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
835 835
 
836
-	        return $date ? $date : false;
836
+            return $date ? $date : false;
837 837
         }
838 838
 
839
-		/**
840
-		 * Show admin notice if backend scripts not loaded.
841
-		 */
842
-		public function show_admin_version_notice(){
843
-			$fix_url = admin_url("options-general.php?page=ayecode-ui-settings" );
844
-			$button = '<a href="'.esc_url($fix_url).'" class="button-primary">View Settings</a>';
845
-			$message = __( '<b>Style Issue:</b> AyeCode UI has changed its default version from v4 to v5, if you notice unwanted style changes, please revert to v4 (saving the settings page will remove this notice)')." " .$button;
846
-			echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
847
-		}
848
-
849
-		/**
850
-		 * Get the current Font Awesome output settings.
851
-		 *
852
-		 * @return array The array of settings.
853
-		 */
854
-		public function get_settings() {
855
-
856
-			$db_settings = get_option( 'ayecode-ui-settings' );
839
+        /**
840
+         * Show admin notice if backend scripts not loaded.
841
+         */
842
+        public function show_admin_version_notice(){
843
+            $fix_url = admin_url("options-general.php?page=ayecode-ui-settings" );
844
+            $button = '<a href="'.esc_url($fix_url).'" class="button-primary">View Settings</a>';
845
+            $message = __( '<b>Style Issue:</b> AyeCode UI has changed its default version from v4 to v5, if you notice unwanted style changes, please revert to v4 (saving the settings page will remove this notice)')." " .$button;
846
+            echo '<div class="notice notice-error aui-settings-error-notice"><p>'. wp_kses_post( $message ).'</p></div>';
847
+        }
848
+
849
+        /**
850
+         * Get the current Font Awesome output settings.
851
+         *
852
+         * @return array The array of settings.
853
+         */
854
+        public function get_settings() {
855
+
856
+            $db_settings = get_option( 'ayecode-ui-settings' );
857 857
 
858 858
             // Maybe show default version notice
859
-			$site_install_date = new DateTime( self::get_site_install_date() );
860
-			$switch_over_date = new DateTime("2024-02-01");
861
-			if ( empty( $db_settings ) && $site_install_date < $switch_over_date ) {
862
-				add_action( 'admin_notices', array( $this, 'show_admin_version_notice' ) );
863
-			}
864
-
865
-			$js_default = 'core-popper';
866
-			$js_default_backend = $js_default;
867
-
868
-			// maybe set defaults (if no settings set)
869
-			if(empty($db_settings)){
870
-				$active_theme = strtolower( get_template() ); // active parent theme.
871
-				$theme_js_settings = self::theme_js_settings();
872
-				if(isset($theme_js_settings[$active_theme])){
873
-					$js_default = $theme_js_settings[$active_theme];
874
-					$js_default_backend = isset($theme_js_settings[$active_theme."_backend"]) ? $theme_js_settings[$active_theme."_backend"] : $js_default;
875
-				}
876
-			}
859
+            $site_install_date = new DateTime( self::get_site_install_date() );
860
+            $switch_over_date = new DateTime("2024-02-01");
861
+            if ( empty( $db_settings ) && $site_install_date < $switch_over_date ) {
862
+                add_action( 'admin_notices', array( $this, 'show_admin_version_notice' ) );
863
+            }
877 864
 
878
-			/**
879
-			 * Filter the default settings.
880
-			 */
881
-			$defaults = apply_filters( 'ayecode-ui-default-settings', array(
882
-				'css'            => 'compatibility', // core, compatibility
883
-				'js'             => $js_default, // js to load, core-popper, popper
884
-				'html_font_size' => '16', // js to load, core-popper, popper
885
-				'css_backend'    => 'compatibility', // core, compatibility
886
-				'js_backend'     => $js_default_backend, // js to load, core-popper, popper
887
-				'disable_admin'  => '', // URL snippets to disable loading on admin
865
+            $js_default = 'core-popper';
866
+            $js_default_backend = $js_default;
867
+
868
+            // maybe set defaults (if no settings set)
869
+            if(empty($db_settings)){
870
+                $active_theme = strtolower( get_template() ); // active parent theme.
871
+                $theme_js_settings = self::theme_js_settings();
872
+                if(isset($theme_js_settings[$active_theme])){
873
+                    $js_default = $theme_js_settings[$active_theme];
874
+                    $js_default_backend = isset($theme_js_settings[$active_theme."_backend"]) ? $theme_js_settings[$active_theme."_backend"] : $js_default;
875
+                }
876
+            }
877
+
878
+            /**
879
+             * Filter the default settings.
880
+             */
881
+            $defaults = apply_filters( 'ayecode-ui-default-settings', array(
882
+                'css'            => 'compatibility', // core, compatibility
883
+                'js'             => $js_default, // js to load, core-popper, popper
884
+                'html_font_size' => '16', // js to load, core-popper, popper
885
+                'css_backend'    => 'compatibility', // core, compatibility
886
+                'js_backend'     => $js_default_backend, // js to load, core-popper, popper
887
+                'disable_admin'  => '', // URL snippets to disable loading on admin
888 888
                 'bs_ver'         => '5', // The default bootstrap version to sue by default
889
-			), $db_settings );
889
+            ), $db_settings );
890 890
 
891
-			$settings = wp_parse_args( $db_settings, $defaults );
891
+            $settings = wp_parse_args( $db_settings, $defaults );
892 892
 
893
-			/**
894
-			 * Filter the Bootstrap settings.
895
-			 *
896
-			 * @todo if we add this filer people might use it and then it defeats the purpose of this class :/
897
-			 */
898
-			return $this->settings = apply_filters( 'ayecode-ui-settings', $settings, $db_settings, $defaults );
899
-		}
893
+            /**
894
+             * Filter the Bootstrap settings.
895
+             *
896
+             * @todo if we add this filer people might use it and then it defeats the purpose of this class :/
897
+             */
898
+            return $this->settings = apply_filters( 'ayecode-ui-settings', $settings, $db_settings, $defaults );
899
+        }
900 900
 
901 901
 
902
-		/**
903
-		 * The settings page html output.
904
-		 */
905
-		public function settings_page() {
906
-			if ( ! current_user_can( 'manage_options' ) ) {
907
-				wp_die( esc_attr__( 'You do not have sufficient permissions to access this page.', 'ayecode-connect' ) );
908
-			}
902
+        /**
903
+         * The settings page html output.
904
+         */
905
+        public function settings_page() {
906
+            if ( ! current_user_can( 'manage_options' ) ) {
907
+                wp_die( esc_attr__( 'You do not have sufficient permissions to access this page.', 'ayecode-connect' ) );
908
+            }
909 909
             $overrides = apply_filters( 'ayecode-ui-settings', array(), array(), array() );
910 910
 
911
-			?>
911
+            ?>
912 912
             <div class="wrap">
913 913
                 <h1><?php echo esc_attr( $this->name ); ?></h1>
914 914
                 <p><?php echo esc_html( apply_filters( 'ayecode-ui-settings-message', __("Here you can adjust settings if you are having compatibility issues.", 'ayecode-connect' ) ) );?></p>
915 915
                 <form method="post" action="options.php">
916 916
 					<?php
917
-					settings_fields( 'ayecode-ui-settings' );
918
-					do_settings_sections( 'ayecode-ui-settings' );
919
-					?>
917
+                    settings_fields( 'ayecode-ui-settings' );
918
+                    do_settings_sections( 'ayecode-ui-settings' );
919
+                    ?>
920 920
 
921 921
                     <h2><?php esc_html_e( 'BootStrap Version', 'ayecode-connect' ); ?></h2>
922 922
                     <p><?php echo esc_html( apply_filters( 'ayecode-ui-version-settings-message', __("V5 is recommended, however if you have another plugin installed using v4, you may need to use v4 also.", 'ayecode-connect' ) ) );?></p>
923 923
 	                <div class="bsui"><?php
924
-	                if ( ! empty( $overrides ) ) {
925
-		                echo aui()->alert(array( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
926
-			                'type'=> 'info',
927
-			                'content'=> esc_attr__("Some options are disabled as your current theme is overriding them.", 'ayecode-connect' )
928
-		                ));
929
-	                }
930
-	                ?>
924
+                    if ( ! empty( $overrides ) ) {
925
+                        echo aui()->alert(array( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
926
+                            'type'=> 'info',
927
+                            'content'=> esc_attr__("Some options are disabled as your current theme is overriding them.", 'ayecode-connect' )
928
+                        ));
929
+                    }
930
+                    ?>
931 931
                     </div>
932 932
                     <table class="form-table wpbs-table-version-settings">
933 933
                         <tr valign="top">
@@ -1011,77 +1011,77 @@  discard block
 block discarded – undo
1011 1011
                     </table>
1012 1012
 
1013 1013
 					<?php
1014
-					submit_button();
1015
-					?>
1014
+                    submit_button();
1015
+                    ?>
1016 1016
                 </form>
1017 1017
                 <div id="wpbs-version" data-aui-source="<?php echo esc_attr( $this->get_load_source() ); ?>"><?php echo esc_html( $this->version ); ?></div>
1018 1018
             </div>
1019 1019
 			<?php
1020
-		}
1020
+        }
1021 1021
 
1022 1022
         public function get_load_source(){
1023
-	        $file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
1024
-	        $plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
1025
-
1026
-	        // Find source plugin/theme of SD
1027
-	        $source = array();
1028
-	        if ( strpos( $file, $plugins_dir ) !== false ) {
1029
-		        $source = explode( "/", plugin_basename( $file ) );
1030
-	        } else if ( function_exists( 'get_theme_root' ) ) {
1031
-		        $themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
1032
-
1033
-		        if ( strpos( $file, $themes_dir ) !== false ) {
1034
-			        $source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
1035
-		        }
1036
-	        }
1023
+            $file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
1024
+            $plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
1025
+
1026
+            // Find source plugin/theme of SD
1027
+            $source = array();
1028
+            if ( strpos( $file, $plugins_dir ) !== false ) {
1029
+                $source = explode( "/", plugin_basename( $file ) );
1030
+            } else if ( function_exists( 'get_theme_root' ) ) {
1031
+                $themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
1032
+
1033
+                if ( strpos( $file, $themes_dir ) !== false ) {
1034
+                    $source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
1035
+                }
1036
+            }
1037 1037
 
1038 1038
             return isset($source[0]) ? esc_attr($source[0]) : '';
1039 1039
         }
1040 1040
 
1041
-		public function customizer_settings($wp_customize){
1042
-			$wp_customize->add_section('aui_settings', array(
1043
-				'title'    => __('AyeCode UI', 'ayecode-connect' ),
1044
-				'priority' => 120,
1045
-			));
1046
-
1047
-			//  =============================
1048
-			//  = Color Picker              =
1049
-			//  =============================
1050
-			$wp_customize->add_setting('aui_options[color_primary]', array(
1051
-				'default'           => AUI_PRIMARY_COLOR,
1052
-				'sanitize_callback' => 'sanitize_hex_color',
1053
-				'capability'        => 'edit_theme_options',
1054
-				'type'              => 'option',
1055
-				'transport'         => 'refresh',
1056
-			));
1057
-			$wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_primary', array(
1058
-				'label'    => __('Primary Color', 'ayecode-connect' ),
1059
-				'section'  => 'aui_settings',
1060
-				'settings' => 'aui_options[color_primary]',
1061
-			)));
1062
-
1063
-			$wp_customize->add_setting('aui_options[color_secondary]', array(
1064
-				'default'           => '#6c757d',
1065
-				'sanitize_callback' => 'sanitize_hex_color',
1066
-				'capability'        => 'edit_theme_options',
1067
-				'type'              => 'option',
1068
-				'transport'         => 'refresh',
1069
-			));
1070
-			$wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_secondary', array(
1071
-				'label'    => __('Secondary Color', 'ayecode-connect' ),
1072
-				'section'  => 'aui_settings',
1073
-				'settings' => 'aui_options[color_secondary]',
1074
-			)));
1075
-		}
1076
-
1077
-		/**
1078
-		 * CSS to help with conflict issues with other plugins and themes using bootstrap v3.
1079
-		 *
1080
-		 * @return mixed
1081
-		 */
1082
-		public static function bs3_compat_css() {
1083
-			ob_start();
1084
-			?>
1041
+        public function customizer_settings($wp_customize){
1042
+            $wp_customize->add_section('aui_settings', array(
1043
+                'title'    => __('AyeCode UI', 'ayecode-connect' ),
1044
+                'priority' => 120,
1045
+            ));
1046
+
1047
+            //  =============================
1048
+            //  = Color Picker              =
1049
+            //  =============================
1050
+            $wp_customize->add_setting('aui_options[color_primary]', array(
1051
+                'default'           => AUI_PRIMARY_COLOR,
1052
+                'sanitize_callback' => 'sanitize_hex_color',
1053
+                'capability'        => 'edit_theme_options',
1054
+                'type'              => 'option',
1055
+                'transport'         => 'refresh',
1056
+            ));
1057
+            $wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_primary', array(
1058
+                'label'    => __('Primary Color', 'ayecode-connect' ),
1059
+                'section'  => 'aui_settings',
1060
+                'settings' => 'aui_options[color_primary]',
1061
+            )));
1062
+
1063
+            $wp_customize->add_setting('aui_options[color_secondary]', array(
1064
+                'default'           => '#6c757d',
1065
+                'sanitize_callback' => 'sanitize_hex_color',
1066
+                'capability'        => 'edit_theme_options',
1067
+                'type'              => 'option',
1068
+                'transport'         => 'refresh',
1069
+            ));
1070
+            $wp_customize->add_control( new WP_Customize_Color_Control($wp_customize, 'color_secondary', array(
1071
+                'label'    => __('Secondary Color', 'ayecode-connect' ),
1072
+                'section'  => 'aui_settings',
1073
+                'settings' => 'aui_options[color_secondary]',
1074
+            )));
1075
+        }
1076
+
1077
+        /**
1078
+         * CSS to help with conflict issues with other plugins and themes using bootstrap v3.
1079
+         *
1080
+         * @return mixed
1081
+         */
1082
+        public static function bs3_compat_css() {
1083
+            ob_start();
1084
+            ?>
1085 1085
             <style>
1086 1086
                 /* Bootstrap 3 compatibility */
1087 1087
                 body.modal-open .modal-backdrop.show:not(.in) {opacity:0.5;}
@@ -1110,368 +1110,368 @@  discard block
 block discarded – undo
1110 1110
                 <?php } ?>
1111 1111
             </style>
1112 1112
 			<?php
1113
-			return str_replace( array(
1114
-				'<style>',
1115
-				'</style>'
1116
-			), '', self::minify_css( ob_get_clean() ) );
1117
-		}
1113
+            return str_replace( array(
1114
+                '<style>',
1115
+                '</style>'
1116
+            ), '', self::minify_css( ob_get_clean() ) );
1117
+        }
1118 1118
 
1119
-		public static function custom_css( $compatibility = true, $is_fse = false ) {
1120
-			global $aui_bs5;
1119
+        public static function custom_css( $compatibility = true, $is_fse = false ) {
1120
+            global $aui_bs5;
1121 1121
 
1122
-			$colors = array();
1122
+            $colors = array();
1123 1123
 
1124
-			if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
1125
-				$setting = wp_get_global_settings();
1124
+            if ( defined( 'BLOCKSTRAP_VERSION' ) ) {
1125
+                $setting = wp_get_global_settings();
1126 1126
 
1127
-				if ( ! empty( $setting['color']['palette']['theme'] ) ) {
1128
-					foreach ( $setting['color']['palette']['theme'] as $color ) {
1129
-						$colors[$color['slug']] = esc_attr( $color['color'] );
1130
-					}
1131
-				}
1127
+                if ( ! empty( $setting['color']['palette']['theme'] ) ) {
1128
+                    foreach ( $setting['color']['palette']['theme'] as $color ) {
1129
+                        $colors[$color['slug']] = esc_attr( $color['color'] );
1130
+                    }
1131
+                }
1132 1132
 
1133
-				if ( ! empty( $setting['color']['palette']['custom'] ) ) {
1134
-					foreach ( $setting['color']['palette']['custom'] as $color ) {
1135
-						$colors[$color['slug']] = esc_attr( $color['color'] );
1136
-					}
1137
-				}
1138
-			} else {
1139
-				$settings = get_option( 'aui_options' );
1140
-
1141
-				$colors = array(
1142
-					'primary'   => ! empty( $settings['color_primary'] ) ? $settings['color_primary'] : AUI_PRIMARY_COLOR,
1143
-					'secondary' => ! empty( $settings['color_secondary'] ) ? $settings['color_secondary'] : AUI_SECONDARY_COLOR
1144
-				);
1145
-			}
1146
-
1147
-			ob_start();
1148
-			?><style><?php
1149
-			// BS v3 compat
1150
-			if( self::is_bs3_compat() ){
1151
-				echo self::bs3_compat_css(); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1152
-			}
1153
-
1154
-			//$is_fse = false;
1155
-			//if ( is_admin() && ( !empty($_REQUEST['postType']) || self::is_block_editor() ) && ( defined( 'BLOCKSTRAP_VERSION' ) || defined( 'AUI_FSE' ) )  ) {
1156
-				//$is_fse = true;
1157
-			//}
1158
-
1159
-			$custom_front = ! is_admin() ? true : apply_filters('ayecode_ui_custom_front', false );
1160
-			$custom_admin = $is_fse || self::is_preview() ? true : apply_filters('ayecode_ui_custom_admin', false );
1133
+                if ( ! empty( $setting['color']['palette']['custom'] ) ) {
1134
+                    foreach ( $setting['color']['palette']['custom'] as $color ) {
1135
+                        $colors[$color['slug']] = esc_attr( $color['color'] );
1136
+                    }
1137
+                }
1138
+            } else {
1139
+                $settings = get_option( 'aui_options' );
1140
+
1141
+                $colors = array(
1142
+                    'primary'   => ! empty( $settings['color_primary'] ) ? $settings['color_primary'] : AUI_PRIMARY_COLOR,
1143
+                    'secondary' => ! empty( $settings['color_secondary'] ) ? $settings['color_secondary'] : AUI_SECONDARY_COLOR
1144
+                );
1145
+            }
1146
+
1147
+            ob_start();
1148
+            ?><style><?php
1149
+            // BS v3 compat
1150
+            if( self::is_bs3_compat() ){
1151
+                echo self::bs3_compat_css(); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1152
+            }
1153
+
1154
+            //$is_fse = false;
1155
+            //if ( is_admin() && ( !empty($_REQUEST['postType']) || self::is_block_editor() ) && ( defined( 'BLOCKSTRAP_VERSION' ) || defined( 'AUI_FSE' ) )  ) {
1156
+                //$is_fse = true;
1157
+            //}
1158
+
1159
+            $custom_front = ! is_admin() ? true : apply_filters('ayecode_ui_custom_front', false );
1160
+            $custom_admin = $is_fse || self::is_preview() ? true : apply_filters('ayecode_ui_custom_admin', false );
1161 1161
             $bs_custom_css = apply_filters( 'ayecode_ui_bs_custom_css', $custom_admin || $custom_front );
1162
-			//$bs_custom_css = true; // Force true to fix any color issue.
1162
+            //$bs_custom_css = true; // Force true to fix any color issue.
1163 1163
 
1164
-			$colors_css = '';
1165
-			if ( ! empty( $colors ) && $bs_custom_css ) {
1166
-				$d_colors = self::get_colors(true);
1164
+            $colors_css = '';
1165
+            if ( ! empty( $colors ) && $bs_custom_css ) {
1166
+                $d_colors = self::get_colors(true);
1167 1167
 
1168
-				foreach ( $colors as $key => $color ) {
1169
-					if ( ( empty( $d_colors[$key]) || $d_colors[$key] != $color) || $is_fse ) {
1170
-						$var = $is_fse ? "var(--wp--preset--color--$key)" : $color;
1171
-						$compat = $is_fse ? '.editor-styles-wrapper' : $compatibility;
1168
+                foreach ( $colors as $key => $color ) {
1169
+                    if ( ( empty( $d_colors[$key]) || $d_colors[$key] != $color) || $is_fse ) {
1170
+                        $var = $is_fse ? "var(--wp--preset--color--$key)" : $color;
1171
+                        $compat = $is_fse ? '.editor-styles-wrapper' : $compatibility;
1172 1172
 
1173
-						$colors_css .= $aui_bs5 ? self::css_overwrite_bs5( $key,$var, $compat, $color ) : self::css_overwrite( $key, $var, $compat, $color );
1174
-					}
1175
-				}
1176
-			}
1173
+                        $colors_css .= $aui_bs5 ? self::css_overwrite_bs5( $key,$var, $compat, $color ) : self::css_overwrite( $key, $var, $compat, $color );
1174
+                    }
1175
+                }
1176
+            }
1177 1177
 
1178
-			if ( $colors_css ) {
1179
-				echo $colors_css; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1180
-			}
1178
+            if ( $colors_css ) {
1179
+                echo $colors_css; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1180
+            }
1181 1181
 
1182
-			// Set admin bar z-index lower when modal is open.
1183
-			echo ' body.modal-open #wpadminbar{z-index:999}.embed-responsive-16by9 .fluid-width-video-wrapper{padding:0 !important;position:initial}';
1182
+            // Set admin bar z-index lower when modal is open.
1183
+            echo ' body.modal-open #wpadminbar{z-index:999}.embed-responsive-16by9 .fluid-width-video-wrapper{padding:0 !important;position:initial}';
1184 1184
 
1185
-			if ( is_admin() ) {
1186
-				echo ' body.modal-open #adminmenuwrap{z-index:999} body.modal-open #wpadminbar{z-index:1025}';
1187
-			}
1185
+            if ( is_admin() ) {
1186
+                echo ' body.modal-open #adminmenuwrap{z-index:999} body.modal-open #wpadminbar{z-index:1025}';
1187
+            }
1188 1188
 
1189
-			$custom_css = '';
1189
+            $custom_css = '';
1190 1190
 
1191
-			if ( $aui_bs5 && defined( 'BLOCKSTRAP_VERSION' ) && $bs_custom_css ) {
1192
-				$css = '';
1193
-				$theme_settings = wp_get_global_styles();
1191
+            if ( $aui_bs5 && defined( 'BLOCKSTRAP_VERSION' ) && $bs_custom_css ) {
1192
+                $css = '';
1193
+                $theme_settings = wp_get_global_styles();
1194 1194
 
1195
-				// Font face
1196
-				if( !empty( $theme_settings['typography']['fontFamily'] ) ){
1197
-					$t_fontface = str_replace( array('var:preset|','font-family|'), array('--wp--preset--','font-family--'), $theme_settings['typography']['fontFamily']  ); //var(--wp--preset--font-family--poppins)
1198
-					$css .= '--bs-body-font-family: ' . esc_attr($t_fontface) . ';';
1199
-				}
1195
+                // Font face
1196
+                if( !empty( $theme_settings['typography']['fontFamily'] ) ){
1197
+                    $t_fontface = str_replace( array('var:preset|','font-family|'), array('--wp--preset--','font-family--'), $theme_settings['typography']['fontFamily']  ); //var(--wp--preset--font-family--poppins)
1198
+                    $css .= '--bs-body-font-family: ' . esc_attr($t_fontface) . ';';
1199
+                }
1200 1200
 
1201
-				// font size
1202
-				if( !empty( $theme_settings['typography']['fontSize'] ) ){
1203
-					$css .= '--bs-body-font-size: ' . esc_attr( $theme_settings['typography']['fontSize'] ) . ' ;';
1204
-				}
1201
+                // font size
1202
+                if( !empty( $theme_settings['typography']['fontSize'] ) ){
1203
+                    $css .= '--bs-body-font-size: ' . esc_attr( $theme_settings['typography']['fontSize'] ) . ' ;';
1204
+                }
1205 1205
 
1206
-				// line height
1207
-				 if( !empty( $theme_settings['typography']['lineHeight'] ) ){
1208
-					$css .= '--bs-body-line-height: ' . esc_attr( $theme_settings['typography']['lineHeight'] ) . ';';
1209
-				}
1206
+                // line height
1207
+                    if( !empty( $theme_settings['typography']['lineHeight'] ) ){
1208
+                    $css .= '--bs-body-line-height: ' . esc_attr( $theme_settings['typography']['lineHeight'] ) . ';';
1209
+                }
1210 1210
 
1211 1211
 
1212
-				   // font weight
1213
-				 if( !empty( $theme_settings['typography']['fontWeight'] ) ){
1214
-					$css .= '--bs-body-font-weight: ' . esc_attr( $theme_settings['typography']['fontWeight'] ) . ';';
1215
-				}
1212
+                    // font weight
1213
+                    if( !empty( $theme_settings['typography']['fontWeight'] ) ){
1214
+                    $css .= '--bs-body-font-weight: ' . esc_attr( $theme_settings['typography']['fontWeight'] ) . ';';
1215
+                }
1216 1216
 
1217
-				// Background
1218
-				 if( !empty( $theme_settings['color']['background'] ) ){
1219
-					$css .= '--bs-body-bg: ' . esc_attr( $theme_settings['color']['background'] ) . ';';
1220
-				}
1217
+                // Background
1218
+                    if( !empty( $theme_settings['color']['background'] ) ){
1219
+                    $css .= '--bs-body-bg: ' . esc_attr( $theme_settings['color']['background'] ) . ';';
1220
+                }
1221 1221
 
1222
-				 // Background Gradient
1223
-				 if( !empty( $theme_settings['color']['gradient'] ) ){
1224
-					$css .= 'background: ' . esc_attr( $theme_settings['color']['gradient'] ) . ';';
1225
-				}
1222
+                    // Background Gradient
1223
+                    if( !empty( $theme_settings['color']['gradient'] ) ){
1224
+                    $css .= 'background: ' . esc_attr( $theme_settings['color']['gradient'] ) . ';';
1225
+                }
1226 1226
 
1227
-				   // Background Gradient
1228
-				 if( !empty( $theme_settings['color']['gradient'] ) ){
1229
-					$css .= 'background: ' . esc_attr( $theme_settings['color']['gradient'] ) . ';';
1230
-				}
1227
+                    // Background Gradient
1228
+                    if( !empty( $theme_settings['color']['gradient'] ) ){
1229
+                    $css .= 'background: ' . esc_attr( $theme_settings['color']['gradient'] ) . ';';
1230
+                }
1231 1231
 
1232
-				// text color
1233
-				if( !empty( $theme_settings['color']['text'] ) ){
1234
-					$css .= '--bs-body-color: ' . esc_attr( $theme_settings['color']['text'] ) . ';';
1235
-				}
1232
+                // text color
1233
+                if( !empty( $theme_settings['color']['text'] ) ){
1234
+                    $css .= '--bs-body-color: ' . esc_attr( $theme_settings['color']['text'] ) . ';';
1235
+                }
1236 1236
 
1237 1237
 
1238
-				// link colors
1239
-				if( !empty( $theme_settings['elements']['link']['color']['text'] ) ){
1240
-					$css .= '--bs-link-color: ' . esc_attr( $theme_settings['elements']['link']['color']['text'] ) . ';';
1241
-				}
1242
-				if( !empty( $theme_settings['elements']['link'][':hover']['color']['text'] ) ){
1243
-					$css .= '--bs-link-hover-color: ' . esc_attr( $theme_settings['elements']['link'][':hover']['color']['text'] ) . ';';
1244
-				}
1238
+                // link colors
1239
+                if( !empty( $theme_settings['elements']['link']['color']['text'] ) ){
1240
+                    $css .= '--bs-link-color: ' . esc_attr( $theme_settings['elements']['link']['color']['text'] ) . ';';
1241
+                }
1242
+                if( !empty( $theme_settings['elements']['link'][':hover']['color']['text'] ) ){
1243
+                    $css .= '--bs-link-hover-color: ' . esc_attr( $theme_settings['elements']['link'][':hover']['color']['text'] ) . ';';
1244
+                }
1245 1245
 
1246
-				if($css){
1247
-					$custom_css .= $is_fse ? 'body.editor-styles-wrapper{' . esc_attr( $css ) . '}' : 'body{' . esc_attr( $css ) . '}';
1248
-				}
1246
+                if($css){
1247
+                    $custom_css .= $is_fse ? 'body.editor-styles-wrapper{' . esc_attr( $css ) . '}' : 'body{' . esc_attr( $css ) . '}';
1248
+                }
1249 1249
 
1250
-				$bep = $is_fse ? 'body.editor-styles-wrapper ' : '';
1250
+                $bep = $is_fse ? 'body.editor-styles-wrapper ' : '';
1251 1251
 
1252
-				// Headings
1253
-				$headings_css = '';
1254
-				if( !empty( $theme_settings['elements']['heading']['color']['text'] ) ){
1255
-					$headings_css .= "color: " . esc_attr( $theme_settings['elements']['heading']['color']['text'] ) . ";";
1256
-				}
1252
+                // Headings
1253
+                $headings_css = '';
1254
+                if( !empty( $theme_settings['elements']['heading']['color']['text'] ) ){
1255
+                    $headings_css .= "color: " . esc_attr( $theme_settings['elements']['heading']['color']['text'] ) . ";";
1256
+                }
1257 1257
 
1258
-				// heading background
1259
-				if( !empty( $theme_settings['elements']['heading']['color']['background'] ) ){
1260
-					$headings_css .= 'background: ' . esc_attr( $theme_settings['elements']['heading']['color']['background'] ) . ';';
1261
-				}
1258
+                // heading background
1259
+                if( !empty( $theme_settings['elements']['heading']['color']['background'] ) ){
1260
+                    $headings_css .= 'background: ' . esc_attr( $theme_settings['elements']['heading']['color']['background'] ) . ';';
1261
+                }
1262 1262
 
1263
-				 // heading font family
1264
-				if( !empty( $theme_settings['elements']['heading']['typography']['fontFamily'] ) ){
1265
-					$headings_css .= 'font-family: ' . esc_attr( $theme_settings['elements']['heading']['typography']['fontFamily']  ) . ';';
1266
-				}
1263
+                    // heading font family
1264
+                if( !empty( $theme_settings['elements']['heading']['typography']['fontFamily'] ) ){
1265
+                    $headings_css .= 'font-family: ' . esc_attr( $theme_settings['elements']['heading']['typography']['fontFamily']  ) . ';';
1266
+                }
1267 1267
 
1268
-				if( $headings_css ){
1269
-					$custom_css .= "$bep h1,$bep h2,$bep h3, $bep h4,$bep h5,$bep h6{ " . esc_attr( $headings_css ) . "}";
1270
-				}
1268
+                if( $headings_css ){
1269
+                    $custom_css .= "$bep h1,$bep h2,$bep h3, $bep h4,$bep h5,$bep h6{ " . esc_attr( $headings_css ) . "}";
1270
+                }
1271 1271
 
1272
-				$hs = array('h1','h2','h3','h4','h5','h6');
1272
+                $hs = array('h1','h2','h3','h4','h5','h6');
1273 1273
 
1274
-				foreach($hs as $hn){
1275
-					$h_css = '';
1276
-					 if( !empty( $theme_settings['elements'][$hn]['color']['text'] ) ){
1277
-						$h_css .= 'color: ' . esc_attr( $theme_settings['elements'][$hn]['color']['text'] ) . ';';
1278
-					 }
1274
+                foreach($hs as $hn){
1275
+                    $h_css = '';
1276
+                        if( !empty( $theme_settings['elements'][$hn]['color']['text'] ) ){
1277
+                        $h_css .= 'color: ' . esc_attr( $theme_settings['elements'][$hn]['color']['text'] ) . ';';
1278
+                        }
1279 1279
 
1280
-					  if( !empty( $theme_settings['elements'][$hn]['typography']['fontSize'] ) ){
1281
-						$h_css .= 'font-size: ' . esc_attr( $theme_settings['elements'][$hn]['typography']['fontSize']  ) . ';';
1282
-					 }
1280
+                        if( !empty( $theme_settings['elements'][$hn]['typography']['fontSize'] ) ){
1281
+                        $h_css .= 'font-size: ' . esc_attr( $theme_settings['elements'][$hn]['typography']['fontSize']  ) . ';';
1282
+                        }
1283 1283
 
1284
-					  if( !empty( $theme_settings['elements'][$hn]['typography']['fontFamily'] ) ){
1285
-						$h_css .= 'font-family: ' . esc_attr( $theme_settings['elements'][$hn]['typography']['fontFamily']  ) . ';';
1286
-					 }
1284
+                        if( !empty( $theme_settings['elements'][$hn]['typography']['fontFamily'] ) ){
1285
+                        $h_css .= 'font-family: ' . esc_attr( $theme_settings['elements'][$hn]['typography']['fontFamily']  ) . ';';
1286
+                        }
1287 1287
 
1288
-					 if($h_css){
1289
-						$custom_css .= esc_attr( $bep  . $hn ) . '{'.esc_attr( $h_css ).'}';
1290
-					 }
1291
-				}
1292
-			}
1288
+                        if($h_css){
1289
+                        $custom_css .= esc_attr( $bep  . $hn ) . '{'.esc_attr( $h_css ).'}';
1290
+                        }
1291
+                }
1292
+            }
1293 1293
 			
1294
-			if ( $custom_css ) {
1295
-				echo $custom_css; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1296
-			}
1297
-
1298
-			// Pagination on Hello Elementor theme.
1299
-			if ( function_exists( 'hello_elementor_setup' ) ) {
1300
-				echo '.aui-nav-links .pagination{justify-content:inherit}';
1301
-			}
1302
-			?></style><?php
1303
-			$custom_css = ob_get_clean();
1304
-
1305
-			/*
1294
+            if ( $custom_css ) {
1295
+                echo $custom_css; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
1296
+            }
1297
+
1298
+            // Pagination on Hello Elementor theme.
1299
+            if ( function_exists( 'hello_elementor_setup' ) ) {
1300
+                echo '.aui-nav-links .pagination{justify-content:inherit}';
1301
+            }
1302
+            ?></style><?php
1303
+            $custom_css = ob_get_clean();
1304
+
1305
+            /*
1306 1306
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1307 1307
 			 */
1308
-			return str_replace( array(
1309
-				'<style>',
1310
-				'</style>'
1311
-			), '', self::minify_css( $custom_css ) );
1312
-		}
1313
-
1314
-		/**
1315
-		 * Check if we should add booststrap 3 compatibility changes.
1316
-		 *
1317
-		 * @return bool
1318
-		 */
1319
-		public static function is_bs3_compat(){
1320
-			return defined('AYECODE_UI_BS3_COMPAT') || defined('SVQ_THEME_VERSION') || defined('FUSION_BUILDER_VERSION');
1321
-		}
1322
-
1323
-		public static function hex_to_rgb( $hex ) {
1324
-			// Remove '#' if present
1325
-			$hex = str_replace( '#', '', $hex );
1326
-
1327
-			// Check if input is RGB
1328
-			if ( strpos( $hex, 'rgba(' ) === 0 || strpos( $hex, 'rgb(' ) === 0 ) {
1329
-				$_rgb = explode( ',', str_replace( array( 'rgba(', 'rgb(', ')' ), '', $hex ) );
1330
-
1331
-				$rgb = ( isset( $_rgb[0] ) ? (int) trim( $_rgb[0] ) : '0' ) . ',';
1332
-				$rgb .= ( isset( $_rgb[1] ) ? (int) trim( $_rgb[1] ) : '0' ) . ',';
1333
-				$rgb .= ( isset( $_rgb[2] ) ? (int) trim( $_rgb[2] ) : '0' );
1334
-
1335
-				return $rgb;
1336
-			}
1337
-
1338
-			// Convert 3-digit hex to 6-digit hex
1339
-			if ( strlen( $hex ) == 3 ) {
1340
-				$hex = str_repeat( substr( $hex, 0, 1 ), 2 ) . str_repeat( substr( $hex, 1, 1 ), 2 ) . str_repeat( substr( $hex, 2, 1 ), 2 );
1341
-			}
1342
-
1343
-			// Convert hex to RGB
1344
-			$r = hexdec( substr( $hex, 0, 2 ) );
1345
-			$g = hexdec( substr( $hex, 2, 2 ) );
1346
-			$b = hexdec( substr( $hex, 4, 2 ) );
1347
-
1348
-			// Return RGB values as an array
1349
-			return $r . ',' . $g . ',' . $b;
1350
-		}
1351
-
1352
-		/**
1353
-		 * Build the CSS to overwrite a bootstrap color variable.
1354
-		 *
1355
-		 * @param $type
1356
-		 * @param $color_code
1357
-		 * @param $compatibility
1358
-		 *
1359
-		 * @return string
1360
-		 */
1361
-		public static function css_overwrite_bs5($type,$color_code,$compatibility, $hex = '' ){
1362
-			global $aui_bs5;
1363
-
1364
-			$is_var = false;
1365
-			$is_custom = strpos($type, 'custom-') !== false ? true : false;
1366
-			if(!$color_code){return '';}
1367
-			if(strpos($color_code, 'var') !== false){
1368
-				//if(!sanitize_hex_color($color_code)){
1369
-				$color_code = esc_attr($color_code);
1370
-				$is_var = true;
1308
+            return str_replace( array(
1309
+                '<style>',
1310
+                '</style>'
1311
+            ), '', self::minify_css( $custom_css ) );
1312
+        }
1313
+
1314
+        /**
1315
+         * Check if we should add booststrap 3 compatibility changes.
1316
+         *
1317
+         * @return bool
1318
+         */
1319
+        public static function is_bs3_compat(){
1320
+            return defined('AYECODE_UI_BS3_COMPAT') || defined('SVQ_THEME_VERSION') || defined('FUSION_BUILDER_VERSION');
1321
+        }
1322
+
1323
+        public static function hex_to_rgb( $hex ) {
1324
+            // Remove '#' if present
1325
+            $hex = str_replace( '#', '', $hex );
1326
+
1327
+            // Check if input is RGB
1328
+            if ( strpos( $hex, 'rgba(' ) === 0 || strpos( $hex, 'rgb(' ) === 0 ) {
1329
+                $_rgb = explode( ',', str_replace( array( 'rgba(', 'rgb(', ')' ), '', $hex ) );
1330
+
1331
+                $rgb = ( isset( $_rgb[0] ) ? (int) trim( $_rgb[0] ) : '0' ) . ',';
1332
+                $rgb .= ( isset( $_rgb[1] ) ? (int) trim( $_rgb[1] ) : '0' ) . ',';
1333
+                $rgb .= ( isset( $_rgb[2] ) ? (int) trim( $_rgb[2] ) : '0' );
1334
+
1335
+                return $rgb;
1336
+            }
1337
+
1338
+            // Convert 3-digit hex to 6-digit hex
1339
+            if ( strlen( $hex ) == 3 ) {
1340
+                $hex = str_repeat( substr( $hex, 0, 1 ), 2 ) . str_repeat( substr( $hex, 1, 1 ), 2 ) . str_repeat( substr( $hex, 2, 1 ), 2 );
1341
+            }
1342
+
1343
+            // Convert hex to RGB
1344
+            $r = hexdec( substr( $hex, 0, 2 ) );
1345
+            $g = hexdec( substr( $hex, 2, 2 ) );
1346
+            $b = hexdec( substr( $hex, 4, 2 ) );
1347
+
1348
+            // Return RGB values as an array
1349
+            return $r . ',' . $g . ',' . $b;
1350
+        }
1351
+
1352
+        /**
1353
+         * Build the CSS to overwrite a bootstrap color variable.
1354
+         *
1355
+         * @param $type
1356
+         * @param $color_code
1357
+         * @param $compatibility
1358
+         *
1359
+         * @return string
1360
+         */
1361
+        public static function css_overwrite_bs5($type,$color_code,$compatibility, $hex = '' ){
1362
+            global $aui_bs5;
1363
+
1364
+            $is_var = false;
1365
+            $is_custom = strpos($type, 'custom-') !== false ? true : false;
1366
+            if(!$color_code){return '';}
1367
+            if(strpos($color_code, 'var') !== false){
1368
+                //if(!sanitize_hex_color($color_code)){
1369
+                $color_code = esc_attr($color_code);
1370
+                $is_var = true;
1371 1371
 //				$color_code = "rgba($color_code, 0.5)";
1372 1372
 //                echo '###1'.$color_code.'###';//exit;
1373
-			}
1373
+            }
1374 1374
 
1375 1375
 //            echo '@@@'.$color_code.'==='.self::hex_to_rgb($color_code);exit;
1376 1376
 
1377
-			if(!$color_code){return '';}
1377
+            if(!$color_code){return '';}
1378 1378
 
1379
-			$rgb = self::hex_to_rgb($hex);
1379
+            $rgb = self::hex_to_rgb($hex);
1380 1380
 
1381
-			if($compatibility===true || $compatibility===1){
1382
-				$compatibility = '.bsui';
1383
-			}elseif(!$compatibility){
1384
-				$compatibility = '';
1385
-			}else{
1386
-				$compatibility = esc_attr($compatibility);
1387
-			}
1381
+            if($compatibility===true || $compatibility===1){
1382
+                $compatibility = '.bsui';
1383
+            }elseif(!$compatibility){
1384
+                $compatibility = '';
1385
+            }else{
1386
+                $compatibility = esc_attr($compatibility);
1387
+            }
1388 1388
 
1389
-			$prefix = $compatibility ? $compatibility . " " : "";
1389
+            $prefix = $compatibility ? $compatibility . " " : "";
1390 1390
 
1391 1391
 
1392 1392
             $output = '';
1393 1393
 
1394 1394
 //            echo '####'.$color_code;exit;
1395 1395
 
1396
-			$type = sanitize_html_class($type);
1396
+            $type = sanitize_html_class($type);
1397
+
1398
+            /**
1399
+             * c = color, b = background color, o = border-color, f = fill
1400
+             */
1401
+            $selectors = array(
1402
+                ".btn-{$type}"                                              => array( 'b', 'o' ),
1403
+                ".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1404
+                ".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1405
+                ".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1406
+                ".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1407
+                ".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1408
+                ".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1409
+                ".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1410
+                ".badge-{$type}"                                            => array( 'b' ),
1411
+                ".alert-{$type}"                                            => array( 'b', 'o' ),
1412
+                ".bg-{$type}"                                               => array( 'b', 'f' ),
1413
+                ".btn-link.btn-{$type}"                                     => array( 'c' ),
1414
+                ".text-{$type}"                                     => array( 'c' ),
1415
+            );
1416
+
1417
+            if ( $aui_bs5 ) {
1418
+                unset($selectors[".alert-{$type}" ]);
1419
+            }
1397 1420
 
1398
-			/**
1399
-			 * c = color, b = background color, o = border-color, f = fill
1400
-			 */
1401
-			$selectors = array(
1402
-				".btn-{$type}"                                              => array( 'b', 'o' ),
1403
-				".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1404
-				".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1405
-				".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1406
-				".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1407
-				".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1408
-				".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1409
-				".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1410
-				".badge-{$type}"                                            => array( 'b' ),
1411
-				".alert-{$type}"                                            => array( 'b', 'o' ),
1412
-				".bg-{$type}"                                               => array( 'b', 'f' ),
1413
-				".btn-link.btn-{$type}"                                     => array( 'c' ),
1414
-				".text-{$type}"                                     => array( 'c' ),
1415
-			);
1416
-
1417
-			if ( $aui_bs5 ) {
1418
-				unset($selectors[".alert-{$type}" ]);
1419
-			}
1420
-
1421
-			if ( $type == 'primary' ) {
1422
-				$selectors = $selectors + array(
1423
-						'a'                                                                                                    => array( 'c' ),
1424
-						'.btn-link'                                                                                            => array( 'c' ),
1425
-						'.dropdown-item.active'                                                                                => array( 'b' ),
1426
-						'.custom-control-input:checked~.custom-control-label::before'                                          => array(
1427
-							'b',
1428
-							'o'
1429
-						),
1430
-						'.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1431
-							'b',
1432
-							'o'
1433
-						),
1434
-						'.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1435
-						'.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1436
-						'.page-link'                                                                                           => array( 'c' ),
1437
-						'.page-item.active .page-link'                                                                         => array(
1438
-							'b',
1439
-							'o'
1440
-						),
1441
-						'.progress-bar'                                                                                        => array( 'b' ),
1442
-						'.list-group-item.active'                                                                              => array(
1443
-							'b',
1444
-							'o'
1445
-						),
1446
-						'.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1447
-					);
1448
-			}
1421
+            if ( $type == 'primary' ) {
1422
+                $selectors = $selectors + array(
1423
+                        'a'                                                                                                    => array( 'c' ),
1424
+                        '.btn-link'                                                                                            => array( 'c' ),
1425
+                        '.dropdown-item.active'                                                                                => array( 'b' ),
1426
+                        '.custom-control-input:checked~.custom-control-label::before'                                          => array(
1427
+                            'b',
1428
+                            'o'
1429
+                        ),
1430
+                        '.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1431
+                            'b',
1432
+                            'o'
1433
+                        ),
1434
+                        '.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1435
+                        '.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1436
+                        '.page-link'                                                                                           => array( 'c' ),
1437
+                        '.page-item.active .page-link'                                                                         => array(
1438
+                            'b',
1439
+                            'o'
1440
+                        ),
1441
+                        '.progress-bar'                                                                                        => array( 'b' ),
1442
+                        '.list-group-item.active'                                                                              => array(
1443
+                            'b',
1444
+                            'o'
1445
+                        ),
1446
+                        '.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1447
+                    );
1448
+            }
1449 1449
 
1450 1450
 
1451 1451
 
1452 1452
             // link
1453
-			if ( $type === 'primary' ) {
1454
-				$output .= 'html body {--bs-link-hover-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .75); --bs-link-color: var(--bs-'.esc_attr($type).'); }';
1455
-				$output .= $prefix . ' .breadcrumb{--bs-breadcrumb-item-active-color: '.esc_attr($color_code).';  }';
1456
-				$output .= $prefix . ' .navbar { --bs-nav-link-hover-color: '.esc_attr($color_code).'; --bs-navbar-hover-color: '.esc_attr($color_code).'; --bs-navbar-active-color: '.esc_attr($color_code).'; }';
1453
+            if ( $type === 'primary' ) {
1454
+                $output .= 'html body {--bs-link-hover-color: rgba(var(--bs-'.esc_attr($type).'-rgb), .75); --bs-link-color: var(--bs-'.esc_attr($type).'); }';
1455
+                $output .= $prefix . ' .breadcrumb{--bs-breadcrumb-item-active-color: '.esc_attr($color_code).';  }';
1456
+                $output .= $prefix . ' .navbar { --bs-nav-link-hover-color: '.esc_attr($color_code).'; --bs-navbar-hover-color: '.esc_attr($color_code).'; --bs-navbar-active-color: '.esc_attr($color_code).'; }';
1457 1457
 
1458
-				$output .= $prefix . ' a{color: var(--bs-'.esc_attr($type).');}';
1459
-				$output .= $prefix . ' .text-primary{color: var(--bs-'.esc_attr($type).') !important;}';
1458
+                $output .= $prefix . ' a{color: var(--bs-'.esc_attr($type).');}';
1459
+                $output .= $prefix . ' .text-primary{color: var(--bs-'.esc_attr($type).') !important;}';
1460 1460
 
1461 1461
                 // dropdown
1462
-				$output .= $prefix . ' .dropdown-menu{--bs-dropdown-link-hover-color: var(--bs-'.esc_attr($type).'); --bs-dropdown-link-active-color: var(--bs-'.esc_attr($type).');}';
1462
+                $output .= $prefix . ' .dropdown-menu{--bs-dropdown-link-hover-color: var(--bs-'.esc_attr($type).'); --bs-dropdown-link-active-color: var(--bs-'.esc_attr($type).');}';
1463 1463
 
1464 1464
                 // pagination
1465
-				$output .= $prefix . ' .pagination{--bs-pagination-hover-color: var(--bs-'.esc_attr($type).'); --bs-pagination-active-bg: var(--bs-'.esc_attr($type).');}';
1465
+                $output .= $prefix . ' .pagination{--bs-pagination-hover-color: var(--bs-'.esc_attr($type).'); --bs-pagination-active-bg: var(--bs-'.esc_attr($type).');}';
1466 1466
 
1467
-			}
1467
+            }
1468 1468
 
1469
-			$output .= $prefix . ' .link-'.esc_attr($type).' {color: var(--bs-'.esc_attr($type).'-rgb) !important;}';
1470
-			$output .= $prefix . ' .link-'.esc_attr($type).':hover {color: rgba(var(--bs-'.esc_attr($type).'-rgb), .8) !important;}';
1469
+            $output .= $prefix . ' .link-'.esc_attr($type).' {color: var(--bs-'.esc_attr($type).'-rgb) !important;}';
1470
+            $output .= $prefix . ' .link-'.esc_attr($type).':hover {color: rgba(var(--bs-'.esc_attr($type).'-rgb), .8) !important;}';
1471 1471
 
1472
-			//  buttons
1473
-			$output .= $prefix . ' .btn-'.esc_attr($type).'{';
1474
-			$output .= ' 
1472
+            //  buttons
1473
+            $output .= $prefix . ' .btn-'.esc_attr($type).'{';
1474
+            $output .= ' 
1475 1475
             --bs-btn-bg: '.esc_attr($color_code).';
1476 1476
             --bs-btn-border-color: '.esc_attr($color_code).';
1477 1477
             --bs-btn-hover-bg: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
@@ -1489,11 +1489,11 @@  discard block
 block discarded – undo
1489 1489
 //			--bs-btn-active-color: #fff;
1490 1490
 //			--bs-btn-disabled-color: #fff;
1491 1491
 //            ';
1492
-			$output .= '}';
1492
+            $output .= '}';
1493 1493
 
1494
-			//  buttons outline
1495
-			$output .= $prefix . ' .btn-outline-'.esc_attr($type).'{';
1496
-			$output .= ' 
1494
+            //  buttons outline
1495
+            $output .= $prefix . ' .btn-outline-'.esc_attr($type).'{';
1496
+            $output .= ' 
1497 1497
 			--bs-btn-color: '.esc_attr($color_code).';
1498 1498
             --bs-btn-border-color: '.esc_attr($color_code).';
1499 1499
             --bs-btn-hover-bg: rgba(var(--bs-'.esc_attr($type).'-rgb), .9);
@@ -1511,37 +1511,37 @@  discard block
 block discarded – undo
1511 1511
 //			--bs-btn-active-color: #fff;
1512 1512
 //			--bs-btn-disabled-color: #fff;
1513 1513
 //            ';
1514
-			$output .= '}';
1514
+            $output .= '}';
1515 1515
 
1516 1516
 
1517 1517
             // button hover
1518
-			$output .= $prefix . ' .btn-'.esc_attr($type).':hover{';
1519
-			$output .= ' 
1518
+            $output .= $prefix . ' .btn-'.esc_attr($type).':hover{';
1519
+            $output .= ' 
1520 1520
             box-shadow: 0 0.25rem 0.25rem 0.125rem rgb(var(--bs-'.esc_attr($type).'-rgb), .1), 0 0.375rem 0.75rem -0.125rem rgb(var(--bs-'.esc_attr($type).'-rgb) , .4);
1521 1521
             }
1522 1522
             ';
1523 1523
 
1524 1524
 
1525
-			if ( $aui_bs5 ) {
1525
+            if ( $aui_bs5 ) {
1526 1526
 //				$output .= $is_var ? 'html body {--bs-'.esc_attr($type).'-rgb: '.$color_code.'; }' : 'html body {--bs-'.esc_attr($type).'-rgb: '.self::hex_to_rgb($color_code).'; }';
1527
-				$output .= 'html body {--bs-'.esc_attr($type).': '.esc_attr($color_code).'; }';
1528
-				$output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1529
-			}
1527
+                $output .= 'html body {--bs-'.esc_attr($type).': '.esc_attr($color_code).'; }';
1528
+                $output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1529
+            }
1530 1530
 
1531 1531
 
1532
-			if ( $is_custom ) {
1532
+            if ( $is_custom ) {
1533 1533
 
1534 1534
 //				echo '###'.$type;exit;
1535 1535
 
1536
-				// build rules into each type
1537
-				foreach($selectors as $selector => $types){
1538
-					$selector = $compatibility ? $compatibility . " ".$selector : $selector;
1539
-					$types = array_combine($types,$types);
1540
-					if(isset($types['c'])){$color[] = $selector;}
1541
-					if(isset($types['b'])){$background[] = $selector;}
1542
-					if(isset($types['o'])){$border[] = $selector;}
1543
-					if(isset($types['f'])){$fill[] = $selector;}
1544
-				}
1536
+                // build rules into each type
1537
+                foreach($selectors as $selector => $types){
1538
+                    $selector = $compatibility ? $compatibility . " ".$selector : $selector;
1539
+                    $types = array_combine($types,$types);
1540
+                    if(isset($types['c'])){$color[] = $selector;}
1541
+                    if(isset($types['b'])){$background[] = $selector;}
1542
+                    if(isset($types['o'])){$border[] = $selector;}
1543
+                    if(isset($types['f'])){$fill[] = $selector;}
1544
+                }
1545 1545
 
1546 1546
 //				// build rules into each type
1547 1547
 //				foreach($important_selectors as $selector => $types){
@@ -1553,853 +1553,853 @@  discard block
 block discarded – undo
1553 1553
 //					if(isset($types['f'])){$fill_i[] = $selector;}
1554 1554
 //				}
1555 1555
 
1556
-				// add any color rules
1557
-				if(!empty($color)){
1558
-					$output .= implode(",",$color) . "{color: $color_code;} ";
1559
-				}
1560
-				if(!empty($color_i)){
1561
-					$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1562
-				}
1556
+                // add any color rules
1557
+                if(!empty($color)){
1558
+                    $output .= implode(",",$color) . "{color: $color_code;} ";
1559
+                }
1560
+                if(!empty($color_i)){
1561
+                    $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1562
+                }
1563
+
1564
+                // add any background color rules
1565
+                if(!empty($background)){
1566
+                    $output .= implode(",",$background) . "{background-color: $color_code;} ";
1567
+                }
1568
+                if(!empty($background_i)){
1569
+                    $output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1570
+//				$output .= implode(",",$background_i) . "{background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;} ";
1571
+                }
1572
+
1573
+                // add any border color rules
1574
+                if(!empty($border)){
1575
+                    $output .= implode(",",$border) . "{border-color: $color_code;} ";
1576
+                }
1577
+                if(!empty($border_i)){
1578
+                    $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1579
+                }
1580
+
1581
+                // add any fill color rules
1582
+                if(!empty($fill)){
1583
+                    $output .= implode(",",$fill) . "{fill: $color_code;} ";
1584
+                }
1585
+                if(!empty($fill_i)){
1586
+                    $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1587
+                }
1588
+
1589
+            }
1590
+
1591
+
1592
+
1593
+
1594
+            $transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1595
+            // darken
1596
+            $darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1597
+            $darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1598
+            $darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1599
+            $darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
1600
+
1601
+            // lighten
1602
+            $lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
1603
+
1604
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1605
+            $op_25 = $color_code."40"; // 25% opacity
1606
+
1607
+
1608
+            // button states
1609
+            $output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1610
+            $output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1611
+//			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: #000;    border-color: #000;} ";
1612
+            $output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1613
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1614
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-{$type}.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1615
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled):focus {box-shadow: 0 0.25rem 0.25rem 0.125rem rgba(var(--bs-{$type}-rgb), 0.1), 0 0.375rem 0.75rem -0.125rem rgba(var(--bs-{$type}-rgb), 0.4);} ";
1616
+
1617
+            // text
1618
+//			$output .= $prefix .".xxx, .text-{$type} {color: var(--bs-".esc_attr($type).");} ";
1619
+
1620
+
1621
+//			if ( $type == 'primary' ) {
1622
+//				// dropdown's
1623
+//				$output .= $prefix . " .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1624
+//
1625
+//				// input states
1626
+//				$output .= $prefix . " .form-control:focus{border-color: " . $lighten_25 . ";box-shadow: 0 0 0 0.2rem $op_25;} ";
1627
+//
1628
+//				// page link
1629
+//				$output .= $prefix . " .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1630
+//			}
1631
+
1632
+            // alerts
1633
+            if ( $aui_bs5 ) {
1634
+//				$output .= $is_var ? '' : $prefix ." .alert-{$type} {background-color: ".$color_code."20;    border-color: ".$color_code."30;color:$darker_40} ";
1635
+                $output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1636
+            }
1637
+
1638
+            return $output;
1639
+        }
1640
+
1641
+        /**
1642
+         * Build the CSS to overwrite a bootstrap color variable.
1643
+         *
1644
+         * @param $type
1645
+         * @param $color_code
1646
+         * @param $compatibility
1647
+         *
1648
+         * @return string
1649
+         */
1650
+        public static function css_overwrite($type,$color_code,$compatibility, $hex = '' ){
1651
+            global $aui_bs5;
1652
+
1653
+            $is_var = false;
1654
+            if(!$color_code){return '';}
1655
+            if(strpos($color_code, 'var') !== false){
1656
+                //if(!sanitize_hex_color($color_code)){
1657
+                $color_code = esc_attr($color_code);
1658
+                $is_var = true;
1659
+//				$color_code = "rgba($color_code, 0.5)";
1660
+//                echo '###1'.$color_code.'###';//exit;
1661
+            }
1662
+
1663
+//            echo '@@@'.$color_code.'==='.self::hex_to_rgb($color_code);exit;
1664
+
1665
+            if(!$color_code){return '';}
1666
+
1667
+            $rgb = self::hex_to_rgb($hex);
1668
+
1669
+            if($compatibility===true || $compatibility===1){
1670
+                $compatibility = '.bsui';
1671
+            }elseif(!$compatibility){
1672
+                $compatibility = '';
1673
+            }else{
1674
+                $compatibility = esc_attr($compatibility);
1675
+            }
1676
+
1677
+
1678
+
1679
+//            echo '####'.$color_code;exit;
1680
+
1681
+            $type = sanitize_html_class($type);
1682
+
1683
+            /**
1684
+             * c = color, b = background color, o = border-color, f = fill
1685
+             */
1686
+            $selectors = array(
1687
+                ".btn-{$type}"                                              => array( 'b', 'o' ),
1688
+                ".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1689
+                ".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1690
+                ".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1691
+                ".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1692
+                ".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1693
+                ".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1694
+                ".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1695
+                ".badge-{$type}"                                            => array( 'b' ),
1696
+                ".alert-{$type}"                                            => array( 'b', 'o' ),
1697
+                ".bg-{$type}"                                               => array( 'b', 'f' ),
1698
+                ".btn-link.btn-{$type}"                                     => array( 'c' ),
1699
+            );
1700
+
1701
+            if ( $aui_bs5 ) {
1702
+                unset($selectors[".alert-{$type}" ]);
1703
+            }
1704
+
1705
+            if ( $type == 'primary' ) {
1706
+                $selectors = $selectors + array(
1707
+                        'a'                                                                                                    => array( 'c' ),
1708
+                        '.btn-link'                                                                                            => array( 'c' ),
1709
+                        '.dropdown-item.active'                                                                                => array( 'b' ),
1710
+                        '.custom-control-input:checked~.custom-control-label::before'                                          => array(
1711
+                            'b',
1712
+                            'o'
1713
+                        ),
1714
+                        '.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1715
+                            'b',
1716
+                            'o'
1717
+                        ),
1718
+                        '.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1719
+                        '.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1720
+                        '.page-link'                                                                                           => array( 'c' ),
1721
+                        '.page-item.active .page-link'                                                                         => array(
1722
+                            'b',
1723
+                            'o'
1724
+                        ),
1725
+                        '.progress-bar'                                                                                        => array( 'b' ),
1726
+                        '.list-group-item.active'                                                                              => array(
1727
+                            'b',
1728
+                            'o'
1729
+                        ),
1730
+                        '.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1731
+//				    '.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1732
+//				    '.custom-range::-moz-range-thumb' => array('b'),
1733
+//				    '.custom-range::-ms-thumb' => array('b'),
1734
+                    );
1735
+            }
1736
+
1737
+            $important_selectors = array(
1738
+                ".bg-{$type}" => array('b','f'),
1739
+                ".border-{$type}" => array('o'),
1740
+                ".text-{$type}" => array('c'),
1741
+            );
1742
+
1743
+            $color = array();
1744
+            $color_i = array();
1745
+            $background = array();
1746
+            $background_i = array();
1747
+            $border = array();
1748
+            $border_i = array();
1749
+            $fill = array();
1750
+            $fill_i = array();
1751
+
1752
+            $output = '';
1753
+
1754
+            if ( $aui_bs5 ) {
1755
+//				$output .= $is_var ? 'html body {--bs-'.esc_attr($type).'-rgb: '.$color_code.'; }' : 'html body {--bs-'.esc_attr($type).'-rgb: '.self::hex_to_rgb($color_code).'; }';
1756
+                $output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1757
+            }
1758
+
1759
+            // build rules into each type
1760
+            foreach($selectors as $selector => $types){
1761
+                $selector = $compatibility ? $compatibility . " ".$selector : $selector;
1762
+                $types = array_combine($types,$types);
1763
+                if(isset($types['c'])){$color[] = $selector;}
1764
+                if(isset($types['b'])){$background[] = $selector;}
1765
+                if(isset($types['o'])){$border[] = $selector;}
1766
+                if(isset($types['f'])){$fill[] = $selector;}
1767
+            }
1768
+
1769
+            // build rules into each type
1770
+            foreach($important_selectors as $selector => $types){
1771
+                $selector = $compatibility ? $compatibility . " ".$selector : $selector;
1772
+                $types = array_combine($types,$types);
1773
+                if(isset($types['c'])){$color_i[] = $selector;}
1774
+                if(isset($types['b'])){$background_i[] = $selector;}
1775
+                if(isset($types['o'])){$border_i[] = $selector;}
1776
+                if(isset($types['f'])){$fill_i[] = $selector;}
1777
+            }
1778
+
1779
+            // add any color rules
1780
+            if(!empty($color)){
1781
+                $output .= implode(",",$color) . "{color: $color_code;} ";
1782
+            }
1783
+            if(!empty($color_i)){
1784
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1785
+            }
1786
+
1787
+            // add any background color rules
1788
+            if(!empty($background)){
1789
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
1790
+            }
1791
+            if(!empty($background_i)){
1792
+                $output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1793
+//				$output .= implode(",",$background_i) . "{background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;} ";
1794
+            }
1795
+
1796
+            // add any border color rules
1797
+            if(!empty($border)){
1798
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
1799
+            }
1800
+            if(!empty($border_i)){
1801
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1802
+            }
1803
+
1804
+            // add any fill color rules
1805
+            if(!empty($fill)){
1806
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
1807
+            }
1808
+            if(!empty($fill_i)){
1809
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1810
+            }
1811
+
1812
+
1813
+            $prefix = $compatibility ? $compatibility . " " : "";
1814
+
1815
+            $transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1816
+            // darken
1817
+            $darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1818
+            $darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1819
+            $darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1820
+            $darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
1821
+
1822
+            // lighten
1823
+            $lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
1824
+
1825
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1826
+            $op_25 = $color_code."40"; // 25% opacity
1827
+
1828
+
1829
+            // button states
1830
+            $output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1831
+            $output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1832
+//			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: #000;    border-color: #000;} ";
1833
+            $output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1834
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1835
+            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-{$type}.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1836
+
1837
+            if ( $type == 'primary' ) {
1838
+                // dropdown's
1839
+                $output .= $prefix . " .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1840
+
1841
+                // input states
1842
+                $output .= $prefix . " .form-control:focus{border-color: " . $lighten_25 . ";box-shadow: 0 0 0 0.2rem $op_25;} ";
1843
+
1844
+                // page link
1845
+                $output .= $prefix . " .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1846
+            }
1847
+
1848
+            // alerts
1849
+            if ( $aui_bs5 ) {
1850
+//				$output .= $is_var ? '' : $prefix ." .alert-{$type} {background-color: ".$color_code."20;    border-color: ".$color_code."30;color:$darker_40} ";
1851
+                $output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1852
+            }
1853
+
1854
+            return $output;
1855
+        }
1856
+
1857
+        /**
1858
+         *
1859
+         * @deprecated 0.1.76 Use css_overwrite()
1860
+         *
1861
+         * @param $color_code
1862
+         * @param $compatibility
1863
+         * @param $use_variable
1864
+         *
1865
+         * @return string
1866
+         */
1867
+        public static function css_primary($color_code,$compatibility, $use_variable = false){
1868
+
1869
+            if(!$use_variable){
1870
+                $color_code = sanitize_hex_color($color_code);
1871
+                if(!$color_code){return '';}
1872
+            }
1873
+
1874
+            /**
1875
+             * c = color, b = background color, o = border-color, f = fill
1876
+             */
1877
+            $selectors = array(
1878
+                'a' => array('c'),
1879
+                '.btn-primary' => array('b','o'),
1880
+                '.btn-primary.disabled' => array('b','o'),
1881
+                '.btn-primary:disabled' => array('b','o'),
1882
+                '.btn-outline-primary' => array('c','o'),
1883
+                '.btn-outline-primary:hover' => array('b','o'),
1884
+                '.btn-outline-primary:not(:disabled):not(.disabled).active' => array('b','o'),
1885
+                '.btn-outline-primary:not(:disabled):not(.disabled):active' => array('b','o'),
1886
+                '.show>.btn-outline-primary.dropdown-toggle' => array('b','o'),
1887
+                '.btn-link' => array('c'),
1888
+                '.dropdown-item.active' => array('b'),
1889
+                '.custom-control-input:checked~.custom-control-label::before' => array('b','o'),
1890
+                '.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before' => array('b','o'),
1891
+//				'.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1892
+//				'.custom-range::-moz-range-thumb' => array('b'),
1893
+//				'.custom-range::-ms-thumb' => array('b'),
1894
+                '.nav-pills .nav-link.active' => array('b'),
1895
+                '.nav-pills .show>.nav-link' => array('b'),
1896
+                '.page-link' => array('c'),
1897
+                '.page-item.active .page-link' => array('b','o'),
1898
+                '.badge-primary' => array('b'),
1899
+                '.alert-primary' => array('b','o'),
1900
+                '.progress-bar' => array('b'),
1901
+                '.list-group-item.active' => array('b','o'),
1902
+                '.bg-primary' => array('b','f'),
1903
+                '.btn-link.btn-primary' => array('c'),
1904
+                '.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array('b'),
1905
+            );
1906
+
1907
+            $important_selectors = array(
1908
+                '.bg-primary' => array('b','f'),
1909
+                '.border-primary' => array('o'),
1910
+                '.text-primary' => array('c'),
1911
+            );
1912
+
1913
+            $color = array();
1914
+            $color_i = array();
1915
+            $background = array();
1916
+            $background_i = array();
1917
+            $border = array();
1918
+            $border_i = array();
1919
+            $fill = array();
1920
+            $fill_i = array();
1921
+
1922
+            $output = '';
1923
+
1924
+            // build rules into each type
1925
+            foreach($selectors as $selector => $types){
1926
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1927
+                $types = array_combine($types,$types);
1928
+                if(isset($types['c'])){$color[] = $selector;}
1929
+                if(isset($types['b'])){$background[] = $selector;}
1930
+                if(isset($types['o'])){$border[] = $selector;}
1931
+                if(isset($types['f'])){$fill[] = $selector;}
1932
+            }
1933
+
1934
+            // build rules into each type
1935
+            foreach($important_selectors as $selector => $types){
1936
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
1937
+                $types = array_combine($types,$types);
1938
+                if(isset($types['c'])){$color_i[] = $selector;}
1939
+                if(isset($types['b'])){$background_i[] = $selector;}
1940
+                if(isset($types['o'])){$border_i[] = $selector;}
1941
+                if(isset($types['f'])){$fill_i[] = $selector;}
1942
+            }
1943
+
1944
+            // add any color rules
1945
+            if(!empty($color)){
1946
+                $output .= implode(",",$color) . "{color: $color_code;} ";
1947
+            }
1948
+            if(!empty($color_i)){
1949
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1950
+            }
1951
+
1952
+            // add any background color rules
1953
+            if(!empty($background)){
1954
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
1955
+            }
1956
+            if(!empty($background_i)){
1957
+                $output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1958
+            }
1959
+
1960
+            // add any border color rules
1961
+            if(!empty($border)){
1962
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
1963
+            }
1964
+            if(!empty($border_i)){
1965
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1966
+            }
1967
+
1968
+            // add any fill color rules
1969
+            if(!empty($fill)){
1970
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
1971
+            }
1972
+            if(!empty($fill_i)){
1973
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1974
+            }
1975
+
1563 1976
 
1564
-				// add any background color rules
1565
-				if(!empty($background)){
1566
-					$output .= implode(",",$background) . "{background-color: $color_code;} ";
1567
-				}
1568
-				if(!empty($background_i)){
1569
-					$output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1570
-//				$output .= implode(",",$background_i) . "{background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;} ";
1571
-				}
1977
+            $prefix = $compatibility ? ".bsui " : "";
1572 1978
 
1573
-				// add any border color rules
1574
-				if(!empty($border)){
1575
-					$output .= implode(",",$border) . "{border-color: $color_code;} ";
1576
-				}
1577
-				if(!empty($border_i)){
1578
-					$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1579
-				}
1979
+            // darken
1980
+            $darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1981
+            $darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1982
+            $darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1580 1983
 
1581
-				// add any fill color rules
1582
-				if(!empty($fill)){
1583
-					$output .= implode(",",$fill) . "{fill: $color_code;} ";
1584
-				}
1585
-				if(!empty($fill_i)){
1586
-					$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1587
-				}
1984
+            // lighten
1985
+            $lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1588 1986
 
1589
-			}
1987
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
1988
+            $op_25 = $color_code."40"; // 25% opacity
1590 1989
 
1591 1990
 
1991
+            // button states
1992
+            $output .= $prefix ." .btn-primary:hover, $prefix .btn-primary:focus, $prefix .btn-primary.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1993
+            $output .= $prefix ." .btn-outline-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-primary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1994
+            $output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active, $prefix .btn-primary:not(:disabled):not(.disabled).active, .show>$prefix .btn-primary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1995
+            $output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-primary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1592 1996
 
1593 1997
 
1594
-			$transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1595
-			// darken
1596
-			$darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1597
-			$darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1598
-			$darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1599
-			$darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
1998
+            // dropdown's
1999
+            $output .= $prefix ." .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1600 2000
 
1601
-			// lighten
1602
-			$lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
1603 2001
 
1604
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1605
-			$op_25 = $color_code."40"; // 25% opacity
2002
+            // input states
2003
+            $output .= $prefix ." .form-control:focus{border-color: ".$lighten_25.";box-shadow: 0 0 0 0.2rem $op_25;} ";
1606 2004
 
2005
+            // page link
2006
+            $output .= $prefix ." .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1607 2007
 
1608
-			// button states
1609
-			$output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1610
-			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1611
-//			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: #000;    border-color: #000;} ";
1612
-			$output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1613
-			$output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1614
-            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-{$type}.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1615
-            $output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled):focus {box-shadow: 0 0.25rem 0.25rem 0.125rem rgba(var(--bs-{$type}-rgb), 0.1), 0 0.375rem 0.75rem -0.125rem rgba(var(--bs-{$type}-rgb), 0.4);} ";
2008
+            return $output;
2009
+        }
1616 2010
 
1617
-			// text
1618
-//			$output .= $prefix .".xxx, .text-{$type} {color: var(--bs-".esc_attr($type).");} ";
2011
+        /**
2012
+         *
2013
+         * @deprecated 0.1.76 Use css_overwrite()
2014
+         *
2015
+         * @param $color_code
2016
+         * @param $compatibility
2017
+         *
2018
+         * @return string
2019
+         */
2020
+        public static function css_secondary($color_code,$compatibility){;
2021
+            $color_code = sanitize_hex_color($color_code);
2022
+            if(!$color_code){return '';}
2023
+            /**
2024
+             * c = color, b = background color, o = border-color, f = fill
2025
+             */
2026
+            $selectors = array(
2027
+                '.btn-secondary' => array('b','o'),
2028
+                '.btn-secondary.disabled' => array('b','o'),
2029
+                '.btn-secondary:disabled' => array('b','o'),
2030
+                '.btn-outline-secondary' => array('c','o'),
2031
+                '.btn-outline-secondary:hover' => array('b','o'),
2032
+                '.btn-outline-secondary.disabled' => array('c'),
2033
+                '.btn-outline-secondary:disabled' => array('c'),
2034
+                '.btn-outline-secondary:not(:disabled):not(.disabled):active' => array('b','o'),
2035
+                '.btn-outline-secondary:not(:disabled):not(.disabled).active' => array('b','o'),
2036
+                '.btn-outline-secondary.dropdown-toggle' => array('b','o'),
2037
+                '.badge-secondary' => array('b'),
2038
+                '.alert-secondary' => array('b','o'),
2039
+                '.btn-link.btn-secondary' => array('c'),
2040
+            );
2041
+
2042
+            $important_selectors = array(
2043
+                '.bg-secondary' => array('b','f'),
2044
+                '.border-secondary' => array('o'),
2045
+                '.text-secondary' => array('c'),
2046
+            );
2047
+
2048
+            $color = array();
2049
+            $color_i = array();
2050
+            $background = array();
2051
+            $background_i = array();
2052
+            $border = array();
2053
+            $border_i = array();
2054
+            $fill = array();
2055
+            $fill_i = array();
1619 2056
 
2057
+            $output = '';
1620 2058
 
1621
-//			if ( $type == 'primary' ) {
1622
-//				// dropdown's
1623
-//				$output .= $prefix . " .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
1624
-//
1625
-//				// input states
1626
-//				$output .= $prefix . " .form-control:focus{border-color: " . $lighten_25 . ";box-shadow: 0 0 0 0.2rem $op_25;} ";
1627
-//
1628
-//				// page link
1629
-//				$output .= $prefix . " .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1630
-//			}
2059
+            // build rules into each type
2060
+            foreach($selectors as $selector => $types){
2061
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
2062
+                $types = array_combine($types,$types);
2063
+                if(isset($types['c'])){$color[] = $selector;}
2064
+                if(isset($types['b'])){$background[] = $selector;}
2065
+                if(isset($types['o'])){$border[] = $selector;}
2066
+                if(isset($types['f'])){$fill[] = $selector;}
2067
+            }
1631 2068
 
1632
-			// alerts
1633
-			if ( $aui_bs5 ) {
1634
-//				$output .= $is_var ? '' : $prefix ." .alert-{$type} {background-color: ".$color_code."20;    border-color: ".$color_code."30;color:$darker_40} ";
1635
-				$output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1636
-			}
1637
-
1638
-			return $output;
1639
-		}
1640
-
1641
-		/**
1642
-		 * Build the CSS to overwrite a bootstrap color variable.
1643
-		 *
1644
-		 * @param $type
1645
-		 * @param $color_code
1646
-		 * @param $compatibility
1647
-		 *
1648
-		 * @return string
1649
-		 */
1650
-		public static function css_overwrite($type,$color_code,$compatibility, $hex = '' ){
1651
-            global $aui_bs5;
2069
+            // build rules into each type
2070
+            foreach($important_selectors as $selector => $types){
2071
+                $selector = $compatibility ? ".bsui ".$selector : $selector;
2072
+                $types = array_combine($types,$types);
2073
+                if(isset($types['c'])){$color_i[] = $selector;}
2074
+                if(isset($types['b'])){$background_i[] = $selector;}
2075
+                if(isset($types['o'])){$border_i[] = $selector;}
2076
+                if(isset($types['f'])){$fill_i[] = $selector;}
2077
+            }
1652 2078
 
1653
-			$is_var = false;
1654
-			if(!$color_code){return '';}
1655
-			if(strpos($color_code, 'var') !== false){
1656
-				//if(!sanitize_hex_color($color_code)){
1657
-				$color_code = esc_attr($color_code);
1658
-				$is_var = true;
1659
-//				$color_code = "rgba($color_code, 0.5)";
1660
-//                echo '###1'.$color_code.'###';//exit;
1661
-			}
2079
+            // add any color rules
2080
+            if(!empty($color)){
2081
+                $output .= implode(",",$color) . "{color: $color_code;} ";
2082
+            }
2083
+            if(!empty($color_i)){
2084
+                $output .= implode(",",$color_i) . "{color: $color_code !important;} ";
2085
+            }
1662 2086
 
1663
-//            echo '@@@'.$color_code.'==='.self::hex_to_rgb($color_code);exit;
2087
+            // add any background color rules
2088
+            if(!empty($background)){
2089
+                $output .= implode(",",$background) . "{background-color: $color_code;} ";
2090
+            }
2091
+            if(!empty($background_i)){
2092
+                $output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
2093
+            }
1664 2094
 
1665
-			if(!$color_code){return '';}
2095
+            // add any border color rules
2096
+            if(!empty($border)){
2097
+                $output .= implode(",",$border) . "{border-color: $color_code;} ";
2098
+            }
2099
+            if(!empty($border_i)){
2100
+                $output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
2101
+            }
1666 2102
 
1667
-            $rgb = self::hex_to_rgb($hex);
2103
+            // add any fill color rules
2104
+            if(!empty($fill)){
2105
+                $output .= implode(",",$fill) . "{fill: $color_code;} ";
2106
+            }
2107
+            if(!empty($fill_i)){
2108
+                $output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
2109
+            }
1668 2110
 
1669
-			if($compatibility===true || $compatibility===1){
1670
-				$compatibility = '.bsui';
1671
-			}elseif(!$compatibility){
1672
-				$compatibility = '';
1673
-			}else{
1674
-				$compatibility = esc_attr($compatibility);
1675
-			}
1676 2111
 
2112
+            $prefix = $compatibility ? ".bsui " : "";
1677 2113
 
2114
+            // darken
2115
+            $darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
2116
+            $darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
2117
+            $darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1678 2118
 
1679
-//            echo '####'.$color_code;exit;
2119
+            // lighten
2120
+            $lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1680 2121
 
1681
-			$type = sanitize_html_class($type);
2122
+            // opacity see https://css-tricks.com/8-digit-hex-codes/
2123
+            $op_25 = $color_code."40"; // 25% opacity
1682 2124
 
1683
-			/**
1684
-			 * c = color, b = background color, o = border-color, f = fill
1685
-			 */
1686
-			$selectors = array(
1687
-				".btn-{$type}"                                              => array( 'b', 'o' ),
1688
-				".btn-{$type}.disabled"                                     => array( 'b', 'o' ),
1689
-				".btn-{$type}:disabled"                                     => array( 'b', 'o' ),
1690
-				".btn-outline-{$type}"                                      => array( 'c', 'o' ),
1691
-				".btn-outline-{$type}:hover"                                => array( 'b', 'o' ),
1692
-				".btn-outline-{$type}:not(:disabled):not(.disabled).active" => array( 'b', 'o' ),
1693
-				".btn-outline-{$type}:not(:disabled):not(.disabled):active" => array( 'b', 'o' ),
1694
-				".show>.btn-outline-{$type}.dropdown-toggle"                => array( 'b', 'o' ),
1695
-				".badge-{$type}"                                            => array( 'b' ),
1696
-				".alert-{$type}"                                            => array( 'b', 'o' ),
1697
-				".bg-{$type}"                                               => array( 'b', 'f' ),
1698
-				".btn-link.btn-{$type}"                                     => array( 'c' ),
1699
-			);
1700
-
1701
-			if ( $aui_bs5 ) {
1702
-                unset($selectors[".alert-{$type}" ]);
1703
-			}
1704
-
1705
-			if ( $type == 'primary' ) {
1706
-				$selectors = $selectors + array(
1707
-						'a'                                                                                                    => array( 'c' ),
1708
-						'.btn-link'                                                                                            => array( 'c' ),
1709
-						'.dropdown-item.active'                                                                                => array( 'b' ),
1710
-						'.custom-control-input:checked~.custom-control-label::before'                                          => array(
1711
-							'b',
1712
-							'o'
1713
-						),
1714
-						'.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before'                   => array(
1715
-							'b',
1716
-							'o'
1717
-						),
1718
-						'.nav-pills .nav-link.active'                                                                          => array( 'b' ),
1719
-						'.nav-pills .show>.nav-link'                                                                           => array( 'b' ),
1720
-						'.page-link'                                                                                           => array( 'c' ),
1721
-						'.page-item.active .page-link'                                                                         => array(
1722
-							'b',
1723
-							'o'
1724
-						),
1725
-						'.progress-bar'                                                                                        => array( 'b' ),
1726
-						'.list-group-item.active'                                                                              => array(
1727
-							'b',
1728
-							'o'
1729
-						),
1730
-						'.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array( 'b' ),
1731
-//				    '.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1732
-//				    '.custom-range::-moz-range-thumb' => array('b'),
1733
-//				    '.custom-range::-ms-thumb' => array('b'),
1734
-					);
1735
-			}
1736
-
1737
-			$important_selectors = array(
1738
-				".bg-{$type}" => array('b','f'),
1739
-				".border-{$type}" => array('o'),
1740
-				".text-{$type}" => array('c'),
1741
-			);
1742
-
1743
-			$color = array();
1744
-			$color_i = array();
1745
-			$background = array();
1746
-			$background_i = array();
1747
-			$border = array();
1748
-			$border_i = array();
1749
-			$fill = array();
1750
-			$fill_i = array();
1751
-
1752
-			$output = '';
1753
-
1754
-			if ( $aui_bs5 ) {
1755
-//				$output .= $is_var ? 'html body {--bs-'.esc_attr($type).'-rgb: '.$color_code.'; }' : 'html body {--bs-'.esc_attr($type).'-rgb: '.self::hex_to_rgb($color_code).'; }';
1756
-				$output .= 'html body {--bs-'.esc_attr($type).'-rgb: '.$rgb.'; }';
1757
-			}
1758
-
1759
-			// build rules into each type
1760
-			foreach($selectors as $selector => $types){
1761
-				$selector = $compatibility ? $compatibility . " ".$selector : $selector;
1762
-				$types = array_combine($types,$types);
1763
-				if(isset($types['c'])){$color[] = $selector;}
1764
-				if(isset($types['b'])){$background[] = $selector;}
1765
-				if(isset($types['o'])){$border[] = $selector;}
1766
-				if(isset($types['f'])){$fill[] = $selector;}
1767
-			}
1768
-
1769
-			// build rules into each type
1770
-			foreach($important_selectors as $selector => $types){
1771
-				$selector = $compatibility ? $compatibility . " ".$selector : $selector;
1772
-				$types = array_combine($types,$types);
1773
-				if(isset($types['c'])){$color_i[] = $selector;}
1774
-				if(isset($types['b'])){$background_i[] = $selector;}
1775
-				if(isset($types['o'])){$border_i[] = $selector;}
1776
-				if(isset($types['f'])){$fill_i[] = $selector;}
1777
-			}
1778
-
1779
-			// add any color rules
1780
-			if(!empty($color)){
1781
-				$output .= implode(",",$color) . "{color: $color_code;} ";
1782
-			}
1783
-			if(!empty($color_i)){
1784
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1785
-			}
1786
-
1787
-			// add any background color rules
1788
-			if(!empty($background)){
1789
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
1790
-			}
1791
-			if(!empty($background_i)){
1792
-				$output .= $aui_bs5 ? '' : implode(",",$background_i) . "{background-color: $color_code !important;} ";
1793
-//				$output .= implode(",",$background_i) . "{background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;} ";
1794
-			}
1795 2125
 
1796
-			// add any border color rules
1797
-			if(!empty($border)){
1798
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
1799
-			}
1800
-			if(!empty($border_i)){
1801
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1802
-			}
2126
+            // button states
2127
+            $output .= $prefix ." .btn-secondary:hover{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
2128
+            $output .= $prefix ." .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-secondary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
2129
+            $output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active, $prefix .btn-secondary:not(:disabled):not(.disabled).active, .show>$prefix .btn-secondary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
2130
+            $output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-secondary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1803 2131
 
1804
-			// add any fill color rules
1805
-			if(!empty($fill)){
1806
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
1807
-			}
1808
-			if(!empty($fill_i)){
1809
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1810
-			}
1811 2132
 
2133
+            return $output;
2134
+        }
1812 2135
 
1813
-			$prefix = $compatibility ? $compatibility . " " : "";
2136
+        /**
2137
+         * Increases or decreases the brightness of a color by a percentage of the current brightness.
2138
+         *
2139
+         * @param   string  $hexCode        Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`
2140
+         * @param   float   $adjustPercent  A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker.
2141
+         *
2142
+         * @return  string
2143
+         */
2144
+        public static function css_hex_lighten_darken($hexCode, $adjustPercent) {
2145
+            $hexCode = ltrim($hexCode, '#');
1814 2146
 
1815
-			$transition = $is_var ? 'transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,filter 0.15s ease-in-out;' : '';
1816
-			// darken
1817
-			$darker_075 = $is_var ? $color_code.';filter:brightness(0.925)' : self::css_hex_lighten_darken($color_code,"-0.075");
1818
-			$darker_10 = $is_var ? $color_code.';filter:brightness(0.9)' : self::css_hex_lighten_darken($color_code,"-0.10");
1819
-			$darker_125 = $is_var ? $color_code.';filter:brightness(0.875)' : self::css_hex_lighten_darken($color_code,"-0.125");
1820
-			$darker_40 = $is_var ? $color_code.';filter:brightness(0.6)' : self::css_hex_lighten_darken($color_code,"-0.4");
2147
+            if ( strpos( $hexCode, 'rgba(' ) !== false || strpos( $hexCode, 'rgb(' ) !== false ) {
2148
+                return $hexCode;
2149
+            }
1821 2150
 
1822
-			// lighten
1823
-			$lighten_25 = $is_var ? $color_code.';filter:brightness(1.25)' :self::css_hex_lighten_darken($color_code,"0.25");
2151
+            if (strlen($hexCode) == 3) {
2152
+                $hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
2153
+            }
1824 2154
 
1825
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1826
-			$op_25 = $color_code."40"; // 25% opacity
2155
+            $hexCode = array_map('hexdec', str_split($hexCode, 2));
1827 2156
 
2157
+            foreach ($hexCode as & $color) {
2158
+                $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
2159
+                $adjustAmount = ceil($adjustableLimit * $adjustPercent);
1828 2160
 
1829
-			// button states
1830
-			$output .= $is_var ? $prefix ." .btn-{$type}{{$transition }} " : '';
1831
-			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1832
-//			$output .= $prefix ." .btn-{$type}:hover, $prefix .btn-{$type}:focus, $prefix .btn-{$type}.focus{background-color: #000;    border-color: #000;} ";
1833
-			$output .= $prefix ." .btn-outline-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-{$type}.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1834
-			$output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active, $prefix .btn-{$type}:not(:disabled):not(.disabled).active, .show>$prefix .btn-{$type}.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1835
-			$output .= $prefix ." .btn-{$type}:not(:disabled):not(.disabled):active:focus, $prefix .btn-{$type}:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-{$type}.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
2161
+                $color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
2162
+            }
1836 2163
 
1837
-			if ( $type == 'primary' ) {
1838
-				// dropdown's
1839
-				$output .= $prefix . " .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
2164
+            return '#' . implode($hexCode);
2165
+        }
1840 2166
 
1841
-				// input states
1842
-				$output .= $prefix . " .form-control:focus{border-color: " . $lighten_25 . ";box-shadow: 0 0 0 0.2rem $op_25;} ";
2167
+        /**
2168
+         * Check if we should display examples.
2169
+         */
2170
+        public function maybe_show_examples(){
2171
+            if(current_user_can('manage_options') && isset($_REQUEST['preview-aui'])){
2172
+                echo "<head>";
2173
+                wp_head();
2174
+                echo "</head>";
2175
+                echo "<body>";
2176
+                echo $this->get_examples(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2177
+                echo "</body>";
2178
+                exit;
2179
+            }
2180
+        }
1843 2181
 
1844
-				// page link
1845
-				$output .= $prefix . " .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1846
-			}
2182
+        /**
2183
+         * Get developer examples.
2184
+         *
2185
+         * @return string
2186
+         */
2187
+        public function get_examples(){
2188
+            $output = '';
1847 2189
 
1848
-            // alerts
1849
-			if ( $aui_bs5 ) {
1850
-//				$output .= $is_var ? '' : $prefix ." .alert-{$type} {background-color: ".$color_code."20;    border-color: ".$color_code."30;color:$darker_40} ";
1851
-				$output .= $prefix ." .alert-{$type} {--bs-alert-bg: rgba(var(--bs-{$type}-rgb), .1 ) !important;--bs-alert-border-color: rgba(var(--bs-{$type}-rgb), .25 ) !important;--bs-alert-color: rgba(var(--bs-{$type}-rgb), 1 ) !important;} ";
1852
-			}
1853
-
1854
-			return $output;
1855
-		}
1856
-
1857
-		/**
1858
-		 *
1859
-		 * @deprecated 0.1.76 Use css_overwrite()
1860
-		 *
1861
-		 * @param $color_code
1862
-		 * @param $compatibility
1863
-		 * @param $use_variable
1864
-		 *
1865
-		 * @return string
1866
-		 */
1867
-		public static function css_primary($color_code,$compatibility, $use_variable = false){
1868
-
1869
-			if(!$use_variable){
1870
-				$color_code = sanitize_hex_color($color_code);
1871
-				if(!$color_code){return '';}
1872
-			}
1873
-
1874
-			/**
1875
-			 * c = color, b = background color, o = border-color, f = fill
1876
-			 */
1877
-			$selectors = array(
1878
-				'a' => array('c'),
1879
-				'.btn-primary' => array('b','o'),
1880
-				'.btn-primary.disabled' => array('b','o'),
1881
-				'.btn-primary:disabled' => array('b','o'),
1882
-				'.btn-outline-primary' => array('c','o'),
1883
-				'.btn-outline-primary:hover' => array('b','o'),
1884
-				'.btn-outline-primary:not(:disabled):not(.disabled).active' => array('b','o'),
1885
-				'.btn-outline-primary:not(:disabled):not(.disabled):active' => array('b','o'),
1886
-				'.show>.btn-outline-primary.dropdown-toggle' => array('b','o'),
1887
-				'.btn-link' => array('c'),
1888
-				'.dropdown-item.active' => array('b'),
1889
-				'.custom-control-input:checked~.custom-control-label::before' => array('b','o'),
1890
-				'.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before' => array('b','o'),
1891
-//				'.custom-range::-webkit-slider-thumb' => array('b'), // these break the inline rules...
1892
-//				'.custom-range::-moz-range-thumb' => array('b'),
1893
-//				'.custom-range::-ms-thumb' => array('b'),
1894
-				'.nav-pills .nav-link.active' => array('b'),
1895
-				'.nav-pills .show>.nav-link' => array('b'),
1896
-				'.page-link' => array('c'),
1897
-				'.page-item.active .page-link' => array('b','o'),
1898
-				'.badge-primary' => array('b'),
1899
-				'.alert-primary' => array('b','o'),
1900
-				'.progress-bar' => array('b'),
1901
-				'.list-group-item.active' => array('b','o'),
1902
-				'.bg-primary' => array('b','f'),
1903
-				'.btn-link.btn-primary' => array('c'),
1904
-				'.select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true]' => array('b'),
1905
-			);
1906
-
1907
-			$important_selectors = array(
1908
-				'.bg-primary' => array('b','f'),
1909
-				'.border-primary' => array('o'),
1910
-				'.text-primary' => array('c'),
1911
-			);
1912
-
1913
-			$color = array();
1914
-			$color_i = array();
1915
-			$background = array();
1916
-			$background_i = array();
1917
-			$border = array();
1918
-			$border_i = array();
1919
-			$fill = array();
1920
-			$fill_i = array();
1921
-
1922
-			$output = '';
1923
-
1924
-			// build rules into each type
1925
-			foreach($selectors as $selector => $types){
1926
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1927
-				$types = array_combine($types,$types);
1928
-				if(isset($types['c'])){$color[] = $selector;}
1929
-				if(isset($types['b'])){$background[] = $selector;}
1930
-				if(isset($types['o'])){$border[] = $selector;}
1931
-				if(isset($types['f'])){$fill[] = $selector;}
1932
-			}
1933
-
1934
-			// build rules into each type
1935
-			foreach($important_selectors as $selector => $types){
1936
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
1937
-				$types = array_combine($types,$types);
1938
-				if(isset($types['c'])){$color_i[] = $selector;}
1939
-				if(isset($types['b'])){$background_i[] = $selector;}
1940
-				if(isset($types['o'])){$border_i[] = $selector;}
1941
-				if(isset($types['f'])){$fill_i[] = $selector;}
1942
-			}
1943
-
1944
-			// add any color rules
1945
-			if(!empty($color)){
1946
-				$output .= implode(",",$color) . "{color: $color_code;} ";
1947
-			}
1948
-			if(!empty($color_i)){
1949
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
1950
-			}
1951
-
1952
-			// add any background color rules
1953
-			if(!empty($background)){
1954
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
1955
-			}
1956
-			if(!empty($background_i)){
1957
-				$output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
1958
-			}
1959
-
1960
-			// add any border color rules
1961
-			if(!empty($border)){
1962
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
1963
-			}
1964
-			if(!empty($border_i)){
1965
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
1966
-			}
1967
-
1968
-			// add any fill color rules
1969
-			if(!empty($fill)){
1970
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
1971
-			}
1972
-			if(!empty($fill_i)){
1973
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
1974
-			}
1975
-
1976
-
1977
-			$prefix = $compatibility ? ".bsui " : "";
1978
-
1979
-			// darken
1980
-			$darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
1981
-			$darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
1982
-			$darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
1983
-
1984
-			// lighten
1985
-			$lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
1986
-
1987
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
1988
-			$op_25 = $color_code."40"; // 25% opacity
1989
-
1990
-
1991
-			// button states
1992
-			$output .= $prefix ." .btn-primary:hover, $prefix .btn-primary:focus, $prefix .btn-primary.focus{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
1993
-			$output .= $prefix ." .btn-outline-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-primary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
1994
-			$output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active, $prefix .btn-primary:not(:disabled):not(.disabled).active, .show>$prefix .btn-primary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
1995
-			$output .= $prefix ." .btn-primary:not(:disabled):not(.disabled):active:focus, $prefix .btn-primary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-primary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
1996
-
1997
-
1998
-			// dropdown's
1999
-			$output .= $prefix ." .dropdown-item.active, $prefix .dropdown-item:active{background-color: $color_code;} ";
2000
-
2001
-
2002
-			// input states
2003
-			$output .= $prefix ." .form-control:focus{border-color: ".$lighten_25.";box-shadow: 0 0 0 0.2rem $op_25;} ";
2004
-
2005
-			// page link
2006
-			$output .= $prefix ." .page-link:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
2007
-
2008
-			return $output;
2009
-		}
2010
-
2011
-		/**
2012
-		 *
2013
-		 * @deprecated 0.1.76 Use css_overwrite()
2014
-		 *
2015
-		 * @param $color_code
2016
-		 * @param $compatibility
2017
-		 *
2018
-		 * @return string
2019
-		 */
2020
-		public static function css_secondary($color_code,$compatibility){;
2021
-			$color_code = sanitize_hex_color($color_code);
2022
-			if(!$color_code){return '';}
2023
-			/**
2024
-			 * c = color, b = background color, o = border-color, f = fill
2025
-			 */
2026
-			$selectors = array(
2027
-				'.btn-secondary' => array('b','o'),
2028
-				'.btn-secondary.disabled' => array('b','o'),
2029
-				'.btn-secondary:disabled' => array('b','o'),
2030
-				'.btn-outline-secondary' => array('c','o'),
2031
-				'.btn-outline-secondary:hover' => array('b','o'),
2032
-				'.btn-outline-secondary.disabled' => array('c'),
2033
-				'.btn-outline-secondary:disabled' => array('c'),
2034
-				'.btn-outline-secondary:not(:disabled):not(.disabled):active' => array('b','o'),
2035
-				'.btn-outline-secondary:not(:disabled):not(.disabled).active' => array('b','o'),
2036
-				'.btn-outline-secondary.dropdown-toggle' => array('b','o'),
2037
-				'.badge-secondary' => array('b'),
2038
-				'.alert-secondary' => array('b','o'),
2039
-				'.btn-link.btn-secondary' => array('c'),
2040
-			);
2041
-
2042
-			$important_selectors = array(
2043
-				'.bg-secondary' => array('b','f'),
2044
-				'.border-secondary' => array('o'),
2045
-				'.text-secondary' => array('c'),
2046
-			);
2047
-
2048
-			$color = array();
2049
-			$color_i = array();
2050
-			$background = array();
2051
-			$background_i = array();
2052
-			$border = array();
2053
-			$border_i = array();
2054
-			$fill = array();
2055
-			$fill_i = array();
2056
-
2057
-			$output = '';
2058
-
2059
-			// build rules into each type
2060
-			foreach($selectors as $selector => $types){
2061
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
2062
-				$types = array_combine($types,$types);
2063
-				if(isset($types['c'])){$color[] = $selector;}
2064
-				if(isset($types['b'])){$background[] = $selector;}
2065
-				if(isset($types['o'])){$border[] = $selector;}
2066
-				if(isset($types['f'])){$fill[] = $selector;}
2067
-			}
2068
-
2069
-			// build rules into each type
2070
-			foreach($important_selectors as $selector => $types){
2071
-				$selector = $compatibility ? ".bsui ".$selector : $selector;
2072
-				$types = array_combine($types,$types);
2073
-				if(isset($types['c'])){$color_i[] = $selector;}
2074
-				if(isset($types['b'])){$background_i[] = $selector;}
2075
-				if(isset($types['o'])){$border_i[] = $selector;}
2076
-				if(isset($types['f'])){$fill_i[] = $selector;}
2077
-			}
2078
-
2079
-			// add any color rules
2080
-			if(!empty($color)){
2081
-				$output .= implode(",",$color) . "{color: $color_code;} ";
2082
-			}
2083
-			if(!empty($color_i)){
2084
-				$output .= implode(",",$color_i) . "{color: $color_code !important;} ";
2085
-			}
2086
-
2087
-			// add any background color rules
2088
-			if(!empty($background)){
2089
-				$output .= implode(",",$background) . "{background-color: $color_code;} ";
2090
-			}
2091
-			if(!empty($background_i)){
2092
-				$output .= implode(",",$background_i) . "{background-color: $color_code !important;} ";
2093
-			}
2094
-
2095
-			// add any border color rules
2096
-			if(!empty($border)){
2097
-				$output .= implode(",",$border) . "{border-color: $color_code;} ";
2098
-			}
2099
-			if(!empty($border_i)){
2100
-				$output .= implode(",",$border_i) . "{border-color: $color_code !important;} ";
2101
-			}
2102
-
2103
-			// add any fill color rules
2104
-			if(!empty($fill)){
2105
-				$output .= implode(",",$fill) . "{fill: $color_code;} ";
2106
-			}
2107
-			if(!empty($fill_i)){
2108
-				$output .= implode(",",$fill_i) . "{fill: $color_code !important;} ";
2109
-			}
2110
-
2111
-
2112
-			$prefix = $compatibility ? ".bsui " : "";
2113
-
2114
-			// darken
2115
-			$darker_075 = self::css_hex_lighten_darken($color_code,"-0.075");
2116
-			$darker_10 = self::css_hex_lighten_darken($color_code,"-0.10");
2117
-			$darker_125 = self::css_hex_lighten_darken($color_code,"-0.125");
2118
-
2119
-			// lighten
2120
-			$lighten_25 = self::css_hex_lighten_darken($color_code,"0.25");
2121
-
2122
-			// opacity see https://css-tricks.com/8-digit-hex-codes/
2123
-			$op_25 = $color_code."40"; // 25% opacity
2124
-
2125
-
2126
-			// button states
2127
-			$output .= $prefix ." .btn-secondary:hover{background-color: ".$darker_075.";    border-color: ".$darker_10.";} ";
2128
-			$output .= $prefix ." .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-outline-secondary.dropdown-toggle:focus{box-shadow: 0 0 0 0.2rem $op_25;} ";
2129
-			$output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active, $prefix .btn-secondary:not(:disabled):not(.disabled).active, .show>$prefix .btn-secondary.dropdown-toggle{background-color: ".$darker_10.";    border-color: ".$darker_125.";} ";
2130
-			$output .= $prefix ." .btn-secondary:not(:disabled):not(.disabled):active:focus, $prefix .btn-secondary:not(:disabled):not(.disabled).active:focus, .show>$prefix .btn-secondary.dropdown-toggle:focus {box-shadow: 0 0 0 0.2rem $op_25;} ";
2131
-
2132
-
2133
-			return $output;
2134
-		}
2135
-
2136
-		/**
2137
-		 * Increases or decreases the brightness of a color by a percentage of the current brightness.
2138
-		 *
2139
-		 * @param   string  $hexCode        Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`
2140
-		 * @param   float   $adjustPercent  A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker.
2141
-		 *
2142
-		 * @return  string
2143
-		 */
2144
-		public static function css_hex_lighten_darken($hexCode, $adjustPercent) {
2145
-			$hexCode = ltrim($hexCode, '#');
2146
-
2147
-			if ( strpos( $hexCode, 'rgba(' ) !== false || strpos( $hexCode, 'rgb(' ) !== false ) {
2148
-				return $hexCode;
2149
-			}
2150
-
2151
-			if (strlen($hexCode) == 3) {
2152
-				$hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
2153
-			}
2154
-
2155
-			$hexCode = array_map('hexdec', str_split($hexCode, 2));
2156
-
2157
-			foreach ($hexCode as & $color) {
2158
-				$adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
2159
-				$adjustAmount = ceil($adjustableLimit * $adjustPercent);
2160
-
2161
-				$color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
2162
-			}
2163
-
2164
-			return '#' . implode($hexCode);
2165
-		}
2166
-
2167
-		/**
2168
-		 * Check if we should display examples.
2169
-		 */
2170
-		public function maybe_show_examples(){
2171
-			if(current_user_can('manage_options') && isset($_REQUEST['preview-aui'])){
2172
-				echo "<head>";
2173
-				wp_head();
2174
-				echo "</head>";
2175
-				echo "<body>";
2176
-				echo $this->get_examples(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2177
-				echo "</body>";
2178
-				exit;
2179
-			}
2180
-		}
2181
-
2182
-		/**
2183
-		 * Get developer examples.
2184
-		 *
2185
-		 * @return string
2186
-		 */
2187
-		public function get_examples(){
2188
-			$output = '';
2189
-
2190
-
2191
-			// open form
2192
-			$output .= "<form class='p-5 m-5 border rounded'>";
2193
-
2194
-			// input example
2195
-			$output .= aui()->input(array(
2196
-				'type'  =>  'text',
2197
-				'id'    =>  'text-example',
2198
-				'name'    =>  'text-example',
2199
-				'placeholder'   => 'text placeholder',
2200
-				'title'   => 'Text input example',
2201
-				'value' =>  '',
2202
-				'required'  => false,
2203
-				'help_text' => 'help text',
2204
-				'label' => 'Text input example label'
2205
-			));
2206
-
2207
-			// input example
2208
-			$output .= aui()->input(array(
2209
-				'type'  =>  'url',
2210
-				'id'    =>  'text-example2',
2211
-				'name'    =>  'text-example',
2212
-				'placeholder'   => 'url placeholder',
2213
-				'title'   => 'Text input example',
2214
-				'value' =>  '',
2215
-				'required'  => false,
2216
-				'help_text' => 'help text',
2217
-				'label' => 'Text input example label'
2218
-			));
2219
-
2220
-			// checkbox example
2221
-			$output .= aui()->input(array(
2222
-				'type'  =>  'checkbox',
2223
-				'id'    =>  'checkbox-example',
2224
-				'name'    =>  'checkbox-example',
2225
-				'placeholder'   => 'checkbox-example',
2226
-				'title'   => 'Checkbox example',
2227
-				'value' =>  '1',
2228
-				'checked'   => true,
2229
-				'required'  => false,
2230
-				'help_text' => 'help text',
2231
-				'label' => 'Checkbox checked'
2232
-			));
2233
-
2234
-			// checkbox example
2235
-			$output .= aui()->input(array(
2236
-				'type'  =>  'checkbox',
2237
-				'id'    =>  'checkbox-example2',
2238
-				'name'    =>  'checkbox-example2',
2239
-				'placeholder'   => 'checkbox-example',
2240
-				'title'   => 'Checkbox example',
2241
-				'value' =>  '1',
2242
-				'checked'   => false,
2243
-				'required'  => false,
2244
-				'help_text' => 'help text',
2245
-				'label' => 'Checkbox un-checked'
2246
-			));
2247
-
2248
-			// switch example
2249
-			$output .= aui()->input(array(
2250
-				'type'  =>  'checkbox',
2251
-				'id'    =>  'switch-example',
2252
-				'name'    =>  'switch-example',
2253
-				'placeholder'   => 'checkbox-example',
2254
-				'title'   => 'Switch example',
2255
-				'value' =>  '1',
2256
-				'checked'   => true,
2257
-				'switch'    => true,
2258
-				'required'  => false,
2259
-				'help_text' => 'help text',
2260
-				'label' => 'Switch on'
2261
-			));
2262
-
2263
-			// switch example
2264
-			$output .= aui()->input(array(
2265
-				'type'  =>  'checkbox',
2266
-				'id'    =>  'switch-example2',
2267
-				'name'    =>  'switch-example2',
2268
-				'placeholder'   => 'checkbox-example',
2269
-				'title'   => 'Switch example',
2270
-				'value' =>  '1',
2271
-				'checked'   => false,
2272
-				'switch'    => true,
2273
-				'required'  => false,
2274
-				'help_text' => 'help text',
2275
-				'label' => 'Switch off'
2276
-			));
2277
-
2278
-			// close form
2279
-			$output .= "</form>";
2280
-
2281
-			return $output;
2282
-		}
2283
-
2284
-		/**
2285
-		 * Calendar params.
2286
-		 *
2287
-		 * @since 0.1.44
2288
-		 *
2289
-		 * @return array Calendar params.
2290
-		 */
2291
-		public static function calendar_params() {
2292
-			$params = array(
2293
-				'month_long_1' => __( 'January', 'ayecode-connect' ),
2294
-				'month_long_2' => __( 'February', 'ayecode-connect' ),
2295
-				'month_long_3' => __( 'March', 'ayecode-connect' ),
2296
-				'month_long_4' => __( 'April', 'ayecode-connect' ),
2297
-				'month_long_5' => __( 'May', 'ayecode-connect' ),
2298
-				'month_long_6' => __( 'June', 'ayecode-connect' ),
2299
-				'month_long_7' => __( 'July', 'ayecode-connect' ),
2300
-				'month_long_8' => __( 'August', 'ayecode-connect' ),
2301
-				'month_long_9' => __( 'September', 'ayecode-connect' ),
2302
-				'month_long_10' => __( 'October', 'ayecode-connect' ),
2303
-				'month_long_11' => __( 'November', 'ayecode-connect' ),
2304
-				'month_long_12' => __( 'December', 'ayecode-connect' ),
2305
-				'month_s_1' => _x( 'Jan', 'January abbreviation', 'ayecode-connect' ),
2306
-				'month_s_2' => _x( 'Feb', 'February abbreviation', 'ayecode-connect' ),
2307
-				'month_s_3' => _x( 'Mar', 'March abbreviation', 'ayecode-connect' ),
2308
-				'month_s_4' => _x( 'Apr', 'April abbreviation', 'ayecode-connect' ),
2309
-				'month_s_5' => _x( 'May', 'May abbreviation', 'ayecode-connect' ),
2310
-				'month_s_6' => _x( 'Jun', 'June abbreviation', 'ayecode-connect' ),
2311
-				'month_s_7' => _x( 'Jul', 'July abbreviation', 'ayecode-connect' ),
2312
-				'month_s_8' => _x( 'Aug', 'August abbreviation', 'ayecode-connect' ),
2313
-				'month_s_9' => _x( 'Sep', 'September abbreviation', 'ayecode-connect' ),
2314
-				'month_s_10' => _x( 'Oct', 'October abbreviation', 'ayecode-connect' ),
2315
-				'month_s_11' => _x( 'Nov', 'November abbreviation', 'ayecode-connect' ),
2316
-				'month_s_12' => _x( 'Dec', 'December abbreviation', 'ayecode-connect' ),
2317
-				'day_s1_1' => _x( 'S', 'Sunday initial', 'ayecode-connect' ),
2318
-				'day_s1_2' => _x( 'M', 'Monday initial', 'ayecode-connect' ),
2319
-				'day_s1_3' => _x( 'T', 'Tuesday initial', 'ayecode-connect' ),
2320
-				'day_s1_4' => _x( 'W', 'Wednesday initial', 'ayecode-connect' ),
2321
-				'day_s1_5' => _x( 'T', 'Friday initial', 'ayecode-connect' ),
2322
-				'day_s1_6' => _x( 'F', 'Thursday initial', 'ayecode-connect' ),
2323
-				'day_s1_7' => _x( 'S', 'Saturday initial', 'ayecode-connect' ),
2324
-				'day_s2_1' => __( 'Su', 'ayecode-connect' ),
2325
-				'day_s2_2' => __( 'Mo', 'ayecode-connect' ),
2326
-				'day_s2_3' => __( 'Tu', 'ayecode-connect' ),
2327
-				'day_s2_4' => __( 'We', 'ayecode-connect' ),
2328
-				'day_s2_5' => __( 'Th', 'ayecode-connect' ),
2329
-				'day_s2_6' => __( 'Fr', 'ayecode-connect' ),
2330
-				'day_s2_7' => __( 'Sa', 'ayecode-connect' ),
2331
-				'day_s3_1' => __( 'Sun', 'ayecode-connect' ),
2332
-				'day_s3_2' => __( 'Mon', 'ayecode-connect' ),
2333
-				'day_s3_3' => __( 'Tue', 'ayecode-connect' ),
2334
-				'day_s3_4' => __( 'Wed', 'ayecode-connect' ),
2335
-				'day_s3_5' => __( 'Thu', 'ayecode-connect' ),
2336
-				'day_s3_6' => __( 'Fri', 'ayecode-connect' ),
2337
-				'day_s3_7' => __( 'Sat', 'ayecode-connect' ),
2338
-				'day_s5_1' => __( 'Sunday', 'ayecode-connect' ),
2339
-				'day_s5_2' => __( 'Monday', 'ayecode-connect' ),
2340
-				'day_s5_3' => __( 'Tuesday', 'ayecode-connect' ),
2341
-				'day_s5_4' => __( 'Wednesday', 'ayecode-connect' ),
2342
-				'day_s5_5' => __( 'Thursday', 'ayecode-connect' ),
2343
-				'day_s5_6' => __( 'Friday', 'ayecode-connect' ),
2344
-				'day_s5_7' => __( 'Saturday', 'ayecode-connect' ),
2345
-				'am_lower' => __( 'am', 'ayecode-connect' ),
2346
-				'pm_lower' => __( 'pm', 'ayecode-connect' ),
2347
-				'am_upper' => __( 'AM', 'ayecode-connect' ),
2348
-				'pm_upper' => __( 'PM', 'ayecode-connect' ),
2349
-				'firstDayOfWeek' => (int) get_option( 'start_of_week' ),
2350
-				'time_24hr' => false,
2351
-				'year' => __( 'Year', 'ayecode-connect' ),
2352
-				'hour' => __( 'Hour', 'ayecode-connect' ),
2353
-				'minute' => __( 'Minute', 'ayecode-connect' ),
2354
-				'weekAbbreviation' => __( 'Wk', 'ayecode-connect' ),
2355
-				'rangeSeparator' => __( ' to ', 'ayecode-connect' ),
2356
-				'scrollTitle' => __( 'Scroll to increment', 'ayecode-connect' ),
2357
-				'toggleTitle' => __( 'Click to toggle', 'ayecode-connect' )
2358
-			);
2359
-
2360
-			return apply_filters( 'ayecode_ui_calendar_params', $params );
2361
-		}
2362
-
2363
-		/**
2364
-		 * Flatpickr calendar localize.
2365
-		 *
2366
-		 * @since 0.1.44
2367
-		 *
2368
-		 * @return string Calendar locale.
2369
-		 */
2370
-		public static function flatpickr_locale() {
2371
-			$params = self::calendar_params();
2372
-
2373
-			if ( is_string( $params ) ) {
2374
-				$params = html_entity_decode( $params, ENT_QUOTES, 'UTF-8' );
2375
-			} else {
2376
-				foreach ( (array) $params as $key => $value ) {
2377
-					if ( ! is_scalar( $value ) ) {
2378
-						continue;
2379
-					}
2380
-
2381
-					$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2382
-				}
2383
-			}
2384 2190
 
2385
-			$day_s3 = array();
2386
-			$day_s5 = array();
2191
+            // open form
2192
+            $output .= "<form class='p-5 m-5 border rounded'>";
2193
+
2194
+            // input example
2195
+            $output .= aui()->input(array(
2196
+                'type'  =>  'text',
2197
+                'id'    =>  'text-example',
2198
+                'name'    =>  'text-example',
2199
+                'placeholder'   => 'text placeholder',
2200
+                'title'   => 'Text input example',
2201
+                'value' =>  '',
2202
+                'required'  => false,
2203
+                'help_text' => 'help text',
2204
+                'label' => 'Text input example label'
2205
+            ));
2206
+
2207
+            // input example
2208
+            $output .= aui()->input(array(
2209
+                'type'  =>  'url',
2210
+                'id'    =>  'text-example2',
2211
+                'name'    =>  'text-example',
2212
+                'placeholder'   => 'url placeholder',
2213
+                'title'   => 'Text input example',
2214
+                'value' =>  '',
2215
+                'required'  => false,
2216
+                'help_text' => 'help text',
2217
+                'label' => 'Text input example label'
2218
+            ));
2219
+
2220
+            // checkbox example
2221
+            $output .= aui()->input(array(
2222
+                'type'  =>  'checkbox',
2223
+                'id'    =>  'checkbox-example',
2224
+                'name'    =>  'checkbox-example',
2225
+                'placeholder'   => 'checkbox-example',
2226
+                'title'   => 'Checkbox example',
2227
+                'value' =>  '1',
2228
+                'checked'   => true,
2229
+                'required'  => false,
2230
+                'help_text' => 'help text',
2231
+                'label' => 'Checkbox checked'
2232
+            ));
2233
+
2234
+            // checkbox example
2235
+            $output .= aui()->input(array(
2236
+                'type'  =>  'checkbox',
2237
+                'id'    =>  'checkbox-example2',
2238
+                'name'    =>  'checkbox-example2',
2239
+                'placeholder'   => 'checkbox-example',
2240
+                'title'   => 'Checkbox example',
2241
+                'value' =>  '1',
2242
+                'checked'   => false,
2243
+                'required'  => false,
2244
+                'help_text' => 'help text',
2245
+                'label' => 'Checkbox un-checked'
2246
+            ));
2247
+
2248
+            // switch example
2249
+            $output .= aui()->input(array(
2250
+                'type'  =>  'checkbox',
2251
+                'id'    =>  'switch-example',
2252
+                'name'    =>  'switch-example',
2253
+                'placeholder'   => 'checkbox-example',
2254
+                'title'   => 'Switch example',
2255
+                'value' =>  '1',
2256
+                'checked'   => true,
2257
+                'switch'    => true,
2258
+                'required'  => false,
2259
+                'help_text' => 'help text',
2260
+                'label' => 'Switch on'
2261
+            ));
2262
+
2263
+            // switch example
2264
+            $output .= aui()->input(array(
2265
+                'type'  =>  'checkbox',
2266
+                'id'    =>  'switch-example2',
2267
+                'name'    =>  'switch-example2',
2268
+                'placeholder'   => 'checkbox-example',
2269
+                'title'   => 'Switch example',
2270
+                'value' =>  '1',
2271
+                'checked'   => false,
2272
+                'switch'    => true,
2273
+                'required'  => false,
2274
+                'help_text' => 'help text',
2275
+                'label' => 'Switch off'
2276
+            ));
2277
+
2278
+            // close form
2279
+            $output .= "</form>";
2280
+
2281
+            return $output;
2282
+        }
2283
+
2284
+        /**
2285
+         * Calendar params.
2286
+         *
2287
+         * @since 0.1.44
2288
+         *
2289
+         * @return array Calendar params.
2290
+         */
2291
+        public static function calendar_params() {
2292
+            $params = array(
2293
+                'month_long_1' => __( 'January', 'ayecode-connect' ),
2294
+                'month_long_2' => __( 'February', 'ayecode-connect' ),
2295
+                'month_long_3' => __( 'March', 'ayecode-connect' ),
2296
+                'month_long_4' => __( 'April', 'ayecode-connect' ),
2297
+                'month_long_5' => __( 'May', 'ayecode-connect' ),
2298
+                'month_long_6' => __( 'June', 'ayecode-connect' ),
2299
+                'month_long_7' => __( 'July', 'ayecode-connect' ),
2300
+                'month_long_8' => __( 'August', 'ayecode-connect' ),
2301
+                'month_long_9' => __( 'September', 'ayecode-connect' ),
2302
+                'month_long_10' => __( 'October', 'ayecode-connect' ),
2303
+                'month_long_11' => __( 'November', 'ayecode-connect' ),
2304
+                'month_long_12' => __( 'December', 'ayecode-connect' ),
2305
+                'month_s_1' => _x( 'Jan', 'January abbreviation', 'ayecode-connect' ),
2306
+                'month_s_2' => _x( 'Feb', 'February abbreviation', 'ayecode-connect' ),
2307
+                'month_s_3' => _x( 'Mar', 'March abbreviation', 'ayecode-connect' ),
2308
+                'month_s_4' => _x( 'Apr', 'April abbreviation', 'ayecode-connect' ),
2309
+                'month_s_5' => _x( 'May', 'May abbreviation', 'ayecode-connect' ),
2310
+                'month_s_6' => _x( 'Jun', 'June abbreviation', 'ayecode-connect' ),
2311
+                'month_s_7' => _x( 'Jul', 'July abbreviation', 'ayecode-connect' ),
2312
+                'month_s_8' => _x( 'Aug', 'August abbreviation', 'ayecode-connect' ),
2313
+                'month_s_9' => _x( 'Sep', 'September abbreviation', 'ayecode-connect' ),
2314
+                'month_s_10' => _x( 'Oct', 'October abbreviation', 'ayecode-connect' ),
2315
+                'month_s_11' => _x( 'Nov', 'November abbreviation', 'ayecode-connect' ),
2316
+                'month_s_12' => _x( 'Dec', 'December abbreviation', 'ayecode-connect' ),
2317
+                'day_s1_1' => _x( 'S', 'Sunday initial', 'ayecode-connect' ),
2318
+                'day_s1_2' => _x( 'M', 'Monday initial', 'ayecode-connect' ),
2319
+                'day_s1_3' => _x( 'T', 'Tuesday initial', 'ayecode-connect' ),
2320
+                'day_s1_4' => _x( 'W', 'Wednesday initial', 'ayecode-connect' ),
2321
+                'day_s1_5' => _x( 'T', 'Friday initial', 'ayecode-connect' ),
2322
+                'day_s1_6' => _x( 'F', 'Thursday initial', 'ayecode-connect' ),
2323
+                'day_s1_7' => _x( 'S', 'Saturday initial', 'ayecode-connect' ),
2324
+                'day_s2_1' => __( 'Su', 'ayecode-connect' ),
2325
+                'day_s2_2' => __( 'Mo', 'ayecode-connect' ),
2326
+                'day_s2_3' => __( 'Tu', 'ayecode-connect' ),
2327
+                'day_s2_4' => __( 'We', 'ayecode-connect' ),
2328
+                'day_s2_5' => __( 'Th', 'ayecode-connect' ),
2329
+                'day_s2_6' => __( 'Fr', 'ayecode-connect' ),
2330
+                'day_s2_7' => __( 'Sa', 'ayecode-connect' ),
2331
+                'day_s3_1' => __( 'Sun', 'ayecode-connect' ),
2332
+                'day_s3_2' => __( 'Mon', 'ayecode-connect' ),
2333
+                'day_s3_3' => __( 'Tue', 'ayecode-connect' ),
2334
+                'day_s3_4' => __( 'Wed', 'ayecode-connect' ),
2335
+                'day_s3_5' => __( 'Thu', 'ayecode-connect' ),
2336
+                'day_s3_6' => __( 'Fri', 'ayecode-connect' ),
2337
+                'day_s3_7' => __( 'Sat', 'ayecode-connect' ),
2338
+                'day_s5_1' => __( 'Sunday', 'ayecode-connect' ),
2339
+                'day_s5_2' => __( 'Monday', 'ayecode-connect' ),
2340
+                'day_s5_3' => __( 'Tuesday', 'ayecode-connect' ),
2341
+                'day_s5_4' => __( 'Wednesday', 'ayecode-connect' ),
2342
+                'day_s5_5' => __( 'Thursday', 'ayecode-connect' ),
2343
+                'day_s5_6' => __( 'Friday', 'ayecode-connect' ),
2344
+                'day_s5_7' => __( 'Saturday', 'ayecode-connect' ),
2345
+                'am_lower' => __( 'am', 'ayecode-connect' ),
2346
+                'pm_lower' => __( 'pm', 'ayecode-connect' ),
2347
+                'am_upper' => __( 'AM', 'ayecode-connect' ),
2348
+                'pm_upper' => __( 'PM', 'ayecode-connect' ),
2349
+                'firstDayOfWeek' => (int) get_option( 'start_of_week' ),
2350
+                'time_24hr' => false,
2351
+                'year' => __( 'Year', 'ayecode-connect' ),
2352
+                'hour' => __( 'Hour', 'ayecode-connect' ),
2353
+                'minute' => __( 'Minute', 'ayecode-connect' ),
2354
+                'weekAbbreviation' => __( 'Wk', 'ayecode-connect' ),
2355
+                'rangeSeparator' => __( ' to ', 'ayecode-connect' ),
2356
+                'scrollTitle' => __( 'Scroll to increment', 'ayecode-connect' ),
2357
+                'toggleTitle' => __( 'Click to toggle', 'ayecode-connect' )
2358
+            );
2359
+
2360
+            return apply_filters( 'ayecode_ui_calendar_params', $params );
2361
+        }
2362
+
2363
+        /**
2364
+         * Flatpickr calendar localize.
2365
+         *
2366
+         * @since 0.1.44
2367
+         *
2368
+         * @return string Calendar locale.
2369
+         */
2370
+        public static function flatpickr_locale() {
2371
+            $params = self::calendar_params();
2372
+
2373
+            if ( is_string( $params ) ) {
2374
+                $params = html_entity_decode( $params, ENT_QUOTES, 'UTF-8' );
2375
+            } else {
2376
+                foreach ( (array) $params as $key => $value ) {
2377
+                    if ( ! is_scalar( $value ) ) {
2378
+                        continue;
2379
+                    }
2380
+
2381
+                    $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2382
+                }
2383
+            }
2387 2384
 
2388
-			for ( $i = 1; $i <= 7; $i ++ ) {
2389
-				$day_s3[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2390
-				$day_s5[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2391
-			}
2385
+            $day_s3 = array();
2386
+            $day_s5 = array();
2387
+
2388
+            for ( $i = 1; $i <= 7; $i ++ ) {
2389
+                $day_s3[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2390
+                $day_s5[] = addslashes( $params[ 'day_s3_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2391
+            }
2392 2392
 
2393
-			$month_s = array();
2394
-			$month_long = array();
2393
+            $month_s = array();
2394
+            $month_long = array();
2395 2395
 
2396
-			for ( $i = 1; $i <= 12; $i ++ ) {
2397
-				$month_s[] = addslashes( $params[ 'month_s_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2398
-				$month_long[] = addslashes( $params[ 'month_long_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2399
-			}
2396
+            for ( $i = 1; $i <= 12; $i ++ ) {
2397
+                $month_s[] = addslashes( $params[ 'month_s_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2398
+                $month_long[] = addslashes( $params[ 'month_long_' . $i ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
2399
+            }
2400 2400
 
2401
-			ob_start();
2402
-		if ( 0 ) { ?><script><?php } ?>
2401
+            ob_start();
2402
+        if ( 0 ) { ?><script><?php } ?>
2403 2403
                 {
2404 2404
                     weekdays: {
2405 2405
                         shorthand: ['<?php echo implode( "','", $day_s3 ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>'],
@@ -2438,189 +2438,189 @@  discard block
 block discarded – undo
2438 2438
                 }
2439 2439
 				<?php if ( 0 ) { ?></script><?php } ?>
2440 2440
 			<?php
2441
-			$locale = ob_get_clean();
2442
-
2443
-			return apply_filters( 'ayecode_ui_flatpickr_locale', trim( $locale ) );
2444
-		}
2445
-
2446
-		/**
2447
-		 * Select2 JS params.
2448
-		 *
2449
-		 * @since 0.1.44
2450
-		 *
2451
-		 * @return array Select2 JS params.
2452
-		 */
2453
-		public static function select2_params() {
2454
-			$params = array(
2455
-				'i18n_select_state_text'    => esc_attr__( 'Select an option&hellip;', 'ayecode-connect' ),
2456
-				'i18n_no_matches'           => _x( 'No matches found', 'enhanced select', 'ayecode-connect' ),
2457
-				'i18n_ajax_error'           => _x( 'Loading failed', 'enhanced select', 'ayecode-connect' ),
2458
-				'i18n_input_too_short_1'    => _x( 'Please enter 1 or more characters', 'enhanced select', 'ayecode-connect' ),
2459
-				'i18n_input_too_short_n'    => _x( 'Please enter %item% or more characters', 'enhanced select', 'ayecode-connect' ),
2460
-				'i18n_input_too_long_1'     => _x( 'Please delete 1 character', 'enhanced select', 'ayecode-connect' ),
2461
-				'i18n_input_too_long_n'     => _x( 'Please delete %item% characters', 'enhanced select', 'ayecode-connect' ),
2462
-				'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'ayecode-connect' ),
2463
-				'i18n_selection_too_long_n' => _x( 'You can only select %item% items', 'enhanced select', 'ayecode-connect' ),
2464
-				'i18n_load_more'            => _x( 'Loading more results&hellip;', 'enhanced select', 'ayecode-connect' ),
2465
-				'i18n_searching'            => _x( 'Searching&hellip;', 'enhanced select', 'ayecode-connect' )
2466
-			);
2467
-
2468
-			return apply_filters( 'ayecode_ui_select2_params', $params );
2469
-		}
2470
-
2471
-		/**
2472
-		 * Select2 JS localize.
2473
-		 *
2474
-		 * @since 0.1.44
2475
-		 *
2476
-		 * @return string Select2 JS locale.
2477
-		 */
2478
-		public static function select2_locale() {
2479
-			$params = self::select2_params();
2480
-
2481
-			foreach ( (array) $params as $key => $value ) {
2482
-				if ( ! is_scalar( $value ) ) {
2483
-					continue;
2484
-				}
2441
+            $locale = ob_get_clean();
2485 2442
 
2486
-				$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2487
-			}
2488
-
2489
-			$locale = json_encode( $params );
2490
-
2491
-			return apply_filters( 'ayecode_ui_select2_locale', trim( $locale ) );
2492
-		}
2493
-
2494
-		/**
2495
-		 * Time ago JS localize.
2496
-		 *
2497
-		 * @since 0.1.47
2498
-		 *
2499
-		 * @return string Time ago JS locale.
2500
-		 */
2501
-		public static function timeago_locale() {
2502
-			$params = array(
2503
-				'prefix_ago' => '',
2504
-				'suffix_ago' => ' ' . _x( 'ago', 'time ago', 'ayecode-connect' ),
2505
-				'prefix_after' => _x( 'after', 'time ago', 'ayecode-connect' ) . ' ',
2506
-				'suffix_after' => '',
2507
-				'seconds' => _x( 'less than a minute', 'time ago', 'ayecode-connect' ),
2508
-				'minute' => _x( 'about a minute', 'time ago', 'ayecode-connect' ),
2509
-				'minutes' => _x( '%d minutes', 'time ago', 'ayecode-connect' ),
2510
-				'hour' => _x( 'about an hour', 'time ago', 'ayecode-connect' ),
2511
-				'hours' => _x( 'about %d hours', 'time ago', 'ayecode-connect' ),
2512
-				'day' => _x( 'a day', 'time ago', 'ayecode-connect' ),
2513
-				'days' => _x( '%d days', 'time ago', 'ayecode-connect' ),
2514
-				'month' => _x( 'about a month', 'time ago', 'ayecode-connect' ),
2515
-				'months' => _x( '%d months', 'time ago', 'ayecode-connect' ),
2516
-				'year' => _x( 'about a year', 'time ago', 'ayecode-connect' ),
2517
-				'years' => _x( '%d years', 'time ago', 'ayecode-connect' ),
2518
-			);
2519
-
2520
-			$params = apply_filters( 'ayecode_ui_timeago_params', $params );
2521
-
2522
-			foreach ( (array) $params as $key => $value ) {
2523
-				if ( ! is_scalar( $value ) ) {
2524
-					continue;
2525
-				}
2443
+            return apply_filters( 'ayecode_ui_flatpickr_locale', trim( $locale ) );
2444
+        }
2445
+
2446
+        /**
2447
+         * Select2 JS params.
2448
+         *
2449
+         * @since 0.1.44
2450
+         *
2451
+         * @return array Select2 JS params.
2452
+         */
2453
+        public static function select2_params() {
2454
+            $params = array(
2455
+                'i18n_select_state_text'    => esc_attr__( 'Select an option&hellip;', 'ayecode-connect' ),
2456
+                'i18n_no_matches'           => _x( 'No matches found', 'enhanced select', 'ayecode-connect' ),
2457
+                'i18n_ajax_error'           => _x( 'Loading failed', 'enhanced select', 'ayecode-connect' ),
2458
+                'i18n_input_too_short_1'    => _x( 'Please enter 1 or more characters', 'enhanced select', 'ayecode-connect' ),
2459
+                'i18n_input_too_short_n'    => _x( 'Please enter %item% or more characters', 'enhanced select', 'ayecode-connect' ),
2460
+                'i18n_input_too_long_1'     => _x( 'Please delete 1 character', 'enhanced select', 'ayecode-connect' ),
2461
+                'i18n_input_too_long_n'     => _x( 'Please delete %item% characters', 'enhanced select', 'ayecode-connect' ),
2462
+                'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'ayecode-connect' ),
2463
+                'i18n_selection_too_long_n' => _x( 'You can only select %item% items', 'enhanced select', 'ayecode-connect' ),
2464
+                'i18n_load_more'            => _x( 'Loading more results&hellip;', 'enhanced select', 'ayecode-connect' ),
2465
+                'i18n_searching'            => _x( 'Searching&hellip;', 'enhanced select', 'ayecode-connect' )
2466
+            );
2467
+
2468
+            return apply_filters( 'ayecode_ui_select2_params', $params );
2469
+        }
2470
+
2471
+        /**
2472
+         * Select2 JS localize.
2473
+         *
2474
+         * @since 0.1.44
2475
+         *
2476
+         * @return string Select2 JS locale.
2477
+         */
2478
+        public static function select2_locale() {
2479
+            $params = self::select2_params();
2480
+
2481
+            foreach ( (array) $params as $key => $value ) {
2482
+                if ( ! is_scalar( $value ) ) {
2483
+                    continue;
2484
+                }
2485
+
2486
+                $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2487
+            }
2488
+
2489
+            $locale = json_encode( $params );
2490
+
2491
+            return apply_filters( 'ayecode_ui_select2_locale', trim( $locale ) );
2492
+        }
2493
+
2494
+        /**
2495
+         * Time ago JS localize.
2496
+         *
2497
+         * @since 0.1.47
2498
+         *
2499
+         * @return string Time ago JS locale.
2500
+         */
2501
+        public static function timeago_locale() {
2502
+            $params = array(
2503
+                'prefix_ago' => '',
2504
+                'suffix_ago' => ' ' . _x( 'ago', 'time ago', 'ayecode-connect' ),
2505
+                'prefix_after' => _x( 'after', 'time ago', 'ayecode-connect' ) . ' ',
2506
+                'suffix_after' => '',
2507
+                'seconds' => _x( 'less than a minute', 'time ago', 'ayecode-connect' ),
2508
+                'minute' => _x( 'about a minute', 'time ago', 'ayecode-connect' ),
2509
+                'minutes' => _x( '%d minutes', 'time ago', 'ayecode-connect' ),
2510
+                'hour' => _x( 'about an hour', 'time ago', 'ayecode-connect' ),
2511
+                'hours' => _x( 'about %d hours', 'time ago', 'ayecode-connect' ),
2512
+                'day' => _x( 'a day', 'time ago', 'ayecode-connect' ),
2513
+                'days' => _x( '%d days', 'time ago', 'ayecode-connect' ),
2514
+                'month' => _x( 'about a month', 'time ago', 'ayecode-connect' ),
2515
+                'months' => _x( '%d months', 'time ago', 'ayecode-connect' ),
2516
+                'year' => _x( 'about a year', 'time ago', 'ayecode-connect' ),
2517
+                'years' => _x( '%d years', 'time ago', 'ayecode-connect' ),
2518
+            );
2519
+
2520
+            $params = apply_filters( 'ayecode_ui_timeago_params', $params );
2521
+
2522
+            foreach ( (array) $params as $key => $value ) {
2523
+                if ( ! is_scalar( $value ) ) {
2524
+                    continue;
2525
+                }
2526 2526
 
2527
-				$params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2528
-			}
2529
-
2530
-			$locale = json_encode( $params );
2531
-
2532
-			return apply_filters( 'ayecode_ui_timeago_locale', trim( $locale ) );
2533
-		}
2534
-
2535
-		/**
2536
-		 * JavaScript Minifier
2537
-		 *
2538
-		 * @param $input
2539
-		 *
2540
-		 * @return mixed
2541
-		 */
2542
-		public static function minify_js($input) {
2543
-			if(trim($input) === "") return $input;
2544
-			return preg_replace(
2545
-				array(
2546
-					// Remove comment(s)
2547
-					'#\s*("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')\s*|\s*\/\*(?!\!|@cc_on)(?>[\s\S]*?\*\/)\s*|\s*(?<![\:\=])\/\/.*(?=[\n\r]|$)|^\s*|\s*$#',
2548
-					// Remove white-space(s) outside the string and regex
2549
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/)|\/(?!\/)[^\n\r]*?\/(?=[\s.,;]|[gimuy]|$))|\s*([!%&*\(\)\-=+\[\]\{\}|;:,.<>?\/])\s*#s',
2550
-					// Remove the last semicolon
2551
-					'#;+\}#',
2552
-					// Minify object attribute(s) except JSON attribute(s). From `{'foo':'bar'}` to `{foo:'bar'}`
2553
-					'#([\{,])([\'])(\d+|[a-z_][a-z0-9_]*)\2(?=\:)#i',
2554
-					// --ibid. From `foo['bar']` to `foo.bar`
2555
-					'#([a-z0-9_\)\]])\[([\'"])([a-z_][a-z0-9_]*)\2\]#i'
2556
-				),
2557
-				array(
2558
-					'$1',
2559
-					'$1$2',
2560
-					'}',
2561
-					'$1$3',
2562
-					'$1.$3'
2563
-				),
2564
-				$input);
2565
-		}
2566
-
2567
-		/**
2568
-		 * Minify CSS
2569
-		 *
2570
-		 * @param $input
2571
-		 *
2572
-		 * @return mixed
2573
-		 */
2574
-		public static function minify_css($input) {
2575
-			if(trim($input) === "") return $input;
2576
-			return preg_replace(
2577
-				array(
2578
-					// Remove comment(s)
2579
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s',
2580
-					// Remove unused white-space(s)
2581
-					'#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si',
2582
-					// Replace `0(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)` with `0`
2583
-					'#(?<=[\s:])(0)(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)#si',
2584
-					// Replace `:0 0 0 0` with `:0`
2585
-					'#:(0\s+0|0\s+0\s+0\s+0)(?=[;\}]|\!important)#i',
2586
-					// Replace `background-position:0` with `background-position:0 0`
2587
-					'#(background-position):0(?=[;\}])#si',
2588
-					// Replace `0.6` with `.6`, but only when preceded by `:`, `,`, `-` or a white-space
2589
-					'#(?<=[\s:,\-])0+\.(\d+)#s',
2590
-					// Minify string value
2591
-					'#(\/\*(?>.*?\*\/))|(?<!content\:)([\'"])([a-z_][a-z0-9\-_]*?)\2(?=[\s\{\}\];,])#si',
2592
-					'#(\/\*(?>.*?\*\/))|(\burl\()([\'"])([^\s]+?)\3(\))#si',
2593
-					// Minify HEX color code
2594
-					'#(?<=[\s:,\-]\#)([a-f0-6]+)\1([a-f0-6]+)\2([a-f0-6]+)\3#i',
2595
-					// Replace `(border|outline):none` with `(border|outline):0`
2596
-					'#(?<=[\{;])(border|outline):none(?=[;\}\!])#',
2597
-					// Remove empty selector(s)
2598
-					'#(\/\*(?>.*?\*\/))|(^|[\{\}])(?:[^\s\{\}]+)\{\}#s'
2599
-				),
2600
-				array(
2601
-					'$1',
2602
-					'$1$2$3$4$5$6$7',
2603
-					'$1',
2604
-					':0',
2605
-					'$1:0 0',
2606
-					'.$1',
2607
-					'$1$3',
2608
-					'$1$2$4$5',
2609
-					'$1$2$3',
2610
-					'$1:0',
2611
-					'$1$2'
2612
-				),
2613
-				$input);
2614
-		}
2615
-
2616
-		/**
2617
-		 * Get the conditional fields JavaScript.
2618
-		 *
2619
-		 * @return mixed
2620
-		 */
2621
-		public function conditional_fields_js() {
2622
-			ob_start();
2623
-			?>
2527
+                $params[ $key ] = html_entity_decode( (string) $value, ENT_QUOTES, 'UTF-8' );
2528
+            }
2529
+
2530
+            $locale = json_encode( $params );
2531
+
2532
+            return apply_filters( 'ayecode_ui_timeago_locale', trim( $locale ) );
2533
+        }
2534
+
2535
+        /**
2536
+         * JavaScript Minifier
2537
+         *
2538
+         * @param $input
2539
+         *
2540
+         * @return mixed
2541
+         */
2542
+        public static function minify_js($input) {
2543
+            if(trim($input) === "") return $input;
2544
+            return preg_replace(
2545
+                array(
2546
+                    // Remove comment(s)
2547
+                    '#\s*("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')\s*|\s*\/\*(?!\!|@cc_on)(?>[\s\S]*?\*\/)\s*|\s*(?<![\:\=])\/\/.*(?=[\n\r]|$)|^\s*|\s*$#',
2548
+                    // Remove white-space(s) outside the string and regex
2549
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/)|\/(?!\/)[^\n\r]*?\/(?=[\s.,;]|[gimuy]|$))|\s*([!%&*\(\)\-=+\[\]\{\}|;:,.<>?\/])\s*#s',
2550
+                    // Remove the last semicolon
2551
+                    '#;+\}#',
2552
+                    // Minify object attribute(s) except JSON attribute(s). From `{'foo':'bar'}` to `{foo:'bar'}`
2553
+                    '#([\{,])([\'])(\d+|[a-z_][a-z0-9_]*)\2(?=\:)#i',
2554
+                    // --ibid. From `foo['bar']` to `foo.bar`
2555
+                    '#([a-z0-9_\)\]])\[([\'"])([a-z_][a-z0-9_]*)\2\]#i'
2556
+                ),
2557
+                array(
2558
+                    '$1',
2559
+                    '$1$2',
2560
+                    '}',
2561
+                    '$1$3',
2562
+                    '$1.$3'
2563
+                ),
2564
+                $input);
2565
+        }
2566
+
2567
+        /**
2568
+         * Minify CSS
2569
+         *
2570
+         * @param $input
2571
+         *
2572
+         * @return mixed
2573
+         */
2574
+        public static function minify_css($input) {
2575
+            if(trim($input) === "") return $input;
2576
+            return preg_replace(
2577
+                array(
2578
+                    // Remove comment(s)
2579
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')|\/\*(?!\!)(?>.*?\*\/)|^\s*|\s*$#s',
2580
+                    // Remove unused white-space(s)
2581
+                    '#("(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\'|\/\*(?>.*?\*\/))|\s*+;\s*+(})\s*+|\s*+([*$~^|]?+=|[{};,>~]|\s(?![0-9\.])|!important\b)\s*+|([[(:])\s++|\s++([])])|\s++(:)\s*+(?!(?>[^{}"\']++|"(?:[^"\\\]++|\\\.)*+"|\'(?:[^\'\\\\]++|\\\.)*+\')*+{)|^\s++|\s++\z|(\s)\s+#si',
2582
+                    // Replace `0(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)` with `0`
2583
+                    '#(?<=[\s:])(0)(cm|em|ex|in|mm|pc|pt|px|vh|vw|%)#si',
2584
+                    // Replace `:0 0 0 0` with `:0`
2585
+                    '#:(0\s+0|0\s+0\s+0\s+0)(?=[;\}]|\!important)#i',
2586
+                    // Replace `background-position:0` with `background-position:0 0`
2587
+                    '#(background-position):0(?=[;\}])#si',
2588
+                    // Replace `0.6` with `.6`, but only when preceded by `:`, `,`, `-` or a white-space
2589
+                    '#(?<=[\s:,\-])0+\.(\d+)#s',
2590
+                    // Minify string value
2591
+                    '#(\/\*(?>.*?\*\/))|(?<!content\:)([\'"])([a-z_][a-z0-9\-_]*?)\2(?=[\s\{\}\];,])#si',
2592
+                    '#(\/\*(?>.*?\*\/))|(\burl\()([\'"])([^\s]+?)\3(\))#si',
2593
+                    // Minify HEX color code
2594
+                    '#(?<=[\s:,\-]\#)([a-f0-6]+)\1([a-f0-6]+)\2([a-f0-6]+)\3#i',
2595
+                    // Replace `(border|outline):none` with `(border|outline):0`
2596
+                    '#(?<=[\{;])(border|outline):none(?=[;\}\!])#',
2597
+                    // Remove empty selector(s)
2598
+                    '#(\/\*(?>.*?\*\/))|(^|[\{\}])(?:[^\s\{\}]+)\{\}#s'
2599
+                ),
2600
+                array(
2601
+                    '$1',
2602
+                    '$1$2$3$4$5$6$7',
2603
+                    '$1',
2604
+                    ':0',
2605
+                    '$1:0 0',
2606
+                    '.$1',
2607
+                    '$1$3',
2608
+                    '$1$2$4$5',
2609
+                    '$1$2$3',
2610
+                    '$1:0',
2611
+                    '$1$2'
2612
+                ),
2613
+                $input);
2614
+        }
2615
+
2616
+        /**
2617
+         * Get the conditional fields JavaScript.
2618
+         *
2619
+         * @return mixed
2620
+         */
2621
+        public function conditional_fields_js() {
2622
+            ob_start();
2623
+            ?>
2624 2624
             <script>
2625 2625
                 /**
2626 2626
                  * Conditional Fields
@@ -3155,237 +3155,237 @@  discard block
 block discarded – undo
3155 3155
 				<?php do_action( 'aui_conditional_fields_js', $this ); ?>
3156 3156
             </script>
3157 3157
 			<?php
3158
-			$output = ob_get_clean();
3159
-
3160
-			return str_replace( array( '<script>', '</script>' ), '', self::minify_js( $output ) );
3161
-		}
3162
-
3163
-		/**
3164
-		 * Check if block editor page.
3165
-		 *
3166
-		 * @since 0.2.27
3167
-		 *
3168
-		 * @return bool
3169
-		 */
3170
-		public static function is_block_editor() {
3171
-			if ( is_admin() ) {
3172
-				$current_screen = function_exists('get_current_screen' ) ? get_current_screen() : array();
3173
-
3174
-				if ( ! empty( $current_screen ) && $current_screen->is_block_editor() ) {
3175
-					return true;
3176
-				}
3177
-			}
3178
-
3179
-			return false;
3180
-		}
3181
-
3182
-		/**
3183
-		 * Checks if the current call is a ajax call to get the block content.
3184
-		 *
3185
-		 * This can be used in your widget to return different content as the block content.
3186
-		 *
3187
-		 * @since 0.2.27
3188
-		 *
3189
-		 * @return bool
3190
-		 */
3191
-		public static function is_block_content_call() {
3192
-			$result = false;
3193
-			if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
3194
-				$result = true;
3195
-			}
3196
-
3197
-			return $result;
3198
-		}
3199
-
3200
-		/**
3201
-		 * Tests if the current output is inside a Divi preview.
3202
-		 *
3203
-		 * @since 0.2.27
3204
-		 *
3205
-		 * @return bool
3206
-		 */
3207
-		public static function is_divi_preview() {
3208
-			$result = false;
3209
-			if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
3210
-				$result = true;
3211
-			}
3212
-
3213
-			return $result;
3214
-		}
3215
-
3216
-		/**
3217
-		 * Tests if the current output is inside a elementor preview.
3218
-		 *
3219
-		 *
3220
-		 * @since 0.2.27
3221
-		 *
3222
-		 * @return bool
3223
-		 */
3224
-		public static function is_elementor_preview() {
3225
-			$result = false;
3226
-			if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
3227
-				$result = true;
3228
-			}
3229
-
3230
-			return $result;
3231
-		}
3232
-
3233
-		/**
3234
-		 * Tests if the current output is inside a Beaver builder preview.
3235
-		 *
3236
-		 * @since 0.2.27
3237
-		 *
3238
-		 * @return bool
3239
-		 */
3240
-		public static function is_beaver_preview() {
3241
-			$result = false;
3242
-			if ( isset( $_REQUEST['fl_builder'] ) ) {
3243
-				$result = true;
3244
-			}
3245
-
3246
-			return $result;
3247
-		}
3248
-
3249
-		/**
3250
-		 * Tests if the current output is inside a siteorigin builder preview.
3251
-		 *
3252
-		 * @since 0.2.27
3253
-		 *
3254
-		 * @return bool
3255
-		 */
3256
-		public static function is_siteorigin_preview() {
3257
-			$result = false;
3258
-			if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
3259
-				$result = true;
3260
-			}
3261
-
3262
-			return $result;
3263
-		}
3264
-
3265
-		/**
3266
-		 * Tests if the current output is inside a cornerstone builder preview.
3267
-		 *
3268
-		 * @since 0.2.27
3269
-		 *
3270
-		 * @return bool
3271
-		 */
3272
-		public static function is_cornerstone_preview() {
3273
-			$result = false;
3274
-			if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
3275
-				$result = true;
3276
-			}
3277
-
3278
-			return $result;
3279
-		}
3280
-
3281
-		/**
3282
-		 * Tests if the current output is inside a fusion builder preview.
3283
-		 *
3284
-		 * @return bool
3285
-		 *@since 1.1.0
3286
-		 */
3287
-		public static function is_fusion_preview() {
3288
-			$result = false;
3289
-			if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
3290
-				$result = true;
3291
-			}
3292
-
3293
-			return $result;
3294
-		}
3295
-
3296
-		/**
3297
-		 * Tests if the current output is inside a Oxygen builder preview.
3298
-		 *
3299
-		 * @return bool
3300
-		 *@since 1.0.18
3301
-		 */
3302
-		public static function is_oxygen_preview() {
3303
-			$result = false;
3304
-			if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
3305
-				$result = true;
3306
-			}
3307
-
3308
-			return $result;
3309
-		}
3310
-
3311
-		/**
3312
-		 * Check for Kallyas theme Zion builder preview.
3313
-		 *
3314
-		 * @since 0.2.27
3315
-		 *
3316
-		 * @return bool
3317
-		 */
3318
-		public static function is_kallyas_zion_preview() {
3319
-			$result = false;
3320
-
3321
-			if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
3322
-				$result = true;
3323
-			}
3324
-
3325
-			return $result;
3326
-		}
3327
-
3328
-		/**
3329
-		 * Check for Bricks theme builder preview.
3330
-		 *
3331
-		 * @since 0.2.27
3332
-		 *
3333
-		 * @return bool
3334
-		 */
3335
-		public static function is_bricks_preview() {
3336
-			$result = false;
3337
-
3338
-			if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
3339
-				$result = true;
3340
-			}
3341
-
3342
-			return $result;
3343
-		}
3344
-
3345
-		/**
3346
-		 * General function to check if we are in a preview situation.
3347
-		 *
3348
-		 * @since 0.2.27
3349
-		 *
3350
-		 * @return bool
3351
-		 */
3352
-		public static function is_preview() {
3353
-			$preview = false;
3354
-
3355
-			if ( self::is_block_editor() ) {
3356
-				return true;
3357
-			}
3358
-
3359
-			if( self::is_block_content_call() ) {
3360
-				$preview = true;
3361
-			} elseif ( self::is_divi_preview() ) {
3362
-				$preview = true;
3363
-			} elseif ( self::is_elementor_preview() ) {
3364
-				$preview = true;
3365
-			} elseif ( self::is_beaver_preview() ) {
3366
-				$preview = true;
3367
-			} elseif ( self::is_siteorigin_preview() ) {
3368
-				$preview = true;
3369
-			} elseif ( self::is_cornerstone_preview() ) {
3370
-				$preview = true;
3371
-			} elseif ( self::is_fusion_preview() ) {
3372
-				$preview = true;
3373
-			} elseif ( self::is_oxygen_preview() ) {
3374
-				$preview = true;
3375
-			} elseif( self::is_kallyas_zion_preview() ) {
3376
-				$preview = true;
3377
-			} elseif( self::is_bricks_preview() ) {
3378
-				$preview = true;
3379
-			}
3380
-
3381
-			return $preview;
3382
-		}
3383
-	}
3384
-
3385
-	global $ayecode_ui_settings;
3386
-
3387
-	/**
3388
-	 * Run the class if found.
3389
-	 */
3390
-	$ayecode_ui_settings = AyeCode_UI_Settings::instance();
3158
+            $output = ob_get_clean();
3159
+
3160
+            return str_replace( array( '<script>', '</script>' ), '', self::minify_js( $output ) );
3161
+        }
3162
+
3163
+        /**
3164
+         * Check if block editor page.
3165
+         *
3166
+         * @since 0.2.27
3167
+         *
3168
+         * @return bool
3169
+         */
3170
+        public static function is_block_editor() {
3171
+            if ( is_admin() ) {
3172
+                $current_screen = function_exists('get_current_screen' ) ? get_current_screen() : array();
3173
+
3174
+                if ( ! empty( $current_screen ) && $current_screen->is_block_editor() ) {
3175
+                    return true;
3176
+                }
3177
+            }
3178
+
3179
+            return false;
3180
+        }
3181
+
3182
+        /**
3183
+         * Checks if the current call is a ajax call to get the block content.
3184
+         *
3185
+         * This can be used in your widget to return different content as the block content.
3186
+         *
3187
+         * @since 0.2.27
3188
+         *
3189
+         * @return bool
3190
+         */
3191
+        public static function is_block_content_call() {
3192
+            $result = false;
3193
+            if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
3194
+                $result = true;
3195
+            }
3196
+
3197
+            return $result;
3198
+        }
3199
+
3200
+        /**
3201
+         * Tests if the current output is inside a Divi preview.
3202
+         *
3203
+         * @since 0.2.27
3204
+         *
3205
+         * @return bool
3206
+         */
3207
+        public static function is_divi_preview() {
3208
+            $result = false;
3209
+            if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
3210
+                $result = true;
3211
+            }
3212
+
3213
+            return $result;
3214
+        }
3215
+
3216
+        /**
3217
+         * Tests if the current output is inside a elementor preview.
3218
+         *
3219
+         *
3220
+         * @since 0.2.27
3221
+         *
3222
+         * @return bool
3223
+         */
3224
+        public static function is_elementor_preview() {
3225
+            $result = false;
3226
+            if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
3227
+                $result = true;
3228
+            }
3229
+
3230
+            return $result;
3231
+        }
3232
+
3233
+        /**
3234
+         * Tests if the current output is inside a Beaver builder preview.
3235
+         *
3236
+         * @since 0.2.27
3237
+         *
3238
+         * @return bool
3239
+         */
3240
+        public static function is_beaver_preview() {
3241
+            $result = false;
3242
+            if ( isset( $_REQUEST['fl_builder'] ) ) {
3243
+                $result = true;
3244
+            }
3245
+
3246
+            return $result;
3247
+        }
3248
+
3249
+        /**
3250
+         * Tests if the current output is inside a siteorigin builder preview.
3251
+         *
3252
+         * @since 0.2.27
3253
+         *
3254
+         * @return bool
3255
+         */
3256
+        public static function is_siteorigin_preview() {
3257
+            $result = false;
3258
+            if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
3259
+                $result = true;
3260
+            }
3261
+
3262
+            return $result;
3263
+        }
3264
+
3265
+        /**
3266
+         * Tests if the current output is inside a cornerstone builder preview.
3267
+         *
3268
+         * @since 0.2.27
3269
+         *
3270
+         * @return bool
3271
+         */
3272
+        public static function is_cornerstone_preview() {
3273
+            $result = false;
3274
+            if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
3275
+                $result = true;
3276
+            }
3277
+
3278
+            return $result;
3279
+        }
3280
+
3281
+        /**
3282
+         * Tests if the current output is inside a fusion builder preview.
3283
+         *
3284
+         * @return bool
3285
+         *@since 1.1.0
3286
+         */
3287
+        public static function is_fusion_preview() {
3288
+            $result = false;
3289
+            if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
3290
+                $result = true;
3291
+            }
3292
+
3293
+            return $result;
3294
+        }
3295
+
3296
+        /**
3297
+         * Tests if the current output is inside a Oxygen builder preview.
3298
+         *
3299
+         * @return bool
3300
+         *@since 1.0.18
3301
+         */
3302
+        public static function is_oxygen_preview() {
3303
+            $result = false;
3304
+            if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
3305
+                $result = true;
3306
+            }
3307
+
3308
+            return $result;
3309
+        }
3310
+
3311
+        /**
3312
+         * Check for Kallyas theme Zion builder preview.
3313
+         *
3314
+         * @since 0.2.27
3315
+         *
3316
+         * @return bool
3317
+         */
3318
+        public static function is_kallyas_zion_preview() {
3319
+            $result = false;
3320
+
3321
+            if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
3322
+                $result = true;
3323
+            }
3324
+
3325
+            return $result;
3326
+        }
3327
+
3328
+        /**
3329
+         * Check for Bricks theme builder preview.
3330
+         *
3331
+         * @since 0.2.27
3332
+         *
3333
+         * @return bool
3334
+         */
3335
+        public static function is_bricks_preview() {
3336
+            $result = false;
3337
+
3338
+            if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
3339
+                $result = true;
3340
+            }
3341
+
3342
+            return $result;
3343
+        }
3344
+
3345
+        /**
3346
+         * General function to check if we are in a preview situation.
3347
+         *
3348
+         * @since 0.2.27
3349
+         *
3350
+         * @return bool
3351
+         */
3352
+        public static function is_preview() {
3353
+            $preview = false;
3354
+
3355
+            if ( self::is_block_editor() ) {
3356
+                return true;
3357
+            }
3358
+
3359
+            if( self::is_block_content_call() ) {
3360
+                $preview = true;
3361
+            } elseif ( self::is_divi_preview() ) {
3362
+                $preview = true;
3363
+            } elseif ( self::is_elementor_preview() ) {
3364
+                $preview = true;
3365
+            } elseif ( self::is_beaver_preview() ) {
3366
+                $preview = true;
3367
+            } elseif ( self::is_siteorigin_preview() ) {
3368
+                $preview = true;
3369
+            } elseif ( self::is_cornerstone_preview() ) {
3370
+                $preview = true;
3371
+            } elseif ( self::is_fusion_preview() ) {
3372
+                $preview = true;
3373
+            } elseif ( self::is_oxygen_preview() ) {
3374
+                $preview = true;
3375
+            } elseif( self::is_kallyas_zion_preview() ) {
3376
+                $preview = true;
3377
+            } elseif( self::is_bricks_preview() ) {
3378
+                $preview = true;
3379
+            }
3380
+
3381
+            return $preview;
3382
+        }
3383
+    }
3384
+
3385
+    global $ayecode_ui_settings;
3386
+
3387
+    /**
3388
+     * Run the class if found.
3389
+     */
3390
+    $ayecode_ui_settings = AyeCode_UI_Settings::instance();
3391 3391
 }
3392 3392
\ No newline at end of file
Please login to merge, or discard this patch.
vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php 1 patch
Indentation   +18 added lines, -18 removed lines patch added patch discarded remove patch
@@ -7,40 +7,40 @@
 block discarded – undo
7 7
  * Bail if we are not in WP.
8 8
  */
9 9
 if ( ! defined( 'ABSPATH' ) ) {
10
-	exit;
10
+    exit;
11 11
 }
12 12
 
13 13
 /**
14 14
  * Set the version only if its the current newest while loading.
15 15
  */
16 16
 add_action('after_setup_theme', function () {
17
-	global $ayecode_ui_version,$ayecode_ui_file_key;
18
-	$this_version = "0.2.31";
19
-	if(empty($ayecode_ui_version) || version_compare($this_version , $ayecode_ui_version, '>')){
20
-		$ayecode_ui_version = $this_version ;
21
-		$ayecode_ui_file_key = wp_hash( __FILE__ );
22
-	}
17
+    global $ayecode_ui_version,$ayecode_ui_file_key;
18
+    $this_version = "0.2.31";
19
+    if(empty($ayecode_ui_version) || version_compare($this_version , $ayecode_ui_version, '>')){
20
+        $ayecode_ui_version = $this_version ;
21
+        $ayecode_ui_file_key = wp_hash( __FILE__ );
22
+    }
23 23
 },0);
24 24
 
25 25
 /**
26 26
  * Load this version of WP Bootstrap Settings only if the file hash is the current one.
27 27
  */
28 28
 add_action('after_setup_theme', function () {
29
-	global $ayecode_ui_file_key;
30
-	if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){
31
-		include_once( dirname( __FILE__ ) . '/includes/class-aui.php' );
32
-		include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' );
33
-	}
29
+    global $ayecode_ui_file_key;
30
+    if($ayecode_ui_file_key && $ayecode_ui_file_key == wp_hash( __FILE__ )){
31
+        include_once( dirname( __FILE__ ) . '/includes/class-aui.php' );
32
+        include_once( dirname( __FILE__ ) . '/includes/ayecode-ui-settings.php' );
33
+    }
34 34
 },1);
35 35
 
36 36
 /**
37 37
  * Add the function that calls the class.
38 38
  */
39 39
 if(!function_exists('aui')){
40
-	function aui(){
41
-		if(!class_exists("AUI",false)){
42
-			return false;
43
-		}
44
-		return AUI::instance();
45
-	}
40
+    function aui(){
41
+        if(!class_exists("AUI",false)){
42
+            return false;
43
+        }
44
+        return AUI::instance();
45
+    }
46 46
 }
Please login to merge, or discard this patch.
vendor/ayecode/wp-super-duper/sd-functions.php 1 patch
Indentation   +2844 added lines, -2844 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,38 +1165,38 @@  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-item' => 'list-group-item',
1185
-		''                => __( 'no container class', 'ayecode-connect' ),
1186
-	);
1187
-
1188
-	$defaults = array(
1189
-		'type'     => 'select',
1190
-		'title'    => __( 'Type', 'ayecode-connect' ),
1191
-		'options'  => $options,
1192
-		'default'  => '',
1193
-		'desc_tip' => true,
1194
-		'group'    => __( 'Container', 'ayecode-connect' ),
1195
-	);
1196
-
1197
-	$input = wp_parse_args( $overwrite, $defaults );
1198
-
1199
-	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-item' => 'list-group-item',
1185
+        ''                => __( 'no container class', 'ayecode-connect' ),
1186
+    );
1187
+
1188
+    $defaults = array(
1189
+        'type'     => 'select',
1190
+        'title'    => __( 'Type', 'ayecode-connect' ),
1191
+        'options'  => $options,
1192
+        'default'  => '',
1193
+        'desc_tip' => true,
1194
+        'group'    => __( 'Container', 'ayecode-connect' ),
1195
+    );
1196
+
1197
+    $input = wp_parse_args( $overwrite, $defaults );
1198
+
1199
+    return $input;
1200 1200
 }
1201 1201
 
1202 1202
 /**
@@ -1209,30 +1209,30 @@  discard block
 block discarded – undo
1209 1209
  */
1210 1210
 function sd_get_position_class_input( $type = 'position', $overwrite = array() ) {
1211 1211
 
1212
-	$options = array(
1213
-		''                  => __( 'Default', 'ayecode-connect' ),
1214
-		'position-static'   => 'static',
1215
-		'position-relative' => 'relative',
1216
-		'position-absolute' => 'absolute',
1217
-		'position-fixed'    => 'fixed',
1218
-		'position-sticky'   => 'sticky',
1219
-		'fixed-top'         => 'fixed-top',
1220
-		'fixed-bottom'      => 'fixed-bottom',
1221
-		'sticky-top'        => 'sticky-top',
1222
-	);
1212
+    $options = array(
1213
+        ''                  => __( 'Default', 'ayecode-connect' ),
1214
+        'position-static'   => 'static',
1215
+        'position-relative' => 'relative',
1216
+        'position-absolute' => 'absolute',
1217
+        'position-fixed'    => 'fixed',
1218
+        'position-sticky'   => 'sticky',
1219
+        'fixed-top'         => 'fixed-top',
1220
+        'fixed-bottom'      => 'fixed-bottom',
1221
+        'sticky-top'        => 'sticky-top',
1222
+    );
1223 1223
 
1224
-	$defaults = array(
1225
-		'type'     => 'select',
1226
-		'title'    => __( 'Position', 'ayecode-connect' ),
1227
-		'options'  => $options,
1228
-		'default'  => '',
1229
-		'desc_tip' => true,
1230
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1231
-	);
1224
+    $defaults = array(
1225
+        'type'     => 'select',
1226
+        'title'    => __( 'Position', 'ayecode-connect' ),
1227
+        'options'  => $options,
1228
+        'default'  => '',
1229
+        'desc_tip' => true,
1230
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1231
+    );
1232 1232
 
1233
-	$input = wp_parse_args( $overwrite, $defaults );
1233
+    $input = wp_parse_args( $overwrite, $defaults );
1234 1234
 
1235
-	return $input;
1235
+    return $input;
1236 1236
 }
1237 1237
 
1238 1238
 /**
@@ -1243,32 +1243,32 @@  discard block
 block discarded – undo
1243 1243
  */
1244 1244
 function sd_get_absolute_position_input( $type = 'absolute_position', $overwrite = array() ) {
1245 1245
 
1246
-	$options = array(
1247
-		''              => __( 'Default', 'ayecode-connect' ),
1248
-		'top-left'      => 'top-left',
1249
-		'top-center'    => 'top-center',
1250
-		'top-right'     => 'top-right',
1251
-		'center-left'   => 'middle-left',
1252
-		'center'        => 'center',
1253
-		'center-right'  => 'middle-right',
1254
-		'bottom-left'   => 'bottom-left',
1255
-		'bottom-center' => 'bottom-center',
1256
-		'bottom-right'  => 'bottom-right',
1257
-	);
1246
+    $options = array(
1247
+        ''              => __( 'Default', 'ayecode-connect' ),
1248
+        'top-left'      => 'top-left',
1249
+        'top-center'    => 'top-center',
1250
+        'top-right'     => 'top-right',
1251
+        'center-left'   => 'middle-left',
1252
+        'center'        => 'center',
1253
+        'center-right'  => 'middle-right',
1254
+        'bottom-left'   => 'bottom-left',
1255
+        'bottom-center' => 'bottom-center',
1256
+        'bottom-right'  => 'bottom-right',
1257
+    );
1258 1258
 
1259
-	$defaults = array(
1260
-		'type'            => 'select',
1261
-		'title'           => __( 'Absolute Position', 'ayecode-connect' ),
1262
-		'options'         => $options,
1263
-		'default'         => '',
1264
-		'desc_tip'        => true,
1265
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1266
-		'element_require' => '[%position%]=="position-absolute"',
1267
-	);
1259
+    $defaults = array(
1260
+        'type'            => 'select',
1261
+        'title'           => __( 'Absolute Position', 'ayecode-connect' ),
1262
+        'options'         => $options,
1263
+        'default'         => '',
1264
+        'desc_tip'        => true,
1265
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1266
+        'element_require' => '[%position%]=="position-absolute"',
1267
+    );
1268 1268
 
1269
-	$input = wp_parse_args( $overwrite, $defaults );
1269
+    $input = wp_parse_args( $overwrite, $defaults );
1270 1270
 
1271
-	return $input;
1271
+    return $input;
1272 1272
 }
1273 1273
 
1274 1274
 /**
@@ -1281,38 +1281,38 @@  discard block
 block discarded – undo
1281 1281
  */
1282 1282
 function sd_get_sticky_offset_input( $type = 'top', $overwrite = array() ) {
1283 1283
 
1284
-	$defaults = array(
1285
-		'type'            => 'number',
1286
-		'title'           => __( 'Sticky offset', 'ayecode-connect' ),
1287
-		//'desc' =>  __( 'Sticky offset', 'ayecode-connect' ),
1288
-		'default'         => '',
1289
-		'desc_tip'        => true,
1290
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1291
-		'element_require' => '[%position%]=="sticky" || [%position%]=="sticky-top"',
1292
-	);
1293
-
1294
-	// title
1295
-	if ( $type == 'top' ) {
1296
-		$defaults['title'] = __( 'Top offset', 'ayecode-connect' );
1297
-		$defaults['icon']  = 'box-top';
1298
-		$defaults['row']   = array(
1299
-			'title' => __( 'Sticky offset', 'ayecode-connect' ),
1300
-			'key'   => 'sticky-offset',
1301
-			'open'  => true,
1302
-			'class' => 'text-center',
1303
-		);
1304
-	} elseif ( $type == 'bottom' ) {
1305
-		$defaults['title'] = __( 'Bottom offset', 'ayecode-connect' );
1306
-		$defaults['icon']  = 'box-bottom';
1307
-		$defaults['row']   = array(
1308
-			'key'   => 'sticky-offset',
1309
-			'close' => true,
1310
-		);
1311
-	}
1312
-
1313
-	$input = wp_parse_args( $overwrite, $defaults );
1314
-
1315
-	return $input;
1284
+    $defaults = array(
1285
+        'type'            => 'number',
1286
+        'title'           => __( 'Sticky offset', 'ayecode-connect' ),
1287
+        //'desc' =>  __( 'Sticky offset', 'ayecode-connect' ),
1288
+        'default'         => '',
1289
+        'desc_tip'        => true,
1290
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1291
+        'element_require' => '[%position%]=="sticky" || [%position%]=="sticky-top"',
1292
+    );
1293
+
1294
+    // title
1295
+    if ( $type == 'top' ) {
1296
+        $defaults['title'] = __( 'Top offset', 'ayecode-connect' );
1297
+        $defaults['icon']  = 'box-top';
1298
+        $defaults['row']   = array(
1299
+            'title' => __( 'Sticky offset', 'ayecode-connect' ),
1300
+            'key'   => 'sticky-offset',
1301
+            'open'  => true,
1302
+            'class' => 'text-center',
1303
+        );
1304
+    } elseif ( $type == 'bottom' ) {
1305
+        $defaults['title'] = __( 'Bottom offset', 'ayecode-connect' );
1306
+        $defaults['icon']  = 'box-bottom';
1307
+        $defaults['row']   = array(
1308
+            'key'   => 'sticky-offset',
1309
+            'close' => true,
1310
+        );
1311
+    }
1312
+
1313
+    $input = wp_parse_args( $overwrite, $defaults );
1314
+
1315
+    return $input;
1316 1316
 }
1317 1317
 
1318 1318
 /**
@@ -1324,61 +1324,61 @@  discard block
 block discarded – undo
1324 1324
  * @return array
1325 1325
  */
1326 1326
 function sd_get_font_size_input( $type = 'font_size', $overwrite = array(), $has_custom = false ) {
1327
-	global $aui_bs5;
1328
-
1329
-	$options[] = __( 'Inherit from parent', 'ayecode-connect' );
1330
-	if ( $aui_bs5 ) {
1331
-		// responsive font sizes
1332
-		$options['fs-base'] = 'fs-base (body default)';
1333
-		$options['fs-6']    = 'fs-6';
1334
-		$options['fs-5']    = 'fs-5';
1335
-		$options['fs-4']    = 'fs-4';
1336
-		$options['fs-3']    = 'fs-3';
1337
-		$options['fs-2']    = 'fs-2';
1338
-		$options['fs-1']    = 'fs-1';
1339
-
1340
-		// custom
1341
-		$options['fs-lg']  = 'fs-lg';
1342
-		$options['fs-sm']  = 'fs-sm';
1343
-		$options['fs-xs']  = 'fs-xs';
1344
-		$options['fs-xxs'] = 'fs-xxs';
1345
-
1346
-	}
1347
-
1348
-	$options = $options + array(
1349
-			'h6'        => 'h6',
1350
-			'h5'        => 'h5',
1351
-			'h4'        => 'h4',
1352
-			'h3'        => 'h3',
1353
-			'h2'        => 'h2',
1354
-			'h1'        => 'h1',
1355
-			'display-1' => 'display-1',
1356
-			'display-2' => 'display-2',
1357
-			'display-3' => 'display-3',
1358
-			'display-4' => 'display-4',
1359
-		);
1360
-
1361
-	if ( $aui_bs5 ) {
1362
-		$options['display-5'] = 'display-5';
1363
-		$options['display-6'] = 'display-6';
1364
-	}
1365
-
1366
-	if ( $has_custom ) {
1367
-		$options['custom'] = __( 'Custom size', 'ayecode-connect' );
1368
-	}
1369
-
1370
-	$defaults = array(
1371
-		'type'     => 'select',
1372
-		'title'    => __( 'Font size', 'ayecode-connect' ),
1373
-		'options'  => $options,
1374
-		'default'  => '',
1375
-		'desc_tip' => true,
1376
-		'group'    => __( 'Typography', 'ayecode-connect' ),
1377
-	);
1378
-
1379
-	$input = wp_parse_args( $overwrite, $defaults );
1380
-
1381
-	return $input;
1327
+    global $aui_bs5;
1328
+
1329
+    $options[] = __( 'Inherit from parent', 'ayecode-connect' );
1330
+    if ( $aui_bs5 ) {
1331
+        // responsive font sizes
1332
+        $options['fs-base'] = 'fs-base (body default)';
1333
+        $options['fs-6']    = 'fs-6';
1334
+        $options['fs-5']    = 'fs-5';
1335
+        $options['fs-4']    = 'fs-4';
1336
+        $options['fs-3']    = 'fs-3';
1337
+        $options['fs-2']    = 'fs-2';
1338
+        $options['fs-1']    = 'fs-1';
1339
+
1340
+        // custom
1341
+        $options['fs-lg']  = 'fs-lg';
1342
+        $options['fs-sm']  = 'fs-sm';
1343
+        $options['fs-xs']  = 'fs-xs';
1344
+        $options['fs-xxs'] = 'fs-xxs';
1345
+
1346
+    }
1347
+
1348
+    $options = $options + array(
1349
+            'h6'        => 'h6',
1350
+            'h5'        => 'h5',
1351
+            'h4'        => 'h4',
1352
+            'h3'        => 'h3',
1353
+            'h2'        => 'h2',
1354
+            'h1'        => 'h1',
1355
+            'display-1' => 'display-1',
1356
+            'display-2' => 'display-2',
1357
+            'display-3' => 'display-3',
1358
+            'display-4' => 'display-4',
1359
+        );
1360
+
1361
+    if ( $aui_bs5 ) {
1362
+        $options['display-5'] = 'display-5';
1363
+        $options['display-6'] = 'display-6';
1364
+    }
1365
+
1366
+    if ( $has_custom ) {
1367
+        $options['custom'] = __( 'Custom size', 'ayecode-connect' );
1368
+    }
1369
+
1370
+    $defaults = array(
1371
+        'type'     => 'select',
1372
+        'title'    => __( 'Font size', 'ayecode-connect' ),
1373
+        'options'  => $options,
1374
+        'default'  => '',
1375
+        'desc_tip' => true,
1376
+        'group'    => __( 'Typography', 'ayecode-connect' ),
1377
+    );
1378
+
1379
+    $input = wp_parse_args( $overwrite, $defaults );
1380
+
1381
+    return $input;
1382 1382
 }
1383 1383
 
1384 1384
 /**
@@ -1391,27 +1391,27 @@  discard block
 block discarded – undo
1391 1391
  */
1392 1392
 function sd_get_font_custom_size_input( $type = 'font_size_custom', $overwrite = array(), $parent_type = '' ) {
1393 1393
 
1394
-	$defaults = array(
1395
-		'type'              => 'number',
1396
-		'title'             => __( 'Font size (rem)', 'ayecode-connect' ),
1397
-		'default'           => '',
1398
-		'placeholder'       => '1.25',
1399
-		'custom_attributes' => array(
1400
-			'step' => '0.1',
1401
-			'min'  => '0',
1402
-			'max'  => '100',
1403
-		),
1404
-		'desc_tip'          => true,
1405
-		'group'             => __( 'Typography', 'ayecode-connect' ),
1406
-	);
1394
+    $defaults = array(
1395
+        'type'              => 'number',
1396
+        'title'             => __( 'Font size (rem)', 'ayecode-connect' ),
1397
+        'default'           => '',
1398
+        'placeholder'       => '1.25',
1399
+        'custom_attributes' => array(
1400
+            'step' => '0.1',
1401
+            'min'  => '0',
1402
+            'max'  => '100',
1403
+        ),
1404
+        'desc_tip'          => true,
1405
+        'group'             => __( 'Typography', 'ayecode-connect' ),
1406
+    );
1407 1407
 
1408
-	if ( $parent_type ) {
1409
-		$defaults['element_require'] = '[%' . $parent_type . '%]=="custom"';
1410
-	}
1408
+    if ( $parent_type ) {
1409
+        $defaults['element_require'] = '[%' . $parent_type . '%]=="custom"';
1410
+    }
1411 1411
 
1412
-	$input = wp_parse_args( $overwrite, $defaults );
1412
+    $input = wp_parse_args( $overwrite, $defaults );
1413 1413
 
1414
-	return $input;
1414
+    return $input;
1415 1415
 }
1416 1416
 
1417 1417
 /**
@@ -1424,23 +1424,23 @@  discard block
 block discarded – undo
1424 1424
  */
1425 1425
 function sd_get_font_line_height_input( $type = 'font_line_height', $overwrite = array() ) {
1426 1426
 
1427
-	$defaults = array(
1428
-		'type'              => 'number',
1429
-		'title'             => __( 'Font Line Height', 'ayecode-connect' ),
1430
-		'default'           => '',
1431
-		'placeholder'       => '1.75',
1432
-		'custom_attributes' => array(
1433
-			'step' => '0.1',
1434
-			'min'  => '0',
1435
-			'max'  => '100',
1436
-		),
1437
-		'desc_tip'          => true,
1438
-		'group'             => __( 'Typography', 'ayecode-connect' ),
1439
-	);
1427
+    $defaults = array(
1428
+        'type'              => 'number',
1429
+        'title'             => __( 'Font Line Height', 'ayecode-connect' ),
1430
+        'default'           => '',
1431
+        'placeholder'       => '1.75',
1432
+        'custom_attributes' => array(
1433
+            'step' => '0.1',
1434
+            'min'  => '0',
1435
+            'max'  => '100',
1436
+        ),
1437
+        'desc_tip'          => true,
1438
+        'group'             => __( 'Typography', 'ayecode-connect' ),
1439
+    );
1440 1440
 
1441
-	$input = wp_parse_args( $overwrite, $defaults );
1441
+    $input = wp_parse_args( $overwrite, $defaults );
1442 1442
 
1443
-	return $input;
1443
+    return $input;
1444 1444
 }
1445 1445
 
1446 1446
 /**
@@ -1453,18 +1453,18 @@  discard block
 block discarded – undo
1453 1453
  */
1454 1454
 function sd_get_font_size_input_group( $type = 'font_size', $overwrite = array(), $overwrite_custom = array() ) {
1455 1455
 
1456
-	$inputs = array();
1456
+    $inputs = array();
1457 1457
 
1458
-	if ( $overwrite !== false ) {
1459
-		$inputs[ $type ] = sd_get_font_size_input( $type, $overwrite, true );
1460
-	}
1458
+    if ( $overwrite !== false ) {
1459
+        $inputs[ $type ] = sd_get_font_size_input( $type, $overwrite, true );
1460
+    }
1461 1461
 
1462
-	if ( $overwrite_custom !== false ) {
1463
-		$custom            = $type . '_custom';
1464
-		$inputs[ $custom ] = sd_get_font_custom_size_input( $custom, $overwrite_custom, $type );
1465
-	}
1462
+    if ( $overwrite_custom !== false ) {
1463
+        $custom            = $type . '_custom';
1464
+        $inputs[ $custom ] = sd_get_font_custom_size_input( $custom, $overwrite_custom, $type );
1465
+    }
1466 1466
 
1467
-	return $inputs;
1467
+    return $inputs;
1468 1468
 }
1469 1469
 
1470 1470
 /**
@@ -1477,33 +1477,33 @@  discard block
 block discarded – undo
1477 1477
  */
1478 1478
 function sd_get_font_weight_input( $type = 'font_weight', $overwrite = array() ) {
1479 1479
 
1480
-	$options = array(
1481
-		''                                => __( 'Inherit', 'ayecode-connect' ),
1482
-		'font-weight-bold'                => 'bold',
1483
-		'font-weight-bolder'              => 'bolder',
1484
-		'font-weight-normal'              => 'normal',
1485
-		'font-weight-light'               => 'light',
1486
-		'font-weight-lighter'             => 'lighter',
1487
-		'font-italic'                     => 'italic',
1488
-		'font-weight-bold font-italic'    => 'bold italic',
1489
-		'font-weight-bolder font-italic'  => 'bolder italic',
1490
-		'font-weight-normal font-italic'  => 'normal italic',
1491
-		'font-weight-light font-italic'   => 'light italic',
1492
-		'font-weight-lighter font-italic' => 'lighter italic',
1493
-	);
1480
+    $options = array(
1481
+        ''                                => __( 'Inherit', 'ayecode-connect' ),
1482
+        'font-weight-bold'                => 'bold',
1483
+        'font-weight-bolder'              => 'bolder',
1484
+        'font-weight-normal'              => 'normal',
1485
+        'font-weight-light'               => 'light',
1486
+        'font-weight-lighter'             => 'lighter',
1487
+        'font-italic'                     => 'italic',
1488
+        'font-weight-bold font-italic'    => 'bold italic',
1489
+        'font-weight-bolder font-italic'  => 'bolder italic',
1490
+        'font-weight-normal font-italic'  => 'normal italic',
1491
+        'font-weight-light font-italic'   => 'light italic',
1492
+        'font-weight-lighter font-italic' => 'lighter italic',
1493
+    );
1494 1494
 
1495
-	$defaults = array(
1496
-		'type'     => 'select',
1497
-		'title'    => __( 'Appearance', 'ayecode-connect' ),
1498
-		'options'  => $options,
1499
-		'default'  => '',
1500
-		'desc_tip' => true,
1501
-		'group'    => __( 'Typography', 'ayecode-connect' ),
1502
-	);
1495
+    $defaults = array(
1496
+        'type'     => 'select',
1497
+        'title'    => __( 'Appearance', 'ayecode-connect' ),
1498
+        'options'  => $options,
1499
+        'default'  => '',
1500
+        'desc_tip' => true,
1501
+        'group'    => __( 'Typography', 'ayecode-connect' ),
1502
+    );
1503 1503
 
1504
-	$input = wp_parse_args( $overwrite, $defaults );
1504
+    $input = wp_parse_args( $overwrite, $defaults );
1505 1505
 
1506
-	return $input;
1506
+    return $input;
1507 1507
 }
1508 1508
 
1509 1509
 /**
@@ -1516,25 +1516,25 @@  discard block
 block discarded – undo
1516 1516
  */
1517 1517
 function sd_get_font_case_input( $type = 'font_weight', $overwrite = array() ) {
1518 1518
 
1519
-	$options = array(
1520
-		''                => __( 'Default', 'ayecode-connect' ),
1521
-		'text-lowercase'  => __( 'lowercase', 'ayecode-connect' ),
1522
-		'text-uppercase'  => __( 'UPPERCASE', 'ayecode-connect' ),
1523
-		'text-capitalize' => __( 'Capitalize', 'ayecode-connect' ),
1524
-	);
1519
+    $options = array(
1520
+        ''                => __( 'Default', 'ayecode-connect' ),
1521
+        'text-lowercase'  => __( 'lowercase', 'ayecode-connect' ),
1522
+        'text-uppercase'  => __( 'UPPERCASE', 'ayecode-connect' ),
1523
+        'text-capitalize' => __( 'Capitalize', 'ayecode-connect' ),
1524
+    );
1525 1525
 
1526
-	$defaults = array(
1527
-		'type'     => 'select',
1528
-		'title'    => __( 'Letter case', 'ayecode-connect' ),
1529
-		'options'  => $options,
1530
-		'default'  => '',
1531
-		'desc_tip' => true,
1532
-		'group'    => __( 'Typography', 'ayecode-connect' ),
1533
-	);
1526
+    $defaults = array(
1527
+        'type'     => 'select',
1528
+        'title'    => __( 'Letter case', 'ayecode-connect' ),
1529
+        'options'  => $options,
1530
+        'default'  => '',
1531
+        'desc_tip' => true,
1532
+        'group'    => __( 'Typography', 'ayecode-connect' ),
1533
+    );
1534 1534
 
1535
-	$input = wp_parse_args( $overwrite, $defaults );
1535
+    $input = wp_parse_args( $overwrite, $defaults );
1536 1536
 
1537
-	return $input;
1537
+    return $input;
1538 1538
 }
1539 1539
 
1540 1540
 /**
@@ -1548,23 +1548,23 @@  discard block
 block discarded – undo
1548 1548
  */
1549 1549
 function sd_get_font_italic_input( $type = 'font_italic', $overwrite = array() ) {
1550 1550
 
1551
-	$options = array(
1552
-		''            => __( 'No', 'ayecode-connect' ),
1553
-		'font-italic' => __( 'Yes', 'ayecode-connect' ),
1554
-	);
1551
+    $options = array(
1552
+        ''            => __( 'No', 'ayecode-connect' ),
1553
+        'font-italic' => __( 'Yes', 'ayecode-connect' ),
1554
+    );
1555 1555
 
1556
-	$defaults = array(
1557
-		'type'     => 'select',
1558
-		'title'    => __( 'Font italic', 'ayecode-connect' ),
1559
-		'options'  => $options,
1560
-		'default'  => '',
1561
-		'desc_tip' => true,
1562
-		'group'    => __( 'Typography', 'ayecode-connect' ),
1563
-	);
1556
+    $defaults = array(
1557
+        'type'     => 'select',
1558
+        'title'    => __( 'Font italic', 'ayecode-connect' ),
1559
+        'options'  => $options,
1560
+        'default'  => '',
1561
+        'desc_tip' => true,
1562
+        'group'    => __( 'Typography', 'ayecode-connect' ),
1563
+    );
1564 1564
 
1565
-	$input = wp_parse_args( $overwrite, $defaults );
1565
+    $input = wp_parse_args( $overwrite, $defaults );
1566 1566
 
1567
-	return $input;
1567
+    return $input;
1568 1568
 }
1569 1569
 
1570 1570
 /**
@@ -1577,18 +1577,18 @@  discard block
 block discarded – undo
1577 1577
  */
1578 1578
 function sd_get_anchor_input( $type = 'anchor', $overwrite = array() ) {
1579 1579
 
1580
-	$defaults = array(
1581
-		'type'     => 'text',
1582
-		'title'    => __( 'HTML anchor', 'ayecode-connect' ),
1583
-		'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' ),
1584
-		'default'  => '',
1585
-		'desc_tip' => true,
1586
-		'group'    => __( 'Advanced', 'ayecode-connect' ),
1587
-	);
1580
+    $defaults = array(
1581
+        'type'     => 'text',
1582
+        'title'    => __( 'HTML anchor', 'ayecode-connect' ),
1583
+        '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' ),
1584
+        'default'  => '',
1585
+        'desc_tip' => true,
1586
+        'group'    => __( 'Advanced', 'ayecode-connect' ),
1587
+    );
1588 1588
 
1589
-	$input = wp_parse_args( $overwrite, $defaults );
1589
+    $input = wp_parse_args( $overwrite, $defaults );
1590 1590
 
1591
-	return $input;
1591
+    return $input;
1592 1592
 }
1593 1593
 
1594 1594
 /**
@@ -1601,18 +1601,18 @@  discard block
 block discarded – undo
1601 1601
  */
1602 1602
 function sd_get_class_input( $type = 'css_class', $overwrite = array() ) {
1603 1603
 
1604
-	$defaults = array(
1605
-		'type'     => 'text',
1606
-		'title'    => __( 'Additional CSS class(es)', 'ayecode-connect' ),
1607
-		'desc'     => __( 'Separate multiple classes with spaces.', 'ayecode-connect' ),
1608
-		'default'  => '',
1609
-		'desc_tip' => true,
1610
-		'group'    => __( 'Advanced', 'ayecode-connect' ),
1611
-	);
1604
+    $defaults = array(
1605
+        'type'     => 'text',
1606
+        'title'    => __( 'Additional CSS class(es)', 'ayecode-connect' ),
1607
+        'desc'     => __( 'Separate multiple classes with spaces.', 'ayecode-connect' ),
1608
+        'default'  => '',
1609
+        'desc_tip' => true,
1610
+        'group'    => __( 'Advanced', 'ayecode-connect' ),
1611
+    );
1612 1612
 
1613
-	$input = wp_parse_args( $overwrite, $defaults );
1613
+    $input = wp_parse_args( $overwrite, $defaults );
1614 1614
 
1615
-	return $input;
1615
+    return $input;
1616 1616
 }
1617 1617
 
1618 1618
 /**
@@ -1625,18 +1625,18 @@  discard block
 block discarded – undo
1625 1625
  */
1626 1626
 function sd_get_custom_name_input( $type = 'metadata_name', $overwrite = array() ) {
1627 1627
 
1628
-	$defaults = array(
1629
-		'type'     => 'text',
1630
-		'title'    => __( 'Block Name', 'ayecode-connect' ),
1631
-		'desc'     => __( 'Set a custom name for this block', 'ayecode-connect' ),
1632
-		'default'  => '',
1633
-		'desc_tip' => true,
1634
-		'group'    => __( 'Advanced', 'ayecode-connect' ),
1635
-	);
1628
+    $defaults = array(
1629
+        'type'     => 'text',
1630
+        'title'    => __( 'Block Name', 'ayecode-connect' ),
1631
+        'desc'     => __( 'Set a custom name for this block', 'ayecode-connect' ),
1632
+        'default'  => '',
1633
+        'desc_tip' => true,
1634
+        'group'    => __( 'Advanced', 'ayecode-connect' ),
1635
+    );
1636 1636
 
1637
-	$input = wp_parse_args( $overwrite, $defaults );
1637
+    $input = wp_parse_args( $overwrite, $defaults );
1638 1638
 
1639
-	return $input;
1639
+    return $input;
1640 1640
 }
1641 1641
 
1642 1642
 /**
@@ -1649,341 +1649,341 @@  discard block
 block discarded – undo
1649 1649
  */
1650 1650
 function sd_get_hover_animations_input( $type = 'hover_animations', $overwrite = array() ) {
1651 1651
 
1652
-	$options = array(
1653
-		''                 => __( 'none', 'ayecode-connect' ),
1654
-		'hover-zoom'       => __( 'Zoom', 'ayecode-connect' ),
1655
-		'hover-shadow'     => __( 'Shadow', 'ayecode-connect' ),
1656
-		'hover-move-up'    => __( 'Move up', 'ayecode-connect' ),
1657
-		'hover-move-down'  => __( 'Move down', 'ayecode-connect' ),
1658
-		'hover-move-left'  => __( 'Move left', 'ayecode-connect' ),
1659
-		'hover-move-right' => __( 'Move right', 'ayecode-connect' ),
1660
-	);
1652
+    $options = array(
1653
+        ''                 => __( 'none', 'ayecode-connect' ),
1654
+        'hover-zoom'       => __( 'Zoom', 'ayecode-connect' ),
1655
+        'hover-shadow'     => __( 'Shadow', 'ayecode-connect' ),
1656
+        'hover-move-up'    => __( 'Move up', 'ayecode-connect' ),
1657
+        'hover-move-down'  => __( 'Move down', 'ayecode-connect' ),
1658
+        'hover-move-left'  => __( 'Move left', 'ayecode-connect' ),
1659
+        'hover-move-right' => __( 'Move right', 'ayecode-connect' ),
1660
+    );
1661 1661
 
1662
-	$defaults = array(
1663
-		'type'     => 'select',
1664
-		'multiple' => true,
1665
-		'title'    => __( 'Hover Animations', 'ayecode-connect' ),
1666
-		'options'  => $options,
1667
-		'default'  => '',
1668
-		'desc_tip' => true,
1669
-		'group'    => __( 'Hover Animations', 'ayecode-connect' ),
1670
-	);
1662
+    $defaults = array(
1663
+        'type'     => 'select',
1664
+        'multiple' => true,
1665
+        'title'    => __( 'Hover Animations', 'ayecode-connect' ),
1666
+        'options'  => $options,
1667
+        'default'  => '',
1668
+        'desc_tip' => true,
1669
+        'group'    => __( 'Hover Animations', 'ayecode-connect' ),
1670
+    );
1671 1671
 
1672
-	$input = wp_parse_args( $overwrite, $defaults );
1672
+    $input = wp_parse_args( $overwrite, $defaults );
1673 1673
 
1674
-	return $input;
1674
+    return $input;
1675 1675
 }
1676 1676
 
1677 1677
 
1678 1678
 function sd_get_flex_align_items_input( $type = 'align-items', $overwrite = array() ) {
1679
-	$device_size = '';
1680
-	if ( ! empty( $overwrite['device_type'] ) ) {
1681
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1682
-			$device_size = '-md';
1683
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1684
-			$device_size = '-lg';
1685
-		}
1686
-	}
1687
-	$options = array(
1688
-		''                                         => __( 'Default', 'ayecode-connect' ),
1689
-		'align-items' . $device_size . '-start'    => 'align-items-start',
1690
-		'align-items' . $device_size . '-end'      => 'align-items-end',
1691
-		'align-items' . $device_size . '-center'   => 'align-items-center',
1692
-		'align-items' . $device_size . '-baseline' => 'align-items-baseline',
1693
-		'align-items' . $device_size . '-stretch'  => 'align-items-stretch',
1694
-	);
1695
-
1696
-	$defaults = array(
1697
-		'type'            => 'select',
1698
-		'title'           => __( 'Vertical Align Items', 'ayecode-connect' ),
1699
-		'options'         => $options,
1700
-		'default'         => '',
1701
-		'desc_tip'        => true,
1702
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1703
-		'element_require' => ' ( ( [%container%]=="row" ) || ( [%display%]=="d-flex" || [%display_md%]=="d-md-flex" || [%display_lg%]=="d-lg-flex" ) ) ',
1704
-
1705
-	);
1706
-
1707
-	$input = wp_parse_args( $overwrite, $defaults );
1708
-
1709
-	return $input;
1679
+    $device_size = '';
1680
+    if ( ! empty( $overwrite['device_type'] ) ) {
1681
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1682
+            $device_size = '-md';
1683
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1684
+            $device_size = '-lg';
1685
+        }
1686
+    }
1687
+    $options = array(
1688
+        ''                                         => __( 'Default', 'ayecode-connect' ),
1689
+        'align-items' . $device_size . '-start'    => 'align-items-start',
1690
+        'align-items' . $device_size . '-end'      => 'align-items-end',
1691
+        'align-items' . $device_size . '-center'   => 'align-items-center',
1692
+        'align-items' . $device_size . '-baseline' => 'align-items-baseline',
1693
+        'align-items' . $device_size . '-stretch'  => 'align-items-stretch',
1694
+    );
1695
+
1696
+    $defaults = array(
1697
+        'type'            => 'select',
1698
+        'title'           => __( 'Vertical Align Items', 'ayecode-connect' ),
1699
+        'options'         => $options,
1700
+        'default'         => '',
1701
+        'desc_tip'        => true,
1702
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1703
+        'element_require' => ' ( ( [%container%]=="row" ) || ( [%display%]=="d-flex" || [%display_md%]=="d-md-flex" || [%display_lg%]=="d-lg-flex" ) ) ',
1704
+
1705
+    );
1706
+
1707
+    $input = wp_parse_args( $overwrite, $defaults );
1708
+
1709
+    return $input;
1710 1710
 }
1711 1711
 
1712 1712
 function sd_get_flex_align_items_input_group( $type = 'flex_align_items', $overwrite = array() ) {
1713
-	$inputs = array();
1714
-	$sizes  = array(
1715
-		''    => 'Mobile',
1716
-		'_md' => 'Tablet',
1717
-		'_lg' => 'Desktop',
1718
-	);
1713
+    $inputs = array();
1714
+    $sizes  = array(
1715
+        ''    => 'Mobile',
1716
+        '_md' => 'Tablet',
1717
+        '_lg' => 'Desktop',
1718
+    );
1719 1719
 
1720
-	if ( $overwrite !== false ) {
1720
+    if ( $overwrite !== false ) {
1721 1721
 
1722
-		foreach ( $sizes as $ds => $dt ) {
1723
-			$overwrite['device_type'] = $dt;
1724
-			$inputs[ $type . $ds ]    = sd_get_flex_align_items_input( $type, $overwrite );
1725
-		}
1726
-	}
1722
+        foreach ( $sizes as $ds => $dt ) {
1723
+            $overwrite['device_type'] = $dt;
1724
+            $inputs[ $type . $ds ]    = sd_get_flex_align_items_input( $type, $overwrite );
1725
+        }
1726
+    }
1727 1727
 
1728
-	return $inputs;
1728
+    return $inputs;
1729 1729
 }
1730 1730
 
1731 1731
 function sd_get_flex_justify_content_input( $type = 'flex_justify_content', $overwrite = array() ) {
1732
-	$device_size = '';
1733
-	if ( ! empty( $overwrite['device_type'] ) ) {
1734
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1735
-			$device_size = '-md';
1736
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1737
-			$device_size = '-lg';
1738
-		}
1739
-	}
1740
-	$options = array(
1741
-		''                                            => __( 'Default', 'ayecode-connect' ),
1742
-		'justify-content' . $device_size . '-start'   => 'justify-content-start',
1743
-		'justify-content' . $device_size . '-end'     => 'justify-content-end',
1744
-		'justify-content' . $device_size . '-center'  => 'justify-content-center',
1745
-		'justify-content' . $device_size . '-between' => 'justify-content-between',
1746
-		'justify-content' . $device_size . '-stretch' => 'justify-content-around',
1747
-	);
1748
-
1749
-	$defaults = array(
1750
-		'type'            => 'select',
1751
-		'title'           => __( 'Justify content', 'ayecode-connect' ),
1752
-		'options'         => $options,
1753
-		'default'         => '',
1754
-		'desc_tip'        => true,
1755
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1756
-		'element_require' => '( ( [%container%]=="row" ) || ( [%display%]=="d-flex" || [%display_md%]=="d-md-flex" || [%display_lg%]=="d-lg-flex" ) ) ',
1757
-
1758
-	);
1759
-
1760
-	$input = wp_parse_args( $overwrite, $defaults );
1761
-
1762
-	return $input;
1732
+    $device_size = '';
1733
+    if ( ! empty( $overwrite['device_type'] ) ) {
1734
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1735
+            $device_size = '-md';
1736
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1737
+            $device_size = '-lg';
1738
+        }
1739
+    }
1740
+    $options = array(
1741
+        ''                                            => __( 'Default', 'ayecode-connect' ),
1742
+        'justify-content' . $device_size . '-start'   => 'justify-content-start',
1743
+        'justify-content' . $device_size . '-end'     => 'justify-content-end',
1744
+        'justify-content' . $device_size . '-center'  => 'justify-content-center',
1745
+        'justify-content' . $device_size . '-between' => 'justify-content-between',
1746
+        'justify-content' . $device_size . '-stretch' => 'justify-content-around',
1747
+    );
1748
+
1749
+    $defaults = array(
1750
+        'type'            => 'select',
1751
+        'title'           => __( 'Justify content', 'ayecode-connect' ),
1752
+        'options'         => $options,
1753
+        'default'         => '',
1754
+        'desc_tip'        => true,
1755
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1756
+        'element_require' => '( ( [%container%]=="row" ) || ( [%display%]=="d-flex" || [%display_md%]=="d-md-flex" || [%display_lg%]=="d-lg-flex" ) ) ',
1757
+
1758
+    );
1759
+
1760
+    $input = wp_parse_args( $overwrite, $defaults );
1761
+
1762
+    return $input;
1763 1763
 }
1764 1764
 
1765 1765
 function sd_get_flex_justify_content_input_group( $type = 'flex_justify_content', $overwrite = array() ) {
1766
-	$inputs = array();
1767
-	$sizes  = array(
1768
-		''    => 'Mobile',
1769
-		'_md' => 'Tablet',
1770
-		'_lg' => 'Desktop',
1771
-	);
1766
+    $inputs = array();
1767
+    $sizes  = array(
1768
+        ''    => 'Mobile',
1769
+        '_md' => 'Tablet',
1770
+        '_lg' => 'Desktop',
1771
+    );
1772 1772
 
1773
-	if ( $overwrite !== false ) {
1773
+    if ( $overwrite !== false ) {
1774 1774
 
1775
-		foreach ( $sizes as $ds => $dt ) {
1776
-			$overwrite['device_type'] = $dt;
1777
-			$inputs[ $type . $ds ]    = sd_get_flex_justify_content_input( $type, $overwrite );
1778
-		}
1779
-	}
1775
+        foreach ( $sizes as $ds => $dt ) {
1776
+            $overwrite['device_type'] = $dt;
1777
+            $inputs[ $type . $ds ]    = sd_get_flex_justify_content_input( $type, $overwrite );
1778
+        }
1779
+    }
1780 1780
 
1781
-	return $inputs;
1781
+    return $inputs;
1782 1782
 }
1783 1783
 
1784 1784
 
1785 1785
 function sd_get_flex_align_self_input( $type = 'flex_align_self', $overwrite = array() ) {
1786
-	$device_size = '';
1787
-	if ( ! empty( $overwrite['device_type'] ) ) {
1788
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1789
-			$device_size = '-md';
1790
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1791
-			$device_size = '-lg';
1792
-		}
1793
-	}
1794
-	$options = array(
1795
-		''                                         => __( 'Default', 'ayecode-connect' ),
1796
-		'align-items' . $device_size . '-start'    => 'align-items-start',
1797
-		'align-items' . $device_size . '-end'      => 'align-items-end',
1798
-		'align-items' . $device_size . '-center'   => 'align-items-center',
1799
-		'align-items' . $device_size . '-baseline' => 'align-items-baseline',
1800
-		'align-items' . $device_size . '-stretch'  => 'align-items-stretch',
1801
-	);
1802
-
1803
-	$defaults = array(
1804
-		'type'            => 'select',
1805
-		'title'           => __( 'Align Self', 'ayecode-connect' ),
1806
-		'options'         => $options,
1807
-		'default'         => '',
1808
-		'desc_tip'        => true,
1809
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1810
-		'element_require' => ' [%container%]=="col" ',
1811
-
1812
-	);
1813
-
1814
-	$input = wp_parse_args( $overwrite, $defaults );
1815
-
1816
-	return $input;
1786
+    $device_size = '';
1787
+    if ( ! empty( $overwrite['device_type'] ) ) {
1788
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1789
+            $device_size = '-md';
1790
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1791
+            $device_size = '-lg';
1792
+        }
1793
+    }
1794
+    $options = array(
1795
+        ''                                         => __( 'Default', 'ayecode-connect' ),
1796
+        'align-items' . $device_size . '-start'    => 'align-items-start',
1797
+        'align-items' . $device_size . '-end'      => 'align-items-end',
1798
+        'align-items' . $device_size . '-center'   => 'align-items-center',
1799
+        'align-items' . $device_size . '-baseline' => 'align-items-baseline',
1800
+        'align-items' . $device_size . '-stretch'  => 'align-items-stretch',
1801
+    );
1802
+
1803
+    $defaults = array(
1804
+        'type'            => 'select',
1805
+        'title'           => __( 'Align Self', 'ayecode-connect' ),
1806
+        'options'         => $options,
1807
+        'default'         => '',
1808
+        'desc_tip'        => true,
1809
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1810
+        'element_require' => ' [%container%]=="col" ',
1811
+
1812
+    );
1813
+
1814
+    $input = wp_parse_args( $overwrite, $defaults );
1815
+
1816
+    return $input;
1817 1817
 }
1818 1818
 
1819 1819
 function sd_get_flex_align_self_input_group( $type = 'flex_align_self', $overwrite = array() ) {
1820
-	$inputs = array();
1821
-	$sizes  = array(
1822
-		''    => 'Mobile',
1823
-		'_md' => 'Tablet',
1824
-		'_lg' => 'Desktop',
1825
-	);
1820
+    $inputs = array();
1821
+    $sizes  = array(
1822
+        ''    => 'Mobile',
1823
+        '_md' => 'Tablet',
1824
+        '_lg' => 'Desktop',
1825
+    );
1826 1826
 
1827
-	if ( $overwrite !== false ) {
1827
+    if ( $overwrite !== false ) {
1828 1828
 
1829
-		foreach ( $sizes as $ds => $dt ) {
1830
-			$overwrite['device_type'] = $dt;
1831
-			$inputs[ $type . $ds ]    = sd_get_flex_align_self_input( $type, $overwrite );
1832
-		}
1833
-	}
1829
+        foreach ( $sizes as $ds => $dt ) {
1830
+            $overwrite['device_type'] = $dt;
1831
+            $inputs[ $type . $ds ]    = sd_get_flex_align_self_input( $type, $overwrite );
1832
+        }
1833
+    }
1834 1834
 
1835
-	return $inputs;
1835
+    return $inputs;
1836 1836
 }
1837 1837
 
1838 1838
 function sd_get_flex_order_input( $type = 'flex_order', $overwrite = array() ) {
1839
-	$device_size = '';
1840
-	if ( ! empty( $overwrite['device_type'] ) ) {
1841
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1842
-			$device_size = '-md';
1843
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1844
-			$device_size = '-lg';
1845
-		}
1846
-	}
1847
-	$options = array(
1848
-		'' => __( 'Default', 'ayecode-connect' ),
1849
-	);
1850
-
1851
-	$i = 0;
1852
-	while ( $i <= 5 ) {
1853
-		$options[ 'order' . $device_size . '-' . $i ] = $i;
1854
-		$i++;
1855
-	}
1856
-
1857
-	$defaults = array(
1858
-		'type'            => 'select',
1859
-		'title'           => __( 'Flex Order', 'ayecode-connect' ),
1860
-		'options'         => $options,
1861
-		'default'         => '',
1862
-		'desc_tip'        => true,
1863
-		'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1864
-		'element_require' => ' [%container%]=="col" ',
1865
-
1866
-	);
1867
-
1868
-	$input = wp_parse_args( $overwrite, $defaults );
1869
-
1870
-	return $input;
1839
+    $device_size = '';
1840
+    if ( ! empty( $overwrite['device_type'] ) ) {
1841
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1842
+            $device_size = '-md';
1843
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1844
+            $device_size = '-lg';
1845
+        }
1846
+    }
1847
+    $options = array(
1848
+        '' => __( 'Default', 'ayecode-connect' ),
1849
+    );
1850
+
1851
+    $i = 0;
1852
+    while ( $i <= 5 ) {
1853
+        $options[ 'order' . $device_size . '-' . $i ] = $i;
1854
+        $i++;
1855
+    }
1856
+
1857
+    $defaults = array(
1858
+        'type'            => 'select',
1859
+        'title'           => __( 'Flex Order', 'ayecode-connect' ),
1860
+        'options'         => $options,
1861
+        'default'         => '',
1862
+        'desc_tip'        => true,
1863
+        'group'           => __( 'Wrapper Styles', 'ayecode-connect' ),
1864
+        'element_require' => ' [%container%]=="col" ',
1865
+
1866
+    );
1867
+
1868
+    $input = wp_parse_args( $overwrite, $defaults );
1869
+
1870
+    return $input;
1871 1871
 }
1872 1872
 
1873 1873
 function sd_get_flex_order_input_group( $type = 'flex_order', $overwrite = array() ) {
1874
-	$inputs = array();
1875
-	$sizes  = array(
1876
-		''    => 'Mobile',
1877
-		'_md' => 'Tablet',
1878
-		'_lg' => 'Desktop',
1879
-	);
1874
+    $inputs = array();
1875
+    $sizes  = array(
1876
+        ''    => 'Mobile',
1877
+        '_md' => 'Tablet',
1878
+        '_lg' => 'Desktop',
1879
+    );
1880 1880
 
1881
-	if ( $overwrite !== false ) {
1881
+    if ( $overwrite !== false ) {
1882 1882
 
1883
-		foreach ( $sizes as $ds => $dt ) {
1884
-			$overwrite['device_type'] = $dt;
1885
-			$inputs[ $type . $ds ]    = sd_get_flex_order_input( $type, $overwrite );
1886
-		}
1887
-	}
1883
+        foreach ( $sizes as $ds => $dt ) {
1884
+            $overwrite['device_type'] = $dt;
1885
+            $inputs[ $type . $ds ]    = sd_get_flex_order_input( $type, $overwrite );
1886
+        }
1887
+    }
1888 1888
 
1889
-	return $inputs;
1889
+    return $inputs;
1890 1890
 }
1891 1891
 
1892 1892
 function sd_get_flex_wrap_group( $type = 'flex_wrap', $overwrite = array() ) {
1893
-	$inputs = array();
1894
-	$sizes  = array(
1895
-		''    => 'Mobile',
1896
-		'_md' => 'Tablet',
1897
-		'_lg' => 'Desktop',
1898
-	);
1893
+    $inputs = array();
1894
+    $sizes  = array(
1895
+        ''    => 'Mobile',
1896
+        '_md' => 'Tablet',
1897
+        '_lg' => 'Desktop',
1898
+    );
1899 1899
 
1900
-	if ( $overwrite !== false ) {
1900
+    if ( $overwrite !== false ) {
1901 1901
 
1902
-		foreach ( $sizes as $ds => $dt ) {
1903
-			$overwrite['device_type'] = $dt;
1904
-			$inputs[ $type . $ds ]    = sd_get_flex_wrap_input( $type, $overwrite );
1905
-		}
1906
-	}
1902
+        foreach ( $sizes as $ds => $dt ) {
1903
+            $overwrite['device_type'] = $dt;
1904
+            $inputs[ $type . $ds ]    = sd_get_flex_wrap_input( $type, $overwrite );
1905
+        }
1906
+    }
1907 1907
 
1908
-	return $inputs;
1908
+    return $inputs;
1909 1909
 }
1910 1910
 
1911 1911
 function sd_get_flex_wrap_input( $type = 'flex_wrap', $overwrite = array() ) {
1912
-	$device_size = '';
1913
-	if ( ! empty( $overwrite['device_type'] ) ) {
1914
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1915
-			$device_size = '-md';
1916
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1917
-			$device_size = '-lg';
1918
-		}
1919
-	}
1920
-	$options = array(
1921
-		''                                      => __( 'Default', 'ayecode-connect' ),
1922
-		'flex' . $device_size . '-nowrap'       => 'nowrap',
1923
-		'flex' . $device_size . '-wrap'         => 'wrap',
1924
-		'flex' . $device_size . '-wrap-reverse' => 'wrap-reverse',
1925
-	);
1926
-
1927
-	$defaults = array(
1928
-		'type'     => 'select',
1929
-		'title'    => __( 'Flex wrap', 'ayecode-connect' ),
1930
-		'options'  => $options,
1931
-		'default'  => '',
1932
-		'desc_tip' => true,
1933
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1934
-	);
1935
-
1936
-	$input = wp_parse_args( $overwrite, $defaults );
1937
-
1938
-	return $input;
1912
+    $device_size = '';
1913
+    if ( ! empty( $overwrite['device_type'] ) ) {
1914
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1915
+            $device_size = '-md';
1916
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1917
+            $device_size = '-lg';
1918
+        }
1919
+    }
1920
+    $options = array(
1921
+        ''                                      => __( 'Default', 'ayecode-connect' ),
1922
+        'flex' . $device_size . '-nowrap'       => 'nowrap',
1923
+        'flex' . $device_size . '-wrap'         => 'wrap',
1924
+        'flex' . $device_size . '-wrap-reverse' => 'wrap-reverse',
1925
+    );
1926
+
1927
+    $defaults = array(
1928
+        'type'     => 'select',
1929
+        'title'    => __( 'Flex wrap', 'ayecode-connect' ),
1930
+        'options'  => $options,
1931
+        'default'  => '',
1932
+        'desc_tip' => true,
1933
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1934
+    );
1935
+
1936
+    $input = wp_parse_args( $overwrite, $defaults );
1937
+
1938
+    return $input;
1939 1939
 }
1940 1940
 
1941 1941
 function sd_get_float_group( $type = 'float', $overwrite = array() ) {
1942
-	$inputs = array();
1943
-	$sizes  = array(
1944
-		''    => 'Mobile',
1945
-		'_md' => 'Tablet',
1946
-		'_lg' => 'Desktop',
1947
-	);
1942
+    $inputs = array();
1943
+    $sizes  = array(
1944
+        ''    => 'Mobile',
1945
+        '_md' => 'Tablet',
1946
+        '_lg' => 'Desktop',
1947
+    );
1948 1948
 
1949
-	if ( $overwrite !== false ) {
1949
+    if ( $overwrite !== false ) {
1950 1950
 
1951
-		foreach ( $sizes as $ds => $dt ) {
1952
-			$overwrite['device_type'] = $dt;
1953
-			$inputs[ $type . $ds ]    = sd_get_float_input( $type, $overwrite );
1954
-		}
1955
-	}
1951
+        foreach ( $sizes as $ds => $dt ) {
1952
+            $overwrite['device_type'] = $dt;
1953
+            $inputs[ $type . $ds ]    = sd_get_float_input( $type, $overwrite );
1954
+        }
1955
+    }
1956 1956
 
1957
-	return $inputs;
1957
+    return $inputs;
1958 1958
 }
1959 1959
 function sd_get_float_input( $type = 'float', $overwrite = array() ) {
1960
-	$device_size = '';
1961
-	if ( ! empty( $overwrite['device_type'] ) ) {
1962
-		if ( $overwrite['device_type'] == 'Tablet' ) {
1963
-			$device_size = '-md';
1964
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
1965
-			$device_size = '-lg';
1966
-		}
1967
-	}
1968
-	$options = array(
1969
-		''                                      => __( 'Default', 'ayecode-connect' ),
1970
-		'float' . $device_size . '-start'       => 'left',
1971
-		'float' . $device_size . '-end'         => 'right',
1972
-		'float' . $device_size . '-none' => 'none',
1973
-	);
1974
-
1975
-	$defaults = array(
1976
-		'type'     => 'select',
1977
-		'title'    => __( 'Float', 'ayecode-connect' ),
1978
-		'options'  => $options,
1979
-		'default'  => '',
1980
-		'desc_tip' => true,
1981
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1982
-	);
1983
-
1984
-	$input = wp_parse_args( $overwrite, $defaults );
1985
-
1986
-	return $input;
1960
+    $device_size = '';
1961
+    if ( ! empty( $overwrite['device_type'] ) ) {
1962
+        if ( $overwrite['device_type'] == 'Tablet' ) {
1963
+            $device_size = '-md';
1964
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1965
+            $device_size = '-lg';
1966
+        }
1967
+    }
1968
+    $options = array(
1969
+        ''                                      => __( 'Default', 'ayecode-connect' ),
1970
+        'float' . $device_size . '-start'       => 'left',
1971
+        'float' . $device_size . '-end'         => 'right',
1972
+        'float' . $device_size . '-none' => 'none',
1973
+    );
1974
+
1975
+    $defaults = array(
1976
+        'type'     => 'select',
1977
+        'title'    => __( 'Float', 'ayecode-connect' ),
1978
+        'options'  => $options,
1979
+        'default'  => '',
1980
+        'desc_tip' => true,
1981
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
1982
+    );
1983
+
1984
+    $input = wp_parse_args( $overwrite, $defaults );
1985
+
1986
+    return $input;
1987 1987
 }
1988 1988
 
1989 1989
 /**
@@ -1994,26 +1994,26 @@  discard block
 block discarded – undo
1994 1994
  */
1995 1995
 function sd_get_zindex_input( $type = 'zindex', $overwrite = array() ) {
1996 1996
 
1997
-	$options = array(
1998
-		''          => __( 'Default', 'ayecode-connect' ),
1999
-		'zindex-0'  => '0',
2000
-		'zindex-1'  => '1',
2001
-		'zindex-5'  => '5',
2002
-		'zindex-10' => '10',
2003
-	);
1997
+    $options = array(
1998
+        ''          => __( 'Default', 'ayecode-connect' ),
1999
+        'zindex-0'  => '0',
2000
+        'zindex-1'  => '1',
2001
+        'zindex-5'  => '5',
2002
+        'zindex-10' => '10',
2003
+    );
2004 2004
 
2005
-	$defaults = array(
2006
-		'type'     => 'select',
2007
-		'title'    => __( 'Z-index', 'ayecode-connect' ),
2008
-		'options'  => $options,
2009
-		'default'  => '',
2010
-		'desc_tip' => true,
2011
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2012
-	);
2005
+    $defaults = array(
2006
+        'type'     => 'select',
2007
+        'title'    => __( 'Z-index', 'ayecode-connect' ),
2008
+        'options'  => $options,
2009
+        'default'  => '',
2010
+        'desc_tip' => true,
2011
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2012
+    );
2013 2013
 
2014
-	$input = wp_parse_args( $overwrite, $defaults );
2014
+    $input = wp_parse_args( $overwrite, $defaults );
2015 2015
 
2016
-	return $input;
2016
+    return $input;
2017 2017
 }
2018 2018
 
2019 2019
 /**
@@ -2024,26 +2024,26 @@  discard block
 block discarded – undo
2024 2024
  */
2025 2025
 function sd_get_overflow_input( $type = 'overflow', $overwrite = array() ) {
2026 2026
 
2027
-	$options = array(
2028
-		''                 => __( 'Default', 'ayecode-connect' ),
2029
-		'overflow-auto'    => __( 'Auto', 'ayecode-connect' ),
2030
-		'overflow-hidden'  => __( 'Hidden', 'ayecode-connect' ),
2031
-		'overflow-visible' => __( 'Visible', 'ayecode-connect' ),
2032
-		'overflow-scroll'  => __( 'Scroll', 'ayecode-connect' ),
2033
-	);
2027
+    $options = array(
2028
+        ''                 => __( 'Default', 'ayecode-connect' ),
2029
+        'overflow-auto'    => __( 'Auto', 'ayecode-connect' ),
2030
+        'overflow-hidden'  => __( 'Hidden', 'ayecode-connect' ),
2031
+        'overflow-visible' => __( 'Visible', 'ayecode-connect' ),
2032
+        'overflow-scroll'  => __( 'Scroll', 'ayecode-connect' ),
2033
+    );
2034 2034
 
2035
-	$defaults = array(
2036
-		'type'     => 'select',
2037
-		'title'    => __( 'Overflow', 'ayecode-connect' ),
2038
-		'options'  => $options,
2039
-		'default'  => '',
2040
-		'desc_tip' => true,
2041
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2042
-	);
2035
+    $defaults = array(
2036
+        'type'     => 'select',
2037
+        'title'    => __( 'Overflow', 'ayecode-connect' ),
2038
+        'options'  => $options,
2039
+        'default'  => '',
2040
+        'desc_tip' => true,
2041
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2042
+    );
2043 2043
 
2044
-	$input = wp_parse_args( $overwrite, $defaults );
2044
+    $input = wp_parse_args( $overwrite, $defaults );
2045 2045
 
2046
-	return $input;
2046
+    return $input;
2047 2047
 }
2048 2048
 
2049 2049
 /**
@@ -2054,19 +2054,19 @@  discard block
 block discarded – undo
2054 2054
  */
2055 2055
 function sd_get_max_height_input( $type = 'max_height', $overwrite = array() ) {
2056 2056
 
2057
-	$defaults = array(
2058
-		'type'        => 'text',
2059
-		'title'       => __( 'Max height', 'ayecode-connect' ),
2060
-		'value'       => '',
2061
-		'default'     => '',
2062
-		'placeholder' => '',
2063
-		'desc_tip'    => true,
2064
-		'group'       => __( 'Wrapper Styles', 'ayecode-connect' ),
2065
-	);
2057
+    $defaults = array(
2058
+        'type'        => 'text',
2059
+        'title'       => __( 'Max height', 'ayecode-connect' ),
2060
+        'value'       => '',
2061
+        'default'     => '',
2062
+        'placeholder' => '',
2063
+        'desc_tip'    => true,
2064
+        'group'       => __( 'Wrapper Styles', 'ayecode-connect' ),
2065
+    );
2066 2066
 
2067
-	$input = wp_parse_args( $overwrite, $defaults );
2067
+    $input = wp_parse_args( $overwrite, $defaults );
2068 2068
 
2069
-	return $input;
2069
+    return $input;
2070 2070
 }
2071 2071
 
2072 2072
 /**
@@ -2077,23 +2077,23 @@  discard block
 block discarded – undo
2077 2077
  */
2078 2078
 function sd_get_scrollbars_input( $type = 'scrollbars', $overwrite = array() ) {
2079 2079
 
2080
-	$options = array(
2081
-		''               => __( 'Default', 'ayecode-connect' ),
2082
-		'scrollbars-ios' => __( 'IOS Style', 'ayecode-connect' ),
2083
-	);
2080
+    $options = array(
2081
+        ''               => __( 'Default', 'ayecode-connect' ),
2082
+        'scrollbars-ios' => __( 'IOS Style', 'ayecode-connect' ),
2083
+    );
2084 2084
 
2085
-	$defaults = array(
2086
-		'type'     => 'select',
2087
-		'title'    => __( 'Scrollbars', 'ayecode-connect' ),
2088
-		'options'  => $options,
2089
-		'default'  => '',
2090
-		'desc_tip' => true,
2091
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2092
-	);
2085
+    $defaults = array(
2086
+        'type'     => 'select',
2087
+        'title'    => __( 'Scrollbars', 'ayecode-connect' ),
2088
+        'options'  => $options,
2089
+        'default'  => '',
2090
+        'desc_tip' => true,
2091
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2092
+    );
2093 2093
 
2094
-	$input = wp_parse_args( $overwrite, $defaults );
2094
+    $input = wp_parse_args( $overwrite, $defaults );
2095 2095
 
2096
-	return $input;
2096
+    return $input;
2097 2097
 }
2098 2098
 
2099 2099
 /**
@@ -2104,17 +2104,17 @@  discard block
 block discarded – undo
2104 2104
  */
2105 2105
 function sd_get_new_window_input( $type = 'target', $overwrite = array() ) {
2106 2106
 
2107
-	$defaults = array(
2108
-		'type'     => 'checkbox',
2109
-		'title'    => __( 'Open in new window', 'ayecode-connect' ),
2110
-		'default'  => '',
2111
-		'desc_tip' => true,
2112
-		'group'    => __( 'Link', 'ayecode-connect' ),
2113
-	);
2107
+    $defaults = array(
2108
+        'type'     => 'checkbox',
2109
+        'title'    => __( 'Open in new window', 'ayecode-connect' ),
2110
+        'default'  => '',
2111
+        'desc_tip' => true,
2112
+        'group'    => __( 'Link', 'ayecode-connect' ),
2113
+    );
2114 2114
 
2115
-	$input = wp_parse_args( $overwrite, $defaults );
2115
+    $input = wp_parse_args( $overwrite, $defaults );
2116 2116
 
2117
-	return $input;
2117
+    return $input;
2118 2118
 }
2119 2119
 
2120 2120
 /**
@@ -2125,17 +2125,17 @@  discard block
 block discarded – undo
2125 2125
  */
2126 2126
 function sd_get_nofollow_input( $type = 'nofollow', $overwrite = array() ) {
2127 2127
 
2128
-	$defaults = array(
2129
-		'type'     => 'checkbox',
2130
-		'title'    => __( 'Add nofollow', 'ayecode-connect' ),
2131
-		'default'  => '',
2132
-		'desc_tip' => true,
2133
-		'group'    => __( 'Link', 'ayecode-connect' ),
2134
-	);
2128
+    $defaults = array(
2129
+        'type'     => 'checkbox',
2130
+        'title'    => __( 'Add nofollow', 'ayecode-connect' ),
2131
+        'default'  => '',
2132
+        'desc_tip' => true,
2133
+        'group'    => __( 'Link', 'ayecode-connect' ),
2134
+    );
2135 2135
 
2136
-	$input = wp_parse_args( $overwrite, $defaults );
2136
+    $input = wp_parse_args( $overwrite, $defaults );
2137 2137
 
2138
-	return $input;
2138
+    return $input;
2139 2139
 }
2140 2140
 
2141 2141
 /**
@@ -2148,35 +2148,35 @@  discard block
 block discarded – undo
2148 2148
  */
2149 2149
 function sd_get_width_input( $type = 'width', $overwrite = array() ) {
2150 2150
 
2151
-	$device_size = '';
2152
-	if ( ! empty( $overwrite['device_type'] ) ) {
2153
-		if ( $overwrite['device_type'] == 'Tablet' ) {
2154
-			$device_size = '-md';
2155
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
2156
-			$device_size = '-lg';
2157
-		}
2158
-	}
2159
-	$options = array(
2160
-		'' => __('Default', 'ayecode-connect'),
2161
-		'w' . $device_size . '-25' => '25%',
2162
-		'w' . $device_size . '-50' => '50%',
2163
-		'w' . $device_size . '-75' => '75%',
2164
-		'w' . $device_size . '-100' => '100%',
2165
-		'w' . $device_size . '-auto' => 'auto',
2166
-	);
2167
-
2168
-	$defaults = array(
2169
-		'type'     => 'select',
2170
-		'title'    => __( 'Width', 'ayecode-connect' ),
2171
-		'options'  => $options,
2172
-		'default'  => '',
2173
-		'desc_tip' => true,
2174
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2175
-	);
2176
-
2177
-	$input = wp_parse_args( $overwrite, $defaults );
2178
-
2179
-	return $input;
2151
+    $device_size = '';
2152
+    if ( ! empty( $overwrite['device_type'] ) ) {
2153
+        if ( $overwrite['device_type'] == 'Tablet' ) {
2154
+            $device_size = '-md';
2155
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
2156
+            $device_size = '-lg';
2157
+        }
2158
+    }
2159
+    $options = array(
2160
+        '' => __('Default', 'ayecode-connect'),
2161
+        'w' . $device_size . '-25' => '25%',
2162
+        'w' . $device_size . '-50' => '50%',
2163
+        'w' . $device_size . '-75' => '75%',
2164
+        'w' . $device_size . '-100' => '100%',
2165
+        'w' . $device_size . '-auto' => 'auto',
2166
+    );
2167
+
2168
+    $defaults = array(
2169
+        'type'     => 'select',
2170
+        'title'    => __( 'Width', 'ayecode-connect' ),
2171
+        'options'  => $options,
2172
+        'default'  => '',
2173
+        'desc_tip' => true,
2174
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2175
+    );
2176
+
2177
+    $input = wp_parse_args( $overwrite, $defaults );
2178
+
2179
+    return $input;
2180 2180
 }
2181 2181
 
2182 2182
 /**
@@ -2189,35 +2189,35 @@  discard block
 block discarded – undo
2189 2189
  */
2190 2190
 function sd_get_height_input( $type = 'height', $overwrite = array() ) {
2191 2191
 
2192
-	$device_size = '';
2193
-	if ( ! empty( $overwrite['device_type'] ) ) {
2194
-		if ( $overwrite['device_type'] == 'Tablet' ) {
2195
-			$device_size = '-md';
2196
-		} elseif ( $overwrite['device_type'] == 'Desktop' ) {
2197
-			$device_size = '-lg';
2198
-		}
2199
-	}
2200
-	$options = array(
2201
-		'' => __('Default', 'ayecode-connect'),
2202
-		'h' . $device_size . '-25' => '25%',
2203
-		'h' . $device_size . '-50' => '50%',
2204
-		'h' . $device_size . '-75' => '75%',
2205
-		'h' . $device_size . '-100' => '100%',
2206
-		'h' . $device_size . '-auto' => 'auto',
2207
-	);
2208
-
2209
-	$defaults = array(
2210
-		'type'     => 'select',
2211
-		'title'    => __( 'Height', 'ayecode-connect' ),
2212
-		'options'  => $options,
2213
-		'default'  => '',
2214
-		'desc_tip' => true,
2215
-		'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2216
-	);
2217
-
2218
-	$input = wp_parse_args( $overwrite, $defaults );
2219
-
2220
-	return $input;
2192
+    $device_size = '';
2193
+    if ( ! empty( $overwrite['device_type'] ) ) {
2194
+        if ( $overwrite['device_type'] == 'Tablet' ) {
2195
+            $device_size = '-md';
2196
+        } elseif ( $overwrite['device_type'] == 'Desktop' ) {
2197
+            $device_size = '-lg';
2198
+        }
2199
+    }
2200
+    $options = array(
2201
+        '' => __('Default', 'ayecode-connect'),
2202
+        'h' . $device_size . '-25' => '25%',
2203
+        'h' . $device_size . '-50' => '50%',
2204
+        'h' . $device_size . '-75' => '75%',
2205
+        'h' . $device_size . '-100' => '100%',
2206
+        'h' . $device_size . '-auto' => 'auto',
2207
+    );
2208
+
2209
+    $defaults = array(
2210
+        'type'     => 'select',
2211
+        'title'    => __( 'Height', 'ayecode-connect' ),
2212
+        'options'  => $options,
2213
+        'default'  => '',
2214
+        'desc_tip' => true,
2215
+        'group'    => __( 'Wrapper Styles', 'ayecode-connect' ),
2216
+    );
2217
+
2218
+    $input = wp_parse_args( $overwrite, $defaults );
2219
+
2220
+    return $input;
2221 2221
 }
2222 2222
 
2223 2223
 /**
@@ -2228,19 +2228,19 @@  discard block
 block discarded – undo
2228 2228
  */
2229 2229
 function sd_get_attributes_input( $type = 'attributes', $overwrite = array() ) {
2230 2230
 
2231
-	$defaults = array(
2232
-		'type'        => 'text',
2233
-		'title'       => __( 'Custom Attributes', 'ayecode-connect' ),
2234
-		'value'       => '',
2235
-		'default'     => '',
2236
-		'placeholder' => 'key|value,key2|value2',
2237
-		'desc_tip'    => true,
2238
-		'group'       => __( 'Link', 'ayecode-connect' ),
2239
-	);
2231
+    $defaults = array(
2232
+        'type'        => 'text',
2233
+        'title'       => __( 'Custom Attributes', 'ayecode-connect' ),
2234
+        'value'       => '',
2235
+        'default'     => '',
2236
+        'placeholder' => 'key|value,key2|value2',
2237
+        'desc_tip'    => true,
2238
+        'group'       => __( 'Link', 'ayecode-connect' ),
2239
+    );
2240 2240
 
2241
-	$input = wp_parse_args( $overwrite, $defaults );
2241
+    $input = wp_parse_args( $overwrite, $defaults );
2242 2242
 
2243
-	return $input;
2243
+    return $input;
2244 2244
 }
2245 2245
 
2246 2246
 /**
@@ -2249,32 +2249,32 @@  discard block
 block discarded – undo
2249 2249
  * @return string
2250 2250
  */
2251 2251
 function sd_build_attributes_string_escaped( $args ) {
2252
-	global $aui_bs5;
2252
+    global $aui_bs5;
2253 2253
 
2254
-	$attributes = array();
2255
-	$string_escaped = '';
2254
+    $attributes = array();
2255
+    $string_escaped = '';
2256 2256
 
2257
-	if ( ! empty( $args['custom'] ) ) {
2258
-		$attributes = sd_parse_custom_attributes($args['custom']);
2259
-	}
2257
+    if ( ! empty( $args['custom'] ) ) {
2258
+        $attributes = sd_parse_custom_attributes($args['custom']);
2259
+    }
2260 2260
 
2261
-	// new window
2262
-	if ( ! empty( $args['new_window'] ) ) {
2263
-		$attributes['target'] = '_blank';
2264
-	}
2261
+    // new window
2262
+    if ( ! empty( $args['new_window'] ) ) {
2263
+        $attributes['target'] = '_blank';
2264
+    }
2265 2265
 
2266
-	// nofollow
2267
-	if ( ! empty( $args['nofollow'] ) ) {
2268
-		$attributes['rel'] = isset($attributes['rel']) ? $attributes['rel'] . ' nofollow' : 'nofollow';
2269
-	}
2266
+    // nofollow
2267
+    if ( ! empty( $args['nofollow'] ) ) {
2268
+        $attributes['rel'] = isset($attributes['rel']) ? $attributes['rel'] . ' nofollow' : 'nofollow';
2269
+    }
2270 2270
 
2271
-	if(!empty($attributes )){
2272
-		foreach ( $attributes as $key => $val ) {
2273
-			$string_escaped .= esc_attr($key) . '="' . esc_attr($val) . '" ';
2274
-		}
2275
-	}
2271
+    if(!empty($attributes )){
2272
+        foreach ( $attributes as $key => $val ) {
2273
+            $string_escaped .= esc_attr($key) . '="' . esc_attr($val) . '" ';
2274
+        }
2275
+    }
2276 2276
 
2277
-	return $string_escaped;
2277
+    return $string_escaped;
2278 2278
 }
2279 2279
 
2280 2280
 /**
@@ -2286,38 +2286,38 @@  discard block
 block discarded – undo
2286 2286
  * @return array
2287 2287
  */
2288 2288
 function sd_parse_custom_attributes( $attributes_string, $delimiter = ',' ) {
2289
-	$attributes = explode( $delimiter, $attributes_string );
2290
-	$result = [];
2289
+    $attributes = explode( $delimiter, $attributes_string );
2290
+    $result = [];
2291 2291
 
2292
-	foreach ( $attributes as $attribute ) {
2293
-		$attr_key_value = explode( '|', $attribute );
2292
+    foreach ( $attributes as $attribute ) {
2293
+        $attr_key_value = explode( '|', $attribute );
2294 2294
 
2295
-		$attr_key = mb_strtolower( $attr_key_value[0] );
2295
+        $attr_key = mb_strtolower( $attr_key_value[0] );
2296 2296
 
2297
-		// Remove any not allowed characters.
2298
-		preg_match( '/[-_a-z0-9]+/', $attr_key, $attr_key_matches );
2297
+        // Remove any not allowed characters.
2298
+        preg_match( '/[-_a-z0-9]+/', $attr_key, $attr_key_matches );
2299 2299
 
2300
-		if ( empty( $attr_key_matches[0] ) ) {
2301
-			continue;
2302
-		}
2300
+        if ( empty( $attr_key_matches[0] ) ) {
2301
+            continue;
2302
+        }
2303 2303
 
2304
-		$attr_key = $attr_key_matches[0];
2304
+        $attr_key = $attr_key_matches[0];
2305 2305
 
2306
-		// Avoid Javascript events and unescaped href.
2307
-		if ( 'href' === $attr_key || 'on' === substr( $attr_key, 0, 2 ) ) {
2308
-			continue;
2309
-		}
2306
+        // Avoid Javascript events and unescaped href.
2307
+        if ( 'href' === $attr_key || 'on' === substr( $attr_key, 0, 2 ) ) {
2308
+            continue;
2309
+        }
2310 2310
 
2311
-		if ( isset( $attr_key_value[1] ) ) {
2312
-			$attr_value = trim( $attr_key_value[1] );
2313
-		} else {
2314
-			$attr_value = '';
2315
-		}
2311
+        if ( isset( $attr_key_value[1] ) ) {
2312
+            $attr_value = trim( $attr_key_value[1] );
2313
+        } else {
2314
+            $attr_value = '';
2315
+        }
2316 2316
 
2317
-		$result[ $attr_key ] = $attr_value;
2318
-	}
2317
+        $result[ $attr_key ] = $attr_value;
2318
+    }
2319 2319
 
2320
-	return $result;
2320
+    return $result;
2321 2321
 }
2322 2322
 
2323 2323
 /**
@@ -2329,424 +2329,424 @@  discard block
 block discarded – undo
2329 2329
  * @todo find best way to use px- py- or general p-
2330 2330
  */
2331 2331
 function sd_build_aui_class( $args ) {
2332
-	global $aui_bs5;
2333
-
2334
-	$classes = array();
2335
-
2336
-	if ( $aui_bs5 ) {
2337
-		$p_ml = 'ms-';
2338
-		$p_mr = 'me-';
2339
-
2340
-		$p_pl = 'ps-';
2341
-		$p_pr = 'pe-';
2342
-	} else {
2343
-		$p_ml = 'ml-';
2344
-		$p_mr = 'mr-';
2345
-
2346
-		$p_pl = 'pl-';
2347
-		$p_pr = 'pr-';
2348
-	}
2349
-
2350
-	// margins.
2351
-	if ( isset( $args['mt'] ) && $args['mt'] !== '' ) {
2352
-		$classes[] = 'mt-' . sanitize_html_class( $args['mt'] );
2353
-		$mt        = $args['mt'];
2354
-	} else {
2355
-		$mt = null;
2356
-	}
2357
-	if ( isset( $args['mr'] ) && $args['mr'] !== '' ) {
2358
-		$classes[] = $p_mr . sanitize_html_class( $args['mr'] );
2359
-		$mr        = $args['mr'];
2360
-	} else {
2361
-		$mr = null;
2362
-	}
2363
-	if ( isset( $args['mb'] ) && $args['mb'] !== '' ) {
2364
-		$classes[] = 'mb-' . sanitize_html_class( $args['mb'] );
2365
-		$mb        = $args['mb'];
2366
-	} else {
2367
-		$mb = null;
2368
-	}
2369
-	if ( isset( $args['ml'] ) && $args['ml'] !== '' ) {
2370
-		$classes[] = $p_ml . sanitize_html_class( $args['ml'] );
2371
-		$ml        = $args['ml'];
2372
-	} else {
2373
-		$ml = null;
2374
-	}
2375
-
2376
-	// margins tablet.
2377
-	if ( isset( $args['mt_md'] ) && $args['mt_md'] !== '' ) {
2378
-		$classes[] = 'mt-md-' . sanitize_html_class( $args['mt_md'] );
2379
-		$mt_md     = $args['mt_md'];
2380
-	} else {
2381
-		$mt_md = null;
2382
-	}
2383
-	if ( isset( $args['mr_md'] ) && $args['mr_md'] !== '' ) {
2384
-		$classes[] = $p_mr . 'md-' . sanitize_html_class( $args['mr_md'] );
2385
-		$mt_md     = $args['mr_md'];
2386
-	} else {
2387
-		$mr_md = null;
2388
-	}
2389
-	if ( isset( $args['mb_md'] ) && $args['mb_md'] !== '' ) {
2390
-		$classes[] = 'mb-md-' . sanitize_html_class( $args['mb_md'] );
2391
-		$mt_md     = $args['mb_md'];
2392
-	} else {
2393
-		$mb_md = null;
2394
-	}
2395
-	if ( isset( $args['ml_md'] ) && $args['ml_md'] !== '' ) {
2396
-		$classes[] = $p_ml . 'md-' . sanitize_html_class( $args['ml_md'] );
2397
-		$mt_md     = $args['ml_md'];
2398
-	} else {
2399
-		$ml_md = null;
2400
-	}
2401
-
2402
-	// margins desktop.
2403
-	if ( isset( $args['mt_lg'] ) && $args['mt_lg'] !== '' ) {
2404
-		if ( $mt == null && $mt_md == null ) {
2405
-			$classes[] = 'mt-' . sanitize_html_class( $args['mt_lg'] );
2406
-		} else {
2407
-			$classes[] = 'mt-lg-' . sanitize_html_class( $args['mt_lg'] );
2408
-		}
2409
-	}
2410
-	if ( isset( $args['mr_lg'] ) && $args['mr_lg'] !== '' ) {
2411
-		if ( $mr == null && $mr_md == null ) {
2412
-			$classes[] = $p_mr . sanitize_html_class( $args['mr_lg'] );
2413
-		} else {
2414
-			$classes[] = $p_mr . 'lg-' . sanitize_html_class( $args['mr_lg'] );
2415
-		}
2416
-	}
2417
-	if ( isset( $args['mb_lg'] ) && $args['mb_lg'] !== '' ) {
2418
-		if ( $mb == null && $mb_md == null ) {
2419
-			$classes[] = 'mb-' . sanitize_html_class( $args['mb_lg'] );
2420
-		} else {
2421
-			$classes[] = 'mb-lg-' . sanitize_html_class( $args['mb_lg'] );
2422
-		}
2423
-	}
2424
-	if ( isset( $args['ml_lg'] ) && $args['ml_lg'] !== '' ) {
2425
-		if ( $ml == null && $ml_md == null ) {
2426
-			$classes[] = $p_ml . sanitize_html_class( $args['ml_lg'] );
2427
-		} else {
2428
-			$classes[] = $p_ml . 'lg-' . sanitize_html_class( $args['ml_lg'] );
2429
-		}
2430
-	}
2431
-
2432
-	// padding.
2433
-	if ( isset( $args['pt'] ) && $args['pt'] !== '' ) {
2434
-		$classes[] = 'pt-' . sanitize_html_class( $args['pt'] );
2435
-		$pt        = $args['pt'];
2436
-	} else {
2437
-		$pt = null;
2438
-	}
2439
-	if ( isset( $args['pr'] ) && $args['pr'] !== '' ) {
2440
-		$classes[] = $p_pr . sanitize_html_class( $args['pr'] );
2441
-		$pr        = $args['pr'];
2442
-	} else {
2443
-		$pr = null;
2444
-	}
2445
-	if ( isset( $args['pb'] ) && $args['pb'] !== '' ) {
2446
-		$classes[] = 'pb-' . sanitize_html_class( $args['pb'] );
2447
-		$pb        = $args['pb'];
2448
-	} else {
2449
-		$pb = null;
2450
-	}
2451
-	if ( isset( $args['pl'] ) && $args['pl'] !== '' ) {
2452
-		$classes[] = $p_pl . sanitize_html_class( $args['pl'] );
2453
-		$pl        = $args['pl'];
2454
-	} else {
2455
-		$pl = null;
2456
-	}
2457
-
2458
-	// padding tablet.
2459
-	if ( isset( $args['pt_md'] ) && $args['pt_md'] !== '' ) {
2460
-		$classes[] = 'pt-md-' . sanitize_html_class( $args['pt_md'] );
2461
-		$pt_md     = $args['pt_md'];
2462
-	} else {
2463
-		$pt_md = null;
2464
-	}
2465
-	if ( isset( $args['pr_md'] ) && $args['pr_md'] !== '' ) {
2466
-		$classes[] = $p_pr . 'md-' . sanitize_html_class( $args['pr_md'] );
2467
-		$pr_md     = $args['pr_md'];
2468
-	} else {
2469
-		$pr_md = null;
2470
-	}
2471
-	if ( isset( $args['pb_md'] ) && $args['pb_md'] !== '' ) {
2472
-		$classes[] = 'pb-md-' . sanitize_html_class( $args['pb_md'] );
2473
-		$pb_md     = $args['pb_md'];
2474
-	} else {
2475
-		$pb_md = null;
2476
-	}
2477
-	if ( isset( $args['pl_md'] ) && $args['pl_md'] !== '' ) {
2478
-		$classes[] = $p_pl . 'md-' . sanitize_html_class( $args['pl_md'] );
2479
-		$pl_md     = $args['pl_md'];
2480
-	} else {
2481
-		$pl_md = null;
2482
-	}
2483
-
2484
-	// padding desktop.
2485
-	if ( isset( $args['pt_lg'] ) && $args['pt_lg'] !== '' ) {
2486
-		if ( $pt == null && $pt_md == null ) {
2487
-			$classes[] = 'pt-' . sanitize_html_class( $args['pt_lg'] );
2488
-		} else {
2489
-			$classes[] = 'pt-lg-' . sanitize_html_class( $args['pt_lg'] );
2490
-		}
2491
-	}
2492
-	if ( isset( $args['pr_lg'] ) && $args['pr_lg'] !== '' ) {
2493
-		if ( $pr == null && $pr_md == null ) {
2494
-			$classes[] = $p_pr . sanitize_html_class( $args['pr_lg'] );
2495
-		} else {
2496
-			$classes[] = $p_pr . 'lg-' . sanitize_html_class( $args['pr_lg'] );
2497
-		}
2498
-	}
2499
-	if ( isset( $args['pb_lg'] ) && $args['pb_lg'] !== '' ) {
2500
-		if ( $pb == null && $pb_md == null ) {
2501
-			$classes[] = 'pb-' . sanitize_html_class( $args['pb_lg'] );
2502
-		} else {
2503
-			$classes[] = 'pb-lg-' . sanitize_html_class( $args['pb_lg'] );
2504
-		}
2505
-	}
2506
-	if ( isset( $args['pl_lg'] ) && $args['pl_lg'] !== '' ) {
2507
-		if ( $pl == null && $pl_md == null ) {
2508
-			$classes[] = $p_pl . sanitize_html_class( $args['pl_lg'] );
2509
-		} else {
2510
-			$classes[] = $p_pl . 'lg-' . sanitize_html_class( $args['pl_lg'] );
2511
-		}
2512
-	}
2513
-
2514
-	// row cols, mobile, tablet, desktop
2515
-	if ( ! empty( $args['row_cols'] ) && $args['row_cols'] !== '' ) {
2516
-		$classes[] = sanitize_html_class( 'row-cols-' . $args['row_cols'] );
2517
-		$row_cols  = $args['row_cols'];
2518
-	} else {
2519
-		$row_cols = null;
2520
-	}
2521
-	if ( ! empty( $args['row_cols_md'] ) && $args['row_cols_md'] !== '' ) {
2522
-		$classes[]   = sanitize_html_class( 'row-cols-md-' . $args['row_cols_md'] );
2523
-		$row_cols_md = $args['row_cols_md'];
2524
-	} else {
2525
-		$row_cols_md = null;
2526
-	}
2527
-	if ( ! empty( $args['row_cols_lg'] ) && $args['row_cols_lg'] !== '' ) {
2528
-		if ( $row_cols == null && $row_cols_md == null ) {
2529
-			$classes[] = sanitize_html_class( 'row-cols-' . $args['row_cols_lg'] );
2530
-		} else {
2531
-			$classes[] = sanitize_html_class( 'row-cols-lg-' . $args['row_cols_lg'] );
2532
-		}
2533
-	}
2534
-
2535
-	// columns , mobile, tablet, desktop
2536
-	if ( ! empty( $args['col'] ) && $args['col'] !== '' ) {
2537
-		$classes[] = sanitize_html_class( 'col-' . $args['col'] );
2538
-		$col       = $args['col'];
2539
-	} else {
2540
-		$col = null;
2541
-	}
2542
-	if ( ! empty( $args['col_md'] ) && $args['col_md'] !== '' ) {
2543
-		$classes[] = sanitize_html_class( 'col-md-' . $args['col_md'] );
2544
-		$col_md    = $args['col_md'];
2545
-	} else {
2546
-		$col_md = null;
2547
-	}
2548
-	if ( ! empty( $args['col_lg'] ) && $args['col_lg'] !== '' ) {
2549
-		if ( $col == null && $col_md == null ) {
2550
-			$classes[] = sanitize_html_class( 'col-' . $args['col_lg'] );
2551
-		} else {
2552
-			$classes[] = sanitize_html_class( 'col-lg-' . $args['col_lg'] );
2553
-		}
2554
-	}
2555
-
2556
-	// border
2557
-	if ( isset( $args['border'] ) && ( $args['border'] == 'none' || $args['border'] === '0' || $args['border'] === 0 ) ) {
2558
-		$classes[] = 'border-0';
2559
-	} elseif ( ! empty( $args['border'] ) ) {
2560
-		$border_class = 'border';
2561
-		if ( ! empty( $args['border_type'] ) && strpos( $args['border_type'], '-0' ) === false ) {
2562
-			$border_class = '';
2563
-		}
2564
-		$classes[] = $border_class . ' border-' . sanitize_html_class( $args['border'] );
2565
-	}
2566
-
2567
-	// border radius type
2568
-	if ( ! empty( $args['rounded'] ) ) {
2569
-		$classes[] = sanitize_html_class( $args['rounded'] );
2570
-	}
2571
-
2572
-	// border radius size BS4
2573
-	if ( isset( $args['rounded_size'] ) && in_array( $args['rounded_size'], array( 'sm', 'lg' ) ) ) {
2574
-		$classes[] = 'rounded-' . sanitize_html_class( $args['rounded_size'] );
2575
-		// if we set a size then we need to remove "rounded" if set
2576
-		if ( ( $key = array_search( 'rounded', $classes ) ) !== false ) {
2577
-			unset( $classes[ $key ] );
2578
-		}
2579
-	} else {
2580
-
2581
-		// border radius size , mobile, tablet, desktop
2582
-		if ( isset( $args['rounded_size'] ) && $args['rounded_size'] !== '' ) {
2583
-			$classes[]    = sanitize_html_class( 'rounded-' . $args['rounded_size'] );
2584
-			$rounded_size = $args['rounded_size'];
2585
-		} else {
2586
-			$rounded_size = null;
2587
-		}
2588
-		if ( isset( $args['rounded_size_md'] ) && $args['rounded_size_md'] !== '' ) {
2589
-			$classes[]       = sanitize_html_class( 'rounded-md-' . $args['rounded_size_md'] );
2590
-			$rounded_size_md = $args['rounded_size_md'];
2591
-		} else {
2592
-			$rounded_size_md = null;
2593
-		}
2594
-		if ( isset( $args['rounded_size_lg'] ) && $args['rounded_size_lg'] !== '' ) {
2595
-			if ( $rounded_size == null && $rounded_size_md == null ) {
2596
-				$classes[] = sanitize_html_class( 'rounded-' . $args['rounded_size_lg'] );
2597
-			} else {
2598
-				$classes[] = sanitize_html_class( 'rounded-lg-' . $args['rounded_size_lg'] );
2599
-			}
2600
-		}
2601
-	}
2602
-
2603
-	// shadow
2604
-	//if ( !empty( $args['shadow'] ) ) { $classes[] = sanitize_html_class($args['shadow']); }
2605
-
2606
-	// background
2607
-	if ( ! empty( $args['bg'] ) ) {
2608
-		$classes[] = 'bg-' . sanitize_html_class( $args['bg'] );
2609
-	}
2610
-
2611
-	// background image fixed bg_image_fixed this helps fix a iOS bug
2612
-	if ( ! empty( $args['bg_image_fixed'] ) ) {
2613
-		$classes[] = 'bg-image-fixed';
2614
-	}
2615
-
2616
-	// text_color
2617
-	if ( ! empty( $args['text_color'] ) ) {
2618
-		$classes[] = 'text-' . sanitize_html_class( $args['text_color'] );
2619
-	}
2620
-
2621
-	// text_align
2622
-	if ( ! empty( $args['text_justify'] ) ) {
2623
-		$classes[] = 'text-justify';
2624
-	} else {
2625
-		if ( ! empty( $args['text_align'] ) ) {
2626
-			$classes[]  = sanitize_html_class( $args['text_align'] );
2627
-			$text_align = $args['text_align'];
2628
-		} else {
2629
-			$text_align = null;
2630
-		}
2631
-		if ( ! empty( $args['text_align_md'] ) && $args['text_align_md'] !== '' ) {
2632
-			$classes[]     = sanitize_html_class( $args['text_align_md'] );
2633
-			$text_align_md = $args['text_align_md'];
2634
-		} else {
2635
-			$text_align_md = null;
2636
-		}
2637
-		if ( ! empty( $args['text_align_lg'] ) && $args['text_align_lg'] !== '' ) {
2638
-			if ( $text_align == null && $text_align_md == null ) {
2639
-				$classes[] = sanitize_html_class( str_replace( '-lg', '', $args['text_align_lg'] ) );
2640
-			} else {
2641
-				$classes[] = sanitize_html_class( $args['text_align_lg'] );
2642
-			}
2643
-		}
2644
-	}
2645
-
2646
-	// display
2647
-	if ( ! empty( $args['display'] ) ) {
2648
-		$classes[] = sanitize_html_class( $args['display'] );
2649
-		$display   = $args['display'];
2650
-	} else {
2651
-		$display = null;
2652
-	}
2653
-	if ( ! empty( $args['display_md'] ) && $args['display_md'] !== '' ) {
2654
-		$classes[]  = sanitize_html_class( $args['display_md'] );
2655
-		$display_md = $args['display_md'];
2656
-	} else {
2657
-		$display_md = null;
2658
-	}
2659
-	if ( ! empty( $args['display_lg'] ) && $args['display_lg'] !== '' ) {
2660
-		if ( $display == null && $display_md == null ) {
2661
-			$classes[] = sanitize_html_class( str_replace( '-lg', '', $args['display_lg'] ) );
2662
-		} else {
2663
-			$classes[] = sanitize_html_class( $args['display_lg'] );
2664
-		}
2665
-	}
2666
-
2667
-	// bgtus - background transparent until scroll
2668
-	if ( ! empty( $args['bgtus'] ) ) {
2669
-		$classes[] = sanitize_html_class( 'bg-transparent-until-scroll' );
2670
-	}
2671
-
2672
-	// cscos - change color scheme on scroll
2673
-	if ( ! empty( $args['bgtus'] ) && ! empty( $args['cscos'] ) ) {
2674
-		$classes[] = sanitize_html_class( 'color-scheme-flip-on-scroll' );
2675
-	}
2676
-
2677
-	// hover animations
2678
-	if ( ! empty( $args['hover_animations'] ) ) {
2679
-		$classes[] = sd_sanitize_html_classes( str_replace( ',', ' ', $args['hover_animations'] ) );
2680
-	}
2681
-
2682
-	// absolute_position
2683
-	if ( ! empty( $args['absolute_position'] ) ) {
2684
-		if ( 'top-left' === $args['absolute_position'] ) {
2685
-			$classes[] = 'start-0 top-0';
2686
-		} elseif ( 'top-center' === $args['absolute_position'] ) {
2687
-			$classes[] = 'start-50 top-0 translate-middle';
2688
-		} elseif ( 'top-right' === $args['absolute_position'] ) {
2689
-			$classes[] = 'end-0 top-0';
2690
-		} elseif ( 'center-left' === $args['absolute_position'] ) {
2691
-			$classes[] = 'start-0 top-50';
2692
-		} elseif ( 'center' === $args['absolute_position'] ) {
2693
-			$classes[] = 'start-50 top-50 translate-middle';
2694
-		} elseif ( 'center-right' === $args['absolute_position'] ) {
2695
-			$classes[] = 'end-0 top-50';
2696
-		} elseif ( 'bottom-left' === $args['absolute_position'] ) {
2697
-			$classes[] = 'start-0 bottom-0';
2698
-		} elseif ( 'bottom-center' === $args['absolute_position'] ) {
2699
-			$classes[] = 'start-50 bottom-0 translate-middle';
2700
-		} elseif ( 'bottom-right' === $args['absolute_position'] ) {
2701
-			$classes[] = 'end-0 bottom-0';
2702
-		}
2703
-	}
2704
-
2705
-	// build classes from build keys
2706
-	$build_keys = sd_get_class_build_keys();
2707
-	if ( ! empty( $build_keys ) ) {
2708
-		foreach ( $build_keys as $key ) {
2709
-
2710
-			if ( substr( $key, -4 ) == '-MTD' ) {
2711
-
2712
-				$k = str_replace( '-MTD', '', $key );
2713
-
2714
-				// Mobile, Tablet, Desktop
2715
-				if ( ! empty( $args[ $k ] ) && $args[ $k ] !== '' ) {
2716
-					$classes[] = sanitize_html_class( $args[ $k ] );
2717
-					$v         = $args[ $k ];
2718
-				} else {
2719
-					$v = null;
2720
-				}
2721
-				if ( ! empty( $args[ $k . '_md' ] ) && $args[ $k . '_md' ] !== '' ) {
2722
-					$classes[] = sanitize_html_class( $args[ $k . '_md' ] );
2723
-					$v_md      = $args[ $k . '_md' ];
2724
-				} else {
2725
-					$v_md = null;
2726
-				}
2727
-				if ( ! empty( $args[ $k . '_lg' ] ) && $args[ $k . '_lg' ] !== '' ) {
2728
-					if ( $v == null && $v_md == null ) {
2729
-						$classes[] = sanitize_html_class( str_replace( '-lg', '', $args[ $k . '_lg' ] ) );
2730
-					} else {
2731
-						$classes[] = sanitize_html_class( $args[ $k . '_lg' ] );
2732
-					}
2733
-				}
2734
-			} else {
2735
-				if ( $key == 'font_size' && ! empty( $args[ $key ] ) && $args[ $key ] == 'custom' ) {
2736
-					continue;
2737
-				}
2738
-				if ( ! empty( $args[ $key ] ) ) {
2739
-					$classes[] = sd_sanitize_html_classes( $args[ $key ] );
2740
-				}
2741
-			}
2742
-		}
2743
-	}
2744
-
2745
-	if ( ! empty( $classes ) ) {
2746
-		$classes = array_unique( array_filter( array_map( 'trim', $classes ) ) );
2747
-	}
2748
-
2749
-	return implode( ' ', $classes );
2332
+    global $aui_bs5;
2333
+
2334
+    $classes = array();
2335
+
2336
+    if ( $aui_bs5 ) {
2337
+        $p_ml = 'ms-';
2338
+        $p_mr = 'me-';
2339
+
2340
+        $p_pl = 'ps-';
2341
+        $p_pr = 'pe-';
2342
+    } else {
2343
+        $p_ml = 'ml-';
2344
+        $p_mr = 'mr-';
2345
+
2346
+        $p_pl = 'pl-';
2347
+        $p_pr = 'pr-';
2348
+    }
2349
+
2350
+    // margins.
2351
+    if ( isset( $args['mt'] ) && $args['mt'] !== '' ) {
2352
+        $classes[] = 'mt-' . sanitize_html_class( $args['mt'] );
2353
+        $mt        = $args['mt'];
2354
+    } else {
2355
+        $mt = null;
2356
+    }
2357
+    if ( isset( $args['mr'] ) && $args['mr'] !== '' ) {
2358
+        $classes[] = $p_mr . sanitize_html_class( $args['mr'] );
2359
+        $mr        = $args['mr'];
2360
+    } else {
2361
+        $mr = null;
2362
+    }
2363
+    if ( isset( $args['mb'] ) && $args['mb'] !== '' ) {
2364
+        $classes[] = 'mb-' . sanitize_html_class( $args['mb'] );
2365
+        $mb        = $args['mb'];
2366
+    } else {
2367
+        $mb = null;
2368
+    }
2369
+    if ( isset( $args['ml'] ) && $args['ml'] !== '' ) {
2370
+        $classes[] = $p_ml . sanitize_html_class( $args['ml'] );
2371
+        $ml        = $args['ml'];
2372
+    } else {
2373
+        $ml = null;
2374
+    }
2375
+
2376
+    // margins tablet.
2377
+    if ( isset( $args['mt_md'] ) && $args['mt_md'] !== '' ) {
2378
+        $classes[] = 'mt-md-' . sanitize_html_class( $args['mt_md'] );
2379
+        $mt_md     = $args['mt_md'];
2380
+    } else {
2381
+        $mt_md = null;
2382
+    }
2383
+    if ( isset( $args['mr_md'] ) && $args['mr_md'] !== '' ) {
2384
+        $classes[] = $p_mr . 'md-' . sanitize_html_class( $args['mr_md'] );
2385
+        $mt_md     = $args['mr_md'];
2386
+    } else {
2387
+        $mr_md = null;
2388
+    }
2389
+    if ( isset( $args['mb_md'] ) && $args['mb_md'] !== '' ) {
2390
+        $classes[] = 'mb-md-' . sanitize_html_class( $args['mb_md'] );
2391
+        $mt_md     = $args['mb_md'];
2392
+    } else {
2393
+        $mb_md = null;
2394
+    }
2395
+    if ( isset( $args['ml_md'] ) && $args['ml_md'] !== '' ) {
2396
+        $classes[] = $p_ml . 'md-' . sanitize_html_class( $args['ml_md'] );
2397
+        $mt_md     = $args['ml_md'];
2398
+    } else {
2399
+        $ml_md = null;
2400
+    }
2401
+
2402
+    // margins desktop.
2403
+    if ( isset( $args['mt_lg'] ) && $args['mt_lg'] !== '' ) {
2404
+        if ( $mt == null && $mt_md == null ) {
2405
+            $classes[] = 'mt-' . sanitize_html_class( $args['mt_lg'] );
2406
+        } else {
2407
+            $classes[] = 'mt-lg-' . sanitize_html_class( $args['mt_lg'] );
2408
+        }
2409
+    }
2410
+    if ( isset( $args['mr_lg'] ) && $args['mr_lg'] !== '' ) {
2411
+        if ( $mr == null && $mr_md == null ) {
2412
+            $classes[] = $p_mr . sanitize_html_class( $args['mr_lg'] );
2413
+        } else {
2414
+            $classes[] = $p_mr . 'lg-' . sanitize_html_class( $args['mr_lg'] );
2415
+        }
2416
+    }
2417
+    if ( isset( $args['mb_lg'] ) && $args['mb_lg'] !== '' ) {
2418
+        if ( $mb == null && $mb_md == null ) {
2419
+            $classes[] = 'mb-' . sanitize_html_class( $args['mb_lg'] );
2420
+        } else {
2421
+            $classes[] = 'mb-lg-' . sanitize_html_class( $args['mb_lg'] );
2422
+        }
2423
+    }
2424
+    if ( isset( $args['ml_lg'] ) && $args['ml_lg'] !== '' ) {
2425
+        if ( $ml == null && $ml_md == null ) {
2426
+            $classes[] = $p_ml . sanitize_html_class( $args['ml_lg'] );
2427
+        } else {
2428
+            $classes[] = $p_ml . 'lg-' . sanitize_html_class( $args['ml_lg'] );
2429
+        }
2430
+    }
2431
+
2432
+    // padding.
2433
+    if ( isset( $args['pt'] ) && $args['pt'] !== '' ) {
2434
+        $classes[] = 'pt-' . sanitize_html_class( $args['pt'] );
2435
+        $pt        = $args['pt'];
2436
+    } else {
2437
+        $pt = null;
2438
+    }
2439
+    if ( isset( $args['pr'] ) && $args['pr'] !== '' ) {
2440
+        $classes[] = $p_pr . sanitize_html_class( $args['pr'] );
2441
+        $pr        = $args['pr'];
2442
+    } else {
2443
+        $pr = null;
2444
+    }
2445
+    if ( isset( $args['pb'] ) && $args['pb'] !== '' ) {
2446
+        $classes[] = 'pb-' . sanitize_html_class( $args['pb'] );
2447
+        $pb        = $args['pb'];
2448
+    } else {
2449
+        $pb = null;
2450
+    }
2451
+    if ( isset( $args['pl'] ) && $args['pl'] !== '' ) {
2452
+        $classes[] = $p_pl . sanitize_html_class( $args['pl'] );
2453
+        $pl        = $args['pl'];
2454
+    } else {
2455
+        $pl = null;
2456
+    }
2457
+
2458
+    // padding tablet.
2459
+    if ( isset( $args['pt_md'] ) && $args['pt_md'] !== '' ) {
2460
+        $classes[] = 'pt-md-' . sanitize_html_class( $args['pt_md'] );
2461
+        $pt_md     = $args['pt_md'];
2462
+    } else {
2463
+        $pt_md = null;
2464
+    }
2465
+    if ( isset( $args['pr_md'] ) && $args['pr_md'] !== '' ) {
2466
+        $classes[] = $p_pr . 'md-' . sanitize_html_class( $args['pr_md'] );
2467
+        $pr_md     = $args['pr_md'];
2468
+    } else {
2469
+        $pr_md = null;
2470
+    }
2471
+    if ( isset( $args['pb_md'] ) && $args['pb_md'] !== '' ) {
2472
+        $classes[] = 'pb-md-' . sanitize_html_class( $args['pb_md'] );
2473
+        $pb_md     = $args['pb_md'];
2474
+    } else {
2475
+        $pb_md = null;
2476
+    }
2477
+    if ( isset( $args['pl_md'] ) && $args['pl_md'] !== '' ) {
2478
+        $classes[] = $p_pl . 'md-' . sanitize_html_class( $args['pl_md'] );
2479
+        $pl_md     = $args['pl_md'];
2480
+    } else {
2481
+        $pl_md = null;
2482
+    }
2483
+
2484
+    // padding desktop.
2485
+    if ( isset( $args['pt_lg'] ) && $args['pt_lg'] !== '' ) {
2486
+        if ( $pt == null && $pt_md == null ) {
2487
+            $classes[] = 'pt-' . sanitize_html_class( $args['pt_lg'] );
2488
+        } else {
2489
+            $classes[] = 'pt-lg-' . sanitize_html_class( $args['pt_lg'] );
2490
+        }
2491
+    }
2492
+    if ( isset( $args['pr_lg'] ) && $args['pr_lg'] !== '' ) {
2493
+        if ( $pr == null && $pr_md == null ) {
2494
+            $classes[] = $p_pr . sanitize_html_class( $args['pr_lg'] );
2495
+        } else {
2496
+            $classes[] = $p_pr . 'lg-' . sanitize_html_class( $args['pr_lg'] );
2497
+        }
2498
+    }
2499
+    if ( isset( $args['pb_lg'] ) && $args['pb_lg'] !== '' ) {
2500
+        if ( $pb == null && $pb_md == null ) {
2501
+            $classes[] = 'pb-' . sanitize_html_class( $args['pb_lg'] );
2502
+        } else {
2503
+            $classes[] = 'pb-lg-' . sanitize_html_class( $args['pb_lg'] );
2504
+        }
2505
+    }
2506
+    if ( isset( $args['pl_lg'] ) && $args['pl_lg'] !== '' ) {
2507
+        if ( $pl == null && $pl_md == null ) {
2508
+            $classes[] = $p_pl . sanitize_html_class( $args['pl_lg'] );
2509
+        } else {
2510
+            $classes[] = $p_pl . 'lg-' . sanitize_html_class( $args['pl_lg'] );
2511
+        }
2512
+    }
2513
+
2514
+    // row cols, mobile, tablet, desktop
2515
+    if ( ! empty( $args['row_cols'] ) && $args['row_cols'] !== '' ) {
2516
+        $classes[] = sanitize_html_class( 'row-cols-' . $args['row_cols'] );
2517
+        $row_cols  = $args['row_cols'];
2518
+    } else {
2519
+        $row_cols = null;
2520
+    }
2521
+    if ( ! empty( $args['row_cols_md'] ) && $args['row_cols_md'] !== '' ) {
2522
+        $classes[]   = sanitize_html_class( 'row-cols-md-' . $args['row_cols_md'] );
2523
+        $row_cols_md = $args['row_cols_md'];
2524
+    } else {
2525
+        $row_cols_md = null;
2526
+    }
2527
+    if ( ! empty( $args['row_cols_lg'] ) && $args['row_cols_lg'] !== '' ) {
2528
+        if ( $row_cols == null && $row_cols_md == null ) {
2529
+            $classes[] = sanitize_html_class( 'row-cols-' . $args['row_cols_lg'] );
2530
+        } else {
2531
+            $classes[] = sanitize_html_class( 'row-cols-lg-' . $args['row_cols_lg'] );
2532
+        }
2533
+    }
2534
+
2535
+    // columns , mobile, tablet, desktop
2536
+    if ( ! empty( $args['col'] ) && $args['col'] !== '' ) {
2537
+        $classes[] = sanitize_html_class( 'col-' . $args['col'] );
2538
+        $col       = $args['col'];
2539
+    } else {
2540
+        $col = null;
2541
+    }
2542
+    if ( ! empty( $args['col_md'] ) && $args['col_md'] !== '' ) {
2543
+        $classes[] = sanitize_html_class( 'col-md-' . $args['col_md'] );
2544
+        $col_md    = $args['col_md'];
2545
+    } else {
2546
+        $col_md = null;
2547
+    }
2548
+    if ( ! empty( $args['col_lg'] ) && $args['col_lg'] !== '' ) {
2549
+        if ( $col == null && $col_md == null ) {
2550
+            $classes[] = sanitize_html_class( 'col-' . $args['col_lg'] );
2551
+        } else {
2552
+            $classes[] = sanitize_html_class( 'col-lg-' . $args['col_lg'] );
2553
+        }
2554
+    }
2555
+
2556
+    // border
2557
+    if ( isset( $args['border'] ) && ( $args['border'] == 'none' || $args['border'] === '0' || $args['border'] === 0 ) ) {
2558
+        $classes[] = 'border-0';
2559
+    } elseif ( ! empty( $args['border'] ) ) {
2560
+        $border_class = 'border';
2561
+        if ( ! empty( $args['border_type'] ) && strpos( $args['border_type'], '-0' ) === false ) {
2562
+            $border_class = '';
2563
+        }
2564
+        $classes[] = $border_class . ' border-' . sanitize_html_class( $args['border'] );
2565
+    }
2566
+
2567
+    // border radius type
2568
+    if ( ! empty( $args['rounded'] ) ) {
2569
+        $classes[] = sanitize_html_class( $args['rounded'] );
2570
+    }
2571
+
2572
+    // border radius size BS4
2573
+    if ( isset( $args['rounded_size'] ) && in_array( $args['rounded_size'], array( 'sm', 'lg' ) ) ) {
2574
+        $classes[] = 'rounded-' . sanitize_html_class( $args['rounded_size'] );
2575
+        // if we set a size then we need to remove "rounded" if set
2576
+        if ( ( $key = array_search( 'rounded', $classes ) ) !== false ) {
2577
+            unset( $classes[ $key ] );
2578
+        }
2579
+    } else {
2580
+
2581
+        // border radius size , mobile, tablet, desktop
2582
+        if ( isset( $args['rounded_size'] ) && $args['rounded_size'] !== '' ) {
2583
+            $classes[]    = sanitize_html_class( 'rounded-' . $args['rounded_size'] );
2584
+            $rounded_size = $args['rounded_size'];
2585
+        } else {
2586
+            $rounded_size = null;
2587
+        }
2588
+        if ( isset( $args['rounded_size_md'] ) && $args['rounded_size_md'] !== '' ) {
2589
+            $classes[]       = sanitize_html_class( 'rounded-md-' . $args['rounded_size_md'] );
2590
+            $rounded_size_md = $args['rounded_size_md'];
2591
+        } else {
2592
+            $rounded_size_md = null;
2593
+        }
2594
+        if ( isset( $args['rounded_size_lg'] ) && $args['rounded_size_lg'] !== '' ) {
2595
+            if ( $rounded_size == null && $rounded_size_md == null ) {
2596
+                $classes[] = sanitize_html_class( 'rounded-' . $args['rounded_size_lg'] );
2597
+            } else {
2598
+                $classes[] = sanitize_html_class( 'rounded-lg-' . $args['rounded_size_lg'] );
2599
+            }
2600
+        }
2601
+    }
2602
+
2603
+    // shadow
2604
+    //if ( !empty( $args['shadow'] ) ) { $classes[] = sanitize_html_class($args['shadow']); }
2605
+
2606
+    // background
2607
+    if ( ! empty( $args['bg'] ) ) {
2608
+        $classes[] = 'bg-' . sanitize_html_class( $args['bg'] );
2609
+    }
2610
+
2611
+    // background image fixed bg_image_fixed this helps fix a iOS bug
2612
+    if ( ! empty( $args['bg_image_fixed'] ) ) {
2613
+        $classes[] = 'bg-image-fixed';
2614
+    }
2615
+
2616
+    // text_color
2617
+    if ( ! empty( $args['text_color'] ) ) {
2618
+        $classes[] = 'text-' . sanitize_html_class( $args['text_color'] );
2619
+    }
2620
+
2621
+    // text_align
2622
+    if ( ! empty( $args['text_justify'] ) ) {
2623
+        $classes[] = 'text-justify';
2624
+    } else {
2625
+        if ( ! empty( $args['text_align'] ) ) {
2626
+            $classes[]  = sanitize_html_class( $args['text_align'] );
2627
+            $text_align = $args['text_align'];
2628
+        } else {
2629
+            $text_align = null;
2630
+        }
2631
+        if ( ! empty( $args['text_align_md'] ) && $args['text_align_md'] !== '' ) {
2632
+            $classes[]     = sanitize_html_class( $args['text_align_md'] );
2633
+            $text_align_md = $args['text_align_md'];
2634
+        } else {
2635
+            $text_align_md = null;
2636
+        }
2637
+        if ( ! empty( $args['text_align_lg'] ) && $args['text_align_lg'] !== '' ) {
2638
+            if ( $text_align == null && $text_align_md == null ) {
2639
+                $classes[] = sanitize_html_class( str_replace( '-lg', '', $args['text_align_lg'] ) );
2640
+            } else {
2641
+                $classes[] = sanitize_html_class( $args['text_align_lg'] );
2642
+            }
2643
+        }
2644
+    }
2645
+
2646
+    // display
2647
+    if ( ! empty( $args['display'] ) ) {
2648
+        $classes[] = sanitize_html_class( $args['display'] );
2649
+        $display   = $args['display'];
2650
+    } else {
2651
+        $display = null;
2652
+    }
2653
+    if ( ! empty( $args['display_md'] ) && $args['display_md'] !== '' ) {
2654
+        $classes[]  = sanitize_html_class( $args['display_md'] );
2655
+        $display_md = $args['display_md'];
2656
+    } else {
2657
+        $display_md = null;
2658
+    }
2659
+    if ( ! empty( $args['display_lg'] ) && $args['display_lg'] !== '' ) {
2660
+        if ( $display == null && $display_md == null ) {
2661
+            $classes[] = sanitize_html_class( str_replace( '-lg', '', $args['display_lg'] ) );
2662
+        } else {
2663
+            $classes[] = sanitize_html_class( $args['display_lg'] );
2664
+        }
2665
+    }
2666
+
2667
+    // bgtus - background transparent until scroll
2668
+    if ( ! empty( $args['bgtus'] ) ) {
2669
+        $classes[] = sanitize_html_class( 'bg-transparent-until-scroll' );
2670
+    }
2671
+
2672
+    // cscos - change color scheme on scroll
2673
+    if ( ! empty( $args['bgtus'] ) && ! empty( $args['cscos'] ) ) {
2674
+        $classes[] = sanitize_html_class( 'color-scheme-flip-on-scroll' );
2675
+    }
2676
+
2677
+    // hover animations
2678
+    if ( ! empty( $args['hover_animations'] ) ) {
2679
+        $classes[] = sd_sanitize_html_classes( str_replace( ',', ' ', $args['hover_animations'] ) );
2680
+    }
2681
+
2682
+    // absolute_position
2683
+    if ( ! empty( $args['absolute_position'] ) ) {
2684
+        if ( 'top-left' === $args['absolute_position'] ) {
2685
+            $classes[] = 'start-0 top-0';
2686
+        } elseif ( 'top-center' === $args['absolute_position'] ) {
2687
+            $classes[] = 'start-50 top-0 translate-middle';
2688
+        } elseif ( 'top-right' === $args['absolute_position'] ) {
2689
+            $classes[] = 'end-0 top-0';
2690
+        } elseif ( 'center-left' === $args['absolute_position'] ) {
2691
+            $classes[] = 'start-0 top-50';
2692
+        } elseif ( 'center' === $args['absolute_position'] ) {
2693
+            $classes[] = 'start-50 top-50 translate-middle';
2694
+        } elseif ( 'center-right' === $args['absolute_position'] ) {
2695
+            $classes[] = 'end-0 top-50';
2696
+        } elseif ( 'bottom-left' === $args['absolute_position'] ) {
2697
+            $classes[] = 'start-0 bottom-0';
2698
+        } elseif ( 'bottom-center' === $args['absolute_position'] ) {
2699
+            $classes[] = 'start-50 bottom-0 translate-middle';
2700
+        } elseif ( 'bottom-right' === $args['absolute_position'] ) {
2701
+            $classes[] = 'end-0 bottom-0';
2702
+        }
2703
+    }
2704
+
2705
+    // build classes from build keys
2706
+    $build_keys = sd_get_class_build_keys();
2707
+    if ( ! empty( $build_keys ) ) {
2708
+        foreach ( $build_keys as $key ) {
2709
+
2710
+            if ( substr( $key, -4 ) == '-MTD' ) {
2711
+
2712
+                $k = str_replace( '-MTD', '', $key );
2713
+
2714
+                // Mobile, Tablet, Desktop
2715
+                if ( ! empty( $args[ $k ] ) && $args[ $k ] !== '' ) {
2716
+                    $classes[] = sanitize_html_class( $args[ $k ] );
2717
+                    $v         = $args[ $k ];
2718
+                } else {
2719
+                    $v = null;
2720
+                }
2721
+                if ( ! empty( $args[ $k . '_md' ] ) && $args[ $k . '_md' ] !== '' ) {
2722
+                    $classes[] = sanitize_html_class( $args[ $k . '_md' ] );
2723
+                    $v_md      = $args[ $k . '_md' ];
2724
+                } else {
2725
+                    $v_md = null;
2726
+                }
2727
+                if ( ! empty( $args[ $k . '_lg' ] ) && $args[ $k . '_lg' ] !== '' ) {
2728
+                    if ( $v == null && $v_md == null ) {
2729
+                        $classes[] = sanitize_html_class( str_replace( '-lg', '', $args[ $k . '_lg' ] ) );
2730
+                    } else {
2731
+                        $classes[] = sanitize_html_class( $args[ $k . '_lg' ] );
2732
+                    }
2733
+                }
2734
+            } else {
2735
+                if ( $key == 'font_size' && ! empty( $args[ $key ] ) && $args[ $key ] == 'custom' ) {
2736
+                    continue;
2737
+                }
2738
+                if ( ! empty( $args[ $key ] ) ) {
2739
+                    $classes[] = sd_sanitize_html_classes( $args[ $key ] );
2740
+                }
2741
+            }
2742
+        }
2743
+    }
2744
+
2745
+    if ( ! empty( $classes ) ) {
2746
+        $classes = array_unique( array_filter( array_map( 'trim', $classes ) ) );
2747
+    }
2748
+
2749
+    return implode( ' ', $classes );
2750 2750
 }
2751 2751
 
2752 2752
 /**
@@ -2758,90 +2758,90 @@  discard block
 block discarded – undo
2758 2758
  */
2759 2759
 function sd_build_aui_styles( $args ) {
2760 2760
 
2761
-	$styles = array();
2762
-
2763
-	// background color
2764
-	if ( ! empty( $args['bg'] ) && $args['bg'] !== '' ) {
2765
-		if ( $args['bg'] == 'custom-color' ) {
2766
-			$styles['background-color'] = $args['bg_color'];
2767
-		} elseif ( $args['bg'] == 'custom-gradient' ) {
2768
-			$styles['background-image'] = $args['bg_gradient'];
2769
-
2770
-			// use background on text.
2771
-			if ( ! empty( $args['bg_on_text'] ) && $args['bg_on_text'] ) {
2772
-				$styles['background-clip']         = 'text';
2773
-				$styles['-webkit-background-clip'] = 'text';
2774
-				$styles['text-fill-color']         = 'transparent';
2775
-				$styles['-webkit-text-fill-color'] = 'transparent';
2776
-			}
2777
-		}
2778
-	}
2779
-
2780
-	if ( ! empty( $args['bg_image'] ) && $args['bg_image'] !== '' ) {
2781
-		$hasImage = true;
2782
-		if ( ! empty( $styles['background-color'] ) && $args['bg'] == 'custom-color' ) {
2783
-			$styles['background-image']      = 'url(' . $args['bg_image'] . ')';
2784
-			$styles['background-blend-mode'] = 'overlay';
2785
-		} elseif ( ! empty( $styles['background-image'] ) && $args['bg'] == 'custom-gradient' ) {
2786
-			$styles['background-image'] .= ',url(' . $args['bg_image'] . ')';
2787
-		} elseif ( ! empty( $args['bg'] ) && $args['bg'] != '' && $args['bg'] != 'transparent' ) {
2788
-			// do nothing as we alreay have a preset
2789
-			$hasImage = false;
2790
-		} else {
2791
-			$styles['background-image'] = 'url(' . $args['bg_image'] . ')';
2792
-		}
2793
-
2794
-		if ( $hasImage ) {
2795
-			$styles['background-size'] = 'cover';
2796
-
2797
-			if ( ! empty( $args['bg_image_fixed'] ) && $args['bg_image_fixed'] ) {
2798
-				$styles['background-attachment'] = 'fixed';
2799
-			}
2800
-		}
2801
-
2802
-		if ( $hasImage && ! empty( $args['bg_image_xy'] ) && ! empty( $args['bg_image_xy']['x'] ) ) {
2803
-			$styles['background-position'] = ( $args['bg_image_xy']['x'] * 100 ) . '% ' . ( $args['bg_image_xy']['y'] * 100 ) . '%';
2804
-		}
2805
-	}
2806
-
2807
-	// sticky offset top
2808
-	if ( ! empty( $args['sticky_offset_top'] ) && $args['sticky_offset_top'] !== '' ) {
2809
-		$styles['top'] = absint( $args['sticky_offset_top'] );
2810
-	}
2811
-
2812
-	// sticky offset bottom
2813
-	if ( ! empty( $args['sticky_offset_bottom'] ) && $args['sticky_offset_bottom'] !== '' ) {
2814
-		$styles['bottom'] = absint( $args['sticky_offset_bottom'] );
2815
-	}
2816
-
2817
-	// font size
2818
-	if ( ! empty( $args['font_size_custom'] ) && $args['font_size_custom'] !== '' ) {
2819
-		$styles['font-size'] = (float) $args['font_size_custom'] . 'rem';
2820
-	}
2821
-
2822
-	// font color
2823
-	if ( ! empty( $args['text_color_custom'] ) && $args['text_color_custom'] !== '' ) {
2824
-		$styles['color'] = esc_attr( $args['text_color_custom'] );
2825
-	}
2826
-
2827
-	// font line height
2828
-	if ( ! empty( $args['font_line_height'] ) && $args['font_line_height'] !== '' ) {
2829
-		$styles['line-height'] = esc_attr( $args['font_line_height'] );
2830
-	}
2831
-
2832
-	// max height
2833
-	if ( ! empty( $args['max_height'] ) && $args['max_height'] !== '' ) {
2834
-		$styles['max-height'] = esc_attr( $args['max_height'] );
2835
-	}
2836
-
2837
-	$style_string = '';
2838
-	if ( ! empty( $styles ) ) {
2839
-		foreach ( $styles as $key => $val ) {
2840
-			$style_string .= esc_attr( $key ) . ':' . esc_attr( $val ) . ';';
2841
-		}
2842
-	}
2843
-
2844
-	return $style_string;
2761
+    $styles = array();
2762
+
2763
+    // background color
2764
+    if ( ! empty( $args['bg'] ) && $args['bg'] !== '' ) {
2765
+        if ( $args['bg'] == 'custom-color' ) {
2766
+            $styles['background-color'] = $args['bg_color'];
2767
+        } elseif ( $args['bg'] == 'custom-gradient' ) {
2768
+            $styles['background-image'] = $args['bg_gradient'];
2769
+
2770
+            // use background on text.
2771
+            if ( ! empty( $args['bg_on_text'] ) && $args['bg_on_text'] ) {
2772
+                $styles['background-clip']         = 'text';
2773
+                $styles['-webkit-background-clip'] = 'text';
2774
+                $styles['text-fill-color']         = 'transparent';
2775
+                $styles['-webkit-text-fill-color'] = 'transparent';
2776
+            }
2777
+        }
2778
+    }
2779
+
2780
+    if ( ! empty( $args['bg_image'] ) && $args['bg_image'] !== '' ) {
2781
+        $hasImage = true;
2782
+        if ( ! empty( $styles['background-color'] ) && $args['bg'] == 'custom-color' ) {
2783
+            $styles['background-image']      = 'url(' . $args['bg_image'] . ')';
2784
+            $styles['background-blend-mode'] = 'overlay';
2785
+        } elseif ( ! empty( $styles['background-image'] ) && $args['bg'] == 'custom-gradient' ) {
2786
+            $styles['background-image'] .= ',url(' . $args['bg_image'] . ')';
2787
+        } elseif ( ! empty( $args['bg'] ) && $args['bg'] != '' && $args['bg'] != 'transparent' ) {
2788
+            // do nothing as we alreay have a preset
2789
+            $hasImage = false;
2790
+        } else {
2791
+            $styles['background-image'] = 'url(' . $args['bg_image'] . ')';
2792
+        }
2793
+
2794
+        if ( $hasImage ) {
2795
+            $styles['background-size'] = 'cover';
2796
+
2797
+            if ( ! empty( $args['bg_image_fixed'] ) && $args['bg_image_fixed'] ) {
2798
+                $styles['background-attachment'] = 'fixed';
2799
+            }
2800
+        }
2801
+
2802
+        if ( $hasImage && ! empty( $args['bg_image_xy'] ) && ! empty( $args['bg_image_xy']['x'] ) ) {
2803
+            $styles['background-position'] = ( $args['bg_image_xy']['x'] * 100 ) . '% ' . ( $args['bg_image_xy']['y'] * 100 ) . '%';
2804
+        }
2805
+    }
2806
+
2807
+    // sticky offset top
2808
+    if ( ! empty( $args['sticky_offset_top'] ) && $args['sticky_offset_top'] !== '' ) {
2809
+        $styles['top'] = absint( $args['sticky_offset_top'] );
2810
+    }
2811
+
2812
+    // sticky offset bottom
2813
+    if ( ! empty( $args['sticky_offset_bottom'] ) && $args['sticky_offset_bottom'] !== '' ) {
2814
+        $styles['bottom'] = absint( $args['sticky_offset_bottom'] );
2815
+    }
2816
+
2817
+    // font size
2818
+    if ( ! empty( $args['font_size_custom'] ) && $args['font_size_custom'] !== '' ) {
2819
+        $styles['font-size'] = (float) $args['font_size_custom'] . 'rem';
2820
+    }
2821
+
2822
+    // font color
2823
+    if ( ! empty( $args['text_color_custom'] ) && $args['text_color_custom'] !== '' ) {
2824
+        $styles['color'] = esc_attr( $args['text_color_custom'] );
2825
+    }
2826
+
2827
+    // font line height
2828
+    if ( ! empty( $args['font_line_height'] ) && $args['font_line_height'] !== '' ) {
2829
+        $styles['line-height'] = esc_attr( $args['font_line_height'] );
2830
+    }
2831
+
2832
+    // max height
2833
+    if ( ! empty( $args['max_height'] ) && $args['max_height'] !== '' ) {
2834
+        $styles['max-height'] = esc_attr( $args['max_height'] );
2835
+    }
2836
+
2837
+    $style_string = '';
2838
+    if ( ! empty( $styles ) ) {
2839
+        foreach ( $styles as $key => $val ) {
2840
+            $style_string .= esc_attr( $key ) . ':' . esc_attr( $val ) . ';';
2841
+        }
2842
+    }
2843
+
2844
+    return $style_string;
2845 2845
 
2846 2846
 }
2847 2847
 
@@ -2854,34 +2854,34 @@  discard block
 block discarded – undo
2854 2854
  * @return string
2855 2855
  */
2856 2856
 function sd_build_hover_styles( $args, $is_preview = false ) {
2857
-	$rules = '';
2858
-	// text color
2859
-	if ( ! empty( $args['styleid'] ) ) {
2860
-		$styleid = $is_preview ? 'html .editor-styles-wrapper .' . esc_attr( $args['styleid'] ) : 'html .' . esc_attr( $args['styleid'] );
2861
-
2862
-		// text
2863
-		if ( ! empty( $args['text_color_hover'] ) ) {
2864
-			$key    = 'custom' === $args['text_color_hover'] && ! empty( $args['text_color_hover_custom'] ) ? 'text_color_hover_custom' : 'text_color_hover';
2865
-			$color  = sd_get_color_from_var( $args[ $key ] );
2866
-			$rules .= $styleid . ':hover {color: ' . $color . ' !important;} ';
2867
-		}
2868
-
2869
-		// bg
2870
-		if ( ! empty( $args['bg_hover'] ) ) {
2871
-			if ( 'custom-gradient' === $args['bg_hover'] ) {
2872
-				$color  = $args['bg_hover_gradient'];
2873
-				$rules .= $styleid . ':hover {background-image: ' . $color . ' !important;} ';
2874
-				$rules .= $styleid . '.btn:hover {border-color: transparent !important;} ';
2875
-			} else {
2876
-				$key    = 'custom-color' === $args['bg_hover'] ? 'bg_hover_color' : 'bg_hover';
2877
-				$color  = sd_get_color_from_var( $args[ $key ] );
2878
-				$rules .= $styleid . ':hover {background: ' . $color . ' !important;} ';
2879
-				$rules .= $styleid . '.btn:hover {border-color: ' . $color . ' !important;} ';
2880
-			}
2881
-		}
2882
-	}
2883
-
2884
-	return $rules ? '<style>' . $rules . '</style>' : '';
2857
+    $rules = '';
2858
+    // text color
2859
+    if ( ! empty( $args['styleid'] ) ) {
2860
+        $styleid = $is_preview ? 'html .editor-styles-wrapper .' . esc_attr( $args['styleid'] ) : 'html .' . esc_attr( $args['styleid'] );
2861
+
2862
+        // text
2863
+        if ( ! empty( $args['text_color_hover'] ) ) {
2864
+            $key    = 'custom' === $args['text_color_hover'] && ! empty( $args['text_color_hover_custom'] ) ? 'text_color_hover_custom' : 'text_color_hover';
2865
+            $color  = sd_get_color_from_var( $args[ $key ] );
2866
+            $rules .= $styleid . ':hover {color: ' . $color . ' !important;} ';
2867
+        }
2868
+
2869
+        // bg
2870
+        if ( ! empty( $args['bg_hover'] ) ) {
2871
+            if ( 'custom-gradient' === $args['bg_hover'] ) {
2872
+                $color  = $args['bg_hover_gradient'];
2873
+                $rules .= $styleid . ':hover {background-image: ' . $color . ' !important;} ';
2874
+                $rules .= $styleid . '.btn:hover {border-color: transparent !important;} ';
2875
+            } else {
2876
+                $key    = 'custom-color' === $args['bg_hover'] ? 'bg_hover_color' : 'bg_hover';
2877
+                $color  = sd_get_color_from_var( $args[ $key ] );
2878
+                $rules .= $styleid . ':hover {background: ' . $color . ' !important;} ';
2879
+                $rules .= $styleid . '.btn:hover {border-color: ' . $color . ' !important;} ';
2880
+            }
2881
+        }
2882
+    }
2883
+
2884
+    return $rules ? '<style>' . $rules . '</style>' : '';
2885 2885
 }
2886 2886
 
2887 2887
 /**
@@ -2893,12 +2893,12 @@  discard block
 block discarded – undo
2893 2893
  */
2894 2894
 function sd_get_color_from_var( $var ) {
2895 2895
 
2896
-	//sanitize_hex_color() @todo this does not cover transparency
2897
-	if ( strpos( $var, '#' ) === false ) {
2898
-		$var = defined( 'BLOCKSTRAP_BLOCKS_VERSION' ) ? 'var(--wp--preset--color--' . esc_attr( $var ) . ')' : 'var(--' . esc_attr( $var ) . ')';
2899
-	}
2896
+    //sanitize_hex_color() @todo this does not cover transparency
2897
+    if ( strpos( $var, '#' ) === false ) {
2898
+        $var = defined( 'BLOCKSTRAP_BLOCKS_VERSION' ) ? 'var(--wp--preset--color--' . esc_attr( $var ) . ')' : 'var(--' . esc_attr( $var ) . ')';
2899
+    }
2900 2900
 
2901
-	return $var;
2901
+    return $var;
2902 2902
 }
2903 2903
 
2904 2904
 /**
@@ -2910,19 +2910,19 @@  discard block
 block discarded – undo
2910 2910
  * @return string
2911 2911
  */
2912 2912
 function sd_sanitize_html_classes( $classes, $sep = ' ' ) {
2913
-	$return = '';
2913
+    $return = '';
2914 2914
 
2915
-	if ( ! is_array( $classes ) ) {
2916
-		$classes = explode( $sep, $classes );
2917
-	}
2915
+    if ( ! is_array( $classes ) ) {
2916
+        $classes = explode( $sep, $classes );
2917
+    }
2918 2918
 
2919
-	if ( ! empty( $classes ) ) {
2920
-		foreach ( $classes as $class ) {
2921
-			$return .= sanitize_html_class( $class ) . ' ';
2922
-		}
2923
-	}
2919
+    if ( ! empty( $classes ) ) {
2920
+        foreach ( $classes as $class ) {
2921
+            $return .= sanitize_html_class( $class ) . ' ';
2922
+        }
2923
+    }
2924 2924
 
2925
-	return $return;
2925
+    return $return;
2926 2926
 }
2927 2927
 
2928 2928
 
@@ -2932,40 +2932,40 @@  discard block
 block discarded – undo
2932 2932
  * @return void
2933 2933
  */
2934 2934
 function sd_get_class_build_keys() {
2935
-	$keys = array(
2936
-		'container',
2937
-		'position',
2938
-		'flex_direction',
2939
-		'shadow',
2940
-		'rounded',
2941
-		'nav_style',
2942
-		'horizontal_alignment',
2943
-		'nav_fill',
2944
-		'width',
2945
-		'font_weight',
2946
-		'font_size',
2947
-		'font_case',
2948
-		'css_class',
2949
-		'flex_align_items-MTD',
2950
-		'flex_justify_content-MTD',
2951
-		'flex_align_self-MTD',
2952
-		'flex_order-MTD',
2953
-		'styleid',
2954
-		'border_opacity',
2955
-		'border_width',
2956
-		'border_type',
2957
-		'opacity',
2958
-		'zindex',
2959
-		'flex_wrap-MTD',
2960
-		'h100',
2961
-		'overflow',
2962
-		'scrollbars',
2963
-		'float-MTD',
2964
-		'height-MTD',
2965
-		'width-MTD'
2966
-	);
2967
-
2968
-	return apply_filters( 'sd_class_build_keys', $keys );
2935
+    $keys = array(
2936
+        'container',
2937
+        'position',
2938
+        'flex_direction',
2939
+        'shadow',
2940
+        'rounded',
2941
+        'nav_style',
2942
+        'horizontal_alignment',
2943
+        'nav_fill',
2944
+        'width',
2945
+        'font_weight',
2946
+        'font_size',
2947
+        'font_case',
2948
+        'css_class',
2949
+        'flex_align_items-MTD',
2950
+        'flex_justify_content-MTD',
2951
+        'flex_align_self-MTD',
2952
+        'flex_order-MTD',
2953
+        'styleid',
2954
+        'border_opacity',
2955
+        'border_width',
2956
+        'border_type',
2957
+        'opacity',
2958
+        'zindex',
2959
+        'flex_wrap-MTD',
2960
+        'h100',
2961
+        'overflow',
2962
+        'scrollbars',
2963
+        'float-MTD',
2964
+        'height-MTD',
2965
+        'width-MTD'
2966
+    );
2967
+
2968
+    return apply_filters( 'sd_class_build_keys', $keys );
2969 2969
 }
2970 2970
 
2971 2971
 /**
@@ -2977,18 +2977,18 @@  discard block
 block discarded – undo
2977 2977
  * @return array
2978 2978
  */
2979 2979
 function sd_get_visibility_conditions_input( $type = 'visibility_conditions', $overwrite = array() ) {
2980
-	$defaults = array(
2981
-		'type'         => 'visibility_conditions',
2982
-		'title'        => __( 'Block Visibility', 'ayecode-connect' ),
2983
-		'button_title' => __( 'Set Block Visibility', 'ayecode-connect' ),
2984
-		'default'      => '',
2985
-		'desc_tip'     => true,
2986
-		'group'        => __( 'Visibility Conditions', 'ayecode-connect' ),
2987
-	);
2980
+    $defaults = array(
2981
+        'type'         => 'visibility_conditions',
2982
+        'title'        => __( 'Block Visibility', 'ayecode-connect' ),
2983
+        'button_title' => __( 'Set Block Visibility', 'ayecode-connect' ),
2984
+        'default'      => '',
2985
+        'desc_tip'     => true,
2986
+        'group'        => __( 'Visibility Conditions', 'ayecode-connect' ),
2987
+    );
2988 2988
 
2989
-	$input = wp_parse_args( $overwrite, $defaults );
2989
+    $input = wp_parse_args( $overwrite, $defaults );
2990 2990
 
2991
-	return $input;
2991
+    return $input;
2992 2992
 }
2993 2993
 
2994 2994
 /**
@@ -3000,24 +3000,24 @@  discard block
 block discarded – undo
3000 3000
  * @return array An array of roles.
3001 3001
  */
3002 3002
 function sd_user_roles_options( $exclude = array() ) {
3003
-	$user_roles = array();
3003
+    $user_roles = array();
3004 3004
 
3005
-	if ( !function_exists('get_editable_roles') ) {
3006
-		require_once( ABSPATH . '/wp-admin/includes/user.php' );
3007
-	}
3005
+    if ( !function_exists('get_editable_roles') ) {
3006
+        require_once( ABSPATH . '/wp-admin/includes/user.php' );
3007
+    }
3008 3008
 
3009
-	$roles = get_editable_roles();
3009
+    $roles = get_editable_roles();
3010 3010
 
3011
-	foreach ( $roles as $role => $data ) {
3012
-		if ( ! ( ! empty( $exclude ) && in_array( $role, $exclude ) ) ) {
3013
-			$user_roles[ esc_attr( $role ) ] = translate_user_role( $data['name'] );
3014
-		}
3015
-	}
3011
+    foreach ( $roles as $role => $data ) {
3012
+        if ( ! ( ! empty( $exclude ) && in_array( $role, $exclude ) ) ) {
3013
+            $user_roles[ esc_attr( $role ) ] = translate_user_role( $data['name'] );
3014
+        }
3015
+    }
3016 3016
 
3017
-	// Logged out as a custom role.
3018
-	$user_roles['logged_out'] = __( 'Guest (logged out)', 'ayecode-connect' );
3017
+    // Logged out as a custom role.
3018
+    $user_roles['logged_out'] = __( 'Guest (logged out)', 'ayecode-connect' );
3019 3019
 
3020
-	return apply_filters( 'sd_user_roles_options', $user_roles );
3020
+    return apply_filters( 'sd_user_roles_options', $user_roles );
3021 3021
 }
3022 3022
 
3023 3023
 /**
@@ -3028,18 +3028,18 @@  discard block
 block discarded – undo
3028 3028
  * @return array Rule options.
3029 3029
  */
3030 3030
 function sd_visibility_rules_options() {
3031
-	$options = array(
3032
-		'logged_in'  => __( 'Logged In', 'ayecode-connect' ),
3033
-		'logged_out' => __( 'Logged Out', 'ayecode-connect' ),
3034
-		'post_author'  => __( 'Post Author', 'ayecode-connect' ),
3035
-		'user_roles' => __( 'Specific User Roles', 'ayecode-connect' )
3036
-	);
3031
+    $options = array(
3032
+        'logged_in'  => __( 'Logged In', 'ayecode-connect' ),
3033
+        'logged_out' => __( 'Logged Out', 'ayecode-connect' ),
3034
+        'post_author'  => __( 'Post Author', 'ayecode-connect' ),
3035
+        'user_roles' => __( 'Specific User Roles', 'ayecode-connect' )
3036
+    );
3037 3037
 
3038
-	if ( class_exists( 'GeoDirectory' ) ) {
3039
-		$options['gd_field'] = __( 'GD Field', 'ayecode-connect' );
3040
-	}
3038
+    if ( class_exists( 'GeoDirectory' ) ) {
3039
+        $options['gd_field'] = __( 'GD Field', 'ayecode-connect' );
3040
+    }
3041 3041
 
3042
-	return apply_filters( 'sd_visibility_rules_options', $options );
3042
+    return apply_filters( 'sd_visibility_rules_options', $options );
3043 3043
 }
3044 3044
 
3045 3045
 /**
@@ -3048,39 +3048,39 @@  discard block
 block discarded – undo
3048 3048
  * @return array
3049 3049
  */
3050 3050
 function sd_visibility_gd_field_options() {
3051
-	$fields = geodir_post_custom_fields( '', 'all', 'all', 'none' );
3051
+    $fields = geodir_post_custom_fields( '', 'all', 'all', 'none' );
3052 3052
 
3053
-	$keys = array();
3054
-	if ( ! empty( $fields ) ) {
3055
-		foreach( $fields as $field ) {
3056
-			if ( apply_filters( 'geodir_badge_field_skip_key', false, $field ) ) {
3057
-				continue;
3058
-			}
3053
+    $keys = array();
3054
+    if ( ! empty( $fields ) ) {
3055
+        foreach( $fields as $field ) {
3056
+            if ( apply_filters( 'geodir_badge_field_skip_key', false, $field ) ) {
3057
+                continue;
3058
+            }
3059 3059
 
3060
-			$keys[ $field['htmlvar_name'] ] = $field['htmlvar_name'] . ' ( ' . __( $field['admin_title'], 'geodirectory' ) . ' )';
3060
+            $keys[ $field['htmlvar_name'] ] = $field['htmlvar_name'] . ' ( ' . __( $field['admin_title'], 'geodirectory' ) . ' )';
3061 3061
 
3062
-			// Extra address fields
3063
-			if ( $field['htmlvar_name'] == 'address' && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3064
-				foreach ( $address_fields as $_field => $args ) {
3065
-					if ( $_field != 'map_directions' && $_field != 'street' ) {
3066
-						$keys[ $_field ] = $_field . ' ( ' . $args['frontend_title'] . ' )';
3067
-					}
3068
-				}
3069
-			}
3070
-		}
3071
-	}
3062
+            // Extra address fields
3063
+            if ( $field['htmlvar_name'] == 'address' && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3064
+                foreach ( $address_fields as $_field => $args ) {
3065
+                    if ( $_field != 'map_directions' && $_field != 'street' ) {
3066
+                        $keys[ $_field ] = $_field . ' ( ' . $args['frontend_title'] . ' )';
3067
+                    }
3068
+                }
3069
+            }
3070
+        }
3071
+    }
3072 3072
 
3073
-	$standard_fields = sd_visibility_gd_standard_field_options();
3073
+    $standard_fields = sd_visibility_gd_standard_field_options();
3074 3074
 
3075
-	if ( ! empty( $standard_fields ) ) {
3076
-		foreach ( $standard_fields as $key => $option ) {
3077
-			$keys[ $key ] = $option;
3078
-		}
3079
-	}
3075
+    if ( ! empty( $standard_fields ) ) {
3076
+        foreach ( $standard_fields as $key => $option ) {
3077
+            $keys[ $key ] = $option;
3078
+        }
3079
+    }
3080 3080
 
3081
-	$options = apply_filters( 'geodir_badge_field_keys', $keys );
3081
+    $options = apply_filters( 'geodir_badge_field_keys', $keys );
3082 3082
 
3083
-	return apply_filters( 'sd_visibility_gd_field_options', $options );
3083
+    return apply_filters( 'sd_visibility_gd_field_options', $options );
3084 3084
 }
3085 3085
 
3086 3086
 /**
@@ -3089,17 +3089,17 @@  discard block
 block discarded – undo
3089 3089
  * @return array
3090 3090
  */
3091 3091
 function sd_visibility_gd_standard_field_options( $post_type = '' ) {
3092
-	$fields = sd_visibility_gd_standard_fields( $post_type );
3092
+    $fields = sd_visibility_gd_standard_fields( $post_type );
3093 3093
 
3094
-	$options = array();
3094
+    $options = array();
3095 3095
 
3096
-	foreach ( $fields as $key => $field ) {
3097
-		if ( ! empty( $field['frontend_title'] ) ) {
3098
-			$options[ $key ] = $key . ' ( ' . $field['frontend_title'] . ' )';
3099
-		}
3100
-	}
3096
+    foreach ( $fields as $key => $field ) {
3097
+        if ( ! empty( $field['frontend_title'] ) ) {
3098
+            $options[ $key ] = $key . ' ( ' . $field['frontend_title'] . ' )';
3099
+        }
3100
+    }
3101 3101
 
3102
-	return apply_filters( 'sd_visibility_gd_standard_field_options', $options, $fields );
3102
+    return apply_filters( 'sd_visibility_gd_standard_field_options', $options, $fields );
3103 3103
 }
3104 3104
 
3105 3105
 /**
@@ -3108,17 +3108,17 @@  discard block
 block discarded – undo
3108 3108
  * @return array
3109 3109
  */
3110 3110
 function sd_visibility_gd_standard_fields( $post_type = '' ) {
3111
-	$standard_fields = geodir_post_meta_standard_fields( $post_type );
3111
+    $standard_fields = geodir_post_meta_standard_fields( $post_type );
3112 3112
 
3113
-	$fields = array();
3113
+    $fields = array();
3114 3114
 
3115
-	foreach ( $standard_fields as $key => $field ) {
3116
-		if ( $key != 'post_link' && strpos( $key, 'event' ) === false && ! empty( $field['frontend_title'] ) ) {
3117
-			$fields[ $key ] = $field;
3118
-		}
3119
-	}
3115
+    foreach ( $standard_fields as $key => $field ) {
3116
+        if ( $key != 'post_link' && strpos( $key, 'event' ) === false && ! empty( $field['frontend_title'] ) ) {
3117
+            $fields[ $key ] = $field;
3118
+        }
3119
+    }
3120 3120
 
3121
-	return apply_filters( 'sd_visibility_gd_standard_fields', $fields );
3121
+    return apply_filters( 'sd_visibility_gd_standard_fields', $fields );
3122 3122
 }
3123 3123
 
3124 3124
 /**
@@ -3127,18 +3127,18 @@  discard block
 block discarded – undo
3127 3127
  * @return array
3128 3128
  */
3129 3129
 function sd_visibility_field_condition_options(){
3130
-	$options = array(
3131
-		'is_empty' => __( 'is empty', 'ayecode-connect' ),
3132
-		'is_not_empty' => __( 'is not empty', 'ayecode-connect' ),
3133
-		'is_equal' => __( 'is equal', 'ayecode-connect' ),
3134
-		'is_not_equal' => __( 'is not equal', 'ayecode-connect' ),
3135
-		'is_greater_than' => __( 'is greater than', 'ayecode-connect' ),
3136
-		'is_less_than' => __( 'is less than', 'ayecode-connect' ),
3137
-		'is_contains' => __( 'is contains', 'ayecode-connect' ),
3138
-		'is_not_contains' => __( 'is not contains', 'ayecode-connect' ),
3139
-	);
3130
+    $options = array(
3131
+        'is_empty' => __( 'is empty', 'ayecode-connect' ),
3132
+        'is_not_empty' => __( 'is not empty', 'ayecode-connect' ),
3133
+        'is_equal' => __( 'is equal', 'ayecode-connect' ),
3134
+        'is_not_equal' => __( 'is not equal', 'ayecode-connect' ),
3135
+        'is_greater_than' => __( 'is greater than', 'ayecode-connect' ),
3136
+        'is_less_than' => __( 'is less than', 'ayecode-connect' ),
3137
+        'is_contains' => __( 'is contains', 'ayecode-connect' ),
3138
+        'is_not_contains' => __( 'is not contains', 'ayecode-connect' ),
3139
+    );
3140 3140
 
3141
-	return apply_filters( 'sd_visibility_field_condition_options', $options );
3141
+    return apply_filters( 'sd_visibility_field_condition_options', $options );
3142 3142
 }
3143 3143
 
3144 3144
 /**
@@ -3149,15 +3149,15 @@  discard block
 block discarded – undo
3149 3149
  * @return array Template type options.
3150 3150
  */
3151 3151
 function sd_visibility_output_options() {
3152
-	$options = array(
3153
-		''              => __( 'Show Block', 'ayecode-connect' ),
3154
-		'hide'          => __( 'Hide Block', 'ayecode-connect' ),
3155
-		'message'       => __( 'Show Custom Message', 'ayecode-connect' ),
3156
-		'page'          => __( 'Show Page Content', 'ayecode-connect' ),
3157
-		'template_part' => __( 'Show Template Part', 'ayecode-connect' ),
3158
-	);
3152
+    $options = array(
3153
+        ''              => __( 'Show Block', 'ayecode-connect' ),
3154
+        'hide'          => __( 'Hide Block', 'ayecode-connect' ),
3155
+        'message'       => __( 'Show Custom Message', 'ayecode-connect' ),
3156
+        'page'          => __( 'Show Page Content', 'ayecode-connect' ),
3157
+        'template_part' => __( 'Show Template Part', 'ayecode-connect' ),
3158
+    );
3159 3159
 
3160
-	return apply_filters( 'sd_visibility_output_options', $options );
3160
+    return apply_filters( 'sd_visibility_output_options', $options );
3161 3161
 }
3162 3162
 
3163 3163
 /**
@@ -3169,73 +3169,73 @@  discard block
 block discarded – undo
3169 3169
  * @return array Template page options.
3170 3170
  */
3171 3171
 function sd_template_page_options( $args = array() ) {
3172
-	global $wpdb, $sd_tmpl_page_options;
3172
+    global $wpdb, $sd_tmpl_page_options;
3173 3173
 
3174
-	$defaults = array(
3175
-		'nocache' => false,
3176
-		'with_slug' => false,
3177
-		'default_label' => __( 'Select Page...', 'ayecode-connect' )
3178
-	);
3174
+    $defaults = array(
3175
+        'nocache' => false,
3176
+        'with_slug' => false,
3177
+        'default_label' => __( 'Select Page...', 'ayecode-connect' )
3178
+    );
3179 3179
 
3180
-	$args = wp_parse_args( $args, $defaults );
3180
+    $args = wp_parse_args( $args, $defaults );
3181 3181
 
3182
-	if ( ! empty( $sd_tmpl_page_options ) && empty( $args['nocache'] ) ) {
3183
-		return $sd_tmpl_page_options;
3184
-	}
3182
+    if ( ! empty( $sd_tmpl_page_options ) && empty( $args['nocache'] ) ) {
3183
+        return $sd_tmpl_page_options;
3184
+    }
3185 3185
 
3186
-	$exclude_pages = array();
3187
-	if ( $page_on_front = get_option( 'page_on_front' ) ) {
3188
-		$exclude_pages[] = $page_on_front;
3189
-	}
3186
+    $exclude_pages = array();
3187
+    if ( $page_on_front = get_option( 'page_on_front' ) ) {
3188
+        $exclude_pages[] = $page_on_front;
3189
+    }
3190 3190
 
3191
-	if ( $page_for_posts = get_option( 'page_for_posts' ) ) {
3192
-		$exclude_pages[] = $page_for_posts;
3193
-	}
3191
+    if ( $page_for_posts = get_option( 'page_for_posts' ) ) {
3192
+        $exclude_pages[] = $page_for_posts;
3193
+    }
3194 3194
 
3195
-	$exclude_pages_placeholders = '';
3196
-	if ( ! empty( $exclude_pages ) ) {
3197
-		// Sanitize the array of excluded pages and implode it for the SQL query.
3198
-		$exclude_pages_placeholders = implode( ',', array_fill( 0, count( $exclude_pages ), '%d' ) );
3199
-	}
3195
+    $exclude_pages_placeholders = '';
3196
+    if ( ! empty( $exclude_pages ) ) {
3197
+        // Sanitize the array of excluded pages and implode it for the SQL query.
3198
+        $exclude_pages_placeholders = implode( ',', array_fill( 0, count( $exclude_pages ), '%d' ) );
3199
+    }
3200 3200
 
3201
-	// Prepare the base SQL query.
3202
-	$sql = "SELECT ID, post_title, post_name FROM " . $wpdb->posts . " WHERE post_type = 'page' AND post_status = 'publish'";
3201
+    // Prepare the base SQL query.
3202
+    $sql = "SELECT ID, post_title, post_name FROM " . $wpdb->posts . " WHERE post_type = 'page' AND post_status = 'publish'";
3203 3203
 
3204
-	// Add the exclusion if there are pages to exclude
3205
-	if ( ! empty( $exclude_pages ) ) {
3206
-		$sql .= " AND ID NOT IN ($exclude_pages_placeholders)";
3207
-	}
3204
+    // Add the exclusion if there are pages to exclude
3205
+    if ( ! empty( $exclude_pages ) ) {
3206
+        $sql .= " AND ID NOT IN ($exclude_pages_placeholders)";
3207
+    }
3208 3208
 
3209
-	// Add sorting.
3210
-	$sql .= " ORDER BY post_title ASC";
3209
+    // Add sorting.
3210
+    $sql .= " ORDER BY post_title ASC";
3211 3211
 
3212
-	// Add a limit.
3213
-	$limit = (int) apply_filters( 'sd_template_page_options_limit', 500, $args );
3212
+    // Add a limit.
3213
+    $limit = (int) apply_filters( 'sd_template_page_options_limit', 500, $args );
3214 3214
 
3215
-	if ( $limit > 0 ) {
3216
-		$sql .= " LIMIT " . (int) $limit;
3217
-	}
3215
+    if ( $limit > 0 ) {
3216
+        $sql .= " LIMIT " . (int) $limit;
3217
+    }
3218 3218
 
3219
-	// Prepare the SQL query to include the excluded pages only if we have placeholders.
3220
-	$pages = $exclude_pages_placeholders ? $wpdb->get_results( $wpdb->prepare( $sql, ...$exclude_pages ) ) : $wpdb->get_results( $sql );
3219
+    // Prepare the SQL query to include the excluded pages only if we have placeholders.
3220
+    $pages = $exclude_pages_placeholders ? $wpdb->get_results( $wpdb->prepare( $sql, ...$exclude_pages ) ) : $wpdb->get_results( $sql );
3221 3221
 
3222
-	if ( ! empty( $args['default_label'] ) ) {
3223
-		$options = array( '' => $args['default_label'] );
3224
-	} else {
3225
-		$options = array();
3226
-	}
3222
+    if ( ! empty( $args['default_label'] ) ) {
3223
+        $options = array( '' => $args['default_label'] );
3224
+    } else {
3225
+        $options = array();
3226
+    }
3227 3227
 
3228
-	if ( ! empty( $pages ) ) {
3229
-		foreach ( $pages as $page ) {
3230
-			$title = ! empty( $args['with_slug'] ) ? $page->post_title . ' (' . $page->post_name . ')' : ( $page->post_title . ' (#' . $page->ID . ')' );
3228
+    if ( ! empty( $pages ) ) {
3229
+        foreach ( $pages as $page ) {
3230
+            $title = ! empty( $args['with_slug'] ) ? $page->post_title . ' (' . $page->post_name . ')' : ( $page->post_title . ' (#' . $page->ID . ')' );
3231 3231
 
3232
-			$options[ $page->ID ] = $title;
3233
-		}
3234
-	}
3232
+            $options[ $page->ID ] = $title;
3233
+        }
3234
+    }
3235 3235
 
3236
-	$sd_tmpl_page_options = $options;
3236
+    $sd_tmpl_page_options = $options;
3237 3237
 
3238
-	return apply_filters( 'sd_template_page_options', $options, $args );
3238
+    return apply_filters( 'sd_template_page_options', $options, $args );
3239 3239
 }
3240 3240
 
3241 3241
 /**
@@ -3247,25 +3247,25 @@  discard block
 block discarded – undo
3247 3247
  * @return array Template part options.
3248 3248
  */
3249 3249
 function sd_template_part_options( $args = array() ) {
3250
-	global $sd_tmpl_part_options;
3250
+    global $sd_tmpl_part_options;
3251 3251
 
3252
-	if ( ! empty( $sd_tmpl_part_options ) ) {
3253
-		return $sd_tmpl_part_options;
3254
-	}
3252
+    if ( ! empty( $sd_tmpl_part_options ) ) {
3253
+        return $sd_tmpl_part_options;
3254
+    }
3255 3255
 
3256
-	$options = array( '' => __( 'Select Template Part...', 'ayecode-connect' ) );
3256
+    $options = array( '' => __( 'Select Template Part...', 'ayecode-connect' ) );
3257 3257
 
3258
-	$parts = get_block_templates( array(), 'wp_template_part' );
3258
+    $parts = get_block_templates( array(), 'wp_template_part' );
3259 3259
 
3260
-	if ( ! empty( $parts ) ) {
3261
-		foreach ( $parts as $part ) {
3262
-			$options[ $part->slug ] = $part->title . ' (#' . $part->slug . ')';
3263
-		}
3264
-	}
3260
+    if ( ! empty( $parts ) ) {
3261
+        foreach ( $parts as $part ) {
3262
+            $options[ $part->slug ] = $part->title . ' (#' . $part->slug . ')';
3263
+        }
3264
+    }
3265 3265
 
3266
-	$sd_tmpl_part_options = $options;
3266
+    $sd_tmpl_part_options = $options;
3267 3267
 
3268
-	return apply_filters( 'sd_template_part_options', $options, $args );
3268
+    return apply_filters( 'sd_template_part_options', $options, $args );
3269 3269
 }
3270 3270
 
3271 3271
 /**
@@ -3277,25 +3277,25 @@  discard block
 block discarded – undo
3277 3277
  * @return array Template part object.
3278 3278
  */
3279 3279
 function sd_get_template_part_by_slug( $slug ) {
3280
-	global $bs_tmpl_part_by_slug;
3280
+    global $bs_tmpl_part_by_slug;
3281 3281
 
3282
-	if ( empty( $bs_tmpl_part_by_slug ) ) {
3283
-		$bs_tmpl_part_by_slug = array();
3284
-	}
3282
+    if ( empty( $bs_tmpl_part_by_slug ) ) {
3283
+        $bs_tmpl_part_by_slug = array();
3284
+    }
3285 3285
 
3286
-	if ( isset( $bs_tmpl_part_by_slug[ $slug ] ) ) {
3287
-		return $bs_tmpl_part_by_slug[ $slug ];
3288
-	}
3286
+    if ( isset( $bs_tmpl_part_by_slug[ $slug ] ) ) {
3287
+        return $bs_tmpl_part_by_slug[ $slug ];
3288
+    }
3289 3289
 
3290
-	$template_query = get_block_templates( array( 'slug__in' => array( $slug ) ), 'wp_template_part' );
3290
+    $template_query = get_block_templates( array( 'slug__in' => array( $slug ) ), 'wp_template_part' );
3291 3291
 
3292
-	$query_post = ! empty( $template_query ) ? $template_query[0] : array();
3292
+    $query_post = ! empty( $template_query ) ? $template_query[0] : array();
3293 3293
 
3294
-	$template_part = ! empty( $query_post ) && $query_post->status == 'publish' ? $query_post : array();
3294
+    $template_part = ! empty( $query_post ) && $query_post->status == 'publish' ? $query_post : array();
3295 3295
 
3296
-	$bs_tmpl_part_by_slug[ $slug ] = $template_part;
3296
+    $bs_tmpl_part_by_slug[ $slug ] = $template_part;
3297 3297
 
3298
-	return apply_filters( 'sd_get_template_part_by_slug', $template_part, $slug );
3298
+    return apply_filters( 'sd_get_template_part_by_slug', $template_part, $slug );
3299 3299
 }
3300 3300
 
3301 3301
 /**
@@ -3308,491 +3308,491 @@  discard block
 block discarded – undo
3308 3308
  * @param WP_Block $instance      The block instance.
3309 3309
  */
3310 3310
 function sd_render_block( $block_content, $block, $instance = '' ) {
3311
-	// No block visibility conditions set.
3312
-	if ( empty( $block['attrs']['visibility_conditions'] ) ) {
3313
-		return $block_content;
3314
-	}
3315
-
3316
-	$attributes = json_decode( $block['attrs']['visibility_conditions'], true );
3317
-	$rules = ! empty( $attributes ) ? sd_block_parse_rules( $attributes ) : array();
3318
-
3319
-	// No rules set.
3320
-	if ( empty( $rules ) ) {
3321
-		return $block_content;
3322
-	}
3323
-
3324
-	$check_rules = null;
3325
-	$_block_content = $block_content;
3326
-
3327
-	if ( ! empty( $rules ) && ( ! empty( $attributes['output'] ) || ! empty( $attributes['outputN'] ) ) ) {
3328
-		$check_rules = sd_block_check_rules( $rules );
3329
-
3330
-		if ( $check_rules ) {
3331
-			$output_condition = ! empty( $attributes['output'] ) ? $attributes['output'] : array();
3332
-		} else {
3333
-			$output_condition = ! empty( $attributes['outputN'] ) ? $attributes['outputN'] : array();
3334
-		}
3335
-
3336
-		if ( ! empty( $output_condition ) && ! empty( $output_condition['type'] ) ) {
3337
-			switch ( $output_condition['type'] ) {
3338
-				case 'hide':
3339
-					$valid_type = true;
3340
-					$content = '';
3341
-
3342
-					break;
3343
-				case 'message':
3344
-					$valid_type = true;
3345
-
3346
-					if ( isset( $output_condition['message'] ) ) {
3347
-						$content = $output_condition['message'] != '' ? __( stripslashes( $output_condition['message'] ), 'ayecode-connect' ) : $output_condition['message'];
3348
-
3349
-						if ( ! empty( $output_condition['message_type'] ) ) {
3350
-							$content = aui()->alert( array(
3351
-									'type'=> $output_condition['message_type'],
3352
-									'content'=> $content
3353
-								)
3354
-							);
3355
-						}
3356
-					}
3357
-
3358
-					break;
3359
-				case 'page':
3360
-					$valid_type = true;
3361
-
3362
-					$page_id = ! empty( $output_condition['page'] ) ? absint( $output_condition['page'] ) : 0;
3363
-					$content = sd_get_page_content( $page_id );
3364
-
3365
-					break;
3366
-				case 'template_part':
3367
-					$valid_type = true;
3368
-
3369
-					$template_part = ! empty( $output_condition['template_part'] ) ? $output_condition['template_part'] : '';
3370
-					$content = sd_get_template_part_content( $template_part );
3371
-
3372
-					break;
3373
-				default:
3374
-					$valid_type = false;
3375
-					break;
3376
-			}
3377
-
3378
-			if ( $valid_type ) {
3379
-				$block_content = '<div class="' . esc_attr( wp_get_block_default_classname( $instance->name ) ) . ' sd-block-has-rule">' . $content . '</div>';
3380
-			}
3381
-		}
3382
-	}
3383
-
3384
-	return apply_filters( 'sd_render_block_visibility_content', $block_content, $_block_content, $attributes, $block, $instance, $check_rules );
3311
+    // No block visibility conditions set.
3312
+    if ( empty( $block['attrs']['visibility_conditions'] ) ) {
3313
+        return $block_content;
3314
+    }
3315
+
3316
+    $attributes = json_decode( $block['attrs']['visibility_conditions'], true );
3317
+    $rules = ! empty( $attributes ) ? sd_block_parse_rules( $attributes ) : array();
3318
+
3319
+    // No rules set.
3320
+    if ( empty( $rules ) ) {
3321
+        return $block_content;
3322
+    }
3323
+
3324
+    $check_rules = null;
3325
+    $_block_content = $block_content;
3326
+
3327
+    if ( ! empty( $rules ) && ( ! empty( $attributes['output'] ) || ! empty( $attributes['outputN'] ) ) ) {
3328
+        $check_rules = sd_block_check_rules( $rules );
3329
+
3330
+        if ( $check_rules ) {
3331
+            $output_condition = ! empty( $attributes['output'] ) ? $attributes['output'] : array();
3332
+        } else {
3333
+            $output_condition = ! empty( $attributes['outputN'] ) ? $attributes['outputN'] : array();
3334
+        }
3335
+
3336
+        if ( ! empty( $output_condition ) && ! empty( $output_condition['type'] ) ) {
3337
+            switch ( $output_condition['type'] ) {
3338
+                case 'hide':
3339
+                    $valid_type = true;
3340
+                    $content = '';
3341
+
3342
+                    break;
3343
+                case 'message':
3344
+                    $valid_type = true;
3345
+
3346
+                    if ( isset( $output_condition['message'] ) ) {
3347
+                        $content = $output_condition['message'] != '' ? __( stripslashes( $output_condition['message'] ), 'ayecode-connect' ) : $output_condition['message'];
3348
+
3349
+                        if ( ! empty( $output_condition['message_type'] ) ) {
3350
+                            $content = aui()->alert( array(
3351
+                                    'type'=> $output_condition['message_type'],
3352
+                                    'content'=> $content
3353
+                                )
3354
+                            );
3355
+                        }
3356
+                    }
3357
+
3358
+                    break;
3359
+                case 'page':
3360
+                    $valid_type = true;
3361
+
3362
+                    $page_id = ! empty( $output_condition['page'] ) ? absint( $output_condition['page'] ) : 0;
3363
+                    $content = sd_get_page_content( $page_id );
3364
+
3365
+                    break;
3366
+                case 'template_part':
3367
+                    $valid_type = true;
3368
+
3369
+                    $template_part = ! empty( $output_condition['template_part'] ) ? $output_condition['template_part'] : '';
3370
+                    $content = sd_get_template_part_content( $template_part );
3371
+
3372
+                    break;
3373
+                default:
3374
+                    $valid_type = false;
3375
+                    break;
3376
+            }
3377
+
3378
+            if ( $valid_type ) {
3379
+                $block_content = '<div class="' . esc_attr( wp_get_block_default_classname( $instance->name ) ) . ' sd-block-has-rule">' . $content . '</div>';
3380
+            }
3381
+        }
3382
+    }
3383
+
3384
+    return apply_filters( 'sd_render_block_visibility_content', $block_content, $_block_content, $attributes, $block, $instance, $check_rules );
3385 3385
 }
3386 3386
 add_filter( 'render_block', 'sd_render_block', 9, 3 );
3387 3387
 
3388 3388
 function sd_get_page_content( $page_id ) {
3389
-	$content = $page_id > 0 ? get_post_field( 'post_content', (int) $page_id ) : '';
3389
+    $content = $page_id > 0 ? get_post_field( 'post_content', (int) $page_id ) : '';
3390 3390
 
3391
-	// Maybe bypass content
3392
-	$bypass_content = apply_filters( 'sd_bypass_page_content', '', $content, $page_id );
3393
-	if ( $bypass_content ) {
3394
-		return $bypass_content;
3395
-	}
3391
+    // Maybe bypass content
3392
+    $bypass_content = apply_filters( 'sd_bypass_page_content', '', $content, $page_id );
3393
+    if ( $bypass_content ) {
3394
+        return $bypass_content;
3395
+    }
3396 3396
 
3397
-	// Run the shortcodes on the content.
3398
-	$content = do_shortcode( $content );
3397
+    // Run the shortcodes on the content.
3398
+    $content = do_shortcode( $content );
3399 3399
 
3400
-	// Run block content if its available.
3401
-	if ( function_exists( 'do_blocks' ) ) {
3402
-		$content = do_blocks( $content );
3403
-	}
3400
+    // Run block content if its available.
3401
+    if ( function_exists( 'do_blocks' ) ) {
3402
+        $content = do_blocks( $content );
3403
+    }
3404 3404
 
3405
-	return apply_filters( 'sd_get_page_content', $content, $page_id );
3405
+    return apply_filters( 'sd_get_page_content', $content, $page_id );
3406 3406
 }
3407 3407
 
3408 3408
 function sd_get_template_part_content( $template_part ) {
3409
-	$template_part_post = $template_part ? sd_get_template_part_by_slug( $template_part ) : array();
3410
-	$content = ! empty( $template_part_post ) ? $template_part_post->content : '';
3409
+    $template_part_post = $template_part ? sd_get_template_part_by_slug( $template_part ) : array();
3410
+    $content = ! empty( $template_part_post ) ? $template_part_post->content : '';
3411 3411
 
3412
-	// Maybe bypass content
3413
-	$bypass_content = apply_filters( 'sd_bypass_template_part_content', '', $content, $template_part );
3414
-	if ( $bypass_content ) {
3415
-		return $bypass_content;
3416
-	}
3412
+    // Maybe bypass content
3413
+    $bypass_content = apply_filters( 'sd_bypass_template_part_content', '', $content, $template_part );
3414
+    if ( $bypass_content ) {
3415
+        return $bypass_content;
3416
+    }
3417 3417
 
3418
-	// Run the shortcodes on the content.
3419
-	$content = do_shortcode( $content );
3418
+    // Run the shortcodes on the content.
3419
+    $content = do_shortcode( $content );
3420 3420
 
3421
-	// Run block content if its available.
3422
-	if ( function_exists( 'do_blocks' ) ) {
3423
-		$content = do_blocks( $content );
3424
-	}
3421
+    // Run block content if its available.
3422
+    if ( function_exists( 'do_blocks' ) ) {
3423
+        $content = do_blocks( $content );
3424
+    }
3425 3425
 
3426
-	return apply_filters( 'sd_get_template_part_content', $content, $template_part );
3426
+    return apply_filters( 'sd_get_template_part_content', $content, $template_part );
3427 3427
 }
3428 3428
 
3429 3429
 function sd_block_parse_rules( $attrs ) {
3430
-	$rules = array();
3430
+    $rules = array();
3431 3431
 
3432
-	if ( ! empty( $attrs ) && is_array( $attrs ) ) {
3433
-		$attrs_keys = array_keys( $attrs );
3432
+    if ( ! empty( $attrs ) && is_array( $attrs ) ) {
3433
+        $attrs_keys = array_keys( $attrs );
3434 3434
 
3435
-		for ( $i = 1; $i <= count( $attrs_keys ); $i++ ) {
3436
-			if ( ! empty( $attrs[ 'rule' . $i ] ) && is_array( $attrs[ 'rule' . $i ] ) ) {
3437
-				$rules[] = $attrs[ 'rule' . $i ];
3438
-			}
3439
-		}
3440
-	}
3435
+        for ( $i = 1; $i <= count( $attrs_keys ); $i++ ) {
3436
+            if ( ! empty( $attrs[ 'rule' . $i ] ) && is_array( $attrs[ 'rule' . $i ] ) ) {
3437
+                $rules[] = $attrs[ 'rule' . $i ];
3438
+            }
3439
+        }
3440
+    }
3441 3441
 
3442
-	return apply_filters( 'sd_block_parse_rules', $rules, $attrs );
3442
+    return apply_filters( 'sd_block_parse_rules', $rules, $attrs );
3443 3443
 }
3444 3444
 
3445 3445
 function sd_block_check_rules( $rules ) {
3446
-	if ( ! ( is_array( $rules ) && ! empty( $rules ) ) ) {
3447
-		return true;
3448
-	}
3446
+    if ( ! ( is_array( $rules ) && ! empty( $rules ) ) ) {
3447
+        return true;
3448
+    }
3449 3449
 
3450
-	foreach ( $rules as $key => $rule ) {
3451
-		$match = apply_filters( 'sd_block_check_rule', true, $rule );
3450
+    foreach ( $rules as $key => $rule ) {
3451
+        $match = apply_filters( 'sd_block_check_rule', true, $rule );
3452 3452
 
3453
-		if ( ! $match ) {
3454
-			break;
3455
-		}
3456
-	}
3453
+        if ( ! $match ) {
3454
+            break;
3455
+        }
3456
+    }
3457 3457
 
3458
-	return apply_filters( 'sd_block_check_rules', $match, $rules );
3458
+    return apply_filters( 'sd_block_check_rules', $match, $rules );
3459 3459
 }
3460 3460
 
3461 3461
 function sd_block_check_rule( $match, $rule ) {
3462
-	global $post;
3463
-
3464
-	if ( $match && ! empty( $rule['type'] ) ) {
3465
-		switch ( $rule['type'] ) {
3466
-			case 'logged_in':
3467
-				$match = (bool) is_user_logged_in();
3468
-
3469
-				break;
3470
-			case 'logged_out':
3471
-				$match = ! is_user_logged_in();
3472
-
3473
-				break;
3474
-			case 'post_author':
3475
-				if ( ! empty( $post ) && $post->post_type != 'page' && ! empty( $post->post_author ) && is_user_logged_in() ) {
3476
-					$match = (int) $post->post_author === (int) get_current_user_id() ? true : false;
3477
-				} else {
3478
-					$match = false;
3479
-				}
3480
-
3481
-				break;
3482
-			case 'user_roles':
3483
-				$match = false;
3484
-
3485
-				if ( ! empty( $rule['user_roles'] ) ) {
3486
-					$user_roles = is_scalar( $rule['user_roles'] ) ? explode( ",", $rule['user_roles'] ) : $rule['user_roles'];
3487
-
3488
-					if ( is_array( $user_roles ) ) {
3489
-						$user_roles = array_filter( array_map( 'trim', $user_roles ) );
3490
-					}
3491
-
3492
-					if ( ! empty( $user_roles ) && is_array( $user_roles ) ) {
3493
-						if ( is_user_logged_in() && ( $current_user = wp_get_current_user() ) ) {
3494
-							$current_user_roles = $current_user->roles;
3495
-
3496
-							foreach ( $user_roles as $role ) {
3497
-								if ( in_array( $role, $current_user_roles ) ) {
3498
-									$match = true;
3499
-								}
3500
-							}
3501
-						} else {
3502
-							// Logged out role.
3503
-							if ( in_array( 'logged_out', $user_roles ) ) {
3504
-								$match = true;
3505
-							}
3506
-						}
3507
-					}
3508
-				}
3509
-
3510
-				break;
3511
-			case 'gd_field':
3512
-				$match = sd_block_check_rule_gd_field( $rule );
3513
-
3514
-				break;
3515
-
3516
-			default:
3517
-				$match = apply_filters( 'sd_block_check_custom_rule', $match, $rule );
3518
-				break;
3519
-		}
3520
-	}
3521
-
3522
-	return $match;
3462
+    global $post;
3463
+
3464
+    if ( $match && ! empty( $rule['type'] ) ) {
3465
+        switch ( $rule['type'] ) {
3466
+            case 'logged_in':
3467
+                $match = (bool) is_user_logged_in();
3468
+
3469
+                break;
3470
+            case 'logged_out':
3471
+                $match = ! is_user_logged_in();
3472
+
3473
+                break;
3474
+            case 'post_author':
3475
+                if ( ! empty( $post ) && $post->post_type != 'page' && ! empty( $post->post_author ) && is_user_logged_in() ) {
3476
+                    $match = (int) $post->post_author === (int) get_current_user_id() ? true : false;
3477
+                } else {
3478
+                    $match = false;
3479
+                }
3480
+
3481
+                break;
3482
+            case 'user_roles':
3483
+                $match = false;
3484
+
3485
+                if ( ! empty( $rule['user_roles'] ) ) {
3486
+                    $user_roles = is_scalar( $rule['user_roles'] ) ? explode( ",", $rule['user_roles'] ) : $rule['user_roles'];
3487
+
3488
+                    if ( is_array( $user_roles ) ) {
3489
+                        $user_roles = array_filter( array_map( 'trim', $user_roles ) );
3490
+                    }
3491
+
3492
+                    if ( ! empty( $user_roles ) && is_array( $user_roles ) ) {
3493
+                        if ( is_user_logged_in() && ( $current_user = wp_get_current_user() ) ) {
3494
+                            $current_user_roles = $current_user->roles;
3495
+
3496
+                            foreach ( $user_roles as $role ) {
3497
+                                if ( in_array( $role, $current_user_roles ) ) {
3498
+                                    $match = true;
3499
+                                }
3500
+                            }
3501
+                        } else {
3502
+                            // Logged out role.
3503
+                            if ( in_array( 'logged_out', $user_roles ) ) {
3504
+                                $match = true;
3505
+                            }
3506
+                        }
3507
+                    }
3508
+                }
3509
+
3510
+                break;
3511
+            case 'gd_field':
3512
+                $match = sd_block_check_rule_gd_field( $rule );
3513
+
3514
+                break;
3515
+
3516
+            default:
3517
+                $match = apply_filters( 'sd_block_check_custom_rule', $match, $rule );
3518
+                break;
3519
+        }
3520
+    }
3521
+
3522
+    return $match;
3523 3523
 }
3524 3524
 add_filter( 'sd_block_check_rule', 'sd_block_check_rule', 10, 2 );
3525 3525
 
3526 3526
 function sd_block_check_rule_gd_field( $rule ) {
3527
-	global $gd_post;
3528
-
3529
-	$match_found = false;
3530
-
3531
-	if ( class_exists( 'GeoDirectory' ) && ! empty( $gd_post->ID ) && ! empty( $rule['field'] ) && ! empty( $rule['condition'] ) ) {
3532
-		$args['block_visibility'] = true;
3533
-		$args['key'] = $rule['field'];
3534
-		$args['condition'] = $rule['condition'];
3535
-		$args['search'] = isset( $rule['search'] ) ? $rule['search'] : '';
3536
-
3537
-		if ( $args['key'] == 'street' ) {
3538
-			$args['key'] = 'address';
3539
-		}
3540
-
3541
-		$match_field = $_match_field = $args['key'];
3542
-
3543
-		if ( $match_field == 'address' ) {
3544
-			$match_field = 'street';
3545
-		} elseif ( $match_field == 'post_images' ) {
3546
-			$match_field = 'featured_image';
3547
-		}
3548
-
3549
-		$find_post = $gd_post;
3550
-		$find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3551
-
3552
-		if ( ! empty( $find_post->ID ) && ! in_array( 'post_category', $find_post_keys ) ) {
3553
-			$find_post = geodir_get_post_info( (int) $find_post->ID );
3554
-			$find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3555
-		}
3556
-
3557
-		if ( $match_field === '' || ( ! empty( $find_post_keys ) && ( in_array( $match_field, $find_post_keys ) || in_array( $_match_field, $find_post_keys ) ) ) ) {
3558
-			$address_fields = array( 'street2', 'neighbourhood', 'city', 'region', 'country', 'zip', 'latitude', 'longitude' ); // Address fields
3559
-			$field = array();
3560
-			$empty_field = false;
3561
-
3562
-			$standard_fields = sd_visibility_gd_standard_fields();
3563
-
3564
-			if ( $match_field && ! in_array( $match_field, array_keys( $standard_fields ) ) && ! in_array( $match_field, $address_fields ) ) {
3565
-				$package_id = geodir_get_post_package_id( $find_post->ID, $find_post->post_type );
3566
-				$fields = geodir_post_custom_fields( $package_id, 'all', $find_post->post_type, 'none' );
3567
-
3568
-				foreach ( $fields as $field_info ) {
3569
-					if ( $match_field == $field_info['htmlvar_name'] ) {
3570
-						$field = $field_info;
3571
-						break;
3572
-					} elseif( $_match_field == $field_info['htmlvar_name'] ) {
3573
-						$field = $field_info;
3574
-						break;
3575
-					}
3576
-				}
3577
-
3578
-				if ( empty( $field ) ) {
3579
-					$empty_field = true;
3580
-				}
3581
-			}
3582
-
3583
-			// Address fields.
3584
-			if ( in_array( $match_field, $address_fields ) && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3585
-				if ( ! empty( $address_fields[ $match_field ] ) ) {
3586
-					$field = $address_fields[ $match_field ];
3587
-				}
3588
-			} else if ( in_array( $match_field, array_keys( $standard_fields ) ) ) {
3589
-				if ( ! empty( $standard_fields[ $match_field ] ) ) {
3590
-					$field = $standard_fields[ $match_field ];
3591
-				}
3592
-			}
3593
-
3594
-			// Parse search.
3595
-			$search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3596
-
3597
-			$is_date = ( ! empty( $field['type'] ) && $field['type'] == 'datepicker' ) || in_array( $match_field, array( 'post_date', 'post_modified' ) ) ? true : false;
3598
-			$is_date = apply_filters( 'geodir_post_badge_is_date', $is_date, $match_field, $field, $args, $find_post );
3599
-
3600
-			$match_value = isset( $find_post->{$match_field} ) && empty( $empty_field ) ? esc_attr( trim( $find_post->{$match_field} ) ) : '';
3601
-			$match_found = $match_field === '' ? true : false;
3602
-
3603
-			if ( ! $match_found ) {
3604
-				if ( ( $match_field == 'post_date' || $match_field == 'post_modified' ) && ( empty( $args['condition'] ) || $args['condition'] == 'is_greater_than' || $args['condition'] == 'is_less_than' ) ) {
3605
-					if ( strpos( $search, '+' ) === false && strpos( $search, '-' ) === false ) {
3606
-						$search = '+' . $search;
3607
-					}
3608
-					$the_time = $match_field == 'post_modified' ? get_the_modified_date( 'Y-m-d', $find_post ) : get_the_time( 'Y-m-d', $find_post );
3609
-					$until_time = strtotime( $the_time . ' ' . $search . ' days' );
3610
-					$now_time   = strtotime( date_i18n( 'Y-m-d', current_time( 'timestamp' ) ) );
3611
-					if ( ( empty( $args['condition'] ) || $args['condition'] == 'is_less_than' ) && $until_time > $now_time ) {
3612
-						$match_found = true;
3613
-					} elseif ( $args['condition'] == 'is_greater_than' && $until_time < $now_time ) {
3614
-						$match_found = true;
3615
-					}
3616
-				} else {
3617
-					switch ( $args['condition'] ) {
3618
-						case 'is_equal':
3619
-							$match_found = (bool) ( $search != '' && $match_value == $search );
3620
-							break;
3621
-						case 'is_not_equal':
3622
-							$match_found = (bool) ( $search != '' && $match_value != $search );
3623
-							break;
3624
-						case 'is_greater_than':
3625
-							$match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value > $search );
3626
-							break;
3627
-						case 'is_less_than':
3628
-							$match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value < $search );
3629
-							break;
3630
-						case 'is_empty':
3631
-							$match_found = (bool) ( $match_value === '' || $match_value === false || $match_value === '0' || is_null( $match_value ) );
3632
-							break;
3633
-						case 'is_not_empty':
3634
-							$match_found = (bool) ( $match_value !== '' && $match_value !== false && $match_value !== '0' && ! is_null( $match_value ) );
3635
-							break;
3636
-						case 'is_contains':
3637
-							$match_found = (bool) ( $search != '' && stripos( $match_value, $search ) !== false );
3638
-							break;
3639
-						case 'is_not_contains':
3640
-							$match_found = (bool) ( $search != '' && stripos( $match_value, $search ) === false );
3641
-							break;
3642
-					}
3643
-				}
3644
-			}
3645
-
3646
-			$match_found = apply_filters( 'geodir_post_badge_check_match_found', $match_found, $args, $find_post );
3647
-		} else {
3648
-			$field = array();
3649
-
3650
-			// Parse search.
3651
-			$search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3652
-
3653
-			$match_value = '';
3654
-			$match_found = $match_field === '' ? true : false;
3655
-
3656
-			if ( ! $match_found ) {
3657
-				switch ( $args['condition'] ) {
3658
-					case 'is_equal':
3659
-						$match_found = (bool) ( $search != '' && $match_value == $search );
3660
-						break;
3661
-					case 'is_not_equal':
3662
-						$match_found = (bool) ( $search != '' && $match_value != $search );
3663
-						break;
3664
-					case 'is_greater_than':
3665
-						$match_found = false;
3666
-						break;
3667
-					case 'is_less_than':
3668
-						$match_found = false;
3669
-						break;
3670
-					case 'is_empty':
3671
-						$match_found = true;
3672
-						break;
3673
-					case 'is_not_empty':
3674
-						$match_found = false;
3675
-						break;
3676
-					case 'is_contains':
3677
-						$match_found = false;
3678
-						break;
3679
-					case 'is_not_contains':
3680
-						$match_found = false;
3681
-						break;
3682
-				}
3683
-			}
3684
-
3685
-			$match_found = apply_filters( 'geodir_post_badge_check_match_found_empty', $match_found, $args, $find_post );
3686
-		}
3687
-	}
3688
-
3689
-	return $match_found;
3527
+    global $gd_post;
3528
+
3529
+    $match_found = false;
3530
+
3531
+    if ( class_exists( 'GeoDirectory' ) && ! empty( $gd_post->ID ) && ! empty( $rule['field'] ) && ! empty( $rule['condition'] ) ) {
3532
+        $args['block_visibility'] = true;
3533
+        $args['key'] = $rule['field'];
3534
+        $args['condition'] = $rule['condition'];
3535
+        $args['search'] = isset( $rule['search'] ) ? $rule['search'] : '';
3536
+
3537
+        if ( $args['key'] == 'street' ) {
3538
+            $args['key'] = 'address';
3539
+        }
3540
+
3541
+        $match_field = $_match_field = $args['key'];
3542
+
3543
+        if ( $match_field == 'address' ) {
3544
+            $match_field = 'street';
3545
+        } elseif ( $match_field == 'post_images' ) {
3546
+            $match_field = 'featured_image';
3547
+        }
3548
+
3549
+        $find_post = $gd_post;
3550
+        $find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3551
+
3552
+        if ( ! empty( $find_post->ID ) && ! in_array( 'post_category', $find_post_keys ) ) {
3553
+            $find_post = geodir_get_post_info( (int) $find_post->ID );
3554
+            $find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3555
+        }
3556
+
3557
+        if ( $match_field === '' || ( ! empty( $find_post_keys ) && ( in_array( $match_field, $find_post_keys ) || in_array( $_match_field, $find_post_keys ) ) ) ) {
3558
+            $address_fields = array( 'street2', 'neighbourhood', 'city', 'region', 'country', 'zip', 'latitude', 'longitude' ); // Address fields
3559
+            $field = array();
3560
+            $empty_field = false;
3561
+
3562
+            $standard_fields = sd_visibility_gd_standard_fields();
3563
+
3564
+            if ( $match_field && ! in_array( $match_field, array_keys( $standard_fields ) ) && ! in_array( $match_field, $address_fields ) ) {
3565
+                $package_id = geodir_get_post_package_id( $find_post->ID, $find_post->post_type );
3566
+                $fields = geodir_post_custom_fields( $package_id, 'all', $find_post->post_type, 'none' );
3567
+
3568
+                foreach ( $fields as $field_info ) {
3569
+                    if ( $match_field == $field_info['htmlvar_name'] ) {
3570
+                        $field = $field_info;
3571
+                        break;
3572
+                    } elseif( $_match_field == $field_info['htmlvar_name'] ) {
3573
+                        $field = $field_info;
3574
+                        break;
3575
+                    }
3576
+                }
3577
+
3578
+                if ( empty( $field ) ) {
3579
+                    $empty_field = true;
3580
+                }
3581
+            }
3582
+
3583
+            // Address fields.
3584
+            if ( in_array( $match_field, $address_fields ) && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3585
+                if ( ! empty( $address_fields[ $match_field ] ) ) {
3586
+                    $field = $address_fields[ $match_field ];
3587
+                }
3588
+            } else if ( in_array( $match_field, array_keys( $standard_fields ) ) ) {
3589
+                if ( ! empty( $standard_fields[ $match_field ] ) ) {
3590
+                    $field = $standard_fields[ $match_field ];
3591
+                }
3592
+            }
3593
+
3594
+            // Parse search.
3595
+            $search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3596
+
3597
+            $is_date = ( ! empty( $field['type'] ) && $field['type'] == 'datepicker' ) || in_array( $match_field, array( 'post_date', 'post_modified' ) ) ? true : false;
3598
+            $is_date = apply_filters( 'geodir_post_badge_is_date', $is_date, $match_field, $field, $args, $find_post );
3599
+
3600
+            $match_value = isset( $find_post->{$match_field} ) && empty( $empty_field ) ? esc_attr( trim( $find_post->{$match_field} ) ) : '';
3601
+            $match_found = $match_field === '' ? true : false;
3602
+
3603
+            if ( ! $match_found ) {
3604
+                if ( ( $match_field == 'post_date' || $match_field == 'post_modified' ) && ( empty( $args['condition'] ) || $args['condition'] == 'is_greater_than' || $args['condition'] == 'is_less_than' ) ) {
3605
+                    if ( strpos( $search, '+' ) === false && strpos( $search, '-' ) === false ) {
3606
+                        $search = '+' . $search;
3607
+                    }
3608
+                    $the_time = $match_field == 'post_modified' ? get_the_modified_date( 'Y-m-d', $find_post ) : get_the_time( 'Y-m-d', $find_post );
3609
+                    $until_time = strtotime( $the_time . ' ' . $search . ' days' );
3610
+                    $now_time   = strtotime( date_i18n( 'Y-m-d', current_time( 'timestamp' ) ) );
3611
+                    if ( ( empty( $args['condition'] ) || $args['condition'] == 'is_less_than' ) && $until_time > $now_time ) {
3612
+                        $match_found = true;
3613
+                    } elseif ( $args['condition'] == 'is_greater_than' && $until_time < $now_time ) {
3614
+                        $match_found = true;
3615
+                    }
3616
+                } else {
3617
+                    switch ( $args['condition'] ) {
3618
+                        case 'is_equal':
3619
+                            $match_found = (bool) ( $search != '' && $match_value == $search );
3620
+                            break;
3621
+                        case 'is_not_equal':
3622
+                            $match_found = (bool) ( $search != '' && $match_value != $search );
3623
+                            break;
3624
+                        case 'is_greater_than':
3625
+                            $match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value > $search );
3626
+                            break;
3627
+                        case 'is_less_than':
3628
+                            $match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value < $search );
3629
+                            break;
3630
+                        case 'is_empty':
3631
+                            $match_found = (bool) ( $match_value === '' || $match_value === false || $match_value === '0' || is_null( $match_value ) );
3632
+                            break;
3633
+                        case 'is_not_empty':
3634
+                            $match_found = (bool) ( $match_value !== '' && $match_value !== false && $match_value !== '0' && ! is_null( $match_value ) );
3635
+                            break;
3636
+                        case 'is_contains':
3637
+                            $match_found = (bool) ( $search != '' && stripos( $match_value, $search ) !== false );
3638
+                            break;
3639
+                        case 'is_not_contains':
3640
+                            $match_found = (bool) ( $search != '' && stripos( $match_value, $search ) === false );
3641
+                            break;
3642
+                    }
3643
+                }
3644
+            }
3645
+
3646
+            $match_found = apply_filters( 'geodir_post_badge_check_match_found', $match_found, $args, $find_post );
3647
+        } else {
3648
+            $field = array();
3649
+
3650
+            // Parse search.
3651
+            $search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3652
+
3653
+            $match_value = '';
3654
+            $match_found = $match_field === '' ? true : false;
3655
+
3656
+            if ( ! $match_found ) {
3657
+                switch ( $args['condition'] ) {
3658
+                    case 'is_equal':
3659
+                        $match_found = (bool) ( $search != '' && $match_value == $search );
3660
+                        break;
3661
+                    case 'is_not_equal':
3662
+                        $match_found = (bool) ( $search != '' && $match_value != $search );
3663
+                        break;
3664
+                    case 'is_greater_than':
3665
+                        $match_found = false;
3666
+                        break;
3667
+                    case 'is_less_than':
3668
+                        $match_found = false;
3669
+                        break;
3670
+                    case 'is_empty':
3671
+                        $match_found = true;
3672
+                        break;
3673
+                    case 'is_not_empty':
3674
+                        $match_found = false;
3675
+                        break;
3676
+                    case 'is_contains':
3677
+                        $match_found = false;
3678
+                        break;
3679
+                    case 'is_not_contains':
3680
+                        $match_found = false;
3681
+                        break;
3682
+                }
3683
+            }
3684
+
3685
+            $match_found = apply_filters( 'geodir_post_badge_check_match_found_empty', $match_found, $args, $find_post );
3686
+        }
3687
+    }
3688
+
3689
+    return $match_found;
3690 3690
 }
3691 3691
 
3692 3692
 function sd_gd_field_rule_search( $search, $post_type, $rule, $field = array(), $gd_post = array() ) {
3693
-	global $post;
3694
-
3695
-	if ( ! $search ) {
3696
-		return $search;
3697
-	}
3698
-
3699
-	$orig_search = $search;
3700
-	$_search = strtolower( $search );
3701
-
3702
-	if ( ! empty( $rule['field'] ) && $rule['field'] == 'post_author' ) {
3703
-		if ( $search == 'current_user' ) {
3704
-			$search = is_user_logged_in() ? (int) get_current_user_id() : - 1;
3705
-		} else if ( $search == 'current_author' ) {
3706
-			$search = ( ! empty( $post ) && $post->post_type != 'page' && isset( $post->post_author ) ) ? absint( $post->post_author ) : - 1;
3707
-		}
3708
-	} else if ( $_search == 'date_today' ) {
3709
-		$search = date( 'Y-m-d' );
3710
-	} else if ( $_search == 'date_tomorrow' ) {
3711
-		$search = date( 'Y-m-d', strtotime( "+1 day" ) );
3712
-	} else if ( $_search == 'date_yesterday' ) {
3713
-		$search = date( 'Y-m-d', strtotime( "-1 day" ) );
3714
-	} else if ( $_search == 'time_his' ) {
3715
-		$search = date( 'H:i:s' );
3716
-	} else if ( $_search == 'time_hi' ) {
3717
-		$search = date( 'H:i' );
3718
-	} else if ( $_search == 'datetime_now' ) {
3719
-		$search = date( 'Y-m-d H:i:s' );
3720
-	} else if ( strpos( $_search, 'datetime_after_' ) === 0 ) {
3721
-		$_searches = explode( 'datetime_after_', $_search, 2 );
3722
-
3723
-		if ( ! empty( $_searches[1] ) ) {
3724
-			$search = date( 'Y-m-d H:i:s', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3725
-		} else {
3726
-			$search = date( 'Y-m-d H:i:s' );
3727
-		}
3728
-	} else if ( strpos( $_search, 'datetime_before_' ) === 0 ) {
3729
-		$_searches = explode( 'datetime_before_', $_search, 2 );
3730
-
3731
-		if ( ! empty( $_searches[1] ) ) {
3732
-			$search = date( 'Y-m-d H:i:s', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3733
-		} else {
3734
-			$search = date( 'Y-m-d H:i:s' );
3735
-		}
3736
-	} else if ( strpos( $_search, 'date_after_' ) === 0 ) {
3737
-		$_searches = explode( 'date_after_', $_search, 2 );
3738
-
3739
-		if ( ! empty( $_searches[1] ) ) {
3740
-			$search = date( 'Y-m-d', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3741
-		} else {
3742
-			$search = date( 'Y-m-d' );
3743
-		}
3744
-	} else if ( strpos( $_search, 'date_before_' ) === 0 ) {
3745
-		$_searches = explode( 'date_before_', $_search, 2 );
3746
-
3747
-		if ( ! empty( $_searches[1] ) ) {
3748
-			$search = date( 'Y-m-d', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3749
-		} else {
3750
-			$search = date( 'Y-m-d' );
3751
-		}
3752
-	}
3753
-
3754
-	return apply_filters( 'sd_gd_field_rule_search', $search, $post_type, $rule, $orig_search );
3693
+    global $post;
3694
+
3695
+    if ( ! $search ) {
3696
+        return $search;
3697
+    }
3698
+
3699
+    $orig_search = $search;
3700
+    $_search = strtolower( $search );
3701
+
3702
+    if ( ! empty( $rule['field'] ) && $rule['field'] == 'post_author' ) {
3703
+        if ( $search == 'current_user' ) {
3704
+            $search = is_user_logged_in() ? (int) get_current_user_id() : - 1;
3705
+        } else if ( $search == 'current_author' ) {
3706
+            $search = ( ! empty( $post ) && $post->post_type != 'page' && isset( $post->post_author ) ) ? absint( $post->post_author ) : - 1;
3707
+        }
3708
+    } else if ( $_search == 'date_today' ) {
3709
+        $search = date( 'Y-m-d' );
3710
+    } else if ( $_search == 'date_tomorrow' ) {
3711
+        $search = date( 'Y-m-d', strtotime( "+1 day" ) );
3712
+    } else if ( $_search == 'date_yesterday' ) {
3713
+        $search = date( 'Y-m-d', strtotime( "-1 day" ) );
3714
+    } else if ( $_search == 'time_his' ) {
3715
+        $search = date( 'H:i:s' );
3716
+    } else if ( $_search == 'time_hi' ) {
3717
+        $search = date( 'H:i' );
3718
+    } else if ( $_search == 'datetime_now' ) {
3719
+        $search = date( 'Y-m-d H:i:s' );
3720
+    } else if ( strpos( $_search, 'datetime_after_' ) === 0 ) {
3721
+        $_searches = explode( 'datetime_after_', $_search, 2 );
3722
+
3723
+        if ( ! empty( $_searches[1] ) ) {
3724
+            $search = date( 'Y-m-d H:i:s', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3725
+        } else {
3726
+            $search = date( 'Y-m-d H:i:s' );
3727
+        }
3728
+    } else if ( strpos( $_search, 'datetime_before_' ) === 0 ) {
3729
+        $_searches = explode( 'datetime_before_', $_search, 2 );
3730
+
3731
+        if ( ! empty( $_searches[1] ) ) {
3732
+            $search = date( 'Y-m-d H:i:s', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3733
+        } else {
3734
+            $search = date( 'Y-m-d H:i:s' );
3735
+        }
3736
+    } else if ( strpos( $_search, 'date_after_' ) === 0 ) {
3737
+        $_searches = explode( 'date_after_', $_search, 2 );
3738
+
3739
+        if ( ! empty( $_searches[1] ) ) {
3740
+            $search = date( 'Y-m-d', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3741
+        } else {
3742
+            $search = date( 'Y-m-d' );
3743
+        }
3744
+    } else if ( strpos( $_search, 'date_before_' ) === 0 ) {
3745
+        $_searches = explode( 'date_before_', $_search, 2 );
3746
+
3747
+        if ( ! empty( $_searches[1] ) ) {
3748
+            $search = date( 'Y-m-d', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3749
+        } else {
3750
+            $search = date( 'Y-m-d' );
3751
+        }
3752
+    }
3753
+
3754
+    return apply_filters( 'sd_gd_field_rule_search', $search, $post_type, $rule, $orig_search );
3755 3755
 }
3756 3756
 
3757 3757
 
3758 3758
 if(!function_exists('sd_blocks_render_blocks')){
3759
-	/**
3760
-	 * Add the shortcodes to the block content if set as an attribute.
3761
-	 *
3762
-	 * We have moved the shortcodes from the block content to a block argument to help prevent broken blocks.
3763
-	 *
3764
-	 * @param $block_content
3765
-	 * @param $parsed_block
3766
-	 * @param $thiss
3767
-	 * @return mixed|string
3768
-	 */
3769
-	function sd_blocks_render_blocks($block_content, $parsed_block, $thiss = array() ){
3770
-
3771
-		// Check if ita a nested block that needs to be wrapped
3772
-		if(! empty($parsed_block['attrs']['sd_shortcode_close'])){
3773
-			$content = isset($parsed_block['attrs']['html']) ? $parsed_block['attrs']['html'] : $block_content;
3774
-			$block_content = $parsed_block['attrs']['sd_shortcode'].$content.$parsed_block['attrs']['sd_shortcode_close'];
3775
-
3776
-			$block_content = do_shortcode($block_content);
3777
-
3778
-		}elseif(! empty($parsed_block['attrs']['sd_shortcode'])){
3779
-			$has_warp = false;
3780
-			if($block_content && strpos(trim($block_content), '<div class="wp-block-') === 0 ){
3781
-				$parts = explode('></', $block_content);
3782
-				if(count($parts) === 2){
3783
-					$block_content = $parts[0].'>'.$parsed_block['attrs']['sd_shortcode'].'</'.$parts[1];
3784
-					$has_warp = true;
3785
-				}
3786
-			}
3787
-			if (!$has_warp) {
3788
-				// Add the shortcode if its not a wrapped block
3789
-				$block_content .= $parsed_block['attrs']['sd_shortcode'];
3790
-			}
3791
-
3792
-			$block_content = do_shortcode($block_content);
3793
-		}
3794
-		return  $block_content;
3795
-	}
3759
+    /**
3760
+     * Add the shortcodes to the block content if set as an attribute.
3761
+     *
3762
+     * We have moved the shortcodes from the block content to a block argument to help prevent broken blocks.
3763
+     *
3764
+     * @param $block_content
3765
+     * @param $parsed_block
3766
+     * @param $thiss
3767
+     * @return mixed|string
3768
+     */
3769
+    function sd_blocks_render_blocks($block_content, $parsed_block, $thiss = array() ){
3770
+
3771
+        // Check if ita a nested block that needs to be wrapped
3772
+        if(! empty($parsed_block['attrs']['sd_shortcode_close'])){
3773
+            $content = isset($parsed_block['attrs']['html']) ? $parsed_block['attrs']['html'] : $block_content;
3774
+            $block_content = $parsed_block['attrs']['sd_shortcode'].$content.$parsed_block['attrs']['sd_shortcode_close'];
3775
+
3776
+            $block_content = do_shortcode($block_content);
3777
+
3778
+        }elseif(! empty($parsed_block['attrs']['sd_shortcode'])){
3779
+            $has_warp = false;
3780
+            if($block_content && strpos(trim($block_content), '<div class="wp-block-') === 0 ){
3781
+                $parts = explode('></', $block_content);
3782
+                if(count($parts) === 2){
3783
+                    $block_content = $parts[0].'>'.$parsed_block['attrs']['sd_shortcode'].'</'.$parts[1];
3784
+                    $has_warp = true;
3785
+                }
3786
+            }
3787
+            if (!$has_warp) {
3788
+                // Add the shortcode if its not a wrapped block
3789
+                $block_content .= $parsed_block['attrs']['sd_shortcode'];
3790
+            }
3791
+
3792
+            $block_content = do_shortcode($block_content);
3793
+        }
3794
+        return  $block_content;
3795
+    }
3796 3796
 }
3797 3797
 
3798 3798
 add_filter('render_block', 'sd_blocks_render_blocks',10,3);
Please login to merge, or discard this patch.
vendor/ayecode/wp-super-duper/wp-super-duper.php 1 patch
Indentation   +2687 added lines, -2687 removed lines patch added patch discarded remove patch
@@ -1,147 +1,147 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 if ( ! defined( 'ABSPATH' ) ) {
3
-	exit;
3
+    exit;
4 4
 }
5 5
 
6 6
 if ( ! class_exists( 'WP_Super_Duper' ) ) {
7 7
 
8
-	define( 'SUPER_DUPER_VER', '1.2.17' );
9
-
10
-	/**
11
-	 * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress.
12
-	 *
13
-	 * Should not be called direct but extended instead.
14
-	 *
15
-	 * Class WP_Super_Duper
16
-	 * @since 1.0.16 change log moved to file change-log.txt - CHANGED
17
-	 * @ver 1.1.1
18
-	 */
19
-	class WP_Super_Duper extends WP_Widget {
20
-
21
-		public $version = SUPER_DUPER_VER;
22
-		public $font_awesome_icon_version = "5.11.2";
23
-		public $block_code;
24
-		public $options;
25
-		public $base_id;
26
-		public $settings_hash;
27
-		public $arguments = array();
28
-		public $instance = array();
29
-		private $class_name;
30
-
31
-		/**
32
-		 * The relative url to the current folder.
33
-		 *
34
-		 * @var string
35
-		 */
36
-		public $url = '';
37
-
38
-		/**
39
-		 * Take the array options and use them to build.
40
-		 */
41
-		public function __construct( $options ) {
42
-			global $sd_widgets;
43
-
44
-			$sd_widgets[ $options['base_id'] ] = array(
45
-				'name'       => $options['name'],
46
-				'class_name' => $options['class_name'],
47
-				'output_types' => !empty($options['output_types']) ? $options['output_types'] : array()
48
-			);
49
-			$this->base_id                     = $options['base_id'];
50
-			// lets filter the options before we do anything
51
-			$options       = apply_filters( "wp_super_duper_options", $options );
52
-			$options       = apply_filters( "wp_super_duper_options_{$this->base_id}", $options );
53
-			$options       = $this->add_name_from_key( $options );
54
-			$this->options = $options;
55
-
56
-			$this->base_id   = $options['base_id'];
57
-			$this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array();
58
-
59
-			// nested blocks can't work as a widget
60
-			if(!empty($this->options['nested-block'])){
61
-				if(empty($this->options['output_types'])){
62
-					$this->options['output_types'] = array('shortcode','block');
63
-				}elseif (($key = array_search('widget', $this->options['output_types'])) !== false) {
64
-					unset($this->options['output_types'][$key]);
65
-				}
66
-			}
8
+    define( 'SUPER_DUPER_VER', '1.2.17' );
9
+
10
+    /**
11
+     * A Class to be able to create a Widget, Shortcode or Block to be able to output content for WordPress.
12
+     *
13
+     * Should not be called direct but extended instead.
14
+     *
15
+     * Class WP_Super_Duper
16
+     * @since 1.0.16 change log moved to file change-log.txt - CHANGED
17
+     * @ver 1.1.1
18
+     */
19
+    class WP_Super_Duper extends WP_Widget {
20
+
21
+        public $version = SUPER_DUPER_VER;
22
+        public $font_awesome_icon_version = "5.11.2";
23
+        public $block_code;
24
+        public $options;
25
+        public $base_id;
26
+        public $settings_hash;
27
+        public $arguments = array();
28
+        public $instance = array();
29
+        private $class_name;
67 30
 
68
-			// init parent
69
-			if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
70
-				parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] );
71
-			}
31
+        /**
32
+         * The relative url to the current folder.
33
+         *
34
+         * @var string
35
+         */
36
+        public $url = '';
37
+
38
+        /**
39
+         * Take the array options and use them to build.
40
+         */
41
+        public function __construct( $options ) {
42
+            global $sd_widgets;
43
+
44
+            $sd_widgets[ $options['base_id'] ] = array(
45
+                'name'       => $options['name'],
46
+                'class_name' => $options['class_name'],
47
+                'output_types' => !empty($options['output_types']) ? $options['output_types'] : array()
48
+            );
49
+            $this->base_id                     = $options['base_id'];
50
+            // lets filter the options before we do anything
51
+            $options       = apply_filters( "wp_super_duper_options", $options );
52
+            $options       = apply_filters( "wp_super_duper_options_{$this->base_id}", $options );
53
+            $options       = $this->add_name_from_key( $options );
54
+            $this->options = $options;
55
+
56
+            $this->base_id   = $options['base_id'];
57
+            $this->arguments = isset( $options['arguments'] ) ? $options['arguments'] : array();
58
+
59
+            // nested blocks can't work as a widget
60
+            if(!empty($this->options['nested-block'])){
61
+                if(empty($this->options['output_types'])){
62
+                    $this->options['output_types'] = array('shortcode','block');
63
+                }elseif (($key = array_search('widget', $this->options['output_types'])) !== false) {
64
+                    unset($this->options['output_types'][$key]);
65
+                }
66
+            }
72 67
 
68
+            // init parent
69
+            if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
70
+                parent::__construct( $options['base_id'], $options['name'], $options['widget_ops'] );
71
+            }
73 72
 
74
-			if ( isset( $options['class_name'] ) ) {
75
-				// register widget
76
-				$this->class_name = $options['class_name'];
77 73
 
78
-				// register shortcode, this needs to be done even for blocks and widgets
79
-				$this->register_shortcode();
74
+            if ( isset( $options['class_name'] ) ) {
75
+                // register widget
76
+                $this->class_name = $options['class_name'];
80 77
 
78
+                // register shortcode, this needs to be done even for blocks and widgets
79
+                $this->register_shortcode();
81 80
 
82
-				// Fusion Builder (avada) support
83
-				if ( function_exists( 'fusion_builder_map' ) ) {
84
-					add_action( 'init', array( $this, 'register_fusion_element' ) );
85
-				}
81
+
82
+                // Fusion Builder (avada) support
83
+                if ( function_exists( 'fusion_builder_map' ) ) {
84
+                    add_action( 'init', array( $this, 'register_fusion_element' ) );
85
+                }
86 86
 
87 87
                 // maybe load the Bricks transformer class
88 88
                 if( class_exists('\Bricks\Elements', false) ){
89
-					add_action( 'init', array( $this, 'load_bricks_element_class' ) );
89
+                    add_action( 'init', array( $this, 'load_bricks_element_class' ) );
90 90
                 }
91 91
 
92
-				// register block
93
-				if(empty($this->options['output_types']) || in_array('block',$this->options['output_types'])){
94
-					add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) );
95
-				}
96
-			}
92
+                // register block
93
+                if(empty($this->options['output_types']) || in_array('block',$this->options['output_types'])){
94
+                    add_action( 'admin_enqueue_scripts', array( $this, 'register_block' ) );
95
+                }
96
+            }
97 97
 
98
-			// add the CSS and JS we need ONCE
99
-			global $sd_widget_scripts;
98
+            // add the CSS and JS we need ONCE
99
+            global $sd_widget_scripts;
100 100
 
101
-			if ( ! $sd_widget_scripts ) {
102
-				wp_add_inline_script( 'admin-widgets', $this->widget_js() );
103
-				wp_add_inline_script( 'customize-controls', $this->widget_js() );
104
-				wp_add_inline_style( 'widgets', $this->widget_css() );
101
+            if ( ! $sd_widget_scripts ) {
102
+                wp_add_inline_script( 'admin-widgets', $this->widget_js() );
103
+                wp_add_inline_script( 'customize-controls', $this->widget_js() );
104
+                wp_add_inline_style( 'widgets', $this->widget_css() );
105 105
 
106
-				// maybe add elementor editor styles
107
-				add_action( 'elementor/editor/after_enqueue_styles', array( $this, 'elementor_editor_styles' ) );
106
+                // maybe add elementor editor styles
107
+                add_action( 'elementor/editor/after_enqueue_styles', array( $this, 'elementor_editor_styles' ) );
108 108
 
109
-				$sd_widget_scripts = true;
109
+                $sd_widget_scripts = true;
110 110
 
111
-				// add shortcode insert button once
112
-				add_action( 'media_buttons', array( $this, 'wp_media_buttons' ), 1 );
113
-				add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) );
114
-				// generatepress theme sections compatibility
115
-				if ( function_exists( 'generate_sections_sections_metabox' ) ) {
116
-					add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) );
117
-				}
118
-				/* Load script on Divi theme builder page */
119
-				if ( function_exists( 'et_builder_is_tb_admin_screen' ) && et_builder_is_tb_admin_screen() ) {
120
-					add_thickbox();
121
-					add_action( 'admin_footer', array( $this, 'shortcode_insert_button_script' ) );
122
-				}
111
+                // add shortcode insert button once
112
+                add_action( 'media_buttons', array( $this, 'wp_media_buttons' ), 1 );
113
+                add_action( 'media_buttons', array( $this, 'shortcode_insert_button' ) );
114
+                // generatepress theme sections compatibility
115
+                if ( function_exists( 'generate_sections_sections_metabox' ) ) {
116
+                    add_action( 'generate_sections_metabox', array( $this, 'shortcode_insert_button_script' ) );
117
+                }
118
+                /* Load script on Divi theme builder page */
119
+                if ( function_exists( 'et_builder_is_tb_admin_screen' ) && et_builder_is_tb_admin_screen() ) {
120
+                    add_thickbox();
121
+                    add_action( 'admin_footer', array( $this, 'shortcode_insert_button_script' ) );
122
+                }
123 123
 
124
-				if ( $this->is_preview() ) {
125
-					add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) );
126
-					// this makes the insert button work for elementor
127
-					add_action( 'elementor/editor/after_enqueue_scripts', array(
128
-						$this,
129
-						'shortcode_insert_button_script'
130
-					) ); // for elementor
131
-				}
132
-				// this makes the insert button work for cornerstone
133
-				add_action( 'wp_print_footer_scripts', array( __CLASS__, 'maybe_cornerstone_builder' ) );
124
+                if ( $this->is_preview() ) {
125
+                    add_action( 'wp_footer', array( $this, 'shortcode_insert_button_script' ) );
126
+                    // this makes the insert button work for elementor
127
+                    add_action( 'elementor/editor/after_enqueue_scripts', array(
128
+                        $this,
129
+                        'shortcode_insert_button_script'
130
+                    ) ); // for elementor
131
+                }
132
+                // this makes the insert button work for cornerstone
133
+                add_action( 'wp_print_footer_scripts', array( __CLASS__, 'maybe_cornerstone_builder' ) );
134 134
 
135
-				add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) );
136
-				add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) );
135
+                add_action( 'wp_ajax_super_duper_get_widget_settings', array( __CLASS__, 'get_widget_settings' ) );
136
+                add_action( 'wp_ajax_super_duper_get_picker', array( __CLASS__, 'get_picker' ) );
137 137
 
138
-				// add generator text to head
139
-				add_action( 'admin_head', array( $this, 'generator' ), 99 );
140
-				add_action( 'wp_head', array( $this, 'generator' ), 99 );
141
-			}
138
+                // add generator text to head
139
+                add_action( 'admin_head', array( $this, 'generator' ), 99 );
140
+                add_action( 'wp_head', array( $this, 'generator' ), 99 );
141
+            }
142 142
 
143
-			do_action( 'wp_super_duper_widget_init', $options, $this );
144
-		}
143
+            do_action( 'wp_super_duper_widget_init', $options, $this );
144
+        }
145 145
 
146 146
         /**
147 147
          * Load the Bricks conversion class if we are running Bricks.
@@ -151,163 +151,163 @@  discard block
 block discarded – undo
151 151
                     include_once __DIR__ . '/includes/class-super-duper-bricks-element.php';
152 152
         }
153 153
 
154
-		/**
155
-		 * The register widget function
156
-		 * @return void
157
-		 */
158
-		public function _register() {
159
-			if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
160
-				parent::_register();
161
-			}
162
-		}
163
-
164
-		/**
165
-		 * Add our widget CSS to elementor editor.
166
-		 */
167
-		public function elementor_editor_styles() {
168
-			wp_add_inline_style( 'elementor-editor', $this->widget_css( false ) );
169
-		}
170
-
171
-		public function register_fusion_element() {
172
-
173
-			$options = $this->options;
174
-
175
-			if ( $this->base_id ) {
176
-
177
-				$params = $this->get_fusion_params();
178
-
179
-				$args = array(
180
-					'name'            => $options['name'],
181
-					'shortcode'       => $this->base_id,
182
-					'icon'            => $options['block-icon'] ? $options['block-icon'] : 'far fa-square',
183
-					'allow_generator' => true,
184
-				);
185
-
186
-				if ( ! empty( $params ) ) {
187
-					$args['params'] = $params;
188
-				}
189
-
190
-				fusion_builder_map( $args );
191
-			}
154
+        /**
155
+         * The register widget function
156
+         * @return void
157
+         */
158
+        public function _register() {
159
+            if(empty($this->options['output_types']) || in_array('widget',$this->options['output_types'])){
160
+                parent::_register();
161
+            }
162
+        }
192 163
 
193
-		}
164
+        /**
165
+         * Add our widget CSS to elementor editor.
166
+         */
167
+        public function elementor_editor_styles() {
168
+            wp_add_inline_style( 'elementor-editor', $this->widget_css( false ) );
169
+        }
194 170
 
195
-		public function get_fusion_params() {
196
-			$params    = array();
197
-			$arguments = $this->get_arguments();
198
-
199
-			if ( ! empty( $arguments ) ) {
200
-				foreach ( $arguments as $key => $val ) {
201
-					$param = array();
202
-					// type
203
-					$param['type'] = str_replace(
204
-						array(
205
-							"text",
206
-							"number",
207
-							"email",
208
-							"color",
209
-							"checkbox"
210
-						),
211
-						array(
212
-							"textfield",
213
-							"textfield",
214
-							"textfield",
215
-							"colorpicker",
216
-							"select",
171
+        public function register_fusion_element() {
217 172
 
218
-						),
219
-						$val['type'] );
173
+            $options = $this->options;
220 174
 
221
-					// multiselect
222
-					if ( $val['type'] == 'multiselect' || ( ( $param['type'] == 'select' || $val['type'] == 'select' ) && ! empty( $val['multiple'] ) ) ) {
223
-						$param['type']     = 'multiple_select';
224
-						$param['multiple'] = true;
225
-					}
175
+            if ( $this->base_id ) {
226 176
 
227
-					// heading
228
-					$param['heading'] = isset( $val['title'] ) ? $val['title'] : '';
177
+                $params = $this->get_fusion_params();
229 178
 
230
-					// description
231
-					$param['description'] = isset( $val['desc'] ) ? $val['desc'] : '';
179
+                $args = array(
180
+                    'name'            => $options['name'],
181
+                    'shortcode'       => $this->base_id,
182
+                    'icon'            => $options['block-icon'] ? $options['block-icon'] : 'far fa-square',
183
+                    'allow_generator' => true,
184
+                );
232 185
 
233
-					// param_name
234
-					$param['param_name'] = $key;
186
+                if ( ! empty( $params ) ) {
187
+                    $args['params'] = $params;
188
+                }
235 189
 
236
-					// Default
237
-					$param['default'] = isset( $val['default'] ) ? $val['default'] : '';
190
+                fusion_builder_map( $args );
191
+            }
238 192
 
239
-					// Group
240
-					if ( isset( $val['group'] ) ) {
241
-						$param['group'] = $val['group'];
242
-					}
193
+        }
243 194
 
244
-					// value
245
-					if ( $val['type'] == 'checkbox' ) {
246
-						if ( isset( $val['default'] ) && $val['default'] == '0' ) {
247
-							unset( $param['default'] );
248
-						}
249
-						$param['value'] = array( '0' => __( "No", 'ayecode-connect' ), '1' => __( "Yes", 'ayecode-connect' ) );
250
-					} elseif ( $param['type'] == 'select' || $param['type'] == 'multiple_select' ) {
251
-						$param['value'] = isset( $val['options'] ) ? $val['options'] : array();
252
-					} else {
253
-						$param['value'] = isset( $val['default'] ) ? $val['default'] : '';
254
-					}
195
+        public function get_fusion_params() {
196
+            $params    = array();
197
+            $arguments = $this->get_arguments();
198
+
199
+            if ( ! empty( $arguments ) ) {
200
+                foreach ( $arguments as $key => $val ) {
201
+                    $param = array();
202
+                    // type
203
+                    $param['type'] = str_replace(
204
+                        array(
205
+                            "text",
206
+                            "number",
207
+                            "email",
208
+                            "color",
209
+                            "checkbox"
210
+                        ),
211
+                        array(
212
+                            "textfield",
213
+                            "textfield",
214
+                            "textfield",
215
+                            "colorpicker",
216
+                            "select",
217
+
218
+                        ),
219
+                        $val['type'] );
220
+
221
+                    // multiselect
222
+                    if ( $val['type'] == 'multiselect' || ( ( $param['type'] == 'select' || $val['type'] == 'select' ) && ! empty( $val['multiple'] ) ) ) {
223
+                        $param['type']     = 'multiple_select';
224
+                        $param['multiple'] = true;
225
+                    }
226
+
227
+                    // heading
228
+                    $param['heading'] = isset( $val['title'] ) ? $val['title'] : '';
229
+
230
+                    // description
231
+                    $param['description'] = isset( $val['desc'] ) ? $val['desc'] : '';
232
+
233
+                    // param_name
234
+                    $param['param_name'] = $key;
235
+
236
+                    // Default
237
+                    $param['default'] = isset( $val['default'] ) ? $val['default'] : '';
238
+
239
+                    // Group
240
+                    if ( isset( $val['group'] ) ) {
241
+                        $param['group'] = $val['group'];
242
+                    }
243
+
244
+                    // value
245
+                    if ( $val['type'] == 'checkbox' ) {
246
+                        if ( isset( $val['default'] ) && $val['default'] == '0' ) {
247
+                            unset( $param['default'] );
248
+                        }
249
+                        $param['value'] = array( '0' => __( "No", 'ayecode-connect' ), '1' => __( "Yes", 'ayecode-connect' ) );
250
+                    } elseif ( $param['type'] == 'select' || $param['type'] == 'multiple_select' ) {
251
+                        $param['value'] = isset( $val['options'] ) ? $val['options'] : array();
252
+                    } else {
253
+                        $param['value'] = isset( $val['default'] ) ? $val['default'] : '';
254
+                    }
255
+
256
+                    // setup the param
257
+                    $params[] = $param;
255 258
 
256
-					// setup the param
257
-					$params[] = $param;
259
+                }
260
+            }
258 261
 
259
-				}
260
-			}
261 262
 
263
+            return $params;
264
+        }
262 265
 
263
-			return $params;
264
-		}
266
+        /**
267
+         * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder
268
+         */
269
+        public static function maybe_cornerstone_builder() {
270
+            if ( did_action( 'cornerstone_before_boot_app' ) ) {
271
+                self::shortcode_insert_button_script();
272
+            }
273
+        }
265 274
 
266
-		/**
267
-		 * Maybe insert the shortcode inserter button in the footer if we are in the cornerstone builder
268
-		 */
269
-		public static function maybe_cornerstone_builder() {
270
-			if ( did_action( 'cornerstone_before_boot_app' ) ) {
271
-				self::shortcode_insert_button_script();
272
-			}
273
-		}
275
+        /**
276
+         * A function to ge the shortcode builder picker html.
277
+         *
278
+         * @param string $editor_id
279
+         *
280
+         * @return string
281
+         */
282
+        public static function get_picker( $editor_id = '' ) {
274 283
 
275
-		/**
276
-		 * A function to ge the shortcode builder picker html.
277
-		 *
278
-		 * @param string $editor_id
279
-		 *
280
-		 * @return string
281
-		 */
282
-		public static function get_picker( $editor_id = '' ) {
283
-
284
-			ob_start();
285
-			if ( isset( $_POST['editor_id'] ) ) {
286
-				$editor_id = esc_attr( $_POST['editor_id'] );
287
-			} elseif ( isset( $_REQUEST['et_fb'] ) ) {
288
-				$editor_id = 'main_content_content_vb_tiny_mce';
289
-			}
284
+            ob_start();
285
+            if ( isset( $_POST['editor_id'] ) ) {
286
+                $editor_id = esc_attr( $_POST['editor_id'] );
287
+            } elseif ( isset( $_REQUEST['et_fb'] ) ) {
288
+                $editor_id = 'main_content_content_vb_tiny_mce';
289
+            }
290 290
 
291
-			global $sd_widgets;
291
+            global $sd_widgets;
292 292
 
293 293
 //			print_r($sd_widgets);exit;
294
-			?>
294
+            ?>
295 295
 
296 296
 			<div class="sd-shortcode-left-wrap">
297 297
 				<?php
298
-				ksort( $sd_widgets );
299
-				//				print_r($sd_widgets);exit;
300
-				if ( ! empty( $sd_widgets ) ) {
301
-					echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">';
302
-					echo "<option>" . __( 'Select shortcode', 'ayecode-connect' ) . "</option>";
303
-					foreach ( $sd_widgets as $shortcode => $class ) {
304
-						if(!empty($class['output_types']) && !in_array('shortcode', $class['output_types'])){ continue; }
305
-						echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>";
306
-					}
307
-					echo "</select>";
298
+                ksort( $sd_widgets );
299
+                //				print_r($sd_widgets);exit;
300
+                if ( ! empty( $sd_widgets ) ) {
301
+                    echo '<select class="widefat" onchange="sd_get_shortcode_options(this);">';
302
+                    echo "<option>" . __( 'Select shortcode', 'ayecode-connect' ) . "</option>";
303
+                    foreach ( $sd_widgets as $shortcode => $class ) {
304
+                        if(!empty($class['output_types']) && !in_array('shortcode', $class['output_types'])){ continue; }
305
+                        echo "<option value='" . esc_attr( $shortcode ) . "'>" . esc_attr( $shortcode ) . " (" . esc_attr( $class['name'] ) . ")</option>";
306
+                    }
307
+                    echo "</select>";
308 308
 
309
-				}
310
-				?>
309
+                }
310
+                ?>
311 311
 				<div class="sd-shortcode-settings"></div>
312 312
 
313 313
 			</div>
@@ -318,8 +318,8 @@  discard block
 block discarded – undo
318 318
 					<?php if ( $editor_id != '' ) { ?>
319 319
 						<button class="button sd-insert-shortcode-button"
320 320
 								onclick="sd_insert_shortcode(<?php if ( ! empty( $editor_id ) ) {
321
-									echo "'" . $editor_id . "'";
322
-								} ?>)"><?php _e( 'Insert shortcode', 'ayecode-connect' ); ?></button>
321
+                                    echo "'" . $editor_id . "'";
322
+                                } ?>)"><?php _e( 'Insert shortcode', 'ayecode-connect' ); ?></button>
323 323
 					<?php } ?>
324 324
 					<button class="button"
325 325
 							onclick="sd_copy_to_clipboard()"><?php _e( 'Copy shortcode' ); ?></button>
@@ -327,150 +327,150 @@  discard block
 block discarded – undo
327 327
 			</div>
328 328
 			<?php
329 329
 
330
-			$html = ob_get_clean();
330
+            $html = ob_get_clean();
331 331
 
332
-			if ( wp_doing_ajax() ) {
333
-				echo $html;
334
-				$should_die = true;
332
+            if ( wp_doing_ajax() ) {
333
+                echo $html;
334
+                $should_die = true;
335 335
 
336
-				// some builder get the editor via ajax so we should not die on those occasions
337
-				$dont_die = array(
338
-					'parent_tag',// WP Bakery
339
-					'avia_request' // enfold
340
-				);
336
+                // some builder get the editor via ajax so we should not die on those occasions
337
+                $dont_die = array(
338
+                    'parent_tag',// WP Bakery
339
+                    'avia_request' // enfold
340
+                );
341 341
 
342
-				foreach ( $dont_die as $request ) {
343
-					if ( isset( $_REQUEST[ $request ] ) ) {
344
-						$should_die = false;
345
-					}
346
-				}
342
+                foreach ( $dont_die as $request ) {
343
+                    if ( isset( $_REQUEST[ $request ] ) ) {
344
+                        $should_die = false;
345
+                    }
346
+                }
347 347
 
348
-				if ( $should_die ) {
349
-					wp_die();
350
-				}
348
+                if ( $should_die ) {
349
+                    wp_die();
350
+                }
351 351
 
352
-			} else {
353
-				return $html;
354
-			}
352
+            } else {
353
+                return $html;
354
+            }
355 355
 
356
-			return '';
356
+            return '';
357 357
 
358
-		}
358
+        }
359 359
 
360
-		/**
361
-		 * Output the version in the header.
362
-		 */
363
-		public function generator() {
364
-			$file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
365
-			$plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
366
-
367
-			// Find source plugin/theme of SD
368
-			$source = array();
369
-			if ( strpos( $file, $plugins_dir ) !== false ) {
370
-				$source = explode( "/", plugin_basename( $file ) );
371
-			} else if ( function_exists( 'get_theme_root' ) ) {
372
-				$themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
373
-
374
-				if ( strpos( $file, $themes_dir ) !== false ) {
375
-					$source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
376
-				}
377
-			}
360
+        /**
361
+         * Output the version in the header.
362
+         */
363
+        public function generator() {
364
+            $file = str_replace( array( "/", "\\" ), "/", realpath( __FILE__ ) );
365
+            $plugins_dir = str_replace( array( "/", "\\" ), "/", realpath( WP_PLUGIN_DIR ) );
366
+
367
+            // Find source plugin/theme of SD
368
+            $source = array();
369
+            if ( strpos( $file, $plugins_dir ) !== false ) {
370
+                $source = explode( "/", plugin_basename( $file ) );
371
+            } else if ( function_exists( 'get_theme_root' ) ) {
372
+                $themes_dir = str_replace( array( "/", "\\" ), "/", realpath( get_theme_root() ) );
373
+
374
+                if ( strpos( $file, $themes_dir ) !== false ) {
375
+                    $source = explode( "/", ltrim( str_replace( $themes_dir, "", $file ), "/" ) );
376
+                }
377
+            }
378 378
 
379
-			echo '<meta name="generator" content="WP Super Duper v' . esc_attr( $this->version ) . '"' . ( ! empty( $source[0] ) ? ' data-sd-source="' . esc_attr( $source[0] ) . '"' : '' ) . ' />';
380
-		}
379
+            echo '<meta name="generator" content="WP Super Duper v' . esc_attr( $this->version ) . '"' . ( ! empty( $source[0] ) ? ' data-sd-source="' . esc_attr( $source[0] ) . '"' : '' ) . ' />';
380
+        }
381 381
 
382
-		/**
383
-		 * Get widget settings.
384
-		 *
385
-		 * @since 1.0.0
386
-		 */
387
-		public static function get_widget_settings() {
388
-			global $sd_widgets;
389
-
390
-			$shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : '';
391
-			if ( ! $shortcode ) {
392
-				wp_die();
393
-			}
394
-			$widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : '';
395
-			if ( ! $widget_args ) {
396
-				wp_die();
397
-			}
398
-			$class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
399
-			if ( ! $class_name ) {
400
-				wp_die();
401
-			}
382
+        /**
383
+         * Get widget settings.
384
+         *
385
+         * @since 1.0.0
386
+         */
387
+        public static function get_widget_settings() {
388
+            global $sd_widgets;
402 389
 
403
-			// invoke an instance method
404
-			$widget = new $class_name;
390
+            $shortcode = isset( $_REQUEST['shortcode'] ) && $_REQUEST['shortcode'] ? sanitize_title_with_dashes( $_REQUEST['shortcode'] ) : '';
391
+            if ( ! $shortcode ) {
392
+                wp_die();
393
+            }
394
+            $widget_args = isset( $sd_widgets[ $shortcode ] ) ? $sd_widgets[ $shortcode ] : '';
395
+            if ( ! $widget_args ) {
396
+                wp_die();
397
+            }
398
+            $class_name = isset( $widget_args['class_name'] ) && $widget_args['class_name'] ? $widget_args['class_name'] : '';
399
+            if ( ! $class_name ) {
400
+                wp_die();
401
+            }
402
+
403
+            // invoke an instance method
404
+            $widget = new $class_name;
405 405
 
406
-			ob_start();
407
-			$widget->form( array() );
408
-			$form = ob_get_clean();
409
-			echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>";
410
-			echo "<style>" . $widget->widget_css() . "</style>";
411
-			echo "<script>" . $widget->widget_js() . "</script>";
412
-			?>
406
+            ob_start();
407
+            $widget->form( array() );
408
+            $form = ob_get_clean();
409
+            echo "<form id='$shortcode'>" . $form . "<div class=\"widget-control-save\"></div></form>";
410
+            echo "<style>" . $widget->widget_css() . "</style>";
411
+            echo "<script>" . $widget->widget_js() . "</script>";
412
+            ?>
413 413
 			<?php
414
-			wp_die();
415
-		}
414
+            wp_die();
415
+        }
416 416
 
417
-		/**
418
-		 * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed).
419
-		 *
420
-		 * @param string $editor_id Optional. Shortcode editor id. Default null.
421
-		 * @param string $insert_shortcode_function Optional. Insert shortcode function. Default null.
422
-		 *
423
-		 *@since 1.0.0
424
-		 *
425
-		 */
426
-		public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) {
427
-			global $sd_widgets, $shortcode_insert_button_once;
428
-			if ( $shortcode_insert_button_once ) {
429
-				return;
430
-			}
431
-			add_thickbox();
417
+        /**
418
+         * Insert shortcode builder button to classic editor (not inside Gutenberg, not needed).
419
+         *
420
+         * @param string $editor_id Optional. Shortcode editor id. Default null.
421
+         * @param string $insert_shortcode_function Optional. Insert shortcode function. Default null.
422
+         *
423
+         *@since 1.0.0
424
+         *
425
+         */
426
+        public static function shortcode_insert_button( $editor_id = '', $insert_shortcode_function = '' ) {
427
+            global $sd_widgets, $shortcode_insert_button_once;
428
+            if ( $shortcode_insert_button_once ) {
429
+                return;
430
+            }
431
+            add_thickbox();
432 432
 
433 433
 
434
-			/**
435
-			 * Cornerstone makes us play dirty tricks :/
436
-			 * All media_buttons are removed via JS unless they are two specific id's so we wrap our content in this ID so it is not removed.
437
-			 */
438
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
439
-				echo '<span id="insert-media-button">';
440
-			}
434
+            /**
435
+             * Cornerstone makes us play dirty tricks :/
436
+             * All media_buttons are removed via JS unless they are two specific id's so we wrap our content in this ID so it is not removed.
437
+             */
438
+            if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
439
+                echo '<span id="insert-media-button">';
440
+            }
441 441
 
442
-			echo self::shortcode_button( 'this', 'true' );
442
+            echo self::shortcode_button( 'this', 'true' );
443 443
 
444
-			// see opening note
445
-			if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
446
-				echo '</span>'; // end #insert-media-button
447
-			}
444
+            // see opening note
445
+            if ( function_exists( 'cornerstone_plugin_init' ) && ! is_admin() ) {
446
+                echo '</span>'; // end #insert-media-button
447
+            }
448 448
 
449
-			// Add separate script for generatepress theme sections
450
-			if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) {
451
-			} else {
452
-				self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function );
453
-			}
449
+            // Add separate script for generatepress theme sections
450
+            if ( function_exists( 'generate_sections_sections_metabox' ) && did_action( 'generate_sections_metabox' ) ) {
451
+            } else {
452
+                self::shortcode_insert_button_script( $editor_id, $insert_shortcode_function );
453
+            }
454 454
 
455
-			$shortcode_insert_button_once = true;
456
-		}
455
+            $shortcode_insert_button_once = true;
456
+        }
457 457
 
458
-		/**
459
-		 * Gets the shortcode insert button html.
460
-		 *
461
-		 * @param string $id
462
-		 * @param string $search_for_id
463
-		 *
464
-		 * @return mixed
465
-		 */
466
-		public static function shortcode_button( $id = '', $search_for_id = '' ) {
467
-			ob_start();
468
-			?>
458
+        /**
459
+         * Gets the shortcode insert button html.
460
+         *
461
+         * @param string $id
462
+         * @param string $search_for_id
463
+         *
464
+         * @return mixed
465
+         */
466
+        public static function shortcode_button( $id = '', $search_for_id = '' ) {
467
+            ob_start();
468
+            ?>
469 469
 			<span class="sd-lable-shortcode-inserter">
470 470
 				<a onclick="sd_ajax_get_picker(<?php echo $id;
471
-				if ( $search_for_id ) {
472
-					echo "," . $search_for_id;
473
-				} ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed"
471
+                if ( $search_for_id ) {
472
+                    echo "," . $search_for_id;
473
+                } ?>);" href="#TB_inline?width=100%&height=550&inlineId=super-duper-content-ajaxed"
474 474
 				   class="thickbox button super-duper-content-open" title="Add Shortcode">
475 475
 					<span style="vertical-align: middle;line-height: 18px;font-size: 20px;"
476 476
 						  class="dashicons dashicons-screenoptions"></span>
@@ -481,21 +481,21 @@  discard block
 block discarded – undo
481 481
 			</span>
482 482
 
483 483
 			<?php
484
-			$html = ob_get_clean();
484
+            $html = ob_get_clean();
485 485
 
486
-			// remove line breaks so we can use it in js
487
-			return preg_replace( "/\r|\n/", "", trim( $html ) );
488
-		}
486
+            // remove line breaks so we can use it in js
487
+            return preg_replace( "/\r|\n/", "", trim( $html ) );
488
+        }
489 489
 
490
-		/**
491
-		 * Makes SD work with the siteOrigin page builder.
492
-		 *
493
-		 * @return mixed
494
-		 *@since 1.0.6
495
-		 */
496
-		public static function siteorigin_js() {
497
-			ob_start();
498
-			?>
490
+        /**
491
+         * Makes SD work with the siteOrigin page builder.
492
+         *
493
+         * @return mixed
494
+         *@since 1.0.6
495
+         */
496
+        public static function siteorigin_js() {
497
+            ob_start();
498
+            ?>
499 499
 			<script>
500 500
 				/**
501 501
 				 * Check a form to see what items should be shown or hidden.
@@ -571,29 +571,29 @@  discard block
 block discarded – undo
571 571
 				});
572 572
 			</script>
573 573
 			<?php
574
-			$output = ob_get_clean();
574
+            $output = ob_get_clean();
575 575
 
576
-			/*
576
+            /*
577 577
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
578 578
 			 */
579 579
 
580
-			return str_replace( array(
581
-				'<script>',
582
-				'</script>'
583
-			), '', $output );
584
-		}
580
+            return str_replace( array(
581
+                '<script>',
582
+                '</script>'
583
+            ), '', $output );
584
+        }
585 585
 
586
-		/**
587
-		 * Output the JS and CSS for the shortcode insert button.
588
-		 *
589
-		 * @param string $editor_id
590
-		 * @param string $insert_shortcode_function
591
-		 *
592
-		 *@since 1.0.6
593
-		 *
594
-		 */
595
-		public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) {
596
-			?>
586
+        /**
587
+         * Output the JS and CSS for the shortcode insert button.
588
+         *
589
+         * @param string $editor_id
590
+         * @param string $insert_shortcode_function
591
+         *
592
+         *@since 1.0.6
593
+         *
594
+         */
595
+        public static function shortcode_insert_button_script( $editor_id = '', $insert_shortcode_function = '' ) {
596
+            ?>
597 597
 			<style>
598 598
 				.sd-shortcode-left-wrap {
599 599
 					float: left;
@@ -721,35 +721,35 @@  discard block
 block discarded – undo
721 721
 				<?php } ?>
722 722
 			</style>
723 723
 			<?php
724
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
725
-				echo "<script>" . self::siteorigin_js() . "</script>";
726
-			}
727
-			?>
724
+            if ( class_exists( 'SiteOrigin_Panels' ) ) {
725
+                echo "<script>" . self::siteorigin_js() . "</script>";
726
+            }
727
+            ?>
728 728
 			<script>
729 729
 				<?php
730
-				if(! empty( $insert_shortcode_function )){
731
-					echo $insert_shortcode_function;
732
-				}else{
733
-
734
-				/**
735
-				 * Function for super duper insert shortcode.
736
-				 *
737
-				 * @since 1.0.0
738
-				 */
739
-				?>
730
+                if(! empty( $insert_shortcode_function )){
731
+                    echo $insert_shortcode_function;
732
+                }else{
733
+
734
+                /**
735
+                 * Function for super duper insert shortcode.
736
+                 *
737
+                 * @since 1.0.0
738
+                 */
739
+                ?>
740 740
 				function sd_insert_shortcode($editor_id) {
741 741
 					$shortcode = jQuery('#TB_ajaxContent #sd-shortcode-output').val();
742 742
 					if ($shortcode) {
743 743
 						if (!$editor_id) {
744 744
 							<?php
745
-							if ( isset( $_REQUEST['et_fb'] ) ) {
746
-								echo '$editor_id = "#main_content_content_vb_tiny_mce";';
747
-							} elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) {
748
-								echo '$editor_id = "#elementor-controls .wp-editor-container textarea";';
749
-							} else {
750
-								echo '$editor_id = "#wp-content-editor-container textarea";';
751
-							}
752
-							?>
745
+                            if ( isset( $_REQUEST['et_fb'] ) ) {
746
+                                echo '$editor_id = "#main_content_content_vb_tiny_mce";';
747
+                            } elseif ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) {
748
+                                echo '$editor_id = "#elementor-controls .wp-editor-container textarea";';
749
+                            } else {
750
+                                echo '$editor_id = "#wp-content-editor-container textarea";';
751
+                            }
752
+                            ?>
753 753
 						} else {
754 754
 							$editor_id = '#' + $editor_id;
755 755
 						}
@@ -1063,18 +1063,18 @@  discard block
 block discarded – undo
1063 1063
 				}
1064 1064
 			</script>
1065 1065
 			<?php
1066
-		}
1066
+        }
1067 1067
 
1068
-		/**
1069
-		 * Gets some CSS for the widgets screen.
1070
-		 *
1071
-		 * @param bool $advanced If we should include advanced CSS.
1072
-		 *
1073
-		 * @return mixed
1074
-		 */
1075
-		public function widget_css( $advanced = true ) {
1076
-			ob_start();
1077
-			?>
1068
+        /**
1069
+         * Gets some CSS for the widgets screen.
1070
+         *
1071
+         * @param bool $advanced If we should include advanced CSS.
1072
+         *
1073
+         * @return mixed
1074
+         */
1075
+        public function widget_css( $advanced = true ) {
1076
+            ob_start();
1077
+            ?>
1078 1078
 			<style>
1079 1079
 				<?php if( $advanced ){ ?>
1080 1080
 				.sd-advanced-setting {
@@ -1114,26 +1114,26 @@  discard block
 block discarded – undo
1114 1114
 				.elementor-control .sd-argument select[multiple] option{padding:3px}
1115 1115
 			</style>
1116 1116
 			<?php
1117
-			$output = ob_get_clean();
1117
+            $output = ob_get_clean();
1118 1118
 
1119
-			/*
1119
+            /*
1120 1120
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1121 1121
 			 */
1122 1122
 
1123
-			return str_replace( array(
1124
-				'<style>',
1125
-				'</style>'
1126
-			), '', $output );
1127
-		}
1123
+            return str_replace( array(
1124
+                '<style>',
1125
+                '</style>'
1126
+            ), '', $output );
1127
+        }
1128 1128
 
1129
-		/**
1130
-		 * Gets some JS for the widgets screen.
1131
-		 *
1132
-		 * @return mixed
1133
-		 */
1134
-		public function widget_js() {
1135
-			ob_start();
1136
-			?>
1129
+        /**
1130
+         * Gets some JS for the widgets screen.
1131
+         *
1132
+         * @return mixed
1133
+         */
1134
+        public function widget_js() {
1135
+            ob_start();
1136
+            ?>
1137 1137
 			<script>
1138 1138
 
1139 1139
 				/**
@@ -1284,513 +1284,513 @@  discard block
 block discarded – undo
1284 1284
 				<?php do_action( 'wp_super_duper_widget_js', $this ); ?>
1285 1285
 			</script>
1286 1286
 			<?php
1287
-			$output = ob_get_clean();
1287
+            $output = ob_get_clean();
1288 1288
 
1289
-			/*
1289
+            /*
1290 1290
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
1291 1291
 			 */
1292 1292
 
1293
-			return str_replace( array(
1294
-				'<script>',
1295
-				'</script>'
1296
-			), '', $output );
1297
-		}
1293
+            return str_replace( array(
1294
+                '<script>',
1295
+                '</script>'
1296
+            ), '', $output );
1297
+        }
1298 1298
 
1299 1299
 
1300
-		/**
1301
-		 * Set the name from the argument key.
1302
-		 *
1303
-		 * @param $options
1304
-		 *
1305
-		 * @return mixed
1306
-		 */
1307
-		private function add_name_from_key( $options, $arguments = false ) {
1308
-			if ( ! empty( $options['arguments'] ) ) {
1309
-				foreach ( $options['arguments'] as $key => $val ) {
1310
-					$options['arguments'][ $key ]['name'] = $key;
1311
-				}
1312
-			} elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) {
1313
-				foreach ( $options as $key => $val ) {
1314
-					$options[ $key ]['name'] = $key;
1315
-				}
1316
-			}
1300
+        /**
1301
+         * Set the name from the argument key.
1302
+         *
1303
+         * @param $options
1304
+         *
1305
+         * @return mixed
1306
+         */
1307
+        private function add_name_from_key( $options, $arguments = false ) {
1308
+            if ( ! empty( $options['arguments'] ) ) {
1309
+                foreach ( $options['arguments'] as $key => $val ) {
1310
+                    $options['arguments'][ $key ]['name'] = $key;
1311
+                }
1312
+            } elseif ( $arguments && is_array( $options ) && ! empty( $options ) ) {
1313
+                foreach ( $options as $key => $val ) {
1314
+                    $options[ $key ]['name'] = $key;
1315
+                }
1316
+            }
1317 1317
 
1318
-			return $options;
1319
-		}
1318
+            return $options;
1319
+        }
1320 1320
 
1321
-		/**
1322
-		 * Register the parent shortcode.
1323
-		 *
1324
-		 * @since 1.0.0
1325
-		 */
1326
-		public function register_shortcode() {
1327
-			add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) );
1328
-			add_action( 'wp_ajax_super_duper_output_shortcode', array( $this, 'render_shortcode' ) );
1329
-		}
1321
+        /**
1322
+         * Register the parent shortcode.
1323
+         *
1324
+         * @since 1.0.0
1325
+         */
1326
+        public function register_shortcode() {
1327
+            add_shortcode( $this->base_id, array( $this, 'shortcode_output' ) );
1328
+            add_action( 'wp_ajax_super_duper_output_shortcode', array( $this, 'render_shortcode' ) );
1329
+        }
1330 1330
 
1331
-		/**
1332
-		 * Render the shortcode via ajax so we can return it to Gutenberg.
1333
-		 *
1334
-		 * @since 1.0.0
1335
-		 */
1336
-		public function render_shortcode() {
1337
-			check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true );
1338
-			if ( ! current_user_can( 'manage_options' ) ) {
1339
-				wp_die();
1340
-			}
1331
+        /**
1332
+         * Render the shortcode via ajax so we can return it to Gutenberg.
1333
+         *
1334
+         * @since 1.0.0
1335
+         */
1336
+        public function render_shortcode() {
1337
+            check_ajax_referer( 'super_duper_output_shortcode', '_ajax_nonce', true );
1338
+            if ( ! current_user_can( 'manage_options' ) ) {
1339
+                wp_die();
1340
+            }
1341 1341
 
1342
-			// we might need the $post value here so lets set it.
1343
-			if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) {
1344
-				$post_obj = get_post( absint( $_POST['post_id'] ) );
1345
-				if ( ! empty( $post_obj ) && empty( $post ) ) {
1346
-					global $post;
1347
-					$post = $post_obj;
1348
-				}
1349
-			}
1342
+            // we might need the $post value here so lets set it.
1343
+            if ( isset( $_POST['post_id'] ) && $_POST['post_id'] ) {
1344
+                $post_obj = get_post( absint( $_POST['post_id'] ) );
1345
+                if ( ! empty( $post_obj ) && empty( $post ) ) {
1346
+                    global $post;
1347
+                    $post = $post_obj;
1348
+                }
1349
+            }
1350 1350
 
1351
-			if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) {
1352
-				$is_preview = $this->is_preview();
1353
-				$shortcode_name   = sanitize_title_with_dashes( $_POST['shortcode'] );
1354
-				$attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array();
1355
-				$attributes       = '';
1356
-				if ( ! empty( $attributes_array ) ) {
1357
-					foreach ( $attributes_array as $key => $value ) {
1358
-						if ( is_array( $value ) ) {
1359
-							$value = implode( ",", $value );
1360
-						}
1351
+            if ( isset( $_POST['shortcode'] ) && $_POST['shortcode'] ) {
1352
+                $is_preview = $this->is_preview();
1353
+                $shortcode_name   = sanitize_title_with_dashes( $_POST['shortcode'] );
1354
+                $attributes_array = isset( $_POST['attributes'] ) && $_POST['attributes'] ? $_POST['attributes'] : array();
1355
+                $attributes       = '';
1356
+                if ( ! empty( $attributes_array ) ) {
1357
+                    foreach ( $attributes_array as $key => $value ) {
1358
+                        if ( is_array( $value ) ) {
1359
+                            $value = implode( ",", $value );
1360
+                        }
1361
+
1362
+                        if ( ! empty( $value ) ) {
1363
+                            $value = wp_unslash( $value );
1364
+
1365
+                            // Encode [ and ].
1366
+                            if ( $is_preview ) {
1367
+                                $value = $this->encode_shortcodes( $value );
1368
+                            }
1369
+                        }
1370
+                        $attributes .= " " . esc_attr( sanitize_title_with_dashes( $key ) ) . "='" . esc_attr( $value ) . "' ";
1371
+                    }
1372
+                }
1361 1373
 
1362
-						if ( ! empty( $value ) ) {
1363
-							$value = wp_unslash( $value );
1374
+                $shortcode = "[" . esc_attr( $shortcode_name ) . " " . $attributes . "]";
1364 1375
 
1365
-							// Encode [ and ].
1366
-							if ( $is_preview ) {
1367
-								$value = $this->encode_shortcodes( $value );
1368
-							}
1369
-						}
1370
-						$attributes .= " " . esc_attr( sanitize_title_with_dashes( $key ) ) . "='" . esc_attr( $value ) . "' ";
1371
-					}
1372
-				}
1376
+                $content = do_shortcode( $shortcode );
1373 1377
 
1374
-				$shortcode = "[" . esc_attr( $shortcode_name ) . " " . $attributes . "]";
1378
+                // Decode [ and ].
1379
+                if ( ! empty( $content ) && $is_preview ) {
1380
+                    $content = $this->decode_shortcodes( $content );
1381
+                }
1375 1382
 
1376
-				$content = do_shortcode( $shortcode );
1383
+                echo $content;
1384
+            }
1385
+            wp_die();
1386
+        }
1377 1387
 
1378
-				// Decode [ and ].
1379
-				if ( ! empty( $content ) && $is_preview ) {
1380
-					$content = $this->decode_shortcodes( $content );
1381
-				}
1388
+        /**
1389
+         * Output the shortcode.
1390
+         *
1391
+         * @param array $args
1392
+         * @param string $content
1393
+         *
1394
+         * @return string
1395
+         */
1396
+        public function shortcode_output( $args = array(), $content = '' ) {
1397
+            $_instance = $args;
1382 1398
 
1383
-				echo $content;
1384
-			}
1385
-			wp_die();
1386
-		}
1399
+            $args = $this->argument_values( $args );
1387 1400
 
1388
-		/**
1389
-		 * Output the shortcode.
1390
-		 *
1391
-		 * @param array $args
1392
-		 * @param string $content
1393
-		 *
1394
-		 * @return string
1395
-		 */
1396
-		public function shortcode_output( $args = array(), $content = '' ) {
1397
-			$_instance = $args;
1398
-
1399
-			$args = $this->argument_values( $args );
1400
-
1401
-			// add extra argument so we know its a output to gutenberg
1402
-			//$args
1403
-			$args = $this->string_to_bool( $args );
1404
-
1405
-			// if we have a enclosed shortcode we add it to the special `html` argument
1406
-			if ( ! empty( $content ) ) {
1407
-				$args['html'] = $content;
1408
-			}
1401
+            // add extra argument so we know its a output to gutenberg
1402
+            //$args
1403
+            $args = $this->string_to_bool( $args );
1409 1404
 
1410
-			if ( ! $this->is_preview() ) {
1411
-				/**
1412
-				 * Filters the settings for a particular widget args.
1413
-				 *
1414
-				 * @param array          $args      The current widget instance's settings.
1415
-				 * @param WP_Super_Duper $widget    The current widget settings.
1416
-				 * @param array          $_instance An array of default widget arguments.
1417
-				 *
1418
-				 *@since 1.0.28
1419
-				 *
1420
-				 */
1421
-				$args = apply_filters( 'wp_super_duper_widget_display_callback', $args, $this, $_instance );
1405
+            // if we have a enclosed shortcode we add it to the special `html` argument
1406
+            if ( ! empty( $content ) ) {
1407
+                $args['html'] = $content;
1408
+            }
1422 1409
 
1423
-				if ( ! is_array( $args ) ) {
1424
-					return $args;
1425
-				}
1426
-			}
1410
+            if ( ! $this->is_preview() ) {
1411
+                /**
1412
+                 * Filters the settings for a particular widget args.
1413
+                 *
1414
+                 * @param array          $args      The current widget instance's settings.
1415
+                 * @param WP_Super_Duper $widget    The current widget settings.
1416
+                 * @param array          $_instance An array of default widget arguments.
1417
+                 *
1418
+                 *@since 1.0.28
1419
+                 *
1420
+                 */
1421
+                $args = apply_filters( 'wp_super_duper_widget_display_callback', $args, $this, $_instance );
1422
+
1423
+                if ( ! is_array( $args ) ) {
1424
+                    return $args;
1425
+                }
1426
+            }
1427 1427
 
1428
-			$class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : '';
1429
-			$class .= " sdel-".$this->get_instance_hash();
1428
+            $class = isset( $this->options['widget_ops']['classname'] ) ? esc_attr( $this->options['widget_ops']['classname'] ) : '';
1429
+            $class .= " sdel-".$this->get_instance_hash();
1430 1430
 
1431
-			$class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
1432
-			$class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
1431
+            $class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
1432
+            $class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
1433 1433
 
1434
-			$attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
1435
-			$attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
1434
+            $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
1435
+            $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
1436 1436
 
1437
-			$shortcode_args = array();
1438
-			$output         = '';
1439
-			$no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1440
-			if ( isset( $args['no_wrap'] ) && $args['no_wrap'] ) {
1441
-				$no_wrap = true;
1442
-			}
1443
-			$main_content = $this->output( $args, $shortcode_args, $content );
1444
-			if ( $main_content && ! $no_wrap ) {
1445
-				// wrap the shortcode in a div with the same class as the widget
1446
-				$output .= '<div class="' . $class . '" ' . $attrs . '>';
1447
-				if ( ! empty( $args['title'] ) ) {
1448
-					// if its a shortcode and there is a title try to grab the title wrappers
1449
-					$shortcode_args = array( 'before_title' => '', 'after_title' => '' );
1450
-					if ( empty( $instance ) ) {
1451
-						global $wp_registered_sidebars;
1452
-						if ( ! empty( $wp_registered_sidebars ) ) {
1453
-							foreach ( $wp_registered_sidebars as $sidebar ) {
1454
-								if ( ! empty( $sidebar['before_title'] ) ) {
1455
-									$shortcode_args['before_title'] = $sidebar['before_title'];
1456
-									$shortcode_args['after_title']  = $sidebar['after_title'];
1457
-									break;
1458
-								}
1459
-							}
1460
-						}
1461
-					}
1462
-					$output .= $this->output_title( $shortcode_args, $args );
1463
-				}
1464
-				$output .= $main_content;
1465
-				$output .= '</div>';
1466
-			} elseif ( $main_content && $no_wrap ) {
1467
-				$output .= $main_content;
1468
-			}
1437
+            $shortcode_args = array();
1438
+            $output         = '';
1439
+            $no_wrap        = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
1440
+            if ( isset( $args['no_wrap'] ) && $args['no_wrap'] ) {
1441
+                $no_wrap = true;
1442
+            }
1443
+            $main_content = $this->output( $args, $shortcode_args, $content );
1444
+            if ( $main_content && ! $no_wrap ) {
1445
+                // wrap the shortcode in a div with the same class as the widget
1446
+                $output .= '<div class="' . $class . '" ' . $attrs . '>';
1447
+                if ( ! empty( $args['title'] ) ) {
1448
+                    // if its a shortcode and there is a title try to grab the title wrappers
1449
+                    $shortcode_args = array( 'before_title' => '', 'after_title' => '' );
1450
+                    if ( empty( $instance ) ) {
1451
+                        global $wp_registered_sidebars;
1452
+                        if ( ! empty( $wp_registered_sidebars ) ) {
1453
+                            foreach ( $wp_registered_sidebars as $sidebar ) {
1454
+                                if ( ! empty( $sidebar['before_title'] ) ) {
1455
+                                    $shortcode_args['before_title'] = $sidebar['before_title'];
1456
+                                    $shortcode_args['after_title']  = $sidebar['after_title'];
1457
+                                    break;
1458
+                                }
1459
+                            }
1460
+                        }
1461
+                    }
1462
+                    $output .= $this->output_title( $shortcode_args, $args );
1463
+                }
1464
+                $output .= $main_content;
1465
+                $output .= '</div>';
1466
+            } elseif ( $main_content && $no_wrap ) {
1467
+                $output .= $main_content;
1468
+            }
1469 1469
 
1470
-			// if preview show a placeholder if empty
1471
-			if ( $this->is_preview() && $output == '' ) {
1472
-				$output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
1473
-			}
1470
+            // if preview show a placeholder if empty
1471
+            if ( $this->is_preview() && $output == '' ) {
1472
+                $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
1473
+            }
1474 1474
 
1475
-			return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this );
1476
-		}
1475
+            return apply_filters( 'wp_super_duper_widget_output', $output, $args, $shortcode_args, $this );
1476
+        }
1477 1477
 
1478
-		/**
1479
-		 * Placeholder text to show if output is empty and we are on a preview/builder page.
1480
-		 *
1481
-		 * @param string $name
1482
-		 *
1483
-		 * @return string
1484
-		 */
1485
-		public function preview_placeholder_text( $name = '' ) {
1486
-			return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . wp_sprintf( __( 'Placeholder for: %s', 'ayecode-connect' ), $name ) . "</div>";
1487
-		}
1478
+        /**
1479
+         * Placeholder text to show if output is empty and we are on a preview/builder page.
1480
+         *
1481
+         * @param string $name
1482
+         *
1483
+         * @return string
1484
+         */
1485
+        public function preview_placeholder_text( $name = '' ) {
1486
+            return "<div style='background:#0185ba33;padding: 10px;border: 4px #ccc dashed;'>" . wp_sprintf( __( 'Placeholder for: %s', 'ayecode-connect' ), $name ) . "</div>";
1487
+        }
1488 1488
 
1489
-		/**
1490
-		 * Sometimes booleans values can be turned to strings, so we fix that.
1491
-		 *
1492
-		 * @param $options
1493
-		 *
1494
-		 * @return mixed
1495
-		 */
1496
-		public function string_to_bool( $options ) {
1497
-			// convert bool strings to booleans
1498
-			foreach ( $options as $key => $val ) {
1499
-				if ( $val == 'false' ) {
1500
-					$options[ $key ] = false;
1501
-				} elseif ( $val == 'true' ) {
1502
-					$options[ $key ] = true;
1503
-				}
1504
-			}
1489
+        /**
1490
+         * Sometimes booleans values can be turned to strings, so we fix that.
1491
+         *
1492
+         * @param $options
1493
+         *
1494
+         * @return mixed
1495
+         */
1496
+        public function string_to_bool( $options ) {
1497
+            // convert bool strings to booleans
1498
+            foreach ( $options as $key => $val ) {
1499
+                if ( $val == 'false' ) {
1500
+                    $options[ $key ] = false;
1501
+                } elseif ( $val == 'true' ) {
1502
+                    $options[ $key ] = true;
1503
+                }
1504
+            }
1505 1505
 
1506
-			return $options;
1507
-		}
1506
+            return $options;
1507
+        }
1508 1508
 
1509
-		/**
1510
-		 * Get the argument values that are also filterable.
1511
-		 *
1512
-		 * @param $instance
1513
-		 *
1514
-		 * @return array
1515
-		 *@since 1.0.12 Don't set checkbox default value if the value is empty.
1516
-		 *
1517
-		 */
1518
-		public function argument_values( $instance ) {
1519
-			$argument_values = array();
1520
-
1521
-			// set widget instance
1522
-			$this->instance = $instance;
1523
-
1524
-			if ( empty( $this->arguments ) ) {
1525
-				$this->arguments = $this->get_arguments();
1526
-			}
1509
+        /**
1510
+         * Get the argument values that are also filterable.
1511
+         *
1512
+         * @param $instance
1513
+         *
1514
+         * @return array
1515
+         *@since 1.0.12 Don't set checkbox default value if the value is empty.
1516
+         *
1517
+         */
1518
+        public function argument_values( $instance ) {
1519
+            $argument_values = array();
1527 1520
 
1528
-			if ( ! empty( $this->arguments ) ) {
1529
-				foreach ( $this->arguments as $key => $args ) {
1530
-					// set the input name from the key
1531
-					$args['name'] = $key;
1532
-					//
1533
-					$argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1534
-					if ( $args['type'] == 'checkbox' && $argument_values[ $key ] == '' ) {
1535
-						// don't set default for an empty checkbox
1536
-					} elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1537
-						$argument_values[ $key ] = $args['default'];
1538
-					}
1539
-				}
1540
-			}
1521
+            // set widget instance
1522
+            $this->instance = $instance;
1541 1523
 
1542
-			return $argument_values;
1543
-		}
1524
+            if ( empty( $this->arguments ) ) {
1525
+                $this->arguments = $this->get_arguments();
1526
+            }
1544 1527
 
1545
-		/**
1546
-		 * Set arguments in super duper.
1547
-		 *
1548
-		 * @return array Set arguments.
1549
-		 *@since 1.0.0
1550
-		 *
1551
-		 */
1552
-		public function set_arguments() {
1553
-			return $this->arguments;
1554
-		}
1528
+            if ( ! empty( $this->arguments ) ) {
1529
+                foreach ( $this->arguments as $key => $args ) {
1530
+                    // set the input name from the key
1531
+                    $args['name'] = $key;
1532
+                    //
1533
+                    $argument_values[ $key ] = isset( $instance[ $key ] ) ? $instance[ $key ] : '';
1534
+                    if ( $args['type'] == 'checkbox' && $argument_values[ $key ] == '' ) {
1535
+                        // don't set default for an empty checkbox
1536
+                    } elseif ( $argument_values[ $key ] == '' && isset( $args['default'] ) ) {
1537
+                        $argument_values[ $key ] = $args['default'];
1538
+                    }
1539
+                }
1540
+            }
1555 1541
 
1556
-		/**
1557
-		 * Get arguments in super duper.
1558
-		 *
1559
-		 * @return array Get arguments.
1560
-		 *@since 1.0.0
1561
-		 *
1562
-		 */
1563
-		public function get_arguments() {
1564
-			if ( empty( $this->arguments ) ) {
1565
-				$this->arguments = $this->set_arguments();
1566
-			}
1542
+            return $argument_values;
1543
+        }
1567 1544
 
1568
-			$this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance );
1569
-			$this->arguments = $this->add_name_from_key( $this->arguments, true );
1545
+        /**
1546
+         * Set arguments in super duper.
1547
+         *
1548
+         * @return array Set arguments.
1549
+         *@since 1.0.0
1550
+         *
1551
+         */
1552
+        public function set_arguments() {
1553
+            return $this->arguments;
1554
+        }
1570 1555
 
1571
-			return $this->arguments;
1572
-		}
1556
+        /**
1557
+         * Get arguments in super duper.
1558
+         *
1559
+         * @return array Get arguments.
1560
+         *@since 1.0.0
1561
+         *
1562
+         */
1563
+        public function get_arguments() {
1564
+            if ( empty( $this->arguments ) ) {
1565
+                $this->arguments = $this->set_arguments();
1566
+            }
1573 1567
 
1574
-		/**
1575
-		 * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class.
1576
-		 *
1577
-		 * @param array $args
1578
-		 * @param array $widget_args
1579
-		 * @param string $content
1580
-		 */
1581
-		public function output( $args = array(), $widget_args = array(), $content = '' ) {
1568
+            $this->arguments = apply_filters( 'wp_super_duper_arguments', $this->arguments, $this->options, $this->instance );
1569
+            $this->arguments = $this->add_name_from_key( $this->arguments, true );
1582 1570
 
1583
-		}
1571
+            return $this->arguments;
1572
+        }
1584 1573
 
1585
-		/**
1586
-		 * Add the dynamic block code inline when the wp-block in enqueued.
1587
-		 */
1588
-		public function register_block() {
1589
-			wp_add_inline_script( 'wp-blocks', $this->block() );
1590
-			if ( class_exists( 'SiteOrigin_Panels' ) ) {
1591
-				wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() );
1592
-			}
1593
-		}
1574
+        /**
1575
+         * This is the main output class for all 3 items, widget, shortcode and block, it is extended in the calling class.
1576
+         *
1577
+         * @param array $args
1578
+         * @param array $widget_args
1579
+         * @param string $content
1580
+         */
1581
+        public function output( $args = array(), $widget_args = array(), $content = '' ) {
1594 1582
 
1595
-		/**
1596
-		 * Check if we need to show advanced options.
1597
-		 *
1598
-		 * @return bool
1599
-		 */
1600
-		public function block_show_advanced() {
1601
-
1602
-			$show      = false;
1603
-			$arguments = $this->get_arguments();
1604
-
1605
-			if ( ! empty( $arguments ) ) {
1606
-				foreach ( $arguments as $argument ) {
1607
-					if ( isset( $argument['advanced'] ) && $argument['advanced'] ) {
1608
-						$show = true;
1609
-						break; // no need to continue if we know we have it
1610
-					}
1611
-				}
1612
-			}
1583
+        }
1613 1584
 
1614
-			return $show;
1615
-		}
1585
+        /**
1586
+         * Add the dynamic block code inline when the wp-block in enqueued.
1587
+         */
1588
+        public function register_block() {
1589
+            wp_add_inline_script( 'wp-blocks', $this->block() );
1590
+            if ( class_exists( 'SiteOrigin_Panels' ) ) {
1591
+                wp_add_inline_script( 'wp-blocks', $this->siteorigin_js() );
1592
+            }
1593
+        }
1616 1594
 
1617
-		/**
1618
-		 * Get the url path to the current folder.
1619
-		 *
1620
-		 * @return string
1621
-		 */
1622
-		public function get_url() {
1623
-			$url = $this->url;
1624
-
1625
-			if ( ! $url ) {
1626
-				$content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
1627
-				$content_url = untrailingslashit( WP_CONTENT_URL );
1628
-
1629
-				// Replace http:// to https://.
1630
-				if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
1631
-					$content_url = str_replace( 'http://', 'https://', $content_url );
1632
-				}
1595
+        /**
1596
+         * Check if we need to show advanced options.
1597
+         *
1598
+         * @return bool
1599
+         */
1600
+        public function block_show_advanced() {
1633 1601
 
1634
-				// Check if we are inside a plugin
1635
-				$file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
1636
-				$url = str_replace( $content_dir, $content_url, $file_dir );
1637
-				$url = trailingslashit( $url );
1638
-				$this->url = $url;
1639
-			}
1602
+            $show      = false;
1603
+            $arguments = $this->get_arguments();
1640 1604
 
1641
-			return $url;
1642
-		}
1605
+            if ( ! empty( $arguments ) ) {
1606
+                foreach ( $arguments as $argument ) {
1607
+                    if ( isset( $argument['advanced'] ) && $argument['advanced'] ) {
1608
+                        $show = true;
1609
+                        break; // no need to continue if we know we have it
1610
+                    }
1611
+                }
1612
+            }
1643 1613
 
1644
-		/**
1645
-		 * Get the url path to the current folder.
1646
-		 *
1647
-		 * @return string
1648
-		 */
1649
-		public function get_url_old() {
1614
+            return $show;
1615
+        }
1650 1616
 
1651
-			$url = $this->url;
1617
+        /**
1618
+         * Get the url path to the current folder.
1619
+         *
1620
+         * @return string
1621
+         */
1622
+        public function get_url() {
1623
+            $url = $this->url;
1652 1624
 
1653
-			if ( ! $url ) {
1654
-				// check if we are inside a plugin
1655
-				$file_dir = str_replace( "/includes", "", dirname( __FILE__ ) );
1625
+            if ( ! $url ) {
1626
+                $content_dir = wp_normalize_path( untrailingslashit( WP_CONTENT_DIR ) );
1627
+                $content_url = untrailingslashit( WP_CONTENT_URL );
1656 1628
 
1657
-				$dir_parts = explode( "/wp-content/", $file_dir );
1658
-				$url_parts = explode( "/wp-content/", plugins_url() );
1629
+                // Replace http:// to https://.
1630
+                if ( strpos( $content_url, 'http://' ) === 0 && strpos( plugins_url(), 'https://' ) === 0 ) {
1631
+                    $content_url = str_replace( 'http://', 'https://', $content_url );
1632
+                }
1659 1633
 
1660
-				if ( ! empty( $url_parts[0] ) && ! empty( $dir_parts[1] ) ) {
1661
-					$url       = trailingslashit( $url_parts[0] . "/wp-content/" . $dir_parts[1] );
1662
-					$this->url = $url;
1663
-				}
1664
-			}
1634
+                // Check if we are inside a plugin
1635
+                $file_dir = str_replace( "/includes", "", wp_normalize_path( dirname( __FILE__ ) ) );
1636
+                $url = str_replace( $content_dir, $content_url, $file_dir );
1637
+                $url = trailingslashit( $url );
1638
+                $this->url = $url;
1639
+            }
1665 1640
 
1641
+            return $url;
1642
+        }
1666 1643
 
1667
-			return $url;
1668
-		}
1644
+        /**
1645
+         * Get the url path to the current folder.
1646
+         *
1647
+         * @return string
1648
+         */
1649
+        public function get_url_old() {
1669 1650
 
1670
-		/**
1671
-		 * Generate the block icon.
1672
-		 *
1673
-		 * Enables the use of Font Awesome icons.
1674
-		 *
1675
-		 * @note xlink:href is actually deprecated but href is not supported by all so we use both.
1676
-		 *
1677
-		 * @param $icon
1678
-		 *
1679
-		 * @return string
1680
-		 *@since 1.1.0
1681
-		 */
1682
-		public function get_block_icon( $icon ) {
1683
-
1684
-			// check if we have a Font Awesome icon
1685
-			$fa_type = '';
1686
-			if ( substr( $icon, 0, 7 ) === "fas fa-" ) {
1687
-				$fa_type = 'solid';
1688
-			} elseif ( substr( $icon, 0, 7 ) === "far fa-" ) {
1689
-				$fa_type = 'regular';
1690
-			} elseif ( substr( $icon, 0, 7 ) === "fab fa-" ) {
1691
-				$fa_type = 'brands';
1692
-			} else {
1693
-				$icon = "'" . $icon . "'";
1694
-			}
1651
+            $url = $this->url;
1695 1652
 
1696
-			// set the icon if we found one
1697
-			if ( $fa_type ) {
1698
-				$fa_icon = str_replace( array( "fas fa-", "far fa-", "fab fa-" ), "", $icon );
1699
-				$icon    = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "','href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "'}))";
1700
-			}
1653
+            if ( ! $url ) {
1654
+                // check if we are inside a plugin
1655
+                $file_dir = str_replace( "/includes", "", dirname( __FILE__ ) );
1701 1656
 
1702
-			return $icon;
1703
-		}
1657
+                $dir_parts = explode( "/wp-content/", $file_dir );
1658
+                $url_parts = explode( "/wp-content/", plugins_url() );
1704 1659
 
1705
-		public function group_arguments( $arguments ) {
1706
-			if ( ! empty( $arguments ) ) {
1707
-				$temp_arguments = array();
1708
-				$general        = __( "General", 'ayecode-connect' );
1709
-				$add_sections   = false;
1710
-				foreach ( $arguments as $key => $args ) {
1711
-					if ( isset( $args['group'] ) ) {
1712
-						$temp_arguments[ $args['group'] ][ $key ] = $args;
1713
-						$add_sections                             = true;
1714
-					} else {
1715
-						$temp_arguments[ $general ][ $key ] = $args;
1716
-					}
1717
-				}
1660
+                if ( ! empty( $url_parts[0] ) && ! empty( $dir_parts[1] ) ) {
1661
+                    $url       = trailingslashit( $url_parts[0] . "/wp-content/" . $dir_parts[1] );
1662
+                    $this->url = $url;
1663
+                }
1664
+            }
1718 1665
 
1719
-				// only add sections if more than one
1720
-				if ( $add_sections ) {
1721
-					$arguments = $temp_arguments;
1722
-				}
1723
-			}
1724 1666
 
1725
-			return $arguments;
1726
-		}
1667
+            return $url;
1668
+        }
1727 1669
 
1728
-		/**
1729
-		 * Parse used group tabs.
1730
-		 *
1731
-		 * @since 1.1.17
1732
-		 */
1733
-		public function group_block_tabs( $tabs, $arguments ) {
1734
-			if ( ! empty( $tabs ) && ! empty( $arguments ) ) {
1735
-				$has_sections = false;
1736
-
1737
-				foreach ( $this->arguments as $key => $args ) {
1738
-					if ( isset( $args['group'] ) ) {
1739
-						$has_sections = true;
1740
-						break;
1741
-					}
1742
-				}
1670
+        /**
1671
+         * Generate the block icon.
1672
+         *
1673
+         * Enables the use of Font Awesome icons.
1674
+         *
1675
+         * @note xlink:href is actually deprecated but href is not supported by all so we use both.
1676
+         *
1677
+         * @param $icon
1678
+         *
1679
+         * @return string
1680
+         *@since 1.1.0
1681
+         */
1682
+        public function get_block_icon( $icon ) {
1683
+
1684
+            // check if we have a Font Awesome icon
1685
+            $fa_type = '';
1686
+            if ( substr( $icon, 0, 7 ) === "fas fa-" ) {
1687
+                $fa_type = 'solid';
1688
+            } elseif ( substr( $icon, 0, 7 ) === "far fa-" ) {
1689
+                $fa_type = 'regular';
1690
+            } elseif ( substr( $icon, 0, 7 ) === "fab fa-" ) {
1691
+                $fa_type = 'brands';
1692
+            } else {
1693
+                $icon = "'" . $icon . "'";
1694
+            }
1743 1695
 
1744
-				if ( ! $has_sections ) {
1745
-					return $tabs;
1746
-				}
1696
+            // set the icon if we found one
1697
+            if ( $fa_type ) {
1698
+                $fa_icon = str_replace( array( "fas fa-", "far fa-", "fab fa-" ), "", $icon );
1699
+                $icon    = "el('svg',{width: 20, height: 20, viewBox: '0 0 20 20'},el('use', {'xlink:href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "','href': '" . $this->get_url() . "icons/" . $fa_type . ".svg#" . $fa_icon . "'}))";
1700
+            }
1747 1701
 
1748
-				$new_tabs = array();
1702
+            return $icon;
1703
+        }
1749 1704
 
1750
-				foreach ( $tabs as $tab_key => $tab ) {
1751
-					$new_groups = array();
1705
+        public function group_arguments( $arguments ) {
1706
+            if ( ! empty( $arguments ) ) {
1707
+                $temp_arguments = array();
1708
+                $general        = __( "General", 'ayecode-connect' );
1709
+                $add_sections   = false;
1710
+                foreach ( $arguments as $key => $args ) {
1711
+                    if ( isset( $args['group'] ) ) {
1712
+                        $temp_arguments[ $args['group'] ][ $key ] = $args;
1713
+                        $add_sections                             = true;
1714
+                    } else {
1715
+                        $temp_arguments[ $general ][ $key ] = $args;
1716
+                    }
1717
+                }
1752 1718
 
1753
-					if ( ! empty( $tab['groups'] ) && is_array( $tab['groups'] ) ) {
1754
-						foreach ( $tab['groups'] as $group ) {
1755
-							if ( isset( $arguments[ $group ] ) ) {
1756
-								$new_groups[] = $group;
1757
-							}
1758
-						}
1759
-					}
1719
+                // only add sections if more than one
1720
+                if ( $add_sections ) {
1721
+                    $arguments = $temp_arguments;
1722
+                }
1723
+            }
1760 1724
 
1761
-					if ( ! empty( $new_groups ) ) {
1762
-						$tab['groups'] = $new_groups;
1725
+            return $arguments;
1726
+        }
1763 1727
 
1764
-						$new_tabs[ $tab_key ] = $tab;
1765
-					}
1766
-				}
1728
+        /**
1729
+         * Parse used group tabs.
1730
+         *
1731
+         * @since 1.1.17
1732
+         */
1733
+        public function group_block_tabs( $tabs, $arguments ) {
1734
+            if ( ! empty( $tabs ) && ! empty( $arguments ) ) {
1735
+                $has_sections = false;
1736
+
1737
+                foreach ( $this->arguments as $key => $args ) {
1738
+                    if ( isset( $args['group'] ) ) {
1739
+                        $has_sections = true;
1740
+                        break;
1741
+                    }
1742
+                }
1767 1743
 
1768
-				$tabs = $new_tabs;
1769
-			}
1744
+                if ( ! $has_sections ) {
1745
+                    return $tabs;
1746
+                }
1770 1747
 
1771
-			return $tabs;
1772
-		}
1748
+                $new_tabs = array();
1749
+
1750
+                foreach ( $tabs as $tab_key => $tab ) {
1751
+                    $new_groups = array();
1752
+
1753
+                    if ( ! empty( $tab['groups'] ) && is_array( $tab['groups'] ) ) {
1754
+                        foreach ( $tab['groups'] as $group ) {
1755
+                            if ( isset( $arguments[ $group ] ) ) {
1756
+                                $new_groups[] = $group;
1757
+                            }
1758
+                        }
1759
+                    }
1760
+
1761
+                    if ( ! empty( $new_groups ) ) {
1762
+                        $tab['groups'] = $new_groups;
1773 1763
 
1774
-		/**
1775
-		 * Output the JS for building the dynamic Guntenberg block.
1776
-		 *
1777
-		 * @return mixed
1778
-		 *@since 1.0.9 Save numbers as numbers and not strings.
1779
-		 * @since 1.1.0 Font Awesome classes can be used for icons.
1780
-		 * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap.
1781
-		 */
1782
-		public function block() {
1783
-			global $sd_is_js_functions_loaded, $aui_bs5;
1784
-
1785
-			$show_advanced = $this->block_show_advanced();
1786
-
1787
-			ob_start();
1788
-			?>
1764
+                        $new_tabs[ $tab_key ] = $tab;
1765
+                    }
1766
+                }
1767
+
1768
+                $tabs = $new_tabs;
1769
+            }
1770
+
1771
+            return $tabs;
1772
+        }
1773
+
1774
+        /**
1775
+         * Output the JS for building the dynamic Guntenberg block.
1776
+         *
1777
+         * @return mixed
1778
+         *@since 1.0.9 Save numbers as numbers and not strings.
1779
+         * @since 1.1.0 Font Awesome classes can be used for icons.
1780
+         * @since 1.0.4 Added block_wrap property which will set the block wrapping output element ie: div, span, p or empty for no wrap.
1781
+         */
1782
+        public function block() {
1783
+            global $sd_is_js_functions_loaded, $aui_bs5;
1784
+
1785
+            $show_advanced = $this->block_show_advanced();
1786
+
1787
+            ob_start();
1788
+            ?>
1789 1789
 			<script>
1790 1790
 			<?php
1791
-			if ( ! $sd_is_js_functions_loaded ) {
1792
-				$sd_is_js_functions_loaded = true;
1793
-			?>
1791
+            if ( ! $sd_is_js_functions_loaded ) {
1792
+                $sd_is_js_functions_loaded = true;
1793
+            ?>
1794 1794
 function sd_show_view_options($this){
1795 1795
 	if(jQuery($this).html().length){
1796 1796
 		jQuery($this).html('');
@@ -2290,8 +2290,8 @@  discard block
 block discarded – undo
2290 2290
 				$classes = [];
2291 2291
 
2292 2292
 				<?php
2293
-				if($aui_bs5){
2294
-					?>
2293
+                if($aui_bs5){
2294
+                    ?>
2295 2295
 				$aui_bs5 = true;
2296 2296
 				$p_ml = 'ms-';
2297 2297
 				$p_mr = 'me-';
@@ -2299,8 +2299,8 @@  discard block
 block discarded – undo
2299 2299
 				$p_pl = 'ps-';
2300 2300
 				$p_pr = 'pe-';
2301 2301
 					<?php
2302
-				}else{
2303
-						?>
2302
+                }else{
2303
+                        ?>
2304 2304
 				$aui_bs5 = false;
2305 2305
 				$p_ml = 'ml-';
2306 2306
 				$p_mr = 'mr-';
@@ -2308,8 +2308,8 @@  discard block
 block discarded – undo
2308 2308
 				$p_pl = 'pl-';
2309 2309
 				$p_pr = 'pr-';
2310 2310
 					<?php
2311
-				}
2312
-				?>
2311
+                }
2312
+                ?>
2313 2313
 
2314 2314
 				// margins
2315 2315
 				if ( $args['mt'] !== undefined && $args['mt'] !== '' ) { $classes.push( "mt-" + $args['mt'] );  $mt = $args['mt']; }else{$mt = null;}
@@ -2493,12 +2493,12 @@  discard block
 block discarded – undo
2493 2493
 			<?php
2494 2494
 
2495 2495
 
2496
-			}
2496
+            }
2497 2497
 
2498
-			if(method_exists($this,'block_global_js')){
2499
-					echo $this->block_global_js();
2500
-			}
2501
-			?>
2498
+            if(method_exists($this,'block_global_js')){
2499
+                    echo $this->block_global_js();
2500
+            }
2501
+            ?>
2502 2502
 
2503 2503
 jQuery(function() {
2504 2504
 
@@ -2551,13 +2551,13 @@  discard block
 block discarded – undo
2551 2551
 						icon: <?php echo $this->get_block_icon( $this->options['block-icon'] );?>,//'<?php echo isset( $this->options['block-icon'] ) ? esc_attr( $this->options['block-icon'] ) : 'shield-alt';?>', // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/.
2552 2552
 						supports: {
2553 2553
 							<?php
2554
-							if(!isset($this->options['block-supports']['renaming'])){
2555
-								$this->options['block-supports']['renaming'] = false;
2556
-							}
2557
-							if ( isset( $this->options['block-supports'] ) ) {
2558
-								echo $this->array_to_attributes( $this->options['block-supports'] );
2559
-							}
2560
-							?>
2554
+                            if(!isset($this->options['block-supports']['renaming'])){
2555
+                                $this->options['block-supports']['renaming'] = false;
2556
+                            }
2557
+                            if ( isset( $this->options['block-supports'] ) ) {
2558
+                                echo $this->array_to_attributes( $this->options['block-supports'] );
2559
+                            }
2560
+                            ?>
2561 2561
 						},
2562 2562
 						__experimentalLabel( attributes, { context } ) {
2563 2563
 							var visibility_html = attributes && attributes.visibility_conditions ? ' &#128065;' : '';
@@ -2567,174 +2567,174 @@  discard block
 block discarded – undo
2567 2567
 						},
2568 2568
 						category: '<?php echo isset( $this->options['block-category'] ) ? esc_attr( $this->options['block-category'] ) : 'common';?>', // Block category — Group blocks together based on common traits E.g. common, formatting, layout widgets, embed.
2569 2569
 						<?php if ( isset( $this->options['block-keywords'] ) ) {
2570
-						echo "keywords : " . $this->options['block-keywords'] . ",";
2571
-						}
2572
-
2573
-
2574
-						// block hover preview.
2575
-						$example_args = array();
2576
-						if(!empty($this->arguments)){
2577
-							foreach($this->arguments as $key => $a_args){
2578
-								if(isset($a_args['example'])){
2579
-									$example_args[$key] = $a_args['example'];
2580
-								}
2581
-							}
2582
-						}
2583
-						$viewport_width = isset($this->options['example']['viewportWidth']) ? 'viewportWidth: '.absint($this->options['example']['viewportWidth']) : '';
2584
-						$example_inner_blocks = !empty($this->options['example']['innerBlocks']) && is_array($this->options['example']['innerBlocks']) ? 'innerBlocks: ' . wp_json_encode($this->options['example']['innerBlocks']) : '';
2585
-						if( isset( $this->options['example'] ) && $this->options['example'] === false ){
2586
-							// no preview if set to false
2587
-						}elseif( !empty( $example_args ) ){
2588
-							echo "example : {attributes:{".$this->array_to_attributes( $example_args )."},$viewport_width},";
2589
-						}elseif( !empty( $this->options['example'] ) ){
2590
-							unset($this->options['example']['viewportWidth']);
2591
-							unset($this->options['example']['innerBlocks']);
2592
-							$example_atts = $this->array_to_attributes( $this->options['example'] );
2593
-							$example_parts = array();
2594
-							if($example_atts){
2595
-								$example_parts[] = rtrim($example_atts,",");
2596
-							}
2597
-							if($viewport_width){
2598
-								$example_parts[] = $viewport_width;
2599
-							}
2600
-							if($example_inner_blocks){
2601
-								$example_parts[] = $example_inner_blocks;
2602
-							}
2603
-							if(!empty($example_parts)){
2604
-								echo "example : {".implode(',', $example_parts)."},";
2605
-							}
2606
-						}else{
2607
-							echo 'example : {viewportWidth: 500},';
2608
-						}
2609
-
2610
-
2611
-
2612
-						// limit to parent
2613
-						if( !empty( $this->options['parent'] ) ){
2614
-							echo "parent : " . wp_json_encode( $this->options['parent'] ) . ",";
2615
-						}
2616
-
2617
-						// limit allowed blocks
2618
-						if( !empty( $this->options['allowed-blocks'] ) ){
2619
-							echo "allowedBlocks : " . wp_json_encode( $this->options['allowed-blocks'] ) . ",";
2620
-						}
2621
-
2622
-						// maybe set no_wrap
2623
-						$no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
2624
-						if ( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ) {
2625
-							$no_wrap = true;
2626
-						}
2627
-						if ( $no_wrap ) {
2628
-							$this->options['block-wrap'] = '';
2629
-						}
2630
-
2631
-						// maybe load the drag/drop functions.
2632
-						$img_drag_drop = false;
2633
-
2634
-						$show_alignment = false;
2635
-						// align feature
2636
-						/*echo "supports: {";
2570
+                        echo "keywords : " . $this->options['block-keywords'] . ",";
2571
+                        }
2572
+
2573
+
2574
+                        // block hover preview.
2575
+                        $example_args = array();
2576
+                        if(!empty($this->arguments)){
2577
+                            foreach($this->arguments as $key => $a_args){
2578
+                                if(isset($a_args['example'])){
2579
+                                    $example_args[$key] = $a_args['example'];
2580
+                                }
2581
+                            }
2582
+                        }
2583
+                        $viewport_width = isset($this->options['example']['viewportWidth']) ? 'viewportWidth: '.absint($this->options['example']['viewportWidth']) : '';
2584
+                        $example_inner_blocks = !empty($this->options['example']['innerBlocks']) && is_array($this->options['example']['innerBlocks']) ? 'innerBlocks: ' . wp_json_encode($this->options['example']['innerBlocks']) : '';
2585
+                        if( isset( $this->options['example'] ) && $this->options['example'] === false ){
2586
+                            // no preview if set to false
2587
+                        }elseif( !empty( $example_args ) ){
2588
+                            echo "example : {attributes:{".$this->array_to_attributes( $example_args )."},$viewport_width},";
2589
+                        }elseif( !empty( $this->options['example'] ) ){
2590
+                            unset($this->options['example']['viewportWidth']);
2591
+                            unset($this->options['example']['innerBlocks']);
2592
+                            $example_atts = $this->array_to_attributes( $this->options['example'] );
2593
+                            $example_parts = array();
2594
+                            if($example_atts){
2595
+                                $example_parts[] = rtrim($example_atts,",");
2596
+                            }
2597
+                            if($viewport_width){
2598
+                                $example_parts[] = $viewport_width;
2599
+                            }
2600
+                            if($example_inner_blocks){
2601
+                                $example_parts[] = $example_inner_blocks;
2602
+                            }
2603
+                            if(!empty($example_parts)){
2604
+                                echo "example : {".implode(',', $example_parts)."},";
2605
+                            }
2606
+                        }else{
2607
+                            echo 'example : {viewportWidth: 500},';
2608
+                        }
2609
+
2610
+
2611
+
2612
+                        // limit to parent
2613
+                        if( !empty( $this->options['parent'] ) ){
2614
+                            echo "parent : " . wp_json_encode( $this->options['parent'] ) . ",";
2615
+                        }
2616
+
2617
+                        // limit allowed blocks
2618
+                        if( !empty( $this->options['allowed-blocks'] ) ){
2619
+                            echo "allowedBlocks : " . wp_json_encode( $this->options['allowed-blocks'] ) . ",";
2620
+                        }
2621
+
2622
+                        // maybe set no_wrap
2623
+                        $no_wrap = isset( $this->options['no_wrap'] ) && $this->options['no_wrap'] ? true : false;
2624
+                        if ( isset( $this->arguments['no_wrap'] ) && $this->arguments['no_wrap'] ) {
2625
+                            $no_wrap = true;
2626
+                        }
2627
+                        if ( $no_wrap ) {
2628
+                            $this->options['block-wrap'] = '';
2629
+                        }
2630
+
2631
+                        // maybe load the drag/drop functions.
2632
+                        $img_drag_drop = false;
2633
+
2634
+                        $show_alignment = false;
2635
+                        // align feature
2636
+                        /*echo "supports: {";
2637 2637
 						echo "	align: true,";
2638 2638
 						echo "  html: false";
2639 2639
 						echo "},";*/
2640 2640
 
2641 2641
 
2642
-							echo "attributes : {";
2643
-
2644
-							if ( $show_advanced ) {
2645
-								echo "show_advanced: {";
2646
-								echo "	type: 'boolean',";
2647
-								echo "  default: false,";
2648
-								echo "},";
2649
-							}
2650
-
2651
-							// block wrap element
2652
-							if ( ! empty( $this->options['block-wrap'] ) ) { //@todo we should validate this?
2653
-								echo "block_wrap: {";
2654
-								echo "	type: 'string',";
2655
-								echo "  default: '" . esc_attr( $this->options['block-wrap'] ) . "',";
2656
-								echo "},";
2657
-							}
2658
-
2659
-
2660
-							if ( ! empty( $this->arguments ) ) {
2661
-
2662
-								foreach ( $this->arguments as $key => $args ) {
2663
-
2664
-									if( $args['type'] == 'image' ||  $args['type'] == 'images' ){
2665
-										$img_drag_drop = true;
2666
-									}
2667
-
2668
-									// set if we should show alignment
2669
-									if ( $key == 'alignment' ) {
2670
-										$show_alignment = true;
2671
-									}
2672
-
2673
-									$extra = '';
2674
-
2675
-									if ( $args['type'] == 'notice' ||  $args['type'] == 'tab' ) {
2676
-										continue;
2677
-									}
2678
-									elseif ( $args['type'] == 'checkbox' ) {
2679
-										$type    = 'boolean';
2680
-										$default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false';
2681
-									} elseif ( $args['type'] == 'number' ) {
2682
-										$type    = 'number';
2683
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2684
-									} elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) {
2685
-										$type = 'array';
2686
-										if ( isset( $args['default'] ) && is_array( $args['default'] ) ) {
2687
-											$default = ! empty( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]";
2688
-										} else {
2689
-											$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2690
-										}
2691
-									} elseif ( $args['type'] == 'tagselect' ) {
2692
-										$type    = 'array';
2693
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2694
-									} elseif ( $args['type'] == 'multiselect' ) {
2695
-										$type    = 'array';
2696
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2697
-									} elseif ( $args['type'] == 'image_xy' ) {
2698
-										$type    = 'object';
2699
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2700
-									} elseif ( $args['type'] == 'image' ) {
2701
-										$type    = 'string';
2702
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2703
-
2704
-										// add a field for ID
2705
-	//                                    echo $key . "_id : {";
2706
-	//                                    echo "type : 'number',";
2707
-	//                                    echo "},";
2708
-	//                                    echo $key . "_xy : {";
2709
-	//                                    echo "type : 'object',";
2710
-	//                                    echo "},";
2711
-
2712
-									} else {
2713
-										$type    = !empty($args['hidden_type']) ? esc_attr($args['hidden_type']) : 'string';
2714
-										$default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2715
-
2716
-									}
2717
-									echo $key . " : {";
2718
-									echo "type : '$type',";
2719
-									echo "default : $default,";
2720
-									echo "},";
2721
-								}
2722
-							}
2723
-
2724
-							echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},";
2725
-							echo "sd_shortcode : {type : 'string',default: ''},";
2726
-
2727
-							if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
2728
-								echo "sd_shortcode_close : {type : 'string',default: ''},";
2729
-							}
2730
-
2731
-							echo "className: { type: 'string', default: '' },";
2732
-
2733
-							echo "},";
2734
-
2735
-
2736
-
2737
-						?>
2642
+                            echo "attributes : {";
2643
+
2644
+                            if ( $show_advanced ) {
2645
+                                echo "show_advanced: {";
2646
+                                echo "	type: 'boolean',";
2647
+                                echo "  default: false,";
2648
+                                echo "},";
2649
+                            }
2650
+
2651
+                            // block wrap element
2652
+                            if ( ! empty( $this->options['block-wrap'] ) ) { //@todo we should validate this?
2653
+                                echo "block_wrap: {";
2654
+                                echo "	type: 'string',";
2655
+                                echo "  default: '" . esc_attr( $this->options['block-wrap'] ) . "',";
2656
+                                echo "},";
2657
+                            }
2658
+
2659
+
2660
+                            if ( ! empty( $this->arguments ) ) {
2661
+
2662
+                                foreach ( $this->arguments as $key => $args ) {
2663
+
2664
+                                    if( $args['type'] == 'image' ||  $args['type'] == 'images' ){
2665
+                                        $img_drag_drop = true;
2666
+                                    }
2667
+
2668
+                                    // set if we should show alignment
2669
+                                    if ( $key == 'alignment' ) {
2670
+                                        $show_alignment = true;
2671
+                                    }
2672
+
2673
+                                    $extra = '';
2674
+
2675
+                                    if ( $args['type'] == 'notice' ||  $args['type'] == 'tab' ) {
2676
+                                        continue;
2677
+                                    }
2678
+                                    elseif ( $args['type'] == 'checkbox' ) {
2679
+                                        $type    = 'boolean';
2680
+                                        $default = isset( $args['default'] ) && $args['default'] ? 'true' : 'false';
2681
+                                    } elseif ( $args['type'] == 'number' ) {
2682
+                                        $type    = 'number';
2683
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2684
+                                    } elseif ( $args['type'] == 'select' && ! empty( $args['multiple'] ) ) {
2685
+                                        $type = 'array';
2686
+                                        if ( isset( $args['default'] ) && is_array( $args['default'] ) ) {
2687
+                                            $default = ! empty( $args['default'] ) ? "['" . implode( "','", $args['default'] ) . "']" : "[]";
2688
+                                        } else {
2689
+                                            $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2690
+                                        }
2691
+                                    } elseif ( $args['type'] == 'tagselect' ) {
2692
+                                        $type    = 'array';
2693
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2694
+                                    } elseif ( $args['type'] == 'multiselect' ) {
2695
+                                        $type    = 'array';
2696
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2697
+                                    } elseif ( $args['type'] == 'image_xy' ) {
2698
+                                        $type    = 'object';
2699
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2700
+                                    } elseif ( $args['type'] == 'image' ) {
2701
+                                        $type    = 'string';
2702
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2703
+
2704
+                                        // add a field for ID
2705
+    //                                    echo $key . "_id : {";
2706
+    //                                    echo "type : 'number',";
2707
+    //                                    echo "},";
2708
+    //                                    echo $key . "_xy : {";
2709
+    //                                    echo "type : 'object',";
2710
+    //                                    echo "},";
2711
+
2712
+                                    } else {
2713
+                                        $type    = !empty($args['hidden_type']) ? esc_attr($args['hidden_type']) : 'string';
2714
+                                        $default = isset( $args['default'] ) ? "'" . $args['default'] . "'" : "''";
2715
+
2716
+                                    }
2717
+                                    echo $key . " : {";
2718
+                                    echo "type : '$type',";
2719
+                                    echo "default : $default,";
2720
+                                    echo "},";
2721
+                                }
2722
+                            }
2723
+
2724
+                            echo "content : {type : 'string',default: 'Please select the attributes in the block settings'},";
2725
+                            echo "sd_shortcode : {type : 'string',default: ''},";
2726
+
2727
+                            if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
2728
+                                echo "sd_shortcode_close : {type : 'string',default: ''},";
2729
+                            }
2730
+
2731
+                            echo "className: { type: 'string', default: '' },";
2732
+
2733
+                            echo "},";
2734
+
2735
+
2736
+
2737
+                        ?>
2738 2738
 
2739 2739
 						// The "edit" property must be a valid function.
2740 2740
 						edit: function (props) {
@@ -2809,10 +2809,10 @@  discard block
 block discarded – undo
2809 2809
 							}
2810 2810
 
2811 2811
 							<?php
2812
-							if(!empty($this->options['block-edit-raw'])) {
2813
-								echo $this->options['block-edit-raw']; // strings have to be in single quotes, may cause issues
2814
-							}else{
2815
-							?>
2812
+                            if(!empty($this->options['block-edit-raw'])) {
2813
+                                echo $this->options['block-edit-raw']; // strings have to be in single quotes, may cause issues
2814
+                            }else{
2815
+                            ?>
2816 2816
 
2817 2817
 function hasSelectedInnerBlock(props) {
2818 2818
 	const select = wp.data.select('core/editor');
@@ -2834,9 +2834,9 @@  discard block
 block discarded – undo
2834 2834
 
2835 2835
 	var $value = '';
2836 2836
 	<?php
2837
-	// if we have a post_type and a category then link them
2838
-	if( isset($this->arguments['post_type']) && isset($this->arguments['category']) && !empty($this->arguments['category']['post_type_linked']) ){
2839
-	?>
2837
+    // if we have a post_type and a category then link them
2838
+    if( isset($this->arguments['post_type']) && isset($this->arguments['category']) && !empty($this->arguments['category']['post_type_linked']) ){
2839
+    ?>
2840 2840
 	if(typeof(prev_attributes[props.clientId]) != 'undefined' && selectedBlock && selectedBlock.clientId === props.clientId){
2841 2841
 		$pt = props.attributes.post_type;
2842 2842
 		if(post_type_rest_slugs.length){
@@ -2849,11 +2849,11 @@  discard block
 block discarded – undo
2849 2849
 			term_query_type = $pt;
2850 2850
 		}
2851 2851
 <?php
2852
-	$cat_path = '';
2853
-	if ( ! empty( $this->arguments['post_type']['onchange_rest']['path'] ) ) {
2854
-		$cat_path = esc_js( strip_tags( $this->arguments['post_type']['onchange_rest']['path'] ) );
2855
-		$cat_path = str_replace( array( '&quot;', '&#039;' ), array( '"', "'" ), $cat_path );
2856
-	}
2852
+    $cat_path = '';
2853
+    if ( ! empty( $this->arguments['post_type']['onchange_rest']['path'] ) ) {
2854
+        $cat_path = esc_js( strip_tags( $this->arguments['post_type']['onchange_rest']['path'] ) );
2855
+        $cat_path = str_replace( array( '&quot;', '&#039;' ), array( '"', "'" ), $cat_path );
2856
+    }
2857 2857
 ?>
2858 2858
 		/* taxonomies */
2859 2859
 		if($value && 'post_type' in prev_attributes[props.clientId] && 'category' in prev_attributes[props.clientId] && run){
@@ -2945,7 +2945,7 @@  discard block
 block discarded – undo
2945 2945
 <?php
2946 2946
 $current_screen = function_exists('get_current_screen') ? get_current_screen() : '';
2947 2947
 if(!empty($current_screen->base) && $current_screen->base==='widgets'){
2948
-	echo 'const { deviceType } = "";';
2948
+    echo 'const { deviceType } = "";';
2949 2949
 }else{
2950 2950
 ?>
2951 2951
 /** Get device type const. */
@@ -3009,8 +3009,8 @@  discard block
 block discarded – undo
3009 3009
 										'attributes': props.attributes,
3010 3010
 										'block_parent_name': parentBlocks.length ? parentBlocks[parentBlocks.length - 1].name : '',
3011 3011
 										'post_id': <?php global $post; if ( isset( $post->ID ) ) {
3012
-										echo $post->ID;
3013
-									}else{echo '0';}?>,
3012
+                                        echo $post->ID;
3013
+                                    }else{echo '0';}?>,
3014 3014
 										'_ajax_nonce': '<?php echo wp_create_nonce( 'super_duper_output_shortcode' );?>'
3015 3015
 									};
3016 3016
 
@@ -3024,20 +3024,20 @@  discard block
 block discarded – undo
3024 3024
 										}
3025 3025
 
3026 3026
 										 <?php
3027
-										if(!empty($this->options['nested-block'])){
3028
-											?>
3027
+                                        if(!empty($this->options['nested-block'])){
3028
+                                            ?>
3029 3029
 											// props.setAttributes({content: env});
3030 3030
 										is_fetching = false;
3031 3031
 										prev_attributes[props.clientId] = props.attributes;
3032 3032
 											 <?php
3033
-										}else{
3034
-										?>
3033
+                                        }else{
3034
+                                        ?>
3035 3035
 										props.setAttributes({content: env});
3036 3036
 										is_fetching = false;
3037 3037
 										prev_attributes[props.clientId] = props.attributes;
3038 3038
 										<?php
3039
-										}
3040
-										?>
3039
+                                        }
3040
+                                        ?>
3041 3041
 
3042 3042
 
3043 3043
 										// if AUI is active call the js init function
@@ -3056,31 +3056,31 @@  discard block
 block discarded – undo
3056 3056
 							}
3057 3057
 
3058 3058
 							<?php
3059
-							if(!empty($this->options['block-edit-js'])) {
3060
-								echo  $this->options['block-edit-js'] ; // strings have to be in single quotes, may cause issues
3061
-							}
3059
+                            if(!empty($this->options['block-edit-js'])) {
3060
+                                echo  $this->options['block-edit-js'] ; // strings have to be in single quotes, may cause issues
3061
+                            }
3062 3062
 
3063 3063
 
3064 3064
 
3065 3065
 
3066
-							if(empty($this->options['block-save-return'])){
3067
-							?>
3066
+                            if(empty($this->options['block-save-return'])){
3067
+                            ?>
3068 3068
 								///////////////////////////////////////////////////////////////////////
3069 3069
 
3070 3070
 									 // build the shortcode.
3071 3071
 								shortcode = "[<?php echo $this->options['base_id'];?>";
3072 3072
 								<?php
3073 3073
 
3074
-								if(! empty( $this->arguments )){
3074
+                                if(! empty( $this->arguments )){
3075 3075
 
3076
-								foreach($this->arguments as $key => $args){
3077
-								   // if($args['type']=='tabs'){continue;}
3076
+                                foreach($this->arguments as $key => $args){
3077
+                                    // if($args['type']=='tabs'){continue;}
3078 3078
 
3079
-								   // don't add metadata arguments
3080
-								   if (substr($key, 0, 9 ) === 'metadata_') {
3081
-									   continue;
3082
-								   }
3083
-								?>
3079
+                                    // don't add metadata arguments
3080
+                                    if (substr($key, 0, 9 ) === 'metadata_') {
3081
+                                        continue;
3082
+                                    }
3083
+                                ?>
3084 3084
 								if (props.attributes.hasOwnProperty("<?php echo esc_attr( $key );?>")) {
3085 3085
 									if ('<?php echo esc_attr( $key );?>' == 'html') {
3086 3086
 									} else if ('<?php echo esc_attr( $args['type'] );?>' == 'image_xy') {
@@ -3091,10 +3091,10 @@  discard block
 block discarded – undo
3091 3091
 									}
3092 3092
 								}
3093 3093
 								<?php
3094
-								}
3095
-								}
3094
+                                }
3095
+                                }
3096 3096
 
3097
-								?>
3097
+                                ?>
3098 3098
 								shortcode += "]";
3099 3099
 
3100 3100
 								if(shortcode){
@@ -3106,17 +3106,17 @@  discard block
 block discarded – undo
3106 3106
 
3107 3107
 
3108 3108
 									<?php
3109
-									if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
3110
-										echo "props.setAttributes({sd_shortcode_close: '[/".esc_attr( $this->options['base_id'] )."]'});";
3111
-									}
3112
-									?>
3109
+                                    if(!empty($this->options['nested-block']) || !empty($this->arguments['html']) ){
3110
+                                        echo "props.setAttributes({sd_shortcode_close: '[/".esc_attr( $this->options['base_id'] )."]'});";
3111
+                                    }
3112
+                                    ?>
3113 3113
 								}
3114 3114
 
3115 3115
 
3116 3116
 							///////////////////////////////////////////////////////////////////////
3117 3117
 							<?php
3118
-							} // end nested block check
3119
-							?>
3118
+                            } // end nested block check
3119
+                            ?>
3120 3120
 
3121 3121
 							return [
3122 3122
 
@@ -3140,10 +3140,10 @@  discard block
 block discarded – undo
3140 3140
 
3141 3141
 									<?php
3142 3142
 
3143
-									if(! empty( $this->arguments )){
3143
+                                    if(! empty( $this->arguments )){
3144 3144
 
3145
-									if ( $show_advanced ) {
3146
-									?>
3145
+                                    if ( $show_advanced ) {
3146
+                                    ?>
3147 3147
 									el('div', {
3148 3148
 											style: {'padding-left': '16px','padding-right': '16px'}
3149 3149
 										},
@@ -3160,119 +3160,119 @@  discard block
 block discarded – undo
3160 3160
 									)
3161 3161
 									,
3162 3162
 									<?php
3163
-									}
3164
-
3165
-									$arguments = $this->group_arguments( $this->arguments );
3166
-									$block_group_tabs = ! empty( $this->options['block_group_tabs'] ) ? $this->group_block_tabs( $this->options['block_group_tabs'], $arguments ) : array();
3167
-
3168
-									// Do we have sections?
3169
-									$has_sections = $arguments == $this->arguments ? false : true;
3170
-
3171
-									if($has_sections){
3172
-									$panel_count = 0;
3173
-									$open_tab = '';
3174
-
3175
-									$open_tab_groups = array();
3176
-									$used_tabs = array();
3177
-
3178
-									foreach ( $arguments as $key => $args ) {
3179
-										$close_tab = false;
3180
-										$close_tabs = false;
3181
-
3182
-										 if ( ! empty( $block_group_tabs ) ) {
3183
-											foreach ( $block_group_tabs as $tab_name => $tab_args ) {
3184
-												if ( in_array( $key, $tab_args['groups'] ) ) {
3185
-													$open_tab_groups[] = $key;
3186
-
3187
-													if ( $open_tab != $tab_name ) {
3188
-														$tab_args['tab']['tabs_open'] = $open_tab == '' ? true : false;
3189
-														$tab_args['tab']['open'] = true;
3190
-
3191
-														$this->block_tab_start( '', $tab_args );
3192
-														$open_tab = $tab_name;
3193
-														$used_tabs[] = $tab_name;
3194
-													}
3195
-
3196
-													if ( $open_tab_groups == $tab_args['groups'] ) {
3197
-														$close_tab = true;
3198
-														$open_tab_groups = array();
3199
-
3200
-														if ( $used_tabs == array_keys( $block_group_tabs ) ) {
3201
-															$close_tabs = true;
3202
-														}
3203
-													}
3204
-												}
3205
-											}
3206
-										}
3207
-										?>
3163
+                                    }
3164
+
3165
+                                    $arguments = $this->group_arguments( $this->arguments );
3166
+                                    $block_group_tabs = ! empty( $this->options['block_group_tabs'] ) ? $this->group_block_tabs( $this->options['block_group_tabs'], $arguments ) : array();
3167
+
3168
+                                    // Do we have sections?
3169
+                                    $has_sections = $arguments == $this->arguments ? false : true;
3170
+
3171
+                                    if($has_sections){
3172
+                                    $panel_count = 0;
3173
+                                    $open_tab = '';
3174
+
3175
+                                    $open_tab_groups = array();
3176
+                                    $used_tabs = array();
3177
+
3178
+                                    foreach ( $arguments as $key => $args ) {
3179
+                                        $close_tab = false;
3180
+                                        $close_tabs = false;
3181
+
3182
+                                            if ( ! empty( $block_group_tabs ) ) {
3183
+                                            foreach ( $block_group_tabs as $tab_name => $tab_args ) {
3184
+                                                if ( in_array( $key, $tab_args['groups'] ) ) {
3185
+                                                    $open_tab_groups[] = $key;
3186
+
3187
+                                                    if ( $open_tab != $tab_name ) {
3188
+                                                        $tab_args['tab']['tabs_open'] = $open_tab == '' ? true : false;
3189
+                                                        $tab_args['tab']['open'] = true;
3190
+
3191
+                                                        $this->block_tab_start( '', $tab_args );
3192
+                                                        $open_tab = $tab_name;
3193
+                                                        $used_tabs[] = $tab_name;
3194
+                                                    }
3195
+
3196
+                                                    if ( $open_tab_groups == $tab_args['groups'] ) {
3197
+                                                        $close_tab = true;
3198
+                                                        $open_tab_groups = array();
3199
+
3200
+                                                        if ( $used_tabs == array_keys( $block_group_tabs ) ) {
3201
+                                                            $close_tabs = true;
3202
+                                                        }
3203
+                                                    }
3204
+                                                }
3205
+                                            }
3206
+                                        }
3207
+                                        ?>
3208 3208
 										el(wp.components.PanelBody, {
3209 3209
 												title: '<?php esc_attr_e( $key ); ?>',
3210 3210
 												initialOpen: <?php if ( $panel_count ) {
3211
-												echo "false";
3212
-											} else {
3213
-												echo "true";
3214
-											}?>
3211
+                                                echo "false";
3212
+                                            } else {
3213
+                                                echo "true";
3214
+                                            }?>
3215 3215
 											},
3216 3216
 											<?php
3217
-											foreach ( $args as $k => $a ) {
3218
-												$this->block_tab_start( $k, $a );
3219
-												$this->block_row_start( $k, $a );
3220
-												$this->build_block_arguments( $k, $a );
3221
-												$this->block_row_end( $k, $a );
3222
-												$this->block_tab_end( $k, $a );
3223
-											}
3224
-											?>
3217
+                                            foreach ( $args as $k => $a ) {
3218
+                                                $this->block_tab_start( $k, $a );
3219
+                                                $this->block_row_start( $k, $a );
3220
+                                                $this->build_block_arguments( $k, $a );
3221
+                                                $this->block_row_end( $k, $a );
3222
+                                                $this->block_tab_end( $k, $a );
3223
+                                            }
3224
+                                            ?>
3225 3225
 										),
3226 3226
 										<?php
3227
-										$panel_count ++;
3227
+                                        $panel_count ++;
3228 3228
 
3229
-										if($close_tab || $close_tabs){
3230
-											$tab_args = array(
3231
-												'tab'	=> array(
3232
-													'tabs_close' => $close_tabs,
3233
-												'close' => true,
3234
-												)
3229
+                                        if($close_tab || $close_tabs){
3230
+                                            $tab_args = array(
3231
+                                                'tab'	=> array(
3232
+                                                    'tabs_close' => $close_tabs,
3233
+                                                'close' => true,
3234
+                                                )
3235 3235
 
3236
-											);
3237
-											$this->block_tab_end( '', $tab_args );
3236
+                                            );
3237
+                                            $this->block_tab_end( '', $tab_args );
3238 3238
 //											echo '###close'; print_r($tab_args);
3239
-											$panel_count = 0;
3240
-										}
3239
+                                            $panel_count = 0;
3240
+                                        }
3241 3241
 //
3242 3242
 
3243
-									}
3244
-									}else {
3245
-									?>
3243
+                                    }
3244
+                                    }else {
3245
+                                    ?>
3246 3246
 									el(wp.components.PanelBody, {
3247 3247
 											title: '<?php esc_attr_e( "Settings", 'ayecode-connect' ); ?>',
3248 3248
 											initialOpen: true
3249 3249
 										},
3250 3250
 										<?php
3251
-										foreach ( $this->arguments as $key => $args ) {
3252
-											$this->block_row_start( $key, $args );
3253
-											$this->build_block_arguments( $key, $args );
3254
-											$this->block_row_end( $key, $args );
3255
-										}
3256
-										?>
3251
+                                        foreach ( $this->arguments as $key => $args ) {
3252
+                                            $this->block_row_start( $key, $args );
3253
+                                            $this->build_block_arguments( $key, $args );
3254
+                                            $this->block_row_end( $key, $args );
3255
+                                        }
3256
+                                        ?>
3257 3257
 									),
3258 3258
 									<?php
3259
-									}
3259
+                                    }
3260 3260
 
3261
-									}
3262
-									?>
3261
+                                    }
3262
+                                    ?>
3263 3263
 
3264 3264
 								),
3265 3265
 
3266 3266
 								<?php
3267
-								// If the user sets block-output array then build it
3268
-								if ( ! empty( $this->options['block-output'] ) ) {
3269
-								$this->block_element( $this->options['block-output'] );
3270
-							}elseif(!empty($this->options['block-edit-return'])){
3271
-								   echo $this->options['block-edit-return'];
3272
-							}else{
3273
-								// if no block-output is set then we try and get the shortcode html output via ajax.
3274
-								$block_edit_wrap_tag = !empty($this->options['block_edit_wrap_tag']) ? esc_attr($this->options['block_edit_wrap_tag']) : 'div';
3275
-								?>
3267
+                                // If the user sets block-output array then build it
3268
+                                if ( ! empty( $this->options['block-output'] ) ) {
3269
+                                $this->block_element( $this->options['block-output'] );
3270
+                            }elseif(!empty($this->options['block-edit-return'])){
3271
+                                    echo $this->options['block-edit-return'];
3272
+                            }else{
3273
+                                // if no block-output is set then we try and get the shortcode html output via ajax.
3274
+                                $block_edit_wrap_tag = !empty($this->options['block_edit_wrap_tag']) ? esc_attr($this->options['block_edit_wrap_tag']) : 'div';
3275
+                                ?>
3276 3276
 								el('<?php echo esc_attr($block_edit_wrap_tag); ?>', wp.blockEditor.useBlockProps({
3277 3277
 									dangerouslySetInnerHTML: {__html: onChangeContent()},
3278 3278
 									className: props.className,
@@ -3280,13 +3280,13 @@  discard block
 block discarded – undo
3280 3280
 									style: {'minHeight': '30px'}
3281 3281
 								}))
3282 3282
 								<?php
3283
-								}
3284
-								?>
3283
+                                }
3284
+                                ?>
3285 3285
 							]; // end return
3286 3286
 
3287 3287
 							<?php
3288
-							} // end block-edit-raw else
3289
-							?>
3288
+                            } // end block-edit-raw else
3289
+                            ?>
3290 3290
 						},
3291 3291
 
3292 3292
 						// The "save" property must be specified and must be a valid function.
@@ -3300,16 +3300,16 @@  discard block
 block discarded – undo
3300 3300
 							$html = '';
3301 3301
 							<?php
3302 3302
 
3303
-							if(! empty( $this->arguments )){
3303
+                            if(! empty( $this->arguments )){
3304 3304
 
3305
-							foreach($this->arguments as $key => $args){
3306
-							   // if($args['type']=='tabs'){continue;}
3305
+                            foreach($this->arguments as $key => $args){
3306
+                                // if($args['type']=='tabs'){continue;}
3307 3307
 
3308
-							   // don't add metadata arguments
3309
-							   if (substr($key, 0, 9 ) === 'metadata_') {
3310
-								   continue;
3311
-							   }
3312
-							?>
3308
+                                // don't add metadata arguments
3309
+                                if (substr($key, 0, 9 ) === 'metadata_') {
3310
+                                    continue;
3311
+                                }
3312
+                            ?>
3313 3313
 							if (attr.hasOwnProperty("<?php echo esc_attr( $key );?>")) {
3314 3314
 								if ('<?php echo esc_attr( $key );?>' == 'html') {
3315 3315
 									$html = attr.<?php echo esc_attr( $key );?>;
@@ -3320,10 +3320,10 @@  discard block
 block discarded – undo
3320 3320
 								}
3321 3321
 							}
3322 3322
 							<?php
3323
-							}
3324
-							}
3323
+                            }
3324
+                            }
3325 3325
 
3326
-							?>
3326
+                            ?>
3327 3327
 							content += "]";
3328 3328
 							 content = '';
3329 3329
 
@@ -3333,7 +3333,7 @@  discard block
 block discarded – undo
3333 3333
 //                                $html = 'el( InnerBlocks.Content )';
3334 3334
 //                                <?php
3335 3335
 //                            }
3336
-							?>
3336
+                            ?>
3337 3337
 							// if has html element
3338 3338
 							if ($html) {
3339 3339
 								//content += $html + "[/<?php echo $this->options['base_id'];?>]";
@@ -3366,12 +3366,12 @@  discard block
 block discarded – undo
3366 3366
 //                                <x?php
3367 3367
 //							}else
3368 3368
 
3369
-							if(!empty($this->options['block-output'])){
3369
+                            if(!empty($this->options['block-output'])){
3370 3370
 //                               echo "return";
3371 3371
 //                               $this->block_element( $this->options['block-output'], true );
3372 3372
 //                               echo ";";
3373 3373
 
3374
-							   ?>
3374
+                                ?>
3375 3375
 							  return el(
3376 3376
 								   '',
3377 3377
 								   {},
@@ -3381,10 +3381,10 @@  discard block
 block discarded – undo
3381 3381
 							   );
3382 3382
 								<?php
3383 3383
 
3384
-							}elseif(!empty($this->options['block-save-return'])){
3385
-								   echo 'return ' . $this->options['block-save-return'];
3386
-							}elseif(!empty($this->options['nested-block'])){
3387
-								?>
3384
+                            }elseif(!empty($this->options['block-save-return'])){
3385
+                                    echo 'return ' . $this->options['block-save-return'];
3386
+                            }elseif(!empty($this->options['nested-block'])){
3387
+                                ?>
3388 3388
 							  return el(
3389 3389
 								   '',
3390 3390
 								   {},
@@ -3393,22 +3393,22 @@  discard block
 block discarded – undo
3393 3393
 								 //  el('', {dangerouslySetInnerHTML: {__html: "[/<?php echo $this->options['base_id'];?>]"}})
3394 3394
 							   );
3395 3395
 								<?php
3396
-							}elseif(!empty( $this->options['block-save-return'] ) ){
3397
-								echo "return ". $this->options['block-edit-return'].";";
3398
-							}elseif(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){
3399
-							?>
3396
+                            }elseif(!empty( $this->options['block-save-return'] ) ){
3397
+                                echo "return ". $this->options['block-edit-return'].";";
3398
+                            }elseif(isset( $this->options['block-wrap'] ) && $this->options['block-wrap'] == ''){
3399
+                            ?>
3400 3400
 							return content;
3401 3401
 							<?php
3402
-							}else{
3403
-							?>
3402
+                            }else{
3403
+                            ?>
3404 3404
 							var block_wrap = 'div';
3405 3405
 							if (attr.hasOwnProperty("block_wrap")) {
3406 3406
 								block_wrap = attr.block_wrap;
3407 3407
 							}
3408 3408
 							return el(block_wrap, wp.blockEditor.useBlockProps.save( {dangerouslySetInnerHTML: {__html: content}, className: align} ));
3409 3409
 							<?php
3410
-							}
3411
-							?>
3410
+                            }
3411
+                            ?>
3412 3412
 
3413 3413
 
3414 3414
 						}
@@ -3422,43 +3422,43 @@  discard block
 block discarded – undo
3422 3422
 				});
3423 3423
 			</script>
3424 3424
 			<?php
3425
-			$output = ob_get_clean();
3425
+            $output = ob_get_clean();
3426 3426
 
3427
-			/*
3427
+            /*
3428 3428
 			 * We only add the <script> tags for code highlighting, so we strip them from the output.
3429 3429
 			 */
3430 3430
 
3431
-			return str_replace( array(
3432
-				'<script>',
3433
-				'</script>'
3434
-			), '', $output );
3435
-		}
3431
+            return str_replace( array(
3432
+                '<script>',
3433
+                '</script>'
3434
+            ), '', $output );
3435
+        }
3436 3436
 
3437 3437
 
3438 3438
 
3439
-		public function block_row_start($key, $args){
3439
+        public function block_row_start($key, $args){
3440 3440
 
3441
-			// check for row
3442
-			if(!empty($args['row'])){
3441
+            // check for row
3442
+            if(!empty($args['row'])){
3443 3443
 
3444
-				if(!empty($args['row']['open'])){
3444
+                if(!empty($args['row']['open'])){
3445 3445
 
3446
-				// element require
3447
-				$element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3448
-				$device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3449
-				$device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3450
-				$device_type_icon = '';
3451
-				if($device_type=='Desktop'){
3452
-					$device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3453
-				}elseif($device_type=='Tablet'){
3454
-					$device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3455
-				}elseif($device_type=='Mobile'){
3456
-					$device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3457
-				}
3458
-				echo $element_require;
3459
-				echo $device_type_require;
3446
+                // element require
3447
+                $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3448
+                $device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3449
+                $device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3450
+                $device_type_icon = '';
3451
+                if($device_type=='Desktop'){
3452
+                    $device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3453
+                }elseif($device_type=='Tablet'){
3454
+                    $device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3455
+                }elseif($device_type=='Mobile'){
3456
+                    $device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3457
+                }
3458
+                echo $element_require;
3459
+                echo $device_type_require;
3460 3460
 
3461
-					if(false){?><script><?php }?>
3461
+                    if(false){?><script><?php }?>
3462 3462
 						el('div', {
3463 3463
 								className: 'bsui components-base-control',
3464 3464
 							},
@@ -3471,8 +3471,8 @@  discard block
 block discarded – undo
3471 3471
 								<?php if($device_type_icon){ ?>
3472 3472
 									deviceType == '<?php echo $device_type;?>' && el('span',{dangerouslySetInnerHTML: {__html: '<?php echo $device_type_icon; ?>'},title: deviceType + ": Set preview mode to change",style: {right:"0",position:"absolute",color:"var(--wp-admin-theme-color)"}})
3473 3473
 								<?php
3474
-								}
3475
-								?>
3474
+                                }
3475
+                                ?>
3476 3476
 
3477 3477
 
3478 3478
 							),
@@ -3496,51 +3496,51 @@  discard block
 block discarded – undo
3496 3496
 									},
3497 3497
 
3498 3498
 					<?php
3499
-					if(false){?></script><?php }
3500
-				}elseif(!empty($args['row']['close'])){
3501
-					if(false){?><script><?php }?>
3499
+                    if(false){?></script><?php }
3500
+                }elseif(!empty($args['row']['close'])){
3501
+                    if(false){?><script><?php }?>
3502 3502
 						el(
3503 3503
 							'div',
3504 3504
 							{
3505 3505
 								className: 'col pl-0 ps-0',
3506 3506
 							},
3507 3507
 					<?php
3508
-					if(false){?></script><?php }
3509
-				}else{
3510
-					if(false){?><script><?php }?>
3508
+                    if(false){?></script><?php }
3509
+                }else{
3510
+                    if(false){?><script><?php }?>
3511 3511
 						el(
3512 3512
 							'div',
3513 3513
 							{
3514 3514
 								className: 'col pl-0 ps-0 pr-2 pe-2',
3515 3515
 							},
3516 3516
 					<?php
3517
-					if(false){?></script><?php }
3518
-				}
3517
+                    if(false){?></script><?php }
3518
+                }
3519 3519
 
3520
-			}
3520
+            }
3521 3521
 
3522
-		}
3522
+        }
3523 3523
 
3524
-		public function block_row_end($key, $args){
3524
+        public function block_row_end($key, $args){
3525 3525
 
3526
-			if(!empty($args['row'])){
3527
-				// maybe close
3528
-				if(!empty($args['row']['close'])){
3529
-					echo "))";
3530
-				}
3526
+            if(!empty($args['row'])){
3527
+                // maybe close
3528
+                if(!empty($args['row']['close'])){
3529
+                    echo "))";
3530
+                }
3531 3531
 
3532
-				echo "),";
3533
-			}
3534
-		}
3532
+                echo "),";
3533
+            }
3534
+        }
3535 3535
 
3536
-		public function block_tab_start($key, $args){
3536
+        public function block_tab_start($key, $args){
3537 3537
 
3538
-			// check for row
3539
-			if(!empty($args['tab'])){
3538
+            // check for row
3539
+            if(!empty($args['tab'])){
3540 3540
 
3541
-				if(!empty($args['tab']['tabs_open'])){
3541
+                if(!empty($args['tab']['tabs_open'])){
3542 3542
 
3543
-					if(false){?><script><?php }?>
3543
+                    if(false){?><script><?php }?>
3544 3544
 
3545 3545
 el('div',{className: 'bsui'},
3546 3546
 
@@ -3553,12 +3553,12 @@  discard block
 block discarded – undo
3553 3553
 										tabs: [
3554 3554
 
3555 3555
 					<?php
3556
-					if(false){?></script><?php }
3557
-				}
3556
+                    if(false){?></script><?php }
3557
+                }
3558 3558
 
3559
-				if(!empty($args['tab']['open'])){
3559
+                if(!empty($args['tab']['open'])){
3560 3560
 
3561
-					if(false){?><script><?php }?>
3561
+                    if(false){?><script><?php }?>
3562 3562
 							{
3563 3563
 												name: '<?php echo addslashes( esc_attr( $args['tab']['key']) ); ?>',
3564 3564
 												title: el('div', {dangerouslySetInnerHTML: {__html: '<?php echo addslashes( esc_attr( $args['tab']['title']) ); ?>'}}),
@@ -3567,93 +3567,93 @@  discard block
 block discarded – undo
3567 3567
 									className: 'components-base-control__help mb-0',
3568 3568
 									dangerouslySetInnerHTML: {__html:'<?php echo addslashes( $args['tab']['desc'] ); ?>'}
3569 3569
 								}),<?php }
3570
-					if(false){?></script><?php }
3571
-				}
3570
+                    if(false){?></script><?php }
3571
+                }
3572 3572
 
3573
-			}
3573
+            }
3574 3574
 
3575
-		}
3575
+        }
3576 3576
 
3577
-		public function block_tab_end($key, $args){
3577
+        public function block_tab_end($key, $args){
3578 3578
 
3579
-			if(!empty($args['tab'])){
3580
-				// maybe close
3581
-				if(!empty($args['tab']['close'])){
3582
-					echo ")}, /* tab close */";
3583
-				}
3579
+            if(!empty($args['tab'])){
3580
+                // maybe close
3581
+                if(!empty($args['tab']['close'])){
3582
+                    echo ")}, /* tab close */";
3583
+                }
3584 3584
 
3585
-				if(!empty($args['tab']['tabs_close'])){
3586
-					if(false){?><script><?php }?>
3585
+                if(!empty($args['tab']['tabs_close'])){
3586
+                    if(false){?><script><?php }?>
3587 3587
 						]}, ( tab ) => {
3588 3588
 								return tab.content;
3589 3589
 							}
3590 3590
 						)), /* tabs close */
3591 3591
 					<?php if(false){ ?></script><?php }
3592
-				}
3593
-			}
3594
-		}
3592
+                }
3593
+            }
3594
+        }
3595 3595
 
3596
-		public function build_block_arguments( $key, $args ) {
3597
-			$custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : '';
3598
-			$options           = '';
3599
-			$extra             = '';
3600
-			$require           = '';
3601
-			$inside_elements   = '';
3602
-			$after_elements	   = '';
3603
-
3604
-			// `content` is a protected and special argument
3605
-			if ( $key == 'content' ) {
3606
-				return;
3607
-			}
3596
+        public function build_block_arguments( $key, $args ) {
3597
+            $custom_attributes = ! empty( $args['custom_attributes'] ) ? $this->array_to_attributes( $args['custom_attributes'] ) : '';
3598
+            $options           = '';
3599
+            $extra             = '';
3600
+            $require           = '';
3601
+            $inside_elements   = '';
3602
+            $after_elements	   = '';
3603
+
3604
+            // `content` is a protected and special argument
3605
+            if ( $key == 'content' ) {
3606
+                return;
3607
+            }
3608 3608
 
3609
-			$device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3610
-			$device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3611
-			$device_type_icon = '';
3612
-			if($device_type=='Desktop'){
3613
-				$device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3614
-			}elseif($device_type=='Tablet'){
3615
-				$device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3616
-			}elseif($device_type=='Mobile'){
3617
-				$device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3618
-			}
3609
+            $device_type = ! empty( $args['device_type'] ) ? esc_attr($args['device_type']) : '';
3610
+            $device_type_require = ! empty( $args['device_type'] ) ? " deviceType == '" . esc_attr($device_type) . "' && " : '';
3611
+            $device_type_icon = '';
3612
+            if($device_type=='Desktop'){
3613
+                $device_type_icon = '<span class="dashicons dashicons-desktop" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3614
+            }elseif($device_type=='Tablet'){
3615
+                $device_type_icon = '<span class="dashicons dashicons-tablet" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3616
+            }elseif($device_type=='Mobile'){
3617
+                $device_type_icon = '<span class="dashicons dashicons-smartphone" style="font-size: 18px;" onclick="sd_show_view_options(this);"></span>';
3618
+            }
3619 3619
 
3620
-			// icon
3621
-			$icon = '';
3622
-			if( !empty( $args['icon'] ) ){
3623
-				$icon .= "el('div', {";
3624
-									$icon .= "dangerouslySetInnerHTML: {__html: '".self::get_widget_icon( esc_attr($args['icon']))."'},";
3625
-									$icon .= "className: 'text-center',";
3626
-									$icon .= "title: '".addslashes( $args['title'] )."',";
3627
-								$icon .= "}),";
3628
-
3629
-				// blank title as its added to the icon.
3630
-				$args['title'] = '';
3631
-			}
3620
+            // icon
3621
+            $icon = '';
3622
+            if( !empty( $args['icon'] ) ){
3623
+                $icon .= "el('div', {";
3624
+                                    $icon .= "dangerouslySetInnerHTML: {__html: '".self::get_widget_icon( esc_attr($args['icon']))."'},";
3625
+                                    $icon .= "className: 'text-center',";
3626
+                                    $icon .= "title: '".addslashes( $args['title'] )."',";
3627
+                                $icon .= "}),";
3628
+
3629
+                // blank title as its added to the icon.
3630
+                $args['title'] = '';
3631
+            }
3632 3632
 
3633
-			// require advanced
3634
-			$require_advanced = ! empty( $args['advanced'] ) ? "props.attributes.show_advanced && " : "";
3633
+            // require advanced
3634
+            $require_advanced = ! empty( $args['advanced'] ) ? "props.attributes.show_advanced && " : "";
3635 3635
 
3636
-			// element require
3637
-			$element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3636
+            // element require
3637
+            $element_require = ! empty( $args['element_require'] ) ? $this->block_props_replace( $args['element_require'], true ) . " && " : "";
3638 3638
 
3639 3639
 
3640
-			$onchange  = "props.setAttributes({ $key: $key } )";
3641
-			$onchangecomplete  = "";
3642
-			$value     = "props.attributes.$key";
3643
-			$text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'colorx','range' );
3644
-			if ( in_array( $args['type'], $text_type ) ) {
3645
-				$type = 'TextControl';
3646
-				// Save numbers as numbers and not strings
3647
-				if ( $args['type'] == 'number' ) {
3648
-					$onchange = "props.setAttributes({ $key: $key ? Number($key) : '' } )";
3649
-				}
3640
+            $onchange  = "props.setAttributes({ $key: $key } )";
3641
+            $onchangecomplete  = "";
3642
+            $value     = "props.attributes.$key";
3643
+            $text_type = array( 'text', 'password', 'number', 'email', 'tel', 'url', 'colorx','range' );
3644
+            if ( in_array( $args['type'], $text_type ) ) {
3645
+                $type = 'TextControl';
3646
+                // Save numbers as numbers and not strings
3647
+                if ( $args['type'] == 'number' ) {
3648
+                    $onchange = "props.setAttributes({ $key: $key ? Number($key) : '' } )";
3649
+                }
3650 3650
 
3651
-				if (substr($key, 0, 9 ) === 'metadata_') {
3652
-					$real_key = str_replace('metadata_','', $key );
3653
-					$onchange = "props.setAttributes({ metadata: { $real_key: $key } } )";
3654
-					$value     = "props.attributes.metadata && props.attributes.metadata.$real_key ? props.attributes.metadata.$real_key : ''";
3655
-				}
3656
-			}
3651
+                if (substr($key, 0, 9 ) === 'metadata_') {
3652
+                    $real_key = str_replace('metadata_','', $key );
3653
+                    $onchange = "props.setAttributes({ metadata: { $real_key: $key } } )";
3654
+                    $value     = "props.attributes.metadata && props.attributes.metadata.$real_key ? props.attributes.metadata.$real_key : ''";
3655
+                }
3656
+            }
3657 3657
 //			else if ( $args['type'] == 'popup' ) {
3658 3658
 //				$type = 'TextControl';
3659 3659
 //				$args['type'] == 'text';
@@ -3671,21 +3671,21 @@  discard block
 block discarded – undo
3671 3671
 //
3672 3672
 //				$value     = "props.attributes.$key ? props.attributes.$key : ''";
3673 3673
 //			}
3674
-			else if ( $args['type'] == 'styleid' ) {
3675
-				$type = 'TextControl';
3676
-				$args['type'] == 'text';
3677
-				// Save numbers as numbers and not strings
3678
-				$value     = "props.attributes.$key ? props.attributes.$key : ''";
3679
-			}else if ( $args['type'] == 'notice' ) {
3680
-
3681
-				$notice_message = !empty($args['desc']) ? addslashes($args['desc']) : '';
3682
-				$notice_status = !empty($args['status']) ? esc_attr($args['status']) : 'info';
3683
-
3684
-				$notice = "el('div',{className:'bsui'},el(wp.components.Notice, {status: '$notice_status',isDismissible: false,className: 'm-0 pr-0 pe-0 mb-3'},el('div',{dangerouslySetInnerHTML: {__html: '$notice_message'}}))),";
3685
-				echo $notice_message ? $element_require . $notice : '';
3686
-				return;
3687
-			}
3688
-			/*
3674
+            else if ( $args['type'] == 'styleid' ) {
3675
+                $type = 'TextControl';
3676
+                $args['type'] == 'text';
3677
+                // Save numbers as numbers and not strings
3678
+                $value     = "props.attributes.$key ? props.attributes.$key : ''";
3679
+            }else if ( $args['type'] == 'notice' ) {
3680
+
3681
+                $notice_message = !empty($args['desc']) ? addslashes($args['desc']) : '';
3682
+                $notice_status = !empty($args['status']) ? esc_attr($args['status']) : 'info';
3683
+
3684
+                $notice = "el('div',{className:'bsui'},el(wp.components.Notice, {status: '$notice_status',isDismissible: false,className: 'm-0 pr-0 pe-0 mb-3'},el('div',{dangerouslySetInnerHTML: {__html: '$notice_message'}}))),";
3685
+                echo $notice_message ? $element_require . $notice : '';
3686
+                return;
3687
+            }
3688
+            /*
3689 3689
 			 * https://www.wptricks.com/question/set-current-tab-on-a-gutenberg-tabpanel-component-from-outside-that-component/ es5 layout
3690 3690
 						elseif($args['type']=='tabs'){
3691 3691
 							?>
@@ -3738,22 +3738,22 @@  discard block
 block discarded – undo
3738 3738
 							return;
3739 3739
 						}
3740 3740
 */
3741
-			elseif ( $args['type'] == 'color' ) {
3742
-				$type = 'ColorPicker';
3743
-				$onchange = "";
3744
-				$extra = "color: $value,";
3745
-				if(!empty($args['disable_alpha'])){
3746
-					$extra .= "disableAlpha: true,";
3747
-				}
3748
-				$onchangecomplete = "onChangeComplete: function($key) {
3741
+            elseif ( $args['type'] == 'color' ) {
3742
+                $type = 'ColorPicker';
3743
+                $onchange = "";
3744
+                $extra = "color: $value,";
3745
+                if(!empty($args['disable_alpha'])){
3746
+                    $extra .= "disableAlpha: true,";
3747
+                }
3748
+                $onchangecomplete = "onChangeComplete: function($key) {
3749 3749
 				value =  $key.rgb.a && $key.rgb.a < 1 ? \"rgba(\"+$key.rgb.r+\",\"+$key.rgb.g+\",\"+$key.rgb.b+\",\"+$key.rgb.a+\")\" : $key.hex;
3750 3750
 						props.setAttributes({
3751 3751
 							$key: value
3752 3752
 						});
3753 3753
 					},";
3754
-			}elseif ( $args['type'] == 'gradient' ) {
3755
-				$type = 'GradientPicker';
3756
-				$extra .= "gradients: [{
3754
+            }elseif ( $args['type'] == 'gradient' ) {
3755
+                $type = 'GradientPicker';
3756
+                $extra .= "gradients: [{
3757 3757
 			name: 'Vivid cyan blue to vivid purple',
3758 3758
 			gradient:
3759 3759
 				'linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)',
@@ -3790,10 +3790,10 @@  discard block
 block discarded – undo
3790 3790
 			slug: 'cool-to-warm-spectrum',
3791 3791
 		}],";
3792 3792
 
3793
-			}elseif ( $args['type'] == 'image' ) {
3793
+            }elseif ( $args['type'] == 'image' ) {
3794 3794
 //                print_r($args);
3795 3795
 
3796
-				$img_preview = isset($args['focalpoint']) && !$args['focalpoint'] ? " props.attributes.$key && el('img', { src: props.attributes.$key,style: {maxWidth:'100%',background: '#ccc'}})," : " ( props.attributes.$key ||  props.attributes.{$key}_use_featured ) && el(wp.components.FocalPointPicker,{
3796
+                $img_preview = isset($args['focalpoint']) && !$args['focalpoint'] ? " props.attributes.$key && el('img', { src: props.attributes.$key,style: {maxWidth:'100%',background: '#ccc'}})," : " ( props.attributes.$key ||  props.attributes.{$key}_use_featured ) && el(wp.components.FocalPointPicker,{
3797 3797
 							url:  props.attributes.{$key}_use_featured === true ? 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxzdmcgYmFzZVByb2ZpbGU9InRpbnkiIGhlaWdodD0iNDAwIiB2ZXJzaW9uPSIxLjIiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6ZXY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzIC8+PHJlY3QgZmlsbD0iI2QzZDNkMyIgaGVpZ2h0PSI0MDAiIHdpZHRoPSI0MDAiIHg9IjAiIHk9IjAiIC8+PGxpbmUgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxMCIgeDE9IjAiIHgyPSI0MDAiIHkxPSIwIiB5Mj0iNDAwIiAvPjxsaW5lIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMTAiIHgxPSIwIiB4Mj0iNDAwIiB5MT0iNDAwIiB5Mj0iMCIgLz48cmVjdCBmaWxsPSIjZDNkM2QzIiBoZWlnaHQ9IjUwIiB3aWR0aD0iMjE4LjAiIHg9IjkxLjAiIHk9IjE3NS4wIiAvPjx0ZXh0IGZpbGw9IndoaXRlIiBmb250LXNpemU9IjMwIiBmb250LXdlaWdodD0iYm9sZCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjAwLjAiIHk9IjIwNy41Ij5QTEFDRUhPTERFUjwvdGV4dD48L3N2Zz4='  : props.attributes.$key,
3798 3798
 							value: props.attributes.{$key}_xy.x !== undefined && props.attributes.{$key}_xy.x >= 0 ? props.attributes.{$key}_xy  : {x: 0.5,y: 0.5,},
3799 3799
 //                            value: props.attributes.{$key}_xy,
@@ -3814,16 +3814,16 @@  discard block
 block discarded – undo
3814 3814
 						}), ";
3815 3815
 
3816 3816
 
3817
-				$value = '""';
3818
-				$type = 'MediaUpload';
3819
-				$extra .= "onSelect: function(media){
3817
+                $value = '""';
3818
+                $type = 'MediaUpload';
3819
+                $extra .= "onSelect: function(media){
3820 3820
 					  return props.setAttributes({
3821 3821
 						  $key: media.url,
3822 3822
 						  {$key}_id: media.id
3823 3823
 						});
3824 3824
 					  },";
3825
-				   $extra .= "type: 'image',";
3826
-				   $extra .= "render: function (obj) {
3825
+                    $extra .= "type: 'image',";
3826
+                    $extra .= "render: function (obj) {
3827 3827
 						return el( 'div',{},
3828 3828
 						( !props.attributes.$key && !props.attributes.{$key}_use_featured ) && el( wp.components.Button, {
3829 3829
 						  className: 'components-button components-circular-option-picker__clear is-primary is-smallx',
@@ -3849,11 +3849,11 @@  discard block
 block discarded – undo
3849 3849
 
3850 3850
 
3851 3851
 					  }";
3852
-				$onchange = "";
3852
+                $onchange = "";
3853 3853
 
3854
-				//$inside_elements = ",el('div',{},'file upload')";
3855
-			} else if ( $args['type'] == 'images' ) {
3856
-				$img_preview = "props.attributes.$key && (function() {
3854
+                //$inside_elements = ",el('div',{},'file upload')";
3855
+            } else if ( $args['type'] == 'images' ) {
3856
+                $img_preview = "props.attributes.$key && (function() {
3857 3857
 	let uploads = JSON.parse('['+props.attributes.$key+']');
3858 3858
 	let images = [];
3859 3859
 	uploads.map((upload, index) => (
@@ -3880,9 +3880,9 @@  discard block
 block discarded – undo
3880 3880
 })(),";
3881 3881
 
3882 3882
 
3883
-				$value = '""';
3884
-				$type = 'MediaUpload';
3885
-				$extra .= "onSelect: function(media){
3883
+                $value = '""';
3884
+                $type = 'MediaUpload';
3885
+                $extra .= "onSelect: function(media){
3886 3886
 	let slim_images = props.attributes.$key ? JSON.parse('['+props.attributes.$key+']') : [];
3887 3887
 	if(media.length){
3888 3888
 		for (var i=0; i < media.length; i++) {
@@ -3895,9 +3895,9 @@  discard block
 block discarded – undo
3895 3895
 	}
3896 3896
 	return props.setAttributes({ $key: slimImagesV});
3897 3897
 },";
3898
-				$extra .= "type: 'image',";
3899
-				$extra .= "multiple: true,";
3900
-				$extra .= "render: function (obj) {
3898
+                $extra .= "type: 'image',";
3899
+                $extra .= "multiple: true,";
3900
+                $extra .= "render: function (obj) {
3901 3901
 	/* Init the sort */
3902 3902
 	enableDragSort('sd-sortable');
3903 3903
 	return el( 'div',{},
@@ -3924,40 +3924,40 @@  discard block
 block discarded – undo
3924 3924
 		)
3925 3925
 	)
3926 3926
 }";
3927
-				$onchange = "";
3927
+                $onchange = "";
3928 3928
 
3929
-				//$inside_elements = ",el('div',{},'file upload')";
3930
-			}
3931
-			elseif ( $args['type'] == 'checkbox' ) {
3932
-				$type = 'CheckboxControl';
3933
-				$extra .= "checked: props.attributes.$key,";
3934
-				$onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
3935
-			} elseif ( $args['type'] == 'textarea' ) {
3936
-				$type = 'TextareaControl';
3937
-
3938
-			} elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
3939
-				$type = 'SelectControl';
3940
-
3941
-				if($args['name'] == 'category' && !empty($args['post_type_linked'])){
3942
-					$options .= "options: taxonomies_".str_replace("-","_", $this->id).",";
3943
-				}elseif($args['name'] == 'sort_by' && !empty($args['post_type_linked'])){
3944
-					$options .= "options: sort_by_".str_replace("-","_", $this->id).",";
3945
-				}else {
3946
-
3947
-					if ( ! empty( $args['options'] ) ) {
3948
-						$options .= "options: [";
3949
-						foreach ( $args['options'] as $option_val => $option_label ) {
3950
-							$options .= "{ value: '" . esc_attr( $option_val ) . "', label: '" . esc_js( addslashes( $option_label ) ) . "' },";
3951
-						}
3952
-						$options .= "],";
3953
-					}
3954
-				}
3955
-				if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
3956
-					$extra .= ' multiple:true,style:{height:"auto",paddingRight:"8px","overflow-y":"auto"}, ';
3957
-				}
3929
+                //$inside_elements = ",el('div',{},'file upload')";
3930
+            }
3931
+            elseif ( $args['type'] == 'checkbox' ) {
3932
+                $type = 'CheckboxControl';
3933
+                $extra .= "checked: props.attributes.$key,";
3934
+                $onchange = "props.setAttributes({ $key: ! props.attributes.$key } )";
3935
+            } elseif ( $args['type'] == 'textarea' ) {
3936
+                $type = 'TextareaControl';
3937
+
3938
+            } elseif ( $args['type'] == 'select' || $args['type'] == 'multiselect' ) {
3939
+                $type = 'SelectControl';
3940
+
3941
+                if($args['name'] == 'category' && !empty($args['post_type_linked'])){
3942
+                    $options .= "options: taxonomies_".str_replace("-","_", $this->id).",";
3943
+                }elseif($args['name'] == 'sort_by' && !empty($args['post_type_linked'])){
3944
+                    $options .= "options: sort_by_".str_replace("-","_", $this->id).",";
3945
+                }else {
3946
+
3947
+                    if ( ! empty( $args['options'] ) ) {
3948
+                        $options .= "options: [";
3949
+                        foreach ( $args['options'] as $option_val => $option_label ) {
3950
+                            $options .= "{ value: '" . esc_attr( $option_val ) . "', label: '" . esc_js( addslashes( $option_label ) ) . "' },";
3951
+                        }
3952
+                        $options .= "],";
3953
+                    }
3954
+                }
3955
+                if ( isset( $args['multiple'] ) && $args['multiple'] ) { //@todo multiselect does not work at the moment: https://github.com/WordPress/gutenberg/issues/5550
3956
+                    $extra .= ' multiple:true,style:{height:"auto",paddingRight:"8px","overflow-y":"auto"}, ';
3957
+                }
3958 3958
 
3959
-				if($args['type'] == 'multiselect' ||  ( isset( $args['multiple'] ) && $args['multiple'] ) ){
3960
-					$after_elements	 .= "props.attributes.$key && el( wp.components.Button, {
3959
+                if($args['type'] == 'multiselect' ||  ( isset( $args['multiple'] ) && $args['multiple'] ) ){
3960
+                    $after_elements	 .= "props.attributes.$key && el( wp.components.Button, {
3961 3961
 									  className: 'components-button components-circular-option-picker__clear is-secondary is-small',
3962 3962
 									  style: {margin:'-8px 0 8px 0',display: 'block'},
3963 3963
 									  onClick: function(){
@@ -3968,8 +3968,8 @@  discard block
 block discarded – undo
3968 3968
 									},
3969 3969
 									'Clear'
3970 3970
 							),";
3971
-				}
3972
-			} elseif ( $args['type'] == 'tagselect' ) {
3971
+                }
3972
+            } elseif ( $args['type'] == 'tagselect' ) {
3973 3973
 //				$type = 'FormTokenField';
3974 3974
 //
3975 3975
 //				if ( ! empty( $args['options'] ) ) {
@@ -4004,20 +4004,20 @@  discard block
 block discarded – undo
4004 4004
 //				$value     = "[]";
4005 4005
 //				$extra .= ' __experimentalExpandOnFocus: true,';
4006 4006
 
4007
-			} else if ( $args['type'] == 'alignment' ) {
4008
-				$type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example
4009
-			} else if ( $args['type'] == 'margins' ) {
4010
-
4011
-			} else if ( $args['type'] == 'visibility_conditions' && ( function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() ) ) {
4012
-				$type = 'TextControl';
4013
-				$value = "(props.attributes.$key ? props.attributes.$key : '')";
4014
-				$args['type'] = 'text';
4015
-				$options .= 'disabled:true,';
4016
-				$bsvc_title = esc_attr( addslashes( $args['title'] ) );
4017
-				$bsvc_body = $this->block_visibility_fields( $args );
4018
-				// @TODO reset button
4019
-				$bsvc_footer = '<button type="button" class="btn btn-danger d-none">' . __( 'Reset', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-secondary bs-vc-close text-white" data-bs-dismiss="modal">' . __( 'Close', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-primary bs-vc-save">' . __( 'Save Rules', 'ayecode-connect' ) . '</button>';
4020
-				$after_elements .= "el('div', {className: 'components-base-control bs-vc-button-wrap'}, el(wp.components.Button, {
4007
+            } else if ( $args['type'] == 'alignment' ) {
4008
+                $type = 'AlignmentToolbar'; // @todo this does not seem to work but cant find a example
4009
+            } else if ( $args['type'] == 'margins' ) {
4010
+
4011
+            } else if ( $args['type'] == 'visibility_conditions' && ( function_exists( 'wp_is_block_theme' ) && wp_is_block_theme() ) ) {
4012
+                $type = 'TextControl';
4013
+                $value = "(props.attributes.$key ? props.attributes.$key : '')";
4014
+                $args['type'] = 'text';
4015
+                $options .= 'disabled:true,';
4016
+                $bsvc_title = esc_attr( addslashes( $args['title'] ) );
4017
+                $bsvc_body = $this->block_visibility_fields( $args );
4018
+                // @TODO reset button
4019
+                $bsvc_footer = '<button type="button" class="btn btn-danger d-none">' . __( 'Reset', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-secondary bs-vc-close text-white" data-bs-dismiss="modal">' . __( 'Close', 'ayecode-connect' ) . '</button><button type="button" class="btn btn-primary bs-vc-save">' . __( 'Save Rules', 'ayecode-connect' ) . '</button>';
4020
+                $after_elements .= "el('div', {className: 'components-base-control bs-vc-button-wrap'}, el(wp.components.Button, {
4021 4021
 						className: 'components-button components-circular-option-picker__clear is-primary is-smallx',
4022 4022
 						onClick: function() {
4023 4023
 							var sValue = props.attributes." . $key . ";
@@ -4043,39 +4043,39 @@  discard block
 block discarded – undo
4043 4043
 					},
4044 4044
 					'" . addslashes( ! empty( $args['button_title'] ) ? $args['button_title'] : $args['title'] ) . "'
4045 4045
 				) ),";
4046
-			} else {
4047
-				return;// if we have not implemented the control then don't break the JS.
4048
-			}
4046
+            } else {
4047
+                return;// if we have not implemented the control then don't break the JS.
4048
+            }
4049 4049
 
4050
-			// color input does not show the labels so we add them
4051
-			if($args['type']=='color'){
4052
-				// add show only if advanced
4053
-				echo $require_advanced;
4054
-				// add setting require if defined
4055
-				echo $element_require;
4056
-				echo "el('div', {style: {'marginBottom': '8px'}}, '".addslashes( $args['title'] )."'),";
4057
-			}
4050
+            // color input does not show the labels so we add them
4051
+            if($args['type']=='color'){
4052
+                // add show only if advanced
4053
+                echo $require_advanced;
4054
+                // add setting require if defined
4055
+                echo $element_require;
4056
+                echo "el('div', {style: {'marginBottom': '8px'}}, '".addslashes( $args['title'] )."'),";
4057
+            }
4058 4058
 
4059
-			// add show only if advanced
4060
-			echo $require_advanced;
4061
-			// add setting require if defined
4062
-			echo $element_require;
4063
-			echo $device_type_require;
4059
+            // add show only if advanced
4060
+            echo $require_advanced;
4061
+            // add setting require if defined
4062
+            echo $element_require;
4063
+            echo $device_type_require;
4064 4064
 
4065
-			// icon
4066
-			echo $icon;
4067
-			?>
4065
+            // icon
4066
+            echo $icon;
4067
+            ?>
4068 4068
 			el( <?php echo $args['type'] == 'image' || $args['type'] == 'images' ? $type  : "wp.components.".$type; ?>, {
4069 4069
 			label: <?php if ( empty( $args['title'] ) ) { echo "''"; } else if ( empty( $args['row'] ) && ! empty( $args['device_type'] ) ) { ?>el('label',{className:'components-base-control__label',style:{width:"100%"}},el('span',{dangerouslySetInnerHTML: {__html: '<?php echo addslashes( $args['title'] ) ?>'}}),<?php if ( $device_type_icon ) { ?>deviceType == '<?php echo $device_type;?>' && el('span',{dangerouslySetInnerHTML: {__html: '<?php echo $device_type_icon; ?>'},title: deviceType + ": Set preview mode to change",style: {right:"0",position:"absolute",color:"var(--wp-admin-theme-color)"}})<?php } ?>)<?php
4070
-			} else { ?>'<?php echo addslashes( trim( esc_html( $args['title'] ) ) ); ?>'<?php } ?>,
4070
+            } else { ?>'<?php echo addslashes( trim( esc_html( $args['title'] ) ) ); ?>'<?php } ?>,
4071 4071
 			help: <?php echo ( isset( $args['desc'] ) ? "el('span', {dangerouslySetInnerHTML: {__html: '" . trim( wp_kses_post( addslashes( $args['desc'] ) ) ) . "'}})" : "''" ); ?>,
4072 4072
 			value: <?php echo $value; ?>,
4073 4073
 			<?php if ( $type == 'TextControl' && $args['type'] != 'text' ) {
4074
-				echo "type: '" . addslashes( $args['type'] ) . "',";
4075
-			} ?>
4074
+                echo "type: '" . addslashes( $args['type'] ) . "',";
4075
+            } ?>
4076 4076
 			<?php if ( ! empty( $args['placeholder'] ) ) {
4077
-				echo "placeholder: '" . esc_js( addslashes( trim( esc_html( $args['placeholder'] ) ) ) ) . "',";
4078
-			} ?>
4077
+                echo "placeholder: '" . esc_js( addslashes( trim( esc_html( $args['placeholder'] ) ) ) ) . "',";
4078
+            } ?>
4079 4079
 			<?php echo $options; ?>
4080 4080
 			<?php echo $extra; ?>
4081 4081
 			<?php echo $custom_attributes; ?>
@@ -4087,1361 +4087,1361 @@  discard block
 block discarded – undo
4087 4087
 			<?php } ?>
4088 4088
 		} <?php echo $inside_elements; ?> ),
4089 4089
 			<?php
4090
-			echo $after_elements;
4091
-		}
4090
+            echo $after_elements;
4091
+        }
4092 4092
 
4093
-		/**
4094
-		 * Convert an array of attributes to block string.
4095
-		 *
4096
-		 * @param $custom_attributes
4097
-		 *
4098
-		 * @return string
4099
-		 *@todo there is prob a faster way to do this, also we could add some validation here.
4100
-		 *
4101
-		 */
4102
-		public function array_to_attributes( $custom_attributes, $html = false ) {
4103
-			$attributes = '';
4104
-			if ( ! empty( $custom_attributes ) ) {
4105
-
4106
-				foreach ( $custom_attributes as $key => $val ) {
4107
-					if(is_array($val)){
4108
-						$attributes .= $key.': {'.$this->array_to_attributes( $val, $html ).'},';
4109
-					}else{
4110
-						$attributes .= $html ?  " $key='$val' " : "'$key': '$val',";
4111
-					}
4112
-				}
4093
+        /**
4094
+         * Convert an array of attributes to block string.
4095
+         *
4096
+         * @param $custom_attributes
4097
+         *
4098
+         * @return string
4099
+         *@todo there is prob a faster way to do this, also we could add some validation here.
4100
+         *
4101
+         */
4102
+        public function array_to_attributes( $custom_attributes, $html = false ) {
4103
+            $attributes = '';
4104
+            if ( ! empty( $custom_attributes ) ) {
4105
+
4106
+                foreach ( $custom_attributes as $key => $val ) {
4107
+                    if(is_array($val)){
4108
+                        $attributes .= $key.': {'.$this->array_to_attributes( $val, $html ).'},';
4109
+                    }else{
4110
+                        $attributes .= $html ?  " $key='$val' " : "'$key': '$val',";
4111
+                    }
4112
+                }
4113 4113
 
4114
-			}
4114
+            }
4115 4115
 
4116
-			return $attributes;
4117
-		}
4116
+            return $attributes;
4117
+        }
4118 4118
 
4119 4119
 
4120 4120
 
4121
-		/**
4122
-		 * A self looping function to create the output for JS block elements.
4123
-		 *
4124
-		 * This is what is output in the WP Editor visual view.
4125
-		 *
4126
-		 * @param $args
4127
-		 */
4128
-		public function block_element( $args, $save = false ) {
4121
+        /**
4122
+         * A self looping function to create the output for JS block elements.
4123
+         *
4124
+         * This is what is output in the WP Editor visual view.
4125
+         *
4126
+         * @param $args
4127
+         */
4128
+        public function block_element( $args, $save = false ) {
4129 4129
 
4130 4130
 //            print_r($args);echo '###';exit;
4131 4131
 
4132
-			if ( ! empty( $args ) ) {
4133
-				foreach ( $args as $element => $new_args ) {
4132
+            if ( ! empty( $args ) ) {
4133
+                foreach ( $args as $element => $new_args ) {
4134 4134
 
4135
-					if ( is_array( $new_args ) ) { // its an element
4135
+                    if ( is_array( $new_args ) ) { // its an element
4136 4136
 
4137 4137
 
4138
-						if ( isset( $new_args['element'] ) ) {
4138
+                        if ( isset( $new_args['element'] ) ) {
4139 4139
 
4140
-							if ( isset( $new_args['element_require'] ) ) {
4141
-								echo str_replace( array(
4142
-										"'+",
4143
-										"+'"
4144
-									), '', $this->block_props_replace( $new_args['element_require'] ) ) . " &&  ";
4145
-								unset( $new_args['element_require'] );
4146
-							}
4140
+                            if ( isset( $new_args['element_require'] ) ) {
4141
+                                echo str_replace( array(
4142
+                                        "'+",
4143
+                                        "+'"
4144
+                                    ), '', $this->block_props_replace( $new_args['element_require'] ) ) . " &&  ";
4145
+                                unset( $new_args['element_require'] );
4146
+                            }
4147 4147
 
4148
-							if($new_args['element']=='InnerBlocks'){
4149
-								echo "\n el( InnerBlocks, {";
4150
-							}elseif($new_args['element']=='innerBlocksProps'){
4151
-								$element = isset($new_args['inner_element']) ? esc_attr($new_args['inner_element']) : 'div';
4152
-							  //  echo "\n el( 'section', wp.blockEditor.useInnerBlocksProps( blockProps, {";
4148
+                            if($new_args['element']=='InnerBlocks'){
4149
+                                echo "\n el( InnerBlocks, {";
4150
+                            }elseif($new_args['element']=='innerBlocksProps'){
4151
+                                $element = isset($new_args['inner_element']) ? esc_attr($new_args['inner_element']) : 'div';
4152
+                                //  echo "\n el( 'section', wp.blockEditor.useInnerBlocksProps( blockProps, {";
4153 4153
 //                                echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4154
-								echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4155
-								echo $save ? "wp.blockEditor.useBlockProps.save( {" : "wp.blockEditor.useBlockProps( {";
4156
-								echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4157
-
4158
-								echo "} ), {";
4159
-								echo !empty($new_args['innerBlocksProps']) && !$save ? $this->block_element( $new_args['innerBlocksProps'],$save ) : '';
4160
-							//    echo '###';
4161
-
4162
-							  //  echo '###';
4163
-							}elseif($new_args['element']=='BlocksProps'){
4164
-
4165
-								if ( isset($new_args['if_inner_element']) ) {
4166
-									$element = $new_args['if_inner_element'];
4167
-								}else {
4168
-									$element = isset($new_args['inner_element']) ? "'".esc_attr($new_args['inner_element'])."'" : "'div'";
4169
-								}
4170
-
4171
-								unset($new_args['inner_element']);
4172
-								echo $save ? "\n el( $element, wp.blockEditor.useBlockProps.save( {" : "\n el( $element, wp.blockEditor.useBlockProps( {";
4173
-								echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4174
-
4175
-
4176
-							   // echo "} ),";
4177
-
4178
-							}else{
4179
-								echo "\n el( '" . $new_args['element'] . "', {";
4180
-							}
4181
-
4182
-
4183
-							// get the attributes
4184
-							foreach ( $new_args as $new_key => $new_value ) {
4185
-
4186
-
4187
-								if ( $new_key == 'element' || $new_key == 'content'|| $new_key == 'if_content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) {
4188
-									// do nothing
4189
-								} else {
4190
-									echo $this->block_element( array( $new_key => $new_value ),$save );
4191
-								}
4192
-							}
4193
-
4194
-							echo $new_args['element']=='BlocksProps' ? '} ),' : "},";// end attributes
4195
-
4196
-							// get the content
4197
-							$first_item = 0;
4198
-							foreach ( $new_args as $new_key => $new_value ) {
4199
-								if ( $new_key === 'content' || $new_key === 'if_content' || is_array( $new_value ) ) {
4200
-
4201
-									if ( $new_key === 'content' ) {
4202
-										echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'";
4203
-									}else if ( $new_key === 'if_content' ) {
4204
-										echo  $this->block_props_replace(  $new_value  );
4205
-									}
4206
-
4207
-									if ( is_array( $new_value ) ) {
4208
-
4209
-										if ( isset( $new_value['element_require'] ) ) {
4210
-											echo str_replace( array(
4211
-													"'+",
4212
-													"+'"
4213
-												), '', $this->block_props_replace( $new_value['element_require'] ) ) . " &&  ";
4214
-											unset( $new_value['element_require'] );
4215
-										}
4216
-
4217
-										if ( isset( $new_value['element_repeat'] ) ) {
4218
-											$x = 1;
4219
-											while ( $x <= absint( $new_value['element_repeat'] ) ) {
4220
-												$this->block_element( array( '' => $new_value ),$save );
4221
-												$x ++;
4222
-											}
4223
-										} else {
4224
-											$this->block_element( array( '' => $new_value ),$save );
4225
-										}
4226
-									}
4227
-									$first_item ++;
4228
-								}
4229
-							}
4230
-
4231
-							if($new_args['element']=='innerBlocksProps' || $new_args['element']=='xBlocksProps'){
4232
-								echo "))";// end content
4233
-							}else{
4234
-								echo ")";// end content
4235
-							}
4236
-
4237
-
4238
-							echo ", \n";
4239
-
4240
-						}
4241
-					} else {
4242
-
4243
-						if ( substr( $element, 0, 3 ) === "if_" ) {
4244
-							$extra = '';
4245
-							if( strpos($new_args, '[%WrapClass%]') !== false ){
4246
-								$new_args = str_replace('[%WrapClass%]"','" + sd_build_aui_class(props.attributes)',$new_args);
4247
-								$new_args = str_replace('[%WrapClass%]','+ sd_build_aui_class(props.attributes)',$new_args);
4248
-							}
4249
-							echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ",";
4250
-						} elseif ( $element == 'style' &&  strpos($new_args, '[%WrapStyle%]') !== false ) {
4251
-							$new_args = str_replace('[%WrapStyle%]','',$new_args);
4252
-							echo $element . ": {..." . $this->block_props_replace( $new_args ) . " , ...sd_build_aui_styles(props.attributes) },";
4154
+                                echo $save ? "\n el( '$element', wp.blockEditor.useInnerBlocksProps.save( " : "\n el( '$element', wp.blockEditor.useInnerBlocksProps( ";
4155
+                                echo $save ? "wp.blockEditor.useBlockProps.save( {" : "wp.blockEditor.useBlockProps( {";
4156
+                                echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4157
+
4158
+                                echo "} ), {";
4159
+                                echo !empty($new_args['innerBlocksProps']) && !$save ? $this->block_element( $new_args['innerBlocksProps'],$save ) : '';
4160
+                            //    echo '###';
4161
+
4162
+                                //  echo '###';
4163
+                            }elseif($new_args['element']=='BlocksProps'){
4164
+
4165
+                                if ( isset($new_args['if_inner_element']) ) {
4166
+                                    $element = $new_args['if_inner_element'];
4167
+                                }else {
4168
+                                    $element = isset($new_args['inner_element']) ? "'".esc_attr($new_args['inner_element'])."'" : "'div'";
4169
+                                }
4170
+
4171
+                                unset($new_args['inner_element']);
4172
+                                echo $save ? "\n el( $element, wp.blockEditor.useBlockProps.save( {" : "\n el( $element, wp.blockEditor.useBlockProps( {";
4173
+                                echo !empty($new_args['blockProps']) ? $this->block_element( $new_args['blockProps'],$save ) : '';
4174
+
4175
+
4176
+                                // echo "} ),";
4177
+
4178
+                            }else{
4179
+                                echo "\n el( '" . $new_args['element'] . "', {";
4180
+                            }
4181
+
4182
+
4183
+                            // get the attributes
4184
+                            foreach ( $new_args as $new_key => $new_value ) {
4185
+
4186
+
4187
+                                if ( $new_key == 'element' || $new_key == 'content'|| $new_key == 'if_content' || $new_key == 'element_require' || $new_key == 'element_repeat' || is_array( $new_value ) ) {
4188
+                                    // do nothing
4189
+                                } else {
4190
+                                    echo $this->block_element( array( $new_key => $new_value ),$save );
4191
+                                }
4192
+                            }
4193
+
4194
+                            echo $new_args['element']=='BlocksProps' ? '} ),' : "},";// end attributes
4195
+
4196
+                            // get the content
4197
+                            $first_item = 0;
4198
+                            foreach ( $new_args as $new_key => $new_value ) {
4199
+                                if ( $new_key === 'content' || $new_key === 'if_content' || is_array( $new_value ) ) {
4200
+
4201
+                                    if ( $new_key === 'content' ) {
4202
+                                        echo "'" . $this->block_props_replace( wp_slash( $new_value ) ) . "'";
4203
+                                    }else if ( $new_key === 'if_content' ) {
4204
+                                        echo  $this->block_props_replace(  $new_value  );
4205
+                                    }
4206
+
4207
+                                    if ( is_array( $new_value ) ) {
4208
+
4209
+                                        if ( isset( $new_value['element_require'] ) ) {
4210
+                                            echo str_replace( array(
4211
+                                                    "'+",
4212
+                                                    "+'"
4213
+                                                ), '', $this->block_props_replace( $new_value['element_require'] ) ) . " &&  ";
4214
+                                            unset( $new_value['element_require'] );
4215
+                                        }
4216
+
4217
+                                        if ( isset( $new_value['element_repeat'] ) ) {
4218
+                                            $x = 1;
4219
+                                            while ( $x <= absint( $new_value['element_repeat'] ) ) {
4220
+                                                $this->block_element( array( '' => $new_value ),$save );
4221
+                                                $x ++;
4222
+                                            }
4223
+                                        } else {
4224
+                                            $this->block_element( array( '' => $new_value ),$save );
4225
+                                        }
4226
+                                    }
4227
+                                    $first_item ++;
4228
+                                }
4229
+                            }
4230
+
4231
+                            if($new_args['element']=='innerBlocksProps' || $new_args['element']=='xBlocksProps'){
4232
+                                echo "))";// end content
4233
+                            }else{
4234
+                                echo ")";// end content
4235
+                            }
4236
+
4237
+
4238
+                            echo ", \n";
4239
+
4240
+                        }
4241
+                    } else {
4242
+
4243
+                        if ( substr( $element, 0, 3 ) === "if_" ) {
4244
+                            $extra = '';
4245
+                            if( strpos($new_args, '[%WrapClass%]') !== false ){
4246
+                                $new_args = str_replace('[%WrapClass%]"','" + sd_build_aui_class(props.attributes)',$new_args);
4247
+                                $new_args = str_replace('[%WrapClass%]','+ sd_build_aui_class(props.attributes)',$new_args);
4248
+                            }
4249
+                            echo str_replace( "if_", "", $element ) . ": " . $this->block_props_replace( $new_args, true ) . ",";
4250
+                        } elseif ( $element == 'style' &&  strpos($new_args, '[%WrapStyle%]') !== false ) {
4251
+                            $new_args = str_replace('[%WrapStyle%]','',$new_args);
4252
+                            echo $element . ": {..." . $this->block_props_replace( $new_args ) . " , ...sd_build_aui_styles(props.attributes) },";
4253 4253
 //                            echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4254
-						} elseif ( $element == 'style' ) {
4255
-							echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4256
-						} elseif ( ( $element == 'class' || $element == 'className'  ) &&  strpos($new_args, '[%WrapClass%]') !== false ) {
4257
-							$new_args = str_replace('[%WrapClass%]','',$new_args);
4258
-							echo $element . ": '" . $this->block_props_replace( $new_args ) . "' + sd_build_aui_class(props.attributes),";
4259
-						} elseif ( $element == 'template' && $new_args ) {
4260
-							echo $element . ": $new_args,";
4261
-						} else {
4262
-							echo $element . ": '" . $this->block_props_replace( $new_args ) . "',";
4263
-						}
4264
-
4265
-					}
4266
-				}
4267
-			}
4268
-		}
4254
+                        } elseif ( $element == 'style' ) {
4255
+                            echo $element . ": " . $this->block_props_replace( $new_args ) . ",";
4256
+                        } elseif ( ( $element == 'class' || $element == 'className'  ) &&  strpos($new_args, '[%WrapClass%]') !== false ) {
4257
+                            $new_args = str_replace('[%WrapClass%]','',$new_args);
4258
+                            echo $element . ": '" . $this->block_props_replace( $new_args ) . "' + sd_build_aui_class(props.attributes),";
4259
+                        } elseif ( $element == 'template' && $new_args ) {
4260
+                            echo $element . ": $new_args,";
4261
+                        } else {
4262
+                            echo $element . ": '" . $this->block_props_replace( $new_args ) . "',";
4263
+                        }
4264
+
4265
+                    }
4266
+                }
4267
+            }
4268
+        }
4269 4269
 
4270
-		/**
4271
-		 * Replace block attributes placeholders with the proper naming.
4272
-		 *
4273
-		 * @param $string
4274
-		 *
4275
-		 * @return mixed
4276
-		 */
4277
-		public function block_props_replace( $string, $no_wrap = false ) {
4278
-			if ( $no_wrap ) {
4279
-				$string = str_replace( array( "[%", "%]", "%:checked]" ), array( "props.attributes.", "", "" ), $string );
4280
-			} else {
4281
-				$string = str_replace( array( "![%", "[%", "%]", "%:checked]" ), array( "'+!props.attributes.", "'+props.attributes.", "+'", "+'" ), $string );
4282
-			}
4270
+        /**
4271
+         * Replace block attributes placeholders with the proper naming.
4272
+         *
4273
+         * @param $string
4274
+         *
4275
+         * @return mixed
4276
+         */
4277
+        public function block_props_replace( $string, $no_wrap = false ) {
4278
+            if ( $no_wrap ) {
4279
+                $string = str_replace( array( "[%", "%]", "%:checked]" ), array( "props.attributes.", "", "" ), $string );
4280
+            } else {
4281
+                $string = str_replace( array( "![%", "[%", "%]", "%:checked]" ), array( "'+!props.attributes.", "'+props.attributes.", "+'", "+'" ), $string );
4282
+            }
4283 4283
 
4284
-			return $string;
4285
-		}
4284
+            return $string;
4285
+        }
4286 4286
 
4287
-		/**
4288
-		 * Outputs the content of the widget
4289
-		 *
4290
-		 * @param array $args
4291
-		 * @param array $instance
4292
-		 */
4293
-		public function widget( $args, $instance ) {
4294
-			if ( ! is_array( $args ) ) {
4295
-				$args = array();
4296
-			}
4287
+        /**
4288
+         * Outputs the content of the widget
4289
+         *
4290
+         * @param array $args
4291
+         * @param array $instance
4292
+         */
4293
+        public function widget( $args, $instance ) {
4294
+            if ( ! is_array( $args ) ) {
4295
+                $args = array();
4296
+            }
4297 4297
 
4298
-			// Get the filtered values
4299
-			$argument_values = $this->argument_values( $instance );
4300
-			$argument_values = $this->string_to_bool( $argument_values );
4301
-			$output          = $this->output( $argument_values, $args );
4298
+            // Get the filtered values
4299
+            $argument_values = $this->argument_values( $instance );
4300
+            $argument_values = $this->string_to_bool( $argument_values );
4301
+            $output          = $this->output( $argument_values, $args );
4302 4302
 
4303
-			$no_wrap = false;
4304
-			if ( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ) {
4305
-				$no_wrap = true;
4306
-			}
4303
+            $no_wrap = false;
4304
+            if ( isset( $argument_values['no_wrap'] ) && $argument_values['no_wrap'] ) {
4305
+                $no_wrap = true;
4306
+            }
4307 4307
 
4308
-			ob_start();
4309
-			if ( $output && ! $no_wrap ) {
4308
+            ob_start();
4309
+            if ( $output && ! $no_wrap ) {
4310 4310
 
4311
-				$class_original = $this->options['widget_ops']['classname'];
4312
-				$class = $this->options['widget_ops']['classname']." sdel-".$this->get_instance_hash();
4311
+                $class_original = $this->options['widget_ops']['classname'];
4312
+                $class = $this->options['widget_ops']['classname']." sdel-".$this->get_instance_hash();
4313 4313
 
4314
-				// Before widget
4315
-				$before_widget = ! empty( $args['before_widget'] ) ? $args['before_widget'] : '';
4316
-				$before_widget = $before_widget ? str_replace( $class_original, $class, $before_widget ) : $before_widget;
4317
-				$before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this );
4318
-				$before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this );
4314
+                // Before widget
4315
+                $before_widget = ! empty( $args['before_widget'] ) ? $args['before_widget'] : '';
4316
+                $before_widget = $before_widget ? str_replace( $class_original, $class, $before_widget ) : $before_widget;
4317
+                $before_widget = apply_filters( 'wp_super_duper_before_widget', $before_widget, $args, $instance, $this );
4318
+                $before_widget = apply_filters( 'wp_super_duper_before_widget_' . $this->base_id, $before_widget, $args, $instance, $this );
4319 4319
 
4320
-				// After widget
4321
-				$after_widget = ! empty( $args['after_widget'] ) ? $args['after_widget'] : '';
4322
-				$after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this );
4323
-				$after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this );
4320
+                // After widget
4321
+                $after_widget = ! empty( $args['after_widget'] ) ? $args['after_widget'] : '';
4322
+                $after_widget = apply_filters( 'wp_super_duper_after_widget', $after_widget, $args, $instance, $this );
4323
+                $after_widget = apply_filters( 'wp_super_duper_after_widget_' . $this->base_id, $after_widget, $args, $instance, $this );
4324 4324
 
4325
-				echo $before_widget;
4326
-				// elementor strips the widget wrapping div so we check for and add it back if needed
4327
-				if ( $this->is_elementor_widget_output() ) {
4328
-					// Filter class & attrs for elementor widget output.
4329
-					$class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
4330
-					$class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
4325
+                echo $before_widget;
4326
+                // elementor strips the widget wrapping div so we check for and add it back if needed
4327
+                if ( $this->is_elementor_widget_output() ) {
4328
+                    // Filter class & attrs for elementor widget output.
4329
+                    $class = apply_filters( 'wp_super_duper_div_classname', $class, $args, $this );
4330
+                    $class = apply_filters( 'wp_super_duper_div_classname_' . $this->base_id, $class, $args, $this );
4331 4331
 
4332
-					$attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
4333
-					$attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
4332
+                    $attrs = apply_filters( 'wp_super_duper_div_attrs', '', $args, $this );
4333
+                    $attrs = apply_filters( 'wp_super_duper_div_attrs_' . $this->base_id, '', $args, $this );
4334 4334
 
4335
-					echo "<span class='" . esc_attr( $class  ) . "' " . $attrs . ">";
4336
-				}
4337
-				echo $this->output_title( $args, $instance );
4338
-				echo $output;
4339
-				if ( $this->is_elementor_widget_output() ) {
4340
-					echo "</span>";
4341
-				}
4342
-				echo $after_widget;
4343
-			} elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty
4344
-				$output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
4345
-				echo $output;
4346
-			} elseif ( $output && $no_wrap ) {
4347
-				echo $output;
4348
-			}
4349
-			$output = ob_get_clean();
4335
+                    echo "<span class='" . esc_attr( $class  ) . "' " . $attrs . ">";
4336
+                }
4337
+                echo $this->output_title( $args, $instance );
4338
+                echo $output;
4339
+                if ( $this->is_elementor_widget_output() ) {
4340
+                    echo "</span>";
4341
+                }
4342
+                echo $after_widget;
4343
+            } elseif ( $this->is_preview() && $output == '' ) {// if preview show a placeholder if empty
4344
+                $output = $this->preview_placeholder_text( "{{" . $this->base_id . "}}" );
4345
+                echo $output;
4346
+            } elseif ( $output && $no_wrap ) {
4347
+                echo $output;
4348
+            }
4349
+            $output = ob_get_clean();
4350 4350
 
4351
-			$output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this );
4351
+            $output = apply_filters( 'wp_super_duper_widget_output', $output, $instance, $args, $this );
4352 4352
 
4353
-			echo $output;
4354
-		}
4353
+            echo $output;
4354
+        }
4355 4355
 
4356
-		/**
4357
-		 * Tests if the current output is inside a elementor container.
4358
-		 *
4359
-		 * @return bool
4360
-		 *@since 1.0.4
4361
-		 */
4362
-		public function is_elementor_widget_output() {
4363
-			$result = false;
4364
-			if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) {
4365
-				$result = true;
4366
-			}
4356
+        /**
4357
+         * Tests if the current output is inside a elementor container.
4358
+         *
4359
+         * @return bool
4360
+         *@since 1.0.4
4361
+         */
4362
+        public function is_elementor_widget_output() {
4363
+            $result = false;
4364
+            if ( defined( 'ELEMENTOR_VERSION' ) && isset( $this->number ) && $this->number == 'REPLACE_TO_ID' ) {
4365
+                $result = true;
4366
+            }
4367 4367
 
4368
-			return $result;
4369
-		}
4368
+            return $result;
4369
+        }
4370 4370
 
4371
-		/**
4372
-		 * Tests if the current output is inside a elementor preview.
4373
-		 *
4374
-		 * @return bool
4375
-		 *@since 1.0.4
4376
-		 */
4377
-		public function is_elementor_preview() {
4378
-			$result = false;
4379
-			if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
4380
-				$result = true;
4381
-			}
4371
+        /**
4372
+         * Tests if the current output is inside a elementor preview.
4373
+         *
4374
+         * @return bool
4375
+         *@since 1.0.4
4376
+         */
4377
+        public function is_elementor_preview() {
4378
+            $result = false;
4379
+            if ( isset( $_REQUEST['elementor-preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) || ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor_ajax' ) ) {
4380
+                $result = true;
4381
+            }
4382 4382
 
4383
-			return $result;
4384
-		}
4383
+            return $result;
4384
+        }
4385 4385
 
4386
-		/**
4387
-		 * Tests if the current output is inside a Divi preview.
4388
-		 *
4389
-		 * @return bool
4390
-		 *@since 1.0.6
4391
-		 */
4392
-		public function is_divi_preview() {
4393
-			$result = false;
4394
-			if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
4395
-				$result = true;
4396
-			}
4386
+        /**
4387
+         * Tests if the current output is inside a Divi preview.
4388
+         *
4389
+         * @return bool
4390
+         *@since 1.0.6
4391
+         */
4392
+        public function is_divi_preview() {
4393
+            $result = false;
4394
+            if ( isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) || ( is_admin() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'elementor' ) ) {
4395
+                $result = true;
4396
+            }
4397 4397
 
4398
-			return $result;
4399
-		}
4398
+            return $result;
4399
+        }
4400 4400
 
4401
-		/**
4402
-		 * Tests if the current output is inside a Beaver builder preview.
4403
-		 *
4404
-		 * @return bool
4405
-		 *@since 1.0.6
4406
-		 */
4407
-		public function is_beaver_preview() {
4408
-			$result = false;
4409
-			if ( isset( $_REQUEST['fl_builder'] ) ) {
4410
-				$result = true;
4411
-			}
4401
+        /**
4402
+         * Tests if the current output is inside a Beaver builder preview.
4403
+         *
4404
+         * @return bool
4405
+         *@since 1.0.6
4406
+         */
4407
+        public function is_beaver_preview() {
4408
+            $result = false;
4409
+            if ( isset( $_REQUEST['fl_builder'] ) ) {
4410
+                $result = true;
4411
+            }
4412 4412
 
4413
-			return $result;
4414
-		}
4413
+            return $result;
4414
+        }
4415 4415
 
4416
-		/**
4417
-		 * Tests if the current output is inside a siteorigin builder preview.
4418
-		 *
4419
-		 * @return bool
4420
-		 *@since 1.0.6
4421
-		 */
4422
-		public function is_siteorigin_preview() {
4423
-			$result = false;
4424
-			if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
4425
-				$result = true;
4426
-			}
4416
+        /**
4417
+         * Tests if the current output is inside a siteorigin builder preview.
4418
+         *
4419
+         * @return bool
4420
+         *@since 1.0.6
4421
+         */
4422
+        public function is_siteorigin_preview() {
4423
+            $result = false;
4424
+            if ( ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) ) {
4425
+                $result = true;
4426
+            }
4427 4427
 
4428
-			return $result;
4429
-		}
4428
+            return $result;
4429
+        }
4430 4430
 
4431
-		/**
4432
-		 * Tests if the current output is inside a cornerstone builder preview.
4433
-		 *
4434
-		 * @return bool
4435
-		 *@since 1.0.8
4436
-		 */
4437
-		public function is_cornerstone_preview() {
4438
-			$result = false;
4439
-			if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
4440
-				$result = true;
4441
-			}
4431
+        /**
4432
+         * Tests if the current output is inside a cornerstone builder preview.
4433
+         *
4434
+         * @return bool
4435
+         *@since 1.0.8
4436
+         */
4437
+        public function is_cornerstone_preview() {
4438
+            $result = false;
4439
+            if ( ! empty( $_REQUEST['cornerstone_preview'] ) || basename( $_SERVER['REQUEST_URI'] ) == 'cornerstone-endpoint' ) {
4440
+                $result = true;
4441
+            }
4442 4442
 
4443
-			return $result;
4444
-		}
4443
+            return $result;
4444
+        }
4445 4445
 
4446
-		/**
4447
-		 * Tests if the current output is inside a fusion builder preview.
4448
-		 *
4449
-		 * @return bool
4450
-		 *@since 1.1.0
4451
-		 */
4452
-		public function is_fusion_preview() {
4453
-			$result = false;
4454
-			if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
4455
-				$result = true;
4456
-			}
4446
+        /**
4447
+         * Tests if the current output is inside a fusion builder preview.
4448
+         *
4449
+         * @return bool
4450
+         *@since 1.1.0
4451
+         */
4452
+        public function is_fusion_preview() {
4453
+            $result = false;
4454
+            if ( ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) ) {
4455
+                $result = true;
4456
+            }
4457 4457
 
4458
-			return $result;
4459
-		}
4458
+            return $result;
4459
+        }
4460 4460
 
4461
-		/**
4462
-		 * Tests if the current output is inside a Oxygen builder preview.
4463
-		 *
4464
-		 * @return bool
4465
-		 *@since 1.0.18
4466
-		 */
4467
-		public function is_oxygen_preview() {
4468
-			$result = false;
4469
-			if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
4470
-				$result = true;
4471
-			}
4461
+        /**
4462
+         * Tests if the current output is inside a Oxygen builder preview.
4463
+         *
4464
+         * @return bool
4465
+         *@since 1.0.18
4466
+         */
4467
+        public function is_oxygen_preview() {
4468
+            $result = false;
4469
+            if ( ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) ) {
4470
+                $result = true;
4471
+            }
4472 4472
 
4473
-			return $result;
4474
-		}
4473
+            return $result;
4474
+        }
4475 4475
 
4476
-		/**
4477
-		 * Check for Kallyas theme Zion builder preview.
4478
-		 *
4479
-		 * @since 1.1.22
4480
-		 *
4481
-		 * @return bool True when preview page otherwise false.
4482
-		 */
4483
-		public function is_kallyas_zion_preview() {
4484
-			$result = false;
4485
-
4486
-			if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
4487
-				$result = true;
4488
-			}
4476
+        /**
4477
+         * Check for Kallyas theme Zion builder preview.
4478
+         *
4479
+         * @since 1.1.22
4480
+         *
4481
+         * @return bool True when preview page otherwise false.
4482
+         */
4483
+        public function is_kallyas_zion_preview() {
4484
+            $result = false;
4489 4485
 
4490
-			return $result;
4491
-		}
4486
+            if ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) {
4487
+                $result = true;
4488
+            }
4492 4489
 
4493
-		/**
4494
-		 * Check for Bricks theme builder preview.
4495
-		 *
4496
-		 * @since 1.1.31
4497
-		 *
4498
-		 * @return bool True when preview page otherwise false.
4499
-		 */
4500
-		public function is_bricks_preview() {
4501
-			$result = false;
4502
-
4503
-			if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
4504
-				$result = true;
4505
-			}
4490
+            return $result;
4491
+        }
4506 4492
 
4507
-			return $result;
4508
-		}
4493
+        /**
4494
+         * Check for Bricks theme builder preview.
4495
+         *
4496
+         * @since 1.1.31
4497
+         *
4498
+         * @return bool True when preview page otherwise false.
4499
+         */
4500
+        public function is_bricks_preview() {
4501
+            $result = false;
4509 4502
 
4510
-		/**
4511
-		 * General function to check if we are in a preview situation.
4512
-		 *
4513
-		 * @return bool
4514
-		 *@since 1.0.6
4515
-		 */
4516
-		public function is_preview() {
4517
-			$preview = false;
4518
-			if ( $this->is_divi_preview() ) {
4519
-				$preview = true;
4520
-			} elseif ( $this->is_elementor_preview() ) {
4521
-				$preview = true;
4522
-			} elseif ( $this->is_beaver_preview() ) {
4523
-				$preview = true;
4524
-			} elseif ( $this->is_siteorigin_preview() ) {
4525
-				$preview = true;
4526
-			} elseif ( $this->is_cornerstone_preview() ) {
4527
-				$preview = true;
4528
-			} elseif ( $this->is_fusion_preview() ) {
4529
-				$preview = true;
4530
-			} elseif ( $this->is_oxygen_preview() ) {
4531
-				$preview = true;
4532
-			} elseif( $this->is_kallyas_zion_preview() ) {
4533
-				$preview = true;
4534
-			} elseif( $this->is_block_content_call() ) {
4535
-				$preview = true;
4536
-			} elseif( $this->is_bricks_preview() ) {
4537
-				$preview = true;
4538
-			}
4503
+            if ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) {
4504
+                $result = true;
4505
+            }
4539 4506
 
4540
-			return $preview;
4541
-		}
4507
+            return $result;
4508
+        }
4542 4509
 
4543
-		/**
4544
-		 * Output the super title.
4545
-		 *
4546
-		 * @param $args
4547
-		 * @param array $instance
4548
-		 *
4549
-		 * @return string
4550
-		 */
4551
-		public function output_title( $args, $instance = array() ) {
4552
-			$output = '';
4553
-			if ( ! empty( $instance['title'] ) ) {
4554
-				/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
4555
-				$title  = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
4556
-
4557
-				if ( empty( $instance['widget_title_tag'] ) ) {
4558
-					if ( ! isset( $args['before_title'] ) ) {
4559
-						$args['before_title'] = '';
4560
-					}
4510
+        /**
4511
+         * General function to check if we are in a preview situation.
4512
+         *
4513
+         * @return bool
4514
+         *@since 1.0.6
4515
+         */
4516
+        public function is_preview() {
4517
+            $preview = false;
4518
+            if ( $this->is_divi_preview() ) {
4519
+                $preview = true;
4520
+            } elseif ( $this->is_elementor_preview() ) {
4521
+                $preview = true;
4522
+            } elseif ( $this->is_beaver_preview() ) {
4523
+                $preview = true;
4524
+            } elseif ( $this->is_siteorigin_preview() ) {
4525
+                $preview = true;
4526
+            } elseif ( $this->is_cornerstone_preview() ) {
4527
+                $preview = true;
4528
+            } elseif ( $this->is_fusion_preview() ) {
4529
+                $preview = true;
4530
+            } elseif ( $this->is_oxygen_preview() ) {
4531
+                $preview = true;
4532
+            } elseif( $this->is_kallyas_zion_preview() ) {
4533
+                $preview = true;
4534
+            } elseif( $this->is_block_content_call() ) {
4535
+                $preview = true;
4536
+            } elseif( $this->is_bricks_preview() ) {
4537
+                $preview = true;
4538
+            }
4561 4539
 
4562
-					if ( ! isset( $args['after_title'] ) ) {
4563
-						$args['after_title'] = '';
4564
-					}
4540
+            return $preview;
4541
+        }
4565 4542
 
4566
-					$output = $args['before_title'] . $title . $args['after_title'];
4567
-				} else {
4568
-					$tag 			= esc_attr( $instance['widget_title_tag'] );
4569
-					$allowed_tags 	= array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'div', 'p' );
4570
-					$title_tag      = in_array( $tag, $allowed_tags, true ) ? esc_attr( $tag ) : 'h2';
4571
-
4572
-					// classes
4573
-					$title_classes = array();
4574
-					$title_classes[] = !empty( $instance['widget_title_size_class'] ) ? sanitize_html_class( $instance['widget_title_size_class'] ) : '';
4575
-					$title_classes[] = !empty( $instance['widget_title_align_class'] ) ? sanitize_html_class( $instance['widget_title_align_class'] ) : '';
4576
-					$title_classes[] = !empty( $instance['widget_title_color_class'] ) ? "text-".sanitize_html_class( $instance['widget_title_color_class'] ) : '';
4577
-					$title_classes[] = !empty( $instance['widget_title_border_class'] ) ? sanitize_html_class( $instance['widget_title_border_class'] ) : '';
4578
-					$title_classes[] = !empty( $instance['widget_title_border_color_class'] ) ? "border-".sanitize_html_class( $instance['widget_title_border_color_class'] ) : '';
4579
-					$title_classes[] = !empty( $instance['widget_title_mt_class'] ) ? "mt-".absint( $instance['widget_title_mt_class'] ) : '';
4580
-					$title_classes[] = !empty( $instance['widget_title_mr_class'] ) ? "mr-".absint( $instance['widget_title_mr_class'] ) : '';
4581
-					$title_classes[] = !empty( $instance['widget_title_mb_class'] ) ? "mb-".absint( $instance['widget_title_mb_class'] ) : '';
4582
-					$title_classes[] = !empty( $instance['widget_title_ml_class'] ) ? "ml-".absint( $instance['widget_title_ml_class'] ) : '';
4583
-					$title_classes[] = !empty( $instance['widget_title_pt_class'] ) ? "pt-".absint( $instance['widget_title_pt_class'] ) : '';
4584
-					$title_classes[] = !empty( $instance['widget_title_pr_class'] ) ? "pr-".absint( $instance['widget_title_pr_class'] ) : '';
4585
-					$title_classes[] = !empty( $instance['widget_title_pb_class'] ) ? "pb-".absint( $instance['widget_title_pb_class'] ) : '';
4586
-					$title_classes[] = !empty( $instance['widget_title_pl_class'] ) ? "pl-".absint( $instance['widget_title_pl_class'] ) : '';
4587
-
4588
-					$class = !empty( $title_classes ) ? implode(" ",$title_classes) : '';
4589
-					$output = "<$title_tag class='$class' >$title</$title_tag>";
4590
-				}
4543
+        /**
4544
+         * Output the super title.
4545
+         *
4546
+         * @param $args
4547
+         * @param array $instance
4548
+         *
4549
+         * @return string
4550
+         */
4551
+        public function output_title( $args, $instance = array() ) {
4552
+            $output = '';
4553
+            if ( ! empty( $instance['title'] ) ) {
4554
+                /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
4555
+                $title  = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
4556
+
4557
+                if ( empty( $instance['widget_title_tag'] ) ) {
4558
+                    if ( ! isset( $args['before_title'] ) ) {
4559
+                        $args['before_title'] = '';
4560
+                    }
4561
+
4562
+                    if ( ! isset( $args['after_title'] ) ) {
4563
+                        $args['after_title'] = '';
4564
+                    }
4565
+
4566
+                    $output = $args['before_title'] . $title . $args['after_title'];
4567
+                } else {
4568
+                    $tag 			= esc_attr( $instance['widget_title_tag'] );
4569
+                    $allowed_tags 	= array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'span', 'div', 'p' );
4570
+                    $title_tag      = in_array( $tag, $allowed_tags, true ) ? esc_attr( $tag ) : 'h2';
4571
+
4572
+                    // classes
4573
+                    $title_classes = array();
4574
+                    $title_classes[] = !empty( $instance['widget_title_size_class'] ) ? sanitize_html_class( $instance['widget_title_size_class'] ) : '';
4575
+                    $title_classes[] = !empty( $instance['widget_title_align_class'] ) ? sanitize_html_class( $instance['widget_title_align_class'] ) : '';
4576
+                    $title_classes[] = !empty( $instance['widget_title_color_class'] ) ? "text-".sanitize_html_class( $instance['widget_title_color_class'] ) : '';
4577
+                    $title_classes[] = !empty( $instance['widget_title_border_class'] ) ? sanitize_html_class( $instance['widget_title_border_class'] ) : '';
4578
+                    $title_classes[] = !empty( $instance['widget_title_border_color_class'] ) ? "border-".sanitize_html_class( $instance['widget_title_border_color_class'] ) : '';
4579
+                    $title_classes[] = !empty( $instance['widget_title_mt_class'] ) ? "mt-".absint( $instance['widget_title_mt_class'] ) : '';
4580
+                    $title_classes[] = !empty( $instance['widget_title_mr_class'] ) ? "mr-".absint( $instance['widget_title_mr_class'] ) : '';
4581
+                    $title_classes[] = !empty( $instance['widget_title_mb_class'] ) ? "mb-".absint( $instance['widget_title_mb_class'] ) : '';
4582
+                    $title_classes[] = !empty( $instance['widget_title_ml_class'] ) ? "ml-".absint( $instance['widget_title_ml_class'] ) : '';
4583
+                    $title_classes[] = !empty( $instance['widget_title_pt_class'] ) ? "pt-".absint( $instance['widget_title_pt_class'] ) : '';
4584
+                    $title_classes[] = !empty( $instance['widget_title_pr_class'] ) ? "pr-".absint( $instance['widget_title_pr_class'] ) : '';
4585
+                    $title_classes[] = !empty( $instance['widget_title_pb_class'] ) ? "pb-".absint( $instance['widget_title_pb_class'] ) : '';
4586
+                    $title_classes[] = !empty( $instance['widget_title_pl_class'] ) ? "pl-".absint( $instance['widget_title_pl_class'] ) : '';
4587
+
4588
+                    $class = !empty( $title_classes ) ? implode(" ",$title_classes) : '';
4589
+                    $output = "<$title_tag class='$class' >$title</$title_tag>";
4590
+                }
4591 4591
 
4592
-			}
4592
+            }
4593 4593
 
4594
-			return $output;
4595
-		}
4594
+            return $output;
4595
+        }
4596 4596
 
4597
-		/**
4598
-		 * Outputs the options form inputs for the widget.
4599
-		 *
4600
-		 * @param array $instance The widget options.
4601
-		 */
4602
-		public function form( $instance ) {
4597
+        /**
4598
+         * Outputs the options form inputs for the widget.
4599
+         *
4600
+         * @param array $instance The widget options.
4601
+         */
4602
+        public function form( $instance ) {
4603 4603
 
4604
-			// set widget instance
4605
-			$this->instance = $instance;
4604
+            // set widget instance
4605
+            $this->instance = $instance;
4606 4606
 
4607
-			// set it as a SD widget
4608
-			echo $this->widget_advanced_toggle();
4607
+            // set it as a SD widget
4608
+            echo $this->widget_advanced_toggle();
4609 4609
 
4610
-			echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>";
4611
-			$arguments_raw = $this->get_arguments();
4610
+            echo "<p>" . esc_attr( $this->options['widget_ops']['description'] ) . "</p>";
4611
+            $arguments_raw = $this->get_arguments();
4612 4612
 
4613
-			if ( is_array( $arguments_raw ) ) {
4613
+            if ( is_array( $arguments_raw ) ) {
4614 4614
 
4615
-				$arguments = $this->group_arguments( $arguments_raw );
4615
+                $arguments = $this->group_arguments( $arguments_raw );
4616 4616
 
4617
-				// Do we have sections?
4618
-				$has_sections = $arguments == $arguments_raw ? false : true;
4617
+                // Do we have sections?
4618
+                $has_sections = $arguments == $arguments_raw ? false : true;
4619 4619
 
4620 4620
 
4621
-				if ( $has_sections ) {
4622
-					$panel_count = 0;
4623
-					foreach ( $arguments as $key => $args ) {
4621
+                if ( $has_sections ) {
4622
+                    $panel_count = 0;
4623
+                    foreach ( $arguments as $key => $args ) {
4624 4624
 
4625
-						?>
4625
+                        ?>
4626 4626
 						<script>
4627 4627
 							//							jQuery(this).find("i").toggleClass("fas fa-chevron-up fas fa-chevron-down");jQuery(this).next().toggle();
4628 4628
 						</script>
4629 4629
 						<?php
4630 4630
 
4631
-						$hide       = $panel_count ? ' style="display:none;" ' : '';
4632
-						$icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
4633
-						echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle" . sanitize_title_with_dashes( $key ) . "'>" . esc_attr( $key ) . " <i style='float:right;' class='" . $icon_class . "'></i></button>";
4634
-						echo "<div class='sd-toggle-group sd-input-group-" . sanitize_title_with_dashes( $key ) . "' $hide>";
4631
+                        $hide       = $panel_count ? ' style="display:none;" ' : '';
4632
+                        $icon_class = $panel_count ? 'fas fa-chevron-up' : 'fas fa-chevron-down';
4633
+                        echo "<button onclick='jQuery(this).find(\"i\").toggleClass(\"fas fa-chevron-up fas fa-chevron-down\");jQuery(this).next().slideToggle();' type='button' class='sd-toggle-group-button sd-input-group-toggle" . sanitize_title_with_dashes( $key ) . "'>" . esc_attr( $key ) . " <i style='float:right;' class='" . $icon_class . "'></i></button>";
4634
+                        echo "<div class='sd-toggle-group sd-input-group-" . sanitize_title_with_dashes( $key ) . "' $hide>";
4635 4635
 
4636
-						foreach ( $args as $k => $a ) {
4636
+                        foreach ( $args as $k => $a ) {
4637 4637
 
4638
-							$this->widget_inputs_row_start($k, $a);
4639
-							$this->widget_inputs( $a, $instance );
4640
-							$this->widget_inputs_row_end($k, $a);
4638
+                            $this->widget_inputs_row_start($k, $a);
4639
+                            $this->widget_inputs( $a, $instance );
4640
+                            $this->widget_inputs_row_end($k, $a);
4641 4641
 
4642
-						}
4642
+                        }
4643 4643
 
4644
-						echo "</div>";
4644
+                        echo "</div>";
4645 4645
 
4646
-						$panel_count ++;
4646
+                        $panel_count ++;
4647 4647
 
4648
-					}
4649
-				} else {
4650
-					foreach ( $arguments as $key => $args ) {
4651
-						$this->widget_inputs_row_start($key, $args);
4652
-						$this->widget_inputs( $args, $instance );
4653
-						$this->widget_inputs_row_end($key, $args);
4654
-					}
4655
-				}
4648
+                    }
4649
+                } else {
4650
+                    foreach ( $arguments as $key => $args ) {
4651
+                        $this->widget_inputs_row_start($key, $args);
4652
+                        $this->widget_inputs( $args, $instance );
4653
+                        $this->widget_inputs_row_end($key, $args);
4654
+                    }
4655
+                }
4656 4656
 
4657
-			}
4658
-		}
4657
+            }
4658
+        }
4659 4659
 
4660
-		public function widget_inputs_row_start( $key, $args ) {
4661
-			if ( ! empty( $args['row'] ) ) {
4662
-				// Maybe open
4663
-				if ( ! empty( $args['row']['open'] ) ) {
4664
-					?>
4660
+        public function widget_inputs_row_start( $key, $args ) {
4661
+            if ( ! empty( $args['row'] ) ) {
4662
+                // Maybe open
4663
+                if ( ! empty( $args['row']['open'] ) ) {
4664
+                    ?>
4665 4665
 					<div class='bsui sd-argument' data-argument='<?php echo esc_attr( $args['row']['key'] ); ?>' data-element_require='<?php echo ( ! empty( $args['row']['element_require'] ) ? $this->convert_element_require( $args['row']['element_require'] ) : '' ); ?>'>
4666 4666
 					<?php if ( ! empty( $args['row']['title'] ) ) { ?>
4667 4667
 					<?php
4668
-						if ( isset( $args['row']['icon'] ) ) {
4669
-							$args['row']['icon'] = '';
4670
-						}
4671
-
4672
-						if ( ! isset( $args['row']['device_type'] ) && isset( $args['device_type'] ) ) {
4673
-							$args['row']['device_type'] = $args['device_type'];
4674
-						}
4675
-					?>
4668
+                        if ( isset( $args['row']['icon'] ) ) {
4669
+                            $args['row']['icon'] = '';
4670
+                        }
4671
+
4672
+                        if ( ! isset( $args['row']['device_type'] ) && isset( $args['device_type'] ) ) {
4673
+                            $args['row']['device_type'] = $args['device_type'];
4674
+                        }
4675
+                    ?>
4676 4676
 					<label class="mb-0"><?php echo $this->widget_field_title( $args['row'] ); ?><?php echo $this->widget_field_desc( $args['row'] ); ?></label>
4677 4677
 					<?php } ?>
4678 4678
 					<div class='row<?php echo ( ! empty( $args['row']['class'] ) ? ' ' . esc_attr( $args['row']['class'] ) : '' ); ?>'>
4679 4679
 					<div class='col pr-2'>
4680 4680
 					<?php
4681
-				} else if ( ! empty( $args['row']['close'] ) ) {
4682
-					echo "<div class='col pl-0 ps-0'>";
4683
-				} else {
4684
-					echo "<div class='col pl-0 ps-0 pr-2 pe-2'>";
4685
-				}
4686
-			}
4687
-		}
4681
+                } else if ( ! empty( $args['row']['close'] ) ) {
4682
+                    echo "<div class='col pl-0 ps-0'>";
4683
+                } else {
4684
+                    echo "<div class='col pl-0 ps-0 pr-2 pe-2'>";
4685
+                }
4686
+            }
4687
+        }
4688 4688
 
4689
-		public function widget_inputs_row_end( $key, $args ) {
4690
-			if ( ! empty( $args['row'] ) ) {
4691
-				// Maybe close
4692
-				if ( ! empty( $args['row']['close'] ) ) {
4693
-					echo "</div></div>";
4694
-				}
4695
-				echo "</div>";
4696
-			}
4697
-		}
4689
+        public function widget_inputs_row_end( $key, $args ) {
4690
+            if ( ! empty( $args['row'] ) ) {
4691
+                // Maybe close
4692
+                if ( ! empty( $args['row']['close'] ) ) {
4693
+                    echo "</div></div>";
4694
+                }
4695
+                echo "</div>";
4696
+            }
4697
+        }
4698 4698
 
4699
-		/**
4700
-		 * Get the hidden input that when added makes the advanced button show on widget settings.
4701
-		 *
4702
-		 * @return string
4703
-		 */
4704
-		public function widget_advanced_toggle() {
4699
+        /**
4700
+         * Get the hidden input that when added makes the advanced button show on widget settings.
4701
+         *
4702
+         * @return string
4703
+         */
4704
+        public function widget_advanced_toggle() {
4705 4705
 
4706
-			$output = '';
4707
-			if ( $this->block_show_advanced() ) {
4708
-				$val = 1;
4709
-			} else {
4710
-				$val = 0;
4711
-			}
4706
+            $output = '';
4707
+            if ( $this->block_show_advanced() ) {
4708
+                $val = 1;
4709
+            } else {
4710
+                $val = 0;
4711
+            }
4712 4712
 
4713
-			$output .= "<input type='hidden'  class='sd-show-advanced' value='$val' />";
4713
+            $output .= "<input type='hidden'  class='sd-show-advanced' value='$val' />";
4714 4714
 
4715
-			return $output;
4716
-		}
4715
+            return $output;
4716
+        }
4717 4717
 
4718
-		/**
4719
-		 * Convert require element.
4720
-		 *
4721
-		 * @param string $input Input element.
4722
-		 *
4723
-		 * @return string $output
4724
-		 *@since 1.0.0
4725
-		 *
4726
-		 */
4727
-		public function convert_element_require( $input ) {
4728
-			$input = str_replace( "'", '"', $input );// we only want double quotes
4729
-
4730
-			$output = esc_attr( str_replace( array( "[%", "%]", "%:checked]" ), array(
4731
-				"jQuery(form).find('[data-argument=\"",
4732
-				"\"]').find('input,select,textarea').val()",
4733
-				"\"]').find('input:checked').val()"
4734
-			), $input ) );
4735
-
4736
-			return $output;
4737
-		}
4718
+        /**
4719
+         * Convert require element.
4720
+         *
4721
+         * @param string $input Input element.
4722
+         *
4723
+         * @return string $output
4724
+         *@since 1.0.0
4725
+         *
4726
+         */
4727
+        public function convert_element_require( $input ) {
4728
+            $input = str_replace( "'", '"', $input );// we only want double quotes
4738 4729
 
4739
-		/**
4740
-		 * Builds the inputs for the widget options.
4741
-		 *
4742
-		 * @param $args
4743
-		 * @param $instance
4744
-		 */
4745
-		public function widget_inputs( $args, $instance ) {
4746
-
4747
-			$class             = "";
4748
-			$element_require   = "";
4749
-			$custom_attributes = "";
4750
-
4751
-			// get value
4752
-			if ( isset( $instance[ $args['name'] ] ) ) {
4753
-				$value = $instance[ $args['name'] ];
4754
-			} elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) {
4755
-				$value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] );
4756
-			} else {
4757
-				$value = '';
4758
-			}
4730
+            $output = esc_attr( str_replace( array( "[%", "%]", "%:checked]" ), array(
4731
+                "jQuery(form).find('[data-argument=\"",
4732
+                "\"]').find('input,select,textarea').val()",
4733
+                "\"]').find('input:checked').val()"
4734
+            ), $input ) );
4759 4735
 
4760
-			// get placeholder
4761
-			if ( ! empty( $args['placeholder'] ) ) {
4762
-				$placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'";
4763
-			} else {
4764
-				$placeholder = '';
4765
-			}
4736
+            return $output;
4737
+        }
4766 4738
 
4767
-			// get if advanced
4768
-			if ( isset( $args['advanced'] ) && $args['advanced'] ) {
4769
-				$class .= " sd-advanced-setting ";
4770
-			}
4739
+        /**
4740
+         * Builds the inputs for the widget options.
4741
+         *
4742
+         * @param $args
4743
+         * @param $instance
4744
+         */
4745
+        public function widget_inputs( $args, $instance ) {
4746
+
4747
+            $class             = "";
4748
+            $element_require   = "";
4749
+            $custom_attributes = "";
4750
+
4751
+            // get value
4752
+            if ( isset( $instance[ $args['name'] ] ) ) {
4753
+                $value = $instance[ $args['name'] ];
4754
+            } elseif ( ! isset( $instance[ $args['name'] ] ) && ! empty( $args['default'] ) ) {
4755
+                $value = is_array( $args['default'] ) ? array_map( "esc_html", $args['default'] ) : esc_html( $args['default'] );
4756
+            } else {
4757
+                $value = '';
4758
+            }
4771 4759
 
4772
-			// element_require
4773
-			if ( isset( $args['element_require'] ) && $args['element_require'] ) {
4774
-				$element_require = $args['element_require'];
4775
-			}
4760
+            // get placeholder
4761
+            if ( ! empty( $args['placeholder'] ) ) {
4762
+                $placeholder = "placeholder='" . esc_html( $args['placeholder'] ) . "'";
4763
+            } else {
4764
+                $placeholder = '';
4765
+            }
4776 4766
 
4777
-			// custom_attributes
4778
-			if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) {
4779
-				$custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true );
4780
-			}
4767
+            // get if advanced
4768
+            if ( isset( $args['advanced'] ) && $args['advanced'] ) {
4769
+                $class .= " sd-advanced-setting ";
4770
+            }
4781 4771
 
4782
-			// before wrapper
4783
-			?>
4772
+            // element_require
4773
+            if ( isset( $args['element_require'] ) && $args['element_require'] ) {
4774
+                $element_require = $args['element_require'];
4775
+            }
4776
+
4777
+            // custom_attributes
4778
+            if ( isset( $args['custom_attributes'] ) && $args['custom_attributes'] ) {
4779
+                $custom_attributes = $this->array_to_attributes( $args['custom_attributes'], true );
4780
+            }
4781
+
4782
+            // before wrapper
4783
+            ?>
4784 4784
 			<p class="sd-argument <?php echo esc_attr( $class ); ?>" data-argument='<?php echo esc_attr( $args['name'] ); ?>' data-element_require='<?php if ( $element_require ) { echo $this->convert_element_require( $element_require );} ?>'>
4785 4785
 			<?php
4786
-			switch ( $args['type'] ) {
4787
-				//array('text','password','number','email','tel','url','color')
4788
-				case "text":
4789
-				case "password":
4790
-				case "number":
4791
-				case "email":
4792
-				case "tel":
4793
-				case "url":
4794
-				case "color":
4795
-					?>
4786
+            switch ( $args['type'] ) {
4787
+                //array('text','password','number','email','tel','url','color')
4788
+                case "text":
4789
+                case "password":
4790
+                case "number":
4791
+                case "email":
4792
+                case "tel":
4793
+                case "url":
4794
+                case "color":
4795
+                    ?>
4796 4796
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args );?><?php echo $this->widget_field_desc( $args ); ?></label>
4797 4797
 					<input <?php echo $placeholder; ?> class="widefat" <?php echo $custom_attributes; ?> id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="<?php echo esc_attr( $args['type'] ); ?>" value="<?php echo esc_attr( $value ); ?>">
4798 4798
 					<?php
4799 4799
 
4800
-					break;
4801
-				case "select":
4802
-					$multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false;
4803
-					if ( $multiple ) {
4804
-						if ( empty( $value ) ) {
4805
-							$value = array();
4806
-						}
4807
-					}
4808
-					?>
4800
+                    break;
4801
+                case "select":
4802
+                    $multiple = isset( $args['multiple'] ) && $args['multiple'] ? true : false;
4803
+                    if ( $multiple ) {
4804
+                        if ( empty( $value ) ) {
4805
+                            $value = array();
4806
+                        }
4807
+                    }
4808
+                    ?>
4809 4809
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
4810 4810
 					<select <?php echo $placeholder; ?> class="widefat" <?php echo $custom_attributes; ?> id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); if ( $multiple ) { echo "[]"; } ?>"
4811 4811
 						<?php if ( $multiple ) {
4812
-							echo "multiple";
4813
-						} //@todo not implemented yet due to gutenberg not supporting it
4814
-						?>>
4812
+                            echo "multiple";
4813
+                        } //@todo not implemented yet due to gutenberg not supporting it
4814
+                        ?>>
4815 4815
 						<?php
4816 4816
 
4817
-						if ( ! empty( $args['options'] ) ) {
4818
-							foreach ( $args['options'] as $val => $label ) {
4819
-								if ( $multiple ) {
4820
-									$selected = in_array( $val, $value ) ? 'selected="selected"' : '';
4821
-								} else {
4822
-									$selected = selected( $value, $val, false );
4823
-								}
4824
-								echo "<option value='$val' " . $selected . ">$label</option>";
4825
-							}
4826
-						}
4827
-						?>
4817
+                        if ( ! empty( $args['options'] ) ) {
4818
+                            foreach ( $args['options'] as $val => $label ) {
4819
+                                if ( $multiple ) {
4820
+                                    $selected = in_array( $val, $value ) ? 'selected="selected"' : '';
4821
+                                } else {
4822
+                                    $selected = selected( $value, $val, false );
4823
+                                }
4824
+                                echo "<option value='$val' " . $selected . ">$label</option>";
4825
+                            }
4826
+                        }
4827
+                        ?>
4828 4828
 					</select>
4829 4829
 					<?php
4830
-					break;
4831
-				case "checkbox":
4832
-					?>
4830
+                    break;
4831
+                case "checkbox":
4832
+                    ?>
4833 4833
 					<input <?php echo $placeholder; ?> <?php checked( 1, $value, true ) ?> <?php echo $custom_attributes; ?> class="widefat" id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="checkbox" value="1">
4834 4834
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args );?><?php echo $this->widget_field_desc( $args ); ?></label>
4835 4835
 					<?php
4836
-					break;
4837
-				case "textarea":
4838
-					?>
4836
+                    break;
4837
+                case "textarea":
4838
+                    ?>
4839 4839
 					<label for="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>"><?php echo $this->widget_field_title( $args ); ?><?php echo $this->widget_field_desc( $args ); ?></label>
4840 4840
 					<textarea <?php echo $placeholder; ?> class="widefat" <?php echo $custom_attributes; ?> id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>"><?php echo esc_attr( $value ); ?></textarea>
4841 4841
 					<?php
4842 4842
 
4843
-					break;
4844
-				case "hidden":
4845
-					?>
4843
+                    break;
4844
+                case "hidden":
4845
+                    ?>
4846 4846
 					<input id="<?php echo esc_attr( $this->get_field_id( $args['name'] ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( $args['name'] ) ); ?>" type="hidden" value="<?php echo esc_attr( $value ); ?>">
4847 4847
 					<?php
4848
-					break;
4849
-				default:
4850
-					echo "No input type found!"; // @todo we need to add more input types.
4851
-			}
4852
-			// after wrapper
4853
-			?></p><?php
4854
-		}
4848
+                    break;
4849
+                default:
4850
+                    echo "No input type found!"; // @todo we need to add more input types.
4851
+            }
4852
+            // after wrapper
4853
+            ?></p><?php
4854
+        }
4855 4855
 
4856
-		public function get_widget_icon($icon = 'box-top', $title = ''){
4857
-			if($icon=='box-top'){
4858
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.048" height="9.017" fill="#555D66"></rect><rect x="16.265" y="5.498" width="1.023" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.186" width="8.964" height="2.482" fill="#272B2F"></rect><rect x="5.487" y="16.261" width="9.026" height="1.037" fill="#555D66"></rect></svg>';
4859
-			}elseif($icon=='box-right'){
4860
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.046" height="9.017" fill="#555D66"></rect><rect x="15.244" y="5.498" width="2.518" height="9.003" fill="#272B2F"></rect><rect x="5.518" y="2.719" width="8.964" height="0.954" fill="#555D66"></rect><rect x="5.487" y="16.308" width="9.026" height="0.99" fill="#555D66"></rect></svg>';
4861
-			}elseif($icon=='box-bottom'){
4862
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1" height="9.017" fill="#555D66"></rect><rect x="16.261" y="5.498" width="1.027" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.968" fill="#555D66"></rect><rect x="5.487" y="15.28" width="9.026" height="2.499" fill="#272B2F"></rect></svg>';
4863
-			}elseif($icon=='box-left'){
4864
-				return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.202" y="5.492" width="2.503" height="9.017" fill="#272B2F"></rect><rect x="16.276" y="5.498" width="1.012" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.966" fill="#555D66"></rect><rect x="5.487" y="16.303" width="9.026" height="0.995" fill="#555D66"></rect></svg>';
4865
-			}
4866
-		}
4856
+        public function get_widget_icon($icon = 'box-top', $title = ''){
4857
+            if($icon=='box-top'){
4858
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.048" height="9.017" fill="#555D66"></rect><rect x="16.265" y="5.498" width="1.023" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.186" width="8.964" height="2.482" fill="#272B2F"></rect><rect x="5.487" y="16.261" width="9.026" height="1.037" fill="#555D66"></rect></svg>';
4859
+            }elseif($icon=='box-right'){
4860
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1.046" height="9.017" fill="#555D66"></rect><rect x="15.244" y="5.498" width="2.518" height="9.003" fill="#272B2F"></rect><rect x="5.518" y="2.719" width="8.964" height="0.954" fill="#555D66"></rect><rect x="5.487" y="16.308" width="9.026" height="0.99" fill="#555D66"></rect></svg>';
4861
+            }elseif($icon=='box-bottom'){
4862
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.714" y="5.492" width="1" height="9.017" fill="#555D66"></rect><rect x="16.261" y="5.498" width="1.027" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.968" fill="#555D66"></rect><rect x="5.487" y="15.28" width="9.026" height="2.499" fill="#272B2F"></rect></svg>';
4863
+            }elseif($icon=='box-left'){
4864
+                return '<svg title="'.esc_attr($title).'" width="20px" height="20px" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" role="img" aria-hidden="true" focusable="false"><rect x="2.202" y="5.492" width="2.503" height="9.017" fill="#272B2F"></rect><rect x="16.276" y="5.498" width="1.012" height="9.003" fill="#555D66"></rect><rect x="5.518" y="2.719" width="8.964" height="0.966" fill="#555D66"></rect><rect x="5.487" y="16.303" width="9.026" height="0.995" fill="#555D66"></rect></svg>';
4865
+            }
4866
+        }
4867 4867
 
4868
-		/**
4869
-		 * Get the widget input description html.
4870
-		 *
4871
-		 * @param $args
4872
-		 *
4873
-		 * @return string
4874
-		 * @todo, need to make its own tooltip script
4875
-		 */
4876
-		public function widget_field_desc( $args ) {
4877
-
4878
-			$description = '';
4879
-			if ( isset( $args['desc'] ) && $args['desc'] ) {
4880
-				if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) {
4881
-					$description = $this->desc_tip( $args['desc'] );
4882
-				} else {
4883
-					$description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>';
4884
-				}
4885
-			}
4868
+        /**
4869
+         * Get the widget input description html.
4870
+         *
4871
+         * @param $args
4872
+         *
4873
+         * @return string
4874
+         * @todo, need to make its own tooltip script
4875
+         */
4876
+        public function widget_field_desc( $args ) {
4877
+
4878
+            $description = '';
4879
+            if ( isset( $args['desc'] ) && $args['desc'] ) {
4880
+                if ( isset( $args['desc_tip'] ) && $args['desc_tip'] ) {
4881
+                    $description = $this->desc_tip( $args['desc'] );
4882
+                } else {
4883
+                    $description = '<span class="description">' . wp_kses_post( $args['desc'] ) . '</span>';
4884
+                }
4885
+            }
4886 4886
 
4887
-			return $description;
4888
-		}
4887
+            return $description;
4888
+        }
4889 4889
 
4890
-		/**
4891
-		 * Get the widget input title html.
4892
-		 *
4893
-		 * @param $args
4894
-		 *
4895
-		 * @return string
4896
-		 */
4897
-		public function widget_field_title( $args ) {
4898
-			$title = '';
4899
-
4900
-			if ( isset( $args['title'] ) && $args['title'] ) {
4901
-				if ( ! empty( $args['device_type'] ) ) {
4902
-					$args['title'] .= ' (' . $args['device_type'] . ')'; // Append device type to title.
4903
-				}
4890
+        /**
4891
+         * Get the widget input title html.
4892
+         *
4893
+         * @param $args
4894
+         *
4895
+         * @return string
4896
+         */
4897
+        public function widget_field_title( $args ) {
4898
+            $title = '';
4904 4899
 
4905
-				if ( isset( $args['icon'] ) && $args['icon'] ) {
4906
-					$title = self::get_widget_icon( $args['icon'], $args['title']  );
4907
-				} else {
4908
-					$title = esc_attr( $args['title'] );
4909
-				}
4910
-			}
4900
+            if ( isset( $args['title'] ) && $args['title'] ) {
4901
+                if ( ! empty( $args['device_type'] ) ) {
4902
+                    $args['title'] .= ' (' . $args['device_type'] . ')'; // Append device type to title.
4903
+                }
4911 4904
 
4912
-			return $title;
4913
-		}
4905
+                if ( isset( $args['icon'] ) && $args['icon'] ) {
4906
+                    $title = self::get_widget_icon( $args['icon'], $args['title']  );
4907
+                } else {
4908
+                    $title = esc_attr( $args['title'] );
4909
+                }
4910
+            }
4914 4911
 
4915
-		/**
4916
-		 * Get the tool tip html.
4917
-		 *
4918
-		 * @param $tip
4919
-		 * @param bool $allow_html
4920
-		 *
4921
-		 * @return string
4922
-		 */
4923
-		function desc_tip( $tip, $allow_html = false ) {
4924
-			if ( $allow_html ) {
4925
-				$tip = $this->sanitize_tooltip( $tip );
4926
-			} else {
4927
-				$tip = esc_attr( $tip );
4928
-			}
4912
+            return $title;
4913
+        }
4929 4914
 
4930
-			return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
4931
-		}
4915
+        /**
4916
+         * Get the tool tip html.
4917
+         *
4918
+         * @param $tip
4919
+         * @param bool $allow_html
4920
+         *
4921
+         * @return string
4922
+         */
4923
+        function desc_tip( $tip, $allow_html = false ) {
4924
+            if ( $allow_html ) {
4925
+                $tip = $this->sanitize_tooltip( $tip );
4926
+            } else {
4927
+                $tip = esc_attr( $tip );
4928
+            }
4932 4929
 
4933
-		/**
4934
-		 * Sanitize a string destined to be a tooltip.
4935
-		 *
4936
-		 * @param string $var
4937
-		 *
4938
-		 * @return string
4939
-		 */
4940
-		public function sanitize_tooltip( $var ) {
4941
-			return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
4942
-				'br'     => array(),
4943
-				'em'     => array(),
4944
-				'strong' => array(),
4945
-				'small'  => array(),
4946
-				'span'   => array(),
4947
-				'ul'     => array(),
4948
-				'li'     => array(),
4949
-				'ol'     => array(),
4950
-				'p'      => array(),
4951
-			) ) );
4952
-		}
4930
+            return '<span class="gd-help-tip dashicons dashicons-editor-help" title="' . $tip . '"></span>';
4931
+        }
4953 4932
 
4954
-		/**
4955
-		 * Processing widget options on save
4956
-		 *
4957
-		 * @param array $new_instance The new options
4958
-		 * @param array $old_instance The previous options
4959
-		 *
4960
-		 * @return array
4961
-		 * @todo we should add some sanitation here.
4962
-		 */
4963
-		public function update( $new_instance, $old_instance ) {
4964
-
4965
-			//save the widget
4966
-			$instance = array_merge( (array) $old_instance, (array) $new_instance );
4967
-
4968
-			// set widget instance
4969
-			$this->instance = $instance;
4970
-
4971
-			if ( empty( $this->arguments ) ) {
4972
-				$this->get_arguments();
4973
-			}
4933
+        /**
4934
+         * Sanitize a string destined to be a tooltip.
4935
+         *
4936
+         * @param string $var
4937
+         *
4938
+         * @return string
4939
+         */
4940
+        public function sanitize_tooltip( $var ) {
4941
+            return htmlspecialchars( wp_kses( html_entity_decode( $var ), array(
4942
+                'br'     => array(),
4943
+                'em'     => array(),
4944
+                'strong' => array(),
4945
+                'small'  => array(),
4946
+                'span'   => array(),
4947
+                'ul'     => array(),
4948
+                'li'     => array(),
4949
+                'ol'     => array(),
4950
+                'p'      => array(),
4951
+            ) ) );
4952
+        }
4974 4953
 
4975
-			// check for checkboxes
4976
-			if ( ! empty( $this->arguments ) ) {
4977
-				foreach ( $this->arguments as $argument ) {
4978
-					if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) {
4979
-						$instance[ $argument['name'] ] = '0';
4980
-					}
4981
-				}
4982
-			}
4954
+        /**
4955
+         * Processing widget options on save
4956
+         *
4957
+         * @param array $new_instance The new options
4958
+         * @param array $old_instance The previous options
4959
+         *
4960
+         * @return array
4961
+         * @todo we should add some sanitation here.
4962
+         */
4963
+        public function update( $new_instance, $old_instance ) {
4983 4964
 
4984
-			return $instance;
4985
-		}
4965
+            //save the widget
4966
+            $instance = array_merge( (array) $old_instance, (array) $new_instance );
4986 4967
 
4987
-		/**
4988
-		 * Checks if the current call is a ajax call to get the block content.
4989
-		 *
4990
-		 * This can be used in your widget to return different content as the block content.
4991
-		 *
4992
-		 * @return bool
4993
-		 *@since 1.0.3
4994
-		 */
4995
-		public function is_block_content_call() {
4996
-			$result = false;
4997
-			if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
4998
-				$result = true;
4999
-			}
4968
+            // set widget instance
4969
+            $this->instance = $instance;
5000 4970
 
5001
-			return $result;
5002
-		}
4971
+            if ( empty( $this->arguments ) ) {
4972
+                $this->get_arguments();
4973
+            }
5003 4974
 
5004
-		/**
5005
-		 * Get an instance hash that will be unique to the type and settings.
5006
-		 *
5007
-		 * @return string
5008
-		 *@since 1.0.20
5009
-		 */
5010
-		public function get_instance_hash(){
5011
-			$instance_string = $this->base_id.serialize($this->instance);
5012
-			return hash('crc32b',$instance_string);
5013
-		}
4975
+            // check for checkboxes
4976
+            if ( ! empty( $this->arguments ) ) {
4977
+                foreach ( $this->arguments as $argument ) {
4978
+                    if ( isset( $argument['type'] ) && $argument['type'] == 'checkbox' && ! isset( $new_instance[ $argument['name'] ] ) ) {
4979
+                        $instance[ $argument['name'] ] = '0';
4980
+                    }
4981
+                }
4982
+            }
5014 4983
 
5015
-		/**
5016
-		 * Generate and return inline styles from CSS rules that will match the unique class of the instance.
5017
-		 *
5018
-		 * @param array $rules
5019
-		 *
5020
-		 * @return string
5021
-		 *@since 1.0.20
5022
-		 */
5023
-		public function get_instance_style($rules = array()){
5024
-			$css = '';
5025
-
5026
-			if(!empty($rules)){
5027
-				$rules = array_unique($rules);
5028
-				$instance_hash = $this->get_instance_hash();
5029
-				$css .= "<style>";
5030
-				foreach($rules as $rule){
5031
-					$css .= ".sdel-$instance_hash $rule";
5032
-				}
5033
-				$css .= "</style>";
5034
-			}
4984
+            return $instance;
4985
+        }
5035 4986
 
5036
-			return $css;
5037
-		}
4987
+        /**
4988
+         * Checks if the current call is a ajax call to get the block content.
4989
+         *
4990
+         * This can be used in your widget to return different content as the block content.
4991
+         *
4992
+         * @return bool
4993
+         *@since 1.0.3
4994
+         */
4995
+        public function is_block_content_call() {
4996
+            $result = false;
4997
+            if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'super_duper_output_shortcode' ) {
4998
+                $result = true;
4999
+            }
5000
+
5001
+            return $result;
5002
+        }
5038 5003
 
5039
-		/**
5040
-		 * Encode shortcodes tags.
5041
-		 *
5042
-		 * @param string $content Content to search for shortcode tags.
5043
-		 *
5004
+        /**
5005
+         * Get an instance hash that will be unique to the type and settings.
5006
+         *
5007
+         * @return string
5008
+         *@since 1.0.20
5009
+         */
5010
+        public function get_instance_hash(){
5011
+            $instance_string = $this->base_id.serialize($this->instance);
5012
+            return hash('crc32b',$instance_string);
5013
+        }
5014
+
5015
+        /**
5016
+         * Generate and return inline styles from CSS rules that will match the unique class of the instance.
5017
+         *
5018
+         * @param array $rules
5019
+         *
5020
+         * @return string
5021
+         *@since 1.0.20
5022
+         */
5023
+        public function get_instance_style($rules = array()){
5024
+            $css = '';
5025
+
5026
+            if(!empty($rules)){
5027
+                $rules = array_unique($rules);
5028
+                $instance_hash = $this->get_instance_hash();
5029
+                $css .= "<style>";
5030
+                foreach($rules as $rule){
5031
+                    $css .= ".sdel-$instance_hash $rule";
5032
+                }
5033
+                $css .= "</style>";
5034
+            }
5035
+
5036
+            return $css;
5037
+        }
5038
+
5039
+        /**
5040
+         * Encode shortcodes tags.
5041
+         *
5042
+         * @param string $content Content to search for shortcode tags.
5043
+         *
5044 5044
 *@return string Content with shortcode tags removed.
5045
-		 *@since 1.0.28
5046
-		 *
5047
-		 */
5048
-		public function encode_shortcodes( $content ) {
5049
-			// Avoids existing encoded tags.
5050
-			$trans   = array(
5051
-				'&#91;' => '&#091;',
5052
-				'&#93;' => '&#093;',
5053
-				'&amp;#91;' => '&#091;',
5054
-				'&amp;#93;' => '&#093;',
5055
-				'&lt;' => '&0lt;',
5056
-				'&gt;' => '&0gt;',
5057
-				'&amp;lt;' => '&0lt;',
5058
-				'&amp;gt;' => '&0gt;',
5059
-			);
5060
-
5061
-			$content = strtr( $content, $trans );
5062
-
5063
-			$trans   = array(
5064
-				'[' => '&#91;',
5065
-				']' => '&#93;',
5066
-				'<' => '&lt;',
5067
-				'>' => '&gt;',
5068
-				'"' => '&quot;',
5069
-				"'" => '&#39;',
5070
-			);
5071
-
5072
-			$content = strtr( $content, $trans );
5073
-
5074
-			return $content;
5075
-		}
5045
+         *@since 1.0.28
5046
+         *
5047
+         */
5048
+        public function encode_shortcodes( $content ) {
5049
+            // Avoids existing encoded tags.
5050
+            $trans   = array(
5051
+                '&#91;' => '&#091;',
5052
+                '&#93;' => '&#093;',
5053
+                '&amp;#91;' => '&#091;',
5054
+                '&amp;#93;' => '&#093;',
5055
+                '&lt;' => '&0lt;',
5056
+                '&gt;' => '&0gt;',
5057
+                '&amp;lt;' => '&0lt;',
5058
+                '&amp;gt;' => '&0gt;',
5059
+            );
5060
+
5061
+            $content = strtr( $content, $trans );
5062
+
5063
+            $trans   = array(
5064
+                '[' => '&#91;',
5065
+                ']' => '&#93;',
5066
+                '<' => '&lt;',
5067
+                '>' => '&gt;',
5068
+                '"' => '&quot;',
5069
+                "'" => '&#39;',
5070
+            );
5071
+
5072
+            $content = strtr( $content, $trans );
5073
+
5074
+            return $content;
5075
+        }
5076 5076
 
5077
-		/**
5078
-		 * Remove encoded shortcod tags.
5079
-		 *
5080
-		 * @param string $content Content to search for shortcode tags.
5081
-		 *
5077
+        /**
5078
+         * Remove encoded shortcod tags.
5079
+         *
5080
+         * @param string $content Content to search for shortcode tags.
5081
+         *
5082 5082
 *@return string Content with decoded shortcode tags.
5083
-		 *@since 1.0.28
5084
-		 *
5085
-		 */
5086
-		public function decode_shortcodes( $content ) {
5087
-			$trans   = array(
5088
-				'&#91;' => '[',
5089
-				'&#93;' => ']',
5090
-				'&amp;#91;' => '[',
5091
-				'&amp;#93;' => ']',
5092
-				'&lt;' => '<',
5093
-				'&gt;' => '>',
5094
-				'&amp;lt;' => '<',
5095
-				'&amp;gt;' => '>',
5096
-				'&quot;' => '"',
5097
-				'&apos;' => "'",
5098
-			);
5099
-
5100
-			$content = strtr( $content, $trans );
5101
-
5102
-			$trans   = array(
5103
-				'&#091;' => '&#91;',
5104
-				'&#093;' => '&#93;',
5105
-				'&amp;#091;' => '&#91;',
5106
-				'&amp;#093;' => '&#93;',
5107
-				'&0lt;' => '&lt;',
5108
-				'&0gt;' => '&gt;',
5109
-				'&amp;0lt;' => '&lt;',
5110
-				'&amp;0gt;' => '&gt;',
5111
-			);
5112
-
5113
-			$content = strtr( $content, $trans );
5114
-
5115
-			return $content;
5116
-		}
5117
-
5118
-		public function block_visibility_fields( $args ) {
5119
-			$value = ! empty( $args['value'] ) ? esc_attr( $args['value'] ) : '';
5120
-			$content = '<div class="bs-vc-rule-template d-none">';
5121
-				$content .= '<div class="p-3 pb-0 mb-3 border border-1 rounded-1 position-relative bs-vc-rule" data-bs-index="BSVCINDEX" >';
5122
-					$content .= '<div class="row">';
5123
-						$content .= '<div class="col-sm-12">';
5124
-							$content .= '<div class="bs-rule-action position-absolute top-0 end-0 p-2 zindex-5"><span class="text-danger c-pointer bs-vc-remove-rule" title="' . esc_attr__( 'Remove Rule', 'ayecode-connect' ) . '"><i class="fas fa-circle-minus fs-6"></i></span></div>';
5125
-							$content .= aui()->select(
5126
-								array(
5127
-									'id'          => 'bsvc_rule_BSVCINDEX',
5128
-									'name'        => 'bsvc_rule_BSVCINDEX',
5129
-									'label'       => __( 'Rule', 'ayecode-connect' ),
5130
-									'placeholder' => __( 'Select Rule...', 'ayecode-connect' ),
5131
-									'class'       => 'bsvc_rule form-select-sm no-select2 mw-100',
5132
-									'options'     => sd_visibility_rules_options(),
5133
-									'default'     => '',
5134
-									'value'       => '',
5135
-									'label_type'  => '',
5136
-									'select2'     => false,
5137
-									'input_group_left' => __( 'Rule:', 'ayecode-connect' ),
5138
-									'extra_attributes' => array(
5139
-										'data-minimum-results-for-search' => '-1'
5140
-									)
5141
-								)
5142
-							);
5143
-
5144
-						$content .= '</div>';
5145
-
5146
-						if ( class_exists( 'GeoDirectory' ) ) {
5147
-							$content .= '<div class="col-md-7 col-sm-12">';
5148
-
5149
-								$content .= aui()->select(
5150
-									array(
5151
-										'id'          => 'bsvc_gd_field_BSVCINDEX',
5152
-										'name'        => 'bsvc_gd_field_BSVCINDEX',
5153
-										'label'       => __( 'FIELD', 'ayecode-connect' ),
5154
-										'placeholder' => __( 'FIELD', 'ayecode-connect' ),
5155
-										'class'       => 'bsvc_gd_field form-select-sm no-select2 mw-100',
5156
-										'options'     => sd_visibility_gd_field_options(),
5157
-										'default'     => '',
5158
-										'value'       => '',
5159
-										'label_type'  => '',
5160
-										'select2'     => false,
5161
-										'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5162
-										'extra_attributes' => array(
5163
-											'data-minimum-results-for-search' => '-1'
5164
-										)
5165
-									)
5166
-								);
5167
-
5168
-							$content .= '</div>';
5169
-							$content .= '<div class="col-md-5 col-sm-12">';
5170
-
5171
-								$content .= aui()->select(
5172
-									array(
5173
-										'id'          => 'bsvc_gd_field_condition_BSVCINDEX',
5174
-										'name'        => 'bsvc_gd_field_condition_BSVCINDEX',
5175
-										'label'       => __( 'CONDITION', 'ayecode-connect' ),
5176
-										'placeholder' => __( 'CONDITION', 'ayecode-connect' ),
5177
-										'class'       => 'bsvc_gd_field_condition form-select-sm no-select2 mw-100',
5178
-										'options'     => sd_visibility_field_condition_options(),
5179
-										'default'     => '',
5180
-										'value'       => '',
5181
-										'label_type'  => '',
5182
-										'select2'     => false,
5183
-										'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5184
-										'extra_attributes' => array(
5185
-											'data-minimum-results-for-search' => '-1'
5186
-										)
5187
-									)
5188
-								);
5189
-
5190
-							$content .= '</div>';
5191
-							$content .= '<div class="col-sm-12">';
5192
-
5193
-								$content .= aui()->input(
5194
-									array(
5195
-										'type'            => 'text',
5196
-										'id'              => 'bsvc_gd_field_search_BSVCINDEX',
5197
-										'name'            => 'bsvc_gd_field_search_BSVCINDEX',
5198
-										'label'           => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5199
-										'class'           => 'bsvc_gd_field_search form-control-sm',
5200
-										'placeholder'     => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5201
-										'label_type'      => '',
5202
-										'value'           => '',
5203
-										'element_require' => '([%bsvc_rule_BSVCINDEX%]=="gd_field" && [%bsvc_gd_field_condition_BSVCINDEX%] && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_empty" && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_not_empty")'
5204
-									)
5205
-								);
5083
+         *@since 1.0.28
5084
+         *
5085
+         */
5086
+        public function decode_shortcodes( $content ) {
5087
+            $trans   = array(
5088
+                '&#91;' => '[',
5089
+                '&#93;' => ']',
5090
+                '&amp;#91;' => '[',
5091
+                '&amp;#93;' => ']',
5092
+                '&lt;' => '<',
5093
+                '&gt;' => '>',
5094
+                '&amp;lt;' => '<',
5095
+                '&amp;gt;' => '>',
5096
+                '&quot;' => '"',
5097
+                '&apos;' => "'",
5098
+            );
5099
+
5100
+            $content = strtr( $content, $trans );
5101
+
5102
+            $trans   = array(
5103
+                '&#091;' => '&#91;',
5104
+                '&#093;' => '&#93;',
5105
+                '&amp;#091;' => '&#91;',
5106
+                '&amp;#093;' => '&#93;',
5107
+                '&0lt;' => '&lt;',
5108
+                '&0gt;' => '&gt;',
5109
+                '&amp;0lt;' => '&lt;',
5110
+                '&amp;0gt;' => '&gt;',
5111
+            );
5112
+
5113
+            $content = strtr( $content, $trans );
5114
+
5115
+            return $content;
5116
+        }
5206 5117
 
5207
-							$content .= '</div>';
5208
-						}
5118
+        public function block_visibility_fields( $args ) {
5119
+            $value = ! empty( $args['value'] ) ? esc_attr( $args['value'] ) : '';
5120
+            $content = '<div class="bs-vc-rule-template d-none">';
5121
+                $content .= '<div class="p-3 pb-0 mb-3 border border-1 rounded-1 position-relative bs-vc-rule" data-bs-index="BSVCINDEX" >';
5122
+                    $content .= '<div class="row">';
5123
+                        $content .= '<div class="col-sm-12">';
5124
+                            $content .= '<div class="bs-rule-action position-absolute top-0 end-0 p-2 zindex-5"><span class="text-danger c-pointer bs-vc-remove-rule" title="' . esc_attr__( 'Remove Rule', 'ayecode-connect' ) . '"><i class="fas fa-circle-minus fs-6"></i></span></div>';
5125
+                            $content .= aui()->select(
5126
+                                array(
5127
+                                    'id'          => 'bsvc_rule_BSVCINDEX',
5128
+                                    'name'        => 'bsvc_rule_BSVCINDEX',
5129
+                                    'label'       => __( 'Rule', 'ayecode-connect' ),
5130
+                                    'placeholder' => __( 'Select Rule...', 'ayecode-connect' ),
5131
+                                    'class'       => 'bsvc_rule form-select-sm no-select2 mw-100',
5132
+                                    'options'     => sd_visibility_rules_options(),
5133
+                                    'default'     => '',
5134
+                                    'value'       => '',
5135
+                                    'label_type'  => '',
5136
+                                    'select2'     => false,
5137
+                                    'input_group_left' => __( 'Rule:', 'ayecode-connect' ),
5138
+                                    'extra_attributes' => array(
5139
+                                        'data-minimum-results-for-search' => '-1'
5140
+                                    )
5141
+                                )
5142
+                            );
5143
+
5144
+                        $content .= '</div>';
5145
+
5146
+                        if ( class_exists( 'GeoDirectory' ) ) {
5147
+                            $content .= '<div class="col-md-7 col-sm-12">';
5148
+
5149
+                                $content .= aui()->select(
5150
+                                    array(
5151
+                                        'id'          => 'bsvc_gd_field_BSVCINDEX',
5152
+                                        'name'        => 'bsvc_gd_field_BSVCINDEX',
5153
+                                        'label'       => __( 'FIELD', 'ayecode-connect' ),
5154
+                                        'placeholder' => __( 'FIELD', 'ayecode-connect' ),
5155
+                                        'class'       => 'bsvc_gd_field form-select-sm no-select2 mw-100',
5156
+                                        'options'     => sd_visibility_gd_field_options(),
5157
+                                        'default'     => '',
5158
+                                        'value'       => '',
5159
+                                        'label_type'  => '',
5160
+                                        'select2'     => false,
5161
+                                        'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5162
+                                        'extra_attributes' => array(
5163
+                                            'data-minimum-results-for-search' => '-1'
5164
+                                        )
5165
+                                    )
5166
+                                );
5167
+
5168
+                            $content .= '</div>';
5169
+                            $content .= '<div class="col-md-5 col-sm-12">';
5170
+
5171
+                                $content .= aui()->select(
5172
+                                    array(
5173
+                                        'id'          => 'bsvc_gd_field_condition_BSVCINDEX',
5174
+                                        'name'        => 'bsvc_gd_field_condition_BSVCINDEX',
5175
+                                        'label'       => __( 'CONDITION', 'ayecode-connect' ),
5176
+                                        'placeholder' => __( 'CONDITION', 'ayecode-connect' ),
5177
+                                        'class'       => 'bsvc_gd_field_condition form-select-sm no-select2 mw-100',
5178
+                                        'options'     => sd_visibility_field_condition_options(),
5179
+                                        'default'     => '',
5180
+                                        'value'       => '',
5181
+                                        'label_type'  => '',
5182
+                                        'select2'     => false,
5183
+                                        'element_require'  => '[%bsvc_rule_BSVCINDEX%]=="gd_field"',
5184
+                                        'extra_attributes' => array(
5185
+                                            'data-minimum-results-for-search' => '-1'
5186
+                                        )
5187
+                                    )
5188
+                                );
5189
+
5190
+                            $content .= '</div>';
5191
+                            $content .= '<div class="col-sm-12">';
5192
+
5193
+                                $content .= aui()->input(
5194
+                                    array(
5195
+                                        'type'            => 'text',
5196
+                                        'id'              => 'bsvc_gd_field_search_BSVCINDEX',
5197
+                                        'name'            => 'bsvc_gd_field_search_BSVCINDEX',
5198
+                                        'label'           => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5199
+                                        'class'           => 'bsvc_gd_field_search form-control-sm',
5200
+                                        'placeholder'     => __( 'VALUE TO MATCH', 'ayecode-connect' ),
5201
+                                        'label_type'      => '',
5202
+                                        'value'           => '',
5203
+                                        'element_require' => '([%bsvc_rule_BSVCINDEX%]=="gd_field" && [%bsvc_gd_field_condition_BSVCINDEX%] && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_empty" && [%bsvc_gd_field_condition_BSVCINDEX%]!="is_not_empty")'
5204
+                                    )
5205
+                                );
5206
+
5207
+                            $content .= '</div>';
5208
+                        }
5209 5209
 
5210 5210
                         $content .= apply_filters( 'sd_block_visibility_fields', '', $args );
5211 5211
 
5212
-					$content .= '</div>';
5213
-
5214
-					$content .= '<div class="row aui-conditional-field" data-element-require="jQuery(form).find(\'[name=bsvc_rule_BSVCINDEX]\').val()==\'user_roles\'" data-argument="bsvc_user_roles_BSVCINDEX_1"><label for="bsvc_user_roles_BSVCINDEX_1" class="form-label mb-3">' . __( 'Select User Roles:', 'ayecode-connect' ) . '</label>';
5215
-						$role_options = sd_user_roles_options();
5216
-
5217
-						$role_option_i = 0;
5218
-						foreach ( $role_options as $role_option_key => $role_option_name ) {
5219
-							$role_option_i++;
5220
-
5221
-							$content .= '<div class="col-sm-6">';
5222
-							$content .= aui()->input(
5223
-								array(
5224
-									'id'               => 'bsvc_user_roles_BSVCINDEX_' . $role_option_i,
5225
-									'name'             => 'bsvc_user_roles_BSVCINDEX[]',
5226
-									'type'             => 'checkbox',
5227
-									'label'            => $role_option_name,
5228
-									'label_type'       => 'hidden',
5229
-									'class'            => 'bsvc_user_roles',
5230
-									'value'            => $role_option_key,
5231
-									'switch'           => 'md',
5232
-									'no_wrap'          => true
5233
-								)
5234
-							);
5235
-							$content .= '</div>';
5236
-						}
5237
-					$content .= '</div>';
5238
-					$content .= '<div class="bs-vc-sep-wrap text-center position-absolute top-0 mt-n3"><div class="bs-vc-sep-cond d-inline-block badge text-dark bg-gray mt-1">' . esc_html__( 'AND', 'ayecode-connect' ) . '</div></div>';
5239
-				$content .= '</div>';
5240
-			$content .= '</div>';
5241
-			$content .= '<form id="bs-vc-modal-form" class="bs-vc-modal-form">';
5242
-			$content .= '<div class="bs-vc-rule-sets"></div>';
5243
-			$content .= '<div class="row"><div class="col-sm-12 text-center pt-1 pb-4"><button type="button" class="btn btn-sm btn-primary d-block w-100 bs-vc-add-rule"><i class="fas fa-plus"></i> ' . __( 'Add Rule', 'ayecode-connect' ) . '</button></div></div>';
5244
-			$content .= '<div class="row"><div class="col-md-6 col-sm-12">';
5245
-			$content .= aui()->select(
5246
-				array(
5247
-					'id'          => 'bsvc_output',
5248
-					'name'        => 'bsvc_output',
5249
-					'label'       => __( 'What should happen if rules met.', 'ayecode-connect' ),
5250
-					'placeholder' => __( 'Show Block', 'ayecode-connect' ),
5251
-					'class'       => 'bsvc_output form-select-sm no-select2 mw-100',
5252
-					'options'     => sd_visibility_output_options(),
5253
-					'default'     => '',
5254
-					'value'       => '',
5255
-					'label_type'  => 'top',
5256
-					'select2'     => false,
5257
-					'extra_attributes' => array(
5258
-						'data-minimum-results-for-search' => '-1'
5259
-					)
5260
-				)
5261
-			);
5262
-
5263
-			$content .= '</div><div class="col-md-6 col-sm-12">';
5264
-
5265
-			$content .= aui()->select(
5266
-				array(
5267
-					'id'              => 'bsvc_page',
5268
-					'name'            => 'bsvc_page',
5269
-					'label'           => __( 'Page Content', 'ayecode-connect' ),
5270
-					'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5271
-					'class'           => 'bsvc_page form-select-sm no-select2 mw-100',
5272
-					'options'         => sd_template_page_options(),
5273
-					'default'         => '',
5274
-					'value'           => '',
5275
-					'label_type'      => 'top',
5276
-					'select2'         => false,
5277
-					'element_require' => '[%bsvc_output%]=="page"'
5278
-				)
5279
-			);
5280
-
5281
-			$content .= aui()->select(
5282
-				array(
5283
-					'id'          => 'bsvc_tmpl_part',
5284
-					'name'        => 'bsvc_tmpl_part',
5285
-					'label'       => __( 'Template Part', 'ayecode-connect' ),
5286
-					'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5287
-					'class'       => 'bsvc_tmpl_part form-select-sm no-select2 mw-100',
5288
-					'options'     => sd_template_part_options(),
5289
-					'default'     => '',
5290
-					'value'       => '',
5291
-					'label_type'  => 'top',
5292
-					'select2'     => false,
5293
-					'element_require'  => '[%bsvc_output%]=="template_part"',
5294
-					'extra_attributes' => array(
5295
-						'data-minimum-results-for-search' => '-1'
5296
-					)
5297
-				)
5298
-			);
5299
-
5300
-			$content .= aui()->select(
5301
-				array(
5302
-					'id'               => 'bsvc_message_type',
5303
-					'name'             => 'bsvc_message_type',
5304
-					'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5305
-					'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5306
-					'class'            => 'bsvc_message_type form-select-sm no-select2 mw-100',
5307
-					'options'          => sd_aui_colors(),
5308
-					'default'          => '',
5309
-					'value'            => '',
5310
-					'label_type'       => 'top',
5311
-					'select2'          => false,
5312
-					'element_require'  => '[%bsvc_output%]=="message"',
5313
-					'extra_attributes' => array(
5314
-						'data-minimum-results-for-search' => '-1'
5315
-					)
5316
-				)
5317
-			);
5318
-
5319
-			$content .= '</div><div class="col-sm-12">';
5320
-
5321
-			$content .= aui()->input(
5322
-				array(
5323
-					'type'            => 'text',
5324
-					'id'              => 'bsvc_message',
5325
-					'name'            => 'bsvc_message',
5326
-					'label'           => '',
5327
-					'class'           => 'bsvc_message form-control-sm mb-3',
5328
-					'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5329
-					'label_type'      => '',
5330
-					'value'           => '',
5331
-					'form_group_class' => ' ',
5332
-					'element_require' => '[%bsvc_output%]=="message"',
5333
-				)
5334
-			);
5335
-
5336
-			$content .= '</div></div><div class="row"><div class="col col-12"><div class="pt-3 mt-1 border-top"></div></div><div class="col-md-6 col-sm-12">';
5337
-			$content .= aui()->select(
5338
-				array(
5339
-					'id'          => 'bsvc_output_n',
5340
-					'name'        => 'bsvc_output_n',
5341
-					'label'       => __( 'What should happen if rules NOT met.', 'ayecode-connect' ),
5342
-					'placeholder' => __( 'Show Block', 'ayecode-connect' ),
5343
-					'class'       => 'bsvc_output_n form-select-sm no-select2 mw-100',
5344
-					'options'     => sd_visibility_output_options(),
5345
-					'default'     => '',
5346
-					'value'       => '',
5347
-					'label_type'  => 'top',
5348
-					'select2'     => false,
5349
-					'extra_attributes' => array(
5350
-						'data-minimum-results-for-search' => '-1'
5351
-					)
5352
-				)
5353
-			);
5354
-
5355
-			$content .= '</div><div class="col-md-6 col-sm-12">';
5356
-
5357
-			$content .= aui()->select(
5358
-				array(
5359
-					'id'              => 'bsvc_page_n',
5360
-					'name'            => 'bsvc_page_n',
5361
-					'label'           => __( 'Page Content', 'ayecode-connect' ),
5362
-					'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5363
-					'class'           => 'bsvc_page_n form-select-sm no-select2 mw-100',
5364
-					'options'         => sd_template_page_options(),
5365
-					'default'         => '',
5366
-					'value'           => '',
5367
-					'label_type'      => 'top',
5368
-					'select2'         => false,
5369
-					'element_require' => '[%bsvc_output_n%]=="page"'
5370
-				)
5371
-			);
5372
-
5373
-			$content .= aui()->select(
5374
-				array(
5375
-					'id'          => 'bsvc_tmpl_part_n',
5376
-					'name'        => 'bsvc_tmpl_part_n',
5377
-					'label'       => __( 'Template Part', 'ayecode-connect' ),
5378
-					'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5379
-					'class'       => 'bsvc_tmpl_part_n form-select-sm no-select2 mw-100',
5380
-					'options'     => sd_template_part_options(),
5381
-					'default'     => '',
5382
-					'value'       => '',
5383
-					'label_type'  => 'top',
5384
-					'select2'     => false,
5385
-					'element_require'  => '[%bsvc_output_n%]=="template_part"',
5386
-					'extra_attributes' => array(
5387
-						'data-minimum-results-for-search' => '-1'
5388
-					)
5389
-				)
5390
-			);
5391
-
5392
-			$content .= aui()->select(
5393
-				array(
5394
-					'id'               => 'bsvc_message_type_n',
5395
-					'name'             => 'bsvc_message_type_n',
5396
-					'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5397
-					'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5398
-					'class'            => 'bsvc_message_type_n form-select-sm no-select2 mw-100',
5399
-					'options'          => sd_aui_colors(),
5400
-					'default'          => '',
5401
-					'value'            => '',
5402
-					'label_type'       => 'top',
5403
-					'select2'          => false,
5404
-					'element_require'  => '[%bsvc_output_n%]=="message"',
5405
-					'extra_attributes' => array(
5406
-						'data-minimum-results-for-search' => '-1'
5407
-					)
5408
-				)
5409
-			);
5410
-
5411
-			$content .= '</div><div class="col-sm-12">';
5412
-
5413
-			$content .= aui()->input(
5414
-				array(
5415
-					'type'            => 'text',
5416
-					'id'              => 'bsvc_message_n',
5417
-					'name'            => 'bsvc_message_n',
5418
-					'label'           => '',
5419
-					'class'           => 'bsvc_message_n form-control-sm',
5420
-					'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5421
-					'label_type'      => '',
5422
-					'value'           => '',
5423
-					'form_group_class' => ' ',
5424
-					'element_require' => '[%bsvc_output_n%]=="message"',
5425
-				)
5426
-			);
5427
-
5428
-			$content .= '</div></div></form><input type="hidden" id="bsvc_raw_value" name="bsvc_raw_value" value="' . $value . '">';
5429
-
5430
-			return $content;
5431
-		}
5212
+                    $content .= '</div>';
5213
+
5214
+                    $content .= '<div class="row aui-conditional-field" data-element-require="jQuery(form).find(\'[name=bsvc_rule_BSVCINDEX]\').val()==\'user_roles\'" data-argument="bsvc_user_roles_BSVCINDEX_1"><label for="bsvc_user_roles_BSVCINDEX_1" class="form-label mb-3">' . __( 'Select User Roles:', 'ayecode-connect' ) . '</label>';
5215
+                        $role_options = sd_user_roles_options();
5216
+
5217
+                        $role_option_i = 0;
5218
+                        foreach ( $role_options as $role_option_key => $role_option_name ) {
5219
+                            $role_option_i++;
5220
+
5221
+                            $content .= '<div class="col-sm-6">';
5222
+                            $content .= aui()->input(
5223
+                                array(
5224
+                                    'id'               => 'bsvc_user_roles_BSVCINDEX_' . $role_option_i,
5225
+                                    'name'             => 'bsvc_user_roles_BSVCINDEX[]',
5226
+                                    'type'             => 'checkbox',
5227
+                                    'label'            => $role_option_name,
5228
+                                    'label_type'       => 'hidden',
5229
+                                    'class'            => 'bsvc_user_roles',
5230
+                                    'value'            => $role_option_key,
5231
+                                    'switch'           => 'md',
5232
+                                    'no_wrap'          => true
5233
+                                )
5234
+                            );
5235
+                            $content .= '</div>';
5236
+                        }
5237
+                    $content .= '</div>';
5238
+                    $content .= '<div class="bs-vc-sep-wrap text-center position-absolute top-0 mt-n3"><div class="bs-vc-sep-cond d-inline-block badge text-dark bg-gray mt-1">' . esc_html__( 'AND', 'ayecode-connect' ) . '</div></div>';
5239
+                $content .= '</div>';
5240
+            $content .= '</div>';
5241
+            $content .= '<form id="bs-vc-modal-form" class="bs-vc-modal-form">';
5242
+            $content .= '<div class="bs-vc-rule-sets"></div>';
5243
+            $content .= '<div class="row"><div class="col-sm-12 text-center pt-1 pb-4"><button type="button" class="btn btn-sm btn-primary d-block w-100 bs-vc-add-rule"><i class="fas fa-plus"></i> ' . __( 'Add Rule', 'ayecode-connect' ) . '</button></div></div>';
5244
+            $content .= '<div class="row"><div class="col-md-6 col-sm-12">';
5245
+            $content .= aui()->select(
5246
+                array(
5247
+                    'id'          => 'bsvc_output',
5248
+                    'name'        => 'bsvc_output',
5249
+                    'label'       => __( 'What should happen if rules met.', 'ayecode-connect' ),
5250
+                    'placeholder' => __( 'Show Block', 'ayecode-connect' ),
5251
+                    'class'       => 'bsvc_output form-select-sm no-select2 mw-100',
5252
+                    'options'     => sd_visibility_output_options(),
5253
+                    'default'     => '',
5254
+                    'value'       => '',
5255
+                    'label_type'  => 'top',
5256
+                    'select2'     => false,
5257
+                    'extra_attributes' => array(
5258
+                        'data-minimum-results-for-search' => '-1'
5259
+                    )
5260
+                )
5261
+            );
5262
+
5263
+            $content .= '</div><div class="col-md-6 col-sm-12">';
5264
+
5265
+            $content .= aui()->select(
5266
+                array(
5267
+                    'id'              => 'bsvc_page',
5268
+                    'name'            => 'bsvc_page',
5269
+                    'label'           => __( 'Page Content', 'ayecode-connect' ),
5270
+                    'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5271
+                    'class'           => 'bsvc_page form-select-sm no-select2 mw-100',
5272
+                    'options'         => sd_template_page_options(),
5273
+                    'default'         => '',
5274
+                    'value'           => '',
5275
+                    'label_type'      => 'top',
5276
+                    'select2'         => false,
5277
+                    'element_require' => '[%bsvc_output%]=="page"'
5278
+                )
5279
+            );
5280
+
5281
+            $content .= aui()->select(
5282
+                array(
5283
+                    'id'          => 'bsvc_tmpl_part',
5284
+                    'name'        => 'bsvc_tmpl_part',
5285
+                    'label'       => __( 'Template Part', 'ayecode-connect' ),
5286
+                    'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5287
+                    'class'       => 'bsvc_tmpl_part form-select-sm no-select2 mw-100',
5288
+                    'options'     => sd_template_part_options(),
5289
+                    'default'     => '',
5290
+                    'value'       => '',
5291
+                    'label_type'  => 'top',
5292
+                    'select2'     => false,
5293
+                    'element_require'  => '[%bsvc_output%]=="template_part"',
5294
+                    'extra_attributes' => array(
5295
+                        'data-minimum-results-for-search' => '-1'
5296
+                    )
5297
+                )
5298
+            );
5299
+
5300
+            $content .= aui()->select(
5301
+                array(
5302
+                    'id'               => 'bsvc_message_type',
5303
+                    'name'             => 'bsvc_message_type',
5304
+                    'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5305
+                    'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5306
+                    'class'            => 'bsvc_message_type form-select-sm no-select2 mw-100',
5307
+                    'options'          => sd_aui_colors(),
5308
+                    'default'          => '',
5309
+                    'value'            => '',
5310
+                    'label_type'       => 'top',
5311
+                    'select2'          => false,
5312
+                    'element_require'  => '[%bsvc_output%]=="message"',
5313
+                    'extra_attributes' => array(
5314
+                        'data-minimum-results-for-search' => '-1'
5315
+                    )
5316
+                )
5317
+            );
5318
+
5319
+            $content .= '</div><div class="col-sm-12">';
5320
+
5321
+            $content .= aui()->input(
5322
+                array(
5323
+                    'type'            => 'text',
5324
+                    'id'              => 'bsvc_message',
5325
+                    'name'            => 'bsvc_message',
5326
+                    'label'           => '',
5327
+                    'class'           => 'bsvc_message form-control-sm mb-3',
5328
+                    'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5329
+                    'label_type'      => '',
5330
+                    'value'           => '',
5331
+                    'form_group_class' => ' ',
5332
+                    'element_require' => '[%bsvc_output%]=="message"',
5333
+                )
5334
+            );
5335
+
5336
+            $content .= '</div></div><div class="row"><div class="col col-12"><div class="pt-3 mt-1 border-top"></div></div><div class="col-md-6 col-sm-12">';
5337
+            $content .= aui()->select(
5338
+                array(
5339
+                    'id'          => 'bsvc_output_n',
5340
+                    'name'        => 'bsvc_output_n',
5341
+                    'label'       => __( 'What should happen if rules NOT met.', 'ayecode-connect' ),
5342
+                    'placeholder' => __( 'Show Block', 'ayecode-connect' ),
5343
+                    'class'       => 'bsvc_output_n form-select-sm no-select2 mw-100',
5344
+                    'options'     => sd_visibility_output_options(),
5345
+                    'default'     => '',
5346
+                    'value'       => '',
5347
+                    'label_type'  => 'top',
5348
+                    'select2'     => false,
5349
+                    'extra_attributes' => array(
5350
+                        'data-minimum-results-for-search' => '-1'
5351
+                    )
5352
+                )
5353
+            );
5354
+
5355
+            $content .= '</div><div class="col-md-6 col-sm-12">';
5356
+
5357
+            $content .= aui()->select(
5358
+                array(
5359
+                    'id'              => 'bsvc_page_n',
5360
+                    'name'            => 'bsvc_page_n',
5361
+                    'label'           => __( 'Page Content', 'ayecode-connect' ),
5362
+                    'placeholder'     => __( 'Select Page ID...', 'ayecode-connect' ),
5363
+                    'class'           => 'bsvc_page_n form-select-sm no-select2 mw-100',
5364
+                    'options'         => sd_template_page_options(),
5365
+                    'default'         => '',
5366
+                    'value'           => '',
5367
+                    'label_type'      => 'top',
5368
+                    'select2'         => false,
5369
+                    'element_require' => '[%bsvc_output_n%]=="page"'
5370
+                )
5371
+            );
5372
+
5373
+            $content .= aui()->select(
5374
+                array(
5375
+                    'id'          => 'bsvc_tmpl_part_n',
5376
+                    'name'        => 'bsvc_tmpl_part_n',
5377
+                    'label'       => __( 'Template Part', 'ayecode-connect' ),
5378
+                    'placeholder' => __( 'Select Template Part...', 'ayecode-connect' ),
5379
+                    'class'       => 'bsvc_tmpl_part_n form-select-sm no-select2 mw-100',
5380
+                    'options'     => sd_template_part_options(),
5381
+                    'default'     => '',
5382
+                    'value'       => '',
5383
+                    'label_type'  => 'top',
5384
+                    'select2'     => false,
5385
+                    'element_require'  => '[%bsvc_output_n%]=="template_part"',
5386
+                    'extra_attributes' => array(
5387
+                        'data-minimum-results-for-search' => '-1'
5388
+                    )
5389
+                )
5390
+            );
5391
+
5392
+            $content .= aui()->select(
5393
+                array(
5394
+                    'id'               => 'bsvc_message_type_n',
5395
+                    'name'             => 'bsvc_message_type_n',
5396
+                    'label'            => __( 'Custom Message Type', 'ayecode-connect' ),
5397
+                    'placeholder'      => __( 'Default (none)', 'ayecode-connect' ),
5398
+                    'class'            => 'bsvc_message_type_n form-select-sm no-select2 mw-100',
5399
+                    'options'          => sd_aui_colors(),
5400
+                    'default'          => '',
5401
+                    'value'            => '',
5402
+                    'label_type'       => 'top',
5403
+                    'select2'          => false,
5404
+                    'element_require'  => '[%bsvc_output_n%]=="message"',
5405
+                    'extra_attributes' => array(
5406
+                        'data-minimum-results-for-search' => '-1'
5407
+                    )
5408
+                )
5409
+            );
5410
+
5411
+            $content .= '</div><div class="col-sm-12">';
5412
+
5413
+            $content .= aui()->input(
5414
+                array(
5415
+                    'type'            => 'text',
5416
+                    'id'              => 'bsvc_message_n',
5417
+                    'name'            => 'bsvc_message_n',
5418
+                    'label'           => '',
5419
+                    'class'           => 'bsvc_message_n form-control-sm',
5420
+                    'placeholder'     => __( 'CUSTOM MESSAGE TO SHOW', 'ayecode-connect' ),
5421
+                    'label_type'      => '',
5422
+                    'value'           => '',
5423
+                    'form_group_class' => ' ',
5424
+                    'element_require' => '[%bsvc_output_n%]=="message"',
5425
+                )
5426
+            );
5427
+
5428
+            $content .= '</div></div></form><input type="hidden" id="bsvc_raw_value" name="bsvc_raw_value" value="' . $value . '">';
5429
+
5430
+            return $content;
5431
+        }
5432 5432
 
5433
-		/**
5434
-		 * Handle media_buttons hook.
5435
-		 *
5436
-		 * @since 1.2.7
5437
-		 */
5438
-		public function wp_media_buttons() {
5439
-			global $shortcode_insert_button_once;
5440
-
5441
-			// Fix conflicts with UpSolution Core in header template edit element.
5442
-			if ( defined( 'US_CORE_DIR' ) && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] == 'us_ajax_hb_get_ebuilder_html' ) {
5443
-				$shortcode_insert_button_once = true;
5444
-			}
5445
-		}
5446
-	}
5433
+        /**
5434
+         * Handle media_buttons hook.
5435
+         *
5436
+         * @since 1.2.7
5437
+         */
5438
+        public function wp_media_buttons() {
5439
+            global $shortcode_insert_button_once;
5440
+
5441
+            // Fix conflicts with UpSolution Core in header template edit element.
5442
+            if ( defined( 'US_CORE_DIR' ) && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] == 'us_ajax_hb_get_ebuilder_html' ) {
5443
+                $shortcode_insert_button_once = true;
5444
+            }
5445
+        }
5446
+    }
5447 5447
 }
Please login to merge, or discard this patch.
includes/class-wpinv.php 1 patch
Indentation   +615 added lines, -615 removed lines patch added patch discarded remove patch
@@ -14,619 +14,619 @@
 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
-	}
99
-
100
-	 /**
101
-	 * Define plugin constants.
102
-	 */
103
-	public function define_constants() {
104
-		define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
105
-		define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
106
-		$this->version = WPINV_VERSION;
107
-	}
108
-
109
-	/**
110
-	 * Hook into actions and filters.
111
-	 *
112
-	 * @since 1.0.19
113
-	 */
114
-	protected function init_hooks() {
115
-		/* Internationalize the text strings used. */
116
-		add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
117
-
118
-		// Init the plugin after WordPress inits.
119
-		add_action( 'init', array( $this, 'init' ), 1 );
120
-		add_action( 'init', array( $this, 'maybe_process_ipn' ), 100 );
121
-		add_action( 'init', array( $this, 'wpinv_actions' ) );
122
-		add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
123
-		add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 11 );
124
-		add_action( 'wp_footer', array( $this, 'wp_footer' ) );
125
-		add_action( 'wp_head', array( $this, 'wp_head' ) );
126
-		add_action( 'widgets_init', array( $this, 'register_widgets' ) );
127
-		add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
128
-		add_filter( 'the_seo_framework_sitemap_supported_post_types', array( $this, 'exclude_invoicing_post_types' ) );
129
-		add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
130
-
131
-		add_filter( 'query_vars', array( $this, 'custom_query_vars' ) );
132
-		add_action( 'init', array( $this, 'add_rewrite_rule' ), 10, 0 );
133
-		add_action( 'pre_get_posts', array( $this, 'maybe_process_new_ipn' ), 1 );
134
-
135
-		// Fires after registering actions.
136
-		do_action( 'wpinv_actions', $this );
137
-		do_action( 'getpaid_actions', $this );
138
-	}
139
-
140
-	public function plugins_loaded() {
141
-		/* Internationalize the text strings used. */
142
-		$this->load_textdomain();
143
-
144
-		do_action( 'wpinv_loaded' );
145
-
146
-		// Fix oxygen page builder conflict
147
-		if ( function_exists( 'ct_css_output' ) ) {
148
-			wpinv_oxygen_fix_conflict();
149
-		}
150
-	}
151
-
152
-	/**
153
-	 * Load Localisation files.
154
-	 *
155
-	 * Note: the first-loaded translation file overrides any following ones if the same translation is present.
156
-	 *
157
-	 * Locales found in:
158
-	 *      - WP_LANG_DIR/plugins/invoicing-LOCALE.mo
159
-	 *      - WP_PLUGIN_DIR/invoicing/languages/invoicing-LOCALE.mo
160
-	 *
161
-	 * @since 1.0.0
162
-	 */
163
-	public function load_textdomain() {
164
-		// Determines the current locale.
165
-		if ( function_exists( 'determine_locale' ) ) {
166
-			$locale = determine_locale();
167
-		} else if ( function_exists( 'get_user_locale' ) ) {
168
-			$locale = get_user_locale();
169
-		} else {
170
-			$locale = get_locale();
171
-		}
172
-
173
-		/**
174
-		 * Filter the locale to use for translations.
175
-		 */
176
-		$locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
177
-
178
-		unload_textdomain( 'invoicing', true );
179
-		load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
180
-		load_plugin_textdomain( 'invoicing', false, plugin_basename( dirname( WPINV_PLUGIN_FILE ) ) . '/languages/' );
181
-	}
182
-
183
-	/**
184
-	 * Include required core files used in admin and on the frontend.
185
-	 */
186
-	public function includes() {
187
-		// Start with the settings.
188
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php';
189
-
190
-		// Packages/libraries.
191
-		require_once WPINV_PLUGIN_DIR . 'vendor/autoload.php';
192
-		require_once WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php';
193
-
194
-		// Load functions.
195
-		require_once WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php';
196
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php';
197
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php';
198
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php';
199
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php';
200
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php';
201
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php';
202
-		require_once WPINV_PLUGIN_DIR . 'includes/invoice-functions.php';
203
-		require_once WPINV_PLUGIN_DIR . 'includes/subscription-functions.php';
204
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php';
205
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php';
206
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php';
207
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php';
208
-		require_once WPINV_PLUGIN_DIR . 'includes/user-functions.php';
209
-		require_once WPINV_PLUGIN_DIR . 'includes/error-functions.php';
210
-
211
-		// Register autoloader.
212
-		try {
213
-			spl_autoload_register( array( $this, 'autoload' ), true );
214
-		} catch ( Exception $e ) {
215
-			wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
216
-		}
217
-
218
-		require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php';
219
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php';
220
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php';
221
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php';
222
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php';
223
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php';
224
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php';
225
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php';
226
-		require_once WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php';
227
-		require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php';
228
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php';
229
-		require_once WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php';
230
-		require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php';
231
-		require_once WPINV_PLUGIN_DIR . 'widgets/checkout.php';
232
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-history.php';
233
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php';
234
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php';
235
-		require_once WPINV_PLUGIN_DIR . 'widgets/subscriptions.php';
236
-		require_once WPINV_PLUGIN_DIR . 'widgets/buy-item.php';
237
-		require_once WPINV_PLUGIN_DIR . 'widgets/getpaid.php';
238
-		require_once WPINV_PLUGIN_DIR . 'widgets/invoice.php';
239
-		require_once WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php';
240
-
241
-		if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
242
-			GetPaid_Post_Types_Admin::init();
243
-
244
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php';
245
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php';
246
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php';
247
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php';
248
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php';
249
-			require_once WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php';
250
-			// load the user class only on the users.php page
251
-			global $pagenow;
252
-			if ( $pagenow == 'users.php' ) {
253
-				new WPInv_Admin_Users();
254
-			}
255
-		}
256
-
257
-		// Register cli commands
258
-		if ( defined( 'WP_CLI' ) && WP_CLI ) {
259
-			require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php';
260
-			WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
261
-		}
262
-	}
263
-
264
-	/**
265
-	 * Class autoloader
266
-	 *
267
-	 * @param       string $class_name The name of the class to load.
268
-	 * @access      public
269
-	 * @since       1.0.19
270
-	 * @return      void
271
-	 */
272
-	public function autoload( $class_name ) {
273
-		// Normalize the class name...
274
-		$class_name  = strtolower( $class_name );
275
-
276
-		// ... and make sure it is our class.
277
-		if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
278
-			return;
279
-		}
280
-
281
-		// Next, prepare the file name from the class.
282
-		$file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
283
-
284
-		// Base path of the classes.
285
-		$plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
286
-
287
-		// And an array of possible locations in order of importance.
288
-		$locations = array(
289
-			"$plugin_path/includes",
290
-			"$plugin_path/includes/data-stores",
291
-			"$plugin_path/includes/gateways",
292
-			"$plugin_path/includes/payments",
293
-			"$plugin_path/includes/geolocation",
294
-			"$plugin_path/includes/reports",
295
-			"$plugin_path/includes/api",
296
-			"$plugin_path/includes/admin",
297
-			"$plugin_path/includes/admin/meta-boxes",
298
-		);
299
-
300
-		foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
301
-			if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
302
-				include trailingslashit( $location ) . $file_name;
303
-				break;
304
-			}
305
-		}
306
-	}
307
-
308
-	/**
309
-	 * Inits hooks etc.
310
-	 */
311
-	public function init() {
312
-		// Fires before getpaid inits.
313
-		do_action( 'before_getpaid_init', $this );
314
-
315
-		// Maybe upgrade.
316
-		$this->maybe_upgrade_database();
317
-
318
-		// Load default gateways.
319
-		$gateways = apply_filters(
320
-			'getpaid_default_gateways',
321
-			array(
322
-				'manual'        => 'GetPaid_Manual_Gateway',
323
-				'paypal'        => 'GetPaid_Paypal_Gateway',
324
-				'worldpay'      => 'GetPaid_Worldpay_Gateway',
325
-				'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
326
-				'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
327
-			)
328
-		);
329
-
330
-		foreach ( $gateways as $id => $class ) {
331
-			$this->gateways[ $id ] = new $class();
332
-		}
333
-
334
-		if ( 'yes' != get_option( 'wpinv_renamed_gateways' ) ) {
335
-			GetPaid_Installer::rename_gateways_label();
336
-			update_option( 'wpinv_renamed_gateways', 'yes' );
337
-		}
338
-
339
-		// Fires after getpaid inits.
340
-		do_action( 'getpaid_init', $this );
341
-	}
342
-
343
-	/**
344
-	 * Checks if this is an IPN request and processes it.
345
-	 */
346
-	public function maybe_process_ipn() {
347
-		// Ensure that this is an IPN request.
348
-		if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
349
-			return;
350
-		}
351
-
352
-		$gateway = sanitize_text_field( $_GET['wpi-gateway'] );
353
-
354
-		do_action( 'wpinv_verify_payment_ipn', $gateway );
355
-		do_action( "wpinv_verify_{$gateway}_ipn" );
356
-		exit;
357
-	}
358
-
359
-	public function enqueue_scripts() {
360
-		// Fires before adding scripts.
361
-		do_action( 'getpaid_enqueue_scripts' );
362
-
363
-		$localize                         = array();
364
-		$localize['ajax_url']             = admin_url( 'admin-ajax.php' );
365
-		$localize['thousands']            = wpinv_thousands_separator();
366
-		$localize['decimals']             = wpinv_decimal_separator();
367
-		$localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
368
-		$localize['txtComplete']          = __( 'Continue', 'invoicing' );
369
-		$localize['UseTaxes']             = wpinv_use_taxes();
370
-		$localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
371
-		$localize['loading']              = __( 'Loading...', 'invoicing' );
372
-		$localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
373
-		$localize['recaptchaSettings']    = getpaid_get_recaptcha_settings();
374
-
375
-		$localize = apply_filters( 'wpinv_front_js_localize', $localize );
376
-
377
-		// reCaptcha.
378
-		if ( getpaid_is_recaptcha_enabled() && ( $recaptcha_js = getpaid_recaptcha_api_url() ) ) {
379
-			wp_enqueue_script( 'recaptcha', $recaptcha_js, array(), null, true ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
380
-		}
381
-
382
-		wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.min.js', array( 'jquery' ), WPINV_VERSION, true );
383
-		wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
384
-	}
385
-
386
-	public function wpinv_actions() {
387
-		if ( isset( $_REQUEST['wpi_action'] ) ) {
388
-			do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
389
-		}
390
-
391
-		if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
392
-			include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
393
-		}
394
-	}
395
-
396
-	/**
397
-	 * Fires an action after verifying that a user can fire them.
398
-	 *
399
-	 * Note: If the action is on an invoice, subscription etc, esure that the
400
-	 * current user owns the invoice/subscription.
401
-	 */
402
-	public function maybe_do_authenticated_action() {
403
-		if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
404
-			$key  = sanitize_key( $_REQUEST['getpaid-action'] );
405
-			$data = wp_unslash( $_REQUEST );
406
-
407
-			if ( is_user_logged_in() ) {
408
-				do_action( "getpaid_authenticated_action_$key", $data );
409
-			}
410
-
411
-			do_action( "getpaid_unauthenticated_action_$key", $data );
412
-		}
413
-	}
414
-
415
-	public function pre_get_posts( $wp_query ) {
416
-		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() ) {
417
-			$wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
418
-		}
419
-
420
-		return $wp_query;
421
-	}
422
-
423
-	/**
424
-	 * Register widgets
425
-	 *
426
-	 */
427
-	public function register_widgets() {
428
-		global $pagenow;
429
-
430
-		// Currently, UX Builder does not work particulaly well with SuperDuper.
431
-		// So we disable our widgets when editing a page with UX Builder.
432
-		if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
433
-			return;
434
-		}
435
-
436
-		$block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
437
-
438
-		if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
439
-			// don't initiate in these conditions.
440
-		} else {
441
-			// Only load allowed widgets.
442
-			$exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
443
-			$widgets = apply_filters(
444
-				'getpaid_widget_classes',
445
-				array(
446
-					'WPInv_Checkout_Widget',
447
-					'WPInv_History_Widget',
448
-					'WPInv_Receipt_Widget',
449
-					'WPInv_Subscriptions_Widget',
450
-					'WPInv_Buy_Item_Widget',
451
-					'WPInv_Messages_Widget',
452
-					'WPInv_GetPaid_Widget',
453
-					'WPInv_Invoice_Widget',
454
-				)
455
-			);
456
-
457
-			// For each widget...
458
-			foreach ( $widgets as $widget ) {
459
-				// Abort early if it is excluded for this page.
460
-				if ( in_array( $widget, $exclude ) ) {
461
-					continue;
462
-				}
463
-
464
-				// SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
465
-				if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
466
-					register_widget( $widget );
467
-				} else {
468
-					new $widget();
469
-				}
470
-			}
471
-		}
472
-	}
473
-
474
-	/**
475
-	 * Upgrades the database.
476
-	 *
477
-	 * @since 2.0.2
478
-	 */
479
-	public function maybe_upgrade_database() {
480
-		// Ensure the database tables are up to date.
481
-		GetPaid_Installer::maybe_create_db_tables();
482
-
483
-		$wpi_version = get_option( 'wpinv_version', 0 );
484
-
485
-		if ( $wpi_version == WPINV_VERSION ) {
486
-			return;
487
-		}
488
-
489
-		$installer = new GetPaid_Installer();
490
-
491
-		if ( empty( $wpi_version ) ) {
492
-			return $installer->upgrade_db( 0 );
493
-		}
494
-
495
-		$upgrades  = array(
496
-			'0.0.5' => '004',
497
-			'1.0.3' => '102',
498
-			'2.0.0' => '118',
499
-			'2.8.0' => '279',
500
-		);
501
-
502
-		foreach ( $upgrades as $key => $method ) {
503
-			if ( version_compare( $wpi_version, $key, '<' ) ) {
504
-				return $installer->upgrade_db( $method );
505
-			}
506
-		}
507
-	}
508
-
509
-	/**
510
-	 * Flushes the permalinks if needed.
511
-	 *
512
-	 * @since 2.0.8
513
-	 */
514
-	public function maybe_flush_permalinks() {
515
-		$flush = get_option( 'wpinv_flush_permalinks', 0 );
516
-
517
-		if ( ! empty( $flush ) ) {
518
-			flush_rewrite_rules();
519
-			delete_option( 'wpinv_flush_permalinks' );
520
-		}
521
-	}
522
-
523
-	/**
524
-	 * Remove our pages from yoast sitemaps.
525
-	 *
526
-	 * @since 1.0.19
527
-	 * @param int[] $excluded_posts_ids
528
-	 */
529
-	public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
530
-		// Ensure that we have an array.
531
-		if ( ! is_array( $excluded_posts_ids ) ) {
532
-			$excluded_posts_ids = array();
533
-		}
534
-
535
-		// Prepare our pages.
536
-		$our_pages = array();
537
-
538
-		// Checkout page.
539
-		$our_pages[] = wpinv_get_option( 'checkout_page', false );
540
-
541
-		// Success page.
542
-		$our_pages[] = wpinv_get_option( 'success_page', false );
543
-
544
-		// Failure page.
545
-		$our_pages[] = wpinv_get_option( 'failure_page', false );
546
-
547
-		// History page.
548
-		$our_pages[] = wpinv_get_option( 'invoice_history_page', false );
549
-
550
-		// Subscriptions page.
551
-		$our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
552
-
553
-		$our_pages   = array_map( 'intval', array_filter( $our_pages ) );
554
-
555
-		$excluded_posts_ids = $excluded_posts_ids + $our_pages;
556
-
557
-		return array_unique( $excluded_posts_ids );
558
-	}
559
-
560
-	/**
561
-	 * Remove our pages from yoast sitemaps.
562
-	 *
563
-	 * @since 1.0.19
564
-	 * @param string[] $post_types
565
-	 */
566
-	public function exclude_invoicing_post_types( $post_types ) {
567
-		// Ensure that we have an array.
568
-		if ( ! is_array( $post_types ) ) {
569
-			$post_types = array();
570
-		}
571
-
572
-		// Remove our post types.
573
-		return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
574
-	}
575
-
576
-	/**
577
-	 * Displays additional footer code.
578
-	 *
579
-	 * @since 2.0.0
580
-	 */
581
-	public function wp_footer() {
582
-		wpinv_get_template( 'frontend-footer.php' );
583
-	}
584
-
585
-	/**
586
-	 * Displays additional header code.
587
-	 *
588
-	 * @since 2.0.0
589
-	 */
590
-	public function wp_head() {
591
-		wpinv_get_template( 'frontend-head.php' );
592
-	}
593
-
594
-	/**
595
-	 * Custom query vars.
596
-	 *
597
-	 */
598
-	public function custom_query_vars( $vars ) {
599
-		$vars[] = 'getpaid-ipn';
600
-		return $vars;
601
-	}
602
-
603
-	/**
604
-	 * Add rewrite tags and rules.
605
-	 *
606
-	 */
607
-	public function add_rewrite_rule() {
608
-		$tag = 'getpaid-ipn';
609
-		add_rewrite_tag( "%$tag%", '([^&]+)' );
610
-		add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
611
-	}
612
-
613
-	/**
614
-	 * Processes non-query string ipns.
615
-	 *
616
-	 */
617
-	public function maybe_process_new_ipn( $query ) {
618
-		if ( is_admin() || ! $query->is_main_query() ) {
619
-			return;
620
-		}
621
-
622
-		$gateway = get_query_var( 'getpaid-ipn' );
623
-
624
-		if ( ! empty( $gateway ) ) {
625
-			$gateway = sanitize_text_field( $gateway );
626
-			nocache_headers();
627
-			do_action( 'wpinv_verify_payment_ipn', $gateway );
628
-			do_action( "wpinv_verify_{$gateway}_ipn" );
629
-			exit;
630
-		}
631
-	}
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
+    }
99
+
100
+        /**
101
+         * Define plugin constants.
102
+         */
103
+    public function define_constants() {
104
+        define( 'WPINV_PLUGIN_DIR', plugin_dir_path( WPINV_PLUGIN_FILE ) );
105
+        define( 'WPINV_PLUGIN_URL', plugin_dir_url( WPINV_PLUGIN_FILE ) );
106
+        $this->version = WPINV_VERSION;
107
+    }
108
+
109
+    /**
110
+     * Hook into actions and filters.
111
+     *
112
+     * @since 1.0.19
113
+     */
114
+    protected function init_hooks() {
115
+        /* Internationalize the text strings used. */
116
+        add_action( 'plugins_loaded', array( &$this, 'plugins_loaded' ) );
117
+
118
+        // Init the plugin after WordPress inits.
119
+        add_action( 'init', array( $this, 'init' ), 1 );
120
+        add_action( 'init', array( $this, 'maybe_process_ipn' ), 100 );
121
+        add_action( 'init', array( $this, 'wpinv_actions' ) );
122
+        add_action( 'init', array( $this, 'maybe_do_authenticated_action' ), 100 );
123
+        add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 11 );
124
+        add_action( 'wp_footer', array( $this, 'wp_footer' ) );
125
+        add_action( 'wp_head', array( $this, 'wp_head' ) );
126
+        add_action( 'widgets_init', array( $this, 'register_widgets' ) );
127
+        add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', array( $this, 'wpseo_exclude_from_sitemap_by_post_ids' ) );
128
+        add_filter( 'the_seo_framework_sitemap_supported_post_types', array( $this, 'exclude_invoicing_post_types' ) );
129
+        add_filter( 'pre_get_posts', array( &$this, 'pre_get_posts' ) );
130
+
131
+        add_filter( 'query_vars', array( $this, 'custom_query_vars' ) );
132
+        add_action( 'init', array( $this, 'add_rewrite_rule' ), 10, 0 );
133
+        add_action( 'pre_get_posts', array( $this, 'maybe_process_new_ipn' ), 1 );
134
+
135
+        // Fires after registering actions.
136
+        do_action( 'wpinv_actions', $this );
137
+        do_action( 'getpaid_actions', $this );
138
+    }
139
+
140
+    public function plugins_loaded() {
141
+        /* Internationalize the text strings used. */
142
+        $this->load_textdomain();
143
+
144
+        do_action( 'wpinv_loaded' );
145
+
146
+        // Fix oxygen page builder conflict
147
+        if ( function_exists( 'ct_css_output' ) ) {
148
+            wpinv_oxygen_fix_conflict();
149
+        }
150
+    }
151
+
152
+    /**
153
+     * Load Localisation files.
154
+     *
155
+     * Note: the first-loaded translation file overrides any following ones if the same translation is present.
156
+     *
157
+     * Locales found in:
158
+     *      - WP_LANG_DIR/plugins/invoicing-LOCALE.mo
159
+     *      - WP_PLUGIN_DIR/invoicing/languages/invoicing-LOCALE.mo
160
+     *
161
+     * @since 1.0.0
162
+     */
163
+    public function load_textdomain() {
164
+        // Determines the current locale.
165
+        if ( function_exists( 'determine_locale' ) ) {
166
+            $locale = determine_locale();
167
+        } else if ( function_exists( 'get_user_locale' ) ) {
168
+            $locale = get_user_locale();
169
+        } else {
170
+            $locale = get_locale();
171
+        }
172
+
173
+        /**
174
+         * Filter the locale to use for translations.
175
+         */
176
+        $locale = apply_filters( 'plugin_locale', $locale, 'invoicing' );
177
+
178
+        unload_textdomain( 'invoicing', true );
179
+        load_textdomain( 'invoicing', WP_LANG_DIR . '/invoicing/invoicing-' . $locale . '.mo' );
180
+        load_plugin_textdomain( 'invoicing', false, plugin_basename( dirname( WPINV_PLUGIN_FILE ) ) . '/languages/' );
181
+    }
182
+
183
+    /**
184
+     * Include required core files used in admin and on the frontend.
185
+     */
186
+    public function includes() {
187
+        // Start with the settings.
188
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/register-settings.php';
189
+
190
+        // Packages/libraries.
191
+        require_once WPINV_PLUGIN_DIR . 'vendor/autoload.php';
192
+        require_once WPINV_PLUGIN_DIR . 'vendor/ayecode/wp-ayecode-ui/ayecode-ui-loader.php';
193
+
194
+        // Load functions.
195
+        require_once WPINV_PLUGIN_DIR . 'includes/deprecated-functions.php';
196
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-email-functions.php';
197
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-general-functions.php';
198
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-helper-functions.php';
199
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-tax-functions.php';
200
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-template-functions.php';
201
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-address-functions.php';
202
+        require_once WPINV_PLUGIN_DIR . 'includes/invoice-functions.php';
203
+        require_once WPINV_PLUGIN_DIR . 'includes/subscription-functions.php';
204
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-item-functions.php';
205
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-discount-functions.php';
206
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-gateway-functions.php';
207
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-payment-functions.php';
208
+        require_once WPINV_PLUGIN_DIR . 'includes/user-functions.php';
209
+        require_once WPINV_PLUGIN_DIR . 'includes/error-functions.php';
210
+
211
+        // Register autoloader.
212
+        try {
213
+            spl_autoload_register( array( $this, 'autoload' ), true );
214
+        } catch ( Exception $e ) {
215
+            wpinv_error_log( $e->getMessage(), '', __FILE__, 149, true );
216
+        }
217
+
218
+        require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-session.php';
219
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-session-handler.php';
220
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-ajax.php';
221
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-api.php';
222
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cache-helper.php';
223
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-db.php';
224
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/subscriptions.php';
225
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-subscriptions-db.php';
226
+        require_once WPINV_PLUGIN_DIR . 'includes/wpinv-subscription.php';
227
+        require_once WPINV_PLUGIN_DIR . 'includes/abstracts/abstract-wpinv-privacy.php';
228
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-privacy.php';
229
+        require_once WPINV_PLUGIN_DIR . 'includes/libraries/class-ayecode-addons.php';
230
+        require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-addons.php';
231
+        require_once WPINV_PLUGIN_DIR . 'widgets/checkout.php';
232
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-history.php';
233
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-receipt.php';
234
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice-messages.php';
235
+        require_once WPINV_PLUGIN_DIR . 'widgets/subscriptions.php';
236
+        require_once WPINV_PLUGIN_DIR . 'widgets/buy-item.php';
237
+        require_once WPINV_PLUGIN_DIR . 'widgets/getpaid.php';
238
+        require_once WPINV_PLUGIN_DIR . 'widgets/invoice.php';
239
+        require_once WPINV_PLUGIN_DIR . 'includes/admin/admin-pages.php';
240
+
241
+        if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
242
+            GetPaid_Post_Types_Admin::init();
243
+
244
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/wpinv-admin-functions.php';
245
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-payment-form.php';
246
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/meta-boxes/class-mb-invoice-notes.php';
247
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-admin-menus.php';
248
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-wpinv-users.php';
249
+            require_once WPINV_PLUGIN_DIR . 'includes/admin/class-getpaid-admin-profile.php';
250
+            // load the user class only on the users.php page
251
+            global $pagenow;
252
+            if ( $pagenow == 'users.php' ) {
253
+                new WPInv_Admin_Users();
254
+            }
255
+        }
256
+
257
+        // Register cli commands
258
+        if ( defined( 'WP_CLI' ) && WP_CLI ) {
259
+            require_once WPINV_PLUGIN_DIR . 'includes/class-wpinv-cli.php';
260
+            WP_CLI::add_command( 'invoicing', 'WPInv_CLI' );
261
+        }
262
+    }
263
+
264
+    /**
265
+     * Class autoloader
266
+     *
267
+     * @param       string $class_name The name of the class to load.
268
+     * @access      public
269
+     * @since       1.0.19
270
+     * @return      void
271
+     */
272
+    public function autoload( $class_name ) {
273
+        // Normalize the class name...
274
+        $class_name  = strtolower( $class_name );
275
+
276
+        // ... and make sure it is our class.
277
+        if ( false === strpos( $class_name, 'getpaid_' ) && false === strpos( $class_name, 'wpinv_' ) ) {
278
+            return;
279
+        }
280
+
281
+        // Next, prepare the file name from the class.
282
+        $file_name = 'class-' . str_replace( '_', '-', $class_name ) . '.php';
283
+
284
+        // Base path of the classes.
285
+        $plugin_path = untrailingslashit( WPINV_PLUGIN_DIR );
286
+
287
+        // And an array of possible locations in order of importance.
288
+        $locations = array(
289
+            "$plugin_path/includes",
290
+            "$plugin_path/includes/data-stores",
291
+            "$plugin_path/includes/gateways",
292
+            "$plugin_path/includes/payments",
293
+            "$plugin_path/includes/geolocation",
294
+            "$plugin_path/includes/reports",
295
+            "$plugin_path/includes/api",
296
+            "$plugin_path/includes/admin",
297
+            "$plugin_path/includes/admin/meta-boxes",
298
+        );
299
+
300
+        foreach ( apply_filters( 'getpaid_autoload_locations', $locations ) as $location ) {
301
+            if ( file_exists( trailingslashit( $location ) . $file_name ) ) {
302
+                include trailingslashit( $location ) . $file_name;
303
+                break;
304
+            }
305
+        }
306
+    }
307
+
308
+    /**
309
+     * Inits hooks etc.
310
+     */
311
+    public function init() {
312
+        // Fires before getpaid inits.
313
+        do_action( 'before_getpaid_init', $this );
314
+
315
+        // Maybe upgrade.
316
+        $this->maybe_upgrade_database();
317
+
318
+        // Load default gateways.
319
+        $gateways = apply_filters(
320
+            'getpaid_default_gateways',
321
+            array(
322
+                'manual'        => 'GetPaid_Manual_Gateway',
323
+                'paypal'        => 'GetPaid_Paypal_Gateway',
324
+                'worldpay'      => 'GetPaid_Worldpay_Gateway',
325
+                'bank_transfer' => 'GetPaid_Bank_Transfer_Gateway',
326
+                'authorizenet'  => 'GetPaid_Authorize_Net_Gateway',
327
+            )
328
+        );
329
+
330
+        foreach ( $gateways as $id => $class ) {
331
+            $this->gateways[ $id ] = new $class();
332
+        }
333
+
334
+        if ( 'yes' != get_option( 'wpinv_renamed_gateways' ) ) {
335
+            GetPaid_Installer::rename_gateways_label();
336
+            update_option( 'wpinv_renamed_gateways', 'yes' );
337
+        }
338
+
339
+        // Fires after getpaid inits.
340
+        do_action( 'getpaid_init', $this );
341
+    }
342
+
343
+    /**
344
+     * Checks if this is an IPN request and processes it.
345
+     */
346
+    public function maybe_process_ipn() {
347
+        // Ensure that this is an IPN request.
348
+        if ( empty( $_GET['wpi-listener'] ) || 'IPN' !== $_GET['wpi-listener'] || empty( $_GET['wpi-gateway'] ) ) {
349
+            return;
350
+        }
351
+
352
+        $gateway = sanitize_text_field( $_GET['wpi-gateway'] );
353
+
354
+        do_action( 'wpinv_verify_payment_ipn', $gateway );
355
+        do_action( "wpinv_verify_{$gateway}_ipn" );
356
+        exit;
357
+    }
358
+
359
+    public function enqueue_scripts() {
360
+        // Fires before adding scripts.
361
+        do_action( 'getpaid_enqueue_scripts' );
362
+
363
+        $localize                         = array();
364
+        $localize['ajax_url']             = admin_url( 'admin-ajax.php' );
365
+        $localize['thousands']            = wpinv_thousands_separator();
366
+        $localize['decimals']             = wpinv_decimal_separator();
367
+        $localize['nonce']                = wp_create_nonce( 'wpinv-nonce' );
368
+        $localize['txtComplete']          = __( 'Continue', 'invoicing' );
369
+        $localize['UseTaxes']             = wpinv_use_taxes();
370
+        $localize['formNonce']            = wp_create_nonce( 'getpaid_form_nonce' );
371
+        $localize['loading']              = __( 'Loading...', 'invoicing' );
372
+        $localize['connectionError']      = __( 'Could not establish a connection to the server.', 'invoicing' );
373
+        $localize['recaptchaSettings']    = getpaid_get_recaptcha_settings();
374
+
375
+        $localize = apply_filters( 'wpinv_front_js_localize', $localize );
376
+
377
+        // reCaptcha.
378
+        if ( getpaid_is_recaptcha_enabled() && ( $recaptcha_js = getpaid_recaptcha_api_url() ) ) {
379
+            wp_enqueue_script( 'recaptcha', $recaptcha_js, array(), null, true ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
380
+        }
381
+
382
+        wp_enqueue_script( 'wpinv-front-script', WPINV_PLUGIN_URL . 'assets/js/payment-forms.min.js', array( 'jquery' ), WPINV_VERSION, true );
383
+        wp_localize_script( 'wpinv-front-script', 'WPInv', $localize );
384
+    }
385
+
386
+    public function wpinv_actions() {
387
+        if ( isset( $_REQUEST['wpi_action'] ) ) {
388
+            do_action( 'wpinv_' . wpinv_sanitize_key( $_REQUEST['wpi_action'] ), $_REQUEST );
389
+        }
390
+
391
+        if ( defined( 'WP_ALL_IMPORT_ROOT_DIR' ) ) {
392
+            include plugin_dir_path( __FILE__ ) . 'libraries/wp-all-import/class-getpaid-wp-all-import.php';
393
+        }
394
+    }
395
+
396
+    /**
397
+     * Fires an action after verifying that a user can fire them.
398
+     *
399
+     * Note: If the action is on an invoice, subscription etc, esure that the
400
+     * current user owns the invoice/subscription.
401
+     */
402
+    public function maybe_do_authenticated_action() {
403
+        if ( isset( $_REQUEST['getpaid-action'] ) && isset( $_REQUEST['getpaid-nonce'] ) && wp_verify_nonce( $_REQUEST['getpaid-nonce'], 'getpaid-nonce' ) ) {
404
+            $key  = sanitize_key( $_REQUEST['getpaid-action'] );
405
+            $data = wp_unslash( $_REQUEST );
406
+
407
+            if ( is_user_logged_in() ) {
408
+                do_action( "getpaid_authenticated_action_$key", $data );
409
+            }
410
+
411
+            do_action( "getpaid_unauthenticated_action_$key", $data );
412
+        }
413
+    }
414
+
415
+    public function pre_get_posts( $wp_query ) {
416
+        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() ) {
417
+            $wp_query->query_vars['post_status'] = array_keys( wpinv_get_invoice_statuses( false, false, $wp_query->query_vars['post_type'] ) );
418
+        }
419
+
420
+        return $wp_query;
421
+    }
422
+
423
+    /**
424
+     * Register widgets
425
+     *
426
+     */
427
+    public function register_widgets() {
428
+        global $pagenow;
429
+
430
+        // Currently, UX Builder does not work particulaly well with SuperDuper.
431
+        // So we disable our widgets when editing a page with UX Builder.
432
+        if ( function_exists( 'ux_builder_is_active' ) && ux_builder_is_active() ) {
433
+            return;
434
+        }
435
+
436
+        $block_widget_init_screens = function_exists( 'sd_pagenow_exclude' ) ? sd_pagenow_exclude() : array();
437
+
438
+        if ( is_admin() && $pagenow && in_array( $pagenow, $block_widget_init_screens ) ) {
439
+            // don't initiate in these conditions.
440
+        } else {
441
+            // Only load allowed widgets.
442
+            $exclude = function_exists( 'sd_widget_exclude' ) ? sd_widget_exclude() : array();
443
+            $widgets = apply_filters(
444
+                'getpaid_widget_classes',
445
+                array(
446
+                    'WPInv_Checkout_Widget',
447
+                    'WPInv_History_Widget',
448
+                    'WPInv_Receipt_Widget',
449
+                    'WPInv_Subscriptions_Widget',
450
+                    'WPInv_Buy_Item_Widget',
451
+                    'WPInv_Messages_Widget',
452
+                    'WPInv_GetPaid_Widget',
453
+                    'WPInv_Invoice_Widget',
454
+                )
455
+            );
456
+
457
+            // For each widget...
458
+            foreach ( $widgets as $widget ) {
459
+                // Abort early if it is excluded for this page.
460
+                if ( in_array( $widget, $exclude ) ) {
461
+                    continue;
462
+                }
463
+
464
+                // SD V1 used to extend the widget class. V2 does not, so we cannot call register widget on it.
465
+                if ( is_subclass_of( $widget, 'WP_Widget' ) ) {
466
+                    register_widget( $widget );
467
+                } else {
468
+                    new $widget();
469
+                }
470
+            }
471
+        }
472
+    }
473
+
474
+    /**
475
+     * Upgrades the database.
476
+     *
477
+     * @since 2.0.2
478
+     */
479
+    public function maybe_upgrade_database() {
480
+        // Ensure the database tables are up to date.
481
+        GetPaid_Installer::maybe_create_db_tables();
482
+
483
+        $wpi_version = get_option( 'wpinv_version', 0 );
484
+
485
+        if ( $wpi_version == WPINV_VERSION ) {
486
+            return;
487
+        }
488
+
489
+        $installer = new GetPaid_Installer();
490
+
491
+        if ( empty( $wpi_version ) ) {
492
+            return $installer->upgrade_db( 0 );
493
+        }
494
+
495
+        $upgrades  = array(
496
+            '0.0.5' => '004',
497
+            '1.0.3' => '102',
498
+            '2.0.0' => '118',
499
+            '2.8.0' => '279',
500
+        );
501
+
502
+        foreach ( $upgrades as $key => $method ) {
503
+            if ( version_compare( $wpi_version, $key, '<' ) ) {
504
+                return $installer->upgrade_db( $method );
505
+            }
506
+        }
507
+    }
508
+
509
+    /**
510
+     * Flushes the permalinks if needed.
511
+     *
512
+     * @since 2.0.8
513
+     */
514
+    public function maybe_flush_permalinks() {
515
+        $flush = get_option( 'wpinv_flush_permalinks', 0 );
516
+
517
+        if ( ! empty( $flush ) ) {
518
+            flush_rewrite_rules();
519
+            delete_option( 'wpinv_flush_permalinks' );
520
+        }
521
+    }
522
+
523
+    /**
524
+     * Remove our pages from yoast sitemaps.
525
+     *
526
+     * @since 1.0.19
527
+     * @param int[] $excluded_posts_ids
528
+     */
529
+    public function wpseo_exclude_from_sitemap_by_post_ids( $excluded_posts_ids ) {
530
+        // Ensure that we have an array.
531
+        if ( ! is_array( $excluded_posts_ids ) ) {
532
+            $excluded_posts_ids = array();
533
+        }
534
+
535
+        // Prepare our pages.
536
+        $our_pages = array();
537
+
538
+        // Checkout page.
539
+        $our_pages[] = wpinv_get_option( 'checkout_page', false );
540
+
541
+        // Success page.
542
+        $our_pages[] = wpinv_get_option( 'success_page', false );
543
+
544
+        // Failure page.
545
+        $our_pages[] = wpinv_get_option( 'failure_page', false );
546
+
547
+        // History page.
548
+        $our_pages[] = wpinv_get_option( 'invoice_history_page', false );
549
+
550
+        // Subscriptions page.
551
+        $our_pages[] = wpinv_get_option( 'invoice_subscription_page', false );
552
+
553
+        $our_pages   = array_map( 'intval', array_filter( $our_pages ) );
554
+
555
+        $excluded_posts_ids = $excluded_posts_ids + $our_pages;
556
+
557
+        return array_unique( $excluded_posts_ids );
558
+    }
559
+
560
+    /**
561
+     * Remove our pages from yoast sitemaps.
562
+     *
563
+     * @since 1.0.19
564
+     * @param string[] $post_types
565
+     */
566
+    public function exclude_invoicing_post_types( $post_types ) {
567
+        // Ensure that we have an array.
568
+        if ( ! is_array( $post_types ) ) {
569
+            $post_types = array();
570
+        }
571
+
572
+        // Remove our post types.
573
+        return array_diff( $post_types, array_keys( getpaid_get_invoice_post_types() ) );
574
+    }
575
+
576
+    /**
577
+     * Displays additional footer code.
578
+     *
579
+     * @since 2.0.0
580
+     */
581
+    public function wp_footer() {
582
+        wpinv_get_template( 'frontend-footer.php' );
583
+    }
584
+
585
+    /**
586
+     * Displays additional header code.
587
+     *
588
+     * @since 2.0.0
589
+     */
590
+    public function wp_head() {
591
+        wpinv_get_template( 'frontend-head.php' );
592
+    }
593
+
594
+    /**
595
+     * Custom query vars.
596
+     *
597
+     */
598
+    public function custom_query_vars( $vars ) {
599
+        $vars[] = 'getpaid-ipn';
600
+        return $vars;
601
+    }
602
+
603
+    /**
604
+     * Add rewrite tags and rules.
605
+     *
606
+     */
607
+    public function add_rewrite_rule() {
608
+        $tag = 'getpaid-ipn';
609
+        add_rewrite_tag( "%$tag%", '([^&]+)' );
610
+        add_rewrite_rule( "^$tag/([^/]*)/?", "index.php?$tag=\$matches[1]", 'top' );
611
+    }
612
+
613
+    /**
614
+     * Processes non-query string ipns.
615
+     *
616
+     */
617
+    public function maybe_process_new_ipn( $query ) {
618
+        if ( is_admin() || ! $query->is_main_query() ) {
619
+            return;
620
+        }
621
+
622
+        $gateway = get_query_var( 'getpaid-ipn' );
623
+
624
+        if ( ! empty( $gateway ) ) {
625
+            $gateway = sanitize_text_field( $gateway );
626
+            nocache_headers();
627
+            do_action( 'wpinv_verify_payment_ipn', $gateway );
628
+            do_action( "wpinv_verify_{$gateway}_ipn" );
629
+            exit;
630
+        }
631
+    }
632 632
 }
Please login to merge, or discard this patch.