Completed
Push — master ( 912c04...efffb1 )
by Patrik
26s queued 21s
created
ayecode/wp-ayecode-ui/includes/components/class-aui-component-input.php 1 patch
Indentation   +1282 added lines, -1282 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if ( ! defined( 'ABSPATH' ) ) {
4
-	exit; // Exit if accessed directly
4
+    exit; // Exit if accessed directly
5 5
 }
6 6
 
7 7
 /**
@@ -11,1305 +11,1305 @@  discard block
 block discarded – undo
11 11
  */
12 12
 class AUI_Component_Input {
13 13
 
14
-	/**
15
-	 * Build the component.
16
-	 *
17
-	 * @param array $args
18
-	 *
19
-	 * @return string The rendered component.
20
-	 */
21
-	public static function input( $args = array() ) {
22
-		global $aui_bs5;
23
-
24
-		$defaults = array(
25
-			'type'                     => 'text',
26
-			'name'                     => '',
27
-			'class'                    => '',
28
-			'wrap_class'               => '',
29
-			'id'                       => '',
30
-			'placeholder'              => '',
31
-			'title'                    => '',
32
-			'value'                    => '',
33
-			'required'                 => false,
34
-			'size'                     => '', // sm, lg, small, large
35
-			'clear_icon'               => '', // true will show a clear icon, can't be used with input_group_right
36
-			'with_hidden'              => false, // Append hidden field for single checkbox.
37
-			'label'                    => '',
38
-			'label_after'              => false,
39
-			'label_class'              => '',
40
-			'label_col'                => '2',
41
-			'label_type'               => '', // top, horizontal, empty = hidden
42
-			'label_force_left'         => false, // used to force checkbox label left when using horizontal
43
-			// sets the label type, default: hidden. Options: hidden, top, horizontal, floating
44
-			'help_text'                => '',
45
-			'validation_text'          => '',
46
-			'validation_pattern'       => '',
47
-			'no_wrap'                  => false,
48
-			'input_group_right'        => '',
49
-			'input_group_left'         => '',
50
-			'input_group_right_inside' => false,
51
-			// forces the input group inside the input
52
-			'input_group_left_inside'  => false,
53
-			// forces the input group inside the input
54
-			'form_group_class'         => '',
55
-			'step'                     => '',
56
-			'switch'                   => false,
57
-			// to show checkbox as a switch
58
-			'checked'                  => false,
59
-			// set a checkbox or radio as selected
60
-			'password_toggle'          => true,
61
-			// toggle view/hide password
62
-			'element_require'          => '',
63
-			// [%element_id%] == "1"
64
-			'extra_attributes'         => array(),
65
-			// an array of extra attributes
66
-			'wrap_attributes'          => array()
67
-		);
68
-
69
-		/**
70
-		 * Parse incoming $args into an array and merge it with $defaults
71
-		 */
72
-		$args   = wp_parse_args( $args, $defaults );
73
-		$output = '';
74
-		if ( ! empty( $args['type'] ) ) {
75
-			// hidden label option needs to be empty
76
-			$args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
77
-
78
-			$type = sanitize_html_class( $args['type'] );
79
-
80
-			$help_text   = '';
81
-			$label       = '';
82
-			$label_after = $args['label_after'];
83
-			$label_args  = array(
84
-				'title'      => $args['label'],
85
-				'for'        => $args['id'],
86
-				'class'      => $args['label_class'] . " ",
87
-				'label_type' => $args['label_type'],
88
-				'label_col'  => $args['label_col']
89
-			);
90
-
91
-			// floating labels need label after
92
-			if ( $args['label_type'] == 'floating' && $type != 'checkbox' ) {
93
-				$label_after         = true;
94
-				$args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
95
-			}
96
-
97
-			// size
98
-			$size = '';
99
-			if ( $args['size'] == 'lg' || $args['size'] == 'large' ) {
100
-				$size = 'lg';
101
-				$args['class'] .= ' form-control-lg';
102
-			}elseif ( $args['size'] == 'sm' || $args['size'] == 'small' ) {
103
-				$size = 'sm';
104
-				$args['class'] .= ' form-control-sm';
105
-			}
106
-
107
-			// clear function
108
-			$clear_function = 'jQuery(this).parent().parent().find(\'input\').val(\'\');';
109
-
110
-			// Some special sauce for files
111
-			if ( $type == 'file' ) {
112
-				$label_after = true; // if type file we need the label after
113
-				$args['class'] .= ' custom-file-input ';
114
-			} elseif ( $type == 'checkbox' ) {
115
-				$label_after = true; // if type file we need the label after
116
-				$args['class'] .= $aui_bs5 ? ' form-check-input c-pointer ' : ' custom-control-input c-pointer ';
117
-			} elseif ( $type == 'datepicker' || $type == 'timepicker' ) {
118
-				$orig_type = $type;
119
-				$type = 'text';
120
-				$args['class'] .= ' bg-initial '; // @todo not sure why we have this?
121
-				$clear_function .= "jQuery(this).parent().parent().find('input[name=\'" . esc_attr( $args['name'] ) . "\']').trigger('change');";
122
-
123
-				$args['extra_attributes']['data-aui-init'] = 'flatpickr';
124
-
125
-				// Disable native datetime inputs.
126
-				$disable_mobile_attr = isset( $args['extra_attributes']['data-disable-mobile'] ) ? $args['extra_attributes']['data-disable-mobile'] : 'true';
127
-				$disable_mobile_attr = apply_filters( 'aui_flatpickr_disable_disable_mobile_attr', $disable_mobile_attr, $args );
128
-
129
-				$args['extra_attributes']['data-disable-mobile'] = $disable_mobile_attr;
130
-
131
-				// set a way to clear field if empty
132
-				if ( $args['input_group_right'] === '' && $args['clear_icon'] !== false ) {
133
-					$args['input_group_right_inside'] = true;
134
-					$args['clear_icon'] = true;
135
-				}
136
-
137
-				// enqueue the script
138
-				$aui_settings = AyeCode_UI_Settings::instance();
139
-				$aui_settings->enqueue_flatpickr();
140
-			} elseif ( $type == 'iconpicker' ) {
141
-				$type = 'text';
142
-				//$args['class'] .= ' aui-flatpickr bg-initial ';
14
+    /**
15
+     * Build the component.
16
+     *
17
+     * @param array $args
18
+     *
19
+     * @return string The rendered component.
20
+     */
21
+    public static function input( $args = array() ) {
22
+        global $aui_bs5;
23
+
24
+        $defaults = array(
25
+            'type'                     => 'text',
26
+            'name'                     => '',
27
+            'class'                    => '',
28
+            'wrap_class'               => '',
29
+            'id'                       => '',
30
+            'placeholder'              => '',
31
+            'title'                    => '',
32
+            'value'                    => '',
33
+            'required'                 => false,
34
+            'size'                     => '', // sm, lg, small, large
35
+            'clear_icon'               => '', // true will show a clear icon, can't be used with input_group_right
36
+            'with_hidden'              => false, // Append hidden field for single checkbox.
37
+            'label'                    => '',
38
+            'label_after'              => false,
39
+            'label_class'              => '',
40
+            'label_col'                => '2',
41
+            'label_type'               => '', // top, horizontal, empty = hidden
42
+            'label_force_left'         => false, // used to force checkbox label left when using horizontal
43
+            // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
44
+            'help_text'                => '',
45
+            'validation_text'          => '',
46
+            'validation_pattern'       => '',
47
+            'no_wrap'                  => false,
48
+            'input_group_right'        => '',
49
+            'input_group_left'         => '',
50
+            'input_group_right_inside' => false,
51
+            // forces the input group inside the input
52
+            'input_group_left_inside'  => false,
53
+            // forces the input group inside the input
54
+            'form_group_class'         => '',
55
+            'step'                     => '',
56
+            'switch'                   => false,
57
+            // to show checkbox as a switch
58
+            'checked'                  => false,
59
+            // set a checkbox or radio as selected
60
+            'password_toggle'          => true,
61
+            // toggle view/hide password
62
+            'element_require'          => '',
63
+            // [%element_id%] == "1"
64
+            'extra_attributes'         => array(),
65
+            // an array of extra attributes
66
+            'wrap_attributes'          => array()
67
+        );
68
+
69
+        /**
70
+         * Parse incoming $args into an array and merge it with $defaults
71
+         */
72
+        $args   = wp_parse_args( $args, $defaults );
73
+        $output = '';
74
+        if ( ! empty( $args['type'] ) ) {
75
+            // hidden label option needs to be empty
76
+            $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
77
+
78
+            $type = sanitize_html_class( $args['type'] );
79
+
80
+            $help_text   = '';
81
+            $label       = '';
82
+            $label_after = $args['label_after'];
83
+            $label_args  = array(
84
+                'title'      => $args['label'],
85
+                'for'        => $args['id'],
86
+                'class'      => $args['label_class'] . " ",
87
+                'label_type' => $args['label_type'],
88
+                'label_col'  => $args['label_col']
89
+            );
90
+
91
+            // floating labels need label after
92
+            if ( $args['label_type'] == 'floating' && $type != 'checkbox' ) {
93
+                $label_after         = true;
94
+                $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
95
+            }
96
+
97
+            // size
98
+            $size = '';
99
+            if ( $args['size'] == 'lg' || $args['size'] == 'large' ) {
100
+                $size = 'lg';
101
+                $args['class'] .= ' form-control-lg';
102
+            }elseif ( $args['size'] == 'sm' || $args['size'] == 'small' ) {
103
+                $size = 'sm';
104
+                $args['class'] .= ' form-control-sm';
105
+            }
106
+
107
+            // clear function
108
+            $clear_function = 'jQuery(this).parent().parent().find(\'input\').val(\'\');';
109
+
110
+            // Some special sauce for files
111
+            if ( $type == 'file' ) {
112
+                $label_after = true; // if type file we need the label after
113
+                $args['class'] .= ' custom-file-input ';
114
+            } elseif ( $type == 'checkbox' ) {
115
+                $label_after = true; // if type file we need the label after
116
+                $args['class'] .= $aui_bs5 ? ' form-check-input c-pointer ' : ' custom-control-input c-pointer ';
117
+            } elseif ( $type == 'datepicker' || $type == 'timepicker' ) {
118
+                $orig_type = $type;
119
+                $type = 'text';
120
+                $args['class'] .= ' bg-initial '; // @todo not sure why we have this?
121
+                $clear_function .= "jQuery(this).parent().parent().find('input[name=\'" . esc_attr( $args['name'] ) . "\']').trigger('change');";
122
+
123
+                $args['extra_attributes']['data-aui-init'] = 'flatpickr';
124
+
125
+                // Disable native datetime inputs.
126
+                $disable_mobile_attr = isset( $args['extra_attributes']['data-disable-mobile'] ) ? $args['extra_attributes']['data-disable-mobile'] : 'true';
127
+                $disable_mobile_attr = apply_filters( 'aui_flatpickr_disable_disable_mobile_attr', $disable_mobile_attr, $args );
128
+
129
+                $args['extra_attributes']['data-disable-mobile'] = $disable_mobile_attr;
130
+
131
+                // set a way to clear field if empty
132
+                if ( $args['input_group_right'] === '' && $args['clear_icon'] !== false ) {
133
+                    $args['input_group_right_inside'] = true;
134
+                    $args['clear_icon'] = true;
135
+                }
136
+
137
+                // enqueue the script
138
+                $aui_settings = AyeCode_UI_Settings::instance();
139
+                $aui_settings->enqueue_flatpickr();
140
+            } elseif ( $type == 'iconpicker' ) {
141
+                $type = 'text';
142
+                //$args['class'] .= ' aui-flatpickr bg-initial ';
143 143
 //				$args['class'] .= ' bg-initial ';
144 144
 
145
-				$args['extra_attributes']['data-aui-init'] = 'iconpicker';
146
-				$args['extra_attributes']['data-placement'] = 'bottomRight';
145
+                $args['extra_attributes']['data-aui-init'] = 'iconpicker';
146
+                $args['extra_attributes']['data-placement'] = 'bottomRight';
147 147
 
148
-				$args['input_group_right'] = '<span class="input-group-addon input-group-text c-pointer"></span>';
148
+                $args['input_group_right'] = '<span class="input-group-addon input-group-text c-pointer"></span>';
149 149
 //				$args['input_group_right_inside'] = true;
150
-				// enqueue the script
151
-				$aui_settings = AyeCode_UI_Settings::instance();
152
-				$aui_settings->enqueue_iconpicker();
153
-			}
154
-
155
-			if ( $type == 'checkbox' && ( ( ! empty( $args['name'] ) && strpos( $args['name'], '[' ) === false ) || ! empty( $args['with_hidden'] ) ) ) {
156
-				$output .= '<input type="hidden" name="' . esc_attr( $args['name'] ) . '" value="0" />';
157
-			}
158
-
159
-			// allow clear icon
160
-			if ( $args['input_group_right'] === '' && $args['clear_icon'] ) {
161
-				$font_size = $size == 'sm' ? '1.3' : ( $size == 'lg' ? '1.65' : '1.5' );
162
-				$args['input_group_right_inside'] = true;
163
-				$align_class = $aui_bs5 ? ' h-100 py-0' : '';
164
-				$args['input_group_right'] = '<span class="input-group-text aui-clear-input c-pointer bg-initial border-0 px-2 d-none ' . $align_class . '" onclick="' . $clear_function . '"><span style="font-size: ' . $font_size . 'rem" aria-hidden="true" class="' . ( $aui_bs5 ? 'btn-close' : 'close' ) . '">' . ( $aui_bs5 ? '' : '&times;' ) . '</span></span>';
165
-			}
166
-
167
-			// open/type
168
-			$output .= '<input type="' . $type . '" ';
169
-
170
-			// name
171
-			if ( ! empty( $args['name'] ) ) {
172
-				$output .= ' name="' . esc_attr( $args['name'] ) . '" ';
173
-			}
174
-
175
-			// id
176
-			if ( ! empty( $args['id'] ) ) {
177
-				$output .= ' id="' . sanitize_html_class( $args['id'] ) . '" ';
178
-			}
179
-
180
-			// placeholder
181
-			if ( isset( $args['placeholder'] ) && '' != $args['placeholder'] ) {
182
-				$output .= ' placeholder="' . esc_attr( $args['placeholder'] ) . '" ';
183
-			}
184
-
185
-			// title
186
-			if ( ! empty( $args['title'] ) ) {
187
-				$output .= ' title="' . esc_attr( $args['title'] ) . '" ';
188
-			}
189
-
190
-			// value
191
-			if ( ! empty( $args['value'] ) ) {
192
-				$output .= AUI_Component_Helper::value( $args['value'] );
193
-			}
194
-
195
-			// checked, for radio and checkboxes
196
-			if ( ( $type == 'checkbox' || $type == 'radio' ) && $args['checked'] ) {
197
-				$output .= ' checked ';
198
-			}
199
-
200
-			// validation text
201
-			if ( ! empty( $args['validation_text'] ) ) {
202
-				$output .= ' oninvalid="setCustomValidity(\'' . esc_attr( addslashes( $args['validation_text'] ) ) . '\')" ';
203
-				$output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" ';
204
-			}
205
-
206
-			// validation_pattern
207
-			if ( ! empty( $args['validation_pattern'] ) ) {
208
-				$output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" ';
209
-			}
210
-
211
-			// step (for numbers)
212
-			if ( ! empty( $args['step'] ) ) {
213
-				$output .= ' step="' . $args['step'] . '" ';
214
-			}
215
-
216
-			// required
217
-			if ( ! empty( $args['required'] ) ) {
218
-				$output .= ' required ';
219
-			}
220
-
221
-			// class
222
-			$class = ! empty( $args['class'] ) ? AUI_Component_Helper::esc_classes( $args['class'] ) : '';
223
-			$output .= $aui_bs5 &&  $type == 'checkbox' ? ' class="' . $class . '" ' : ' class="form-control ' . $class . '" ';
224
-
225
-			// data-attributes
226
-			$output .= AUI_Component_Helper::data_attributes( $args );
227
-
228
-			// extra attributes
229
-			if ( ! empty( $args['extra_attributes'] ) ) {
230
-				$output .= AUI_Component_Helper::extra_attributes( $args['extra_attributes'] );
231
-			}
232
-
233
-			// close
234
-			$output .= ' >';
235
-
236
-			// help text
237
-			if ( ! empty( $args['help_text'] ) ) {
238
-				$help_text = AUI_Component_Helper::help_text( $args['help_text'] );
239
-			}
240
-
241
-			// label
242
-			if ( ! empty( $args['label'] ) ) {
243
-				$label_base_class = '';
244
-				if ( $type == 'file' ) {
245
-					$label_base_class = ' custom-file-label';
246
-				} elseif ( $type == 'checkbox' ) {
247
-					if ( ! empty( $args['label_force_left'] ) ) {
248
-						$label_args['title'] = wp_kses_post( $args['help_text'] );
249
-						$help_text = '';
250
-						//$label_args['class'] .= ' d-inline ';
251
-						$args['wrap_class'] .= ' align-items-center ';
252
-					}else{
253
-
254
-					}
255
-
256
-					$label_base_class = $aui_bs5 ? ' form-check-label' : ' custom-control-label';
257
-				}
258
-				$label_args['class'] .= $label_base_class;
259
-				$temp_label_args = $label_args;
260
-				if(! empty( $args['label_force_left'] )){$temp_label_args['class'] = $label_base_class." text-muted";}
261
-				$label = self::label( $temp_label_args, $type );
262
-			}
263
-
264
-
265
-
266
-
267
-			// set help text in the correct position
268
-			if ( $label_after ) {
269
-				$output .= $label . $help_text;
270
-			}
271
-
272
-			// some input types need a separate wrap
273
-			if ( $type == 'file' ) {
274
-				$output = self::wrap( array(
275
-					'content' => $output,
276
-					'class'   => $aui_bs5 ? 'mb-3 custom-file' : 'form-group custom-file'
277
-				) );
278
-			} elseif ( $type == 'checkbox' ) {
279
-
280
-				$label_args['title'] = $args['label'];
281
-				$label_col = AUI_Component_Helper::get_column_class( $args['label_col'], 'label' );
282
-				$label = !empty( $args['label_force_left'] ) ? self::label( $label_args, 'cb' ) : '<div class="' . $label_col . ' col-form-label"></div>';
283
-				$switch_size_class = $args['switch'] && !is_bool( $args['switch'] ) ? ' custom-switch-'.esc_attr( $args['switch'] ) : '';
284
-				if ( $aui_bs5 ) {
285
-					$wrap_class = $args['switch'] ? 'form-check form-switch' . $switch_size_class : 'form-check';
286
-				}else{
287
-					$wrap_class = $args['switch'] ? 'custom-switch' . $switch_size_class :  'custom-checkbox' ;
288
-				}
289
-				if ( ! empty( $args['label_force_left'] ) ) {
290
-					$wrap_class .= $aui_bs5 ? '' : ' d-flex align-content-center';
291
-					$label = str_replace(array("form-check-label","custom-control-label"),"", self::label( $label_args, 'cb' ) );
292
-				}
293
-				$output     = self::wrap( array(
294
-					'content' => $output,
295
-					'class'   => $aui_bs5 ? $wrap_class : 'custom-control ' . $wrap_class
296
-				) );
297
-
298
-				if ( $args['label_type'] == 'horizontal' ) {
299
-					$input_col = AUI_Component_Helper::get_column_class( $args['label_col'], 'input' );
300
-					$output    = $label . '<div class="' . $input_col . '">' . $output . '</div>';
301
-				}
302
-			} elseif ( $type == 'password' && $args['password_toggle'] && ! $args['input_group_right'] ) {
303
-
304
-
305
-				// allow password field to toggle view
306
-				$args['input_group_right'] = '<span class="input-group-text c-pointer px-3" 
150
+                // enqueue the script
151
+                $aui_settings = AyeCode_UI_Settings::instance();
152
+                $aui_settings->enqueue_iconpicker();
153
+            }
154
+
155
+            if ( $type == 'checkbox' && ( ( ! empty( $args['name'] ) && strpos( $args['name'], '[' ) === false ) || ! empty( $args['with_hidden'] ) ) ) {
156
+                $output .= '<input type="hidden" name="' . esc_attr( $args['name'] ) . '" value="0" />';
157
+            }
158
+
159
+            // allow clear icon
160
+            if ( $args['input_group_right'] === '' && $args['clear_icon'] ) {
161
+                $font_size = $size == 'sm' ? '1.3' : ( $size == 'lg' ? '1.65' : '1.5' );
162
+                $args['input_group_right_inside'] = true;
163
+                $align_class = $aui_bs5 ? ' h-100 py-0' : '';
164
+                $args['input_group_right'] = '<span class="input-group-text aui-clear-input c-pointer bg-initial border-0 px-2 d-none ' . $align_class . '" onclick="' . $clear_function . '"><span style="font-size: ' . $font_size . 'rem" aria-hidden="true" class="' . ( $aui_bs5 ? 'btn-close' : 'close' ) . '">' . ( $aui_bs5 ? '' : '&times;' ) . '</span></span>';
165
+            }
166
+
167
+            // open/type
168
+            $output .= '<input type="' . $type . '" ';
169
+
170
+            // name
171
+            if ( ! empty( $args['name'] ) ) {
172
+                $output .= ' name="' . esc_attr( $args['name'] ) . '" ';
173
+            }
174
+
175
+            // id
176
+            if ( ! empty( $args['id'] ) ) {
177
+                $output .= ' id="' . sanitize_html_class( $args['id'] ) . '" ';
178
+            }
179
+
180
+            // placeholder
181
+            if ( isset( $args['placeholder'] ) && '' != $args['placeholder'] ) {
182
+                $output .= ' placeholder="' . esc_attr( $args['placeholder'] ) . '" ';
183
+            }
184
+
185
+            // title
186
+            if ( ! empty( $args['title'] ) ) {
187
+                $output .= ' title="' . esc_attr( $args['title'] ) . '" ';
188
+            }
189
+
190
+            // value
191
+            if ( ! empty( $args['value'] ) ) {
192
+                $output .= AUI_Component_Helper::value( $args['value'] );
193
+            }
194
+
195
+            // checked, for radio and checkboxes
196
+            if ( ( $type == 'checkbox' || $type == 'radio' ) && $args['checked'] ) {
197
+                $output .= ' checked ';
198
+            }
199
+
200
+            // validation text
201
+            if ( ! empty( $args['validation_text'] ) ) {
202
+                $output .= ' oninvalid="setCustomValidity(\'' . esc_attr( addslashes( $args['validation_text'] ) ) . '\')" ';
203
+                $output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" ';
204
+            }
205
+
206
+            // validation_pattern
207
+            if ( ! empty( $args['validation_pattern'] ) ) {
208
+                $output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" ';
209
+            }
210
+
211
+            // step (for numbers)
212
+            if ( ! empty( $args['step'] ) ) {
213
+                $output .= ' step="' . $args['step'] . '" ';
214
+            }
215
+
216
+            // required
217
+            if ( ! empty( $args['required'] ) ) {
218
+                $output .= ' required ';
219
+            }
220
+
221
+            // class
222
+            $class = ! empty( $args['class'] ) ? AUI_Component_Helper::esc_classes( $args['class'] ) : '';
223
+            $output .= $aui_bs5 &&  $type == 'checkbox' ? ' class="' . $class . '" ' : ' class="form-control ' . $class . '" ';
224
+
225
+            // data-attributes
226
+            $output .= AUI_Component_Helper::data_attributes( $args );
227
+
228
+            // extra attributes
229
+            if ( ! empty( $args['extra_attributes'] ) ) {
230
+                $output .= AUI_Component_Helper::extra_attributes( $args['extra_attributes'] );
231
+            }
232
+
233
+            // close
234
+            $output .= ' >';
235
+
236
+            // help text
237
+            if ( ! empty( $args['help_text'] ) ) {
238
+                $help_text = AUI_Component_Helper::help_text( $args['help_text'] );
239
+            }
240
+
241
+            // label
242
+            if ( ! empty( $args['label'] ) ) {
243
+                $label_base_class = '';
244
+                if ( $type == 'file' ) {
245
+                    $label_base_class = ' custom-file-label';
246
+                } elseif ( $type == 'checkbox' ) {
247
+                    if ( ! empty( $args['label_force_left'] ) ) {
248
+                        $label_args['title'] = wp_kses_post( $args['help_text'] );
249
+                        $help_text = '';
250
+                        //$label_args['class'] .= ' d-inline ';
251
+                        $args['wrap_class'] .= ' align-items-center ';
252
+                    }else{
253
+
254
+                    }
255
+
256
+                    $label_base_class = $aui_bs5 ? ' form-check-label' : ' custom-control-label';
257
+                }
258
+                $label_args['class'] .= $label_base_class;
259
+                $temp_label_args = $label_args;
260
+                if(! empty( $args['label_force_left'] )){$temp_label_args['class'] = $label_base_class." text-muted";}
261
+                $label = self::label( $temp_label_args, $type );
262
+            }
263
+
264
+
265
+
266
+
267
+            // set help text in the correct position
268
+            if ( $label_after ) {
269
+                $output .= $label . $help_text;
270
+            }
271
+
272
+            // some input types need a separate wrap
273
+            if ( $type == 'file' ) {
274
+                $output = self::wrap( array(
275
+                    'content' => $output,
276
+                    'class'   => $aui_bs5 ? 'mb-3 custom-file' : 'form-group custom-file'
277
+                ) );
278
+            } elseif ( $type == 'checkbox' ) {
279
+
280
+                $label_args['title'] = $args['label'];
281
+                $label_col = AUI_Component_Helper::get_column_class( $args['label_col'], 'label' );
282
+                $label = !empty( $args['label_force_left'] ) ? self::label( $label_args, 'cb' ) : '<div class="' . $label_col . ' col-form-label"></div>';
283
+                $switch_size_class = $args['switch'] && !is_bool( $args['switch'] ) ? ' custom-switch-'.esc_attr( $args['switch'] ) : '';
284
+                if ( $aui_bs5 ) {
285
+                    $wrap_class = $args['switch'] ? 'form-check form-switch' . $switch_size_class : 'form-check';
286
+                }else{
287
+                    $wrap_class = $args['switch'] ? 'custom-switch' . $switch_size_class :  'custom-checkbox' ;
288
+                }
289
+                if ( ! empty( $args['label_force_left'] ) ) {
290
+                    $wrap_class .= $aui_bs5 ? '' : ' d-flex align-content-center';
291
+                    $label = str_replace(array("form-check-label","custom-control-label"),"", self::label( $label_args, 'cb' ) );
292
+                }
293
+                $output     = self::wrap( array(
294
+                    'content' => $output,
295
+                    'class'   => $aui_bs5 ? $wrap_class : 'custom-control ' . $wrap_class
296
+                ) );
297
+
298
+                if ( $args['label_type'] == 'horizontal' ) {
299
+                    $input_col = AUI_Component_Helper::get_column_class( $args['label_col'], 'input' );
300
+                    $output    = $label . '<div class="' . $input_col . '">' . $output . '</div>';
301
+                }
302
+            } elseif ( $type == 'password' && $args['password_toggle'] && ! $args['input_group_right'] ) {
303
+
304
+
305
+                // allow password field to toggle view
306
+                $args['input_group_right'] = '<span class="input-group-text c-pointer px-3" 
307 307
 onclick="var $el = jQuery(this).find(\'i\');$el.toggleClass(\'fa-eye fa-eye-slash\');
308 308
 var $eli = jQuery(this).parent().parent().find(\'input\');
309 309
 if($el.hasClass(\'fa-eye\'))
310 310
 {$eli.attr(\'type\',\'text\');}
311 311
 else{$eli.attr(\'type\',\'password\');}"
312 312
 ><i class="far fa-fw fa-eye-slash"></i></span>';
313
-			}
314
-
315
-			// input group wraps
316
-			if ( $args['input_group_left'] || $args['input_group_right'] ) {
317
-				$w100 = strpos( $args['class'], 'w-100' ) !== false ? ' w-100' : '';
318
-				$group_size = $size == 'lg' ? ' input-group-lg' : '';
319
-				$group_size = !$group_size && $size == 'sm' ? ' input-group-sm' : $group_size;
320
-
321
-				if ( $args['input_group_left'] ) {
322
-					$output = self::wrap( array(
323
-						'content'                 => $output,
324
-						'class'                   => $args['input_group_left_inside'] ? 'input-group-inside position-relative' . $w100 . $group_size : 'input-group' . $group_size,
325
-						'input_group_left'        => $args['input_group_left'],
326
-						'input_group_left_inside' => $args['input_group_left_inside']
327
-					) );
328
-				}
329
-				if ( $args['input_group_right'] ) {
330
-					$output = self::wrap( array(
331
-						'content'                  => $output,
332
-						'class'                    => $args['input_group_right_inside'] ? 'input-group-inside position-relative' . $w100 . $group_size : 'input-group' . $group_size,
333
-						'input_group_right'        => $args['input_group_right'],
334
-						'input_group_right_inside' => $args['input_group_right_inside']
335
-					) );
336
-				}
337
-
338
-			}
339
-
340
-			if ( ! $label_after ) {
341
-				$output .= $help_text;
342
-			}
343
-
344
-
345
-			if ( $args['label_type'] == 'horizontal' && $type != 'checkbox' ) {
346
-				$output = self::wrap( array(
347
-					'content' => $output,
348
-					'class'   => AUI_Component_Helper::get_column_class( $args['label_col'], 'input' )
349
-				) );
350
-			}
351
-
352
-			if ( ! $label_after ) {
353
-				$output = $label . $output;
354
-			}
355
-
356
-			// wrap
357
-			if ( ! $args['no_wrap'] ) {
358
-				if ( ! empty( $args['form_group_class'] ) ) {
359
-					$fg_class = esc_attr( $args['form_group_class'] );
360
-				}else{
361
-					$fg_class = $aui_bs5 ? 'mb-3' : 'form-group';
362
-				}
363
-				$form_group_class = $args['label_type'] == 'floating' && $type != 'checkbox' ? 'form-label-group' : $fg_class;
364
-				$wrap_class       = $args['label_type'] == 'horizontal' ? $form_group_class . ' row' : $form_group_class;
365
-				$wrap_class       = ! empty( $args['wrap_class'] ) ? $wrap_class . " " . $args['wrap_class'] : $wrap_class;
366
-				$output           = self::wrap( array(
367
-					'content'         => $output,
368
-					'class'           => $wrap_class,
369
-					'element_require' => $args['element_require'],
370
-					'argument_id'     => $args['id'],
371
-					'wrap_attributes' => $args['wrap_attributes'],
372
-				) );
373
-			}
374
-		}
375
-
376
-		return $output;
377
-	}
378
-
379
-	public static function label( $args = array(), $type = '' ) {
380
-		global $aui_bs5;
381
-		//<label for="exampleInputEmail1">Email address</label>
382
-		$defaults = array(
383
-			'title'      => 'div',
384
-			'for'        => '',
385
-			'class'      => '',
386
-			'label_type' => '', // empty = hidden, top, horizontal
387
-			'label_col'  => '',
388
-		);
389
-
390
-		/**
391
-		 * Parse incoming $args into an array and merge it with $defaults
392
-		 */
393
-		$args   = wp_parse_args( $args, $defaults );
394
-		$output = '';
395
-
396
-		if ( $args['title'] ) {
397
-
398
-			// maybe hide labels //@todo set a global option for visibility class
399
-			if ( $type == 'file' || $type == 'checkbox' || $type == 'radio' || ! empty( $args['label_type'] ) ) {
400
-				$class = $args['class'];
401
-			} else {
402
-				$class = 'sr-only ' . $args['class'];
403
-			}
404
-
405
-			// maybe horizontal
406
-			if ( $args['label_type'] == 'horizontal' && $type != 'checkbox' ) {
407
-				$class .= ' ' . AUI_Component_Helper::get_column_class( $args['label_col'], 'label' ) . ' col-form-label '.$type;
408
-			}
409
-
410
-			if( $aui_bs5 ){ $class .= ' form-label'; }
411
-
412
-			// open
413
-			$output .= '<label ';
414
-
415
-			// for
416
-			if ( ! empty( $args['for'] ) ) {
417
-				$output .= ' for="' . esc_attr( $args['for'] ) . '" ';
418
-			}
419
-
420
-			// class
421
-			$class = $class ? AUI_Component_Helper::esc_classes( $class ) : '';
422
-			$output .= ' class="' . $class . '" ';
423
-
424
-			// close
425
-			$output .= '>';
426
-
427
-
428
-			// title, don't escape fully as can contain html
429
-			if ( ! empty( $args['title'] ) ) {
430
-				$output .= wp_kses_post( $args['title'] );
431
-			}
432
-
433
-			// close wrap
434
-			$output .= '</label>';
435
-
436
-
437
-		}
438
-
439
-
440
-		return $output;
441
-	}
442
-
443
-	/**
444
-	 * Wrap some content in a HTML wrapper.
445
-	 *
446
-	 * @param array $args
447
-	 *
448
-	 * @return string
449
-	 */
450
-	public static function wrap( $args = array() ) {
451
-		global $aui_bs5;
452
-		$defaults = array(
453
-			'type'                     => 'div',
454
-			'class'                    => $aui_bs5 ? 'mb-3' : 'form-group',
455
-			'content'                  => '',
456
-			'input_group_left'         => '',
457
-			'input_group_right'        => '',
458
-			'input_group_left_inside'  => false,
459
-			'input_group_right_inside' => false,
460
-			'element_require'          => '',
461
-			'argument_id'              => '',
462
-			'wrap_attributes'          => array()
463
-		);
464
-
465
-		/**
466
-		 * Parse incoming $args into an array and merge it with $defaults
467
-		 */
468
-		$args   = wp_parse_args( $args, $defaults );
469
-		$output = '';
470
-		if ( $args['type'] ) {
471
-
472
-			// open
473
-			$output .= '<' . sanitize_html_class( $args['type'] );
474
-
475
-			// element require
476
-			if ( ! empty( $args['element_require'] ) ) {
477
-				$output .= AUI_Component_Helper::element_require( $args['element_require'] );
478
-				$args['class'] .= " aui-conditional-field";
479
-			}
480
-
481
-			// argument_id
482
-			if ( ! empty( $args['argument_id'] ) ) {
483
-				$output .= ' data-argument="' . esc_attr( $args['argument_id'] ) . '"';
484
-			}
485
-
486
-			// class
487
-			$class = ! empty( $args['class'] ) ? AUI_Component_Helper::esc_classes( $args['class'] ) : '';
488
-			$output .= ' class="' . $class . '" ';
489
-
490
-			// Attributes
491
-			if ( ! empty( $args['wrap_attributes'] ) ) {
492
-				$output .= AUI_Component_Helper::extra_attributes( $args['wrap_attributes'] );
493
-			}
494
-
495
-			// close wrap
496
-			$output .= ' >';
497
-
498
-
499
-			// Input group left
500
-			if ( ! empty( $args['input_group_left'] ) ) {
501
-				$position_class   = ! empty( $args['input_group_left_inside'] ) ? 'position-absolute h-100' : '';
502
-				$input_group_left = strpos( $args['input_group_left'], '<' ) !== false ? $args['input_group_left'] : '<span class="input-group-text">' . $args['input_group_left'] . '</span>';
503
-				$output .= $aui_bs5 ? $input_group_left : '<div class="input-group-prepend ' . $position_class . '">' . $input_group_left . '</div>';
313
+            }
314
+
315
+            // input group wraps
316
+            if ( $args['input_group_left'] || $args['input_group_right'] ) {
317
+                $w100 = strpos( $args['class'], 'w-100' ) !== false ? ' w-100' : '';
318
+                $group_size = $size == 'lg' ? ' input-group-lg' : '';
319
+                $group_size = !$group_size && $size == 'sm' ? ' input-group-sm' : $group_size;
320
+
321
+                if ( $args['input_group_left'] ) {
322
+                    $output = self::wrap( array(
323
+                        'content'                 => $output,
324
+                        'class'                   => $args['input_group_left_inside'] ? 'input-group-inside position-relative' . $w100 . $group_size : 'input-group' . $group_size,
325
+                        'input_group_left'        => $args['input_group_left'],
326
+                        'input_group_left_inside' => $args['input_group_left_inside']
327
+                    ) );
328
+                }
329
+                if ( $args['input_group_right'] ) {
330
+                    $output = self::wrap( array(
331
+                        'content'                  => $output,
332
+                        'class'                    => $args['input_group_right_inside'] ? 'input-group-inside position-relative' . $w100 . $group_size : 'input-group' . $group_size,
333
+                        'input_group_right'        => $args['input_group_right'],
334
+                        'input_group_right_inside' => $args['input_group_right_inside']
335
+                    ) );
336
+                }
337
+
338
+            }
339
+
340
+            if ( ! $label_after ) {
341
+                $output .= $help_text;
342
+            }
343
+
344
+
345
+            if ( $args['label_type'] == 'horizontal' && $type != 'checkbox' ) {
346
+                $output = self::wrap( array(
347
+                    'content' => $output,
348
+                    'class'   => AUI_Component_Helper::get_column_class( $args['label_col'], 'input' )
349
+                ) );
350
+            }
351
+
352
+            if ( ! $label_after ) {
353
+                $output = $label . $output;
354
+            }
355
+
356
+            // wrap
357
+            if ( ! $args['no_wrap'] ) {
358
+                if ( ! empty( $args['form_group_class'] ) ) {
359
+                    $fg_class = esc_attr( $args['form_group_class'] );
360
+                }else{
361
+                    $fg_class = $aui_bs5 ? 'mb-3' : 'form-group';
362
+                }
363
+                $form_group_class = $args['label_type'] == 'floating' && $type != 'checkbox' ? 'form-label-group' : $fg_class;
364
+                $wrap_class       = $args['label_type'] == 'horizontal' ? $form_group_class . ' row' : $form_group_class;
365
+                $wrap_class       = ! empty( $args['wrap_class'] ) ? $wrap_class . " " . $args['wrap_class'] : $wrap_class;
366
+                $output           = self::wrap( array(
367
+                    'content'         => $output,
368
+                    'class'           => $wrap_class,
369
+                    'element_require' => $args['element_require'],
370
+                    'argument_id'     => $args['id'],
371
+                    'wrap_attributes' => $args['wrap_attributes'],
372
+                ) );
373
+            }
374
+        }
375
+
376
+        return $output;
377
+    }
378
+
379
+    public static function label( $args = array(), $type = '' ) {
380
+        global $aui_bs5;
381
+        //<label for="exampleInputEmail1">Email address</label>
382
+        $defaults = array(
383
+            'title'      => 'div',
384
+            'for'        => '',
385
+            'class'      => '',
386
+            'label_type' => '', // empty = hidden, top, horizontal
387
+            'label_col'  => '',
388
+        );
389
+
390
+        /**
391
+         * Parse incoming $args into an array and merge it with $defaults
392
+         */
393
+        $args   = wp_parse_args( $args, $defaults );
394
+        $output = '';
395
+
396
+        if ( $args['title'] ) {
397
+
398
+            // maybe hide labels //@todo set a global option for visibility class
399
+            if ( $type == 'file' || $type == 'checkbox' || $type == 'radio' || ! empty( $args['label_type'] ) ) {
400
+                $class = $args['class'];
401
+            } else {
402
+                $class = 'sr-only ' . $args['class'];
403
+            }
404
+
405
+            // maybe horizontal
406
+            if ( $args['label_type'] == 'horizontal' && $type != 'checkbox' ) {
407
+                $class .= ' ' . AUI_Component_Helper::get_column_class( $args['label_col'], 'label' ) . ' col-form-label '.$type;
408
+            }
409
+
410
+            if( $aui_bs5 ){ $class .= ' form-label'; }
411
+
412
+            // open
413
+            $output .= '<label ';
414
+
415
+            // for
416
+            if ( ! empty( $args['for'] ) ) {
417
+                $output .= ' for="' . esc_attr( $args['for'] ) . '" ';
418
+            }
419
+
420
+            // class
421
+            $class = $class ? AUI_Component_Helper::esc_classes( $class ) : '';
422
+            $output .= ' class="' . $class . '" ';
423
+
424
+            // close
425
+            $output .= '>';
426
+
427
+
428
+            // title, don't escape fully as can contain html
429
+            if ( ! empty( $args['title'] ) ) {
430
+                $output .= wp_kses_post( $args['title'] );
431
+            }
432
+
433
+            // close wrap
434
+            $output .= '</label>';
435
+
436
+
437
+        }
438
+
439
+
440
+        return $output;
441
+    }
442
+
443
+    /**
444
+     * Wrap some content in a HTML wrapper.
445
+     *
446
+     * @param array $args
447
+     *
448
+     * @return string
449
+     */
450
+    public static function wrap( $args = array() ) {
451
+        global $aui_bs5;
452
+        $defaults = array(
453
+            'type'                     => 'div',
454
+            'class'                    => $aui_bs5 ? 'mb-3' : 'form-group',
455
+            'content'                  => '',
456
+            'input_group_left'         => '',
457
+            'input_group_right'        => '',
458
+            'input_group_left_inside'  => false,
459
+            'input_group_right_inside' => false,
460
+            'element_require'          => '',
461
+            'argument_id'              => '',
462
+            'wrap_attributes'          => array()
463
+        );
464
+
465
+        /**
466
+         * Parse incoming $args into an array and merge it with $defaults
467
+         */
468
+        $args   = wp_parse_args( $args, $defaults );
469
+        $output = '';
470
+        if ( $args['type'] ) {
471
+
472
+            // open
473
+            $output .= '<' . sanitize_html_class( $args['type'] );
474
+
475
+            // element require
476
+            if ( ! empty( $args['element_require'] ) ) {
477
+                $output .= AUI_Component_Helper::element_require( $args['element_require'] );
478
+                $args['class'] .= " aui-conditional-field";
479
+            }
480
+
481
+            // argument_id
482
+            if ( ! empty( $args['argument_id'] ) ) {
483
+                $output .= ' data-argument="' . esc_attr( $args['argument_id'] ) . '"';
484
+            }
485
+
486
+            // class
487
+            $class = ! empty( $args['class'] ) ? AUI_Component_Helper::esc_classes( $args['class'] ) : '';
488
+            $output .= ' class="' . $class . '" ';
489
+
490
+            // Attributes
491
+            if ( ! empty( $args['wrap_attributes'] ) ) {
492
+                $output .= AUI_Component_Helper::extra_attributes( $args['wrap_attributes'] );
493
+            }
494
+
495
+            // close wrap
496
+            $output .= ' >';
497
+
498
+
499
+            // Input group left
500
+            if ( ! empty( $args['input_group_left'] ) ) {
501
+                $position_class   = ! empty( $args['input_group_left_inside'] ) ? 'position-absolute h-100' : '';
502
+                $input_group_left = strpos( $args['input_group_left'], '<' ) !== false ? $args['input_group_left'] : '<span class="input-group-text">' . $args['input_group_left'] . '</span>';
503
+                $output .= $aui_bs5 ? $input_group_left : '<div class="input-group-prepend ' . $position_class . '">' . $input_group_left . '</div>';
504 504
 //				$output .= '<div class="input-group-prepend ' . $position_class . '">' . $input_group_left . '</div>';
505
-			}
505
+            }
506 506
 
507
-			// content
508
-			$output .= $args['content'];
507
+            // content
508
+            $output .= $args['content'];
509 509
 
510
-			// Input group right
511
-			if ( ! empty( $args['input_group_right'] ) ) {
512
-				$position_class    = ! empty( $args['input_group_right_inside'] ) ? 'position-absolute h-100' : '';
513
-				$input_group_right = strpos( $args['input_group_right'], '<' ) !== false ? $args['input_group_right'] : '<span class="input-group-text">' . $args['input_group_right'] . '</span>';
514
-				$output .= $aui_bs5 ? str_replace( 'input-group-text','input-group-text top-0 end-0', $input_group_right ) : '<div class="input-group-append ' . $position_class . '" style="top:0;right:0;">' . $input_group_right . '</div>';
510
+            // Input group right
511
+            if ( ! empty( $args['input_group_right'] ) ) {
512
+                $position_class    = ! empty( $args['input_group_right_inside'] ) ? 'position-absolute h-100' : '';
513
+                $input_group_right = strpos( $args['input_group_right'], '<' ) !== false ? $args['input_group_right'] : '<span class="input-group-text">' . $args['input_group_right'] . '</span>';
514
+                $output .= $aui_bs5 ? str_replace( 'input-group-text','input-group-text top-0 end-0', $input_group_right ) : '<div class="input-group-append ' . $position_class . '" style="top:0;right:0;">' . $input_group_right . '</div>';
515 515
 //				$output .= '<div class="input-group-append ' . $position_class . '" style="top:0;right:0;">' . $input_group_right . '</div>';
516
-			}
517
-
518
-
519
-			// close wrap
520
-			$output .= '</' . sanitize_html_class( $args['type'] ) . '>';
521
-
522
-
523
-		} else {
524
-			$output = $args['content'];
525
-		}
526
-
527
-		return $output;
528
-	}
529
-
530
-	/**
531
-	 * Build the component.
532
-	 *
533
-	 * @param array $args
534
-	 *
535
-	 * @return string The rendered component.
536
-	 */
537
-	public static function textarea( $args = array() ) {
538
-		global $aui_bs5;
539
-
540
-		$defaults = array(
541
-			'name'               => '',
542
-			'class'              => '',
543
-			'wrap_class'         => '',
544
-			'id'                 => '',
545
-			'placeholder'        => '',
546
-			'title'              => '',
547
-			'value'              => '',
548
-			'required'           => false,
549
-			'label'              => '',
550
-			'label_after'        => false,
551
-			'label_class'        => '',
552
-			'label_type'         => '',
553
-			'label_col'          => '',
554
-			// sets the label type, default: hidden. Options: hidden, top, horizontal, floating
555
-			'input_group_right'        => '',
556
-			'input_group_left'         => '',
557
-			'input_group_right_inside' => false,
558
-			'form_group_class'      => '',
559
-			'help_text'          => '',
560
-			'validation_text'    => '',
561
-			'validation_pattern' => '',
562
-			'no_wrap'            => false,
563
-			'rows'               => '',
564
-			'wysiwyg'            => false,
565
-			'allow_tags'         => false,
566
-			// Allow HTML tags
567
-			'element_require'    => '',
568
-			// [%element_id%] == "1"
569
-			'extra_attributes'   => array(),
570
-			// an array of extra attributes
571
-			'wrap_attributes'    => array(),
572
-		);
573
-
574
-		/**
575
-		 * Parse incoming $args into an array and merge it with $defaults
576
-		 */
577
-		$args   = wp_parse_args( $args, $defaults );
578
-		$output = '';
579
-		$label = '';
580
-
581
-		// hidden label option needs to be empty
582
-		$args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
583
-
584
-		// floating labels don't work with wysiwyg so set it as top
585
-		if ( $args['label_type'] == 'floating' && ! empty( $args['wysiwyg'] ) ) {
586
-			$args['label_type'] = 'top';
587
-		}
588
-
589
-		$label_after = $args['label_after'];
590
-
591
-		// floating labels need label after
592
-		if ( $args['label_type'] == 'floating' && empty( $args['wysiwyg'] ) ) {
593
-			$label_after         = true;
594
-			$args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
595
-		}
596
-
597
-		// label
598
-		if ( ! empty( $args['label'] ) && is_array( $args['label'] ) ) {
599
-		} elseif ( ! empty( $args['label'] ) && ! $label_after ) {
600
-			$label_args = array(
601
-				'title'      => $args['label'],
602
-				'for'        => $args['id'],
603
-				'class'      => $args['label_class'] . " ",
604
-				'label_type' => $args['label_type'],
605
-				'label_col'  => $args['label_col']
606
-			);
607
-			$label .= self::label( $label_args );
608
-		}
609
-
610
-		// maybe horizontal label
611
-		if ( $args['label_type'] == 'horizontal' ) {
612
-			$input_col = AUI_Component_Helper::get_column_class( $args['label_col'], 'input' );
613
-			$label .= '<div class="' . $input_col . '">';
614
-		}
615
-
616
-		if ( ! empty( $args['wysiwyg'] ) ) {
617
-			ob_start();
618
-			$content   = $args['value'];
619
-			$editor_id = ! empty( $args['id'] ) ? sanitize_html_class( $args['id'] ) : 'wp_editor';
620
-			$settings  = array(
621
-				'textarea_rows' => ! empty( absint( $args['rows'] ) ) ? absint( $args['rows'] ) : 4,
622
-				'quicktags'     => false,
623
-				'media_buttons' => false,
624
-				'editor_class'  => 'form-control',
625
-				'textarea_name' => ! empty( $args['name'] ) ? sanitize_html_class( $args['name'] ) : sanitize_html_class( $args['id'] ),
626
-				'teeny'         => true,
627
-			);
628
-
629
-			// maybe set settings if array
630
-			if ( is_array( $args['wysiwyg'] ) ) {
631
-				$settings = wp_parse_args( $args['wysiwyg'], $settings );
632
-			}
633
-
634
-			wp_editor( $content, $editor_id, $settings );
635
-			$output .= ob_get_clean();
636
-		} else {
637
-
638
-			// open
639
-			$output .= '<textarea ';
640
-
641
-			// name
642
-			if ( ! empty( $args['name'] ) ) {
643
-				$output .= ' name="' . esc_attr( $args['name'] ) . '" ';
644
-			}
645
-
646
-			// id
647
-			if ( ! empty( $args['id'] ) ) {
648
-				$output .= ' id="' . sanitize_html_class( $args['id'] ) . '" ';
649
-			}
650
-
651
-			// placeholder
652
-			if ( isset( $args['placeholder'] ) && '' != $args['placeholder'] ) {
653
-				$output .= ' placeholder="' . esc_attr( $args['placeholder'] ) . '" ';
654
-			}
655
-
656
-			// title
657
-			if ( ! empty( $args['title'] ) ) {
658
-				$output .= ' title="' . esc_attr( $args['title'] ) . '" ';
659
-			}
660
-
661
-			// validation text
662
-			if ( ! empty( $args['validation_text'] ) ) {
663
-				$output .= ' oninvalid="setCustomValidity(\'' . esc_attr( addslashes( $args['validation_text'] ) ) . '\')" ';
664
-				$output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" ';
665
-			}
666
-
667
-			// validation_pattern
668
-			if ( ! empty( $args['validation_pattern'] ) ) {
669
-				$output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" ';
670
-			}
671
-
672
-			// required
673
-			if ( ! empty( $args['required'] ) ) {
674
-				$output .= ' required ';
675
-			}
676
-
677
-			// rows
678
-			if ( ! empty( $args['rows'] ) ) {
679
-				$output .= ' rows="' . absint( $args['rows'] ) . '" ';
680
-			}
681
-
682
-
683
-			// class
684
-			$class = ! empty( $args['class'] ) ? $args['class'] : '';
685
-			$output .= ' class="form-control ' . $class . '" ';
686
-
687
-			// extra attributes
688
-			if ( ! empty( $args['extra_attributes'] ) ) {
689
-				$output .= AUI_Component_Helper::extra_attributes( $args['extra_attributes'] );
690
-			}
691
-
692
-			// close tag
693
-			$output .= ' >';
694
-
695
-			// value
696
-			if ( ! empty( $args['value'] ) ) {
697
-				if ( ! empty( $args['allow_tags'] ) ) {
698
-					$output .= AUI_Component_Helper::sanitize_html_field( $args['value'], $args ); // Sanitize HTML.
699
-				} else {
700
-					$output .= AUI_Component_Helper::sanitize_textarea_field( $args['value'] );
701
-				}
702
-			}
703
-
704
-			// closing tag
705
-			$output .= '</textarea>';
706
-
707
-
708
-			// input group wraps
709
-			if ( $args['input_group_left'] || $args['input_group_right'] ) {
710
-				$w100 = strpos( $args['class'], 'w-100' ) !== false ? ' w-100' : '';
711
-				if ( $args['input_group_left'] ) {
712
-					$output = self::wrap( array(
713
-						'content'                 => $output,
714
-						'class'                   => $args['input_group_left_inside'] ? 'input-group-inside position-relative' . $w100 : 'input-group',
715
-						'input_group_left'        => $args['input_group_left'],
716
-						'input_group_left_inside' => $args['input_group_left_inside']
717
-					) );
718
-				}
719
-				if ( $args['input_group_right'] ) {
720
-					$output = self::wrap( array(
721
-						'content'                  => $output,
722
-						'class'                    => $args['input_group_right_inside'] ? 'input-group-inside position-relative' . $w100 : 'input-group',
723
-						'input_group_right'        => $args['input_group_right'],
724
-						'input_group_right_inside' => $args['input_group_right_inside']
725
-					) );
726
-				}
727
-
728
-			}
729
-
730
-
731
-		}
732
-
733
-		if ( ! empty( $args['label'] ) && $label_after ) {
734
-			$label_args = array(
735
-				'title'      => $args['label'],
736
-				'for'        => $args['id'],
737
-				'class'      => $args['label_class'] . " ",
738
-				'label_type' => $args['label_type'],
739
-				'label_col'  => $args['label_col']
740
-			);
741
-			$output .= self::label( $label_args );
742
-		}
743
-
744
-		// help text
745
-		if ( ! empty( $args['help_text'] ) ) {
746
-			$output .= AUI_Component_Helper::help_text( $args['help_text'] );
747
-		}
748
-
749
-		if ( ! $label_after ) {
750
-			$output = $label . $output;
751
-		}
752
-
753
-		// maybe horizontal label
754
-		if ( $args['label_type'] == 'horizontal' ) {
755
-			$output .= '</div>';
756
-		}
757
-
758
-
759
-		// wrap
760
-		if ( ! $args['no_wrap'] ) {
761
-			if ( ! empty( $args['form_group_class'] ) ) {
762
-				$fg_class = esc_attr( $args['form_group_class'] );
763
-			}else{
764
-				$fg_class = $aui_bs5 ? 'mb-3' : 'form-group';
765
-			}
766
-			$form_group_class = $args['label_type'] == 'floating' ? 'form-label-group' : $fg_class;
767
-			$wrap_class       = $args['label_type'] == 'horizontal' ? $form_group_class . ' row' : $form_group_class;
768
-			$wrap_class       = ! empty( $args['wrap_class'] ) ? $wrap_class . " " . $args['wrap_class'] : $wrap_class;
769
-			$output           = self::wrap( array(
770
-				'content'         => $output,
771
-				'class'           => $wrap_class,
772
-				'element_require' => $args['element_require'],
773
-				'argument_id'     => $args['id'],
774
-				'wrap_attributes' => $args['wrap_attributes'],
775
-			) );
776
-		}
777
-
778
-
779
-		return $output;
780
-	}
781
-
782
-	/**
783
-	 * Build the component.
784
-	 *
785
-	 * @param array $args
786
-	 *
787
-	 * @return string The rendered component.
788
-	 */
789
-	public static function select( $args = array() ) {
790
-		global $aui_bs5, $aui_has_select2, $aui_select2_enqueued;
791
-
792
-		$defaults = array(
793
-			'class'            => '',
794
-			'wrap_class'       => '',
795
-			'id'               => '',
796
-			'title'            => '',
797
-			'value'            => '',
798
-			// can be an array or a string
799
-			'required'         => false,
800
-			'label'            => '',
801
-			'label_after'      => false,
802
-			'label_type'       => '',
803
-			'label_col'        => '',
804
-			// sets the label type, default: hidden. Options: hidden, top, horizontal, floating
805
-			'label_class'      => '',
806
-			'help_text'        => '',
807
-			'placeholder'      => '',
808
-			'options'          => array(),
809
-			// array or string
810
-			'icon'             => '',
811
-			'multiple'         => false,
812
-			'select2'          => false,
813
-			'no_wrap'          => false,
814
-			'input_group_right' => '',
815
-			'input_group_left' => '',
816
-			'input_group_right_inside' => false, // forces the input group inside the input
817
-			'input_group_left_inside' => false, // forces the input group inside the input
818
-			'form_group_class'  => '',
819
-			'element_require'  => '',
820
-			// [%element_id%] == "1"
821
-			'extra_attributes' => array(),
822
-			// an array of extra attributes
823
-			'wrap_attributes'  => array(),
824
-		);
825
-
826
-		/**
827
-		 * Parse incoming $args into an array and merge it with $defaults
828
-		 */
829
-		$args   = wp_parse_args( $args, $defaults );
830
-		$output = '';
831
-
832
-		// for now lets hide floating labels
833
-		if ( $args['label_type'] == 'floating' ) {
834
-			$args['label_type'] = 'hidden';
835
-		}
836
-
837
-		// hidden label option needs to be empty
838
-		$args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
839
-
840
-
841
-		$label_after = $args['label_after'];
842
-
843
-		// floating labels need label after
844
-		if ( $args['label_type'] == 'floating' ) {
845
-			$label_after         = true;
846
-			$args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
847
-		}
848
-
849
-		// Maybe setup select2
850
-		$is_select2 = false;
851
-		if ( ! empty( $args['select2'] ) ) {
852
-			$args['class'] .= ' aui-select2';
853
-			$is_select2 = true;
854
-		} elseif ( strpos( $args['class'], 'aui-select2' ) !== false ) {
855
-			$is_select2 = true;
856
-		}
857
-
858
-		if ( $is_select2 && ! $aui_has_select2 ) {
859
-			$aui_has_select2 = true;
860
-			$conditional_select2 = apply_filters( 'aui_is_conditional_select2', true );
861
-
862
-			// Enqueue the script,
863
-			if ( empty( $aui_select2_enqueued ) && $conditional_select2 === true ) {
864
-				$aui_select2_enqueued = true;
865
-
866
-				$aui_settings = AyeCode_UI_Settings::instance();
867
-				$aui_settings->enqueue_select2();
868
-			}
869
-		}
870
-
871
-		// select2 tags
872
-		if ( ! empty( $args['select2'] ) && $args['select2'] === 'tags' ) { // triple equals needed here for some reason
873
-			$args['data-tags']             = 'true';
874
-			$args['data-token-separators'] = "[',']";
875
-			$args['multiple']              = true;
876
-		}
877
-
878
-		// select2 placeholder
879
-		if ( $is_select2 && isset( $args['placeholder'] ) && '' != $args['placeholder'] && empty( $args['data-placeholder'] ) ) {
880
-			$args['data-placeholder'] = esc_attr( $args['placeholder'] );
881
-			$args['data-allow-clear'] = isset( $args['data-allow-clear'] ) ? (bool) $args['data-allow-clear'] : true;
882
-		}
883
-
884
-		// Set hidden input to save empty value for multiselect.
885
-		if ( ! empty( $args['multiple'] ) && ! empty( $args['name'] ) ) {
886
-			$output .= '<input type="hidden" ' . AUI_Component_Helper::name( $args['name'] ) . ' value="" data-ignore-rule/>';
887
-		}
888
-
889
-		// open/type
890
-		$output .= '<select ';
891
-
892
-		// style
893
-		if ( $is_select2 && !($args['input_group_left'] || $args['input_group_right'])) {
894
-			$output .= " style='width:100%;' ";
895
-		}
896
-
897
-		// element require
898
-		if ( ! empty( $args['element_require'] ) ) {
899
-			$output .= AUI_Component_Helper::element_require( $args['element_require'] );
900
-			$args['class'] .= " aui-conditional-field";
901
-		}
902
-
903
-		// class
904
-		$class = ! empty( $args['class'] ) ? $args['class'] : '';
905
-		$select_class = $aui_bs5 ? 'form-select ' : 'custom-select ';
906
-		$output .= AUI_Component_Helper::class_attr( $select_class . $class );
907
-
908
-		// name
909
-		if ( ! empty( $args['name'] ) ) {
910
-			$output .= AUI_Component_Helper::name( $args['name'], $args['multiple'] );
911
-		}
912
-
913
-		// id
914
-		if ( ! empty( $args['id'] ) ) {
915
-			$output .= AUI_Component_Helper::id( $args['id'] );
916
-		}
917
-
918
-		// title
919
-		if ( ! empty( $args['title'] ) ) {
920
-			$output .= AUI_Component_Helper::title( $args['title'] );
921
-		}
922
-
923
-		// data-attributes
924
-		$output .= AUI_Component_Helper::data_attributes( $args );
925
-
926
-		// aria-attributes
927
-		$output .= AUI_Component_Helper::aria_attributes( $args );
928
-
929
-		// extra attributes
930
-		if ( ! empty( $args['extra_attributes'] ) ) {
931
-			$output .= AUI_Component_Helper::extra_attributes( $args['extra_attributes'] );
932
-		}
933
-
934
-		// required
935
-		if ( ! empty( $args['required'] ) ) {
936
-			$output .= ' required ';
937
-		}
938
-
939
-		// multiple
940
-		if ( ! empty( $args['multiple'] ) ) {
941
-			$output .= ' multiple ';
942
-		}
943
-
944
-		// close opening tag
945
-		$output .= ' >';
946
-
947
-		// placeholder
948
-		if ( isset( $args['placeholder'] ) && '' != $args['placeholder'] && ! $is_select2 ) {
949
-			$output .= '<option value="" disabled selected hidden>' . esc_attr( $args['placeholder'] ) . '</option>';
950
-		} elseif ( $is_select2 && ! empty( $args['placeholder'] ) ) {
951
-			$output .= "<option></option>"; // select2 needs an empty select to fill the placeholder
952
-		}
953
-
954
-		// Options
955
-		if ( ! empty( $args['options'] ) ) {
956
-
957
-			if ( ! is_array( $args['options'] ) ) {
958
-				$output .= $args['options']; // not the preferred way but an option
959
-			} else {
960
-				foreach ( $args['options'] as $val => $name ) {
961
-					$selected = '';
962
-					if ( is_array( $name ) ) {
963
-						if ( isset( $name['optgroup'] ) && ( $name['optgroup'] == 'start' || $name['optgroup'] == 'end' ) ) {
964
-							$option_label = isset( $name['label'] ) ? $name['label'] : '';
965
-
966
-							$output .= $name['optgroup'] == 'start' ? '<optgroup label="' . esc_attr( $option_label ) . '">' : '</optgroup>';
967
-						} else {
968
-							$option_label = isset( $name['label'] ) ? $name['label'] : '';
969
-							$option_value = isset( $name['value'] ) ? $name['value'] : '';
970
-							$extra_attributes = !empty($name['extra_attributes']) ? AUI_Component_Helper::extra_attributes( $name['extra_attributes'] ) : '';
971
-							if ( ! empty( $args['multiple'] ) && ! empty( $args['value'] ) && is_array( $args['value'] ) ) {
972
-								$selected = in_array( $option_value, stripslashes_deep( $args['value'] ) ) ? "selected" : "";
973
-							} elseif ( ! empty( $args['value'] ) ) {
974
-								$selected = selected( $option_value, stripslashes_deep( $args['value'] ), false );
975
-							} elseif ( empty( $args['value'] ) && $args['value'] === $option_value ) {
976
-								$selected = selected( $option_value, $args['value'], false );
977
-							}
978
-
979
-							$output .= '<option value="' . esc_attr( $option_value ) . '" ' . $selected . ' '.$extra_attributes .'>' . $option_label . '</option>';
980
-						}
981
-					} else {
982
-						if ( ! empty( $args['value'] ) ) {
983
-							if ( is_array( $args['value'] ) ) {
984
-								$selected = in_array( $val, $args['value'] ) ? 'selected="selected"' : '';
985
-							} elseif ( ! empty( $args['value'] ) ) {
986
-								$selected = selected( $args['value'], $val, false );
987
-							}
988
-						} elseif ( $args['value'] === $val ) {
989
-							$selected = selected( $args['value'], $val, false );
990
-						}
991
-						$output .= '<option value="' . esc_attr( $val ) . '" ' . $selected . '>' . esc_attr( $name ) . '</option>';
992
-					}
993
-				}
994
-			}
995
-
996
-		}
997
-
998
-		// closing tag
999
-		$output .= '</select>';
1000
-
1001
-		$label = '';
1002
-		$help_text = '';
1003
-		// label
1004
-		if ( ! empty( $args['label'] ) && is_array( $args['label'] ) ) {
1005
-		} elseif ( ! empty( $args['label'] ) && ! $label_after ) {
1006
-			$label_args = array(
1007
-				'title'      => $args['label'],
1008
-				'for'        => $args['id'],
1009
-				'class'      => $args['label_class'] . " ",
1010
-				'label_type' => $args['label_type'],
1011
-				'label_col'  => $args['label_col']
1012
-			);
1013
-			$label = self::label( $label_args );
1014
-		}
1015
-
1016
-		// help text
1017
-		if ( ! empty( $args['help_text'] ) ) {
1018
-			$help_text = AUI_Component_Helper::help_text( $args['help_text'] );
1019
-		}
1020
-
1021
-		// input group wraps
1022
-		if ( $args['input_group_left'] || $args['input_group_right'] ) {
1023
-			$w100 = strpos( $args['class'], 'w-100' ) !== false ? ' w-100' : '';
1024
-			if ( $args['input_group_left'] ) {
1025
-				$output = self::wrap( array(
1026
-					'content'                 => $output,
1027
-					'class'                   => $args['input_group_left_inside'] ? 'input-group-inside position-relative' . $w100 : 'input-group',
1028
-					'input_group_left'        => $args['input_group_left'],
1029
-					'input_group_left_inside' => $args['input_group_left_inside']
1030
-				) );
1031
-			}
1032
-			if ( $args['input_group_right'] ) {
1033
-				$output = self::wrap( array(
1034
-					'content'                  => $output,
1035
-					'class'                    => $args['input_group_right_inside'] ? 'input-group-inside position-relative' . $w100 : 'input-group',
1036
-					'input_group_right'        => $args['input_group_right'],
1037
-					'input_group_right_inside' => $args['input_group_right_inside']
1038
-				) );
1039
-			}
1040
-
1041
-		}
1042
-
1043
-		if ( ! $label_after ) {
1044
-			$output .= $help_text;
1045
-		}
1046
-
1047
-
1048
-		if ( $args['label_type'] == 'horizontal' ) {
1049
-			$output = self::wrap( array(
1050
-				'content' => $output,
1051
-				'class'   => AUI_Component_Helper::get_column_class( $args['label_col'], 'input' )
1052
-			) );
1053
-		}
1054
-
1055
-		if ( ! $label_after ) {
1056
-			$output = $label . $output;
1057
-		}
1058
-
1059
-		// maybe horizontal label
516
+            }
517
+
518
+
519
+            // close wrap
520
+            $output .= '</' . sanitize_html_class( $args['type'] ) . '>';
521
+
522
+
523
+        } else {
524
+            $output = $args['content'];
525
+        }
526
+
527
+        return $output;
528
+    }
529
+
530
+    /**
531
+     * Build the component.
532
+     *
533
+     * @param array $args
534
+     *
535
+     * @return string The rendered component.
536
+     */
537
+    public static function textarea( $args = array() ) {
538
+        global $aui_bs5;
539
+
540
+        $defaults = array(
541
+            'name'               => '',
542
+            'class'              => '',
543
+            'wrap_class'         => '',
544
+            'id'                 => '',
545
+            'placeholder'        => '',
546
+            'title'              => '',
547
+            'value'              => '',
548
+            'required'           => false,
549
+            'label'              => '',
550
+            'label_after'        => false,
551
+            'label_class'        => '',
552
+            'label_type'         => '',
553
+            'label_col'          => '',
554
+            // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
555
+            'input_group_right'        => '',
556
+            'input_group_left'         => '',
557
+            'input_group_right_inside' => false,
558
+            'form_group_class'      => '',
559
+            'help_text'          => '',
560
+            'validation_text'    => '',
561
+            'validation_pattern' => '',
562
+            'no_wrap'            => false,
563
+            'rows'               => '',
564
+            'wysiwyg'            => false,
565
+            'allow_tags'         => false,
566
+            // Allow HTML tags
567
+            'element_require'    => '',
568
+            // [%element_id%] == "1"
569
+            'extra_attributes'   => array(),
570
+            // an array of extra attributes
571
+            'wrap_attributes'    => array(),
572
+        );
573
+
574
+        /**
575
+         * Parse incoming $args into an array and merge it with $defaults
576
+         */
577
+        $args   = wp_parse_args( $args, $defaults );
578
+        $output = '';
579
+        $label = '';
580
+
581
+        // hidden label option needs to be empty
582
+        $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
583
+
584
+        // floating labels don't work with wysiwyg so set it as top
585
+        if ( $args['label_type'] == 'floating' && ! empty( $args['wysiwyg'] ) ) {
586
+            $args['label_type'] = 'top';
587
+        }
588
+
589
+        $label_after = $args['label_after'];
590
+
591
+        // floating labels need label after
592
+        if ( $args['label_type'] == 'floating' && empty( $args['wysiwyg'] ) ) {
593
+            $label_after         = true;
594
+            $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
595
+        }
596
+
597
+        // label
598
+        if ( ! empty( $args['label'] ) && is_array( $args['label'] ) ) {
599
+        } elseif ( ! empty( $args['label'] ) && ! $label_after ) {
600
+            $label_args = array(
601
+                'title'      => $args['label'],
602
+                'for'        => $args['id'],
603
+                'class'      => $args['label_class'] . " ",
604
+                'label_type' => $args['label_type'],
605
+                'label_col'  => $args['label_col']
606
+            );
607
+            $label .= self::label( $label_args );
608
+        }
609
+
610
+        // maybe horizontal label
611
+        if ( $args['label_type'] == 'horizontal' ) {
612
+            $input_col = AUI_Component_Helper::get_column_class( $args['label_col'], 'input' );
613
+            $label .= '<div class="' . $input_col . '">';
614
+        }
615
+
616
+        if ( ! empty( $args['wysiwyg'] ) ) {
617
+            ob_start();
618
+            $content   = $args['value'];
619
+            $editor_id = ! empty( $args['id'] ) ? sanitize_html_class( $args['id'] ) : 'wp_editor';
620
+            $settings  = array(
621
+                'textarea_rows' => ! empty( absint( $args['rows'] ) ) ? absint( $args['rows'] ) : 4,
622
+                'quicktags'     => false,
623
+                'media_buttons' => false,
624
+                'editor_class'  => 'form-control',
625
+                'textarea_name' => ! empty( $args['name'] ) ? sanitize_html_class( $args['name'] ) : sanitize_html_class( $args['id'] ),
626
+                'teeny'         => true,
627
+            );
628
+
629
+            // maybe set settings if array
630
+            if ( is_array( $args['wysiwyg'] ) ) {
631
+                $settings = wp_parse_args( $args['wysiwyg'], $settings );
632
+            }
633
+
634
+            wp_editor( $content, $editor_id, $settings );
635
+            $output .= ob_get_clean();
636
+        } else {
637
+
638
+            // open
639
+            $output .= '<textarea ';
640
+
641
+            // name
642
+            if ( ! empty( $args['name'] ) ) {
643
+                $output .= ' name="' . esc_attr( $args['name'] ) . '" ';
644
+            }
645
+
646
+            // id
647
+            if ( ! empty( $args['id'] ) ) {
648
+                $output .= ' id="' . sanitize_html_class( $args['id'] ) . '" ';
649
+            }
650
+
651
+            // placeholder
652
+            if ( isset( $args['placeholder'] ) && '' != $args['placeholder'] ) {
653
+                $output .= ' placeholder="' . esc_attr( $args['placeholder'] ) . '" ';
654
+            }
655
+
656
+            // title
657
+            if ( ! empty( $args['title'] ) ) {
658
+                $output .= ' title="' . esc_attr( $args['title'] ) . '" ';
659
+            }
660
+
661
+            // validation text
662
+            if ( ! empty( $args['validation_text'] ) ) {
663
+                $output .= ' oninvalid="setCustomValidity(\'' . esc_attr( addslashes( $args['validation_text'] ) ) . '\')" ';
664
+                $output .= ' onchange="try{setCustomValidity(\'\')}catch(e){}" ';
665
+            }
666
+
667
+            // validation_pattern
668
+            if ( ! empty( $args['validation_pattern'] ) ) {
669
+                $output .= ' pattern="' . esc_attr( $args['validation_pattern'] ) . '" ';
670
+            }
671
+
672
+            // required
673
+            if ( ! empty( $args['required'] ) ) {
674
+                $output .= ' required ';
675
+            }
676
+
677
+            // rows
678
+            if ( ! empty( $args['rows'] ) ) {
679
+                $output .= ' rows="' . absint( $args['rows'] ) . '" ';
680
+            }
681
+
682
+
683
+            // class
684
+            $class = ! empty( $args['class'] ) ? $args['class'] : '';
685
+            $output .= ' class="form-control ' . $class . '" ';
686
+
687
+            // extra attributes
688
+            if ( ! empty( $args['extra_attributes'] ) ) {
689
+                $output .= AUI_Component_Helper::extra_attributes( $args['extra_attributes'] );
690
+            }
691
+
692
+            // close tag
693
+            $output .= ' >';
694
+
695
+            // value
696
+            if ( ! empty( $args['value'] ) ) {
697
+                if ( ! empty( $args['allow_tags'] ) ) {
698
+                    $output .= AUI_Component_Helper::sanitize_html_field( $args['value'], $args ); // Sanitize HTML.
699
+                } else {
700
+                    $output .= AUI_Component_Helper::sanitize_textarea_field( $args['value'] );
701
+                }
702
+            }
703
+
704
+            // closing tag
705
+            $output .= '</textarea>';
706
+
707
+
708
+            // input group wraps
709
+            if ( $args['input_group_left'] || $args['input_group_right'] ) {
710
+                $w100 = strpos( $args['class'], 'w-100' ) !== false ? ' w-100' : '';
711
+                if ( $args['input_group_left'] ) {
712
+                    $output = self::wrap( array(
713
+                        'content'                 => $output,
714
+                        'class'                   => $args['input_group_left_inside'] ? 'input-group-inside position-relative' . $w100 : 'input-group',
715
+                        'input_group_left'        => $args['input_group_left'],
716
+                        'input_group_left_inside' => $args['input_group_left_inside']
717
+                    ) );
718
+                }
719
+                if ( $args['input_group_right'] ) {
720
+                    $output = self::wrap( array(
721
+                        'content'                  => $output,
722
+                        'class'                    => $args['input_group_right_inside'] ? 'input-group-inside position-relative' . $w100 : 'input-group',
723
+                        'input_group_right'        => $args['input_group_right'],
724
+                        'input_group_right_inside' => $args['input_group_right_inside']
725
+                    ) );
726
+                }
727
+
728
+            }
729
+
730
+
731
+        }
732
+
733
+        if ( ! empty( $args['label'] ) && $label_after ) {
734
+            $label_args = array(
735
+                'title'      => $args['label'],
736
+                'for'        => $args['id'],
737
+                'class'      => $args['label_class'] . " ",
738
+                'label_type' => $args['label_type'],
739
+                'label_col'  => $args['label_col']
740
+            );
741
+            $output .= self::label( $label_args );
742
+        }
743
+
744
+        // help text
745
+        if ( ! empty( $args['help_text'] ) ) {
746
+            $output .= AUI_Component_Helper::help_text( $args['help_text'] );
747
+        }
748
+
749
+        if ( ! $label_after ) {
750
+            $output = $label . $output;
751
+        }
752
+
753
+        // maybe horizontal label
754
+        if ( $args['label_type'] == 'horizontal' ) {
755
+            $output .= '</div>';
756
+        }
757
+
758
+
759
+        // wrap
760
+        if ( ! $args['no_wrap'] ) {
761
+            if ( ! empty( $args['form_group_class'] ) ) {
762
+                $fg_class = esc_attr( $args['form_group_class'] );
763
+            }else{
764
+                $fg_class = $aui_bs5 ? 'mb-3' : 'form-group';
765
+            }
766
+            $form_group_class = $args['label_type'] == 'floating' ? 'form-label-group' : $fg_class;
767
+            $wrap_class       = $args['label_type'] == 'horizontal' ? $form_group_class . ' row' : $form_group_class;
768
+            $wrap_class       = ! empty( $args['wrap_class'] ) ? $wrap_class . " " . $args['wrap_class'] : $wrap_class;
769
+            $output           = self::wrap( array(
770
+                'content'         => $output,
771
+                'class'           => $wrap_class,
772
+                'element_require' => $args['element_require'],
773
+                'argument_id'     => $args['id'],
774
+                'wrap_attributes' => $args['wrap_attributes'],
775
+            ) );
776
+        }
777
+
778
+
779
+        return $output;
780
+    }
781
+
782
+    /**
783
+     * Build the component.
784
+     *
785
+     * @param array $args
786
+     *
787
+     * @return string The rendered component.
788
+     */
789
+    public static function select( $args = array() ) {
790
+        global $aui_bs5, $aui_has_select2, $aui_select2_enqueued;
791
+
792
+        $defaults = array(
793
+            'class'            => '',
794
+            'wrap_class'       => '',
795
+            'id'               => '',
796
+            'title'            => '',
797
+            'value'            => '',
798
+            // can be an array or a string
799
+            'required'         => false,
800
+            'label'            => '',
801
+            'label_after'      => false,
802
+            'label_type'       => '',
803
+            'label_col'        => '',
804
+            // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
805
+            'label_class'      => '',
806
+            'help_text'        => '',
807
+            'placeholder'      => '',
808
+            'options'          => array(),
809
+            // array or string
810
+            'icon'             => '',
811
+            'multiple'         => false,
812
+            'select2'          => false,
813
+            'no_wrap'          => false,
814
+            'input_group_right' => '',
815
+            'input_group_left' => '',
816
+            'input_group_right_inside' => false, // forces the input group inside the input
817
+            'input_group_left_inside' => false, // forces the input group inside the input
818
+            'form_group_class'  => '',
819
+            'element_require'  => '',
820
+            // [%element_id%] == "1"
821
+            'extra_attributes' => array(),
822
+            // an array of extra attributes
823
+            'wrap_attributes'  => array(),
824
+        );
825
+
826
+        /**
827
+         * Parse incoming $args into an array and merge it with $defaults
828
+         */
829
+        $args   = wp_parse_args( $args, $defaults );
830
+        $output = '';
831
+
832
+        // for now lets hide floating labels
833
+        if ( $args['label_type'] == 'floating' ) {
834
+            $args['label_type'] = 'hidden';
835
+        }
836
+
837
+        // hidden label option needs to be empty
838
+        $args['label_type'] = $args['label_type'] == 'hidden' ? '' : $args['label_type'];
839
+
840
+
841
+        $label_after = $args['label_after'];
842
+
843
+        // floating labels need label after
844
+        if ( $args['label_type'] == 'floating' ) {
845
+            $label_after         = true;
846
+            $args['placeholder'] = ' '; // set the placeholder not empty so the floating label works.
847
+        }
848
+
849
+        // Maybe setup select2
850
+        $is_select2 = false;
851
+        if ( ! empty( $args['select2'] ) ) {
852
+            $args['class'] .= ' aui-select2';
853
+            $is_select2 = true;
854
+        } elseif ( strpos( $args['class'], 'aui-select2' ) !== false ) {
855
+            $is_select2 = true;
856
+        }
857
+
858
+        if ( $is_select2 && ! $aui_has_select2 ) {
859
+            $aui_has_select2 = true;
860
+            $conditional_select2 = apply_filters( 'aui_is_conditional_select2', true );
861
+
862
+            // Enqueue the script,
863
+            if ( empty( $aui_select2_enqueued ) && $conditional_select2 === true ) {
864
+                $aui_select2_enqueued = true;
865
+
866
+                $aui_settings = AyeCode_UI_Settings::instance();
867
+                $aui_settings->enqueue_select2();
868
+            }
869
+        }
870
+
871
+        // select2 tags
872
+        if ( ! empty( $args['select2'] ) && $args['select2'] === 'tags' ) { // triple equals needed here for some reason
873
+            $args['data-tags']             = 'true';
874
+            $args['data-token-separators'] = "[',']";
875
+            $args['multiple']              = true;
876
+        }
877
+
878
+        // select2 placeholder
879
+        if ( $is_select2 && isset( $args['placeholder'] ) && '' != $args['placeholder'] && empty( $args['data-placeholder'] ) ) {
880
+            $args['data-placeholder'] = esc_attr( $args['placeholder'] );
881
+            $args['data-allow-clear'] = isset( $args['data-allow-clear'] ) ? (bool) $args['data-allow-clear'] : true;
882
+        }
883
+
884
+        // Set hidden input to save empty value for multiselect.
885
+        if ( ! empty( $args['multiple'] ) && ! empty( $args['name'] ) ) {
886
+            $output .= '<input type="hidden" ' . AUI_Component_Helper::name( $args['name'] ) . ' value="" data-ignore-rule/>';
887
+        }
888
+
889
+        // open/type
890
+        $output .= '<select ';
891
+
892
+        // style
893
+        if ( $is_select2 && !($args['input_group_left'] || $args['input_group_right'])) {
894
+            $output .= " style='width:100%;' ";
895
+        }
896
+
897
+        // element require
898
+        if ( ! empty( $args['element_require'] ) ) {
899
+            $output .= AUI_Component_Helper::element_require( $args['element_require'] );
900
+            $args['class'] .= " aui-conditional-field";
901
+        }
902
+
903
+        // class
904
+        $class = ! empty( $args['class'] ) ? $args['class'] : '';
905
+        $select_class = $aui_bs5 ? 'form-select ' : 'custom-select ';
906
+        $output .= AUI_Component_Helper::class_attr( $select_class . $class );
907
+
908
+        // name
909
+        if ( ! empty( $args['name'] ) ) {
910
+            $output .= AUI_Component_Helper::name( $args['name'], $args['multiple'] );
911
+        }
912
+
913
+        // id
914
+        if ( ! empty( $args['id'] ) ) {
915
+            $output .= AUI_Component_Helper::id( $args['id'] );
916
+        }
917
+
918
+        // title
919
+        if ( ! empty( $args['title'] ) ) {
920
+            $output .= AUI_Component_Helper::title( $args['title'] );
921
+        }
922
+
923
+        // data-attributes
924
+        $output .= AUI_Component_Helper::data_attributes( $args );
925
+
926
+        // aria-attributes
927
+        $output .= AUI_Component_Helper::aria_attributes( $args );
928
+
929
+        // extra attributes
930
+        if ( ! empty( $args['extra_attributes'] ) ) {
931
+            $output .= AUI_Component_Helper::extra_attributes( $args['extra_attributes'] );
932
+        }
933
+
934
+        // required
935
+        if ( ! empty( $args['required'] ) ) {
936
+            $output .= ' required ';
937
+        }
938
+
939
+        // multiple
940
+        if ( ! empty( $args['multiple'] ) ) {
941
+            $output .= ' multiple ';
942
+        }
943
+
944
+        // close opening tag
945
+        $output .= ' >';
946
+
947
+        // placeholder
948
+        if ( isset( $args['placeholder'] ) && '' != $args['placeholder'] && ! $is_select2 ) {
949
+            $output .= '<option value="" disabled selected hidden>' . esc_attr( $args['placeholder'] ) . '</option>';
950
+        } elseif ( $is_select2 && ! empty( $args['placeholder'] ) ) {
951
+            $output .= "<option></option>"; // select2 needs an empty select to fill the placeholder
952
+        }
953
+
954
+        // Options
955
+        if ( ! empty( $args['options'] ) ) {
956
+
957
+            if ( ! is_array( $args['options'] ) ) {
958
+                $output .= $args['options']; // not the preferred way but an option
959
+            } else {
960
+                foreach ( $args['options'] as $val => $name ) {
961
+                    $selected = '';
962
+                    if ( is_array( $name ) ) {
963
+                        if ( isset( $name['optgroup'] ) && ( $name['optgroup'] == 'start' || $name['optgroup'] == 'end' ) ) {
964
+                            $option_label = isset( $name['label'] ) ? $name['label'] : '';
965
+
966
+                            $output .= $name['optgroup'] == 'start' ? '<optgroup label="' . esc_attr( $option_label ) . '">' : '</optgroup>';
967
+                        } else {
968
+                            $option_label = isset( $name['label'] ) ? $name['label'] : '';
969
+                            $option_value = isset( $name['value'] ) ? $name['value'] : '';
970
+                            $extra_attributes = !empty($name['extra_attributes']) ? AUI_Component_Helper::extra_attributes( $name['extra_attributes'] ) : '';
971
+                            if ( ! empty( $args['multiple'] ) && ! empty( $args['value'] ) && is_array( $args['value'] ) ) {
972
+                                $selected = in_array( $option_value, stripslashes_deep( $args['value'] ) ) ? "selected" : "";
973
+                            } elseif ( ! empty( $args['value'] ) ) {
974
+                                $selected = selected( $option_value, stripslashes_deep( $args['value'] ), false );
975
+                            } elseif ( empty( $args['value'] ) && $args['value'] === $option_value ) {
976
+                                $selected = selected( $option_value, $args['value'], false );
977
+                            }
978
+
979
+                            $output .= '<option value="' . esc_attr( $option_value ) . '" ' . $selected . ' '.$extra_attributes .'>' . $option_label . '</option>';
980
+                        }
981
+                    } else {
982
+                        if ( ! empty( $args['value'] ) ) {
983
+                            if ( is_array( $args['value'] ) ) {
984
+                                $selected = in_array( $val, $args['value'] ) ? 'selected="selected"' : '';
985
+                            } elseif ( ! empty( $args['value'] ) ) {
986
+                                $selected = selected( $args['value'], $val, false );
987
+                            }
988
+                        } elseif ( $args['value'] === $val ) {
989
+                            $selected = selected( $args['value'], $val, false );
990
+                        }
991
+                        $output .= '<option value="' . esc_attr( $val ) . '" ' . $selected . '>' . esc_attr( $name ) . '</option>';
992
+                    }
993
+                }
994
+            }
995
+
996
+        }
997
+
998
+        // closing tag
999
+        $output .= '</select>';
1000
+
1001
+        $label = '';
1002
+        $help_text = '';
1003
+        // label
1004
+        if ( ! empty( $args['label'] ) && is_array( $args['label'] ) ) {
1005
+        } elseif ( ! empty( $args['label'] ) && ! $label_after ) {
1006
+            $label_args = array(
1007
+                'title'      => $args['label'],
1008
+                'for'        => $args['id'],
1009
+                'class'      => $args['label_class'] . " ",
1010
+                'label_type' => $args['label_type'],
1011
+                'label_col'  => $args['label_col']
1012
+            );
1013
+            $label = self::label( $label_args );
1014
+        }
1015
+
1016
+        // help text
1017
+        if ( ! empty( $args['help_text'] ) ) {
1018
+            $help_text = AUI_Component_Helper::help_text( $args['help_text'] );
1019
+        }
1020
+
1021
+        // input group wraps
1022
+        if ( $args['input_group_left'] || $args['input_group_right'] ) {
1023
+            $w100 = strpos( $args['class'], 'w-100' ) !== false ? ' w-100' : '';
1024
+            if ( $args['input_group_left'] ) {
1025
+                $output = self::wrap( array(
1026
+                    'content'                 => $output,
1027
+                    'class'                   => $args['input_group_left_inside'] ? 'input-group-inside position-relative' . $w100 : 'input-group',
1028
+                    'input_group_left'        => $args['input_group_left'],
1029
+                    'input_group_left_inside' => $args['input_group_left_inside']
1030
+                ) );
1031
+            }
1032
+            if ( $args['input_group_right'] ) {
1033
+                $output = self::wrap( array(
1034
+                    'content'                  => $output,
1035
+                    'class'                    => $args['input_group_right_inside'] ? 'input-group-inside position-relative' . $w100 : 'input-group',
1036
+                    'input_group_right'        => $args['input_group_right'],
1037
+                    'input_group_right_inside' => $args['input_group_right_inside']
1038
+                ) );
1039
+            }
1040
+
1041
+        }
1042
+
1043
+        if ( ! $label_after ) {
1044
+            $output .= $help_text;
1045
+        }
1046
+
1047
+
1048
+        if ( $args['label_type'] == 'horizontal' ) {
1049
+            $output = self::wrap( array(
1050
+                'content' => $output,
1051
+                'class'   => AUI_Component_Helper::get_column_class( $args['label_col'], 'input' )
1052
+            ) );
1053
+        }
1054
+
1055
+        if ( ! $label_after ) {
1056
+            $output = $label . $output;
1057
+        }
1058
+
1059
+        // maybe horizontal label
1060 1060
 //		if ( $args['label_type'] == 'horizontal' ) {
1061 1061
 //			$output .= '</div>';
1062 1062
 //		}
1063 1063
 
1064 1064
 
1065
-		// wrap
1066
-		if ( ! $args['no_wrap'] ) {
1067
-			if ( ! empty( $args['form_group_class'] ) ) {
1068
-				$fg_class = esc_attr( $args['form_group_class'] );
1069
-			}else{
1070
-				$fg_class = $aui_bs5 ? 'mb-3' : 'form-group';
1071
-			}
1072
-			$wrap_class = $args['label_type'] == 'horizontal' ? $fg_class . ' row' : $fg_class;
1073
-			$wrap_class = ! empty( $args['wrap_class'] ) ? $wrap_class . " " . $args['wrap_class'] : $wrap_class;
1074
-			$output     = self::wrap( array(
1075
-				'content'         => $output,
1076
-				'class'           => $wrap_class,
1077
-				'element_require' => $args['element_require'],
1078
-				'argument_id'     => $args['id'],
1079
-				'wrap_attributes' => $args['wrap_attributes'],
1080
-			) );
1081
-		}
1082
-
1083
-
1084
-		return $output;
1085
-	}
1086
-
1087
-	/**
1088
-	 * Build the component.
1089
-	 *
1090
-	 * @param array $args
1091
-	 *
1092
-	 * @return string The rendered component.
1093
-	 */
1094
-	public static function radio( $args = array() ) {
1095
-		global $aui_bs5;
1096
-
1097
-		$defaults = array(
1098
-			'class'            => '',
1099
-			'wrap_class'       => '',
1100
-			'id'               => '',
1101
-			'title'            => '',
1102
-			'horizontal'       => false,
1103
-			// sets the lable horizontal
1104
-			'value'            => '',
1105
-			'label'            => '',
1106
-			'label_class'      => '',
1107
-			'label_type'       => '',
1108
-			'label_col'        => '',
1109
-			// sets the label type, default: hidden. Options: hidden, top, horizontal, floating
1110
-			'help_text'        => '',
1111
-			'inline'           => true,
1112
-			'required'         => false,
1113
-			'options'          => array(),
1114
-			'icon'             => '',
1115
-			'no_wrap'          => false,
1116
-			'element_require'  => '',
1117
-			// [%element_id%] == "1"
1118
-			'extra_attributes' => array(),
1119
-			// an array of extra attributes
1120
-			'wrap_attributes'  => array()
1121
-		);
1122
-
1123
-		/**
1124
-		 * Parse incoming $args into an array and merge it with $defaults
1125
-		 */
1126
-		$args = wp_parse_args( $args, $defaults );
1127
-
1128
-		// for now lets use horizontal for floating
1129
-		if ( $args['label_type'] == 'floating' ) {
1130
-			$args['label_type'] = 'horizontal';
1131
-		}
1132
-
1133
-		$label_args = array(
1134
-			'title'      => $args['label'],
1135
-			'class'      => $args['label_class'] . " pt-0 ",
1136
-			'label_type' => $args['label_type'],
1137
-			'label_col'  => $args['label_col']
1138
-		);
1139
-
1140
-		if ( $args['label_type'] == 'top' || $args['label_type'] == 'hidden' ) {
1141
-			$label_args['class'] .= 'd-block ';
1142
-
1143
-			if ( $args['label_type'] == 'hidden' ) {
1144
-				$label_args['class'] .= 'sr-only ';
1145
-			}
1146
-		}
1147
-
1148
-		$output = '';
1149
-
1150
-		// label before
1151
-		if ( ! empty( $args['label'] ) ) {
1152
-			$output .= self::label( $label_args, 'radio' );
1153
-		}
1154
-
1155
-		// maybe horizontal label
1156
-		if ( $args['label_type'] == 'horizontal' ) {
1157
-			$input_col = AUI_Component_Helper::get_column_class( $args['label_col'], 'input' );
1158
-			$output .= '<div class="' . $input_col . '">';
1159
-		}
1160
-
1161
-		if ( ! empty( $args['options'] ) ) {
1162
-			$count = 0;
1163
-			foreach ( $args['options'] as $value => $label ) {
1164
-				$option_args            = $args;
1165
-				$option_args['value']   = $value;
1166
-				$option_args['label']   = $label;
1167
-				$option_args['checked'] = $value == $args['value'] ? true : false;
1168
-				$output .= self::radio_option( $option_args, $count );
1169
-				$count ++;
1170
-			}
1171
-		}
1172
-
1173
-		// help text
1174
-		$help_text = ! empty( $args['help_text'] ) ? AUI_Component_Helper::help_text( $args['help_text'] ) : '';
1175
-		$output .= $help_text;
1176
-
1177
-		// maybe horizontal label
1178
-		if ( $args['label_type'] == 'horizontal' ) {
1179
-			$output .= '</div>';
1180
-		}
1181
-
1182
-		// wrap
1183
-		$fg_class = $aui_bs5 ? 'mb-3' : 'form-group';
1184
-		$wrap_class = $args['label_type'] == 'horizontal' ? $fg_class . ' row' : $fg_class;
1185
-		$wrap_class = ! empty( $args['wrap_class'] ) ? $wrap_class . " " . $args['wrap_class'] : $wrap_class;
1186
-		$output     = self::wrap( array(
1187
-			'content'         => $output,
1188
-			'class'           => $wrap_class,
1189
-			'element_require' => $args['element_require'],
1190
-			'argument_id'     => $args['id'],
1191
-			'wrap_attributes' => $args['wrap_attributes'],
1192
-		) );
1193
-
1194
-
1195
-		return $output;
1196
-	}
1197
-
1198
-	/**
1199
-	 * Build the component.
1200
-	 *
1201
-	 * @param array $args
1202
-	 *
1203
-	 * @return string The rendered component.
1204
-	 */
1205
-	public static function radio_option( $args = array(), $count = '' ) {
1206
-		$defaults = array(
1207
-			'class'            => '',
1208
-			'id'               => '',
1209
-			'title'            => '',
1210
-			'value'            => '',
1211
-			'required'         => false,
1212
-			'inline'           => true,
1213
-			'label'            => '',
1214
-			'options'          => array(),
1215
-			'icon'             => '',
1216
-			'no_wrap'          => false,
1217
-			'extra_attributes' => array() // an array of extra attributes
1218
-		);
1219
-
1220
-		/**
1221
-		 * Parse incoming $args into an array and merge it with $defaults
1222
-		 */
1223
-		$args = wp_parse_args( $args, $defaults );
1224
-
1225
-		$output = '';
1226
-
1227
-		// open/type
1228
-		$output .= '<input type="radio"';
1229
-
1230
-		// class
1231
-		$output .= ' class="form-check-input" ';
1232
-
1233
-		// name
1234
-		if ( ! empty( $args['name'] ) ) {
1235
-			$output .= AUI_Component_Helper::name( $args['name'] );
1236
-		}
1237
-
1238
-		// id
1239
-		if ( ! empty( $args['id'] ) ) {
1240
-			$output .= AUI_Component_Helper::id( $args['id'] . $count );
1241
-		}
1242
-
1243
-		// title
1244
-		if ( ! empty( $args['title'] ) ) {
1245
-			$output .= AUI_Component_Helper::title( $args['title'] );
1246
-		}
1247
-
1248
-		// value
1249
-		if ( isset( $args['value'] ) ) {
1250
-			$output .= AUI_Component_Helper::value( $args['value'] );
1251
-		}
1252
-
1253
-		// checked, for radio and checkboxes
1254
-		if ( $args['checked'] ) {
1255
-			$output .= ' checked ';
1256
-		}
1257
-
1258
-		// data-attributes
1259
-		$output .= AUI_Component_Helper::data_attributes( $args );
1260
-
1261
-		// aria-attributes
1262
-		$output .= AUI_Component_Helper::aria_attributes( $args );
1263
-
1264
-		// extra attributes
1265
-		if ( ! empty( $args['extra_attributes'] ) ) {
1266
-			$output .= AUI_Component_Helper::extra_attributes( $args['extra_attributes'] );
1267
-		}
1268
-
1269
-		// required
1270
-		if ( ! empty( $args['required'] ) ) {
1271
-			$output .= ' required ';
1272
-		}
1273
-
1274
-		// close opening tag
1275
-		$output .= ' >';
1276
-
1277
-		// label
1278
-		if ( ! empty( $args['label'] ) && is_array( $args['label'] ) ) {
1279
-		} elseif ( ! empty( $args['label'] ) ) {
1280
-			$output .= self::label( array(
1281
-				'title' => $args['label'],
1282
-				'for'   => $args['id'] . $count,
1283
-				'class' => 'form-check-label'
1284
-			), 'radio' );
1285
-		}
1286
-
1287
-		// wrap
1288
-		if ( ! $args['no_wrap'] ) {
1289
-			$wrap_class = $args['inline'] ? 'form-check form-check-inline' : 'form-check';
1290
-
1291
-			// Unique wrap class
1292
-			$uniq_class = 'fwrap';
1293
-			if ( ! empty( $args['name'] ) ) {
1294
-				$uniq_class .= '-' . $args['name'];
1295
-			} else if ( ! empty( $args['id'] ) ) {
1296
-				$uniq_class .= '-' . $args['id'];
1297
-			}
1298
-
1299
-			if ( isset( $args['value'] ) || $args['value'] !== "" ) {
1300
-				$uniq_class .= '-' . $args['value'];
1301
-			} else {
1302
-				$uniq_class .= '-' . $count;
1303
-			}
1304
-			$wrap_class .= ' ' . sanitize_html_class( $uniq_class );
1305
-
1306
-			$output = self::wrap( array(
1307
-				'content' => $output,
1308
-				'class'   => $wrap_class
1309
-			) );
1310
-		}
1311
-
1312
-		return $output;
1313
-	}
1065
+        // wrap
1066
+        if ( ! $args['no_wrap'] ) {
1067
+            if ( ! empty( $args['form_group_class'] ) ) {
1068
+                $fg_class = esc_attr( $args['form_group_class'] );
1069
+            }else{
1070
+                $fg_class = $aui_bs5 ? 'mb-3' : 'form-group';
1071
+            }
1072
+            $wrap_class = $args['label_type'] == 'horizontal' ? $fg_class . ' row' : $fg_class;
1073
+            $wrap_class = ! empty( $args['wrap_class'] ) ? $wrap_class . " " . $args['wrap_class'] : $wrap_class;
1074
+            $output     = self::wrap( array(
1075
+                'content'         => $output,
1076
+                'class'           => $wrap_class,
1077
+                'element_require' => $args['element_require'],
1078
+                'argument_id'     => $args['id'],
1079
+                'wrap_attributes' => $args['wrap_attributes'],
1080
+            ) );
1081
+        }
1082
+
1083
+
1084
+        return $output;
1085
+    }
1086
+
1087
+    /**
1088
+     * Build the component.
1089
+     *
1090
+     * @param array $args
1091
+     *
1092
+     * @return string The rendered component.
1093
+     */
1094
+    public static function radio( $args = array() ) {
1095
+        global $aui_bs5;
1096
+
1097
+        $defaults = array(
1098
+            'class'            => '',
1099
+            'wrap_class'       => '',
1100
+            'id'               => '',
1101
+            'title'            => '',
1102
+            'horizontal'       => false,
1103
+            // sets the lable horizontal
1104
+            'value'            => '',
1105
+            'label'            => '',
1106
+            'label_class'      => '',
1107
+            'label_type'       => '',
1108
+            'label_col'        => '',
1109
+            // sets the label type, default: hidden. Options: hidden, top, horizontal, floating
1110
+            'help_text'        => '',
1111
+            'inline'           => true,
1112
+            'required'         => false,
1113
+            'options'          => array(),
1114
+            'icon'             => '',
1115
+            'no_wrap'          => false,
1116
+            'element_require'  => '',
1117
+            // [%element_id%] == "1"
1118
+            'extra_attributes' => array(),
1119
+            // an array of extra attributes
1120
+            'wrap_attributes'  => array()
1121
+        );
1122
+
1123
+        /**
1124
+         * Parse incoming $args into an array and merge it with $defaults
1125
+         */
1126
+        $args = wp_parse_args( $args, $defaults );
1127
+
1128
+        // for now lets use horizontal for floating
1129
+        if ( $args['label_type'] == 'floating' ) {
1130
+            $args['label_type'] = 'horizontal';
1131
+        }
1132
+
1133
+        $label_args = array(
1134
+            'title'      => $args['label'],
1135
+            'class'      => $args['label_class'] . " pt-0 ",
1136
+            'label_type' => $args['label_type'],
1137
+            'label_col'  => $args['label_col']
1138
+        );
1139
+
1140
+        if ( $args['label_type'] == 'top' || $args['label_type'] == 'hidden' ) {
1141
+            $label_args['class'] .= 'd-block ';
1142
+
1143
+            if ( $args['label_type'] == 'hidden' ) {
1144
+                $label_args['class'] .= 'sr-only ';
1145
+            }
1146
+        }
1147
+
1148
+        $output = '';
1149
+
1150
+        // label before
1151
+        if ( ! empty( $args['label'] ) ) {
1152
+            $output .= self::label( $label_args, 'radio' );
1153
+        }
1154
+
1155
+        // maybe horizontal label
1156
+        if ( $args['label_type'] == 'horizontal' ) {
1157
+            $input_col = AUI_Component_Helper::get_column_class( $args['label_col'], 'input' );
1158
+            $output .= '<div class="' . $input_col . '">';
1159
+        }
1160
+
1161
+        if ( ! empty( $args['options'] ) ) {
1162
+            $count = 0;
1163
+            foreach ( $args['options'] as $value => $label ) {
1164
+                $option_args            = $args;
1165
+                $option_args['value']   = $value;
1166
+                $option_args['label']   = $label;
1167
+                $option_args['checked'] = $value == $args['value'] ? true : false;
1168
+                $output .= self::radio_option( $option_args, $count );
1169
+                $count ++;
1170
+            }
1171
+        }
1172
+
1173
+        // help text
1174
+        $help_text = ! empty( $args['help_text'] ) ? AUI_Component_Helper::help_text( $args['help_text'] ) : '';
1175
+        $output .= $help_text;
1176
+
1177
+        // maybe horizontal label
1178
+        if ( $args['label_type'] == 'horizontal' ) {
1179
+            $output .= '</div>';
1180
+        }
1181
+
1182
+        // wrap
1183
+        $fg_class = $aui_bs5 ? 'mb-3' : 'form-group';
1184
+        $wrap_class = $args['label_type'] == 'horizontal' ? $fg_class . ' row' : $fg_class;
1185
+        $wrap_class = ! empty( $args['wrap_class'] ) ? $wrap_class . " " . $args['wrap_class'] : $wrap_class;
1186
+        $output     = self::wrap( array(
1187
+            'content'         => $output,
1188
+            'class'           => $wrap_class,
1189
+            'element_require' => $args['element_require'],
1190
+            'argument_id'     => $args['id'],
1191
+            'wrap_attributes' => $args['wrap_attributes'],
1192
+        ) );
1193
+
1194
+
1195
+        return $output;
1196
+    }
1197
+
1198
+    /**
1199
+     * Build the component.
1200
+     *
1201
+     * @param array $args
1202
+     *
1203
+     * @return string The rendered component.
1204
+     */
1205
+    public static function radio_option( $args = array(), $count = '' ) {
1206
+        $defaults = array(
1207
+            'class'            => '',
1208
+            'id'               => '',
1209
+            'title'            => '',
1210
+            'value'            => '',
1211
+            'required'         => false,
1212
+            'inline'           => true,
1213
+            'label'            => '',
1214
+            'options'          => array(),
1215
+            'icon'             => '',
1216
+            'no_wrap'          => false,
1217
+            'extra_attributes' => array() // an array of extra attributes
1218
+        );
1219
+
1220
+        /**
1221
+         * Parse incoming $args into an array and merge it with $defaults
1222
+         */
1223
+        $args = wp_parse_args( $args, $defaults );
1224
+
1225
+        $output = '';
1226
+
1227
+        // open/type
1228
+        $output .= '<input type="radio"';
1229
+
1230
+        // class
1231
+        $output .= ' class="form-check-input" ';
1232
+
1233
+        // name
1234
+        if ( ! empty( $args['name'] ) ) {
1235
+            $output .= AUI_Component_Helper::name( $args['name'] );
1236
+        }
1237
+
1238
+        // id
1239
+        if ( ! empty( $args['id'] ) ) {
1240
+            $output .= AUI_Component_Helper::id( $args['id'] . $count );
1241
+        }
1242
+
1243
+        // title
1244
+        if ( ! empty( $args['title'] ) ) {
1245
+            $output .= AUI_Component_Helper::title( $args['title'] );
1246
+        }
1247
+
1248
+        // value
1249
+        if ( isset( $args['value'] ) ) {
1250
+            $output .= AUI_Component_Helper::value( $args['value'] );
1251
+        }
1252
+
1253
+        // checked, for radio and checkboxes
1254
+        if ( $args['checked'] ) {
1255
+            $output .= ' checked ';
1256
+        }
1257
+
1258
+        // data-attributes
1259
+        $output .= AUI_Component_Helper::data_attributes( $args );
1260
+
1261
+        // aria-attributes
1262
+        $output .= AUI_Component_Helper::aria_attributes( $args );
1263
+
1264
+        // extra attributes
1265
+        if ( ! empty( $args['extra_attributes'] ) ) {
1266
+            $output .= AUI_Component_Helper::extra_attributes( $args['extra_attributes'] );
1267
+        }
1268
+
1269
+        // required
1270
+        if ( ! empty( $args['required'] ) ) {
1271
+            $output .= ' required ';
1272
+        }
1273
+
1274
+        // close opening tag
1275
+        $output .= ' >';
1276
+
1277
+        // label
1278
+        if ( ! empty( $args['label'] ) && is_array( $args['label'] ) ) {
1279
+        } elseif ( ! empty( $args['label'] ) ) {
1280
+            $output .= self::label( array(
1281
+                'title' => $args['label'],
1282
+                'for'   => $args['id'] . $count,
1283
+                'class' => 'form-check-label'
1284
+            ), 'radio' );
1285
+        }
1286
+
1287
+        // wrap
1288
+        if ( ! $args['no_wrap'] ) {
1289
+            $wrap_class = $args['inline'] ? 'form-check form-check-inline' : 'form-check';
1290
+
1291
+            // Unique wrap class
1292
+            $uniq_class = 'fwrap';
1293
+            if ( ! empty( $args['name'] ) ) {
1294
+                $uniq_class .= '-' . $args['name'];
1295
+            } else if ( ! empty( $args['id'] ) ) {
1296
+                $uniq_class .= '-' . $args['id'];
1297
+            }
1298
+
1299
+            if ( isset( $args['value'] ) || $args['value'] !== "" ) {
1300
+                $uniq_class .= '-' . $args['value'];
1301
+            } else {
1302
+                $uniq_class .= '-' . $count;
1303
+            }
1304
+            $wrap_class .= ' ' . sanitize_html_class( $uniq_class );
1305
+
1306
+            $output = self::wrap( array(
1307
+                'content' => $output,
1308
+                'class'   => $wrap_class
1309
+            ) );
1310
+        }
1311
+
1312
+        return $output;
1313
+    }
1314 1314
 
1315 1315
 }
1316 1316
\ No newline at end of file
Please login to merge, or discard this patch.
includes/admin/class-getpaid-admin.php 1 patch
Indentation   +619 added lines, -619 removed lines patch added patch discarded remove patch
@@ -14,94 +14,94 @@  discard block
 block discarded – undo
14 14
 class GetPaid_Admin {
15 15
 
16 16
     /**
17
-	 * Local path to this plugins admin directory
18
-	 *
19
-	 * @var         string
20
-	 */
21
-	public $admin_path;
22
-
23
-	/**
24
-	 * Web path to this plugins admin directory
25
-	 *
26
-	 * @var         string
27
-	 */
28
-	public $admin_url;
29
-
30
-	/**
31
-	 * Reports components.
32
-	 *
33
-	 * @var GetPaid_Reports
34
-	 */
17
+     * Local path to this plugins admin directory
18
+     *
19
+     * @var         string
20
+     */
21
+    public $admin_path;
22
+
23
+    /**
24
+     * Web path to this plugins admin directory
25
+     *
26
+     * @var         string
27
+     */
28
+    public $admin_url;
29
+
30
+    /**
31
+     * Reports components.
32
+     *
33
+     * @var GetPaid_Reports
34
+     */
35 35
     public $reports;
36 36
 
37 37
     /**
38
-	 * Class constructor.
39
-	 */
40
-	public function __construct() {
38
+     * Class constructor.
39
+     */
40
+    public function __construct() {
41 41
 
42 42
         $this->admin_path  = plugin_dir_path( __FILE__ );
43
-		$this->admin_url   = plugins_url( '/', __FILE__ );
44
-		$this->reports     = new GetPaid_Reports();
43
+        $this->admin_url   = plugins_url( '/', __FILE__ );
44
+        $this->reports     = new GetPaid_Reports();
45 45
 
46 46
         if ( is_admin() ) {
47
-			$this->init_admin_hooks();
47
+            $this->init_admin_hooks();
48 48
         }
49 49
 
50 50
     }
51 51
 
52 52
     /**
53
-	 * Init action and filter hooks
54
-	 *
55
-	 */
56
-	private function init_admin_hooks() {
53
+     * Init action and filter hooks
54
+     *
55
+     */
56
+    private function init_admin_hooks() {
57 57
         add_action( 'admin_enqueue_scripts', array( $this, 'enqeue_scripts' ), 9 );
58 58
         add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
59 59
         add_action( 'admin_init', array( $this, 'init_ayecode_connect_helper' ) );
60 60
         add_action( 'admin_init', array( $this, 'activation_redirect' ) );
61 61
         add_action( 'admin_init', array( $this, 'maybe_do_admin_action' ) );
62
-		add_action( 'admin_notices', array( $this, 'show_notices' ) );
63
-		add_action( 'getpaid_authenticated_admin_action_rate_plugin', array( $this, 'redirect_to_wordpress_rating_page' ) );
64
-		add_action( 'getpaid_authenticated_admin_action_duplicate_form', array( $this, 'duplicate_payment_form' ) );
65
-		add_action( 'getpaid_authenticated_admin_action_reset_form_stats', array( $this, 'reset_form_stats' ) );
66
-		add_action( 'getpaid_authenticated_admin_action_duplicate_invoice', array( $this, 'duplicate_invoice' ) );
67
-		add_action( 'getpaid_authenticated_admin_action_refund_invoice', array( $this, 'refund_invoice' ) );
68
-		add_action( 'getpaid_authenticated_admin_action_send_invoice', array( $this, 'send_customer_invoice' ) );
69
-		add_action( 'getpaid_authenticated_admin_action_send_invoice_reminder', array( $this, 'send_customer_payment_reminder' ) );
62
+        add_action( 'admin_notices', array( $this, 'show_notices' ) );
63
+        add_action( 'getpaid_authenticated_admin_action_rate_plugin', array( $this, 'redirect_to_wordpress_rating_page' ) );
64
+        add_action( 'getpaid_authenticated_admin_action_duplicate_form', array( $this, 'duplicate_payment_form' ) );
65
+        add_action( 'getpaid_authenticated_admin_action_reset_form_stats', array( $this, 'reset_form_stats' ) );
66
+        add_action( 'getpaid_authenticated_admin_action_duplicate_invoice', array( $this, 'duplicate_invoice' ) );
67
+        add_action( 'getpaid_authenticated_admin_action_refund_invoice', array( $this, 'refund_invoice' ) );
68
+        add_action( 'getpaid_authenticated_admin_action_send_invoice', array( $this, 'send_customer_invoice' ) );
69
+        add_action( 'getpaid_authenticated_admin_action_send_invoice_reminder', array( $this, 'send_customer_payment_reminder' ) );
70 70
         add_action( 'getpaid_authenticated_admin_action_reset_tax_rates', array( $this, 'admin_reset_tax_rates' ) );
71
-		add_action( 'getpaid_authenticated_admin_action_create_missing_pages', array( $this, 'admin_create_missing_pages' ) );
72
-		add_action( 'getpaid_authenticated_admin_action_refresh_permalinks', array( $this, 'admin_refresh_permalinks' ) );
73
-		add_action( 'getpaid_authenticated_admin_action_create_missing_tables', array( $this, 'admin_create_missing_tables' ) );
74
-		add_action( 'getpaid_authenticated_admin_action_migrate_old_invoices', array( $this, 'admin_migrate_old_invoices' ) );
75
-		add_action( 'getpaid_authenticated_admin_action_download_customers', array( $this, 'admin_download_customers' ) );
76
-		add_action( 'getpaid_authenticated_admin_action_recalculate_discounts', array( $this, 'admin_recalculate_discounts' ) );
77
-		add_action( 'getpaid_authenticated_admin_action_install_plugin', array( $this, 'admin_install_plugin' ) );
78
-		add_action( 'getpaid_authenticated_admin_action_connect_gateway', array( $this, 'admin_connect_gateway' ) );
79
-		add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) );
80
-		do_action( 'getpaid_init_admin_hooks', $this );
81
-
82
-		// Setup/welcome
83
-		if ( ! empty( $_GET['page'] ) ) {
84
-			switch ( sanitize_text_field( $_GET['page'] ) ) {
85
-				case 'gp-setup':
86
-					include_once dirname( __FILE__ ) . '/class-getpaid-admin-setup-wizard.php';
87
-					break;
88
-			}
89
-		}
90
-
91
-    }
92
-
93
-    /**
94
-	 * Register admin scripts
95
-	 *
96
-	 */
97
-	public function enqeue_scripts() {
71
+        add_action( 'getpaid_authenticated_admin_action_create_missing_pages', array( $this, 'admin_create_missing_pages' ) );
72
+        add_action( 'getpaid_authenticated_admin_action_refresh_permalinks', array( $this, 'admin_refresh_permalinks' ) );
73
+        add_action( 'getpaid_authenticated_admin_action_create_missing_tables', array( $this, 'admin_create_missing_tables' ) );
74
+        add_action( 'getpaid_authenticated_admin_action_migrate_old_invoices', array( $this, 'admin_migrate_old_invoices' ) );
75
+        add_action( 'getpaid_authenticated_admin_action_download_customers', array( $this, 'admin_download_customers' ) );
76
+        add_action( 'getpaid_authenticated_admin_action_recalculate_discounts', array( $this, 'admin_recalculate_discounts' ) );
77
+        add_action( 'getpaid_authenticated_admin_action_install_plugin', array( $this, 'admin_install_plugin' ) );
78
+        add_action( 'getpaid_authenticated_admin_action_connect_gateway', array( $this, 'admin_connect_gateway' ) );
79
+        add_filter( 'admin_footer_text', array( $this, 'admin_footer_text' ) );
80
+        do_action( 'getpaid_init_admin_hooks', $this );
81
+
82
+        // Setup/welcome
83
+        if ( ! empty( $_GET['page'] ) ) {
84
+            switch ( sanitize_text_field( $_GET['page'] ) ) {
85
+                case 'gp-setup':
86
+                    include_once dirname( __FILE__ ) . '/class-getpaid-admin-setup-wizard.php';
87
+                    break;
88
+            }
89
+        }
90
+
91
+    }
92
+
93
+    /**
94
+     * Register admin scripts
95
+     *
96
+     */
97
+    public function enqeue_scripts() {
98 98
         global $current_screen, $pagenow;
99 99
 
100
-		$page    = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
101
-		$editing = $pagenow == 'post.php' || $pagenow == 'post-new.php';
100
+        $page    = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
101
+        $editing = $pagenow == 'post.php' || $pagenow == 'post-new.php';
102 102
 
103 103
         if ( ! empty( $current_screen->post_type ) ) {
104
-			$page = $current_screen->post_type;
104
+            $page = $current_screen->post_type;
105 105
         }
106 106
 
107 107
         // General styles.
@@ -122,53 +122,53 @@  discard block
 block discarded – undo
122 122
         }
123 123
 
124 124
         // Payment form scripts.
125
-		if ( 'wpi_payment_form' == $page && $editing ) {
125
+        if ( 'wpi_payment_form' == $page && $editing ) {
126 126
             $this->load_payment_form_scripts();
127 127
         }
128 128
 
129
-		if ( $page == 'wpinv-subscriptions' ) {
130
-			wp_enqueue_script( 'postbox' );
131
-		}
129
+        if ( $page == 'wpinv-subscriptions' ) {
130
+            wp_enqueue_script( 'postbox' );
131
+        }
132 132
 
133 133
     }
134 134
 
135 135
     /**
136
-	 * Returns admin js translations.
137
-	 *
138
-	 */
139
-	protected function get_admin_i18() {
136
+     * Returns admin js translations.
137
+     *
138
+     */
139
+    protected function get_admin_i18() {
140 140
         global $post;
141 141
 
142
-		$date_range = array(
143
-			'period' => isset( $_GET['date_range'] ) ? sanitize_text_field( $_GET['date_range'] ) : '7_days',
144
-		);
142
+        $date_range = array(
143
+            'period' => isset( $_GET['date_range'] ) ? sanitize_text_field( $_GET['date_range'] ) : '7_days',
144
+        );
145 145
 
146
-		if ( $date_range['period'] == 'custom' ) {
146
+        if ( $date_range['period'] == 'custom' ) {
147 147
 
148
-			if ( isset( $_GET['from'] ) ) {
149
-				$date_range['after'] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['from'] ), current_time( 'timestamp' ) ) - DAY_IN_SECONDS );
150
-			}
148
+            if ( isset( $_GET['from'] ) ) {
149
+                $date_range['after'] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['from'] ), current_time( 'timestamp' ) ) - DAY_IN_SECONDS );
150
+            }
151 151
 
152
-			if ( isset( $_GET['to'] ) ) {
153
-				$date_range['before'] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['to'] ), current_time( 'timestamp' ) ) + DAY_IN_SECONDS );
154
-			}
152
+            if ( isset( $_GET['to'] ) ) {
153
+                $date_range['before'] = date( 'Y-m-d', strtotime( sanitize_text_field( $_GET['to'] ), current_time( 'timestamp' ) ) + DAY_IN_SECONDS );
154
+            }
155 155
 }
156 156
 
157 157
         $i18n = array(
158 158
             'ajax_url'                  => admin_url( 'admin-ajax.php' ),
159 159
             'post_ID'                   => isset( $post->ID ) ? $post->ID : '',
160
-			'wpinv_nonce'               => wp_create_nonce( 'wpinv-nonce' ),
161
-			'rest_nonce'                => wp_create_nonce( 'wp_rest' ),
162
-			'rest_root'                 => esc_url_raw( rest_url() ),
163
-			'date_range'                => $date_range,
160
+            'wpinv_nonce'               => wp_create_nonce( 'wpinv-nonce' ),
161
+            'rest_nonce'                => wp_create_nonce( 'wp_rest' ),
162
+            'rest_root'                 => esc_url_raw( rest_url() ),
163
+            'date_range'                => $date_range,
164 164
             'add_invoice_note_nonce'    => wp_create_nonce( 'add-invoice-note' ),
165 165
             'delete_invoice_note_nonce' => wp_create_nonce( 'delete-invoice-note' ),
166 166
             'invoice_item_nonce'        => wp_create_nonce( 'invoice-item' ),
167 167
             'billing_details_nonce'     => wp_create_nonce( 'get-billing-details' ),
168 168
             'tax'                       => wpinv_tax_amount(),
169 169
             'discount'                  => 0,
170
-			'currency_symbol'           => wpinv_currency_symbol(),
171
-			'currency'                  => wpinv_get_currency(),
170
+            'currency_symbol'           => wpinv_currency_symbol(),
171
+            'currency'                  => wpinv_get_currency(),
172 172
             'currency_pos'              => wpinv_currency_position(),
173 173
             'thousand_sep'              => wpinv_thousands_separator(),
174 174
             'decimal_sep'               => wpinv_decimal_separator(),
@@ -188,117 +188,117 @@  discard block
 block discarded – undo
188 188
             'item_description'          => __( 'Item Description', 'invoicing' ),
189 189
             'invoice_description'       => __( 'Invoice Description', 'invoicing' ),
190 190
             'discount_description'      => __( 'Discount Description', 'invoicing' ),
191
-			'searching'                 => __( 'Searching', 'invoicing' ),
192
-			'loading'                   => __( 'Loading...', 'invoicing' ),
193
-			'search_customers'          => __( 'Enter customer name or email', 'invoicing' ),
194
-			'search_items'              => __( 'Enter item name', 'invoicing' ),
195
-			'graphs'                    => array_merge( array( 'refunded_fees', 'refunded_items', 'refunded_subtotal', 'refunded_tax' ), array_keys( wpinv_get_report_graphs() ) ),
191
+            'searching'                 => __( 'Searching', 'invoicing' ),
192
+            'loading'                   => __( 'Loading...', 'invoicing' ),
193
+            'search_customers'          => __( 'Enter customer name or email', 'invoicing' ),
194
+            'search_items'              => __( 'Enter item name', 'invoicing' ),
195
+            'graphs'                    => array_merge( array( 'refunded_fees', 'refunded_items', 'refunded_subtotal', 'refunded_tax' ), array_keys( wpinv_get_report_graphs() ) ),
196 196
         );
197 197
 
198
-		if ( ! empty( $post ) && getpaid_is_invoice_post_type( $post->post_type ) ) {
198
+        if ( ! empty( $post ) && getpaid_is_invoice_post_type( $post->post_type ) ) {
199 199
 
200
-			$invoice              = new WPInv_Invoice( $post );
201
-			$i18n['save_invoice'] = sprintf(
202
-				__( 'Save %s', 'invoicing' ),
203
-				ucfirst( $invoice->get_invoice_quote_type() )
204
-			);
200
+            $invoice              = new WPInv_Invoice( $post );
201
+            $i18n['save_invoice'] = sprintf(
202
+                __( 'Save %s', 'invoicing' ),
203
+                ucfirst( $invoice->get_invoice_quote_type() )
204
+            );
205 205
 
206
-			$i18n['invoice_description'] = sprintf(
207
-				__( '%s Description', 'invoicing' ),
208
-				ucfirst( $invoice->get_invoice_quote_type() )
209
-			);
206
+            $i18n['invoice_description'] = sprintf(
207
+                __( '%s Description', 'invoicing' ),
208
+                ucfirst( $invoice->get_invoice_quote_type() )
209
+            );
210 210
 
211
-		}
212
-		return $i18n;
213
-	}
211
+        }
212
+        return $i18n;
213
+    }
214 214
 
