PluginProbe
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP / 1.2.76
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP v1.2.76
1.2.76 1.2.75 1.2.74 1.2.73 1.2.72 1.2.71 1.2.70 1.2.69 1.2.68 1.2.67 1.2.66 1.2.65 1.2.64 1.2.63 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 All 176 releases
userswp / vendor / ayecode / wp-super-duper / sd-functions.php

sd-functions.php in UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP 1.2.76, at vendor/ayecode/wp-super-duper/sd-functions.php

3,921 lines 114.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * A file for common functions.
4 */
5
6 /**
7 * Return an array of global $pagenow page names that should be used to exclude register_widgets.
8 *
9 * Used to block the loading of widgets on certain wp-admin pages to save on memory.
10 *
11 * @return mixed|void
12 */
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 );
29 }
30
31
32 /**
33 * Return an array of widget class names that should be excluded.
34 *
35 * Used to conditionally load widgets code.
36 *
37 * @return mixed|void
38 */
39 function sd_widget_exclude() {
40 return apply_filters( 'sd_widget_exclude', array() );
41 }
42
43
44 /**
45 * A helper function for margin inputs.
46 *
47 * @param string $type
48 * @param array $overwrite
49 *
50 * @return array
51 */
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;
130 }
131
132 /**
133 * A helper function for padding inputs.
134 *
135 * @param string $type
136 * @param array $overwrite
137 *
138 * @return array
139 */
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;
202 }
203
204 /**
205 * A helper function for border inputs.
206 *
207 * @param string $type
208 * @param array $overwrite
209 *
210 * @return array
211 */
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")||[%rounded%])';
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")||[%rounded_size%]!="")';
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 }
304
305 /**
306 * A helper function for shadow inputs.
307 *
308 * @param string $type
309 * @param array $overwrite
310 *
311 * @return array
312 */
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 );
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 );
329
330 $input = wp_parse_args( $overwrite, $defaults );
331
332 return $input;
333 }
334
335 /**
336 * A helper function for background inputs.
337 *
338 * @param string $type
339 * @param array $overwrite
340 *
341 * @return array
342 */
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);
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 );
357
358 $input = wp_parse_args( $overwrite, $defaults );
359
360 return $input;
361 }
362
363 /**
364 * A function to get th opacity options.
365 *
366 * @param $type
367 * @param $overwrite
368 *
369 * @return array
370 */
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;
401 }
402
403 /**
404 * A helper function for a set of background inputs.
405 *
406 * @param string $type
407 * @param array $overwrite
408 *
409 * @return array
410 */
411 function sd_get_background_inputs( $type = 'bg', $overwrite = array(), $overwrite_color = array(), $overwrite_gradient = array(), $overwrite_image = array(), $include_button_colors = false ) {
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;
531 }
532
533 /**
534 * A helper function for a set of inputs for the shape divider.
535 *
536 * @param string $type
537 * @param array $overwrite
538 *
539 * @return array
540 */
541 function sd_get_shape_divider_inputs( $type = 'sd', $overwrite = array(), $overwrite_color = array(), $overwrite_gradient = array(), $overwrite_image = array() ) {
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;
712 }
713
714 /**
715 * Get the element require sting.
716 *
717 * @param $args
718 * @param $key
719 * @param $type
720 *
721 * @return string
722 */
723 function sd_get_element_require_string( $args, $key, $type ) {
724 $output = '';
725 $requires = array();
726
727 if ( ! empty( $args ) ) {
728 foreach ( $args as $t => $k ) {
729 if ( in_array( $key, $k ) ) {
730 $requires[] = '[%' . $type . '%]=="' . $t . '"';
731 }
732 }
733
734 if ( ! empty( $requires ) ) {
735 $output = '(' . implode( ' || ', $requires ) . ')';
736 }
737 }
738
739 return $output;
740 }
741
742 /**
743 * A helper function for text color inputs.
744 *
745 * @param string $type
746 * @param array $overwrite
747 *
748 * @return array
749 */
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);
754
755 if ( $has_custom ) {
756 $options['custom'] = __( 'Custom color', 'ayecode-connect' );
757 }
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 );
767
768 $input = wp_parse_args( $overwrite, $defaults );
769
770 return $input;
771 }
772
773 function sd_get_text_color_input_group( $type = 'text_color', $overwrite = array(), $overwrite_custom = array() ) {
774 $inputs = array();
775
776 if ( $overwrite !== false ) {
777 $inputs[ $type ] = sd_get_text_color_input( $type, $overwrite, true );
778 }
779
780 if ( $overwrite_custom !== false ) {
781 $custom = $type . '_custom';
782 $inputs[ $custom ] = sd_get_custom_color_input( $custom, $overwrite_custom, $type );
783 }
784
785 return $inputs;
786 }
787
788 /**
789 * A helper function for custom color.
790 *
791 * @param string $type
792 * @param array $overwrite
793 *
794 * @return array
795 */
796 function sd_get_custom_color_input( $type = 'color_custom', $overwrite = array(), $parent_type = '' ) {
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 );
806
807 if ( $parent_type ) {
808 $defaults['element_require'] = '[%' . $parent_type . '%]=="custom"';
809 }
810
811 $input = wp_parse_args( $overwrite, $defaults );
812
813 return $input;
814 }
815
816 /**
817 * A helper function for column inputs.
818 *
819 * @param string $type
820 * @param array $overwrite
821 *
822 * @return array
823 */
824 function sd_get_col_input( $type = 'col', $overwrite = array() ) {
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;
864 }
865
866 /**
867 * A helper function for row columns inputs.
868 *
869 * @param string $type
870 * @param array $overwrite
871 *
872 * @return array
873 */
874 function sd_get_row_cols_input( $type = 'row_cols', $overwrite = array() ) {
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;
907 }
908
909 /**
910 * A helper function for text align inputs.
911 *
912 * @param string $type
913 * @param array $overwrite
914 *
915 * @return array
916 */
917 function sd_get_text_align_input( $type = 'text_align', $overwrite = array() ) {
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 );
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 );
942
943 $input = wp_parse_args( $overwrite, $defaults );
944
945 return $input;
946 }
947
948 /**
949 * A helper function for display inputs.
950 *
951 * @param string $type
952 * @param array $overwrite
953 *
954 * @return array
955 */
956 function sd_get_display_input( $type = 'display', $overwrite = array() ) {
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;
991 }
992
993 /**
994 * A helper function for text justify inputs.
995 *
996 * @param string $type
997 * @param array $overwrite
998 *
999 * @return array
1000 */
1001 function sd_get_text_justify_input( $type = 'text_justify', $overwrite = array() ) {
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 );
1010
1011 $input = wp_parse_args( $overwrite, $defaults );
1012
1013 return $input;
1014 }
1015
1016 /**
1017 * Get the AUI colors.
1018 *
1019 * @param $include_branding
1020 * @param $include_outlines
1021 * @param $outline_button_only_text
1022 *
1023 * @return array
1024 */
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 );
1134 }
1135
1136 /**
1137 * Get the AUI branding colors.
1138 *
1139 * @return array
1140 */
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 );
1155 }
1156
1157
1158 /**
1159 * A helper function for container class.
1160 *
1161 * @param string $type
1162 * @param array $overwrite
1163 *
1164 * @return array
1165 */
1166 function sd_get_container_class_input( $type = 'container', $overwrite = array() ) {
1167
1168 $options = array(
1169 'container' => __( 'container (default)', 'ayecode-connect' ),
1170 'container-sm' => 'container-sm',
1171 'container-md' => 'container-md',
1172 'container-lg' => 'container-lg',
1173 'container-xl' => 'container-xl',
1174 'container-xxl' => 'container-xxl',
1175 'container-fluid' => 'container-fluid',
1176 'row' => 'row',
1177 'col' => 'col',
1178 'card' => 'card',
1179 'card-header' => 'card-header',
1180 'card-img-top' => 'card-img-top',
1181 'card-body' => 'card-body',
1182 'card-footer' => 'card-footer',
1183 'list-group' => 'list-group',
1184 'list-group list-group-flush' => 'list-group list-group-flush',
1185 'list-group list-group-numbered' => 'list-group list-group-numbered',
1186 'list-group list-group-flush list-group-numbered' => 'list-group list-group-flush list-group-numbered',
1187 'list-group list-group-horizontal' => 'list-group list-group-horizontal',
1188 'list-group list-group-horizontal list-group-numbered' => 'list-group list-group-horizontal list-group-numbered',
1189 'list-group-item' => 'list-group-item',
1190 '' => __( 'no container class', 'ayecode-connect' ),
1191 );
1192
1193 $defaults = array(
1194 'type' => 'select',
1195 'title' => __( 'Type', 'ayecode-connect' ),
1196 'options' => $options,
1197 'default' => '',
1198 'desc_tip' => true,
1199 'group' => __( 'Container', 'ayecode-connect' ),
1200 );
1201
1202 $input = wp_parse_args( $overwrite, $defaults );
1203
1204 return $input;
1205 }
1206
1207 /**
1208 * A helper function for position class.
1209 *
1210 * @param string $type
1211 * @param array $overwrite
1212 *
1213 * @return array
1214 */
1215 function sd_get_position_class_input( $type = 'position', $overwrite = array() ) {
1216
1217 $options = array(
1218 '' => __( 'Default', 'ayecode-connect' ),
1219 'position-static' => 'static',
1220 'position-relative' => 'relative',
1221 'position-absolute' => 'absolute',
1222 'position-fixed' => 'fixed',
1223 'position-sticky' => 'sticky',
1224 'fixed-top' => 'fixed-top',
1225 'fixed-bottom' => 'fixed-bottom',
1226 'sticky-top' => 'sticky-top',
1227 );
1228
1229 $defaults = array(
1230 'type' => 'select',
1231 'title' => __( 'Position', 'ayecode-connect' ),
1232 'options' => $options,
1233 'default' => '',
1234 'desc_tip' => true,
1235 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
1236 );
1237
1238 $input = wp_parse_args( $overwrite, $defaults );
1239
1240 return $input;
1241 }
1242
1243 /**
1244 * @param $type
1245 * @param $overwrite
1246 *
1247 * @return array
1248 */
1249 function sd_get_absolute_position_input( $type = 'absolute_position', $overwrite = array() ) {
1250
1251 $options = array(
1252 '' => __( 'Default', 'ayecode-connect' ),
1253 'top-left' => 'top-left',
1254 'top-center' => 'top-center',
1255 'top-right' => 'top-right',
1256 'center-left' => 'middle-left',
1257 'center' => 'center',
1258 'center-right' => 'middle-right',
1259 'bottom-left' => 'bottom-left',
1260 'bottom-center' => 'bottom-center',
1261 'bottom-right' => 'bottom-right',
1262 );
1263
1264 $defaults = array(
1265 'type' => 'select',
1266 'title' => __( 'Absolute Position', 'ayecode-connect' ),
1267 'options' => $options,
1268 'default' => '',
1269 'desc_tip' => true,
1270 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
1271 'element_require' => '[%position%]=="position-absolute"',
1272 );
1273
1274 $input = wp_parse_args( $overwrite, $defaults );
1275
1276 return $input;
1277 }
1278
1279 /**
1280 * A helper function for sticky offset input.
1281 *
1282 * @param string $type
1283 * @param array $overwrite
1284 *
1285 * @return array
1286 */
1287 function sd_get_sticky_offset_input( $type = 'top', $overwrite = array() ) {
1288
1289 $defaults = array(
1290 'type' => 'number',
1291 'title' => __( 'Sticky offset', 'ayecode-connect' ),
1292 //'desc' => __( 'Sticky offset', 'ayecode-connect' ),
1293 'default' => '',
1294 'desc_tip' => true,
1295 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
1296 'element_require' => '[%position%]=="sticky" || [%position%]=="sticky-top"',
1297 );
1298
1299 // title
1300 if ( $type == 'top' ) {
1301 $defaults['title'] = __( 'Top offset', 'ayecode-connect' );
1302 $defaults['icon'] = 'box-top';
1303 $defaults['row'] = array(
1304 'title' => __( 'Sticky offset', 'ayecode-connect' ),
1305 'key' => 'sticky-offset',
1306 'open' => true,
1307 'class' => 'text-center',
1308 );
1309 } elseif ( $type == 'bottom' ) {
1310 $defaults['title'] = __( 'Bottom offset', 'ayecode-connect' );
1311 $defaults['icon'] = 'box-bottom';
1312 $defaults['row'] = array(
1313 'key' => 'sticky-offset',
1314 'close' => true,
1315 );
1316 }
1317
1318 $input = wp_parse_args( $overwrite, $defaults );
1319
1320 return $input;
1321 }
1322
1323 /**
1324 * A helper function for font size
1325 *
1326 * @param string $type
1327 * @param array $overwrite
1328 *
1329 * @return array
1330 */
1331 function sd_get_font_size_input( $type = 'font_size', $overwrite = array(), $has_custom = false ) {
1332 global $aui_bs5;
1333
1334 $options[] = __( 'Inherit from parent', 'ayecode-connect' );
1335 if ( $aui_bs5 ) {
1336 // responsive font sizes
1337 $options['fs-base'] = 'fs-base (body default)';
1338 $options['fs-6'] = 'fs-6';
1339 $options['fs-5'] = 'fs-5';
1340 $options['fs-4'] = 'fs-4';
1341 $options['fs-3'] = 'fs-3';
1342 $options['fs-2'] = 'fs-2';
1343 $options['fs-1'] = 'fs-1';
1344
1345 // custom
1346 $options['fs-lg'] = 'fs-lg';
1347 $options['fs-sm'] = 'fs-sm';
1348 $options['fs-xs'] = 'fs-xs';
1349 $options['fs-xxs'] = 'fs-xxs';
1350
1351 }
1352
1353 $options = $options + array(
1354 'h6' => 'h6',
1355 'h5' => 'h5',
1356 'h4' => 'h4',
1357 'h3' => 'h3',
1358 'h2' => 'h2',
1359 'h1' => 'h1',
1360 'display-1' => 'display-1',
1361 'display-2' => 'display-2',
1362 'display-3' => 'display-3',
1363 'display-4' => 'display-4',
1364 );
1365
1366 if ( $aui_bs5 ) {
1367 $options['display-5'] = 'display-5';
1368 $options['display-6'] = 'display-6';
1369 }
1370
1371 if ( $has_custom ) {
1372 $options['custom'] = __( 'Custom size', 'ayecode-connect' );
1373 }
1374
1375 $defaults = array(
1376 'type' => 'select',
1377 'title' => __( 'Font size', 'ayecode-connect' ),
1378 'options' => $options,
1379 'default' => '',
1380 'desc_tip' => true,
1381 'group' => __( 'Typography', 'ayecode-connect' ),
1382 );
1383
1384 $input = wp_parse_args( $overwrite, $defaults );
1385
1386 return $input;
1387 }
1388
1389 /**
1390 * A helper function for custom font size.
1391 *
1392 * @param string $type
1393 * @param array $overwrite
1394 *
1395 * @return array
1396 */
1397 function sd_get_font_custom_size_input( $type = 'font_size_custom', $overwrite = array(), $parent_type = '' ) {
1398
1399 $defaults = array(
1400 'type' => 'number',
1401 'title' => __( 'Font size (rem)', 'ayecode-connect' ),
1402 'default' => '',
1403 'placeholder' => '1.25',
1404 'custom_attributes' => array(
1405 'step' => '0.1',
1406 'min' => '0',
1407 'max' => '100',
1408 ),
1409 'desc_tip' => true,
1410 'group' => __( 'Typography', 'ayecode-connect' ),
1411 );
1412
1413 if ( $parent_type ) {
1414 $defaults['element_require'] = '[%' . $parent_type . '%]=="custom"';
1415 }
1416
1417 $input = wp_parse_args( $overwrite, $defaults );
1418
1419 return $input;
1420 }
1421
1422 /**
1423 * A helper function for custom font size.
1424 *
1425 * @param string $type
1426 * @param array $overwrite
1427 *
1428 * @return array
1429 */
1430 function sd_get_font_line_height_input( $type = 'font_line_height', $overwrite = array() ) {
1431
1432 $defaults = array(
1433 'type' => 'number',
1434 'title' => __( 'Font Line Height', 'ayecode-connect' ),
1435 'default' => '',
1436 'placeholder' => '1.75',
1437 'custom_attributes' => array(
1438 'step' => '0.1',
1439 'min' => '0',
1440 'max' => '100',
1441 ),
1442 'desc_tip' => true,
1443 'group' => __( 'Typography', 'ayecode-connect' ),
1444 );
1445
1446 $input = wp_parse_args( $overwrite, $defaults );
1447
1448 return $input;
1449 }
1450
1451 /**
1452 * A helper function for font size inputs.
1453 *
1454 * @param string $type
1455 * @param array $overwrite
1456 *
1457 * @return array
1458 */
1459 function sd_get_font_size_input_group( $type = 'font_size', $overwrite = array(), $overwrite_custom = array() ) {
1460
1461 $inputs = array();
1462
1463 if ( $overwrite !== false ) {
1464 $inputs[ $type ] = sd_get_font_size_input( $type, $overwrite, true );
1465 }
1466
1467 if ( $overwrite_custom !== false ) {
1468 $custom = $type . '_custom';
1469 $inputs[ $custom ] = sd_get_font_custom_size_input( $custom, $overwrite_custom, $type );
1470 }
1471
1472 return $inputs;
1473 }
1474
1475 /**
1476 * A helper function for font weight.
1477 *
1478 * @param string $type
1479 * @param array $overwrite
1480 *
1481 * @return array
1482 */
1483 function sd_get_font_weight_input( $type = 'font_weight', $overwrite = array() ) {
1484
1485 $options = array(
1486 '' => __( 'Inherit', 'ayecode-connect' ),
1487 'font-weight-bold' => 'bold',
1488 'font-weight-bolder' => 'bolder',
1489 'font-weight-normal' => 'normal',
1490 'font-weight-light' => 'light',
1491 'font-weight-lighter' => 'lighter',
1492 'font-italic' => 'italic',
1493 'font-weight-bold font-italic' => 'bold italic',
1494 'font-weight-bolder font-italic' => 'bolder italic',
1495 'font-weight-normal font-italic' => 'normal italic',
1496 'font-weight-light font-italic' => 'light italic',
1497 'font-weight-lighter font-italic' => 'lighter italic',
1498 );
1499
1500 $defaults = array(
1501 'type' => 'select',
1502 'title' => __( 'Appearance', 'ayecode-connect' ),
1503 'options' => $options,
1504 'default' => '',
1505 'desc_tip' => true,
1506 'group' => __( 'Typography', 'ayecode-connect' ),
1507 );
1508
1509 $input = wp_parse_args( $overwrite, $defaults );
1510
1511 return $input;
1512 }
1513
1514 /**
1515 * A helper function for font case class.
1516 *
1517 * @param $type
1518 * @param $overwrite
1519 *
1520 * @return array
1521 */
1522 function sd_get_font_case_input( $type = 'font_weight', $overwrite = array() ) {
1523
1524 $options = array(
1525 '' => __( 'Default', 'ayecode-connect' ),
1526 'text-lowercase' => __( 'lowercase', 'ayecode-connect' ),
1527 'text-uppercase' => __( 'UPPERCASE', 'ayecode-connect' ),
1528 'text-capitalize' => __( 'Capitalize', 'ayecode-connect' ),
1529 );
1530
1531 $defaults = array(
1532 'type' => 'select',
1533 'title' => __( 'Letter case', 'ayecode-connect' ),
1534 'options' => $options,
1535 'default' => '',
1536 'desc_tip' => true,
1537 'group' => __( 'Typography', 'ayecode-connect' ),
1538 );
1539
1540 $input = wp_parse_args( $overwrite, $defaults );
1541
1542 return $input;
1543 }
1544
1545 /**
1546 * @param string $type
1547 * @param array $overwrite
1548 *
1549 * @return array
1550 * @todo remove this as now included above.
1551 * A helper function for font size
1552 *
1553 */
1554 function sd_get_font_italic_input( $type = 'font_italic', $overwrite = array() ) {
1555
1556 $options = array(
1557 '' => __( 'No', 'ayecode-connect' ),
1558 'font-italic' => __( 'Yes', 'ayecode-connect' ),
1559 );
1560
1561 $defaults = array(
1562 'type' => 'select',
1563 'title' => __( 'Font italic', 'ayecode-connect' ),
1564 'options' => $options,
1565 'default' => '',
1566 'desc_tip' => true,
1567 'group' => __( 'Typography', 'ayecode-connect' ),
1568 );
1569
1570 $input = wp_parse_args( $overwrite, $defaults );
1571
1572 return $input;
1573 }
1574
1575 /**
1576 * A helper function for the anchor input.
1577 *
1578 * @param $type
1579 * @param $overwrite
1580 *
1581 * @return array
1582 */
1583 function sd_get_anchor_input( $type = 'anchor', $overwrite = array() ) {
1584
1585 $defaults = array(
1586 'type' => 'text',
1587 'title' => __( 'HTML anchor', 'ayecode-connect' ),
1588 'desc' => __( 'Enter a word or two — without spaces — to make a unique web address just for this block, called an “anchor.” Then, you’ll be able to link directly to this section of your page.', 'ayecode-connect' ),
1589 'default' => '',
1590 'desc_tip' => true,
1591 'group' => __( 'Advanced', 'ayecode-connect' ),
1592 );
1593
1594 $input = wp_parse_args( $overwrite, $defaults );
1595
1596 return $input;
1597 }
1598
1599 /**
1600 * A helper function for the class input.
1601 *
1602 * @param $type
1603 * @param $overwrite
1604 *
1605 * @return array
1606 */
1607 function sd_get_class_input( $type = 'css_class', $overwrite = array() ) {
1608
1609 $defaults = array(
1610 'type' => 'text',
1611 'title' => __( 'Additional CSS class(es)', 'ayecode-connect' ),
1612 'desc' => __( 'Separate multiple classes with spaces.', 'ayecode-connect' ),
1613 'default' => '',
1614 'desc_tip' => true,
1615 'group' => __( 'Advanced', 'ayecode-connect' ),
1616 );
1617
1618 $input = wp_parse_args( $overwrite, $defaults );
1619
1620 return $input;
1621 }
1622
1623 /**
1624 * A helper function for the class input.
1625 *
1626 * @param $type
1627 * @param $overwrite
1628 *
1629 * @return array
1630 */
1631 function sd_get_custom_name_input( $type = 'metadata_name', $overwrite = array() ) {
1632
1633 $defaults = array(
1634 'type' => 'text',
1635 'title' => __( 'Block Name', 'ayecode-connect' ),
1636 'desc' => __( 'Set a custom name for this block', 'ayecode-connect' ),
1637 'default' => '',
1638 'desc_tip' => true,
1639 'group' => __( 'Advanced', 'ayecode-connect' ),
1640 );
1641
1642 $input = wp_parse_args( $overwrite, $defaults );
1643
1644 return $input;
1645 }
1646
1647 /**
1648 * A helper function for font size inputs.
1649 *
1650 * @param string $type
1651 * @param array $overwrite
1652 *
1653 * @return array
1654 */
1655 function sd_get_hover_animations_input( $type = 'hover_animations', $overwrite = array() ) {
1656
1657 $options = array(
1658 '' => __( 'none', 'ayecode-connect' ),
1659 'hover-zoom' => __( 'Zoom', 'ayecode-connect' ),
1660 'hover-shadow' => __( 'Shadow', 'ayecode-connect' ),
1661 'hover-move-up' => __( 'Move up', 'ayecode-connect' ),
1662 'hover-move-down' => __( 'Move down', 'ayecode-connect' ),
1663 'hover-move-left' => __( 'Move left', 'ayecode-connect' ),
1664 'hover-move-right' => __( 'Move right', 'ayecode-connect' ),
1665 );
1666
1667 $defaults = array(
1668 'type' => 'select',
1669 'multiple' => true,
1670 'title' => __( 'Hover Animations', 'ayecode-connect' ),
1671 'options' => $options,
1672 'default' => '',
1673 'desc_tip' => true,
1674 'group' => __( 'Hover Animations', 'ayecode-connect' ),
1675 );
1676
1677 $input = wp_parse_args( $overwrite, $defaults );
1678
1679 return $input;
1680 }
1681
1682
1683 function sd_get_flex_align_items_input( $type = 'align-items', $overwrite = array() ) {
1684 $device_size = '';
1685 if ( ! empty( $overwrite['device_type'] ) ) {
1686 if ( $overwrite['device_type'] == 'Tablet' ) {
1687 $device_size = '-md';
1688 } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1689 $device_size = '-lg';
1690 }
1691 }
1692 $options = array(
1693 '' => __( 'Default', 'ayecode-connect' ),
1694 'align-items' . $device_size . '-start' => 'align-items-start',
1695 'align-items' . $device_size . '-end' => 'align-items-end',
1696 'align-items' . $device_size . '-center' => 'align-items-center',
1697 'align-items' . $device_size . '-baseline' => 'align-items-baseline',
1698 'align-items' . $device_size . '-stretch' => 'align-items-stretch',
1699 );
1700
1701 $defaults = array(
1702 'type' => 'select',
1703 'title' => __( 'Vertical Align Items', 'ayecode-connect' ),
1704 'options' => $options,
1705 'default' => '',
1706 'desc_tip' => true,
1707 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
1708 'element_require' => ' ( ( [%container%]=="row" ) || ( [%display%]=="d-flex" || [%display_md%]=="d-md-flex" || [%display_lg%]=="d-lg-flex" ) ) ',
1709
1710 );
1711
1712 $input = wp_parse_args( $overwrite, $defaults );
1713
1714 return $input;
1715 }
1716
1717 function sd_get_flex_align_items_input_group( $type = 'flex_align_items', $overwrite = array() ) {
1718 $inputs = array();
1719 $sizes = array(
1720 '' => 'Mobile',
1721 '_md' => 'Tablet',
1722 '_lg' => 'Desktop',
1723 );
1724
1725 if ( $overwrite !== false ) {
1726
1727 foreach ( $sizes as $ds => $dt ) {
1728 $overwrite['device_type'] = $dt;
1729 $inputs[ $type . $ds ] = sd_get_flex_align_items_input( $type, $overwrite );
1730 }
1731 }
1732
1733 return $inputs;
1734 }
1735
1736 function sd_get_flex_justify_content_input( $type = 'flex_justify_content', $overwrite = array() ) {
1737 $device_size = '';
1738 if ( ! empty( $overwrite['device_type'] ) ) {
1739 if ( $overwrite['device_type'] == 'Tablet' ) {
1740 $device_size = '-md';
1741 } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1742 $device_size = '-lg';
1743 }
1744 }
1745 $options = array(
1746 '' => __( 'Default', 'ayecode-connect' ),
1747 'justify-content' . $device_size . '-start' => 'justify-content-start',
1748 'justify-content' . $device_size . '-end' => 'justify-content-end',
1749 'justify-content' . $device_size . '-center' => 'justify-content-center',
1750 'justify-content' . $device_size . '-between' => 'justify-content-between',
1751 'justify-content' . $device_size . '-stretch' => 'justify-content-around',
1752 );
1753
1754 $defaults = array(
1755 'type' => 'select',
1756 'title' => __( 'Justify content', 'ayecode-connect' ),
1757 'options' => $options,
1758 'default' => '',
1759 'desc_tip' => true,
1760 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
1761 'element_require' => '( ( [%container%]=="row" ) || ( [%display%]=="d-flex" || [%display_md%]=="d-md-flex" || [%display_lg%]=="d-lg-flex" ) ) ',
1762
1763 );
1764
1765 $input = wp_parse_args( $overwrite, $defaults );
1766
1767 return $input;
1768 }
1769
1770 function sd_get_flex_justify_content_input_group( $type = 'flex_justify_content', $overwrite = array() ) {
1771 $inputs = array();
1772 $sizes = array(
1773 '' => 'Mobile',
1774 '_md' => 'Tablet',
1775 '_lg' => 'Desktop',
1776 );
1777
1778 if ( $overwrite !== false ) {
1779
1780 foreach ( $sizes as $ds => $dt ) {
1781 $overwrite['device_type'] = $dt;
1782 $inputs[ $type . $ds ] = sd_get_flex_justify_content_input( $type, $overwrite );
1783 }
1784 }
1785
1786 return $inputs;
1787 }
1788
1789
1790 function sd_get_flex_align_self_input( $type = 'flex_align_self', $overwrite = array() ) {
1791 $device_size = '';
1792 if ( ! empty( $overwrite['device_type'] ) ) {
1793 if ( $overwrite['device_type'] == 'Tablet' ) {
1794 $device_size = '-md';
1795 } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1796 $device_size = '-lg';
1797 }
1798 }
1799 $options = array(
1800 '' => __( 'Default', 'ayecode-connect' ),
1801 'align-items' . $device_size . '-start' => 'align-items-start',
1802 'align-items' . $device_size . '-end' => 'align-items-end',
1803 'align-items' . $device_size . '-center' => 'align-items-center',
1804 'align-items' . $device_size . '-baseline' => 'align-items-baseline',
1805 'align-items' . $device_size . '-stretch' => 'align-items-stretch',
1806 );
1807
1808 $defaults = array(
1809 'type' => 'select',
1810 'title' => __( 'Align Self', 'ayecode-connect' ),
1811 'options' => $options,
1812 'default' => '',
1813 'desc_tip' => true,
1814 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
1815 'element_require' => ' [%container%]=="col" ',
1816
1817 );
1818
1819 $input = wp_parse_args( $overwrite, $defaults );
1820
1821 return $input;
1822 }
1823
1824 function sd_get_flex_align_self_input_group( $type = 'flex_align_self', $overwrite = array() ) {
1825 $inputs = array();
1826 $sizes = array(
1827 '' => 'Mobile',
1828 '_md' => 'Tablet',
1829 '_lg' => 'Desktop',
1830 );
1831
1832 if ( $overwrite !== false ) {
1833
1834 foreach ( $sizes as $ds => $dt ) {
1835 $overwrite['device_type'] = $dt;
1836 $inputs[ $type . $ds ] = sd_get_flex_align_self_input( $type, $overwrite );
1837 }
1838 }
1839
1840 return $inputs;
1841 }
1842
1843 function sd_get_flex_order_input( $type = 'flex_order', $overwrite = array() ) {
1844 $device_size = '';
1845 if ( ! empty( $overwrite['device_type'] ) ) {
1846 if ( $overwrite['device_type'] == 'Tablet' ) {
1847 $device_size = '-md';
1848 } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1849 $device_size = '-lg';
1850 }
1851 }
1852 $options = array(
1853 '' => __( 'Default', 'ayecode-connect' ),
1854 );
1855
1856 $i = 0;
1857 while ( $i <= 5 ) {
1858 $options[ 'order' . $device_size . '-' . $i ] = $i;
1859 $i++;
1860 }
1861
1862 $defaults = array(
1863 'type' => 'select',
1864 'title' => __( 'Flex Order', 'ayecode-connect' ),
1865 'options' => $options,
1866 'default' => '',
1867 'desc_tip' => true,
1868 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
1869 'element_require' => ' [%container%]=="col" ',
1870
1871 );
1872
1873 $input = wp_parse_args( $overwrite, $defaults );
1874
1875 return $input;
1876 }
1877
1878 function sd_get_flex_order_input_group( $type = 'flex_order', $overwrite = array() ) {
1879 $inputs = array();
1880 $sizes = array(
1881 '' => 'Mobile',
1882 '_md' => 'Tablet',
1883 '_lg' => 'Desktop',
1884 );
1885
1886 if ( $overwrite !== false ) {
1887
1888 foreach ( $sizes as $ds => $dt ) {
1889 $overwrite['device_type'] = $dt;
1890 $inputs[ $type . $ds ] = sd_get_flex_order_input( $type, $overwrite );
1891 }
1892 }
1893
1894 return $inputs;
1895 }
1896
1897 function sd_get_flex_wrap_group( $type = 'flex_wrap', $overwrite = array() ) {
1898 $inputs = array();
1899 $sizes = array(
1900 '' => 'Mobile',
1901 '_md' => 'Tablet',
1902 '_lg' => 'Desktop',
1903 );
1904
1905 if ( $overwrite !== false ) {
1906
1907 foreach ( $sizes as $ds => $dt ) {
1908 $overwrite['device_type'] = $dt;
1909 $inputs[ $type . $ds ] = sd_get_flex_wrap_input( $type, $overwrite );
1910 }
1911 }
1912
1913 return $inputs;
1914 }
1915
1916 function sd_get_flex_wrap_input( $type = 'flex_wrap', $overwrite = array() ) {
1917 $device_size = '';
1918 if ( ! empty( $overwrite['device_type'] ) ) {
1919 if ( $overwrite['device_type'] == 'Tablet' ) {
1920 $device_size = '-md';
1921 } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1922 $device_size = '-lg';
1923 }
1924 }
1925 $options = array(
1926 '' => __( 'Default', 'ayecode-connect' ),
1927 'flex' . $device_size . '-nowrap' => 'nowrap',
1928 'flex' . $device_size . '-wrap' => 'wrap',
1929 'flex' . $device_size . '-wrap-reverse' => 'wrap-reverse',
1930 );
1931
1932 $defaults = array(
1933 'type' => 'select',
1934 'title' => __( 'Flex wrap', 'ayecode-connect' ),
1935 'options' => $options,
1936 'default' => '',
1937 'desc_tip' => true,
1938 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
1939 );
1940
1941 $input = wp_parse_args( $overwrite, $defaults );
1942
1943 return $input;
1944 }
1945
1946 function sd_get_float_group( $type = 'float', $overwrite = array() ) {
1947 $inputs = array();
1948 $sizes = array(
1949 '' => 'Mobile',
1950 '_md' => 'Tablet',
1951 '_lg' => 'Desktop',
1952 );
1953
1954 if ( $overwrite !== false ) {
1955
1956 foreach ( $sizes as $ds => $dt ) {
1957 $overwrite['device_type'] = $dt;
1958 $inputs[ $type . $ds ] = sd_get_float_input( $type, $overwrite );
1959 }
1960 }
1961
1962 return $inputs;
1963 }
1964 function sd_get_float_input( $type = 'float', $overwrite = array() ) {
1965 $device_size = '';
1966 if ( ! empty( $overwrite['device_type'] ) ) {
1967 if ( $overwrite['device_type'] == 'Tablet' ) {
1968 $device_size = '-md';
1969 } elseif ( $overwrite['device_type'] == 'Desktop' ) {
1970 $device_size = '-lg';
1971 }
1972 }
1973 $options = array(
1974 '' => __( 'Default', 'ayecode-connect' ),
1975 'float' . $device_size . '-start' => 'left',
1976 'float' . $device_size . '-end' => 'right',
1977 'float' . $device_size . '-none' => 'none',
1978 );
1979
1980 $defaults = array(
1981 'type' => 'select',
1982 'title' => __( 'Float', 'ayecode-connect' ),
1983 'options' => $options,
1984 'default' => '',
1985 'desc_tip' => true,
1986 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
1987 );
1988
1989 $input = wp_parse_args( $overwrite, $defaults );
1990
1991 return $input;
1992 }
1993
1994 /**
1995 * @param $type
1996 * @param $overwrite
1997 *
1998 * @return array
1999 */
2000 function sd_get_zindex_input( $type = 'zindex', $overwrite = array() ) {
2001
2002 $options = array(
2003 '' => __( 'Default', 'ayecode-connect' ),
2004 'zindex-0' => '0',
2005 'zindex-1' => '1',
2006 'zindex-5' => '5',
2007 'zindex-10' => '10',
2008 );
2009
2010 $defaults = array(
2011 'type' => 'select',
2012 'title' => __( 'Z-index', 'ayecode-connect' ),
2013 'options' => $options,
2014 'default' => '',
2015 'desc_tip' => true,
2016 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
2017 );
2018
2019 $input = wp_parse_args( $overwrite, $defaults );
2020
2021 return $input;
2022 }
2023
2024 /**
2025 * @param $type
2026 * @param $overwrite
2027 *
2028 * @return array
2029 */
2030 function sd_get_overflow_input( $type = 'overflow', $overwrite = array() ) {
2031
2032 $options = array(
2033 '' => __( 'Default', 'ayecode-connect' ),
2034 'overflow-auto' => __( 'Auto', 'ayecode-connect' ),
2035 'overflow-hidden' => __( 'Hidden', 'ayecode-connect' ),
2036 'overflow-visible' => __( 'Visible', 'ayecode-connect' ),
2037 'overflow-scroll' => __( 'Scroll', 'ayecode-connect' ),
2038 );
2039
2040 $defaults = array(
2041 'type' => 'select',
2042 'title' => __( 'Overflow', 'ayecode-connect' ),
2043 'options' => $options,
2044 'default' => '',
2045 'desc_tip' => true,
2046 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
2047 );
2048
2049 $input = wp_parse_args( $overwrite, $defaults );
2050
2051 return $input;
2052 }
2053
2054 /**
2055 * @param $type
2056 * @param $overwrite
2057 *
2058 * @return array
2059 */
2060 function sd_get_max_height_input( $type = 'max_height', $overwrite = array() ) {
2061
2062 $defaults = array(
2063 'type' => 'text',
2064 'title' => __( 'Max height', 'ayecode-connect' ),
2065 'value' => '',
2066 'default' => '',
2067 'placeholder' => '',
2068 'desc_tip' => true,
2069 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
2070 );
2071
2072 $input = wp_parse_args( $overwrite, $defaults );
2073
2074 return $input;
2075 }
2076
2077 /**
2078 * @param $type
2079 * @param $overwrite
2080 *
2081 * @return array
2082 */
2083 function sd_get_scrollbars_input( $type = 'scrollbars', $overwrite = array() ) {
2084
2085 $options = array(
2086 '' => __( 'Default', 'ayecode-connect' ),
2087 'scrollbars-ios' => __( 'IOS Style', 'ayecode-connect' ),
2088 );
2089
2090 $defaults = array(
2091 'type' => 'select',
2092 'title' => __( 'Scrollbars', 'ayecode-connect' ),
2093 'options' => $options,
2094 'default' => '',
2095 'desc_tip' => true,
2096 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
2097 );
2098
2099 $input = wp_parse_args( $overwrite, $defaults );
2100
2101 return $input;
2102 }
2103
2104 /**
2105 * @param $type
2106 * @param $overwrite
2107 *
2108 * @return array
2109 */
2110 function sd_get_new_window_input( $type = 'target', $overwrite = array() ) {
2111
2112 $defaults = array(
2113 'type' => 'checkbox',
2114 'title' => __( 'Open in new window', 'ayecode-connect' ),
2115 'default' => '',
2116 'desc_tip' => true,
2117 'group' => __( 'Link', 'ayecode-connect' ),
2118 );
2119
2120 $input = wp_parse_args( $overwrite, $defaults );
2121
2122 return $input;
2123 }
2124
2125 /**
2126 * @param $type
2127 * @param $overwrite
2128 *
2129 * @return array
2130 */
2131 function sd_get_nofollow_input( $type = 'nofollow', $overwrite = array() ) {
2132
2133 $defaults = array(
2134 'type' => 'checkbox',
2135 'title' => __( 'Add nofollow', 'ayecode-connect' ),
2136 'default' => '',
2137 'desc_tip' => true,
2138 'group' => __( 'Link', 'ayecode-connect' ),
2139 );
2140
2141 $input = wp_parse_args( $overwrite, $defaults );
2142
2143 return $input;
2144 }
2145
2146 /**
2147 * A helper function for width inputs.
2148 *
2149 * @param string $type
2150 * @param array $overwrite
2151 *
2152 * @return array
2153 */
2154 function sd_get_width_input( $type = 'width', $overwrite = array() ) {
2155
2156 $device_size = '';
2157 if ( ! empty( $overwrite['device_type'] ) ) {
2158 if ( $overwrite['device_type'] == 'Tablet' ) {
2159 $device_size = '-md';
2160 } elseif ( $overwrite['device_type'] == 'Desktop' ) {
2161 $device_size = '-lg';
2162 }
2163 }
2164 $options = array(
2165 '' => __('Default', 'ayecode-connect'),
2166 'w' . $device_size . '-25' => '25%',
2167 'w' . $device_size . '-50' => '50%',
2168 'w' . $device_size . '-75' => '75%',
2169 'w' . $device_size . '-100' => '100%',
2170 'w' . $device_size . '-auto' => 'auto',
2171 );
2172
2173 $defaults = array(
2174 'type' => 'select',
2175 'title' => __( 'Width', 'ayecode-connect' ),
2176 'options' => $options,
2177 'default' => '',
2178 'desc_tip' => true,
2179 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
2180 );
2181
2182 $input = wp_parse_args( $overwrite, $defaults );
2183
2184 return $input;
2185 }
2186
2187 /**
2188 * A helper function for height inputs.
2189 *
2190 * @param string $type
2191 * @param array $overwrite
2192 *
2193 * @return array
2194 */
2195 function sd_get_height_input( $type = 'height', $overwrite = array() ) {
2196
2197 $device_size = '';
2198 if ( ! empty( $overwrite['device_type'] ) ) {
2199 if ( $overwrite['device_type'] == 'Tablet' ) {
2200 $device_size = '-md';
2201 } elseif ( $overwrite['device_type'] == 'Desktop' ) {
2202 $device_size = '-lg';
2203 }
2204 }
2205 $options = array(
2206 '' => __('Default', 'ayecode-connect'),
2207 'h' . $device_size . '-25' => '25%',
2208 'h' . $device_size . '-50' => '50%',
2209 'h' . $device_size . '-75' => '75%',
2210 'h' . $device_size . '-100' => '100%',
2211 'h' . $device_size . '-auto' => 'auto',
2212 );
2213
2214 $defaults = array(
2215 'type' => 'select',
2216 'title' => __( 'Height', 'ayecode-connect' ),
2217 'options' => $options,
2218 'default' => '',
2219 'desc_tip' => true,
2220 'group' => __( 'Wrapper Styles', 'ayecode-connect' ),
2221 );
2222
2223 $input = wp_parse_args( $overwrite, $defaults );
2224
2225 return $input;
2226 }
2227
2228 /**
2229 * @param $type
2230 * @param $overwrite
2231 *
2232 * @return array
2233 */
2234 function sd_get_attributes_input( $type = 'attributes', $overwrite = array() ) {
2235
2236 $defaults = array(
2237 'type' => 'text',
2238 'title' => __( 'Custom Attributes', 'ayecode-connect' ),
2239 'value' => '',
2240 'default' => '',
2241 'placeholder' => 'key|value,key2|value2',
2242 'desc_tip' => true,
2243 'group' => __( 'Link', 'ayecode-connect' ),
2244 );
2245
2246 $input = wp_parse_args( $overwrite, $defaults );
2247
2248 return $input;
2249 }
2250
2251 /**
2252 * @param $args
2253 *
2254 * @return string
2255 */
2256 function sd_build_attributes_string_escaped( $args ) {
2257 global $aui_bs5;
2258
2259 $attributes = array();
2260 $string_escaped = '';
2261
2262 if ( ! empty( $args['custom'] ) ) {
2263 $attributes = sd_parse_custom_attributes($args['custom']);
2264 }
2265
2266 // new window
2267 if ( ! empty( $args['new_window'] ) ) {
2268 $attributes['target'] = '_blank';
2269 }
2270
2271 // nofollow
2272 if ( ! empty( $args['nofollow'] ) ) {
2273 $attributes['rel'] = isset($attributes['rel']) ? $attributes['rel'] . ' nofollow' : 'nofollow';
2274 }
2275
2276 if(!empty($attributes )){
2277 foreach ( $attributes as $key => $val ) {
2278 $string_escaped .= esc_attr($key) . '="' . esc_attr($val) . '" ';
2279 }
2280 }
2281
2282 return $string_escaped;
2283 }
2284
2285 /**
2286 * @info borrowed from elementor
2287 *
2288 * @param $attributes_string
2289 * @param $delimiter
2290 *
2291 * @return array
2292 */
2293 function sd_parse_custom_attributes( $attributes_string, $delimiter = ',' ) {
2294 $attributes = explode( $delimiter, $attributes_string );
2295 $result = [];
2296
2297 foreach ( $attributes as $attribute ) {
2298 $attr_key_value = explode( '|', $attribute );
2299
2300 if ( function_exists( 'mb_strtolower' ) ) {
2301 $attr_key = mb_strtolower( $attr_key_value[0] );
2302 } else {
2303 $attr_key = strtolower( $attr_key_value[0] );
2304 }
2305
2306 // Remove any not allowed characters.
2307 preg_match( '/[-_a-z0-9]+/', $attr_key, $attr_key_matches );
2308
2309 if ( empty( $attr_key_matches[0] ) ) {
2310 continue;
2311 }
2312
2313 $attr_key = $attr_key_matches[0];
2314
2315 // Avoid Javascript events and unescaped href.
2316 if ( 'href' === $attr_key || 'on' === substr( $attr_key, 0, 2 ) ) {
2317 continue;
2318 }
2319
2320 if ( isset( $attr_key_value[1] ) ) {
2321 $attr_value = trim( $attr_key_value[1] );
2322 } else {
2323 $attr_value = '';
2324 }
2325
2326 $result[ $attr_key ] = $attr_value;
2327 }
2328
2329 return $result;
2330 }
2331
2332 /**
2333 * Build AUI classes from settings.
2334 *
2335 * @param $args
2336 *
2337 * @return string
2338 * @todo find best way to use px- py- or general p-
2339 */
2340 function sd_build_aui_class( $args ) {
2341 global $aui_bs5;
2342
2343 $classes = array();
2344
2345 if ( $aui_bs5 ) {
2346 $p_ml = 'ms-';
2347 $p_mr = 'me-';
2348
2349 $p_pl = 'ps-';
2350 $p_pr = 'pe-';
2351 } else {
2352 $p_ml = 'ml-';
2353 $p_mr = 'mr-';
2354
2355 $p_pl = 'pl-';
2356 $p_pr = 'pr-';
2357 }
2358
2359 // margins.
2360 if ( isset( $args['mt'] ) && $args['mt'] !== '' ) {
2361 $classes[] = 'mt-' . sanitize_html_class( $args['mt'] );
2362 $mt = $args['mt'];
2363 } else {
2364 $mt = null;
2365 }
2366 if ( isset( $args['mr'] ) && $args['mr'] !== '' ) {
2367 $classes[] = $p_mr . sanitize_html_class( $args['mr'] );
2368 $mr = $args['mr'];
2369 } else {
2370 $mr = null;
2371 }
2372 if ( isset( $args['mb'] ) && $args['mb'] !== '' ) {
2373 $classes[] = 'mb-' . sanitize_html_class( $args['mb'] );
2374 $mb = $args['mb'];
2375 } else {
2376 $mb = null;
2377 }
2378 if ( isset( $args['ml'] ) && $args['ml'] !== '' ) {
2379 $classes[] = $p_ml . sanitize_html_class( $args['ml'] );
2380 $ml = $args['ml'];
2381 } else {
2382 $ml = null;
2383 }
2384
2385 // margins tablet.
2386 if ( isset( $args['mt_md'] ) && $args['mt_md'] !== '' ) {
2387 $classes[] = 'mt-md-' . sanitize_html_class( $args['mt_md'] );
2388 $mt_md = $args['mt_md'];
2389 } else {
2390 $mt_md = null;
2391 }
2392 if ( isset( $args['mr_md'] ) && $args['mr_md'] !== '' ) {
2393 $classes[] = $p_mr . 'md-' . sanitize_html_class( $args['mr_md'] );
2394 $mr_md = $args['mr_md'];
2395 } else {
2396 $mr_md = null;
2397 }
2398 if ( isset( $args['mb_md'] ) && $args['mb_md'] !== '' ) {
2399 $classes[] = 'mb-md-' . sanitize_html_class( $args['mb_md'] );
2400 $mb_md = $args['mb_md'];
2401 } else {
2402 $mb_md = null;
2403 }
2404 if ( isset( $args['ml_md'] ) && $args['ml_md'] !== '' ) {
2405 $classes[] = $p_ml . 'md-' . sanitize_html_class( $args['ml_md'] );
2406 $ml_md = $args['ml_md'];
2407 } else {
2408 $ml_md = null;
2409 }
2410
2411 // margins desktop.
2412 if ( isset( $args['mt_lg'] ) && $args['mt_lg'] !== '' ) {
2413 if ( $mt == null && $mt_md == null ) {
2414 $classes[] = 'mt-' . sanitize_html_class( $args['mt_lg'] );
2415 } else {
2416 $classes[] = 'mt-lg-' . sanitize_html_class( $args['mt_lg'] );
2417 }
2418 }
2419 if ( isset( $args['mr_lg'] ) && $args['mr_lg'] !== '' ) {
2420 if ( $mr == null && $mr_md == null ) {
2421 $classes[] = $p_mr . sanitize_html_class( $args['mr_lg'] );
2422 } else {
2423 $classes[] = $p_mr . 'lg-' . sanitize_html_class( $args['mr_lg'] );
2424 }
2425 }
2426 if ( isset( $args['mb_lg'] ) && $args['mb_lg'] !== '' ) {
2427 if ( $mb == null && $mb_md == null ) {
2428 $classes[] = 'mb-' . sanitize_html_class( $args['mb_lg'] );
2429 } else {
2430 $classes[] = 'mb-lg-' . sanitize_html_class( $args['mb_lg'] );
2431 }
2432 }
2433 if ( isset( $args['ml_lg'] ) && $args['ml_lg'] !== '' ) {
2434 if ( $ml == null && $ml_md == null ) {
2435 $classes[] = $p_ml . sanitize_html_class( $args['ml_lg'] );
2436 } else {
2437 $classes[] = $p_ml . 'lg-' . sanitize_html_class( $args['ml_lg'] );
2438 }
2439 }
2440
2441 // padding.
2442 if ( isset( $args['pt'] ) && $args['pt'] !== '' ) {
2443 $classes[] = 'pt-' . sanitize_html_class( $args['pt'] );
2444 $pt = $args['pt'];
2445 } else {
2446 $pt = null;
2447 }
2448 if ( isset( $args['pr'] ) && $args['pr'] !== '' ) {
2449 $classes[] = $p_pr . sanitize_html_class( $args['pr'] );
2450 $pr = $args['pr'];
2451 } else {
2452 $pr = null;
2453 }
2454 if ( isset( $args['pb'] ) && $args['pb'] !== '' ) {
2455 $classes[] = 'pb-' . sanitize_html_class( $args['pb'] );
2456 $pb = $args['pb'];
2457 } else {
2458 $pb = null;
2459 }
2460 if ( isset( $args['pl'] ) && $args['pl'] !== '' ) {
2461 $classes[] = $p_pl . sanitize_html_class( $args['pl'] );
2462 $pl = $args['pl'];
2463 } else {
2464 $pl = null;
2465 }
2466
2467 // padding tablet.
2468 if ( isset( $args['pt_md'] ) && $args['pt_md'] !== '' ) {
2469 $classes[] = 'pt-md-' . sanitize_html_class( $args['pt_md'] );
2470 $pt_md = $args['pt_md'];
2471 } else {
2472 $pt_md = null;
2473 }
2474 if ( isset( $args['pr_md'] ) && $args['pr_md'] !== '' ) {
2475 $classes[] = $p_pr . 'md-' . sanitize_html_class( $args['pr_md'] );
2476 $pr_md = $args['pr_md'];
2477 } else {
2478 $pr_md = null;
2479 }
2480 if ( isset( $args['pb_md'] ) && $args['pb_md'] !== '' ) {
2481 $classes[] = 'pb-md-' . sanitize_html_class( $args['pb_md'] );
2482 $pb_md = $args['pb_md'];
2483 } else {
2484 $pb_md = null;
2485 }
2486 if ( isset( $args['pl_md'] ) && $args['pl_md'] !== '' ) {
2487 $classes[] = $p_pl . 'md-' . sanitize_html_class( $args['pl_md'] );
2488 $pl_md = $args['pl_md'];
2489 } else {
2490 $pl_md = null;
2491 }
2492
2493 // padding desktop.
2494 if ( isset( $args['pt_lg'] ) && $args['pt_lg'] !== '' ) {
2495 if ( $pt == null && $pt_md == null ) {
2496 $classes[] = 'pt-' . sanitize_html_class( $args['pt_lg'] );
2497 } else {
2498 $classes[] = 'pt-lg-' . sanitize_html_class( $args['pt_lg'] );
2499 }
2500 }
2501 if ( isset( $args['pr_lg'] ) && $args['pr_lg'] !== '' ) {
2502 if ( $pr == null && $pr_md == null ) {
2503 $classes[] = $p_pr . sanitize_html_class( $args['pr_lg'] );
2504 } else {
2505 $classes[] = $p_pr . 'lg-' . sanitize_html_class( $args['pr_lg'] );
2506 }
2507 }
2508 if ( isset( $args['pb_lg'] ) && $args['pb_lg'] !== '' ) {
2509 if ( $pb == null && $pb_md == null ) {
2510 $classes[] = 'pb-' . sanitize_html_class( $args['pb_lg'] );
2511 } else {
2512 $classes[] = 'pb-lg-' . sanitize_html_class( $args['pb_lg'] );
2513 }
2514 }
2515 if ( isset( $args['pl_lg'] ) && $args['pl_lg'] !== '' ) {
2516 if ( $pl == null && $pl_md == null ) {
2517 $classes[] = $p_pl . sanitize_html_class( $args['pl_lg'] );
2518 } else {
2519 $classes[] = $p_pl . 'lg-' . sanitize_html_class( $args['pl_lg'] );
2520 }
2521 }
2522
2523 // row cols, mobile, tablet, desktop
2524 if ( ! empty( $args['row_cols'] ) && $args['row_cols'] !== '' ) {
2525 $classes[] = sanitize_html_class( 'row-cols-' . $args['row_cols'] );
2526 $row_cols = $args['row_cols'];
2527 } else {
2528 $row_cols = null;
2529 }
2530 if ( ! empty( $args['row_cols_md'] ) && $args['row_cols_md'] !== '' ) {
2531 $classes[] = sanitize_html_class( 'row-cols-md-' . $args['row_cols_md'] );
2532 $row_cols_md = $args['row_cols_md'];
2533 } else {
2534 $row_cols_md = null;
2535 }
2536 if ( ! empty( $args['row_cols_lg'] ) && $args['row_cols_lg'] !== '' ) {
2537 if ( $row_cols == null && $row_cols_md == null ) {
2538 $classes[] = sanitize_html_class( 'row-cols-' . $args['row_cols_lg'] );
2539 } else {
2540 $classes[] = sanitize_html_class( 'row-cols-lg-' . $args['row_cols_lg'] );
2541 }
2542 }
2543
2544 // columns , mobile, tablet, desktop
2545 if ( ! empty( $args['col'] ) && $args['col'] !== '' ) {
2546 $classes[] = sanitize_html_class( 'col-' . $args['col'] );
2547 $col = $args['col'];
2548 } else {
2549 $col = null;
2550 }
2551 if ( ! empty( $args['col_md'] ) && $args['col_md'] !== '' ) {
2552 $classes[] = sanitize_html_class( 'col-md-' . $args['col_md'] );
2553 $col_md = $args['col_md'];
2554 } else {
2555 $col_md = null;
2556 }
2557 if ( ! empty( $args['col_lg'] ) && $args['col_lg'] !== '' ) {
2558 if ( $col == null && $col_md == null ) {
2559 $classes[] = sanitize_html_class( 'col-' . $args['col_lg'] );
2560 } else {
2561 $classes[] = sanitize_html_class( 'col-lg-' . $args['col_lg'] );
2562 }
2563 }
2564
2565 // border
2566 if ( isset( $args['border'] ) && ( $args['border'] == 'none' || $args['border'] === '0' || $args['border'] === 0 ) ) {
2567 $classes[] = 'border-0';
2568 } elseif ( ! empty( $args['border'] ) ) {
2569 $border_class = 'border';
2570 if ( ! empty( $args['border_type'] ) && strpos( $args['border_type'], '-0' ) === false ) {
2571 $border_class = '';
2572 }
2573 $classes[] = $border_class . ' border-' . sanitize_html_class( $args['border'] );
2574 }
2575
2576 // border radius type
2577 if ( ! empty( $args['rounded'] ) ) {
2578 $classes[] = sanitize_html_class( $args['rounded'] );
2579 }
2580
2581 // border radius size BS4
2582 if ( isset( $args['rounded_size'] ) && in_array( $args['rounded_size'], array( 'sm', 'lg' ) ) ) {
2583 $classes[] = 'rounded-' . sanitize_html_class( $args['rounded_size'] );
2584 // if we set a size then we need to remove "rounded" if set
2585 if ( ( $key = array_search( 'rounded', $classes ) ) !== false ) {
2586 unset( $classes[ $key ] );
2587 }
2588 } else {
2589
2590 // border radius size , mobile, tablet, desktop
2591 if ( isset( $args['rounded_size'] ) && $args['rounded_size'] !== '' ) {
2592 $classes[] = sanitize_html_class( 'rounded-' . $args['rounded_size'] );
2593 $rounded_size = $args['rounded_size'];
2594 } else {
2595 $rounded_size = null;
2596 }
2597 if ( isset( $args['rounded_size_md'] ) && $args['rounded_size_md'] !== '' ) {
2598 $classes[] = sanitize_html_class( 'rounded-md-' . $args['rounded_size_md'] );
2599 $rounded_size_md = $args['rounded_size_md'];
2600 } else {
2601 $rounded_size_md = null;
2602 }
2603 if ( isset( $args['rounded_size_lg'] ) && $args['rounded_size_lg'] !== '' ) {
2604 if ( $rounded_size == null && $rounded_size_md == null ) {
2605 $classes[] = sanitize_html_class( 'rounded-' . $args['rounded_size_lg'] );
2606 } else {
2607 $classes[] = sanitize_html_class( 'rounded-lg-' . $args['rounded_size_lg'] );
2608 }
2609 }
2610 }
2611
2612 // shadow
2613 //if ( !empty( $args['shadow'] ) ) { $classes[] = sanitize_html_class($args['shadow']); }
2614
2615 // background
2616 if ( ! empty( $args['bg'] ) ) {
2617 $classes[] = 'bg-' . sanitize_html_class( $args['bg'] );
2618 }
2619
2620 // background image fixed bg_image_fixed this helps fix a iOS bug
2621 if ( ! empty( $args['bg_image_fixed'] ) ) {
2622 $classes[] = 'bg-image-fixed';
2623 }
2624
2625 // text_color
2626 if ( ! empty( $args['text_color'] ) ) {
2627 $classes[] = 'text-' . sanitize_html_class( $args['text_color'] );
2628 }
2629
2630 // text_align
2631 if ( ! empty( $args['text_justify'] ) ) {
2632 $classes[] = 'text-justify';
2633 } else {
2634 if ( ! empty( $args['text_align'] ) ) {
2635 $classes[] = sanitize_html_class( $args['text_align'] );
2636 $text_align = $args['text_align'];
2637 } else {
2638 $text_align = null;
2639 }
2640 if ( ! empty( $args['text_align_md'] ) && $args['text_align_md'] !== '' ) {
2641 $classes[] = sanitize_html_class( $args['text_align_md'] );
2642 $text_align_md = $args['text_align_md'];
2643 } else {
2644 $text_align_md = null;
2645 }
2646 if ( ! empty( $args['text_align_lg'] ) && $args['text_align_lg'] !== '' ) {
2647 if ( $text_align == null && $text_align_md == null ) {
2648 $classes[] = sanitize_html_class( str_replace( '-lg', '', $args['text_align_lg'] ) );
2649 } else {
2650 $classes[] = sanitize_html_class( $args['text_align_lg'] );
2651 }
2652 }
2653 }
2654
2655 // display
2656 if ( ! empty( $args['display'] ) ) {
2657 $classes[] = sanitize_html_class( $args['display'] );
2658 $display = $args['display'];
2659 } else {
2660 $display = null;
2661 }
2662 if ( ! empty( $args['display_md'] ) && $args['display_md'] !== '' ) {
2663 $classes[] = sanitize_html_class( $args['display_md'] );
2664 $display_md = $args['display_md'];
2665 } else {
2666 $display_md = null;
2667 }
2668 if ( ! empty( $args['display_lg'] ) && $args['display_lg'] !== '' ) {
2669 if ( $display == null && $display_md == null ) {
2670 $classes[] = sanitize_html_class( str_replace( '-lg', '', $args['display_lg'] ) );
2671 } else {
2672 $classes[] = sanitize_html_class( $args['display_lg'] );
2673 }
2674 }
2675
2676 // bgtus - background transparent until scroll
2677 if ( ! empty( $args['bgtus'] ) ) {
2678 $classes[] = sanitize_html_class( 'bg-transparent-until-scroll' );
2679 }
2680
2681 // cscos - change color scheme on scroll
2682 if ( ! empty( $args['bgtus'] ) && ! empty( $args['cscos'] ) ) {
2683 $classes[] = sanitize_html_class( 'color-scheme-flip-on-scroll' );
2684 }
2685
2686 // hover animations
2687 if ( ! empty( $args['hover_animations'] ) ) {
2688 $classes[] = sd_sanitize_html_classes( str_replace( ',', ' ', $args['hover_animations'] ) );
2689 }
2690
2691 // absolute_position
2692 if ( ! empty( $args['absolute_position'] ) ) {
2693 if ( 'top-left' === $args['absolute_position'] ) {
2694 $classes[] = 'start-0 top-0';
2695 } elseif ( 'top-center' === $args['absolute_position'] ) {
2696 $classes[] = 'start-50 top-0 translate-middle';
2697 } elseif ( 'top-right' === $args['absolute_position'] ) {
2698 $classes[] = 'end-0 top-0';
2699 } elseif ( 'center-left' === $args['absolute_position'] ) {
2700 $classes[] = 'start-0 top-50';
2701 } elseif ( 'center' === $args['absolute_position'] ) {
2702 $classes[] = 'start-50 top-50 translate-middle';
2703 } elseif ( 'center-right' === $args['absolute_position'] ) {
2704 $classes[] = 'end-0 top-50';
2705 } elseif ( 'bottom-left' === $args['absolute_position'] ) {
2706 $classes[] = 'start-0 bottom-0';
2707 } elseif ( 'bottom-center' === $args['absolute_position'] ) {
2708 $classes[] = 'start-50 bottom-0 translate-middle';
2709 } elseif ( 'bottom-right' === $args['absolute_position'] ) {
2710 $classes[] = 'end-0 bottom-0';
2711 }
2712 }
2713
2714 // build classes from build keys
2715 $build_keys = sd_get_class_build_keys();
2716 if ( ! empty( $build_keys ) ) {
2717 foreach ( $build_keys as $key ) {
2718
2719 if ( substr( $key, -4 ) == '-MTD' ) {
2720
2721 $k = str_replace( '-MTD', '', $key );
2722
2723 // Mobile, Tablet, Desktop
2724 if ( ! empty( $args[ $k ] ) && $args[ $k ] !== '' ) {
2725 $classes[] = sanitize_html_class( $args[ $k ] );
2726 $v = $args[ $k ];
2727 } else {
2728 $v = null;
2729 }
2730 if ( ! empty( $args[ $k . '_md' ] ) && $args[ $k . '_md' ] !== '' ) {
2731 $classes[] = sanitize_html_class( $args[ $k . '_md' ] );
2732 $v_md = $args[ $k . '_md' ];
2733 } else {
2734 $v_md = null;
2735 }
2736 if ( ! empty( $args[ $k . '_lg' ] ) && $args[ $k . '_lg' ] !== '' ) {
2737 if ( $v == null && $v_md == null ) {
2738 $classes[] = sanitize_html_class( str_replace( '-lg', '', $args[ $k . '_lg' ] ) );
2739 } else {
2740 $classes[] = sanitize_html_class( $args[ $k . '_lg' ] );
2741 }
2742 }
2743 } else {
2744 if ( $key == 'font_size' && ! empty( $args[ $key ] ) && $args[ $key ] == 'custom' ) {
2745 continue;
2746 }
2747 if ( ! empty( $args[ $key ] ) ) {
2748 $classes[] = sd_sanitize_html_classes( $args[ $key ] );
2749 }
2750 }
2751 }
2752 }
2753
2754 if ( ! empty( $classes ) ) {
2755 $classes = array_unique( array_filter( array_map( 'trim', $classes ) ) );
2756 }
2757
2758 return implode( ' ', $classes );
2759 }
2760
2761 /**
2762 * Build Style output from arguments.
2763 *
2764 * @param $args
2765 *
2766 * @return array
2767 */
2768 function sd_build_aui_styles( $args ) {
2769 $styles = array();
2770
2771 // background color
2772 if ( ! empty( $args['bg'] ) && $args['bg'] !== '' ) {
2773 if ( $args['bg'] == 'custom-color' ) {
2774 $styles['background-color'] = sd_sanitize_css_color( $args['bg_color'] );
2775 } elseif ( $args['bg'] == 'custom-gradient' ) {
2776 $styles['background-image'] = sd_sanitize_css_color( $args['bg_gradient'] );
2777
2778 // use background on text.
2779 if ( ! empty( $args['bg_on_text'] ) && $args['bg_on_text'] ) {
2780 $styles['background-clip'] = 'text';
2781 $styles['-webkit-background-clip'] = 'text';
2782 $styles['text-fill-color'] = 'transparent';
2783 $styles['-webkit-text-fill-color'] = 'transparent';
2784 }
2785 }
2786 }
2787
2788 if ( ! empty( $args['bg_image'] ) && $args['bg_image'] !== '' ) {
2789 $hasImage = true;
2790 if ( ! empty( $styles['background-color'] ) && $args['bg'] == 'custom-color' ) {
2791 $styles['background-image'] = 'url(' . $args['bg_image'] . ')';
2792 $styles['background-blend-mode'] = 'overlay';
2793 } elseif ( ! empty( $styles['background-image'] ) && $args['bg'] == 'custom-gradient' ) {
2794 $styles['background-image'] .= ',url(' . $args['bg_image'] . ')';
2795 } elseif ( ! empty( $args['bg'] ) && $args['bg'] != '' && $args['bg'] != 'transparent' ) {
2796 // do nothing as we alreay have a preset
2797 $hasImage = false;
2798 } else {
2799 $styles['background-image'] = 'url(' . $args['bg_image'] . ')';
2800 }
2801
2802 if ( $hasImage ) {
2803 $styles['background-size'] = 'cover';
2804
2805 if ( ! empty( $args['bg_image_fixed'] ) && $args['bg_image_fixed'] ) {
2806 $styles['background-attachment'] = 'fixed';
2807 }
2808 }
2809
2810 if ( $hasImage && ! empty( $args['bg_image_xy'] ) && ! empty( $args['bg_image_xy']['x'] ) ) {
2811 $styles['background-position'] = ( $args['bg_image_xy']['x'] * 100 ) . '% ' . ( $args['bg_image_xy']['y'] * 100 ) . '%';
2812 }
2813 }
2814
2815 // sticky offset top
2816 if ( ! empty( $args['sticky_offset_top'] ) && $args['sticky_offset_top'] !== '' ) {
2817 $styles['top'] = absint( $args['sticky_offset_top'] );
2818 }
2819
2820 // sticky offset bottom
2821 if ( ! empty( $args['sticky_offset_bottom'] ) && $args['sticky_offset_bottom'] !== '' ) {
2822 $styles['bottom'] = absint( $args['sticky_offset_bottom'] );
2823 }
2824
2825 // font size
2826 if ( ! empty( $args['font_size_custom'] ) && $args['font_size_custom'] !== '' ) {
2827 $styles['font-size'] = (float) $args['font_size_custom'] . 'rem';
2828 }
2829
2830 // font color
2831 if ( ! empty( $args['text_color_custom'] ) && $args['text_color_custom'] !== '' ) {
2832 $styles['color'] = sd_sanitize_css_color( $args['text_color_custom'] );
2833 }
2834
2835 // font line height
2836 if ( ! empty( $args['font_line_height'] ) && $args['font_line_height'] !== '' ) {
2837 $styles['line-height'] = esc_attr( $args['font_line_height'] );
2838 }
2839
2840 // max height
2841 if ( ! empty( $args['max_height'] ) && $args['max_height'] !== '' ) {
2842 $styles['max-height'] = esc_attr( $args['max_height'] );
2843 }
2844
2845 $style_string = '';
2846 if ( ! empty( $styles ) ) {
2847 foreach ( $styles as $key => $val ) {
2848 $style_string .= esc_attr( $key ) . ':' . esc_attr( $val ) . ';';
2849 }
2850 }
2851
2852 return $style_string;
2853
2854 }
2855
2856 /**
2857 * Build the hover styles from args.
2858 *
2859 * @param $args
2860 * @param $is_preview
2861 *
2862 * @return string
2863 */
2864 function sd_build_hover_styles( $args, $is_preview = false ) {
2865 $rules = '';
2866
2867 // text color
2868 if ( ! empty( $args['styleid'] ) ) {
2869 // The style id is used as a CSS class selector, so only class-safe characters may survive.
2870 $styleid_classes = array_filter( array_map( 'sanitize_html_class', explode( ' ', (string) $args['styleid'] ) ) );
2871
2872 if ( empty( $styleid_classes ) ) {
2873 return '';
2874 }
2875
2876 $styleid_class = implode( '.', $styleid_classes );
2877 $styleid = $is_preview ? 'html .editor-styles-wrapper .' . $styleid_class : 'html .' . $styleid_class;
2878
2879 // text_color_hover
2880 if ( ! empty( $args['text_color_hover'] ) ) {
2881 $key = 'custom' === $args['text_color_hover'] && ! empty( $args['text_color_hover_custom'] ) ? 'text_color_hover_custom' : 'text_color_hover';
2882 $color = sd_sanitize_css_color( $args[ $key ], 'inherit' );
2883 $color = sd_get_color_from_var( $color );
2884 $rules .= $styleid . ':hover {color: ' . $color . ' !important;} ';
2885 }
2886
2887 // bg_hover
2888 if ( ! empty( $args['bg_hover'] ) ) {
2889 if ( 'custom-gradient' === $args['bg_hover'] ) {
2890 $color = sd_sanitize_css_color( $args['bg_hover_gradient'], 'inherit' );
2891 $rules .= $styleid . ':hover {background-image: ' . $color . ' !important;} ';
2892 $rules .= $styleid . '.btn:hover {border-color: transparent !important;} ';
2893 } else {
2894 $key = 'custom-color' === $args['bg_hover'] ? 'bg_hover_color' : 'bg_hover';
2895 $color = sd_sanitize_css_color( $args[ $key ], 'inherit' );
2896 $color = sd_get_color_from_var( $color );
2897 $rules .= $styleid . ':hover {background: ' . $color . ' !important;} ';
2898 $rules .= $styleid . '.btn:hover {border-color: ' . $color . ' !important;} ';
2899 }
2900 }
2901 }
2902
2903 return $rules ? '<style>' . $rules . '</style>' : '';
2904 }
2905
2906 /**
2907 * Try to get a CSS color variable for a given value.
2908 *
2909 * @param $var
2910 *
2911 * @return mixed|string
2912 */
2913 function sd_get_color_from_var( $var ) {
2914 //sanitize_hex_color() @todo this does not cover transparency
2915 if ( strpos( $var, '#' ) === false ) {
2916 $var = defined( 'BLOCKSTRAP_BLOCKS_VERSION' ) ? 'var(--wp--preset--color--' . esc_attr( $var ) . ')' : 'var(--' . esc_attr( $var ) . ')';
2917 }
2918
2919 return $var;
2920 }
2921
2922 /**
2923 * Sanitizes a CSS color value.
2924 *
2925 * @since 1.2.37
2926 *
2927 * @param string $color The color value to sanitize.
2928 * @param string $default Optional. Value to return when the color is empty or unsafe. Default empty.
2929 * @return string Sanitized color value or default.
2930 */
2931 function sd_sanitize_css_color( $color, $default = '' ) {
2932 if ( ! is_scalar( $color ) || $color === '' ) {
2933 return $default;
2934 }
2935
2936 // Remove CSS comments, which can hide things like expression/**/( or url/**/(.
2937 $color = preg_replace( '#/\*.*?(\*/|$)#s', '', (string) $color );
2938
2939 // Keep only the part before the first ; { or }.
2940 $color = trim( preg_split( '/[;{}]/', $color )[0] );
2941
2942 // Allow trailing !important.
2943 $value = preg_replace( '/\s*!important$/i', '', $color );
2944
2945 if ( $value === '' || preg_match( '/[^\w\s#%.,()\/*+-]|url\s*\(|expression\s*\(/i', $value ) ) {
2946 return $default;
2947 }
2948
2949 return $color;
2950 }
2951
2952 /**
2953 * Sanitize single or multiple HTML classes.
2954 *
2955 * @param $classes
2956 * @param $sep
2957 *
2958 * @return string
2959 */
2960 function sd_sanitize_html_classes( $classes, $sep = ' ' ) {
2961 $return = '';
2962
2963 if ( ! is_array( $classes ) ) {
2964 $classes = explode( $sep, $classes );
2965 }
2966
2967 if ( ! empty( $classes ) ) {
2968 foreach ( $classes as $class ) {
2969 $return .= sanitize_html_class( $class ) . ' ';
2970 }
2971 }
2972
2973 return $return;
2974 }
2975
2976
2977 /**
2978 * Keys that are used for the class builder.
2979 *
2980 * @return void
2981 */
2982 function sd_get_class_build_keys() {
2983 $keys = array(
2984 'container',
2985 'position',
2986 'flex_direction',
2987 'shadow',
2988 'rounded',
2989 'nav_style',
2990 'horizontal_alignment',
2991 'nav_fill',
2992 'width',
2993 'font_weight',
2994 'font_size',
2995 'font_case',
2996 'css_class',
2997 'flex_align_items-MTD',
2998 'flex_justify_content-MTD',
2999 'flex_align_self-MTD',
3000 'flex_order-MTD',
3001 'styleid',
3002 'border_opacity',
3003 'border_width',
3004 'border_type',
3005 'opacity',
3006 'zindex',
3007 'flex_wrap-MTD',
3008 'h100',
3009 'overflow',
3010 'scrollbars',
3011 'float-MTD',
3012 'height-MTD',
3013 'width-MTD'
3014 );
3015
3016 return apply_filters( 'sd_class_build_keys', $keys );
3017 }
3018
3019 /**
3020 * This is a placeholder function for the visibility conditions input.
3021 *
3022 * @param $type
3023 * @param $overwrite
3024 *
3025 * @return array
3026 */
3027 function sd_get_visibility_conditions_input( $type = 'visibility_conditions', $overwrite = array() ) {
3028 $defaults = array(
3029 'type' => 'visibility_conditions',
3030 'title' => __( 'Block Visibility', 'ayecode-connect' ),
3031 'button_title' => __( 'Set Block Visibility', 'ayecode-connect' ),
3032 'default' => '',
3033 'desc_tip' => true,
3034 'group' => __( 'Visibility Conditions', 'ayecode-connect' ),
3035 );
3036
3037 $input = wp_parse_args( $overwrite, $defaults );
3038
3039 return $input;
3040 }
3041
3042 /**
3043 * Get a array of user roles.
3044 *
3045 *
3046 *
3047 * @param array $exclude An array of roles to exclude from the return array.
3048 * @return array An array of roles.
3049 */
3050 function sd_user_roles_options( $exclude = array() ) {
3051 $user_roles = array();
3052
3053 if ( !function_exists('get_editable_roles') ) {
3054 require_once( ABSPATH . '/wp-admin/includes/user.php' );
3055 }
3056
3057 $roles = get_editable_roles();
3058
3059 foreach ( $roles as $role => $data ) {
3060 if ( ! ( ! empty( $exclude ) && in_array( $role, $exclude ) ) ) {
3061 $user_roles[ esc_attr( $role ) ] = translate_user_role( $data['name'] );
3062 }
3063 }
3064
3065 // Logged out as a custom role.
3066 $user_roles['logged_out'] = __( 'Guest (logged out)', 'ayecode-connect' );
3067
3068 return apply_filters( 'sd_user_roles_options', $user_roles );
3069 }
3070
3071 /**
3072 * Get visibility conditions rule options.
3073 *
3074 *
3075 *
3076 * @return array Rule options.
3077 */
3078 function sd_visibility_rules_options() {
3079 $options = array(
3080 'logged_in' => __( 'Logged In', 'ayecode-connect' ),
3081 'logged_out' => __( 'Logged Out', 'ayecode-connect' ),
3082 'post_author' => __( 'Post Author', 'ayecode-connect' ),
3083 'user_roles' => __( 'Specific User Roles', 'ayecode-connect' )
3084 );
3085
3086 if ( class_exists( 'GeoDirectory' ) ) {
3087 $options['gd_field'] = __( 'GD Field', 'ayecode-connect' );
3088 }
3089
3090 return apply_filters( 'sd_visibility_rules_options', $options );
3091 }
3092
3093 /**
3094 * Get visibility GD field options.
3095 *
3096 * @return array
3097 */
3098 function sd_visibility_gd_field_options() {
3099 $fields = geodir_post_custom_fields( '', 'all', 'all', 'none' );
3100
3101 $keys = array();
3102 if ( ! empty( $fields ) ) {
3103 foreach( $fields as $field ) {
3104 if ( apply_filters( 'geodir_badge_field_skip_key', false, $field ) ) {
3105 continue;
3106 }
3107
3108 $keys[ $field['htmlvar_name'] ] = $field['htmlvar_name'] . ' ( ' . __( $field['admin_title'], 'geodirectory' ) . ' )';
3109
3110 // Extra address fields
3111 if ( $field['htmlvar_name'] == 'address' && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3112 foreach ( $address_fields as $_field => $args ) {
3113 if ( $_field != 'map_directions' && $_field != 'street' ) {
3114 $keys[ $_field ] = $_field . ' ( ' . $args['frontend_title'] . ' )';
3115 }
3116 }
3117 }
3118 }
3119 }
3120
3121 $standard_fields = sd_visibility_gd_standard_field_options();
3122
3123 if ( ! empty( $standard_fields ) ) {
3124 foreach ( $standard_fields as $key => $option ) {
3125 $keys[ $key ] = $option;
3126 }
3127 }
3128
3129 $options = apply_filters( 'geodir_badge_field_keys', $keys );
3130
3131 return apply_filters( 'sd_visibility_gd_field_options', $options );
3132 }
3133
3134 /**
3135 * Get visibility GD post standard field options.
3136 *
3137 * @return array
3138 */
3139 function sd_visibility_gd_standard_field_options( $post_type = '' ) {
3140 $fields = sd_visibility_gd_standard_fields( $post_type );
3141
3142 $options = array();
3143
3144 foreach ( $fields as $key => $field ) {
3145 if ( ! empty( $field['frontend_title'] ) ) {
3146 $options[ $key ] = $key . ' ( ' . $field['frontend_title'] . ' )';
3147 }
3148 }
3149
3150 return apply_filters( 'sd_visibility_gd_standard_field_options', $options, $fields );
3151 }
3152
3153 /**
3154 * Get visibility GD post standard fields.
3155 *
3156 * @return array
3157 */
3158 function sd_visibility_gd_standard_fields( $post_type = '' ) {
3159 $standard_fields = geodir_post_meta_standard_fields( $post_type );
3160
3161 $fields = array();
3162
3163 foreach ( $standard_fields as $key => $field ) {
3164 if ( $key != 'post_link' && strpos( $key, 'event' ) === false && ! empty( $field['frontend_title'] ) ) {
3165 $fields[ $key ] = $field;
3166 }
3167 }
3168
3169 return apply_filters( 'sd_visibility_gd_standard_fields', $fields );
3170 }
3171
3172 /**
3173 * Get visibility field conditions options.
3174 *
3175 * @return array
3176 */
3177 function sd_visibility_field_condition_options(){
3178 $options = array(
3179 'is_empty' => __( 'is empty', 'ayecode-connect' ),
3180 'is_not_empty' => __( 'is not empty', 'ayecode-connect' ),
3181 'is_equal' => __( 'is equal', 'ayecode-connect' ),
3182 'is_not_equal' => __( 'is not equal', 'ayecode-connect' ),
3183 'is_greater_than' => __( 'is greater than', 'ayecode-connect' ),
3184 'is_less_than' => __( 'is less than', 'ayecode-connect' ),
3185 'is_contains' => __( 'is contains', 'ayecode-connect' ),
3186 'is_not_contains' => __( 'is not contains', 'ayecode-connect' ),
3187 );
3188
3189 return apply_filters( 'sd_visibility_field_condition_options', $options );
3190 }
3191
3192 /**
3193 * Get visibility conditions output options.
3194 *
3195 *
3196 *
3197 * @return array Template type options.
3198 */
3199 function sd_visibility_output_options() {
3200 $options = array(
3201 '' => __( 'Show Block', 'ayecode-connect' ),
3202 'hide' => __( 'Hide Block', 'ayecode-connect' ),
3203 'message' => __( 'Show Custom Message', 'ayecode-connect' ),
3204 'page' => __( 'Show Page Content', 'ayecode-connect' ),
3205 'template_part' => __( 'Show Template Part', 'ayecode-connect' ),
3206 );
3207
3208 return apply_filters( 'sd_visibility_output_options', $options );
3209 }
3210
3211 /**
3212 * Get the template page options.
3213 *
3214 *
3215 *
3216 * @param array $args Array of arguments.
3217 * @return array Template page options.
3218 */
3219 function sd_template_page_options( $args = array() ) {
3220 global $wpdb, $sd_tmpl_page_options;
3221
3222 $defaults = array(
3223 'nocache' => false,
3224 'with_slug' => false,
3225 'default_label' => __( 'Select Page...', 'ayecode-connect' )
3226 );
3227
3228 $args = wp_parse_args( $args, $defaults );
3229
3230 if ( ! empty( $sd_tmpl_page_options ) && empty( $args['nocache'] ) ) {
3231 return $sd_tmpl_page_options;
3232 }
3233
3234 $exclude_pages = array();
3235 if ( $page_on_front = get_option( 'page_on_front' ) ) {
3236 $exclude_pages[] = $page_on_front;
3237 }
3238
3239 if ( $page_for_posts = get_option( 'page_for_posts' ) ) {
3240 $exclude_pages[] = $page_for_posts;
3241 }
3242
3243 $exclude_pages_placeholders = '';
3244 if ( ! empty( $exclude_pages ) ) {
3245 // Sanitize the array of excluded pages and implode it for the SQL query.
3246 $exclude_pages_placeholders = implode( ',', array_fill( 0, count( $exclude_pages ), '%d' ) );
3247 }
3248
3249 // Prepare the base SQL query.
3250 $sql = "SELECT ID, post_title, post_name FROM " . $wpdb->posts . " WHERE post_type = 'page' AND post_status = 'publish'";
3251
3252 // Add the exclusion if there are pages to exclude
3253 if ( ! empty( $exclude_pages ) ) {
3254 $sql .= " AND ID NOT IN ($exclude_pages_placeholders)";
3255 }
3256
3257 // Add sorting.
3258 $sql .= " ORDER BY post_title ASC";
3259
3260 // Add a limit.
3261 $limit = (int) apply_filters( 'sd_template_page_options_limit', 500, $args );
3262
3263 if ( $limit > 0 ) {
3264 $sql .= " LIMIT " . (int) $limit;
3265 }
3266
3267 // Prepare the SQL query to include the excluded pages only if we have placeholders.
3268 $pages = $exclude_pages_placeholders ? $wpdb->get_results( $wpdb->prepare( $sql, ...$exclude_pages ) ) : $wpdb->get_results( $sql );
3269
3270 if ( ! empty( $args['default_label'] ) ) {
3271 $options = array( '' => $args['default_label'] );
3272 } else {
3273 $options = array();
3274 }
3275
3276 if ( ! empty( $pages ) ) {
3277 foreach ( $pages as $page ) {
3278 $title = ! empty( $args['with_slug'] ) ? $page->post_title . ' (' . $page->post_name . ')' : ( $page->post_title . ' (#' . $page->ID . ')' );
3279
3280 $options[ $page->ID ] = $title;
3281 }
3282 }
3283
3284 $sd_tmpl_page_options = $options;
3285
3286 return apply_filters( 'sd_template_page_options', $options, $args );
3287 }
3288
3289 /**
3290 * Get the template part options.
3291 *
3292 *
3293 *
3294 * @param array $args Array of arguments.
3295 * @return array Template part options.
3296 */
3297 function sd_template_part_options( $args = array() ) {
3298 global $sd_tmpl_part_options;
3299
3300 if ( ! empty( $sd_tmpl_part_options ) ) {
3301 return $sd_tmpl_part_options;
3302 }
3303
3304 $options = array( '' => __( 'Select Template Part...', 'ayecode-connect' ) );
3305
3306 $parts = get_block_templates( array(), 'wp_template_part' );
3307
3308 if ( ! empty( $parts ) ) {
3309 foreach ( $parts as $part ) {
3310 $options[ $part->slug ] = $part->title . ' (#' . $part->slug . ')';
3311 }
3312 }
3313
3314 $sd_tmpl_part_options = $options;
3315
3316 return apply_filters( 'sd_template_part_options', $options, $args );
3317 }
3318
3319 /**
3320 * Get the template part by slug.
3321 *
3322 *
3323 *
3324 * @param string $slug Template slug.
3325 * @return array Template part object.
3326 */
3327 function sd_get_template_part_by_slug( $slug ) {
3328 global $bs_tmpl_part_by_slug;
3329
3330 if ( empty( $bs_tmpl_part_by_slug ) ) {
3331 $bs_tmpl_part_by_slug = array();
3332 }
3333
3334 if ( isset( $bs_tmpl_part_by_slug[ $slug ] ) ) {
3335 return $bs_tmpl_part_by_slug[ $slug ];
3336 }
3337
3338 $template_query = get_block_templates( array( 'slug__in' => array( $slug ) ), 'wp_template_part' );
3339
3340 $query_post = ! empty( $template_query ) ? $template_query[0] : array();
3341
3342 $template_part = ! empty( $query_post ) && $query_post->status == 'publish' ? $query_post : array();
3343
3344 $bs_tmpl_part_by_slug[ $slug ] = $template_part;
3345
3346 return apply_filters( 'sd_get_template_part_by_slug', $template_part, $slug );
3347 }
3348
3349 /**
3350 * Filters the content of a single block.
3351 *
3352 *
3353 *
3354 * @param string $block_content The block content.
3355 * @param array $block The full block, including name and attributes.
3356 * @param WP_Block $instance The block instance.
3357 */
3358 function sd_render_block( $block_content, $block, $instance = '' ) {
3359 // No block visibility conditions set.
3360 if ( empty( $block['attrs']['visibility_conditions'] ) ) {
3361 return $block_content;
3362 }
3363
3364 $attributes = json_decode( $block['attrs']['visibility_conditions'], true );
3365 $rules = ! empty( $attributes ) ? sd_block_parse_rules( $attributes ) : array();
3366
3367 // remove rules with missing validators.
3368 $valid_rules = sd_visibility_rules_options();
3369
3370 if ( ! empty( $rules ) ) {
3371 foreach ( $rules as $key => $rule ) {
3372 if ( ! isset( $valid_rules[ $rule['type'] ] ) ) {
3373 unset( $rules[ $key ] );
3374 }
3375 }
3376 }
3377
3378 // No rules set.
3379 if ( empty( $rules ) ) {
3380 return $block_content;
3381 }
3382
3383 $check_rules = null;
3384 $_block_content = $block_content;
3385
3386 if ( ! empty( $rules ) && ( ! empty( $attributes['output'] ) || ! empty( $attributes['outputN'] ) ) ) {
3387 $check_rules = sd_block_check_rules( $rules );
3388
3389 if ( $check_rules ) {
3390 $output_condition = ! empty( $attributes['output'] ) ? $attributes['output'] : array();
3391 } else {
3392 $output_condition = ! empty( $attributes['outputN'] ) ? $attributes['outputN'] : array();
3393 }
3394
3395 if ( ! empty( $output_condition ) && ! empty( $output_condition['type'] ) ) {
3396 switch ( $output_condition['type'] ) {
3397 case 'hide':
3398 $valid_type = true;
3399 $content = '';
3400
3401 break;
3402 case 'message':
3403 $valid_type = true;
3404
3405 if ( isset( $output_condition['message'] ) ) {
3406 $content = $output_condition['message'] != '' ? __( stripslashes( $output_condition['message'] ), 'ayecode-connect' ) : $output_condition['message'];
3407
3408 if ( ! empty( $output_condition['message_type'] ) ) {
3409 $content = aui()->alert( array(
3410 'type'=> $output_condition['message_type'],
3411 'content'=> $content
3412 )
3413 );
3414 }
3415 }
3416
3417 break;
3418 case 'page':
3419 $valid_type = true;
3420
3421 $page_id = ! empty( $output_condition['page'] ) ? absint( $output_condition['page'] ) : 0;
3422 $content = sd_get_page_content( $page_id );
3423
3424 break;
3425 case 'template_part':
3426 $valid_type = true;
3427
3428 $template_part = ! empty( $output_condition['template_part'] ) ? $output_condition['template_part'] : '';
3429 $content = sd_get_template_part_content( $template_part );
3430
3431 break;
3432 default:
3433 $valid_type = false;
3434 break;
3435 }
3436
3437 if ( $valid_type ) {
3438 $block_content = '<div class="' . esc_attr( wp_get_block_default_classname( $instance->name ) ) . ' sd-block-has-rule' . ( $output_condition['type'] == 'hide' ? ' sd-block-hide-rule' : '' ) . '">' . $content . '</div>';
3439 }
3440 }
3441 }
3442
3443 return apply_filters( 'sd_render_block_visibility_content', $block_content, $_block_content, $attributes, $block, $instance, $check_rules );
3444 }
3445 add_filter( 'render_block', 'sd_render_block', 9, 3 );
3446
3447 /**
3448 * Safely fetches page content after checking viewing permissions.
3449 *
3450 * @param int $post_id The ID of the post/page.
3451 * @param bool $bypass_check Set to true only if called from a secure, trusted admin context.
3452 * @return string
3453 */
3454 function sd_get_safe_post_content( $post_id, $bypass_check = false ) {
3455 $post_id = (int) $post_id;
3456
3457 if ( $post_id <= 0 ) {
3458 return '';
3459 }
3460
3461 if ( ! $bypass_check ) {
3462 $post = get_post( $post_id );
3463
3464 if ( empty( $post ) ) {
3465 return '';
3466 }
3467
3468 if ( ( ! is_post_publicly_viewable( $post ) && ! current_user_can( 'read_post', $post_id ) ) || post_password_required( $post ) ) {
3469 return '';
3470 }
3471 }
3472
3473 return get_post_field( 'post_content', $post_id );
3474 }
3475
3476 function sd_get_page_content( $page_id ) {
3477 $content = sd_get_safe_post_content( (int) $page_id );
3478
3479 // Maybe bypass content
3480 $bypass_content = apply_filters( 'sd_bypass_page_content', '', $content, $page_id );
3481 if ( $bypass_content ) {
3482 return $bypass_content;
3483 }
3484
3485 // Run the shortcodes on the content.
3486 $content = do_shortcode( $content );
3487
3488 // Run block content if its available.
3489 if ( function_exists( 'do_blocks' ) ) {
3490 $content = do_blocks( $content );
3491 }
3492
3493 return apply_filters( 'sd_get_page_content', $content, $page_id );
3494 }
3495
3496 function sd_get_template_part_content( $template_part ) {
3497 $template_part_post = $template_part ? sd_get_template_part_by_slug( $template_part ) : array();
3498 $content = ! empty( $template_part_post ) ? $template_part_post->content : '';
3499
3500 // Maybe bypass content
3501 $bypass_content = apply_filters( 'sd_bypass_template_part_content', '', $content, $template_part );
3502 if ( $bypass_content ) {
3503 return $bypass_content;
3504 }
3505
3506 // Run the shortcodes on the content.
3507 $content = do_shortcode( $content );
3508
3509 // Run block content if its available.
3510 if ( function_exists( 'do_blocks' ) ) {
3511 $content = do_blocks( $content );
3512 }
3513
3514 return apply_filters( 'sd_get_template_part_content', $content, $template_part );
3515 }
3516
3517 function sd_block_parse_rules( $attrs ) {
3518 $rules = array();
3519
3520 if ( ! empty( $attrs ) && is_array( $attrs ) ) {
3521 $attrs_keys = array_keys( $attrs );
3522
3523 for ( $i = 1; $i <= count( $attrs_keys ); $i++ ) {
3524 if ( ! empty( $attrs[ 'rule' . $i ] ) && is_array( $attrs[ 'rule' . $i ] ) ) {
3525 $rules[] = $attrs[ 'rule' . $i ];
3526 }
3527 }
3528 }
3529
3530 return apply_filters( 'sd_block_parse_rules', $rules, $attrs );
3531 }
3532
3533 function sd_block_check_rules( $rules ) {
3534 if ( ! ( is_array( $rules ) && ! empty( $rules ) ) ) {
3535 return true;
3536 }
3537
3538 foreach ( $rules as $key => $rule ) {
3539 $match = apply_filters( 'sd_block_check_rule', true, $rule );
3540
3541 if ( ! $match ) {
3542 break;
3543 }
3544 }
3545
3546 return apply_filters( 'sd_block_check_rules', $match, $rules );
3547 }
3548
3549 function sd_block_check_rule( $match, $rule ) {
3550 global $post;
3551
3552 if ( $match && ! empty( $rule['type'] ) ) {
3553 switch ( $rule['type'] ) {
3554 case 'logged_in':
3555 $match = (bool) is_user_logged_in();
3556
3557 break;
3558 case 'logged_out':
3559 $match = ! is_user_logged_in();
3560
3561 break;
3562 case 'post_author':
3563 if ( ! empty( $post ) && $post->post_type != 'page' && ! empty( $post->post_author ) && is_user_logged_in() ) {
3564 $match = (int) $post->post_author === (int) get_current_user_id() ? true : false;
3565 } else {
3566 $match = false;
3567 }
3568
3569 break;
3570 case 'user_roles':
3571 $match = false;
3572
3573 if ( ! empty( $rule['user_roles'] ) ) {
3574 $user_roles = is_scalar( $rule['user_roles'] ) ? explode( ",", $rule['user_roles'] ) : $rule['user_roles'];
3575
3576 if ( is_array( $user_roles ) ) {
3577 $user_roles = array_filter( array_map( 'trim', $user_roles ) );
3578 }
3579
3580 if ( ! empty( $user_roles ) && is_array( $user_roles ) ) {
3581 if ( is_user_logged_in() && ( $current_user = wp_get_current_user() ) ) {
3582 $current_user_roles = $current_user->roles;
3583
3584 foreach ( $user_roles as $role ) {
3585 if ( in_array( $role, $current_user_roles ) ) {
3586 $match = true;
3587 }
3588 }
3589 } else {
3590 // Logged out role.
3591 if ( in_array( 'logged_out', $user_roles ) ) {
3592 $match = true;
3593 }
3594 }
3595 }
3596 }
3597
3598 break;
3599 case 'gd_field':
3600 $match = sd_block_check_rule_gd_field( $rule );
3601
3602 break;
3603
3604 default:
3605 $match = apply_filters( 'sd_block_check_custom_rule', $match, $rule );
3606 break;
3607 }
3608 }
3609
3610 return $match;
3611 }
3612 add_filter( 'sd_block_check_rule', 'sd_block_check_rule', 10, 2 );
3613
3614 function sd_block_check_rule_gd_field( $rule ) {
3615 global $gd_post;
3616
3617 $match_found = false;
3618
3619 if ( class_exists( 'GeoDirectory' ) && ! empty( $gd_post->ID ) && ! empty( $rule['field'] ) && ! empty( $rule['condition'] ) ) {
3620 $args['block_visibility'] = true;
3621 $args['key'] = $rule['field'];
3622 $args['condition'] = $rule['condition'];
3623 $args['search'] = isset( $rule['search'] ) ? $rule['search'] : '';
3624
3625 if ( $args['key'] == 'street' ) {
3626 $args['key'] = 'address';
3627 }
3628
3629 $match_field = $_match_field = $args['key'];
3630
3631 if ( $match_field == 'address' ) {
3632 $match_field = 'street';
3633 } elseif ( $match_field == 'post_images' ) {
3634 $match_field = 'featured_image';
3635 }
3636
3637 $find_post = $gd_post;
3638 $find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3639
3640 if ( ! empty( $find_post->ID ) && ! in_array( 'post_category', $find_post_keys ) ) {
3641 $find_post = geodir_get_post_info( (int) $find_post->ID );
3642 $find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3643 }
3644
3645 if ( $match_field === '' || ( ! empty( $find_post_keys ) && ( in_array( $match_field, $find_post_keys ) || in_array( $_match_field, $find_post_keys ) ) ) ) {
3646 $address_fields = array( 'street2', 'neighbourhood', 'city', 'region', 'country', 'zip', 'latitude', 'longitude' ); // Address fields
3647 $field = array();
3648 $empty_field = false;
3649
3650 $standard_fields = sd_visibility_gd_standard_fields();
3651
3652 if ( $match_field && ! in_array( $match_field, array_keys( $standard_fields ) ) && ! in_array( $match_field, $address_fields ) ) {
3653 $package_id = geodir_get_post_package_id( $find_post->ID, $find_post->post_type );
3654 $fields = geodir_post_custom_fields( $package_id, 'all', $find_post->post_type, 'none' );
3655
3656 foreach ( $fields as $field_info ) {
3657 if ( $match_field == $field_info['htmlvar_name'] ) {
3658 $field = $field_info;
3659 break;
3660 } elseif( $_match_field == $field_info['htmlvar_name'] ) {
3661 $field = $field_info;
3662 break;
3663 }
3664 }
3665
3666 if ( empty( $field ) ) {
3667 $empty_field = true;
3668 }
3669 }
3670
3671 // Address fields.
3672 if ( in_array( $match_field, $address_fields ) && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3673 if ( ! empty( $address_fields[ $match_field ] ) ) {
3674 $field = $address_fields[ $match_field ];
3675 }
3676 } else if ( in_array( $match_field, array_keys( $standard_fields ) ) ) {
3677 if ( ! empty( $standard_fields[ $match_field ] ) ) {
3678 $field = $standard_fields[ $match_field ];
3679 }
3680 }
3681
3682 // Parse search.
3683 $search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3684
3685 $is_date = ( ! empty( $field['type'] ) && $field['type'] == 'datepicker' ) || in_array( $match_field, array( 'post_date', 'post_modified' ) ) ? true : false;
3686 $is_date = apply_filters( 'geodir_post_badge_is_date', $is_date, $match_field, $field, $args, $find_post );
3687
3688 $match_value = isset( $find_post->{$match_field} ) && empty( $empty_field ) ? esc_attr( trim( $find_post->{$match_field} ) ) : '';
3689 $match_found = $match_field === '' ? true : false;
3690
3691 if ( ! $match_found ) {
3692 if ( ( $match_field == 'post_date' || $match_field == 'post_modified' ) && ( empty( $args['condition'] ) || $args['condition'] == 'is_greater_than' || $args['condition'] == 'is_less_than' ) ) {
3693 if ( strpos( $search, '+' ) === false && strpos( $search, '-' ) === false ) {
3694 $search = '+' . $search;
3695 }
3696 $the_time = $match_field == 'post_modified' ? get_the_modified_date( 'Y-m-d', $find_post ) : get_the_time( 'Y-m-d', $find_post );
3697 $until_time = strtotime( $the_time . ' ' . $search . ' days' );
3698 $now_time = strtotime( date_i18n( 'Y-m-d', current_time( 'timestamp' ) ) );
3699 if ( ( empty( $args['condition'] ) || $args['condition'] == 'is_less_than' ) && $until_time > $now_time ) {
3700 $match_found = true;
3701 } elseif ( $args['condition'] == 'is_greater_than' && $until_time < $now_time ) {
3702 $match_found = true;
3703 }
3704 } else {
3705 switch ( $args['condition'] ) {
3706 case 'is_equal':
3707 $match_found = (bool) ( $search != '' && $match_value == $search );
3708 break;
3709 case 'is_not_equal':
3710 $match_found = (bool) ( $search != '' && $match_value != $search );
3711 break;
3712 case 'is_greater_than':
3713 $match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value > $search );
3714 break;
3715 case 'is_less_than':
3716 $match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value < $search );
3717 break;
3718 case 'is_empty':
3719 $match_found = (bool) ( $match_value === '' || $match_value === false || $match_value === '0' || is_null( $match_value ) );
3720 break;
3721 case 'is_not_empty':
3722 $match_found = (bool) ( $match_value !== '' && $match_value !== false && $match_value !== '0' && ! is_null( $match_value ) );
3723 break;
3724 case 'is_contains':
3725 $match_found = (bool) ( $search != '' && stripos( $match_value, $search ) !== false );
3726 break;
3727 case 'is_not_contains':
3728 $match_found = (bool) ( $search != '' && stripos( $match_value, $search ) === false );
3729 break;
3730 }
3731 }
3732 }
3733
3734 $match_found = apply_filters( 'geodir_post_badge_check_match_found', $match_found, $args, $find_post );
3735 } else {
3736 $field = array();
3737
3738 // Parse search.
3739 $search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3740
3741 $match_value = '';
3742 $match_found = $match_field === '' ? true : false;
3743
3744 if ( ! $match_found ) {
3745 switch ( $args['condition'] ) {
3746 case 'is_equal':
3747 $match_found = (bool) ( $search != '' && $match_value == $search );
3748 break;
3749 case 'is_not_equal':
3750 $match_found = (bool) ( $search != '' && $match_value != $search );
3751 break;
3752 case 'is_greater_than':
3753 $match_found = false;
3754 break;
3755 case 'is_less_than':
3756 $match_found = false;
3757 break;
3758 case 'is_empty':
3759 $match_found = true;
3760 break;
3761 case 'is_not_empty':
3762 $match_found = false;
3763 break;
3764 case 'is_contains':
3765 $match_found = false;
3766 break;
3767 case 'is_not_contains':
3768 $match_found = false;
3769 break;
3770 }
3771 }
3772
3773 $match_found = apply_filters( 'geodir_post_badge_check_match_found_empty', $match_found, $args, $find_post );
3774 }
3775 }
3776
3777 return $match_found;
3778 }
3779
3780 function sd_gd_field_rule_search( $search, $post_type, $rule, $field = array(), $gd_post = array() ) {
3781 global $post;
3782
3783 if ( ! $search ) {
3784 return $search;
3785 }
3786
3787 $orig_search = $search;
3788 $_search = strtolower( $search );
3789
3790 if ( ! empty( $rule['field'] ) && $rule['field'] == 'post_author' ) {
3791 if ( $search == 'current_user' ) {
3792 $search = is_user_logged_in() ? (int) get_current_user_id() : - 1;
3793 } else if ( $search == 'current_author' ) {
3794 $search = ( ! empty( $post ) && $post->post_type != 'page' && isset( $post->post_author ) ) ? absint( $post->post_author ) : - 1;
3795 }
3796 } else if ( $_search == 'date_today' ) {
3797 $search = date( 'Y-m-d' );
3798 } else if ( $_search == 'date_tomorrow' ) {
3799 $search = date( 'Y-m-d', strtotime( "+1 day" ) );
3800 } else if ( $_search == 'date_yesterday' ) {
3801 $search = date( 'Y-m-d', strtotime( "-1 day" ) );
3802 } else if ( $_search == 'time_his' ) {
3803 $search = date( 'H:i:s' );
3804 } else if ( $_search == 'time_hi' ) {
3805 $search = date( 'H:i' );
3806 } else if ( $_search == 'datetime_now' ) {
3807 $search = date( 'Y-m-d H:i:s' );
3808 } else if ( strpos( $_search, 'datetime_after_' ) === 0 ) {
3809 $_searches = explode( 'datetime_after_', $_search, 2 );
3810
3811 if ( ! empty( $_searches[1] ) ) {
3812 $search = date( 'Y-m-d H:i:s', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3813 } else {
3814 $search = date( 'Y-m-d H:i:s' );
3815 }
3816 } else if ( strpos( $_search, 'datetime_before_' ) === 0 ) {
3817 $_searches = explode( 'datetime_before_', $_search, 2 );
3818
3819 if ( ! empty( $_searches[1] ) ) {
3820 $search = date( 'Y-m-d H:i:s', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3821 } else {
3822 $search = date( 'Y-m-d H:i:s' );
3823 }
3824 } else if ( strpos( $_search, 'date_after_' ) === 0 ) {
3825 $_searches = explode( 'date_after_', $_search, 2 );
3826
3827 if ( ! empty( $_searches[1] ) ) {
3828 $search = date( 'Y-m-d', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3829 } else {
3830 $search = date( 'Y-m-d' );
3831 }
3832 } else if ( strpos( $_search, 'date_before_' ) === 0 ) {
3833 $_searches = explode( 'date_before_', $_search, 2 );
3834
3835 if ( ! empty( $_searches[1] ) ) {
3836 $search = date( 'Y-m-d', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3837 } else {
3838 $search = date( 'Y-m-d' );
3839 }
3840 }
3841
3842 return apply_filters( 'sd_gd_field_rule_search', $search, $post_type, $rule, $orig_search );
3843 }
3844
3845
3846 if(!function_exists('sd_blocks_render_blocks')){
3847 /**
3848 * Add the shortcodes to the block content if set as an attribute.
3849 *
3850 * We have moved the shortcodes from the block content to a block argument to help prevent broken blocks.
3851 *
3852 * @param $block_content
3853 * @param $parsed_block
3854 * @param $thiss
3855 * @return mixed|string
3856 */
3857 function sd_blocks_render_blocks($block_content, $parsed_block, $thiss = array() ){
3858 // Check hide block visibility conditions.
3859 if ( ! empty( $parsed_block ) && ! empty( $parsed_block['attrs']['visibility_conditions'] ) && $block_content && strpos( strrev( $block_content ), strrev( ' sd-block-has-rule sd-block-hide-rule"></div>' ) ) === 0 && ! empty( $thiss ) && $thiss->name ) {
3860 $match_content = '<div class="' . esc_attr( wp_get_block_default_classname( $thiss->name ) ) . ' sd-block-has-rule sd-block-hide-rule"></div>';
3861
3862 // Return empty content to hide block.
3863 if ( $block_content == $match_content ) {
3864 return '';
3865 }
3866 }
3867
3868 // Check if ita a nested block that needs to be wrapped
3869 if(! empty($parsed_block['attrs']['sd_shortcode_close'])){
3870 $content = isset($parsed_block['attrs']['html']) ? $parsed_block['attrs']['html'] : $block_content;
3871 $block_content = $parsed_block['attrs']['sd_shortcode'].$content.$parsed_block['attrs']['sd_shortcode_close'];
3872
3873 $block_content = do_shortcode($block_content);
3874
3875 }elseif(! empty($parsed_block['attrs']['sd_shortcode'])){
3876 $has_warp = false;
3877 if($block_content && strpos(trim($block_content), '<div class="wp-block-') === 0 ){
3878 $parts = explode('></', $block_content);
3879 if(count($parts) === 2){
3880 $block_content = $parts[0].'>'.$parsed_block['attrs']['sd_shortcode'].'</'.$parts[1];
3881 $has_warp = true;
3882 }
3883 }
3884 if (!$has_warp) {
3885 // Add the shortcode if its not a wrapped block
3886 $block_content .= $parsed_block['attrs']['sd_shortcode'];
3887 }
3888
3889 $block_content = do_shortcode($block_content);
3890 }
3891 return $block_content;
3892 }
3893 }
3894
3895 add_filter('render_block', 'sd_blocks_render_blocks',10,3);
3896
3897 /**
3898 * Disable additional CSS for SD blocks.
3899 *
3900 * @since 1.2.32
3901 *
3902 * @param array $options Block options.
3903 * @return array Filtered block options.
3904 */
3905 function sd_disable_additional_css( $options ) {
3906 if ( ! is_array( $options ) ) {
3907 return $options;
3908 }
3909
3910 if ( ! isset( $options['block-supports'] ) ) {
3911 $options['block-supports'] = array();
3912 }
3913
3914 if ( ! isset( $options['block-supports']['customCSS'] ) ) {
3915 $options['block-supports']['customCSS'] = false;
3916 }
3917
3918 return $options;
3919 }
3920 add_filter( 'wp_super_duper_options', 'sd_disable_additional_css', 10, 1 );
3921