PluginProbe
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP / 1.2.71
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP v1.2.71
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 1.0.20 1.0.21 All 174 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.71, at vendor/ayecode/wp-super-duper/sd-functions.php

3,882 lines 112.9 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
2770 $styles = array();
2771
2772 // background color
2773 if ( ! empty( $args['bg'] ) && $args['bg'] !== '' ) {
2774 if ( $args['bg'] == 'custom-color' ) {
2775 $styles['background-color'] = $args['bg_color'];
2776 } elseif ( $args['bg'] == 'custom-gradient' ) {
2777 $styles['background-image'] = $args['bg_gradient'];
2778
2779 // use background on text.
2780 if ( ! empty( $args['bg_on_text'] ) && $args['bg_on_text'] ) {
2781 $styles['background-clip'] = 'text';
2782 $styles['-webkit-background-clip'] = 'text';
2783 $styles['text-fill-color'] = 'transparent';
2784 $styles['-webkit-text-fill-color'] = 'transparent';
2785 }
2786 }
2787 }
2788
2789 if ( ! empty( $args['bg_image'] ) && $args['bg_image'] !== '' ) {
2790 $hasImage = true;
2791 if ( ! empty( $styles['background-color'] ) && $args['bg'] == 'custom-color' ) {
2792 $styles['background-image'] = 'url(' . $args['bg_image'] . ')';
2793 $styles['background-blend-mode'] = 'overlay';
2794 } elseif ( ! empty( $styles['background-image'] ) && $args['bg'] == 'custom-gradient' ) {
2795 $styles['background-image'] .= ',url(' . $args['bg_image'] . ')';
2796 } elseif ( ! empty( $args['bg'] ) && $args['bg'] != '' && $args['bg'] != 'transparent' ) {
2797 // do nothing as we alreay have a preset
2798 $hasImage = false;
2799 } else {
2800 $styles['background-image'] = 'url(' . $args['bg_image'] . ')';
2801 }
2802
2803 if ( $hasImage ) {
2804 $styles['background-size'] = 'cover';
2805
2806 if ( ! empty( $args['bg_image_fixed'] ) && $args['bg_image_fixed'] ) {
2807 $styles['background-attachment'] = 'fixed';
2808 }
2809 }
2810
2811 if ( $hasImage && ! empty( $args['bg_image_xy'] ) && ! empty( $args['bg_image_xy']['x'] ) ) {
2812 $styles['background-position'] = ( $args['bg_image_xy']['x'] * 100 ) . '% ' . ( $args['bg_image_xy']['y'] * 100 ) . '%';
2813 }
2814 }
2815
2816 // sticky offset top
2817 if ( ! empty( $args['sticky_offset_top'] ) && $args['sticky_offset_top'] !== '' ) {
2818 $styles['top'] = absint( $args['sticky_offset_top'] );
2819 }
2820
2821 // sticky offset bottom
2822 if ( ! empty( $args['sticky_offset_bottom'] ) && $args['sticky_offset_bottom'] !== '' ) {
2823 $styles['bottom'] = absint( $args['sticky_offset_bottom'] );
2824 }
2825
2826 // font size
2827 if ( ! empty( $args['font_size_custom'] ) && $args['font_size_custom'] !== '' ) {
2828 $styles['font-size'] = (float) $args['font_size_custom'] . 'rem';
2829 }
2830
2831 // font color
2832 if ( ! empty( $args['text_color_custom'] ) && $args['text_color_custom'] !== '' ) {
2833 $styles['color'] = esc_attr( $args['text_color_custom'] );
2834 }
2835
2836 // font line height
2837 if ( ! empty( $args['font_line_height'] ) && $args['font_line_height'] !== '' ) {
2838 $styles['line-height'] = esc_attr( $args['font_line_height'] );
2839 }
2840
2841 // max height
2842 if ( ! empty( $args['max_height'] ) && $args['max_height'] !== '' ) {
2843 $styles['max-height'] = esc_attr( $args['max_height'] );
2844 }
2845
2846 $style_string = '';
2847 if ( ! empty( $styles ) ) {
2848 foreach ( $styles as $key => $val ) {
2849 $style_string .= esc_attr( $key ) . ':' . esc_attr( $val ) . ';';
2850 }
2851 }
2852
2853 return $style_string;
2854
2855 }
2856
2857 /**
2858 * Build the hover styles from args.
2859 *
2860 * @param $args
2861 * @param $is_preview
2862 *
2863 * @return string
2864 */
2865 function sd_build_hover_styles( $args, $is_preview = false ) {
2866 $rules = '';
2867 // text color
2868 if ( ! empty( $args['styleid'] ) ) {
2869 $styleid = $is_preview ? 'html .editor-styles-wrapper .' . esc_attr( $args['styleid'] ) : 'html .' . esc_attr( $args['styleid'] );
2870
2871 // text
2872 if ( ! empty( $args['text_color_hover'] ) ) {
2873 $key = 'custom' === $args['text_color_hover'] && ! empty( $args['text_color_hover_custom'] ) ? 'text_color_hover_custom' : 'text_color_hover';
2874 $color = sd_get_color_from_var( $args[ $key ] );
2875 $rules .= $styleid . ':hover {color: ' . $color . ' !important;} ';
2876 }
2877
2878 // bg
2879 if ( ! empty( $args['bg_hover'] ) ) {
2880 if ( 'custom-gradient' === $args['bg_hover'] ) {
2881 $color = $args['bg_hover_gradient'];
2882 $rules .= $styleid . ':hover {background-image: ' . $color . ' !important;} ';
2883 $rules .= $styleid . '.btn:hover {border-color: transparent !important;} ';
2884 } else {
2885 $key = 'custom-color' === $args['bg_hover'] ? 'bg_hover_color' : 'bg_hover';
2886 $color = sd_get_color_from_var( $args[ $key ] );
2887 $rules .= $styleid . ':hover {background: ' . $color . ' !important;} ';
2888 $rules .= $styleid . '.btn:hover {border-color: ' . $color . ' !important;} ';
2889 }
2890 }
2891 }
2892
2893 return $rules ? '<style>' . $rules . '</style>' : '';
2894 }
2895
2896 /**
2897 * Try to get a CSS color variable for a given value.
2898 *
2899 * @param $var
2900 *
2901 * @return mixed|string
2902 */
2903 function sd_get_color_from_var( $var ) {
2904
2905 //sanitize_hex_color() @todo this does not cover transparency
2906 if ( strpos( $var, '#' ) === false ) {
2907 $var = defined( 'BLOCKSTRAP_BLOCKS_VERSION' ) ? 'var(--wp--preset--color--' . esc_attr( $var ) . ')' : 'var(--' . esc_attr( $var ) . ')';
2908 }
2909
2910 return $var;
2911 }
2912
2913 /**
2914 * Sanitize single or multiple HTML classes.
2915 *
2916 * @param $classes
2917 * @param $sep
2918 *
2919 * @return string
2920 */
2921 function sd_sanitize_html_classes( $classes, $sep = ' ' ) {
2922 $return = '';
2923
2924 if ( ! is_array( $classes ) ) {
2925 $classes = explode( $sep, $classes );
2926 }
2927
2928 if ( ! empty( $classes ) ) {
2929 foreach ( $classes as $class ) {
2930 $return .= sanitize_html_class( $class ) . ' ';
2931 }
2932 }
2933
2934 return $return;
2935 }
2936
2937
2938 /**
2939 * Keys that are used for the class builder.
2940 *
2941 * @return void
2942 */
2943 function sd_get_class_build_keys() {
2944 $keys = array(
2945 'container',
2946 'position',
2947 'flex_direction',
2948 'shadow',
2949 'rounded',
2950 'nav_style',
2951 'horizontal_alignment',
2952 'nav_fill',
2953 'width',
2954 'font_weight',
2955 'font_size',
2956 'font_case',
2957 'css_class',
2958 'flex_align_items-MTD',
2959 'flex_justify_content-MTD',
2960 'flex_align_self-MTD',
2961 'flex_order-MTD',
2962 'styleid',
2963 'border_opacity',
2964 'border_width',
2965 'border_type',
2966 'opacity',
2967 'zindex',
2968 'flex_wrap-MTD',
2969 'h100',
2970 'overflow',
2971 'scrollbars',
2972 'float-MTD',
2973 'height-MTD',
2974 'width-MTD'
2975 );
2976
2977 return apply_filters( 'sd_class_build_keys', $keys );
2978 }
2979
2980 /**
2981 * This is a placeholder function for the visibility conditions input.
2982 *
2983 * @param $type
2984 * @param $overwrite
2985 *
2986 * @return array
2987 */
2988 function sd_get_visibility_conditions_input( $type = 'visibility_conditions', $overwrite = array() ) {
2989 $defaults = array(
2990 'type' => 'visibility_conditions',
2991 'title' => __( 'Block Visibility', 'ayecode-connect' ),
2992 'button_title' => __( 'Set Block Visibility', 'ayecode-connect' ),
2993 'default' => '',
2994 'desc_tip' => true,
2995 'group' => __( 'Visibility Conditions', 'ayecode-connect' ),
2996 );
2997
2998 $input = wp_parse_args( $overwrite, $defaults );
2999
3000 return $input;
3001 }
3002
3003 /**
3004 * Get a array of user roles.
3005 *
3006 *
3007 *
3008 * @param array $exclude An array of roles to exclude from the return array.
3009 * @return array An array of roles.
3010 */
3011 function sd_user_roles_options( $exclude = array() ) {
3012 $user_roles = array();
3013
3014 if ( !function_exists('get_editable_roles') ) {
3015 require_once( ABSPATH . '/wp-admin/includes/user.php' );
3016 }
3017
3018 $roles = get_editable_roles();
3019
3020 foreach ( $roles as $role => $data ) {
3021 if ( ! ( ! empty( $exclude ) && in_array( $role, $exclude ) ) ) {
3022 $user_roles[ esc_attr( $role ) ] = translate_user_role( $data['name'] );
3023 }
3024 }
3025
3026 // Logged out as a custom role.
3027 $user_roles['logged_out'] = __( 'Guest (logged out)', 'ayecode-connect' );
3028
3029 return apply_filters( 'sd_user_roles_options', $user_roles );
3030 }
3031
3032 /**
3033 * Get visibility conditions rule options.
3034 *
3035 *
3036 *
3037 * @return array Rule options.
3038 */
3039 function sd_visibility_rules_options() {
3040 $options = array(
3041 'logged_in' => __( 'Logged In', 'ayecode-connect' ),
3042 'logged_out' => __( 'Logged Out', 'ayecode-connect' ),
3043 'post_author' => __( 'Post Author', 'ayecode-connect' ),
3044 'user_roles' => __( 'Specific User Roles', 'ayecode-connect' )
3045 );
3046
3047 if ( class_exists( 'GeoDirectory' ) ) {
3048 $options['gd_field'] = __( 'GD Field', 'ayecode-connect' );
3049 }
3050
3051 return apply_filters( 'sd_visibility_rules_options', $options );
3052 }
3053
3054 /**
3055 * Get visibility GD field options.
3056 *
3057 * @return array
3058 */
3059 function sd_visibility_gd_field_options() {
3060 $fields = geodir_post_custom_fields( '', 'all', 'all', 'none' );
3061
3062 $keys = array();
3063 if ( ! empty( $fields ) ) {
3064 foreach( $fields as $field ) {
3065 if ( apply_filters( 'geodir_badge_field_skip_key', false, $field ) ) {
3066 continue;
3067 }
3068
3069 $keys[ $field['htmlvar_name'] ] = $field['htmlvar_name'] . ' ( ' . __( $field['admin_title'], 'geodirectory' ) . ' )';
3070
3071 // Extra address fields
3072 if ( $field['htmlvar_name'] == 'address' && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3073 foreach ( $address_fields as $_field => $args ) {
3074 if ( $_field != 'map_directions' && $_field != 'street' ) {
3075 $keys[ $_field ] = $_field . ' ( ' . $args['frontend_title'] . ' )';
3076 }
3077 }
3078 }
3079 }
3080 }
3081
3082 $standard_fields = sd_visibility_gd_standard_field_options();
3083
3084 if ( ! empty( $standard_fields ) ) {
3085 foreach ( $standard_fields as $key => $option ) {
3086 $keys[ $key ] = $option;
3087 }
3088 }
3089
3090 $options = apply_filters( 'geodir_badge_field_keys', $keys );
3091
3092 return apply_filters( 'sd_visibility_gd_field_options', $options );
3093 }
3094
3095 /**
3096 * Get visibility GD post standard field options.
3097 *
3098 * @return array
3099 */
3100 function sd_visibility_gd_standard_field_options( $post_type = '' ) {
3101 $fields = sd_visibility_gd_standard_fields( $post_type );
3102
3103 $options = array();
3104
3105 foreach ( $fields as $key => $field ) {
3106 if ( ! empty( $field['frontend_title'] ) ) {
3107 $options[ $key ] = $key . ' ( ' . $field['frontend_title'] . ' )';
3108 }
3109 }
3110
3111 return apply_filters( 'sd_visibility_gd_standard_field_options', $options, $fields );
3112 }
3113
3114 /**
3115 * Get visibility GD post standard fields.
3116 *
3117 * @return array
3118 */
3119 function sd_visibility_gd_standard_fields( $post_type = '' ) {
3120 $standard_fields = geodir_post_meta_standard_fields( $post_type );
3121
3122 $fields = array();
3123
3124 foreach ( $standard_fields as $key => $field ) {
3125 if ( $key != 'post_link' && strpos( $key, 'event' ) === false && ! empty( $field['frontend_title'] ) ) {
3126 $fields[ $key ] = $field;
3127 }
3128 }
3129
3130 return apply_filters( 'sd_visibility_gd_standard_fields', $fields );
3131 }
3132
3133 /**
3134 * Get visibility field conditions options.
3135 *
3136 * @return array
3137 */
3138 function sd_visibility_field_condition_options(){
3139 $options = array(
3140 'is_empty' => __( 'is empty', 'ayecode-connect' ),
3141 'is_not_empty' => __( 'is not empty', 'ayecode-connect' ),
3142 'is_equal' => __( 'is equal', 'ayecode-connect' ),
3143 'is_not_equal' => __( 'is not equal', 'ayecode-connect' ),
3144 'is_greater_than' => __( 'is greater than', 'ayecode-connect' ),
3145 'is_less_than' => __( 'is less than', 'ayecode-connect' ),
3146 'is_contains' => __( 'is contains', 'ayecode-connect' ),
3147 'is_not_contains' => __( 'is not contains', 'ayecode-connect' ),
3148 );
3149
3150 return apply_filters( 'sd_visibility_field_condition_options', $options );
3151 }
3152
3153 /**
3154 * Get visibility conditions output options.
3155 *
3156 *
3157 *
3158 * @return array Template type options.
3159 */
3160 function sd_visibility_output_options() {
3161 $options = array(
3162 '' => __( 'Show Block', 'ayecode-connect' ),
3163 'hide' => __( 'Hide Block', 'ayecode-connect' ),
3164 'message' => __( 'Show Custom Message', 'ayecode-connect' ),
3165 'page' => __( 'Show Page Content', 'ayecode-connect' ),
3166 'template_part' => __( 'Show Template Part', 'ayecode-connect' ),
3167 );
3168
3169 return apply_filters( 'sd_visibility_output_options', $options );
3170 }
3171
3172 /**
3173 * Get the template page options.
3174 *
3175 *
3176 *
3177 * @param array $args Array of arguments.
3178 * @return array Template page options.
3179 */
3180 function sd_template_page_options( $args = array() ) {
3181 global $wpdb, $sd_tmpl_page_options;
3182
3183 $defaults = array(
3184 'nocache' => false,
3185 'with_slug' => false,
3186 'default_label' => __( 'Select Page...', 'ayecode-connect' )
3187 );
3188
3189 $args = wp_parse_args( $args, $defaults );
3190
3191 if ( ! empty( $sd_tmpl_page_options ) && empty( $args['nocache'] ) ) {
3192 return $sd_tmpl_page_options;
3193 }
3194
3195 $exclude_pages = array();
3196 if ( $page_on_front = get_option( 'page_on_front' ) ) {
3197 $exclude_pages[] = $page_on_front;
3198 }
3199
3200 if ( $page_for_posts = get_option( 'page_for_posts' ) ) {
3201 $exclude_pages[] = $page_for_posts;
3202 }
3203
3204 $exclude_pages_placeholders = '';
3205 if ( ! empty( $exclude_pages ) ) {
3206 // Sanitize the array of excluded pages and implode it for the SQL query.
3207 $exclude_pages_placeholders = implode( ',', array_fill( 0, count( $exclude_pages ), '%d' ) );
3208 }
3209
3210 // Prepare the base SQL query.
3211 $sql = "SELECT ID, post_title, post_name FROM " . $wpdb->posts . " WHERE post_type = 'page' AND post_status = 'publish'";
3212
3213 // Add the exclusion if there are pages to exclude
3214 if ( ! empty( $exclude_pages ) ) {
3215 $sql .= " AND ID NOT IN ($exclude_pages_placeholders)";
3216 }
3217
3218 // Add sorting.
3219 $sql .= " ORDER BY post_title ASC";
3220
3221 // Add a limit.
3222 $limit = (int) apply_filters( 'sd_template_page_options_limit', 500, $args );
3223
3224 if ( $limit > 0 ) {
3225 $sql .= " LIMIT " . (int) $limit;
3226 }
3227
3228 // Prepare the SQL query to include the excluded pages only if we have placeholders.
3229 $pages = $exclude_pages_placeholders ? $wpdb->get_results( $wpdb->prepare( $sql, ...$exclude_pages ) ) : $wpdb->get_results( $sql );
3230
3231 if ( ! empty( $args['default_label'] ) ) {
3232 $options = array( '' => $args['default_label'] );
3233 } else {
3234 $options = array();
3235 }
3236
3237 if ( ! empty( $pages ) ) {
3238 foreach ( $pages as $page ) {
3239 $title = ! empty( $args['with_slug'] ) ? $page->post_title . ' (' . $page->post_name . ')' : ( $page->post_title . ' (#' . $page->ID . ')' );
3240
3241 $options[ $page->ID ] = $title;
3242 }
3243 }
3244
3245 $sd_tmpl_page_options = $options;
3246
3247 return apply_filters( 'sd_template_page_options', $options, $args );
3248 }
3249
3250 /**
3251 * Get the template part options.
3252 *
3253 *
3254 *
3255 * @param array $args Array of arguments.
3256 * @return array Template part options.
3257 */
3258 function sd_template_part_options( $args = array() ) {
3259 global $sd_tmpl_part_options;
3260
3261 if ( ! empty( $sd_tmpl_part_options ) ) {
3262 return $sd_tmpl_part_options;
3263 }
3264
3265 $options = array( '' => __( 'Select Template Part...', 'ayecode-connect' ) );
3266
3267 $parts = get_block_templates( array(), 'wp_template_part' );
3268
3269 if ( ! empty( $parts ) ) {
3270 foreach ( $parts as $part ) {
3271 $options[ $part->slug ] = $part->title . ' (#' . $part->slug . ')';
3272 }
3273 }
3274
3275 $sd_tmpl_part_options = $options;
3276
3277 return apply_filters( 'sd_template_part_options', $options, $args );
3278 }
3279
3280 /**
3281 * Get the template part by slug.
3282 *
3283 *
3284 *
3285 * @param string $slug Template slug.
3286 * @return array Template part object.
3287 */
3288 function sd_get_template_part_by_slug( $slug ) {
3289 global $bs_tmpl_part_by_slug;
3290
3291 if ( empty( $bs_tmpl_part_by_slug ) ) {
3292 $bs_tmpl_part_by_slug = array();
3293 }
3294
3295 if ( isset( $bs_tmpl_part_by_slug[ $slug ] ) ) {
3296 return $bs_tmpl_part_by_slug[ $slug ];
3297 }
3298
3299 $template_query = get_block_templates( array( 'slug__in' => array( $slug ) ), 'wp_template_part' );
3300
3301 $query_post = ! empty( $template_query ) ? $template_query[0] : array();
3302
3303 $template_part = ! empty( $query_post ) && $query_post->status == 'publish' ? $query_post : array();
3304
3305 $bs_tmpl_part_by_slug[ $slug ] = $template_part;
3306
3307 return apply_filters( 'sd_get_template_part_by_slug', $template_part, $slug );
3308 }
3309
3310 /**
3311 * Filters the content of a single block.
3312 *
3313 *
3314 *
3315 * @param string $block_content The block content.
3316 * @param array $block The full block, including name and attributes.
3317 * @param WP_Block $instance The block instance.
3318 */
3319 function sd_render_block( $block_content, $block, $instance = '' ) {
3320 // No block visibility conditions set.
3321 if ( empty( $block['attrs']['visibility_conditions'] ) ) {
3322 return $block_content;
3323 }
3324
3325 $attributes = json_decode( $block['attrs']['visibility_conditions'], true );
3326 $rules = ! empty( $attributes ) ? sd_block_parse_rules( $attributes ) : array();
3327
3328 // remove rules with missing validators.
3329 $valid_rules = sd_visibility_rules_options();
3330
3331 if ( ! empty( $rules ) ) {
3332 foreach ( $rules as $key => $rule ) {
3333 if ( ! isset( $valid_rules[ $rule['type'] ] ) ) {
3334 unset( $rules[ $key ] );
3335 }
3336 }
3337 }
3338
3339 // No rules set.
3340 if ( empty( $rules ) ) {
3341 return $block_content;
3342 }
3343
3344 $check_rules = null;
3345 $_block_content = $block_content;
3346
3347 if ( ! empty( $rules ) && ( ! empty( $attributes['output'] ) || ! empty( $attributes['outputN'] ) ) ) {
3348 $check_rules = sd_block_check_rules( $rules );
3349
3350 if ( $check_rules ) {
3351 $output_condition = ! empty( $attributes['output'] ) ? $attributes['output'] : array();
3352 } else {
3353 $output_condition = ! empty( $attributes['outputN'] ) ? $attributes['outputN'] : array();
3354 }
3355
3356 if ( ! empty( $output_condition ) && ! empty( $output_condition['type'] ) ) {
3357 switch ( $output_condition['type'] ) {
3358 case 'hide':
3359 $valid_type = true;
3360 $content = '';
3361
3362 break;
3363 case 'message':
3364 $valid_type = true;
3365
3366 if ( isset( $output_condition['message'] ) ) {
3367 $content = $output_condition['message'] != '' ? __( stripslashes( $output_condition['message'] ), 'ayecode-connect' ) : $output_condition['message'];
3368
3369 if ( ! empty( $output_condition['message_type'] ) ) {
3370 $content = aui()->alert( array(
3371 'type'=> $output_condition['message_type'],
3372 'content'=> $content
3373 )
3374 );
3375 }
3376 }
3377
3378 break;
3379 case 'page':
3380 $valid_type = true;
3381
3382 $page_id = ! empty( $output_condition['page'] ) ? absint( $output_condition['page'] ) : 0;
3383 $content = sd_get_page_content( $page_id );
3384
3385 break;
3386 case 'template_part':
3387 $valid_type = true;
3388
3389 $template_part = ! empty( $output_condition['template_part'] ) ? $output_condition['template_part'] : '';
3390 $content = sd_get_template_part_content( $template_part );
3391
3392 break;
3393 default:
3394 $valid_type = false;
3395 break;
3396 }
3397
3398 if ( $valid_type ) {
3399 $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>';
3400 }
3401 }
3402 }
3403
3404 return apply_filters( 'sd_render_block_visibility_content', $block_content, $_block_content, $attributes, $block, $instance, $check_rules );
3405 }
3406 add_filter( 'render_block', 'sd_render_block', 9, 3 );
3407
3408 /**
3409 * Safely fetches page content after checking viewing permissions.
3410 *
3411 * @param int $post_id The ID of the post/page.
3412 * @param bool $bypass_check Set to true only if called from a secure, trusted admin context.
3413 * @return string
3414 */
3415 function sd_get_safe_post_content( $post_id, $bypass_check = false ) {
3416 $post_id = (int) $post_id;
3417
3418 if ( $post_id <= 0 ) {
3419 return '';
3420 }
3421
3422 if ( ! $bypass_check ) {
3423 $post = get_post( $post_id );
3424
3425 if ( empty( $post ) ) {
3426 return '';
3427 }
3428
3429 if ( ( ! is_post_publicly_viewable( $post ) && ! current_user_can( 'read_post', $post_id ) ) || post_password_required( $post ) ) {
3430 return '';
3431 }
3432 }
3433
3434 return get_post_field( 'post_content', $post_id );
3435 }
3436
3437 function sd_get_page_content( $page_id ) {
3438 $content = sd_get_safe_post_content( (int) $page_id );
3439
3440 // Maybe bypass content
3441 $bypass_content = apply_filters( 'sd_bypass_page_content', '', $content, $page_id );
3442 if ( $bypass_content ) {
3443 return $bypass_content;
3444 }
3445
3446 // Run the shortcodes on the content.
3447 $content = do_shortcode( $content );
3448
3449 // Run block content if its available.
3450 if ( function_exists( 'do_blocks' ) ) {
3451 $content = do_blocks( $content );
3452 }
3453
3454 return apply_filters( 'sd_get_page_content', $content, $page_id );
3455 }
3456
3457 function sd_get_template_part_content( $template_part ) {
3458 $template_part_post = $template_part ? sd_get_template_part_by_slug( $template_part ) : array();
3459 $content = ! empty( $template_part_post ) ? $template_part_post->content : '';
3460
3461 // Maybe bypass content
3462 $bypass_content = apply_filters( 'sd_bypass_template_part_content', '', $content, $template_part );
3463 if ( $bypass_content ) {
3464 return $bypass_content;
3465 }
3466
3467 // Run the shortcodes on the content.
3468 $content = do_shortcode( $content );
3469
3470 // Run block content if its available.
3471 if ( function_exists( 'do_blocks' ) ) {
3472 $content = do_blocks( $content );
3473 }
3474
3475 return apply_filters( 'sd_get_template_part_content', $content, $template_part );
3476 }
3477
3478 function sd_block_parse_rules( $attrs ) {
3479 $rules = array();
3480
3481 if ( ! empty( $attrs ) && is_array( $attrs ) ) {
3482 $attrs_keys = array_keys( $attrs );
3483
3484 for ( $i = 1; $i <= count( $attrs_keys ); $i++ ) {
3485 if ( ! empty( $attrs[ 'rule' . $i ] ) && is_array( $attrs[ 'rule' . $i ] ) ) {
3486 $rules[] = $attrs[ 'rule' . $i ];
3487 }
3488 }
3489 }
3490
3491 return apply_filters( 'sd_block_parse_rules', $rules, $attrs );
3492 }
3493
3494 function sd_block_check_rules( $rules ) {
3495 if ( ! ( is_array( $rules ) && ! empty( $rules ) ) ) {
3496 return true;
3497 }
3498
3499 foreach ( $rules as $key => $rule ) {
3500 $match = apply_filters( 'sd_block_check_rule', true, $rule );
3501
3502 if ( ! $match ) {
3503 break;
3504 }
3505 }
3506
3507 return apply_filters( 'sd_block_check_rules', $match, $rules );
3508 }
3509
3510 function sd_block_check_rule( $match, $rule ) {
3511 global $post;
3512
3513 if ( $match && ! empty( $rule['type'] ) ) {
3514 switch ( $rule['type'] ) {
3515 case 'logged_in':
3516 $match = (bool) is_user_logged_in();
3517
3518 break;
3519 case 'logged_out':
3520 $match = ! is_user_logged_in();
3521
3522 break;
3523 case 'post_author':
3524 if ( ! empty( $post ) && $post->post_type != 'page' && ! empty( $post->post_author ) && is_user_logged_in() ) {
3525 $match = (int) $post->post_author === (int) get_current_user_id() ? true : false;
3526 } else {
3527 $match = false;
3528 }
3529
3530 break;
3531 case 'user_roles':
3532 $match = false;
3533
3534 if ( ! empty( $rule['user_roles'] ) ) {
3535 $user_roles = is_scalar( $rule['user_roles'] ) ? explode( ",", $rule['user_roles'] ) : $rule['user_roles'];
3536
3537 if ( is_array( $user_roles ) ) {
3538 $user_roles = array_filter( array_map( 'trim', $user_roles ) );
3539 }
3540
3541 if ( ! empty( $user_roles ) && is_array( $user_roles ) ) {
3542 if ( is_user_logged_in() && ( $current_user = wp_get_current_user() ) ) {
3543 $current_user_roles = $current_user->roles;
3544
3545 foreach ( $user_roles as $role ) {
3546 if ( in_array( $role, $current_user_roles ) ) {
3547 $match = true;
3548 }
3549 }
3550 } else {
3551 // Logged out role.
3552 if ( in_array( 'logged_out', $user_roles ) ) {
3553 $match = true;
3554 }
3555 }
3556 }
3557 }
3558
3559 break;
3560 case 'gd_field':
3561 $match = sd_block_check_rule_gd_field( $rule );
3562
3563 break;
3564
3565 default:
3566 $match = apply_filters( 'sd_block_check_custom_rule', $match, $rule );
3567 break;
3568 }
3569 }
3570
3571 return $match;
3572 }
3573 add_filter( 'sd_block_check_rule', 'sd_block_check_rule', 10, 2 );
3574
3575 function sd_block_check_rule_gd_field( $rule ) {
3576 global $gd_post;
3577
3578 $match_found = false;
3579
3580 if ( class_exists( 'GeoDirectory' ) && ! empty( $gd_post->ID ) && ! empty( $rule['field'] ) && ! empty( $rule['condition'] ) ) {
3581 $args['block_visibility'] = true;
3582 $args['key'] = $rule['field'];
3583 $args['condition'] = $rule['condition'];
3584 $args['search'] = isset( $rule['search'] ) ? $rule['search'] : '';
3585
3586 if ( $args['key'] == 'street' ) {
3587 $args['key'] = 'address';
3588 }
3589
3590 $match_field = $_match_field = $args['key'];
3591
3592 if ( $match_field == 'address' ) {
3593 $match_field = 'street';
3594 } elseif ( $match_field == 'post_images' ) {
3595 $match_field = 'featured_image';
3596 }
3597
3598 $find_post = $gd_post;
3599 $find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3600
3601 if ( ! empty( $find_post->ID ) && ! in_array( 'post_category', $find_post_keys ) ) {
3602 $find_post = geodir_get_post_info( (int) $find_post->ID );
3603 $find_post_keys = ! empty( $find_post ) ? array_keys( (array) $find_post ) : array();
3604 }
3605
3606 if ( $match_field === '' || ( ! empty( $find_post_keys ) && ( in_array( $match_field, $find_post_keys ) || in_array( $_match_field, $find_post_keys ) ) ) ) {
3607 $address_fields = array( 'street2', 'neighbourhood', 'city', 'region', 'country', 'zip', 'latitude', 'longitude' ); // Address fields
3608 $field = array();
3609 $empty_field = false;
3610
3611 $standard_fields = sd_visibility_gd_standard_fields();
3612
3613 if ( $match_field && ! in_array( $match_field, array_keys( $standard_fields ) ) && ! in_array( $match_field, $address_fields ) ) {
3614 $package_id = geodir_get_post_package_id( $find_post->ID, $find_post->post_type );
3615 $fields = geodir_post_custom_fields( $package_id, 'all', $find_post->post_type, 'none' );
3616
3617 foreach ( $fields as $field_info ) {
3618 if ( $match_field == $field_info['htmlvar_name'] ) {
3619 $field = $field_info;
3620 break;
3621 } elseif( $_match_field == $field_info['htmlvar_name'] ) {
3622 $field = $field_info;
3623 break;
3624 }
3625 }
3626
3627 if ( empty( $field ) ) {
3628 $empty_field = true;
3629 }
3630 }
3631
3632 // Address fields.
3633 if ( in_array( $match_field, $address_fields ) && ( $address_fields = geodir_post_meta_address_fields( '' ) ) ) {
3634 if ( ! empty( $address_fields[ $match_field ] ) ) {
3635 $field = $address_fields[ $match_field ];
3636 }
3637 } else if ( in_array( $match_field, array_keys( $standard_fields ) ) ) {
3638 if ( ! empty( $standard_fields[ $match_field ] ) ) {
3639 $field = $standard_fields[ $match_field ];
3640 }
3641 }
3642
3643 // Parse search.
3644 $search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3645
3646 $is_date = ( ! empty( $field['type'] ) && $field['type'] == 'datepicker' ) || in_array( $match_field, array( 'post_date', 'post_modified' ) ) ? true : false;
3647 $is_date = apply_filters( 'geodir_post_badge_is_date', $is_date, $match_field, $field, $args, $find_post );
3648
3649 $match_value = isset( $find_post->{$match_field} ) && empty( $empty_field ) ? esc_attr( trim( $find_post->{$match_field} ) ) : '';
3650 $match_found = $match_field === '' ? true : false;
3651
3652 if ( ! $match_found ) {
3653 if ( ( $match_field == 'post_date' || $match_field == 'post_modified' ) && ( empty( $args['condition'] ) || $args['condition'] == 'is_greater_than' || $args['condition'] == 'is_less_than' ) ) {
3654 if ( strpos( $search, '+' ) === false && strpos( $search, '-' ) === false ) {
3655 $search = '+' . $search;
3656 }
3657 $the_time = $match_field == 'post_modified' ? get_the_modified_date( 'Y-m-d', $find_post ) : get_the_time( 'Y-m-d', $find_post );
3658 $until_time = strtotime( $the_time . ' ' . $search . ' days' );
3659 $now_time = strtotime( date_i18n( 'Y-m-d', current_time( 'timestamp' ) ) );
3660 if ( ( empty( $args['condition'] ) || $args['condition'] == 'is_less_than' ) && $until_time > $now_time ) {
3661 $match_found = true;
3662 } elseif ( $args['condition'] == 'is_greater_than' && $until_time < $now_time ) {
3663 $match_found = true;
3664 }
3665 } else {
3666 switch ( $args['condition'] ) {
3667 case 'is_equal':
3668 $match_found = (bool) ( $search != '' && $match_value == $search );
3669 break;
3670 case 'is_not_equal':
3671 $match_found = (bool) ( $search != '' && $match_value != $search );
3672 break;
3673 case 'is_greater_than':
3674 $match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value > $search );
3675 break;
3676 case 'is_less_than':
3677 $match_found = (bool) ( $search != '' && ( is_float( $search ) || is_numeric( $search ) ) && ( is_float( $match_value ) || is_numeric( $match_value ) ) && $match_value < $search );
3678 break;
3679 case 'is_empty':
3680 $match_found = (bool) ( $match_value === '' || $match_value === false || $match_value === '0' || is_null( $match_value ) );
3681 break;
3682 case 'is_not_empty':
3683 $match_found = (bool) ( $match_value !== '' && $match_value !== false && $match_value !== '0' && ! is_null( $match_value ) );
3684 break;
3685 case 'is_contains':
3686 $match_found = (bool) ( $search != '' && stripos( $match_value, $search ) !== false );
3687 break;
3688 case 'is_not_contains':
3689 $match_found = (bool) ( $search != '' && stripos( $match_value, $search ) === false );
3690 break;
3691 }
3692 }
3693 }
3694
3695 $match_found = apply_filters( 'geodir_post_badge_check_match_found', $match_found, $args, $find_post );
3696 } else {
3697 $field = array();
3698
3699 // Parse search.
3700 $search = sd_gd_field_rule_search( $args['search'], $find_post->post_type, $rule, $field, $find_post );
3701
3702 $match_value = '';
3703 $match_found = $match_field === '' ? true : false;
3704
3705 if ( ! $match_found ) {
3706 switch ( $args['condition'] ) {
3707 case 'is_equal':
3708 $match_found = (bool) ( $search != '' && $match_value == $search );
3709 break;
3710 case 'is_not_equal':
3711 $match_found = (bool) ( $search != '' && $match_value != $search );
3712 break;
3713 case 'is_greater_than':
3714 $match_found = false;
3715 break;
3716 case 'is_less_than':
3717 $match_found = false;
3718 break;
3719 case 'is_empty':
3720 $match_found = true;
3721 break;
3722 case 'is_not_empty':
3723 $match_found = false;
3724 break;
3725 case 'is_contains':
3726 $match_found = false;
3727 break;
3728 case 'is_not_contains':
3729 $match_found = false;
3730 break;
3731 }
3732 }
3733
3734 $match_found = apply_filters( 'geodir_post_badge_check_match_found_empty', $match_found, $args, $find_post );
3735 }
3736 }
3737
3738 return $match_found;
3739 }
3740
3741 function sd_gd_field_rule_search( $search, $post_type, $rule, $field = array(), $gd_post = array() ) {
3742 global $post;
3743
3744 if ( ! $search ) {
3745 return $search;
3746 }
3747
3748 $orig_search = $search;
3749 $_search = strtolower( $search );
3750
3751 if ( ! empty( $rule['field'] ) && $rule['field'] == 'post_author' ) {
3752 if ( $search == 'current_user' ) {
3753 $search = is_user_logged_in() ? (int) get_current_user_id() : - 1;
3754 } else if ( $search == 'current_author' ) {
3755 $search = ( ! empty( $post ) && $post->post_type != 'page' && isset( $post->post_author ) ) ? absint( $post->post_author ) : - 1;
3756 }
3757 } else if ( $_search == 'date_today' ) {
3758 $search = date( 'Y-m-d' );
3759 } else if ( $_search == 'date_tomorrow' ) {
3760 $search = date( 'Y-m-d', strtotime( "+1 day" ) );
3761 } else if ( $_search == 'date_yesterday' ) {
3762 $search = date( 'Y-m-d', strtotime( "-1 day" ) );
3763 } else if ( $_search == 'time_his' ) {
3764 $search = date( 'H:i:s' );
3765 } else if ( $_search == 'time_hi' ) {
3766 $search = date( 'H:i' );
3767 } else if ( $_search == 'datetime_now' ) {
3768 $search = date( 'Y-m-d H:i:s' );
3769 } else if ( strpos( $_search, 'datetime_after_' ) === 0 ) {
3770 $_searches = explode( 'datetime_after_', $_search, 2 );
3771
3772 if ( ! empty( $_searches[1] ) ) {
3773 $search = date( 'Y-m-d H:i:s', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3774 } else {
3775 $search = date( 'Y-m-d H:i:s' );
3776 }
3777 } else if ( strpos( $_search, 'datetime_before_' ) === 0 ) {
3778 $_searches = explode( 'datetime_before_', $_search, 2 );
3779
3780 if ( ! empty( $_searches[1] ) ) {
3781 $search = date( 'Y-m-d H:i:s', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3782 } else {
3783 $search = date( 'Y-m-d H:i:s' );
3784 }
3785 } else if ( strpos( $_search, 'date_after_' ) === 0 ) {
3786 $_searches = explode( 'date_after_', $_search, 2 );
3787
3788 if ( ! empty( $_searches[1] ) ) {
3789 $search = date( 'Y-m-d', strtotime( "+ " . str_replace( "_", " ", $_searches[1] ) ) );
3790 } else {
3791 $search = date( 'Y-m-d' );
3792 }
3793 } else if ( strpos( $_search, 'date_before_' ) === 0 ) {
3794 $_searches = explode( 'date_before_', $_search, 2 );
3795
3796 if ( ! empty( $_searches[1] ) ) {
3797 $search = date( 'Y-m-d', strtotime( "- " . str_replace( "_", " ", $_searches[1] ) ) );
3798 } else {
3799 $search = date( 'Y-m-d' );
3800 }
3801 }
3802
3803 return apply_filters( 'sd_gd_field_rule_search', $search, $post_type, $rule, $orig_search );
3804 }
3805
3806
3807 if(!function_exists('sd_blocks_render_blocks')){
3808 /**
3809 * Add the shortcodes to the block content if set as an attribute.
3810 *
3811 * We have moved the shortcodes from the block content to a block argument to help prevent broken blocks.
3812 *
3813 * @param $block_content
3814 * @param $parsed_block
3815 * @param $thiss
3816 * @return mixed|string
3817 */
3818 function sd_blocks_render_blocks($block_content, $parsed_block, $thiss = array() ){
3819 // Check hide block visibility conditions.
3820 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 ) {
3821 $match_content = '<div class="' . esc_attr( wp_get_block_default_classname( $thiss->name ) ) . ' sd-block-has-rule sd-block-hide-rule"></div>';
3822
3823 // Return empty content to hide block.
3824 if ( $block_content == $match_content ) {
3825 return '';
3826 }
3827 }
3828
3829 // Check if ita a nested block that needs to be wrapped
3830 if(! empty($parsed_block['attrs']['sd_shortcode_close'])){
3831 $content = isset($parsed_block['attrs']['html']) ? $parsed_block['attrs']['html'] : $block_content;
3832 $block_content = $parsed_block['attrs']['sd_shortcode'].$content.$parsed_block['attrs']['sd_shortcode_close'];
3833
3834 $block_content = do_shortcode($block_content);
3835
3836 }elseif(! empty($parsed_block['attrs']['sd_shortcode'])){
3837 $has_warp = false;
3838 if($block_content && strpos(trim($block_content), '<div class="wp-block-') === 0 ){
3839 $parts = explode('></', $block_content);
3840 if(count($parts) === 2){
3841 $block_content = $parts[0].'>'.$parsed_block['attrs']['sd_shortcode'].'</'.$parts[1];
3842 $has_warp = true;
3843 }
3844 }
3845 if (!$has_warp) {
3846 // Add the shortcode if its not a wrapped block
3847 $block_content .= $parsed_block['attrs']['sd_shortcode'];
3848 }
3849
3850 $block_content = do_shortcode($block_content);
3851 }
3852 return $block_content;
3853 }
3854 }
3855
3856 add_filter('render_block', 'sd_blocks_render_blocks',10,3);
3857
3858 /**
3859 * Disable additional CSS for SD blocks.
3860 *
3861 * @since 1.2.32
3862 *
3863 * @param array $options Block options.
3864 * @return array Filtered block options.
3865 */
3866 function sd_disable_additional_css( $options ) {
3867 if ( ! is_array( $options ) ) {
3868 return $options;
3869 }
3870
3871 if ( ! isset( $options['block-supports'] ) ) {
3872 $options['block-supports'] = array();
3873 }
3874
3875 if ( ! isset( $options['block-supports']['customCSS'] ) ) {
3876 $options['block-supports']['customCSS'] = false;
3877 }
3878
3879 return $options;
3880 }
3881 add_filter( 'wp_super_duper_options', 'sd_disable_additional_css', 10, 1 );
3882