215
-	/**
216
-	 * Change the admin footer text on GetPaid admin pages.
217
-	 *
218
-	 * @since  2.0.0
219
-	 * @param  string $footer_text
220
-	 * @return string
221
-	 */
222
-	public function admin_footer_text( $footer_text ) {
223
-		global $current_screen;
215
+    /**
216
+     * Change the admin footer text on GetPaid admin pages.
217
+     *
218
+     * @since  2.0.0
219
+     * @param  string $footer_text
220
+     * @return string
221
+     */
222
+    public function admin_footer_text( $footer_text ) {
223
+        global $current_screen;
224 224
 
225
-		$page    = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
225
+        $page    = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
226 226
 
227 227
         if ( ! empty( $current_screen->post_type ) ) {
228
-			$page = $current_screen->post_type;
228
+            $page = $current_screen->post_type;
229 229
         }
230 230
 
231 231
         // General styles.
232 232
         if ( apply_filters( 'getpaid_display_admin_footer_text', wpinv_current_user_can_manage_invoicing() ) && false !== stripos( $page, 'wpi' ) ) {
233 233
 
234
-			// Change the footer text
235
-			if ( ! get_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', true ) ) {
234
+            // Change the footer text
235
+            if ( ! get_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', true ) ) {
236 236
 
237
-				$rating_url  = esc_url(
238
-					wp_nonce_url(
239
-						admin_url( 'admin.php?page=wpinv-reports&getpaid-admin-action=rate_plugin' ),
240
-						'getpaid-nonce',
241
-						'getpaid-nonce'
237
+                $rating_url  = esc_url(
238
+                    wp_nonce_url(
239
+                        admin_url( 'admin.php?page=wpinv-reports&getpaid-admin-action=rate_plugin' ),
240
+                        'getpaid-nonce',
241
+                        'getpaid-nonce'
242 242
                     )
243
-				);
243
+                );
244 244
 
245
-				$footer_text = sprintf(
246
-					/* translators: %s: five stars */
247
-					__( 'If you like <strong>GetPaid</strong>, please leave us a %s rating. A huge thanks in advance!', 'invoicing' ),
248
-					"<a href='$rating_url'>&#9733;&#9733;&#9733;&#9733;&#9733;</a>"
249
-				);
245
+                $footer_text = sprintf(
246
+                    /* translators: %s: five stars */
247
+                    __( 'If you like <strong>GetPaid</strong>, please leave us a %s rating. A huge thanks in advance!', 'invoicing' ),
248
+                    "<a href='$rating_url'>&#9733;&#9733;&#9733;&#9733;&#9733;</a>"
249
+                );
250 250
 
251
-			} else {
251
+            } else {
252 252
 
253
-				$footer_text = sprintf(
254
-					/* translators: %s: GetPaid */
255
-					__( 'Thank you for using %s!', 'invoicing' ),
256
-					"<a href='https://wpgetpaid.com/' target='_blank'><strong>GetPaid</strong></a>"
257
-				);
253
+                $footer_text = sprintf(
254
+                    /* translators: %s: GetPaid */
255
+                    __( 'Thank you for using %s!', 'invoicing' ),
256
+                    "<a href='https://wpgetpaid.com/' target='_blank'><strong>GetPaid</strong></a>"
257
+                );
258 258
 
259
-			}
259
+            }
260 260
 }
261 261
 
262
-		return $footer_text;
263
-	}
264
-
265
-	/**
266
-	 * Redirects to wp.org to rate the plugin.
267
-	 *
268
-	 * @since  2.0.0
269
-	 */
270
-	public function redirect_to_wordpress_rating_page() {
271
-		update_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', 1 );
272
-		wp_redirect( 'https://wordpress.org/support/plugin/invoicing/reviews?rate=5#new-post' );
273
-		exit;
274
-	}
275
-
276
-    /**
277
-	 * Loads payment form js.
278
-	 *
279
-	 */
280
-	protected function load_payment_form_scripts() {
262
+        return $footer_text;
263
+    }
264
+
265
+    /**
266
+     * Redirects to wp.org to rate the plugin.
267
+     *
268
+     * @since  2.0.0
269
+     */
270
+    public function redirect_to_wordpress_rating_page() {
271
+        update_user_meta( get_current_user_id(), 'getpaid_admin_footer_text_rated', 1 );
272
+        wp_redirect( 'https://wordpress.org/support/plugin/invoicing/reviews?rate=5#new-post' );
273
+        exit;
274
+    }
275
+
276
+    /**
277
+     * Loads payment form js.
278
+     *
279
+     */
280
+    protected function load_payment_form_scripts() {
281 281
         global $post;
282 282
 
283 283
         wp_enqueue_script( 'vue', WPINV_PLUGIN_URL . 'assets/js/vue/vue.min.js', array(), WPINV_VERSION );
284
-		wp_enqueue_script( 'sortable', WPINV_PLUGIN_URL . 'assets/js/sortable.min.js', array(), WPINV_VERSION );
285
-		wp_enqueue_script( 'vue_draggable', WPINV_PLUGIN_URL . 'assets/js/vue/vuedraggable.min.js', array( 'sortable', 'vue' ), WPINV_VERSION );
284
+        wp_enqueue_script( 'sortable', WPINV_PLUGIN_URL . 'assets/js/sortable.min.js', array(), WPINV_VERSION );
285
+        wp_enqueue_script( 'vue_draggable', WPINV_PLUGIN_URL . 'assets/js/vue/vuedraggable.min.js', array( 'sortable', 'vue' ), WPINV_VERSION );
286 286
 
287
-		wp_register_script( 'wpinv-admin-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/admin-payment-forms.min.js', array( 'wpinv-admin-script', 'vue_draggable', 'wp-hooks' ), WPINV_VERSION );
287
+        wp_register_script( 'wpinv-admin-payment-form-script', WPINV_PLUGIN_URL . 'assets/js/admin-payment-forms.min.js', array( 'wpinv-admin-script', 'vue_draggable', 'wp-hooks' ), WPINV_VERSION );
288 288
 
289
-		wp_localize_script(
289
+        wp_localize_script(
290 290
             'wpinv-admin-payment-form-script',
291 291
             'wpinvPaymentFormAdmin',
292 292
             array(
293
-				'elements'      => wpinv_get_data( 'payment-form-elements' ),
294
-				'form_elements' => getpaid_get_payment_form_elements( $post->ID ),
295
-				'currency'      => wpinv_currency_symbol(),
296
-				'position'      => wpinv_currency_position(),
297
-				'decimals'      => (int) wpinv_decimals(),
298
-				'thousands_sep' => wpinv_thousands_separator(),
299
-				'decimals_sep'  => wpinv_decimal_separator(),
300
-				'form_items'    => gepaid_get_form_items( $post->ID ),
301
-				'is_default'    => $post->ID == wpinv_get_default_payment_form(),
293
+                'elements'      => wpinv_get_data( 'payment-form-elements' ),
294
+                'form_elements' => getpaid_get_payment_form_elements( $post->ID ),
295
+                'currency'      => wpinv_currency_symbol(),
296
+                'position'      => wpinv_currency_position(),
297
+                'decimals'      => (int) wpinv_decimals(),
298
+                'thousands_sep' => wpinv_thousands_separator(),
299
+                'decimals_sep'  => wpinv_decimal_separator(),
300
+                'form_items'    => gepaid_get_form_items( $post->ID ),
301
+                'is_default'    => $post->ID == wpinv_get_default_payment_form(),
302 302
             )
303 303
         );
304 304
 
@@ -307,19 +307,19 @@  discard block
 block discarded – undo
307 307
     }
308 308
 
309 309
     /**
310
-	 * Add our classes to admin pages.
310
+     * Add our classes to admin pages.
311 311
      *
312 312
      * @param string $classes
313 313
      * @return string
314
-	 *
315
-	 */
314
+     *
315
+     */
316 316
     public function admin_body_class( $classes ) {
317
-		global $pagenow, $post, $current_screen;
317
+        global $pagenow, $post, $current_screen;
318 318
 
319 319
         $page = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
320 320
 
321 321
         if ( ! empty( $current_screen->post_type ) ) {
322
-			$page = $current_screen->post_type;
322
+            $page = $current_screen->post_type;
323 323
         }
324 324
 
325 325
         if ( false !== stripos( $page, 'wpi' ) ) {
@@ -328,70 +328,70 @@  discard block
 block discarded – undo
328 328
 
329 329
         if ( in_array( $page, wpinv_parse_list( 'wpi_invoice wpi_payment_form wpi_quote' ) ) ) {
330 330
             $classes .= ' wpinv-cpt wpinv';
331
-		}
331
+        }
332 332
 
333
-		if ( getpaid_is_invoice_post_type( $page ) ) {
333
+        if ( getpaid_is_invoice_post_type( $page ) ) {
334 334
             $classes .= ' getpaid-is-invoice-cpt';
335 335
         }
336 336
 
337
-		return $classes;
337
+        return $classes;
338 338
     }
339 339
 
340 340
     /**
341
-	 * Maybe show the AyeCode Connect Notice.
342
-	 */
343
-	public function init_ayecode_connect_helper() {
341
+     * Maybe show the AyeCode Connect Notice.
342
+     */
343
+    public function init_ayecode_connect_helper() {
344 344
 
345
-		// Register with the deactivation survey class.
346
-		AyeCode_Deactivation_Survey::instance(
345
+        // Register with the deactivation survey class.
346
+        AyeCode_Deactivation_Survey::instance(
347 347
             array(
348
-				'slug'              => 'invoicing',
349
-				'version'           => WPINV_VERSION,
350
-				'support_url'       => 'https://wpgetpaid.com/support/',
351
-				'documentation_url' => 'https://docs.wpgetpaid.com/',
352
-				'activated'         => (int) get_option( 'gepaid_installed_on' ),
348
+                'slug'              => 'invoicing',
349
+                'version'           => WPINV_VERSION,
350
+                'support_url'       => 'https://wpgetpaid.com/support/',
351
+                'documentation_url' => 'https://docs.wpgetpaid.com/',
352
+                'activated'         => (int) get_option( 'gepaid_installed_on' ),
353 353
             )
354 354
         );
355 355
 
356 356
         new AyeCode_Connect_Helper(
357 357
             array(
358
-				'connect_title'     => __( 'WP Invoicing - an AyeCode product!', 'invoicing' ),
359
-				'connect_external'  => __( 'Please confirm you wish to connect your site?', 'invoicing' ),
360
-				'connect'           => sprintf( __( '<strong>Have a license?</strong> Forget about entering license keys or downloading zip files, connect your site for instant access. %1$slearn more%2$s', 'invoicing' ), "<a href='https://ayecode.io/introducing-ayecode-connect/' target='_blank'>", '</a>' ),
361
-				'connect_button'    => __( 'Connect Site', 'invoicing' ),
362
-				'connecting_button' => __( 'Connecting...', 'invoicing' ),
363
-				'error_localhost'   => __( 'This service will only work with a live domain, not a localhost.', 'invoicing' ),
364
-				'error'             => __( 'Something went wrong, please refresh and try again.', 'invoicing' ),
358
+                'connect_title'     => __( 'WP Invoicing - an AyeCode product!', 'invoicing' ),
359
+                'connect_external'  => __( 'Please confirm you wish to connect your site?', 'invoicing' ),
360
+                'connect'           => sprintf( __( '<strong>Have a license?</strong> Forget about entering license keys or downloading zip files, connect your site for instant access. %1$slearn more%2$s', 'invoicing' ), "<a href='https://ayecode.io/introducing-ayecode-connect/' target='_blank'>", '</a>' ),
361
+                'connect_button'    => __( 'Connect Site', 'invoicing' ),
362
+                'connecting_button' => __( 'Connecting...', 'invoicing' ),
363
+                'error_localhost'   => __( 'This service will only work with a live domain, not a localhost.', 'invoicing' ),
364
+                'error'             => __( 'Something went wrong, please refresh and try again.', 'invoicing' ),
365 365
             ),
366 366
             array( 'wpi-addons' )
367 367
         );
368 368
 
369 369
     }
370 370
 
371
-	/**
372
-	 * Redirect users to settings on activation.
373
-	 *
374
-	 * @return void
375
-	 */
376
-	public function activation_redirect() {
371
+    /**
372
+     * Redirect users to settings on activation.
373
+     *
374
+     * @return void
375
+     */
376
+    public function activation_redirect() {
377 377
 
378
-		$redirected = get_option( 'wpinv_redirected_to_settings' );
378
+        $redirected = get_option( 'wpinv_redirected_to_settings' );
379 379
 
380
-		if ( ! empty( $redirected ) || wp_doing_ajax() || ! current_user_can( 'manage_options' ) ) {
381
-			return;
382
-		}
380
+        if ( ! empty( $redirected ) || wp_doing_ajax() || ! current_user_can( 'manage_options' ) ) {
381
+            return;
382
+        }
383 383
 
384
-		// Bail if activating from network, or bulk
385
-		if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
386
-			return;
387
-		}
384
+        // Bail if activating from network, or bulk
385
+        if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
386
+            return;
387
+        }
388 388
 
389
-	    update_option( 'wpinv_redirected_to_settings', 1 );
389
+        update_option( 'wpinv_redirected_to_settings', 1 );
390 390
 
391 391
         wp_safe_redirect( admin_url( 'index.php?page=gp-setup' ) );
392 392
         exit;
393 393
 
394
-	}
394
+    }
395 395
 
396 396
     /**
397 397
      * Fires an admin action after verifying that a user can fire them.
@@ -404,555 +404,555 @@  discard block
 block discarded – undo
404 404
         }
405 405
     }
406 406
 
407
-	/**
407
+    /**
408 408
      * Duplicate invoice.
409
-	 *
410
-	 * @param array $args
409
+     *
410
+     * @param array $args
411 411
      */
412 412
     public function duplicate_invoice( $args ) {
413 413
 
414
-		if ( empty( $args['invoice_id'] ) ) {
415
-			return;
416
-		}
414
+        if ( empty( $args['invoice_id'] ) ) {
415
+            return;
416
+        }
417 417
 
418
-		$invoice = new WPInv_Invoice( (int) $args['invoice_id'] );
418
+        $invoice = new WPInv_Invoice( (int) $args['invoice_id'] );
419 419
 
420
-		if ( ! $invoice->exists() ) {
421
-			return;
422
-		}
420
+        if ( ! $invoice->exists() ) {
421
+            return;
422
+        }
423 423
 
424
-		$new_invoice = getpaid_duplicate_invoice( $invoice );
425
-		$new_invoice->save();
424
+        $new_invoice = getpaid_duplicate_invoice( $invoice );
425
+        $new_invoice->save();
426 426
 
427
-		if ( $new_invoice->exists() ) {
427
+        if ( $new_invoice->exists() ) {
428 428
 
429
-			getpaid_admin()->show_success( __( 'Invoice duplicated successfully.', 'invoicing' ) );
429
+            getpaid_admin()->show_success( __( 'Invoice duplicated successfully.', 'invoicing' ) );
430 430
 
431
-			wp_safe_redirect(
432
-				add_query_arg(
433
-					array(
434
-						'action' => 'edit',
435
-						'post'   => $new_invoice->get_id(),
436
-					),
437
-					admin_url( 'post.php' )
438
-				)
439
-			);
440
-			exit;
431
+            wp_safe_redirect(
432
+                add_query_arg(
433
+                    array(
434
+                        'action' => 'edit',
435
+                        'post'   => $new_invoice->get_id(),
436
+                    ),
437
+                    admin_url( 'post.php' )
438
+                )
439
+            );
440
+            exit;
441 441
 
442
-		}
442
+        }
443 443
 
444
-		getpaid_admin()->show_error( __( 'There was an error duplicating this invoice. Please try again.', 'invoicing' ) );
444
+        getpaid_admin()->show_error( __( 'There was an error duplicating this invoice. Please try again.', 'invoicing' ) );
445 445
 
446
-	}
446
+    }
447 447
 
448
-	/**
448
+    /**
449 449
      * Refund an invoice.
450
-	 *
451
-	 * @param array $args
450
+     *
451
+     * @param array $args
452 452
      */
453 453
     public function refund_invoice( $args ) {
454 454
 
455
-		if ( empty( $args['invoice_id'] ) ) {
456
-			return;
457
-		}
458
-
459
-		$invoice = new WPInv_Invoice( (int) $args['invoice_id'] );
460
-
461
-		if ( ! $invoice->exists() || $invoice->is_refunded() ) {
462
-			return;
463
-		}
464
-
465
-		$invoice->refund();
466
-
467
-		// Refund remotely.
468
-		if ( getpaid_payment_gateway_supports( $invoice->get_gateway(), 'refunds' ) && ! empty( $args['getpaid_refund_remote'] ) ) {
469
-			do_action( 'getpaid_refund_invoice_remotely', $invoice );
470
-		}
471
-
472
-		// Cancel subscriptions.
473
-		if ( ! empty( $args['getpaid_cancel_subscription'] ) ) {
474
-			$subscriptions = getpaid_get_invoice_subscriptions( $invoice );
475
-
476
-			if ( ! empty( $subscriptions ) ) {
477
-				if ( ! is_array( $subscriptions ) ) {
478
-					$subscriptions = array( $subscriptions );
479
-				}
480
-
481
-				foreach ( $subscriptions as $subscription ) {
482
-					$subscription->cancel();
483
-					$invoice->add_system_note(
484
-						sprintf(
485
-							// translators: %s: subscription ID.
486
-							__( 'Subscription #%s cancelled', 'invoicing' ),
487
-							$subscription->get_id()
488
-						)
489
-					);
490
-				}
491
-			}
492
-		}
493
-
494
-		// Add notice.
495
-		$this->show_success( __( 'Invoice refunded successfully.', 'invoicing' ) );
496
-
497
-		// Redirect.
498
-		wp_safe_redirect(
499
-			remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id', 'getpaid_cancel_subscription', 'getpaid_refund_remote' ) )
500
-		);
501
-	}
502
-
503
-	/**
455
+        if ( empty( $args['invoice_id'] ) ) {
456
+            return;
457
+        }
458
+
459
+        $invoice = new WPInv_Invoice( (int) $args['invoice_id'] );
460
+
461
+        if ( ! $invoice->exists() || $invoice->is_refunded() ) {
462
+            return;
463
+        }
464
+
465
+        $invoice->refund();
466
+
467
+        // Refund remotely.
468
+        if ( getpaid_payment_gateway_supports( $invoice->get_gateway(), 'refunds' ) && ! empty( $args['getpaid_refund_remote'] ) ) {
469
+            do_action( 'getpaid_refund_invoice_remotely', $invoice );
470
+        }
471
+
472
+        // Cancel subscriptions.
473
+        if ( ! empty( $args['getpaid_cancel_subscription'] ) ) {
474
+            $subscriptions = getpaid_get_invoice_subscriptions( $invoice );
475
+
476
+            if ( ! empty( $subscriptions ) ) {
477
+                if ( ! is_array( $subscriptions ) ) {
478
+                    $subscriptions = array( $subscriptions );
479
+                }
480
+
481
+                foreach ( $subscriptions as $subscription ) {
482
+                    $subscription->cancel();
483
+                    $invoice->add_system_note(
484
+                        sprintf(
485
+                            // translators: %s: subscription ID.
486
+                            __( 'Subscription #%s cancelled', 'invoicing' ),
487
+                            $subscription->get_id()
488
+                        )
489
+                    );
490
+                }
491
+            }
492
+        }
493
+
494
+        // Add notice.
495
+        $this->show_success( __( 'Invoice refunded successfully.', 'invoicing' ) );
496
+
497
+        // Redirect.
498
+        wp_safe_redirect(
499
+            remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id', 'getpaid_cancel_subscription', 'getpaid_refund_remote' ) )
500
+        );
501
+    }
502
+
503
+    /**
504 504
      * Sends a payment reminder to a customer.
505
-	 *
506
-	 * @param array $args
505
+     *
506
+     * @param array $args
507 507
      */
508 508
     public function duplicate_payment_form( $args ) {
509 509
 
510
-		if ( empty( $args['form_id'] ) ) {
511
-			return;
512
-		}
513
-
514
-		$form = new GetPaid_Payment_Form( (int) $args['form_id'] );
510
+        if ( empty( $args['form_id'] ) ) {
511
+            return;
512
+        }
515 513
 
516
-		if ( ! $form->exists() ) {
517
-			return;
518
-		}
514
+        $form = new GetPaid_Payment_Form( (int) $args['form_id'] );
519 515
 
520
-		$new_form = new GetPaid_Payment_Form();
521
-		$new_form->set_author( $form->get_author( 'edit' ) );
522
-		$new_form->set_name( $form->get_name( 'edit' ) . __( '(copy)', 'invoicing' ) );
523
-		$new_form->set_elements( $form->get_elements( 'edit' ) );
524
-		$new_form->set_items( $form->get_items( 'edit' ) );
525
-		$new_form->save();
516
+        if ( ! $form->exists() ) {
517
+            return;
518
+        }
526 519
 
527
-		if ( $new_form->exists() ) {
528
-			$this->show_success( __( 'Form duplicated successfully', 'invoicing' ) );
529
-			$url = get_edit_post_link( $new_form->get_id(), 'edit' );
530
-		} else {
531
-			$this->show_error( __( 'Unable to duplicate form', 'invoicing' ) );
532
-			$url = remove_query_arg( array( 'getpaid-admin-action', 'form_id', 'getpaid-nonce' ) );
533
-		}
520
+        $new_form = new GetPaid_Payment_Form();
521
+        $new_form->set_author( $form->get_author( 'edit' ) );
522
+        $new_form->set_name( $form->get_name( 'edit' ) . __( '(copy)', 'invoicing' ) );
523
+        $new_form->set_elements( $form->get_elements( 'edit' ) );
524
+        $new_form->set_items( $form->get_items( 'edit' ) );
525
+        $new_form->save();
526
+
527
+        if ( $new_form->exists() ) {
528
+            $this->show_success( __( 'Form duplicated successfully', 'invoicing' ) );
529
+            $url = get_edit_post_link( $new_form->get_id(), 'edit' );
530
+        } else {
531
+            $this->show_error( __( 'Unable to duplicate form', 'invoicing' ) );
532
+            $url = remove_query_arg( array( 'getpaid-admin-action', 'form_id', 'getpaid-nonce' ) );
533
+        }
534 534
 
535
-		wp_redirect( $url );
536
-		exit;
537
-	}
535
+        wp_redirect( $url );
536
+        exit;
537
+    }
538 538
 
539
-	/**
539
+    /**
540 540
      * Resets form stats.
541
-	 *
542
-	 * @param array $args
541
+     *
542
+     * @param array $args
543 543
      */
544 544
     public function reset_form_stats( $args ) {
545 545
 
546
-		if ( empty( $args['form_id'] ) ) {
547
-			return;
548
-		}
546
+        if ( empty( $args['form_id'] ) ) {
547
+            return;
548
+        }
549 549
 
550
-		$form = new GetPaid_Payment_Form( (int) $args['form_id'] );
550
+        $form = new GetPaid_Payment_Form( (int) $args['form_id'] );
551 551
 
552
-		if ( ! $form->exists() ) {
553
-			return;
554
-		}
552
+        if ( ! $form->exists() ) {
553
+            return;
554
+        }
555 555
 
556
-		$form->set_earned( 0 );
557
-		$form->set_refunded( 0 );
558
-		$form->set_cancelled( 0 );
559
-		$form->set_failed( 0 );
560
-		$form->save();
556
+        $form->set_earned( 0 );
557
+        $form->set_refunded( 0 );
558
+        $form->set_cancelled( 0 );
559
+        $form->set_failed( 0 );
560
+        $form->save();
561 561
 
562
-		$this->show_success( __( 'Form stats reset successfully', 'invoicing' ) );
562
+        $this->show_success( __( 'Form stats reset successfully', 'invoicing' ) );
563 563
 
564
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'form_id', 'getpaid-nonce' ) ) );
565
-		exit;
566
-	}
564
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'form_id', 'getpaid-nonce' ) ) );
565
+        exit;
566
+    }
567 567
 
568
-	/**
568
+    /**
569 569
      * Sends a payment reminder to a customer.
570
-	 *
571
-	 * @param array $args
570
+     *
571
+     * @param array $args
572 572
      */
573 573
     public function send_customer_invoice( $args ) {
574
-		getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $args['invoice_id'] ), true );
575
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
576
-		exit;
577
-	}
574
+        getpaid()->get( 'invoice_emails' )->user_invoice( new WPInv_Invoice( $args['invoice_id'] ), true );
575
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
576
+        exit;
577
+    }
578 578
 
579
-	/**
579
+    /**
580 580
      * Sends a payment reminder to a customer.
581
-	 *
582
-	 * @param array $args
581
+     *
582
+     * @param array $args
583 583
      */
584 584
     public function send_customer_payment_reminder( $args ) {
585
-		$sent = getpaid()->get( 'invoice_emails' )->force_send_overdue_notice( new WPInv_Invoice( $args['invoice_id'] ) );
585
+        $sent = getpaid()->get( 'invoice_emails' )->force_send_overdue_notice( new WPInv_Invoice( $args['invoice_id'] ) );
586 586
 
587
-		if ( $sent ) {
588
-			$this->show_success( __( 'Payment reminder was successfully sent to the customer', 'invoicing' ) );
589
-		} else {
590
-			$this->show_error( __( 'Could not sent payment reminder to the customer', 'invoicing' ) );
591
-		}
587
+        if ( $sent ) {
588
+            $this->show_success( __( 'Payment reminder was successfully sent to the customer', 'invoicing' ) );
589
+        } else {
590
+            $this->show_error( __( 'Could not sent payment reminder to the customer', 'invoicing' ) );
591
+        }
592 592
 
593
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
594
-		exit;
595
-	}
593
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce', 'invoice_id' ) ) );
594
+        exit;
595
+    }
596 596
 
597
-	/**
597
+    /**
598 598
      * Resets tax rates.
599
-	 *
599
+     *
600 600
      */
601 601
     public function admin_reset_tax_rates() {
602 602
 
603
-		update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
604
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
605
-		exit;
603
+        update_option( 'wpinv_tax_rates', wpinv_get_data( 'tax-rates' ) );
604
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
605
+        exit;
606 606
 
607
-	}
607
+    }
608 608
 
609
-	/**
609
+    /**
610 610
      * Resets admin pages.
611
-	 *
611
+     *
612 612
      */
613 613
     public function admin_create_missing_pages() {
614
-		$installer = new GetPaid_Installer();
615
-		$installer->create_pages();
616
-		$this->show_success( __( 'GetPaid pages updated.', 'invoicing' ) );
617
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
618
-		exit;
619
-	}
620
-
621
-	/**
622
-	 * Refreshes the permalinks.
623
-	 */
624
-	public function admin_refresh_permalinks() {
625
-		flush_rewrite_rules();
626
-		$this->show_success( __( 'Permalinks refreshed.', 'invoicing' ) );
627
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
628
-		exit;
629
-	}
630
-
631
-	/**
614
+        $installer = new GetPaid_Installer();
615
+        $installer->create_pages();
616
+        $this->show_success( __( 'GetPaid pages updated.', 'invoicing' ) );
617
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
618
+        exit;
619
+    }
620
+
621
+    /**
622
+     * Refreshes the permalinks.
623
+     */
624
+    public function admin_refresh_permalinks() {
625
+        flush_rewrite_rules();
626
+        $this->show_success( __( 'Permalinks refreshed.', 'invoicing' ) );
627
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
628
+        exit;
629
+    }
630
+
631
+    /**
632 632
      * Creates missing admin tables.
633
-	 *
633
+     *
634 634
      */
635 635
     public function admin_create_missing_tables() {
636
-		global $wpdb;
636
+        global $wpdb;
637 637
 
638
-		GetPaid_Installer::create_db_tables();
639
-		GetPaid_Installer::migrate_old_customers();
638
+        GetPaid_Installer::create_db_tables();
639
+        GetPaid_Installer::migrate_old_customers();
640 640
 
641
-		if ( '' !== $wpdb->last_error ) {
642
-			$this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
643
-		} else {
644
-			$this->show_success( __( 'Your GetPaid tables have been updated.', 'invoicing' ) );
645
-		}
641
+        if ( '' !== $wpdb->last_error ) {
642
+            $this->show_error( __( 'Your GetPaid tables have been updated:', 'invoicing' ) . ' ' . $wpdb->last_error );
643
+        } else {
644
+            $this->show_success( __( 'Your GetPaid tables have been updated.', 'invoicing' ) );
645
+        }
646 646
 
647
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
648
-		exit;
649
-	}
647
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
648
+        exit;
649
+    }
650 650
 
651
-	/**
651
+    /**
652 652
      * Migrates old invoices to the new database tables.
653
-	 *
653
+     *
654 654
      */
655 655
     public function admin_migrate_old_invoices() {
656 656
 
657
-		// Migrate the invoices.
658
-		$installer = new GetPaid_Installer();
659
-		$installer->migrate_old_invoices();
657
+        // Migrate the invoices.
658
+        $installer = new GetPaid_Installer();
659
+        $installer->migrate_old_invoices();
660 660
 
661
-		// Show an admin message.
662
-		$this->show_success( __( 'Your invoices have been migrated.', 'invoicing' ) );
661
+        // Show an admin message.
662
+        $this->show_success( __( 'Your invoices have been migrated.', 'invoicing' ) );
663 663
 
664
-		// Redirect the admin.
665
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
666
-		exit;
664
+        // Redirect the admin.
665
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
666
+        exit;
667 667
 
668
-	}
668
+    }
669 669
 
670
-	/**
670
+    /**
671 671
      * Download customers.
672
-	 *
672
+     *
673 673
      */
674 674
     public function admin_download_customers() {
675 675
 
676
-		$output = fopen( 'php://output', 'w' );
676
+        $output = fopen( 'php://output', 'w' );
677 677
 
678
-		if ( false === $output ) {
679
-			wp_die( esc_html__( 'Unsupported server', 'invoicing' ), 500 );
680
-		}
678
+        if ( false === $output ) {
679
+            wp_die( esc_html__( 'Unsupported server', 'invoicing' ), 500 );
680
+        }
681 681
 
682
-		header( 'Content-Type:text/csv' );
683
-		header( 'Content-Disposition:attachment;filename=customers.csv' );
682
+        header( 'Content-Type:text/csv' );
683
+        header( 'Content-Disposition:attachment;filename=customers.csv' );
684 684
 
685
-		/** @var GetPaid_Customer[] $customers */
686
-		$customers = getpaid_get_customers( array( 'number' => -1 ) );
687
-		$columns   = array_keys( GetPaid_Customer_Data_Store::get_database_fields() );
685
+        /** @var GetPaid_Customer[] $customers */
686
+        $customers = getpaid_get_customers( array( 'number' => -1 ) );
687
+        $columns   = array_keys( GetPaid_Customer_Data_Store::get_database_fields() );
688 688
 
689
-		// Output the csv column headers.
690
-		fputcsv( $output, $columns );
689
+        // Output the csv column headers.
690
+        fputcsv( $output, $columns );
691 691
 
692
-		// Loop through
693
-		foreach ( $customers as $customer ) {
692
+        // Loop through
693
+        foreach ( $customers as $customer ) {
694 694
 
695
-			$row  = array();
695
+            $row  = array();
696 696
 
697
-			foreach ( $columns as $column ) {
698
-				$row[]  = (string) maybe_serialize( $customer->get( $column, 'edit' ) );
699
-			}
697
+            foreach ( $columns as $column ) {
698
+                $row[]  = (string) maybe_serialize( $customer->get( $column, 'edit' ) );
699
+            }
700 700
 
701
-			fputcsv( $output, $row );
702
-		}
701
+            fputcsv( $output, $row );
702
+        }
703 703
 
704
-		fclose( $output );
705
-		exit;
704
+        fclose( $output );
705
+        exit;
706 706
 
707
-	}
707
+    }
708 708
 
709
-	/**
709
+    /**
710 710
      * Installs a plugin.
711
-	 *
712
-	 * @param array $data
711
+     *
712
+     * @param array $data
713 713
      */
714 714
     public function admin_install_plugin( $data ) {
715 715
 
716
-		if ( ! empty( $data['plugins'] ) ) {
717
-			include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
718
-			wp_cache_flush();
716
+        if ( ! empty( $data['plugins'] ) ) {
717
+            include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
718
+            wp_cache_flush();
719 719
 
720
-			foreach ( $data['plugins'] as $slug => $file ) {
721
-				$plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/' . $slug . '.latest-stable.zip' );
722
-				$upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
723
-				$installed  = $upgrader->install( $plugin_zip );
720
+            foreach ( $data['plugins'] as $slug => $file ) {
721
+                $plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/' . $slug . '.latest-stable.zip' );
722
+                $upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
723
+                $installed  = $upgrader->install( $plugin_zip );
724 724
 
725
-				if ( ! is_wp_error( $installed ) && $installed ) {
726
-					activate_plugin( $file, '', false, true );
727
-				} else {
728
-					wpinv_error_log( $upgrader->skin->get_upgrade_messages(), false );
729
-				}
725
+                if ( ! is_wp_error( $installed ) && $installed ) {
726
+                    activate_plugin( $file, '', false, true );
727
+                } else {
728
+                    wpinv_error_log( $upgrader->skin->get_upgrade_messages(), false );
729
+                }
730 730
 }
731 731
 }
732 732
 
733
-		$redirect = isset( $data['redirect'] ) ? esc_url_raw( $data['redirect'] ) : admin_url( 'plugins.php' );
734
-		wp_safe_redirect( $redirect );
735
-		exit;
733
+        $redirect = isset( $data['redirect'] ) ? esc_url_raw( $data['redirect'] ) : admin_url( 'plugins.php' );
734
+        wp_safe_redirect( $redirect );
735
+        exit;
736 736
 
737
-	}
737
+    }
738 738
 
739
-	/**
739
+    /**
740 740
      * Connects a gateway.
741
-	 *
742
-	 * @param array $data
741
+     *
742
+     * @param array $data
743 743
      */
744 744
     public function admin_connect_gateway( $data ) {
745 745
 
746
-		if ( ! empty( $data['plugin'] ) ) {
746
+        if ( ! empty( $data['plugin'] ) ) {
747 747
 
748
-			$gateway     = sanitize_key( $data['plugin'] );
749
-			$connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
748
+            $gateway     = sanitize_key( $data['plugin'] );
749
+            $connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
750 750
 
751
-			if ( ! empty( $connect_url ) ) {
752
-				wp_redirect( $connect_url );
753
-				exit;
754
-			}
751
+            if ( ! empty( $connect_url ) ) {
752
+                wp_redirect( $connect_url );
753
+                exit;
754
+            }
755 755
 
756
-			if ( 'stripe' == $data['plugin'] ) {
757
-				require_once ABSPATH . 'wp-admin/includes/plugin.php';
758
-				include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
759
-				wp_cache_flush();
756
+            if ( 'stripe' == $data['plugin'] ) {
757
+                require_once ABSPATH . 'wp-admin/includes/plugin.php';
758
+                include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
759
+                wp_cache_flush();
760 760
 
761
-				if ( ! array_key_exists( 'getpaid-stripe-payments/getpaid-stripe-payments.php', get_plugins() ) ) {
762
-					$plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/getpaid-stripe-payments.latest-stable.zip' );
763
-					$upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
764
-					$upgrader->install( $plugin_zip );
765
-				}
761
+                if ( ! array_key_exists( 'getpaid-stripe-payments/getpaid-stripe-payments.php', get_plugins() ) ) {
762
+                    $plugin_zip = esc_url( 'https://downloads.wordpress.org/plugin/getpaid-stripe-payments.latest-stable.zip' );
763
+                    $upgrader   = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
764
+                    $upgrader->install( $plugin_zip );
765
+                }
766 766
 
767
-				activate_plugin( 'getpaid-stripe-payments/getpaid-stripe-payments.php', '', false, true );
768
-			}
767
+                activate_plugin( 'getpaid-stripe-payments/getpaid-stripe-payments.php', '', false, true );
768
+            }
769 769
 
770
-			$connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
771
-			if ( ! empty( $connect_url ) ) {
772
-				wp_redirect( $connect_url );
773
-				exit;
774
-			}
770
+            $connect_url = apply_filters( "getpaid_get_{$gateway}_connect_url", false, $data );
771
+            if ( ! empty( $connect_url ) ) {
772
+                wp_redirect( $connect_url );
773
+                exit;
774
+            }
775 775
 }
776 776
 
777
-		$redirect = isset( $data['redirect'] ) ? esc_url_raw( urldecode( $data['redirect'] ) ) : admin_url( 'admin.php?page=wpinv-settings&tab=gateways' );
778
-		wp_safe_redirect( $redirect );
779
-		exit;
777
+        $redirect = isset( $data['redirect'] ) ? esc_url_raw( urldecode( $data['redirect'] ) ) : admin_url( 'admin.php?page=wpinv-settings&tab=gateways' );
778
+        wp_safe_redirect( $redirect );
779
+        exit;
780 780
 
781
-	}
781
+    }
782 782
 
783
-	/**
783
+    /**
784 784
      * Recalculates discounts.
785
-	 *
785
+     *
786 786
      */
787 787
     public function admin_recalculate_discounts() {
788
-		global $wpdb;
788
+        global $wpdb;
789 789
 
790
-		// Fetch all invoices that have discount codes.
791
-		$table    = $wpdb->prefix . 'getpaid_invoices';
792
-		$invoices = $wpdb->get_col( "SELECT `post_id` FROM `$table` WHERE `discount` = 0 && `discount_code` <> ''" );
790
+        // Fetch all invoices that have discount codes.
791
+        $table    = $wpdb->prefix . 'getpaid_invoices';
792
+        $invoices = $wpdb->get_col( "SELECT `post_id` FROM `$table` WHERE `discount` = 0 && `discount_code` <> ''" );
793 793
 
794
-		foreach ( $invoices as $invoice ) {
794
+        foreach ( $invoices as $invoice ) {
795 795
 
796
-			$invoice = new WPInv_Invoice( $invoice );
796
+            $invoice = new WPInv_Invoice( $invoice );
797 797
 
798
-			if ( ! $invoice->exists() ) {
799
-				continue;
800
-			}
798
+            if ( ! $invoice->exists() ) {
799
+                continue;
800
+            }
801 801
 
802
-			// Abort if the discount does not exist or does not apply here.
803
-			$discount = new WPInv_Discount( $invoice->get_discount_code() );
804
-			if ( ! $discount->exists() ) {
805
-				continue;
806
-			}
802
+            // Abort if the discount does not exist or does not apply here.
803
+            $discount = new WPInv_Discount( $invoice->get_discount_code() );
804
+            if ( ! $discount->exists() ) {
805
+                continue;
806
+            }
807 807
 
808
-			$invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
809
-			$invoice->recalculate_total();
808
+            $invoice->add_discount( getpaid_calculate_invoice_discount( $invoice, $discount ) );
809
+            $invoice->recalculate_total();
810 810
 
811
-			if ( $invoice->get_total_discount() > 0 ) {
812
-				$invoice->save();
813
-			}
811
+            if ( $invoice->get_total_discount() > 0 ) {
812
+                $invoice->save();
813
+            }
814 814
 }
815 815
 
816
-		// Show an admin message.
817
-		$this->show_success( __( 'Discounts have been recalculated.', 'invoicing' ) );
816
+        // Show an admin message.
817
+        $this->show_success( __( 'Discounts have been recalculated.', 'invoicing' ) );
818 818
 
819
-		// Redirect the admin.
820
-		wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
821
-		exit;
819
+        // Redirect the admin.
820
+        wp_safe_redirect( remove_query_arg( array( 'getpaid-admin-action', 'getpaid-nonce' ) ) );
821
+        exit;
822 822
 
823
-	}
823
+    }
824 824
 
825 825
     /**
826
-	 * Returns an array of admin notices.
827
-	 *
828
-	 * @since       1.0.19
826
+     * Returns an array of admin notices.
827
+     *
828
+     * @since       1.0.19
829 829
      * @return array
830
-	 */
831
-	public function get_notices() {
832
-		$notices = get_option( 'wpinv_admin_notices' );
830
+     */
831
+    public function get_notices() {
832
+        $notices = get_option( 'wpinv_admin_notices' );
833 833
         return is_array( $notices ) ? $notices : array();
834
-	}
834
+    }
835 835
 
836
-	/**
837
-	 * Checks if we have any admin notices.
838
-	 *
839
-	 * @since       2.0.4
836
+    /**
837
+     * Checks if we have any admin notices.
838
+     *
839
+     * @since       2.0.4
840 840
      * @return array
841
-	 */
842
-	public function has_notices() {
843
-		return count( $this->get_notices() ) > 0;
844
-	}
845
-
846
-	/**
847
-	 * Clears all admin notices
848
-	 *
849
-	 * @access      public
850
-	 * @since       1.0.19
851
-	 */
852
-	public function clear_notices() {
853
-		delete_option( 'wpinv_admin_notices' );
854
-	}
855
-
856
-	/**
857
-	 * Saves a new admin notice
858
-	 *
859
-	 * @access      public
860
-	 * @since       1.0.19
861
-	 */
862
-	public function save_notice( $type, $message ) {
863
-		$notices = $this->get_notices();
864
-
865
-		if ( empty( $notices[ $type ] ) || ! is_array( $notices[ $type ] ) ) {
866
-			$notices[ $type ] = array();
867
-		}
868
-
869
-		$notices[ $type ][] = $message;
870
-
871
-		update_option( 'wpinv_admin_notices', $notices );
872
-	}
873
-
874
-	/**
875
-	 * Displays a success notice
876
-	 *
877
-	 * @param       string $msg The message to qeue.
878
-	 * @access      public
879
-	 * @since       1.0.19
880
-	 */
881
-	public function show_success( $msg ) {
882
-		$this->save_notice( 'success', $msg );
883
-	}
884
-
885
-	/**
886
-	 * Displays a error notice
887
-	 *
888
-	 * @access      public
889
-	 * @param       string $msg The message to qeue.
890
-	 * @since       1.0.19
891
-	 */
892
-	public function show_error( $msg ) {
893
-		$this->save_notice( 'error', $msg );
894
-	}
895
-
896
-	/**
897
-	 * Displays a warning notice
898
-	 *
899
-	 * @access      public
900
-	 * @param       string $msg The message to qeue.
901
-	 * @since       1.0.19
902
-	 */
903
-	public function show_warning( $msg ) {
904
-		$this->save_notice( 'warning', $msg );
905
-	}
906
-
907
-	/**
908
-	 * Displays a info notice
909
-	 *
910
-	 * @access      public
911
-	 * @param       string $msg The message to qeue.
912
-	 * @since       1.0.19
913
-	 */
914
-	public function show_info( $msg ) {
915
-		$this->save_notice( 'info', $msg );
916
-	}
917
-
918
-	/**
919
-	 * Show notices
920
-	 *
921
-	 * @access      public
922
-	 * @since       1.0.19
923
-	 */
924
-	public function show_notices() {
841
+     */
842
+    public function has_notices() {
843
+        return count( $this->get_notices() ) > 0;
844
+    }
845
+
846
+    /**
847
+     * Clears all admin notices
848
+     *
849
+     * @access      public
850
+     * @since       1.0.19
851
+     */
852
+    public function clear_notices() {
853
+        delete_option( 'wpinv_admin_notices' );
854
+    }
855
+
856
+    /**
857
+     * Saves a new admin notice
858
+     *
859
+     * @access      public
860
+     * @since       1.0.19
861
+     */
862
+    public function save_notice( $type, $message ) {
863
+        $notices = $this->get_notices();
864
+
865
+        if ( empty( $notices[ $type ] ) || ! is_array( $notices[ $type ] ) ) {
866
+            $notices[ $type ] = array();
867
+        }
868
+
869
+        $notices[ $type ][] = $message;
870
+
871
+        update_option( 'wpinv_admin_notices', $notices );
872
+    }
873
+
874
+    /**
875
+     * Displays a success notice
876
+     *
877
+     * @param       string $msg The message to qeue.
878
+     * @access      public
879
+     * @since       1.0.19
880
+     */
881
+    public function show_success( $msg ) {
882
+        $this->save_notice( 'success', $msg );
883
+    }
884
+
885
+    /**
886
+     * Displays a error notice
887
+     *
888
+     * @access      public
889
+     * @param       string $msg The message to qeue.
890
+     * @since       1.0.19
891
+     */
892
+    public function show_error( $msg ) {
893
+        $this->save_notice( 'error', $msg );
894
+    }
895
+
896
+    /**
897
+     * Displays a warning notice
898
+     *
899
+     * @access      public
900
+     * @param       string $msg The message to qeue.
901
+     * @since       1.0.19
902
+     */
903
+    public function show_warning( $msg ) {
904
+        $this->save_notice( 'warning', $msg );
905
+    }
906
+
907
+    /**
908
+     * Displays a info notice
909
+     *
910
+     * @access      public
911
+     * @param       string $msg The message to qeue.
912
+     * @since       1.0.19
913
+     */
914
+    public function show_info( $msg ) {
915
+        $this->save_notice( 'info', $msg );
916
+    }
917
+
918
+    /**
919
+     * Show notices
920
+     *
921
+     * @access      public
922
+     * @since       1.0.19
923
+     */
924
+    public function show_notices() {
925 925
 
926 926
         $notices = $this->get_notices();
927 927
         $this->clear_notices();
928 928
 
929
-		foreach ( $notices as $type => $messages ) {
929
+        foreach ( $notices as $type => $messages ) {
930 930
 
931
-			if ( ! is_array( $messages ) ) {
932
-				continue;
933
-			}
931
+            if ( ! is_array( $messages ) ) {
932
+                continue;
933
+            }
934 934
 
935 935
             $type  = esc_attr( $type );
936
-			foreach ( $messages as $message ) {
937
-				echo wp_kses_post( "<div class='notice notice-$type is-dismissible'><p>$message</p></div>" );
936
+            foreach ( $messages as $message ) {
937
+                echo wp_kses_post( "<div class='notice notice-$type is-dismissible'><p>$message</p></div>" );
938 938
             }
939 939
 }
940 940
 
941
-		foreach ( array( 'checkout_page', 'invoice_history_page', 'success_page', 'failure_page', 'invoice_subscription_page' ) as $page ) {
942
-
943
-			if ( ! is_numeric( wpinv_get_option( $page, false ) ) ) {
944
-				$url     = wp_nonce_url(
945
-					add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
946
-					'getpaid-nonce',
947
-					'getpaid-nonce'
948
-				);
949
-				$message  = __( 'Some GetPaid pages are missing. To use GetPaid without any issues, click the button below to generate the missing pages.', 'invoicing' );
950
-				$message2 = __( 'Generate Pages', 'invoicing' );
951
-				echo wp_kses_post( "<div class='notice notice-warning is-dismissible'><p>$message<br><br><a href='$url' class='button button-primary'>$message2</a></p></div>" );
952
-				break;
953
-			}
941
+        foreach ( array( 'checkout_page', 'invoice_history_page', 'success_page', 'failure_page', 'invoice_subscription_page' ) as $page ) {
942
+
943
+            if ( ! is_numeric( wpinv_get_option( $page, false ) ) ) {
944
+                $url     = wp_nonce_url(
945
+                    add_query_arg( 'getpaid-admin-action', 'create_missing_pages' ),
946
+                    'getpaid-nonce',
947
+                    'getpaid-nonce'
948
+                );
949
+                $message  = __( 'Some GetPaid pages are missing. To use GetPaid without any issues, click the button below to generate the missing pages.', 'invoicing' );
950
+                $message2 = __( 'Generate Pages', 'invoicing' );
951
+                echo wp_kses_post( "<div class='notice notice-warning is-dismissible'><p>$message<br><br><a href='$url' class='button button-primary'>$message2</a></p></div>" );
952
+                break;
953
+            }
954 954
 }
955 955
 
956
-	}
956
+    }
957 957
 
958 958
 }
Please login to merge, or discard this patch.
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( ' &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
-	}
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.