Coming Soon, Under Construction & Maintenance Page - Version 1.42

Version Description

  • 2018/11/27
  • minor vulnerability removed
  • few bugs fixed
Download this release

Release Info

Developer WebFactory
Plugin Icon 128x128 Coming Soon, Under Construction & Maintenance Page
Version 1.42
Comparing to
See all releases

Code changes from version 1.40 to 1.42

admin/includes/ot-cleanup-api.php CHANGED
@@ -11,7 +11,7 @@
11
  if ( ! class_exists( 'OT_Cleanup' ) ) {
12
 
13
  class OT_Cleanup {
14
-
15
  /**
16
  * PHP5 constructor method.
17
  *
@@ -30,15 +30,15 @@ if ( ! class_exists( 'OT_Cleanup' ) ) {
30
 
31
  // Load styles
32
  add_action( 'admin_head', array( $this, 'styles' ), 1 );
33
-
34
  // Maybe Clean up OptionTree
35
  add_action( 'admin_menu', array( $this, 'maybe_cleanup' ), 100 );
36
-
37
  // Increase timeout if allowed
38
  add_action( 'ot_pre_consolidate_posts', array( $this, 'increase_timeout' ) );
39
-
40
  }
41
-
42
  /**
43
  * Adds the cleanup styles to the admin head
44
  *
@@ -52,7 +52,7 @@ if ( ! class_exists( 'OT_Cleanup' ) ) {
52
  echo '<style>#toplevel_page_ot-cleanup{display:none;}</style>';
53
 
54
  }
55
-
56
  /**
57
  * Check if OptionTree needs to be cleaned up from a previous install.
58
  *
@@ -70,12 +70,12 @@ if ( ! class_exists( 'OT_Cleanup' ) ) {
70
  $ot_maybe_cleanup_table = $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE %s", $table_name ) ) == $table_name;
71
 
72
  if ( ! $ot_maybe_cleanup_posts && ! $ot_maybe_cleanup_table && $page == 'ot-cleanup' ) {
73
- wp_redirect( apply_filters( 'ot_theme_options_parent_slug', 'themes.php' ) . '?page=' . apply_filters( 'ot_theme_options_menu_slug', 'ot-theme-options' ) );
74
  exit;
75
  }
76
 
77
  if ( $ot_maybe_cleanup_posts || $ot_maybe_cleanup_table ) {
78
-
79
  if ( $page != 'ot-cleanup' )
80
  add_action( 'admin_notices', array( $this, 'cleanup_notice' ) );
81
 
@@ -84,9 +84,9 @@ if ( ! class_exists( 'OT_Cleanup' ) ) {
84
  $theme_check_bs( apply_filters( 'ot_cleanup_page_title', __( 'OptionTree Cleanup', 'option-tree' ) ), apply_filters( 'ot_cleanup_menu_title', __( 'OptionTree Cleanup', 'option-tree' ) ), 'edit_theme_options', 'ot-cleanup', array( $this, 'options_page' ) );
85
 
86
  }
87
-
88
  }
89
-
90
  /**
91
  * Adds an admin nag.
92
  *
@@ -99,7 +99,7 @@ if ( ! class_exists( 'OT_Cleanup' ) ) {
99
 
100
  if ( get_current_screen()->id != 'appearance_page_ot-cleanup' )
101
  echo '<div class="update-nag">' . sprintf( __( 'OptionTree has outdated data that should be removed. Please go to %s for more information.', 'option-tree' ), sprintf( '<a href="%s">%s</a>', admin_url( 'themes.php?page=ot-cleanup' ), apply_filters( 'ot_cleanup_menu_title', __( 'OptionTree Cleanup', 'option-tree' ) ) ) ) . '</div>';
102
-
103
  }
104
 
105
  /**
@@ -181,7 +181,7 @@ if ( ! class_exists( 'OT_Cleanup' ) ) {
181
  </script>';
182
  break;
183
  }
184
-
185
  // Get the attachements
186
  $attachments = get_children( 'post_type=attachment&post_parent=' . $post->ID );
187
 
@@ -191,7 +191,7 @@ if ( ! class_exists( 'OT_Cleanup' ) ) {
191
  echo 'Updating Attachments parent ID for <tt>option-tree</tt> post <tt>#' . $post->ID . '</tt>.<br />';
192
 
193
  foreach( $attachments as $attachment_id => $attachment ) {
194
- wp_update_post(
195
  array(
196
  'ID' => $attachment_id,
197
  'post_parent' => $post_ID
@@ -260,7 +260,7 @@ if ( ! class_exists( 'OT_Cleanup' ) ) {
260
  }
261
 
262
  }
263
-
264
  echo '</div>';
265
 
266
  }
@@ -276,13 +276,13 @@ if ( ! class_exists( 'OT_Cleanup' ) ) {
276
  * @since 2.4.6
277
  */
278
  public function increase_timeout() {
279
-
280
  if ( ! ini_get( 'safe_mode' ) ) {
281
-
282
  @set_time_limit( 0 );
283
-
284
  }
285
-
286
  }
287
 
288
  }
@@ -292,4 +292,4 @@ if ( ! class_exists( 'OT_Cleanup' ) ) {
292
  new OT_Cleanup();
293
 
294
  /* End of file ot-cleanup-api.php */
295
- /* Location: ./includes/ot-cleanup-api.php */
11
  if ( ! class_exists( 'OT_Cleanup' ) ) {
12
 
13
  class OT_Cleanup {
14
+
15
  /**
16
  * PHP5 constructor method.
17
  *
30
 
31
  // Load styles
32
  add_action( 'admin_head', array( $this, 'styles' ), 1 );
33
+
34
  // Maybe Clean up OptionTree
35
  add_action( 'admin_menu', array( $this, 'maybe_cleanup' ), 100 );
36
+
37
  // Increase timeout if allowed
38
  add_action( 'ot_pre_consolidate_posts', array( $this, 'increase_timeout' ) );
39
+
40
  }
41
+
42
  /**
43
  * Adds the cleanup styles to the admin head
44
  *
52
  echo '<style>#toplevel_page_ot-cleanup{display:none;}</style>';
53
 
54
  }
55
+
56
  /**
57
  * Check if OptionTree needs to be cleaned up from a previous install.
58
  *
70
  $ot_maybe_cleanup_table = $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE %s", $table_name ) ) == $table_name;
71
 
72
  if ( ! $ot_maybe_cleanup_posts && ! $ot_maybe_cleanup_table && $page == 'ot-cleanup' ) {
73
+ wp_safe_redirect( apply_filters( 'ot_theme_options_parent_slug', 'themes.php' ) . '?page=' . apply_filters( 'ot_theme_options_menu_slug', 'ot-theme-options' ) );
74
  exit;
75
  }
76
 
77
  if ( $ot_maybe_cleanup_posts || $ot_maybe_cleanup_table ) {
78
+
79
  if ( $page != 'ot-cleanup' )
80
  add_action( 'admin_notices', array( $this, 'cleanup_notice' ) );
81
 
84
  $theme_check_bs( apply_filters( 'ot_cleanup_page_title', __( 'OptionTree Cleanup', 'option-tree' ) ), apply_filters( 'ot_cleanup_menu_title', __( 'OptionTree Cleanup', 'option-tree' ) ), 'edit_theme_options', 'ot-cleanup', array( $this, 'options_page' ) );
85
 
86
  }
87
+
88
  }
89
+
90
  /**
91
  * Adds an admin nag.
92
  *
99
 
100
  if ( get_current_screen()->id != 'appearance_page_ot-cleanup' )
101
  echo '<div class="update-nag">' . sprintf( __( 'OptionTree has outdated data that should be removed. Please go to %s for more information.', 'option-tree' ), sprintf( '<a href="%s">%s</a>', admin_url( 'themes.php?page=ot-cleanup' ), apply_filters( 'ot_cleanup_menu_title', __( 'OptionTree Cleanup', 'option-tree' ) ) ) ) . '</div>';
102
+
103
  }
104
 
105
  /**
181
  </script>';
182
  break;
183
  }
184
+
185
  // Get the attachements
186
  $attachments = get_children( 'post_type=attachment&post_parent=' . $post->ID );
187
 
191
  echo 'Updating Attachments parent ID for <tt>option-tree</tt> post <tt>#' . $post->ID . '</tt>.<br />';
192
 
193
  foreach( $attachments as $attachment_id => $attachment ) {
194
+ wp_update_post(
195
  array(
196
  'ID' => $attachment_id,
197
  'post_parent' => $post_ID
260
  }
261
 
262
  }
263
+
264
  echo '</div>';
265
 
266
  }
276
  * @since 2.4.6
277
  */
278
  public function increase_timeout() {
279
+
280
  if ( ! ini_get( 'safe_mode' ) ) {
281
+
282
  @set_time_limit( 0 );
283
+
284
  }
285
+
286
  }
287
 
288
  }
292
  new OT_Cleanup();
293
 
294
  /* End of file ot-cleanup-api.php */
295
+ /* Location: ./includes/ot-cleanup-api.php */
admin/includes/ot-functions-admin.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Functions used only while viewing the admin UI.
4
  *
5
- * Limit loading these function only when needed
6
  * and not in the front end.
7
  *
8
  * @package OptionTree
@@ -24,26 +24,26 @@
24
  if ( ! function_exists( 'ot_register_theme_options_page' ) ) {
25
 
26
  function ot_register_theme_options_page() {
27
-
28
  /* get the settings array */
29
  $get_settings = get_option( ot_settings_id() );
30
-
31
  /* sections array */
32
  $sections = isset( $get_settings['sections'] ) ? $get_settings['sections'] : array();
33
-
34
  /* settings array */
35
  $settings = isset( $get_settings['settings'] ) ? $get_settings['settings'] : array();
36
-
37
  /* contexual_help array */
38
  $contextual_help = isset( $get_settings['contextual_help'] ) ? $get_settings['contextual_help'] : array();
39
-
40
  /* build the Theme Options */
41
  if ( function_exists( 'ot_register_settings' ) && OT_USE_THEME_OPTIONS ) {
42
-
43
  ot_register_settings( array(
44
  array(
45
  'id' => ot_options_id(),
46
- 'pages' => array(
47
  array(
48
  'id' => 'niftycs_options',
49
  'parent_slug' => apply_filters( 'niftycs_options_parent_slug', null ),
@@ -62,14 +62,14 @@ if ( ! function_exists( 'ot_register_theme_options_page' ) ) {
62
  )
63
  )
64
  )
65
- )
66
  );
67
-
68
  // Filters the options.php to add the minimum user capabilities.
69
  add_filter( 'option_page_capability_' . ot_options_id(), create_function( '$caps', "return '$caps';" ), 999 );
70
-
71
  }
72
-
73
  }
74
 
75
  }
@@ -88,23 +88,23 @@ if ( ! function_exists( 'ot_register_settings_page' ) ) {
88
 
89
  function ot_register_settings_page() {
90
  global $ot_has_custom_theme_options;
91
-
92
  // Display UI Builder admin notice
93
  if ( OT_SHOW_OPTIONS_UI == true && isset( $_REQUEST['page'] ) && $_REQUEST['page'] == 'ot-settings' && ( $ot_has_custom_theme_options == true || has_action( 'admin_init', 'custom_theme_options' ) || has_action( 'init', 'custom_theme_options' ) ) ) {
94
-
95
  function ot_has_custom_theme_options() {
96
-
97
  echo '<div class="error"><p>' . __( 'The Theme Options UI Builder is being overridden by a custom file in your theme. Any changes you make via the UI Builder will not be saved.', 'option-tree' ) . '</p></div>';
98
-
99
  }
100
-
101
  add_action( 'admin_notices', 'ot_has_custom_theme_options' );
102
-
103
  }
104
-
105
  // Create the filterable pages array
106
- $ot_register_pages_array = array(
107
- array(
108
  'id' => 'ot',
109
  'page_title' => __( 'OptionTree', 'option-tree' ),
110
  'menu_title' => __( 'OptionTree', 'option-tree' ),
@@ -303,82 +303,82 @@ if ( ! function_exists( 'ot_register_settings_page' ) ) {
303
  )
304
  )
305
  );
306
-
307
  // Loop over the settings and remove as needed.
308
  foreach( $ot_register_pages_array as $key => $page ) {
309
-
310
  // Remove various options from the Settings UI.
311
  if ( $page['id'] == 'settings' ) {
312
-
313
  // Remove the Theme Options UI
314
  if ( OT_SHOW_OPTIONS_UI == false ) {
315
-
316
  foreach( $page['sections'] as $section_key => $section ) {
317
  if ( $section['id'] == 'create_setting' ) {
318
  unset($ot_register_pages_array[$key]['sections'][$section_key]);
319
  }
320
  }
321
-
322
  foreach( $page['settings'] as $setting_key => $setting ) {
323
  if ( $setting['section'] == 'create_setting' ) {
324
  unset($ot_register_pages_array[$key]['settings'][$setting_key]);
325
  }
326
  }
327
-
328
  }
329
-
330
  // Remove parts of the Imports UI
331
  if ( OT_SHOW_SETTINGS_IMPORT == false ) {
332
-
333
  foreach( $page['settings'] as $setting_key => $setting ) {
334
  if ( $setting['section'] == 'import' && in_array( $setting['id'], array('import_xml_text', 'import_settings_text' ) ) ) {
335
  unset($ot_register_pages_array[$key]['settings'][$setting_key]);
336
  }
337
  }
338
-
339
  }
340
-
341
  // Remove parts of the Export UI
342
  if ( OT_SHOW_SETTINGS_EXPORT == false ) {
343
-
344
  foreach( $page['settings'] as $setting_key => $setting ) {
345
  if ( $setting['section'] == 'export' && in_array( $setting['id'], array('export_settings_file_text', 'export_settings_text' ) ) ) {
346
  unset($ot_register_pages_array[$key]['settings'][$setting_key]);
347
  }
348
  }
349
-
350
  }
351
-
352
  // Remove the Layouts UI
353
  if ( OT_SHOW_NEW_LAYOUT == false ) {
354
-
355
  foreach( $page['sections'] as $section_key => $section ) {
356
  if ( $section['id'] == 'layouts' ) {
357
  unset($ot_register_pages_array[$key]['sections'][$section_key]);
358
  }
359
  }
360
-
361
  foreach( $page['settings'] as $setting_key => $setting ) {
362
  if ( $setting['section'] == 'layouts' ) {
363
  unset($ot_register_pages_array[$key]['settings'][$setting_key]);
364
  }
365
  }
366
-
367
  }
368
-
369
  }
370
-
371
  // Remove the Documentation UI.
372
  if ( OT_SHOW_DOCS == false && $page['id'] == 'documentation' ) {
373
-
374
  unset( $ot_register_pages_array[$key] );
375
-
376
  }
377
-
378
  }
379
-
380
  $ot_register_pages_array = apply_filters( 'ot_register_pages_array', $ot_register_pages_array );
381
-
382
  // Register the pages.
383
  ot_register_settings( array(
384
  array(
@@ -387,7 +387,7 @@ if ( ! function_exists( 'ot_register_settings_page' ) ) {
387
  )
388
  )
389
  );
390
-
391
  }
392
 
393
  }
@@ -403,21 +403,21 @@ if ( ! function_exists( 'ot_register_settings_page' ) ) {
403
  if ( ! function_exists( 'ot_after_theme_options_save' ) ) {
404
 
405
  function ot_after_theme_options_save() {
406
-
407
  $page = isset( $_REQUEST['page'] ) ? $_REQUEST['page'] : '';
408
  $updated = isset( $_REQUEST['settings-updated'] ) && $_REQUEST['settings-updated'] == 'true' ? true : false;
409
-
410
  /* only execute after the theme options are saved */
411
  if ( apply_filters( 'niftycs_options_menu_slug', 'niftycs-options' ) == $page && $updated ) {
412
-
413
  /* grab a copy of the theme options */
414
  $options = get_option( ot_options_id() );
415
-
416
  /* execute the action hook and pass the theme options to it */
417
  do_action( 'ot_after_theme_options_save', $options );
418
-
419
  }
420
-
421
  }
422
 
423
  }
@@ -442,128 +442,128 @@ if ( ! function_exists( 'ot_after_theme_options_save' ) ) {
442
  if ( ! function_exists( 'ot_validate_setting' ) ) {
443
 
444
  function ot_validate_setting( $input, $type, $field_id, $wmpl_id = '' ) {
445
-
446
  /* exit early if missing data */
447
  if ( ! $input || ! $type || ! $field_id )
448
  return $input;
449
-
450
  $input = apply_filters( 'ot_validate_setting', $input, $type, $field_id );
451
-
452
  /* WPML Register and Unregister strings */
453
  if ( ! empty( $wmpl_id ) ) {
454
-
455
  /* Allow filtering on the WPML option types */
456
  $single_string_types = apply_filters( 'ot_wpml_option_types', array( 'text', 'textarea', 'textarea-simple' ) );
457
-
458
  if ( in_array( $type, $single_string_types ) ) {
459
-
460
  if ( ! empty( $input ) ) {
461
-
462
  ot_wpml_register_string( $wmpl_id, $input );
463
-
464
  } else {
465
-
466
  ot_wpml_unregister_string( $wmpl_id );
467
-
468
  }
469
-
470
  }
471
-
472
  }
473
-
474
  if ( 'background' == $type ) {
475
 
476
  $input['background-color'] = ot_validate_setting( $input['background-color'], 'colorpicker', $field_id );
477
-
478
  $input['background-image'] = ot_validate_setting( $input['background-image'], 'upload', $field_id );
479
-
480
  // Loop over array and check for values
481
  foreach( (array) $input as $key => $value ) {
482
  if ( ! empty( $value ) ) {
483
  $has_value = true;
484
  }
485
  }
486
-
487
  // No value; set to empty
488
  if ( ! isset( $has_value ) ) {
489
  $input = '';
490
  }
491
-
492
  } else if ( 'border' == $type ) {
493
-
494
  // Loop over array and set errors or unset key from array.
495
  foreach( $input as $key => $value ) {
496
-
497
  // Validate width
498
  if ( $key == 'width' && ! empty( $value ) && ! is_numeric( $value ) ) {
499
-
500
  $input[$key] = '0';
501
-
502
  add_settings_error( 'option-tree', 'invalid_border_width', sprintf( __( 'The %s input field for %s only allows numeric values.', 'option-tree' ), '<code>width</code>', '<code>' . $field_id . '</code>' ), 'error' );
503
-
504
  }
505
-
506
  // Validate color
507
  if ( $key == 'color' && ! empty( $value ) ) {
508
 
509
  $input[$key] = ot_validate_setting( $value, 'colorpicker', $field_id );
510
-
511
  }
512
-
513
  // Unset keys with empty values.
514
  if ( empty( $value ) && strlen( $value ) == 0 ) {
515
  unset( $input[$key] );
516
  }
517
-
518
  }
519
-
520
  if ( empty( $input ) ) {
521
  $input = '';
522
  }
523
-
524
  } else if ( 'box-shadow' == $type ) {
525
-
526
  // Validate inset
527
  $input['inset'] = isset( $input['inset'] ) ? 'inset' : '';
528
-
529
  // Validate offset-x
530
  $input['offset-x'] = ot_validate_setting( $input['offset-x'], 'text', $field_id );
531
-
532
  // Validate offset-y
533
  $input['offset-y'] = ot_validate_setting( $input['offset-y'], 'text', $field_id );
534
-
535
  // Validate blur-radius
536
  $input['blur-radius'] = ot_validate_setting( $input['blur-radius'], 'text', $field_id );
537
-
538
  // Validate spread-radius
539
  $input['spread-radius'] = ot_validate_setting( $input['spread-radius'], 'text', $field_id );
540
-
541
  // Validate color
542
  $input['color'] = ot_validate_setting( $input['color'], 'colorpicker', $field_id );
543
-
544
  // Unset keys with empty values.
545
  foreach( $input as $key => $value ) {
546
  if ( empty( $value ) && strlen( $value ) == 0 ) {
547
  unset( $input[$key] );
548
  }
549
  }
550
-
551
  // Set empty array to empty string.
552
  if ( empty( $input ) ) {
553
  $input = '';
554
  }
555
-
556
  } else if ( 'colorpicker' == $type ) {
557
 
558
  /* return empty & set error */
559
  if ( 0 === preg_match( '/^#([a-f0-9]{6}|[a-f0-9]{3})$/i', $input ) && 0 === preg_match( '/^rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9\.]{1,4})\s*\)/i', $input ) ) {
560
-
561
  $input = '';
562
-
563
  add_settings_error( 'option-tree', 'invalid_hex', sprintf( __( 'The %s Colorpicker only allows valid hexadecimal or rgba values.', 'option-tree' ), '<code>' . $field_id . '</code>' ), 'error' );
564
-
565
  }
566
-
567
  } else if ( 'colorpicker-opacity' == $type ) {
568
 
569
  // Not allowed
@@ -575,15 +575,15 @@ if ( ! function_exists( 'ot_validate_setting' ) ) {
575
  $input = ot_validate_setting( $input, 'colorpicker', $field_id );
576
 
577
  } else if ( in_array( $type, array( 'css', 'javascript', 'text', 'textarea', 'textarea-simple' ) ) ) {
578
-
579
  if ( ! current_user_can( 'unfiltered_html' ) && OT_ALLOW_UNFILTERED_HTML == false ) {
580
-
581
  $input = wp_kses_post( $input );
582
-
583
  }
584
-
585
  } else if ( 'dimension' == $type ) {
586
-
587
  // Loop over array and set error keys or unset key from array.
588
  foreach( $input as $key => $value ) {
589
  if ( ! empty( $value ) && ! is_numeric( $value ) && $key !== 'unit' ) {
@@ -596,25 +596,25 @@ if ( ! function_exists( 'ot_validate_setting' ) ) {
596
 
597
  /* return 0 & set error */
598
  if ( isset( $errors ) ) {
599
-
600
  foreach( $errors as $error ) {
601
-
602
  $input[$error] = '0';
603
-
604
  add_settings_error( 'option-tree', 'invalid_dimension_' . $error, sprintf( __( 'The %s input field for %s only allows numeric values.', 'option-tree' ), '<code>' . $error . '</code>', '<code>' . $field_id . '</code>' ), 'error' );
605
-
606
  }
607
-
608
  }
609
-
610
  if ( empty( $input ) ) {
611
  $input = '';
612
  }
613
-
614
  } else if ( 'google-fonts' == $type ) {
615
-
616
  unset($input['%key%']);
617
-
618
  // Loop over array and check for values
619
  if ( is_array( $input ) && ! empty( $input ) ) {
620
  $input = array_values( $input );
@@ -624,9 +624,9 @@ if ( ! function_exists( 'ot_validate_setting' ) ) {
624
  if ( empty( $input ) ) {
625
  $input = '';
626
  }
627
-
628
  } else if ( 'link-color' == $type ) {
629
-
630
  // Loop over array and check for values
631
  if ( is_array( $input ) && ! empty( $input ) ) {
632
  foreach( $input as $key => $value ) {
@@ -636,23 +636,23 @@ if ( ! function_exists( 'ot_validate_setting' ) ) {
636
  }
637
  }
638
  }
639
-
640
  // No value; set to empty
641
  if ( ! isset( $has_value ) ) {
642
  $input = '';
643
  }
644
-
645
  } else if ( 'measurement' == $type ) {
646
-
647
  $input[0] = sanitize_text_field( $input[0] );
648
-
649
  // No value; set to empty
650
  if ( empty( $input[0] ) && strlen( $input[0] ) == 0 && empty( $input[1] ) ) {
651
  $input = '';
652
  }
653
-
654
  } else if ( 'spacing' == $type ) {
655
-
656
  // Loop over array and set error keys or unset key from array.
657
  foreach( $input as $key => $value ) {
658
  if ( ! empty( $value ) && ! is_numeric( $value ) && $key !== 'unit' ) {
@@ -665,49 +665,49 @@ if ( ! function_exists( 'ot_validate_setting' ) ) {
665
 
666
  /* return 0 & set error */
667
  if ( isset( $errors ) ) {
668
-
669
  foreach( $errors as $error ) {
670
-
671
  $input[$error] = '0';
672
-
673
  add_settings_error( 'option-tree', 'invalid_spacing_' . $error, sprintf( __( 'The %s input field for %s only allows numeric values.', 'option-tree' ), '<code>' . $error . '</code>', '<code>' . $field_id . '</code>' ), 'error' );
674
-
675
  }
676
-
677
  }
678
-
679
  if ( empty( $input ) ) {
680
  $input = '';
681
  }
682
-
683
  } else if ( 'typography' == $type && isset( $input['font-color'] ) ) {
684
-
685
  $input['font-color'] = ot_validate_setting( $input['font-color'], 'colorpicker', $field_id );
686
-
687
  // Loop over array and check for values
688
  foreach( $input as $key => $value ) {
689
  if ( ! empty( $value ) ) {
690
  $has_value = true;
691
  }
692
  }
693
-
694
  // No value; set to empty
695
  if ( ! isset( $has_value ) ) {
696
  $input = '';
697
  }
698
-
699
  } else if ( 'upload' == $type ) {
700
 
701
  if( filter_var( $input, FILTER_VALIDATE_INT ) === FALSE ) {
702
  $input = esc_url_raw( $input );
703
  }
704
-
705
  } else if ( 'gallery' == $type ) {
706
 
707
  $input = trim( $input );
708
-
709
  } else if ( 'social-links' == $type ) {
710
-
711
  // Loop over array and check for values, plus sanitize the text field
712
  foreach( (array) $input as $key => $value ) {
713
  if ( ! empty( $value ) && is_array( $value ) ) {
@@ -719,18 +719,18 @@ if ( ! function_exists( 'ot_validate_setting' ) ) {
719
  }
720
  }
721
  }
722
-
723
  // No value; set to empty
724
  if ( ! isset( $has_value ) ) {
725
  $input = '';
726
  }
727
-
728
  }
729
-
730
  $input = apply_filters( 'ot_after_validate_setting', $input, $type, $field_id );
731
-
732
  return $input;
733
-
734
  }
735
 
736
  }
@@ -747,21 +747,21 @@ if ( ! function_exists( 'ot_admin_styles' ) ) {
747
 
748
  function ot_admin_styles() {
749
  global $wp_styles, $post;
750
-
751
  /* execute styles before actions */
752
  do_action( 'ot_admin_styles_before' );
753
-
754
  /* load WP colorpicker */
755
  wp_enqueue_style( 'wp-color-picker' );
756
-
757
  wp_enqueue_style('wp-jquery-ui-dialog');
758
-
759
  /* load admin styles */
760
  wp_enqueue_style( 'ot-admin-css', OT_URL . 'assets/css/ot-admin.css', false, OT_VERSION );
761
-
762
  /* load the RTL stylesheet */
763
  $wp_styles->add_data( 'ot-admin-css','rtl', true );
764
-
765
  /* Remove styles added by the Easy Digital Downloads plugin */
766
  if ( isset( $post->post_type ) && $post->post_type == 'post' )
767
  wp_dequeue_style( 'jquery-ui-css' );
@@ -773,23 +773,23 @@ if ( ! function_exists( 'ot_admin_styles' ) ) {
773
  *
774
  * @param array $screen_ids An array of screen IDs.
775
  */
776
- $screen_ids = apply_filters( 'ot_dequeue_jquery_ui_css_screen_ids', array(
777
- 'toplevel_page_ot-settings',
778
- 'optiontree_page_ot-documentation',
779
- 'appearance_page_niftycs-options'
780
  ) );
781
-
782
  /* Remove styles added by the WP Review plugin and any custom pages added through filtering */
783
  if ( in_array( get_current_screen()->id, $screen_ids ) ) {
784
  wp_dequeue_style( 'plugin_name-admin-ui-css' );
785
  wp_dequeue_style( 'jquery-ui-css' );
786
  }
787
-
788
  /* execute styles after actions */
789
  do_action( 'ot_admin_styles_after' );
790
 
791
  }
792
-
793
  }
794
 
795
  /**
@@ -807,10 +807,10 @@ if ( ! function_exists( 'ot_admin_styles' ) ) {
807
  if ( ! function_exists( 'ot_admin_scripts' ) ) {
808
 
809
  function ot_admin_scripts() {
810
-
811
  /* execute scripts before actions */
812
  do_action( 'ot_admin_scripts_before' );
813
-
814
  if ( function_exists( 'wp_enqueue_media' ) ) {
815
  /* WP 3.5 Media Uploader */
816
  wp_enqueue_media();
@@ -829,7 +829,7 @@ if ( ! function_exists( 'ot_admin_scripts' ) ) {
829
  wp_enqueue_script( 'wp-color-picker' );
830
 
831
  /* load Ace Editor for CSS Editing */
832
- wp_enqueue_script( 'ace-editor', 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.1.3/ace.js', null, '1.1.3' );
833
 
834
  /* load jQuery UI timepicker addon */
835
  wp_enqueue_script( 'jquery-ui-timepicker', OT_URL . 'assets/js/vendor/jquery/jquery-ui-timepicker.js', array( 'jquery', 'jquery-ui-slider', 'jquery-ui-datepicker' ), '1.4.3' );
@@ -841,16 +841,16 @@ if ( ! function_exists( 'ot_admin_scripts' ) ) {
841
 
842
 
843
  /* load all the required scripts */
844
-
845
  wp_enqueue_script('jquery-ui-dialog');
846
  wp_enqueue_script( 'ot-admin-js', OT_URL . 'assets/js/ot-admin.js', array( 'jquery', 'jquery-ui-tabs', 'jquery-ui-sortable', 'jquery-ui-slider', 'wp-color-picker', 'ace-editor', 'jquery-ui-datepicker', 'jquery-ui-timepicker' ), OT_VERSION );
847
 
848
-
849
-
850
 
851
 
852
  /* create localized JS array */
853
- $localized_array = array(
854
  'ajax' => admin_url( 'admin-ajax.php' ),
855
  'nonce' => wp_create_nonce( 'option_tree' ),
856
  'upload_text' => apply_filters( 'ot_upload_text', __( 'Send to OptionTree', 'option-tree' ) ),
@@ -860,9 +860,9 @@ if ( ! function_exists( 'ot_admin_scripts' ) ) {
860
  'remove_agree' => __( 'Are you sure you want to remove this?', 'option-tree' ),
861
  'activate_layout_agree' => __( 'Are you sure you want to activate this layout?', 'option-tree' ),
862
  'setting_limit' => __( 'Sorry, you can\'t have settings three levels deep.', 'option-tree' ),
863
- 'delete' => __( 'Delete Gallery', 'option-tree' ),
864
- 'edit' => __( 'Edit Gallery', 'option-tree' ),
865
- 'create' => __( 'Create Gallery', 'option-tree' ),
866
  'confirm' => __( 'Are you sure you want to delete this Gallery?', 'option-tree' ),
867
  'date_current' => __( 'Today', 'option-tree' ),
868
  'date_time_current' => __( 'Now', 'option-tree' ),
@@ -872,15 +872,15 @@ if ( ! function_exists( 'ot_admin_scripts' ) ) {
872
  'weforms_dialog_upsell_title' => '<img alt="' . __('weForms', 'option-tree') . '" title="' . __('weForms', 'option-tree') . '" src="' . OT_URL . '/assets/images/weforms-logo-white.png' . '">',
873
  'weforms_install_url' => add_query_arg(array('action' => 'install_weforms'), admin_url('admin.php')),
874
  );
875
-
876
  /* localized script attached to 'option_tree' */
877
  wp_localize_script( 'ot-admin-js', 'option_tree', $localized_array );
878
-
879
  /* execute scripts after actions */
880
  do_action( 'ot_admin_scripts_after' );
881
 
882
  }
883
-
884
  }
885
 
886
  /**
@@ -896,28 +896,28 @@ if ( ! function_exists( 'ot_admin_scripts' ) ) {
896
  if ( ! function_exists( 'ot_get_media_post_ID' ) ) {
897
 
898
  function ot_get_media_post_ID() {
899
-
900
  // Option ID
901
  $option_id = 'ot_media_post_ID';
902
-
903
  // Get the media post ID
904
  $post_ID = get_option( $option_id, false );
905
-
906
  // Add $post_ID to the DB
907
  if ( $post_ID === false || empty( $post_ID ) ) {
908
  global $wpdb;
909
-
910
  // Get the media post ID
911
  $post_ID = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE `post_title` = 'Media' AND `post_type` = 'option-tree' AND `post_status` = 'private'" );
912
-
913
  // Add to the DB
914
  if ( $post_ID !== null )
915
  update_option( $option_id, $post_ID );
916
 
917
  }
918
-
919
  return $post_ID;
920
-
921
  }
922
 
923
  }
@@ -933,9 +933,9 @@ if ( ! function_exists( 'ot_get_media_post_ID' ) ) {
933
  * @since 2.0
934
  */
935
  if ( ! function_exists( 'ot_create_media_post' ) ) {
936
-
937
  function ot_create_media_post() {
938
-
939
  $regsiter_post_type = 'register_' . 'post_type';
940
  $regsiter_post_type( 'option-tree', array(
941
  'labels' => array( 'name' => __( 'Nifty options', 'option-tree' ) ),
@@ -949,13 +949,13 @@ if ( ! function_exists( 'ot_create_media_post' ) ) {
949
  'can_export' => false,
950
  'show_in_nav_menus' => false
951
  ) );
952
-
953
  /* look for custom page */
954
  $post_id = ot_get_media_post_ID();
955
-
956
  /* no post exists */
957
  if ( $post_id == 0 ) {
958
-
959
  /* create post object */
960
  $_p = array();
961
  $_p['post_title'] = 'Media';
@@ -964,12 +964,12 @@ if ( ! function_exists( 'ot_create_media_post' ) ) {
964
  $_p['post_type'] = 'option-tree';
965
  $_p['comment_status'] = 'closed';
966
  $_p['ping_status'] = 'closed';
967
-
968
  /* insert the post into the database */
969
  wp_insert_post( $_p );
970
-
971
  }
972
-
973
  }
974
 
975
  }
@@ -986,33 +986,33 @@ if ( ! function_exists( 'ot_default_settings' ) ) {
986
 
987
  function ot_default_settings() {
988
  global $wpdb;
989
-
990
  if ( ! get_option( ot_settings_id() ) ) {
991
-
992
  $section_count = 0;
993
  $settings_count = 0;
994
  $settings = array();
995
  $table_name = $wpdb->prefix . 'option_tree';
996
-
997
  if ( $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE %s", $table_name ) ) == $table_name && $old_settings = $wpdb->get_results( "SELECT * FROM $table_name ORDER BY item_sort ASC" ) ) {
998
-
999
  foreach ( $old_settings as $setting ) {
1000
-
1001
  /* heading is a section now */
1002
  if ( $setting->item_type == 'heading' ) {
1003
-
1004
  /* add section to the sections array */
1005
  $settings['sections'][$section_count]['id'] = $setting->item_id;
1006
  $settings['sections'][$section_count]['title'] = $setting->item_title;
1007
-
1008
  /* save the last section id to use in creating settings */
1009
  $section = $setting->item_id;
1010
-
1011
  /* increment the section count */
1012
  $section_count++;
1013
-
1014
  } else {
1015
-
1016
  /* add setting to the settings array */
1017
  $settings['settings'][$settings_count]['id'] = $setting->item_id;
1018
  $settings['settings'][$settings_count]['label'] = $setting->item_title;
@@ -1021,7 +1021,7 @@ if ( ! function_exists( 'ot_default_settings' ) ) {
1021
  $settings['settings'][$settings_count]['type'] = ot_map_old_option_types( $setting->item_type );
1022
  $settings['settings'][$settings_count]['std'] = '';
1023
  $settings['settings'][$settings_count]['class'] = '';
1024
-
1025
  /* textarea rows */
1026
  $rows = '';
1027
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'css', 'javascript', 'textarea' ) ) ) {
@@ -1032,7 +1032,7 @@ if ( ! function_exists( 'ot_default_settings' ) ) {
1032
  }
1033
  }
1034
  $settings['settings'][$settings_count]['rows'] = $rows;
1035
-
1036
  /* post type */
1037
  $post_type = '';
1038
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'custom-post-type-select', 'custom-post-type-checkbox' ) ) ) {
@@ -1043,7 +1043,7 @@ if ( ! function_exists( 'ot_default_settings' ) ) {
1043
  }
1044
  }
1045
  $settings['settings'][$settings_count]['post_type'] = $post_type;
1046
-
1047
  /* choices */
1048
  $choices = array();
1049
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'checkbox', 'radio', 'select' ) ) ) {
@@ -1052,12 +1052,12 @@ if ( ! function_exists( 'ot_default_settings' ) ) {
1052
  }
1053
  }
1054
  $settings['settings'][$settings_count]['choices'] = $choices;
1055
-
1056
  $settings_count++;
1057
  }
1058
-
1059
  }
1060
-
1061
  /* make sure each setting has a section just incase */
1062
  if ( isset( $settings['sections'] ) && isset( $settings['settings'] ) ) {
1063
  foreach( $settings['settings'] as $k => $setting ) {
@@ -1066,12 +1066,12 @@ if ( ! function_exists( 'ot_default_settings' ) ) {
1066
  }
1067
  }
1068
  }
1069
-
1070
  }
1071
-
1072
  /* if array if not properly formed create fallback settings array */
1073
  if ( ! isset( $settings['sections'] ) || ! isset( $settings['settings'] ) ) {
1074
-
1075
  $settings = array(
1076
  'sections' => array(
1077
  array(
@@ -1094,40 +1094,40 @@ if ( ! function_exists( 'ot_default_settings' ) ) {
1094
  )
1095
  )
1096
  );
1097
-
1098
  }
1099
-
1100
  /* update the settings array */
1101
  update_option( ot_settings_id(), $settings );
1102
-
1103
  /* get option tree array */
1104
  $options = get_option( ot_options_id() );
1105
-
1106
  /* validate options */
1107
  if ( is_array( $options ) ) {
1108
 
1109
  foreach( $settings['settings'] as $setting ) {
1110
-
1111
  if ( isset( $options[$setting['id']] ) ) {
1112
-
1113
  $content = ot_stripslashes( $options[$setting['id']] );
1114
-
1115
  $options[$setting['id']] = ot_validate_setting( $content, $setting['type'], $setting['id'] );
1116
-
1117
  }
1118
-
1119
  }
1120
-
1121
  /* execute the action hook and pass the theme options to it */
1122
  do_action( 'ot_before_theme_options_save', $options );
1123
-
1124
  /* update the option tree array */
1125
  update_option( ot_options_id(), $options );
1126
-
1127
  }
1128
-
1129
  }
1130
-
1131
  }
1132
 
1133
  }
@@ -1143,41 +1143,41 @@ if ( ! function_exists( 'ot_default_settings' ) ) {
1143
  if ( ! function_exists( 'ot_save_css' ) ) {
1144
 
1145
  function ot_save_css( $options ) {
1146
-
1147
  /* grab a copy of the settings */
1148
  $settings = get_option( ot_settings_id() );
1149
-
1150
  /* has settings */
1151
  if ( isset( $settings['settings'] ) ) {
1152
-
1153
  /* loop through sections and insert CSS when needed */
1154
  foreach( $settings['settings'] as $k => $setting ) {
1155
-
1156
  /* is the CSS option type */
1157
  if ( isset( $setting['type'] ) && 'css' == $setting['type'] ) {
1158
 
1159
  /* insert CSS into dynamic.css */
1160
  if ( isset( $options[$setting['id']] ) && '' !== $options[$setting['id']] ) {
1161
-
1162
  ot_insert_css_with_markers( $setting['id'], $options[$setting['id']] );
1163
-
1164
  /* remove old CSS from dynamic.css */
1165
  } else {
1166
-
1167
  ot_remove_old_css( $setting['id'] );
1168
-
1169
  }
1170
-
1171
  }
1172
-
1173
  }
1174
-
1175
  }
1176
-
1177
  }
1178
 
1179
  }
1180
-
1181
  /**
1182
  * Helper function to load filters for XML mime type.
1183
  *
@@ -1189,16 +1189,16 @@ if ( ! function_exists( 'ot_save_css' ) ) {
1189
  if ( ! function_exists( 'ot_add_xml_to_upload_filetypes' ) ) {
1190
 
1191
  function ot_add_xml_to_upload_filetypes() {
1192
-
1193
  add_filter( 'upload_mimes', 'ot_upload_mimes' );
1194
  add_filter( 'wp_mime_type_icon', 'ot_xml_mime_type_icon', 10, 2 );
1195
-
1196
  }
1197
 
1198
  }
1199
 
1200
  /**
1201
- * Filter 'upload_mimes' and add xml.
1202
  *
1203
  * @param array $mimes An array of valid upload mime types
1204
  * @return array
@@ -1209,11 +1209,11 @@ if ( ! function_exists( 'ot_add_xml_to_upload_filetypes' ) ) {
1209
  if ( ! function_exists( 'ot_upload_mimes' ) ) {
1210
 
1211
  function ot_upload_mimes( $mimes ) {
1212
-
1213
  $mimes['xml'] = 'application/xml';
1214
-
1215
  return $mimes;
1216
-
1217
  }
1218
 
1219
  }
@@ -1231,12 +1231,12 @@ if ( ! function_exists( 'ot_upload_mimes' ) ) {
1231
  if ( ! function_exists( 'ot_xml_mime_type_icon' ) ) {
1232
 
1233
  function ot_xml_mime_type_icon( $icon, $mime ) {
1234
-
1235
  if ( $mime == 'application/xml' || $mime == 'text/xml' )
1236
  return wp_mime_type_icon( 'document' );
1237
-
1238
  return $icon;
1239
-
1240
  }
1241
 
1242
  }
@@ -1252,188 +1252,188 @@ if ( ! function_exists( 'ot_xml_mime_type_icon' ) ) {
1252
  if ( ! function_exists( 'ot_import' ) ) {
1253
 
1254
  function ot_import() {
1255
-
1256
  /* check and verify import xml nonce */
1257
  if ( isset( $_POST['import_xml_nonce'] ) && wp_verify_nonce( $_POST['import_xml_nonce'], 'import_xml_form' ) ) {
1258
 
1259
  /* import input value */
1260
  $file = isset( $_POST['import_xml'] ) ? esc_url( $_POST['import_xml'] ) : '';
1261
-
1262
  /* validate xml file */
1263
  if ( preg_match( "/(.xml)$/i", $file ) && class_exists( 'SimpleXMLElement' ) ) {
1264
-
1265
  $settings = ot_import_xml( $file );
1266
-
1267
  }
1268
-
1269
  /* default message */
1270
  $message = 'failed';
1271
-
1272
  /* cleanup, save, & show success message */
1273
  if ( isset( $settings ) && ! empty( $settings ) ) {
1274
-
1275
  /* delete file */
1276
  if ( $file ) {
1277
  global $wpdb;
1278
  $attachmentid = $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} WHERE guid='$file'" );
1279
  wp_delete_attachment( $attachmentid, true );
1280
  }
1281
-
1282
  /* update settings */
1283
  update_option( ot_settings_id(), $settings );
1284
-
1285
  /* set message */
1286
  $message = 'success';
1287
-
1288
  }
1289
-
1290
  /* redirect */
1291
- wp_redirect( esc_url_raw( add_query_arg( array( 'action' => 'import-xml', 'message' => $message ), $_POST['_wp_http_referer'] ) ) );
1292
  exit;
1293
-
1294
  }
1295
-
1296
  /* check and verify import settings nonce */
1297
  if ( isset( $_POST['import_settings_nonce'] ) && wp_verify_nonce( $_POST['import_settings_nonce'], 'import_settings_form' ) ) {
1298
 
1299
  /* textarea value */
1300
  $textarea = isset( $_POST['import_settings'] ) ? unserialize( ot_decode( $_POST['import_settings'] ) ) : '';
1301
-
1302
  /* default message */
1303
  $message = 'failed';
1304
-
1305
  /* is array: save & show success message */
1306
  if ( is_array( $textarea ) ) {
1307
  update_option( ot_settings_id(), $textarea );
1308
  $message = 'success';
1309
  }
1310
-
1311
  /* redirect */
1312
- wp_redirect( esc_url_raw( add_query_arg( array( 'action' => 'import-settings', 'message' => $message ), $_POST['_wp_http_referer'] ) ) );
1313
  exit;
1314
-
1315
  }
1316
-
1317
  /* check and verify import theme options data nonce */
1318
  if ( isset( $_POST['import_data_nonce'] ) && wp_verify_nonce( $_POST['import_data_nonce'], 'import_data_form' ) ) {
1319
-
1320
  /* default message */
1321
  $message = 'failed';
1322
-
1323
  /* textarea value */
1324
  $options = isset( $_POST['import_data'] ) ? unserialize( ot_decode( $_POST['import_data'] ) ) : '';
1325
-
1326
  /* get settings array */
1327
  $settings = get_option( ot_settings_id() );
1328
-
1329
  /* has options */
1330
  if ( is_array( $options ) ) {
1331
-
1332
  /* validate options */
1333
  if ( is_array( $settings ) ) {
1334
-
1335
  foreach( $settings['settings'] as $setting ) {
1336
-
1337
  if ( isset( $options[$setting['id']] ) ) {
1338
-
1339
  $content = ot_stripslashes( $options[$setting['id']] );
1340
-
1341
  $options[$setting['id']] = ot_validate_setting( $content, $setting['type'], $setting['id'] );
1342
-
1343
  }
1344
-
1345
  }
1346
-
1347
  }
1348
-
1349
  /* execute the action hook and pass the theme options to it */
1350
  do_action( 'ot_before_theme_options_save', $options );
1351
-
1352
  /* update the option tree array */
1353
  update_option( ot_options_id(), $options );
1354
-
1355
  $message = 'success';
1356
-
1357
  }
1358
-
1359
  /* redirect accordingly */
1360
- wp_redirect( esc_url_raw( add_query_arg( array( 'action' => 'import-data', 'message' => $message ), $_POST['_wp_http_referer'] ) ) );
1361
  exit;
1362
-
1363
  }
1364
-
1365
  /* check and verify import layouts nonce */
1366
  if ( isset( $_POST['import_layouts_nonce'] ) && wp_verify_nonce( $_POST['import_layouts_nonce'], 'import_layouts_form' ) ) {
1367
-
1368
  /* default message */
1369
  $message = 'failed';
1370
-
1371
  /* textarea value */
1372
  $layouts = isset( $_POST['import_layouts'] ) ? unserialize( ot_decode( $_POST['import_layouts'] ) ) : '';
1373
-
1374
  /* get settings array */
1375
  $settings = get_option( ot_settings_id() );
1376
-
1377
  /* has layouts */
1378
  if ( is_array( $layouts ) ) {
1379
-
1380
  /* validate options */
1381
  if ( is_array( $settings ) ) {
1382
-
1383
  foreach( $layouts as $key => $value ) {
1384
-
1385
  if ( $key == 'active_layout' )
1386
  continue;
1387
-
1388
  $options = unserialize( ot_decode( $value ) );
1389
-
1390
  foreach( $settings['settings'] as $setting ) {
1391
 
1392
  if ( isset( $options[$setting['id']] ) ) {
1393
-
1394
  $content = ot_stripslashes( $options[$setting['id']] );
1395
-
1396
  $options[$setting['id']] = ot_validate_setting( $content, $setting['type'], $setting['id'] );
1397
-
1398
  }
1399
-
1400
  }
1401
 
1402
  $layouts[$key] = ot_encode( serialize( $options ) );
1403
-
1404
  }
1405
-
1406
  }
1407
-
1408
  /* update the option tree array */
1409
  if ( isset( $layouts['active_layout'] ) ) {
1410
-
1411
  $new_options = unserialize( ot_decode( $layouts[$layouts['active_layout']] ) );
1412
-
1413
  /* execute the action hook and pass the theme options to it */
1414
  do_action( 'ot_before_theme_options_save', $new_options );
1415
-
1416
  update_option( ot_options_id(), $new_options );
1417
-
1418
  }
1419
-
1420
  /* update the option tree layouts array */
1421
  update_option( ot_layouts_id(), $layouts );
1422
-
1423
  $message = 'success';
1424
-
1425
  }
1426
-
1427
  /* redirect accordingly */
1428
- wp_redirect( esc_url_raw( add_query_arg( array( 'action' => 'import-layouts', 'message' => $message ), $_POST['_wp_http_referer'] ) ) );
1429
  exit;
1430
-
1431
  }
1432
-
1433
  return false;
1434
 
1435
  }
1436
-
1437
  }
1438
 
1439
  /**
@@ -1447,16 +1447,16 @@ if ( ! function_exists( 'ot_import' ) ) {
1447
  if ( ! function_exists( 'ot_export' ) ) {
1448
 
1449
  function ot_export() {
1450
-
1451
  /* check and verify export settings file nonce */
1452
  if ( isset( $_POST['export_settings_file_nonce'] ) && wp_verify_nonce( $_POST['export_settings_file_nonce'], 'export_settings_file_form' ) ) {
1453
 
1454
  ot_export_php_settings_array();
1455
-
1456
  }
1457
-
1458
  }
1459
-
1460
  }
1461
 
1462
  /**
@@ -1471,41 +1471,41 @@ if ( ! function_exists( 'ot_export' ) ) {
1471
  if ( ! function_exists( 'ot_import_xml' ) ) {
1472
 
1473
  function ot_import_xml( $file ) {
1474
-
1475
  $get_data = wp_remote_get( $file );
1476
-
1477
  if ( is_wp_error( $get_data ) )
1478
  return false;
1479
-
1480
  $rawdata = isset( $get_data['body'] ) ? $get_data['body'] : false;
1481
 
1482
  if ( $rawdata ) {
1483
-
1484
  $section_count = 0;
1485
  $settings_count = 0;
1486
-
1487
  $section = '';
1488
-
1489
  $settings = array();
1490
  $xml = new SimpleXMLElement( $rawdata );
1491
-
1492
  foreach ( $xml->row as $value ) {
1493
-
1494
  /* heading is a section now */
1495
  if ( $value->item_type == 'heading' ) {
1496
-
1497
  /* add section to the sections array */
1498
  $settings['sections'][$section_count]['id'] = (string) $value->item_id;
1499
  $settings['sections'][$section_count]['title'] = (string) $value->item_title;
1500
-
1501
  /* save the last section id to use in creating settings */
1502
  $section = (string) $value->item_id;
1503
-
1504
  /* increment the section count */
1505
  $section_count++;
1506
-
1507
  } else {
1508
-
1509
  /* add setting to the settings array */
1510
  $settings['settings'][$settings_count]['id'] = (string) $value->item_id;
1511
  $settings['settings'][$settings_count]['label'] = (string) $value->item_title;
@@ -1514,7 +1514,7 @@ if ( ! function_exists( 'ot_import_xml' ) ) {
1514
  $settings['settings'][$settings_count]['type'] = ot_map_old_option_types( (string) $value->item_type );
1515
  $settings['settings'][$settings_count]['std'] = '';
1516
  $settings['settings'][$settings_count]['class'] = '';
1517
-
1518
  /* textarea rows */
1519
  $rows = '';
1520
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'css', 'javascript', 'textarea' ) ) ) {
@@ -1525,7 +1525,7 @@ if ( ! function_exists( 'ot_import_xml' ) ) {
1525
  }
1526
  }
1527
  $settings['settings'][$settings_count]['rows'] = $rows;
1528
-
1529
  /* post type */
1530
  $post_type = '';
1531
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'custom-post-type-select', 'custom-post-type-checkbox' ) ) ) {
@@ -1536,7 +1536,7 @@ if ( ! function_exists( 'ot_import_xml' ) ) {
1536
  }
1537
  }
1538
  $settings['settings'][$settings_count]['post_type'] = $post_type;
1539
-
1540
  /* choices */
1541
  $choices = array();
1542
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'checkbox', 'radio', 'select' ) ) ) {
@@ -1545,12 +1545,12 @@ if ( ! function_exists( 'ot_import_xml' ) ) {
1545
  }
1546
  }
1547
  $settings['settings'][$settings_count]['choices'] = $choices;
1548
-
1549
  $settings_count++;
1550
  }
1551
-
1552
  }
1553
-
1554
  /* make sure each setting has a section just incase */
1555
  if ( isset( $settings['sections'] ) && isset( $settings['settings'] ) ) {
1556
  foreach( $settings['settings'] as $k => $setting ) {
@@ -1559,11 +1559,11 @@ if ( ! function_exists( 'ot_import_xml' ) ) {
1559
  }
1560
  }
1561
  }
1562
-
1563
  return $settings;
1564
-
1565
  }
1566
-
1567
  return false;
1568
  }
1569
 
@@ -1580,14 +1580,14 @@ if ( ! function_exists( 'ot_import_xml' ) ) {
1580
  if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1581
 
1582
  function ot_export_php_settings_array() {
1583
-
1584
  $content = '';
1585
  $build_settings = '';
1586
  $contextual_help = '';
1587
  $sections = '';
1588
  $settings = '';
1589
  $option_tree_settings = get_option( ot_settings_id(), array() );
1590
-
1591
  // Domain string helper
1592
  function ot_I18n_string( $string ) {
1593
  if ( ! empty( $string ) && isset( $_POST['domain'] ) && ! empty( $_POST['domain'] ) ) {
@@ -1596,14 +1596,14 @@ if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1596
  }
1597
  return "'$string'";
1598
  }
1599
-
1600
  header( "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
1601
  header( "Pragma: no-cache ");
1602
  header( "Content-Description: File Transfer" );
1603
  header( 'Content-Disposition: attachment; filename="theme-options.php"');
1604
  header( "Content-Type: application/octet-stream");
1605
  header( "Content-Transfer-Encoding: binary" );
1606
-
1607
  /* build contextual help content */
1608
  if ( isset( $option_tree_settings['contextual_help']['content'] ) ) {
1609
  $help = '';
@@ -1623,20 +1623,20 @@ if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1623
  'content' => array( $help
1624
  ),";
1625
  }
1626
-
1627
  /* build contextual help sidebar */
1628
  if ( isset( $option_tree_settings['contextual_help']['sidebar'] ) ) {
1629
  $contextual_help.= "
1630
  'sidebar' => " . ot_I18n_string( html_entity_decode( str_replace( "'", "\'", $option_tree_settings['contextual_help']['sidebar'] ) ) );
1631
  }
1632
-
1633
  /* check that $contexual_help has a value and add to $build_settings */
1634
  if ( '' != $contextual_help ) {
1635
  $build_settings.= "
1636
  'contextual_help' => array( $contextual_help
1637
  ),";
1638
  }
1639
-
1640
  /* build sections */
1641
  if ( isset( $option_tree_settings['sections'] ) ) {
1642
  foreach( $option_tree_settings['sections'] as $value ) {
@@ -1650,14 +1650,14 @@ if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1650
  }
1651
  $sections = substr_replace( $sections, '' , -1 );
1652
  }
1653
-
1654
  /* check that $sections has a value and add to $build_settings */
1655
  if ( '' != $sections ) {
1656
  $build_settings.= "
1657
  'sections' => array( $sections
1658
  )";
1659
  }
1660
-
1661
  /* build settings */
1662
  if ( isset( $option_tree_settings['settings'] ) ) {
1663
  foreach( $option_tree_settings['settings'] as $value ) {
@@ -1674,7 +1674,7 @@ if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1674
  $_class = isset( $value['class'] ) ? $value['class'] : '';
1675
  $_condition = isset( $value['condition'] ) ? $value['condition'] : '';
1676
  $_operator = isset( $value['operator'] ) ? $value['operator'] : '';
1677
-
1678
  $choices = '';
1679
  if ( isset( $value['choices'] ) && ! empty( $value['choices'] ) ) {
1680
  foreach( $value['choices'] as $choice ) {
@@ -1693,7 +1693,7 @@ if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1693
  'choices' => array( $choices
1694
  )";
1695
  }
1696
-
1697
  $std = "'$_std'";
1698
  if ( is_array( $_std ) ) {
1699
  $std_array = array();
@@ -1704,7 +1704,7 @@ if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1704
  ' . implode( ",\n", $std_array ) . '
1705
  )';
1706
  }
1707
-
1708
  $setting_settings = '';
1709
  if ( isset( $value['settings'] ) && ! empty( $value['settings'] ) ) {
1710
  foreach( $value['settings'] as $setting ) {
@@ -1720,7 +1720,7 @@ if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1720
  $_setting_class = isset( $setting['class'] ) ? $setting['class'] : '';
1721
  $_setting_condition = isset( $setting['condition'] ) ? $setting['condition'] : '';
1722
  $_setting_operator = isset( $setting['operator'] ) ? $setting['operator'] : '';
1723
-
1724
  $setting_choices = '';
1725
  if ( isset( $setting['choices'] ) && ! empty( $setting['choices'] ) ) {
1726
  foreach( $setting['choices'] as $setting_choice ) {
@@ -1739,7 +1739,7 @@ if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1739
  'choices' => array( $setting_choices
1740
  )";
1741
  }
1742
-
1743
  $setting_std = "'$_setting_std'";
1744
  if ( is_array( $_setting_std ) ) {
1745
  $setting_std_array = array();
@@ -1750,7 +1750,7 @@ if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1750
  ' . implode( ",\n", $setting_std_array ) . '
1751
  )';
1752
  }
1753
-
1754
  $setting_settings.= "
1755
  array(
1756
  'id' => '$_setting_id',
@@ -1772,7 +1772,7 @@ if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1772
  'settings' => array( $setting_settings
1773
  )";
1774
  }
1775
-
1776
  $settings.= "
1777
  array(
1778
  'id' => '$_id',
@@ -1792,14 +1792,14 @@ if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1792
  }
1793
  $settings = substr_replace( $settings, '' , -1 );
1794
  }
1795
-
1796
  /* check that $sections has a value and add to $build_settings */
1797
  if ( '' != $settings ) {
1798
  $build_settings.= ",
1799
  'settings' => array( $settings
1800
  )";
1801
  }
1802
-
1803
  $content.= "<?php
1804
  /**
1805
  * Initialize the custom theme options.
@@ -1810,35 +1810,35 @@ add_action( 'init', 'custom_theme_options' );
1810
  * Build the custom settings & update OptionTree.
1811
  */
1812
  function custom_theme_options() {
1813
-
1814
  /* OptionTree is not loaded yet, or this is not an admin request */
1815
  if ( ! function_exists( 'ot_settings_id' ) || ! is_admin() )
1816
  return false;
1817
-
1818
  /**
1819
- * Get a copy of the saved settings array.
1820
  */
1821
  \$saved_settings = get_option( ot_settings_id(), array() );
1822
-
1823
  /**
1824
- * Custom settings array that will eventually be
1825
  * passes to the OptionTree Settings API Class.
1826
  */
1827
  \$custom_settings = array( $build_settings
1828
  );
1829
-
1830
  /* allow settings to be filtered before saving */
1831
  \$custom_settings = apply_filters( ot_settings_id() . '_args', \$custom_settings );
1832
-
1833
  /* settings are not the same update the DB */
1834
  if ( \$saved_settings !== \$custom_settings ) {
1835
- update_option( ot_settings_id(), \$custom_settings );
1836
  }
1837
-
1838
  /* Lets OptionTree know the UI Builder is being overridden */
1839
  global \$ot_has_custom_theme_options;
1840
  \$ot_has_custom_theme_options = true;
1841
-
1842
  }";
1843
 
1844
  echo $content;
@@ -1864,191 +1864,191 @@ if ( ! function_exists( 'ot_save_settings' ) ) {
1864
 
1865
  /* settings value */
1866
  $settings = isset( $_POST[ot_settings_id()] ) ? $_POST[ot_settings_id()] : '';
1867
-
1868
  /* validate sections */
1869
  if ( isset( $settings['sections'] ) ) {
1870
-
1871
  /* fix numeric keys since drag & drop will change them */
1872
  $settings['sections'] = array_values( $settings['sections'] );
1873
-
1874
  /* loop through sections */
1875
  foreach( $settings['sections'] as $k => $section ) {
1876
-
1877
  /* remove from array if missing values */
1878
  if ( ( ! isset( $section['title'] ) && ! isset( $section['id'] ) ) || ( '' == $section['title'] && '' == $section['id'] ) ) {
1879
-
1880
  unset( $settings['sections'][$k] );
1881
-
1882
  } else {
1883
-
1884
  /* validate label */
1885
  if ( '' != $section['title'] ) {
1886
-
1887
  $settings['sections'][$k]['title'] = wp_kses_post( $section['title'] );
1888
-
1889
  }
1890
-
1891
  /* missing title set to unfiltered ID */
1892
  if ( ! isset( $section['title'] ) || '' == $section['title'] ) {
1893
-
1894
  $settings['sections'][$k]['title'] = wp_kses_post( $section['id'] );
1895
-
1896
- /* missing ID set to title */
1897
  } else if ( ! isset( $section['id'] ) || '' == $section['id'] ) {
1898
-
1899
  $section['id'] = wp_kses_post( $section['title'] );
1900
-
1901
  }
1902
-
1903
  /* sanitize ID once everything has been checked first */
1904
  $settings['sections'][$k]['id'] = ot_sanitize_option_id( wp_kses_post( $section['id'] ) );
1905
-
1906
  }
1907
-
1908
  }
1909
-
1910
  $settings['sections'] = ot_stripslashes( $settings['sections'] );
1911
-
1912
  }
1913
-
1914
  /* validate settings by looping over array as many times as it takes */
1915
  if ( isset( $settings['settings'] ) ) {
1916
-
1917
  $settings['settings'] = ot_validate_settings_array( $settings['settings'] );
1918
-
1919
  }
1920
-
1921
  /* validate contextual_help */
1922
  if ( isset( $settings['contextual_help']['content'] ) ) {
1923
-
1924
  /* fix numeric keys since drag & drop will change them */
1925
  $settings['contextual_help']['content'] = array_values( $settings['contextual_help']['content'] );
1926
-
1927
  /* loop through content */
1928
  foreach( $settings['contextual_help']['content'] as $k => $content ) {
1929
-
1930
  /* remove from array if missing values */
1931
  if ( ( ! isset( $content['title'] ) && ! isset( $content['id'] ) ) || ( '' == $content['title'] && '' == $content['id'] ) ) {
1932
-
1933
  unset( $settings['contextual_help']['content'][$k] );
1934
-
1935
  } else {
1936
-
1937
  /* validate label */
1938
  if ( '' != $content['title'] ) {
1939
-
1940
  $settings['contextual_help']['content'][$k]['title'] = wp_kses_post( $content['title'] );
1941
-
1942
  }
1943
-
1944
  /* missing title set to unfiltered ID */
1945
  if ( ! isset( $content['title'] ) || '' == $content['title'] ) {
1946
-
1947
  $settings['contextual_help']['content'][$k]['title'] = wp_kses_post( $content['id'] );
1948
-
1949
- /* missing ID set to title */
1950
  } else if ( ! isset( $content['id'] ) || '' == $content['id'] ) {
1951
-
1952
  $content['id'] = wp_kses_post( $content['title'] );
1953
-
1954
  }
1955
-
1956
  /* sanitize ID once everything has been checked first */
1957
  $settings['contextual_help']['content'][$k]['id'] = ot_sanitize_option_id( wp_kses_post( $content['id'] ) );
1958
-
1959
  }
1960
-
1961
  /* validate textarea description */
1962
  if ( isset( $content['content'] ) ) {
1963
-
1964
  $settings['contextual_help']['content'][$k]['content'] = wp_kses_post( $content['content'] );
1965
-
1966
  }
1967
-
1968
  }
1969
-
1970
  }
1971
-
1972
  /* validate contextual_help sidebar */
1973
  if ( isset( $settings['contextual_help']['sidebar'] ) ) {
1974
-
1975
  $settings['contextual_help']['sidebar'] = wp_kses_post( $settings['contextual_help']['sidebar'] );
1976
-
1977
  }
1978
-
1979
  $settings['contextual_help'] = ot_stripslashes( $settings['contextual_help'] );
1980
-
1981
  /* default message */
1982
  $message = 'failed';
1983
-
1984
  /* is array: save & show success message */
1985
  if ( is_array( $settings ) ) {
1986
-
1987
  /* WPML unregister ID's that have been removed */
1988
  if ( function_exists( 'icl_unregister_string' ) ) {
1989
-
1990
  $current = get_option( ot_settings_id() );
1991
  $options = get_option( ot_options_id() );
1992
-
1993
  if ( isset( $current['settings'] ) ) {
1994
-
1995
  /* Empty ID array */
1996
  $new_ids = array();
1997
-
1998
  /* Build the WPML IDs array */
1999
  foreach( $settings['settings'] as $setting ) {
2000
-
2001
  if ( $setting['id'] ) {
2002
-
2003
  $new_ids[] = $setting['id'];
2004
 
2005
  }
2006
-
2007
  }
2008
-
2009
  /* Remove missing IDs from WPML */
2010
  foreach( $current['settings'] as $current_setting ) {
2011
-
2012
  if ( ! in_array( $current_setting['id'], $new_ids ) ) {
2013
-
2014
  if ( ! empty( $options[$current_setting['id']] ) && in_array( $current_setting['type'], array( 'list-item', 'slider' ) ) ) {
2015
-
2016
  foreach( $options[$current_setting['id']] as $key => $value ) {
2017
-
2018
  foreach( $value as $ckey => $cvalue ) {
2019
-
2020
  ot_wpml_unregister_string( $current_setting['id'] . '_' . $ckey . '_' . $key );
2021
-
2022
  }
2023
-
2024
  }
2025
-
2026
  } else if ( ! empty( $options[$current_setting['id']] ) && $current_setting['type'] == 'social-icons' ) {
2027
-
2028
  foreach( $options[$current_setting['id']] as $key => $value ) {
2029
-
2030
  foreach( $value as $ckey => $cvalue ) {
2031
-
2032
  ot_wpml_unregister_string( $current_setting['id'] . '_' . $ckey . '_' . $key );
2033
-
2034
  }
2035
-
2036
  }
2037
-
2038
  } else {
2039
-
2040
  ot_wpml_unregister_string( $current_setting['id'] );
2041
-
2042
  }
2043
-
2044
  }
2045
-
2046
  }
2047
 
2048
  }
2049
-
2050
  }
2051
-
2052
  update_option( ot_settings_id(), $settings );
2053
  $message = 'success';
2054
 
@@ -2073,23 +2073,23 @@ if ( ! function_exists( 'ot_save_settings' ) ) {
2073
  Swift_Performance_Cache::clear_all_cache();
2074
  }
2075
  }
2076
-
2077
  /* redirect */
2078
- wp_redirect( esc_url_raw( add_query_arg( array( 'action' => 'save-settings', 'message' => $message ), $_POST['_wp_http_referer'] ) ) );
2079
  exit;
2080
-
2081
  }
2082
-
2083
  return false;
2084
 
2085
  }
2086
-
2087
  }
2088
 
2089
  /**
2090
  * Validate the settings array before save.
2091
  *
2092
- * This function will loop over the settings array as many
2093
  * times as it takes to validate every sub setting.
2094
  *
2095
  * @param array $settings The array of settings.
@@ -2101,103 +2101,103 @@ if ( ! function_exists( 'ot_save_settings' ) ) {
2101
  if ( ! function_exists( 'ot_validate_settings_array' ) ) {
2102
 
2103
  function ot_validate_settings_array( $settings = array() ) {
2104
-
2105
  /* validate settings */
2106
  if ( count( $settings ) > 0 ) {
2107
-
2108
  /* fix numeric keys since drag & drop will change them */
2109
  $settings = array_values( $settings );
2110
-
2111
  /* loop through settings */
2112
  foreach( $settings as $k => $setting ) {
2113
-
2114
-
2115
  /* remove from array if missing values */
2116
  if ( ( ! isset( $setting['label'] ) && ! isset( $setting['id'] ) ) || ( '' == $setting['label'] && '' == $setting['id'] ) ) {
2117
-
2118
  unset( $settings[$k] );
2119
-
2120
  } else {
2121
-
2122
  /* validate label */
2123
  if ( '' != $setting['label'] ) {
2124
-
2125
  $settings[$k]['label'] = wp_kses_post( $setting['label'] );
2126
-
2127
  }
2128
-
2129
  /* missing label set to unfiltered ID */
2130
  if ( ! isset( $setting['label'] ) || '' == $setting['label'] ) {
2131
-
2132
  $settings[$k]['label'] = $setting['id'];
2133
-
2134
- /* missing ID set to label */
2135
  } else if ( ! isset( $setting['id'] ) || '' == $setting['id'] ) {
2136
-
2137
  $setting['id'] = wp_kses_post( $setting['label'] );
2138
-
2139
  }
2140
-
2141
  /* sanitize ID once everything has been checked first */
2142
  $settings[$k]['id'] = ot_sanitize_option_id( wp_kses_post( $setting['id'] ) );
2143
-
2144
  }
2145
-
2146
  /* validate description */
2147
  if ( '' != $setting['desc'] ) {
2148
-
2149
  $settings[$k]['desc'] = wp_kses_post( $setting['desc'] );
2150
-
2151
  }
2152
-
2153
  /* validate choices */
2154
  if ( isset( $setting['choices'] ) ) {
2155
-
2156
  /* loop through choices */
2157
  foreach( $setting['choices'] as $ck => $choice ) {
2158
-
2159
  /* remove from array if missing values */
2160
  if ( ( ! isset( $choice['label'] ) && ! isset( $choice['value'] ) ) || ( '' == $choice['label'] && '' == $choice['value'] ) ) {
2161
-
2162
  unset( $setting['choices'][$ck] );
2163
-
2164
  } else {
2165
-
2166
  /* missing label set to unfiltered ID */
2167
  if ( ! isset( $choice['label'] ) || '' == $choice['label'] ) {
2168
-
2169
  $setting['choices'][$ck]['label'] = wp_kses_post( $choice['value'] );
2170
-
2171
- /* missing value set to label */
2172
  } else if ( ! isset( $choice['value'] ) || '' == $choice['value'] ) {
2173
-
2174
  $setting['choices'][$ck]['value'] = ot_sanitize_option_id( wp_kses_post( $choice['label'] ) );
2175
-
2176
  }
2177
-
2178
  }
2179
-
2180
  }
2181
-
2182
  /* update keys and push new array values */
2183
  $settings[$k]['choices'] = array_values( $setting['choices'] );
2184
-
2185
  }
2186
-
2187
  /* validate sub settings */
2188
  if ( isset( $setting['settings'] ) ) {
2189
 
2190
  $settings[$k]['settings'] = ot_validate_settings_array( $setting['settings'] );
2191
-
2192
  }
2193
 
2194
  }
2195
-
2196
  }
2197
-
2198
  /* return array but strip those damn slashes out first!!! */
2199
  return ot_stripslashes( $settings );
2200
-
2201
  }
2202
 
2203
  }
@@ -2216,39 +2216,39 @@ if ( ! function_exists( 'ot_modify_layouts' ) ) {
2216
 
2217
  /* check and verify modify layouts nonce */
2218
  if ( isset( $_POST['option_tree_modify_layouts_nonce'] ) && wp_verify_nonce( $_POST['option_tree_modify_layouts_nonce'], 'option_tree_modify_layouts_form' ) ) {
2219
-
2220
  /* previous layouts value */
2221
  $option_tree_layouts = get_option( ot_layouts_id() );
2222
-
2223
  /* new layouts value */
2224
  $layouts = isset( $_POST[ot_layouts_id()] ) ? $_POST[ot_layouts_id()] : '';
2225
-
2226
  /* rebuild layout array */
2227
  $rebuild = array();
2228
-
2229
  /* validate layouts */
2230
  if ( is_array( $layouts ) && ! empty( $layouts ) ) {
2231
-
2232
  /* setup active layout */
2233
  if ( isset( $layouts['active_layout'] ) && ! empty( $layouts['active_layout'] ) ) {
2234
  $rebuild['active_layout'] = $layouts['active_layout'];
2235
  }
2236
-
2237
  /* add new and overwrite active layout */
2238
  if ( isset( $layouts['_add_new_layout_'] ) && ! empty( $layouts['_add_new_layout_'] ) ) {
2239
  $rebuild['active_layout'] = ot_sanitize_layout_id( $layouts['_add_new_layout_'] );
2240
  $rebuild[$rebuild['active_layout']] = ot_encode( serialize( get_option( ot_options_id() ) ) );
2241
  }
2242
-
2243
  $first_layout = '';
2244
-
2245
  /* loop through layouts */
2246
  foreach( $layouts as $key => $layout ) {
2247
-
2248
  /* skip over active layout key */
2249
  if ( $key == 'active_layout' )
2250
  continue;
2251
-
2252
  /* check if the key exists then set value */
2253
  if ( isset( $option_tree_layouts[$key] ) && ! empty( $option_tree_layouts[$key] ) ) {
2254
  $rebuild[$key] = $option_tree_layouts[$key];
@@ -2256,63 +2256,63 @@ if ( ! function_exists( 'ot_modify_layouts' ) ) {
2256
  $first_layout = $key;
2257
  }
2258
  }
2259
-
2260
  }
2261
-
2262
  if ( isset( $rebuild['active_layout'] ) && ! isset( $rebuild[$rebuild['active_layout']] ) && ! empty( $first_layout ) ) {
2263
  $rebuild['active_layout'] = $first_layout;
2264
  }
2265
-
2266
  }
2267
-
2268
  /* default message */
2269
  $message = 'failed';
2270
-
2271
  /* is array: save & show success message */
2272
  if ( count( $rebuild ) > 1 ) {
2273
 
2274
  /* rebuild the theme options */
2275
  $rebuild_option_tree = unserialize( ot_decode( $rebuild[$rebuild['active_layout']] ) );
2276
  if ( is_array( $rebuild_option_tree ) ) {
2277
-
2278
  /* execute the action hook and pass the theme options to it */
2279
  do_action( 'ot_before_theme_options_save', $rebuild_option_tree );
2280
-
2281
  update_option( ot_options_id(), $rebuild_option_tree );
2282
-
2283
  }
2284
-
2285
  /* rebuild the layouts */
2286
  update_option( ot_layouts_id(), $rebuild );
2287
-
2288
  /* change message */
2289
  $message = 'success';
2290
-
2291
  } else if ( count( $rebuild ) <= 1 ) {
2292
 
2293
  /* delete layouts option */
2294
  delete_option( ot_layouts_id() );
2295
-
2296
  /* change message */
2297
  $message = 'deleted';
2298
-
2299
  }
2300
-
2301
  /* redirect */
2302
  if ( isset( $_REQUEST['page'] ) && $_REQUEST['page'] == apply_filters( 'niftycs_options_menu_slug', 'niftycs-options' ) ) {
2303
  $query_args = esc_url_raw( add_query_arg( array( 'settings-updated' => 'layout' ), remove_query_arg( array( 'action', 'message' ), $_POST['_wp_http_referer'] ) ) );
2304
  } else {
2305
  $query_args = esc_url_raw( add_query_arg( array( 'action' => 'save-layouts', 'message' => $message ), $_POST['_wp_http_referer'] ) );
2306
  }
2307
- wp_redirect( $query_args );
2308
  exit;
2309
-
2310
  }
2311
-
2312
  return false;
2313
 
2314
  }
2315
-
2316
  }
2317
 
2318
  /**
@@ -2327,105 +2327,105 @@ if ( ! function_exists( 'ot_modify_layouts' ) ) {
2327
  if ( ! function_exists( 'ot_alert_message' ) ) {
2328
 
2329
  function ot_alert_message( $page = array() ) {
2330
-
2331
  if ( empty( $page ) )
2332
  return false;
2333
-
2334
  $before = apply_filters( 'ot_before_page_messages', '', $page );
2335
-
2336
  if ( $before ) {
2337
  return $before;
2338
  }
2339
-
2340
  $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : '';
2341
  $message = isset( $_REQUEST['message'] ) ? $_REQUEST['message'] : '';
2342
  $updated = isset( $_REQUEST['settings-updated'] ) ? $_REQUEST['settings-updated'] : '';
2343
-
2344
  if ( $action == 'save-settings' ) {
2345
-
2346
  if ( $message == 'success' ) {
2347
-
2348
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Settings updated.', 'option-tree' ) . '</p></div>';
2349
-
2350
  } else if ( $message == 'failed' ) {
2351
-
2352
  return '<div id="message" class="error fade below-h2"><p>' . __( 'Settings could not be saved.', 'option-tree' ) . '</p></div>';
2353
-
2354
  }
2355
-
2356
  } else if ( $action == 'import-xml' || $action == 'import-settings' ) {
2357
-
2358
  if ( $message == 'success' ) {
2359
-
2360
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Settings Imported.', 'option-tree' ) . '</p></div>';
2361
-
2362
  } else if ( $message == 'failed' ) {
2363
-
2364
  return '<div id="message" class="error fade below-h2"><p>' . __( 'Settings could not be imported.', 'option-tree' ) . '</p></div>';
2365
-
2366
  }
2367
  } else if ( $action == 'import-data' ) {
2368
-
2369
  if ( $message == 'success' ) {
2370
-
2371
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Data Imported.', 'option-tree' ) . '</p></div>';
2372
-
2373
  } else if ( $message == 'failed' ) {
2374
-
2375
  return '<div id="message" class="error fade below-h2"><p>' . __( 'Data could not be imported.', 'option-tree' ) . '</p></div>';
2376
-
2377
  }
2378
-
2379
  } else if ( $action == 'import-layouts' ) {
2380
-
2381
  if ( $message == 'success' ) {
2382
-
2383
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Layouts Imported.', 'option-tree' ) . '</p></div>';
2384
-
2385
  } else if ( $message == 'failed' ) {
2386
-
2387
  return '<div id="message" class="error fade below-h2"><p>' . __( 'Layouts could not be imported.', 'option-tree' ) . '</p></div>';
2388
-
2389
  }
2390
-
2391
  } else if ( $action == 'save-layouts' ) {
2392
-
2393
  if ( $message == 'success' ) {
2394
-
2395
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Layouts Updated.', 'option-tree' ) . '</p></div>';
2396
-
2397
  } else if ( $message == 'failed' ) {
2398
-
2399
  return '<div id="message" class="error fade below-h2"><p>' . __( 'Layouts could not be updated.', 'option-tree' ) . '</p></div>';
2400
-
2401
  } else if ( $message == 'deleted' ) {
2402
-
2403
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Layouts have been deleted.', 'option-tree' ) . '</p></div>';
2404
-
2405
  }
2406
-
2407
- } else if ( $updated == 'layout' ) {
2408
-
2409
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Layout activated.', 'option-tree' ) . '</p></div>';
2410
-
2411
  } else if ( $action == 'reset' ) {
2412
-
2413
  return '<div id="message" class="updated fade below-h2"><p>' . $page['reset_message'] . '</p></div>';
2414
-
2415
  }
2416
-
2417
  do_action( 'ot_custom_page_messages', $page );
2418
-
2419
- if ( $updated == 'true' ) {
2420
-
2421
  return '<div id="message" class="updated fade below-h2"><p>' . $page['updated_message'] . '</p></div>';
2422
-
2423
- }
2424
-
2425
  return false;
2426
-
2427
  }
2428
-
2429
  }
2430
 
2431
  /**
@@ -2443,8 +2443,8 @@ if ( ! function_exists( 'ot_alert_message' ) ) {
2443
  if ( ! function_exists( 'ot_option_types_array' ) ) {
2444
 
2445
  function ot_option_types_array() {
2446
-
2447
- return apply_filters( 'ot_option_types_array', array(
2448
  'background' => __('Background', 'option-tree'),
2449
  'border' => __('Border', 'option-tree'),
2450
  'box-shadow' => __('Box Shadow', 'option-tree'),
@@ -2491,7 +2491,7 @@ if ( ! function_exists( 'ot_option_types_array' ) ) {
2491
  'typography' => __('Typography', 'option-tree'),
2492
  'upload' => __('Upload', 'option-tree')
2493
  ) );
2494
-
2495
  }
2496
  }
2497
 
@@ -2507,10 +2507,10 @@ if ( ! function_exists( 'ot_option_types_array' ) ) {
2507
  if ( ! function_exists( 'ot_map_old_option_types' ) ) {
2508
 
2509
  function ot_map_old_option_types( $type = '' ) {
2510
-
2511
- if ( ! $type )
2512
  return 'text';
2513
-
2514
  $types = array(
2515
  'background' => 'background',
2516
  'category' => 'category-select',
@@ -2519,7 +2519,7 @@ if ( ! function_exists( 'ot_map_old_option_types' ) ) {
2519
  'colorpicker' => 'colorpicker',
2520
  'css' => 'css',
2521
  'custom_post' => 'custom-post-type-select',
2522
- 'custom_posts' => 'custom-post-type-checkbox',
2523
  'input' => 'text',
2524
  'image' => 'upload',
2525
  'measurement' => 'measurement',
@@ -2537,12 +2537,12 @@ if ( ! function_exists( 'ot_map_old_option_types' ) ) {
2537
  'typography' => 'typography',
2538
  'upload' => 'upload'
2539
  );
2540
-
2541
  if ( isset( $types[$type] ) )
2542
  return $types[$type];
2543
-
2544
  return false;
2545
-
2546
  }
2547
  }
2548
 
@@ -2573,7 +2573,7 @@ function ot_google_font_stack( $families, $field_id ) {
2573
  }
2574
  }
2575
  }
2576
-
2577
  return $families;
2578
  }
2579
  add_filter( 'ot_recognized_font_families', 'ot_google_font_stack', 1, 2 );
@@ -2597,7 +2597,7 @@ add_filter( 'ot_recognized_font_families', 'ot_google_font_stack', 1, 2 );
2597
  if ( ! function_exists( 'ot_recognized_font_families' ) ) {
2598
 
2599
  function ot_recognized_font_families( $field_id = '' ) {
2600
-
2601
  $families = array(
2602
  'arial' => 'Arial',
2603
  'georgia' => 'Georgia',
@@ -2608,9 +2608,9 @@ if ( ! function_exists( 'ot_recognized_font_families' ) ) {
2608
  'trebuchet' => 'Trebuchet',
2609
  'verdana' => 'Verdana'
2610
  );
2611
-
2612
  return apply_filters( 'ot_recognized_font_families', $families, $field_id );
2613
-
2614
  }
2615
 
2616
  }
@@ -2631,19 +2631,19 @@ if ( ! function_exists( 'ot_recognized_font_families' ) ) {
2631
  if ( ! function_exists( 'ot_recognized_font_sizes' ) ) {
2632
 
2633
  function ot_recognized_font_sizes( $field_id ) {
2634
-
2635
- $range = ot_range(
2636
- apply_filters( 'ot_font_size_low_range', 0, $field_id ),
2637
- apply_filters( 'ot_font_size_high_range', 150, $field_id ),
2638
  apply_filters( 'ot_font_size_range_interval', 1, $field_id )
2639
  );
2640
-
2641
  $unit = apply_filters( 'ot_font_size_unit_type', 'px', $field_id );
2642
-
2643
  foreach( $range as $k => $v ) {
2644
  $range[$k] = $v . $unit;
2645
  }
2646
-
2647
  return apply_filters( 'ot_recognized_font_sizes', $range, $field_id );
2648
  }
2649
 
@@ -2666,14 +2666,14 @@ if ( ! function_exists( 'ot_recognized_font_sizes' ) ) {
2666
  if ( ! function_exists( 'ot_recognized_font_styles' ) ) {
2667
 
2668
  function ot_recognized_font_styles( $field_id = '' ) {
2669
-
2670
  return apply_filters( 'ot_recognized_font_styles', array(
2671
  'normal' => 'Normal',
2672
  'italic' => 'Italic',
2673
  'oblique' => 'Oblique',
2674
  'inherit' => 'Inherit'
2675
  ), $field_id );
2676
-
2677
  }
2678
 
2679
  }
@@ -2695,15 +2695,15 @@ if ( ! function_exists( 'ot_recognized_font_styles' ) ) {
2695
  if ( ! function_exists( 'ot_recognized_font_variants' ) ) {
2696
 
2697
  function ot_recognized_font_variants( $field_id = '' ) {
2698
-
2699
  return apply_filters( 'ot_recognized_font_variants', array(
2700
  'normal' => 'Normal',
2701
  'small-caps' => 'Small Caps',
2702
  'inherit' => 'Inherit'
2703
  ), $field_id );
2704
-
2705
  }
2706
-
2707
  }
2708
 
2709
  /**
@@ -2723,7 +2723,7 @@ if ( ! function_exists( 'ot_recognized_font_variants' ) ) {
2723
  if ( ! function_exists( 'ot_recognized_font_weights' ) ) {
2724
 
2725
  function ot_recognized_font_weights( $field_id = '' ) {
2726
-
2727
  return apply_filters( 'ot_recognized_font_weights', array(
2728
  'normal' => 'Normal',
2729
  'bold' => 'Bold',
@@ -2740,9 +2740,9 @@ if ( ! function_exists( 'ot_recognized_font_weights' ) ) {
2740
  '900' => '900',
2741
  'inherit' => 'Inherit'
2742
  ), $field_id );
2743
-
2744
  }
2745
-
2746
  }
2747
 
2748
  /**
@@ -2761,19 +2761,19 @@ if ( ! function_exists( 'ot_recognized_font_weights' ) ) {
2761
  if ( ! function_exists( 'ot_recognized_letter_spacing' ) ) {
2762
 
2763
  function ot_recognized_letter_spacing( $field_id ) {
2764
-
2765
- $range = ot_range(
2766
- apply_filters( 'ot_letter_spacing_low_range', -0.1, $field_id ),
2767
- apply_filters( 'ot_letter_spacing_high_range', 0.1, $field_id ),
2768
  apply_filters( 'ot_letter_spacing_range_interval', 0.01, $field_id )
2769
  );
2770
-
2771
  $unit = apply_filters( 'ot_letter_spacing_unit_type', 'em', $field_id );
2772
-
2773
  foreach( $range as $k => $v ) {
2774
  $range[$k] = $v . $unit;
2775
  }
2776
-
2777
  return apply_filters( 'ot_recognized_letter_spacing', $range, $field_id );
2778
  }
2779
 
@@ -2795,19 +2795,19 @@ if ( ! function_exists( 'ot_recognized_letter_spacing' ) ) {
2795
  if ( ! function_exists( 'ot_recognized_line_heights' ) ) {
2796
 
2797
  function ot_recognized_line_heights( $field_id ) {
2798
-
2799
- $range = ot_range(
2800
- apply_filters( 'ot_line_height_low_range', 0, $field_id ),
2801
- apply_filters( 'ot_line_height_high_range', 150, $field_id ),
2802
  apply_filters( 'ot_line_height_range_interval', 1, $field_id )
2803
  );
2804
-
2805
  $unit = apply_filters( 'ot_line_height_unit_type', 'px', $field_id );
2806
-
2807
  foreach( $range as $k => $v ) {
2808
  $range[$k] = $v . $unit;
2809
  }
2810
-
2811
  return apply_filters( 'ot_recognized_line_heights', $range, $field_id );
2812
  }
2813
 
@@ -2828,9 +2828,9 @@ if ( ! function_exists( 'ot_recognized_line_heights' ) ) {
2828
  * @since 2.0.10
2829
  */
2830
  if ( ! function_exists( 'ot_recognized_text_decorations' ) ) {
2831
-
2832
  function ot_recognized_text_decorations( $field_id = '' ) {
2833
-
2834
  return apply_filters( 'ot_recognized_text_decorations', array(
2835
  'blink' => 'Blink',
2836
  'inherit' => 'Inherit',
@@ -2839,7 +2839,7 @@ if ( ! function_exists( 'ot_recognized_text_decorations' ) ) {
2839
  'overline' => 'Overline',
2840
  'underline' => 'Underline'
2841
  ), $field_id );
2842
-
2843
  }
2844
 
2845
  }
@@ -2859,9 +2859,9 @@ if ( ! function_exists( 'ot_recognized_text_decorations' ) ) {
2859
  * @since 2.0.10
2860
  */
2861
  if ( ! function_exists( 'ot_recognized_text_transformations' ) ) {
2862
-
2863
  function ot_recognized_text_transformations( $field_id = '' ) {
2864
-
2865
  return apply_filters( 'ot_recognized_text_transformations', array(
2866
  'capitalize' => 'Capitalize',
2867
  'inherit' => 'Inherit',
@@ -2869,7 +2869,7 @@ if ( ! function_exists( 'ot_recognized_text_transformations' ) ) {
2869
  'none' => 'None',
2870
  'uppercase' => 'Uppercase'
2871
  ), $field_id );
2872
-
2873
  }
2874
 
2875
  }
@@ -2889,9 +2889,9 @@ if ( ! function_exists( 'ot_recognized_text_transformations' ) ) {
2889
  * @updated 2.0
2890
  */
2891
  if ( ! function_exists( 'ot_recognized_background_repeat' ) ) {
2892
-
2893
  function ot_recognized_background_repeat( $field_id = '' ) {
2894
-
2895
  return apply_filters( 'ot_recognized_background_repeat', array(
2896
  'no-repeat' => 'No Repeat',
2897
  'repeat' => 'Repeat All',
@@ -2899,9 +2899,9 @@ if ( ! function_exists( 'ot_recognized_background_repeat' ) ) {
2899
  'repeat-y' => 'Repeat Vertically',
2900
  'inherit' => 'Inherit'
2901
  ), $field_id );
2902
-
2903
  }
2904
-
2905
  }
2906
 
2907
  /**
@@ -2921,13 +2921,13 @@ if ( ! function_exists( 'ot_recognized_background_repeat' ) ) {
2921
  if ( ! function_exists( 'ot_recognized_background_attachment' ) ) {
2922
 
2923
  function ot_recognized_background_attachment( $field_id = '' ) {
2924
-
2925
  return apply_filters( 'ot_recognized_background_attachment', array(
2926
  "fixed" => "Fixed",
2927
  "scroll" => "Scroll",
2928
  "inherit" => "Inherit"
2929
  ), $field_id );
2930
-
2931
  }
2932
 
2933
  }
@@ -2949,7 +2949,7 @@ if ( ! function_exists( 'ot_recognized_background_attachment' ) ) {
2949
  if ( ! function_exists( 'ot_recognized_background_position' ) ) {
2950
 
2951
  function ot_recognized_background_position( $field_id = '' ) {
2952
-
2953
  return apply_filters( 'ot_recognized_background_position', array(
2954
  "left top" => "Left Top",
2955
  "left center" => "Left Center",
@@ -2961,7 +2961,7 @@ if ( ! function_exists( 'ot_recognized_background_position' ) ) {
2961
  "right center" => "Right Center",
2962
  "right bottom" => "Right Bottom"
2963
  ), $field_id );
2964
-
2965
  }
2966
 
2967
  }
@@ -3094,24 +3094,24 @@ if ( ! function_exists( 'ot_recognized_google_font_families' ) ) {
3094
 
3095
  $families = array();
3096
  $ot_google_fonts = get_theme_mod( 'ot_google_fonts', array() );
3097
-
3098
  // Forces an array rebuild when we sitch themes
3099
  if ( empty( $ot_google_fonts ) ) {
3100
  $ot_google_fonts = ot_fetch_google_fonts( true, true );
3101
  }
3102
-
3103
  foreach( (array) $ot_google_fonts as $key => $item ) {
3104
-
3105
  if ( isset( $item['family'] ) ) {
3106
-
3107
  $families[ $key ] = $item['family'];
3108
-
3109
  }
3110
-
3111
  }
3112
-
3113
  return apply_filters( 'ot_recognized_google_font_families', $families, $field_id );
3114
-
3115
  }
3116
 
3117
  }
@@ -3134,13 +3134,13 @@ if ( ! function_exists( 'ot_recognized_google_font_variants' ) ) {
3134
  $ot_google_fonts = get_theme_mod( 'ot_google_fonts', array() );
3135
 
3136
  if ( isset( $ot_google_fonts[ $family ]['variants'] ) ) {
3137
-
3138
  $variants = $ot_google_fonts[ $family ]['variants'];
3139
-
3140
  }
3141
-
3142
  return apply_filters( 'ot_recognized_google_font_variants', $variants, $field_id, $family );
3143
-
3144
  }
3145
 
3146
  }
@@ -3161,15 +3161,15 @@ if ( ! function_exists( 'ot_recognized_google_font_subsets' ) ) {
3161
 
3162
  $subsets = array();
3163
  $ot_google_fonts = get_theme_mod( 'ot_google_fonts', array() );
3164
-
3165
  if ( isset( $ot_google_fonts[ $family ]['subsets'] ) ) {
3166
-
3167
  $subsets = $ot_google_fonts[ $family ]['subsets'];
3168
-
3169
  }
3170
-
3171
  return apply_filters( 'ot_recognized_google_font_subsets', $subsets, $field_id, $family );
3172
-
3173
  }
3174
 
3175
  }
@@ -3189,16 +3189,16 @@ if ( ! function_exists( 'ot_recognized_google_font_subsets' ) ) {
3189
  * @updated 2.0
3190
  */
3191
  if ( ! function_exists( 'ot_measurement_unit_types' ) ) {
3192
-
3193
  function ot_measurement_unit_types( $field_id = '' ) {
3194
-
3195
  return apply_filters( 'ot_measurement_unit_types', array(
3196
  'px' => 'px',
3197
  '%' => '%',
3198
  'em' => 'em',
3199
  'pt' => 'pt'
3200
  ), $field_id );
3201
-
3202
  }
3203
 
3204
  }
@@ -3218,9 +3218,9 @@ if ( ! function_exists( 'ot_measurement_unit_types' ) ) {
3218
  * @since 2.0
3219
  */
3220
  if ( ! function_exists( 'ot_radio_images' ) ) {
3221
-
3222
  function ot_radio_images( $field_id = '' ) {
3223
-
3224
  return apply_filters( 'ot_radio_images', array(
3225
  array(
3226
  'value' => 'left-sidebar',
@@ -3253,7 +3253,7 @@ if ( ! function_exists( 'ot_radio_images' ) ) {
3253
  'src' => OT_URL . 'assets/images/layout/right-dual-sidebar.png'
3254
  )
3255
  ), $field_id );
3256
-
3257
  }
3258
 
3259
  }
@@ -3275,7 +3275,7 @@ if ( ! function_exists( 'ot_radio_images' ) ) {
3275
  if ( ! function_exists( 'ot_list_item_settings' ) ) {
3276
 
3277
  function ot_list_item_settings( $id ) {
3278
-
3279
  $settings = apply_filters( 'ot_list_item_settings', array(
3280
  array(
3281
  'id' => 'image',
@@ -3311,9 +3311,9 @@ if ( ! function_exists( 'ot_list_item_settings' ) ) {
3311
  'choices' => array()
3312
  )
3313
  ), $id );
3314
-
3315
  return $settings;
3316
-
3317
  }
3318
 
3319
  }
@@ -3335,7 +3335,7 @@ if ( ! function_exists( 'ot_list_item_settings' ) ) {
3335
  if ( ! function_exists( 'ot_slider_settings' ) ) {
3336
 
3337
  function ot_slider_settings( $id ) {
3338
-
3339
  $settings = apply_filters( 'image_slider_fields', array(
3340
  array(
3341
  'name' => 'image',
@@ -3356,41 +3356,41 @@ if ( ! function_exists( 'ot_slider_settings' ) ) {
3356
  'class' => ''
3357
  )
3358
  ), $id );
3359
-
3360
  /* fix the array keys, values, and just get it 2.0 ready */
3361
  foreach( $settings as $_k => $setting ) {
3362
-
3363
  foreach( $setting as $s_key => $s_value ) {
3364
-
3365
  if ( 'name' == $s_key ) {
3366
-
3367
  $settings[$_k]['id'] = $s_value;
3368
  unset($settings[$_k]['name']);
3369
-
3370
  } else if ( 'type' == $s_key ) {
3371
-
3372
  if ( 'input' == $s_value ) {
3373
-
3374
  $settings[$_k]['type'] = 'text';
3375
-
3376
  } else if ( 'textarea' == $s_value ) {
3377
-
3378
  $settings[$_k]['type'] = 'textarea-simple';
3379
-
3380
  } else if ( 'image' == $s_value ) {
3381
-
3382
  $settings[$_k]['type'] = 'upload';
3383
-
3384
  }
3385
-
3386
  }
3387
-
3388
- }
3389
-
3390
  }
3391
-
3392
  return $settings;
3393
-
3394
  }
3395
 
3396
  }
@@ -3412,7 +3412,7 @@ if ( ! function_exists( 'ot_slider_settings' ) ) {
3412
  if ( ! function_exists( 'ot_social_links_settings' ) ) {
3413
 
3414
  function ot_social_links_settings( $id ) {
3415
-
3416
  $settings = apply_filters( 'ot_social_links_settings', array(
3417
  array(
3418
  'id' => 'name',
@@ -3435,9 +3435,9 @@ if ( ! function_exists( 'ot_social_links_settings' ) ) {
3435
  'type' => 'text',
3436
  )
3437
  ), $id );
3438
-
3439
  return $settings;
3440
-
3441
  }
3442
 
3443
  }
@@ -3446,7 +3446,7 @@ if ( ! function_exists( 'ot_social_links_settings' ) ) {
3446
  * Inserts CSS with field_id markers.
3447
  *
3448
  * Inserts CSS into a dynamic.css file, placing it between
3449
- * BEGIN and END field_id markers. Replaces existing marked info,
3450
  * but still retains surrounding data.
3451
  *
3452
  * @param string $field_id The CSS option field ID.
@@ -3540,7 +3540,7 @@ if ( ! function_exists( 'ot_insert_css_with_markers' ) ) {
3540
  // Measurement
3541
  if ( $option_type == 'measurement' ) {
3542
  $unit = ! empty( $value[1] ) ? $value[1] : 'px';
3543
-
3544
  // Set $value with measurement properties
3545
  if ( isset( $value[0] ) && strlen( $value[0] ) > 0 )
3546
  $value = $value[0].$unit;
@@ -3862,39 +3862,39 @@ if ( ! function_exists( 'ot_insert_css_with_markers' ) ) {
3862
  if ( ! function_exists( 'ot_remove_old_css' ) ) {
3863
 
3864
  function ot_remove_old_css( $field_id = '' ) {
3865
-
3866
  /* missing $field_id string */
3867
  if ( '' == $field_id )
3868
  return false;
3869
-
3870
  /* path to the dynamic.css file */
3871
  $filepath = get_stylesheet_directory() . '/dynamic.css';
3872
-
3873
  /* allow filter on path */
3874
  $filepath = apply_filters( 'css_option_file_path', $filepath, $field_id );
3875
-
3876
  /* remove CSS from file */
3877
  if ( is_writeable( $filepath ) ) {
3878
-
3879
  /* get each line in the file */
3880
  $markerdata = explode( "\n", implode( '', file( $filepath ) ) );
3881
-
3882
  /* can't write to the file return false */
3883
  if ( ! $f = ot_file_open( $filepath, 'w' ) )
3884
  return false;
3885
-
3886
  $searching = true;
3887
-
3888
  /* has array of lines */
3889
  if ( ! empty( $markerdata ) ) {
3890
-
3891
  /* foreach line of code */
3892
  foreach ( $markerdata as $n => $markerline ) {
3893
-
3894
  /* found begining of marker, set $searching to false */
3895
  if ( $markerline == "/* BEGIN {$field_id} */" )
3896
  $searching = false;
3897
-
3898
  /* $searching is true, keep rewrite each line of CSS */
3899
  if ( $searching == true ) {
3900
  if ( $n + 1 < count( $markerdata ) )
@@ -3902,27 +3902,27 @@ if ( ! function_exists( 'ot_remove_old_css' ) ) {
3902
  else
3903
  ot_file_write( $f, "{$markerline}" );
3904
  }
3905
-
3906
  /* found end marker delete old CSS */
3907
  if ( $markerline == "/* END {$field_id} */" ) {
3908
  ot_file_write( $f, "" );
3909
  $searching = true;
3910
  }
3911
-
3912
  }
3913
-
3914
  }
3915
-
3916
  /* close file */
3917
  ot_file_close( $f );
3918
  return true;
3919
-
3920
  }
3921
-
3922
  return false;
3923
-
3924
  }
3925
-
3926
  }
3927
 
3928
  /**
@@ -3940,17 +3940,17 @@ if ( ! function_exists( 'ot_remove_old_css' ) ) {
3940
  if ( ! function_exists( 'ot_normalize_css' ) ) {
3941
 
3942
  function ot_normalize_css( $css ) {
3943
-
3944
  /* Normalize & Convert */
3945
  $css = str_replace( "\r\n", "\n", $css );
3946
  $css = str_replace( "\r", "\n", $css );
3947
-
3948
  /* Don't allow out-of-control blank lines */
3949
  $css = preg_replace( "/\n{2,}/", "\n\n", $css );
3950
-
3951
  return $css;
3952
  }
3953
-
3954
  }
3955
 
3956
  /**
@@ -3966,20 +3966,20 @@ if ( ! function_exists( 'ot_normalize_css' ) ) {
3966
  if ( ! function_exists( 'ot_loop_through_option_types' ) ) {
3967
 
3968
  function ot_loop_through_option_types( $type = '', $child = false ) {
3969
-
3970
  $content = '';
3971
  $types = ot_option_types_array();
3972
-
3973
  if ( $child )
3974
  unset($types['list-item']);
3975
-
3976
  foreach( $types as $key => $value )
3977
  $content.= '<option value="' . $key . '" ' . selected( $type, $key, false ) . '>' . $value . '</option>';
3978
-
3979
  return $content;
3980
-
3981
  }
3982
-
3983
  }
3984
 
3985
  /**
@@ -3996,15 +3996,15 @@ if ( ! function_exists( 'ot_loop_through_option_types' ) ) {
3996
  if ( ! function_exists( 'ot_loop_through_choices' ) ) {
3997
 
3998
  function ot_loop_through_choices( $name, $choices = array() ) {
3999
-
4000
  $content = '';
4001
-
4002
  foreach( (array) $choices as $key => $choice )
4003
  $content.= '<li class="ui-state-default list-choice">' . ot_choices_view( $name, $key, $choice ) . '</li>';
4004
-
4005
  return $content;
4006
  }
4007
-
4008
  }
4009
 
4010
  /**
@@ -4021,15 +4021,15 @@ if ( ! function_exists( 'ot_loop_through_choices' ) ) {
4021
  if ( ! function_exists( 'ot_loop_through_sub_settings' ) ) {
4022
 
4023
  function ot_loop_through_sub_settings( $name, $settings = array() ) {
4024
-
4025
  $content = '';
4026
-
4027
  foreach( $settings as $key => $setting )
4028
  $content.= '<li class="ui-state-default list-sub-setting">' . ot_settings_view( $name, $key, $setting ) . '</li>';
4029
-
4030
  return $content;
4031
  }
4032
-
4033
  }
4034
 
4035
  /**
@@ -4049,7 +4049,7 @@ if ( ! function_exists( 'ot_loop_through_sub_settings' ) ) {
4049
  if ( ! function_exists( 'ot_sections_view' ) ) {
4050
 
4051
  function ot_sections_view( $name, $key, $section = array() ) {
4052
-
4053
  return '
4054
  <div class="option-tree-setting is-section">
4055
  <div class="open">' . ( isset( $section['title'] ) ? esc_attr( $section['title'] ) : 'Section ' . ( $key + 1 ) ) . '</div>
@@ -4080,7 +4080,7 @@ if ( ! function_exists( 'ot_sections_view' ) ) {
4080
  </div>
4081
  </div>
4082
  </div>';
4083
-
4084
  }
4085
 
4086
  }
@@ -4102,23 +4102,23 @@ if ( ! function_exists( 'ot_sections_view' ) ) {
4102
  if ( ! function_exists( 'ot_settings_view' ) ) {
4103
 
4104
  function ot_settings_view( $name, $key, $setting = array() ) {
4105
-
4106
  $child = ( strpos( $name, '][settings]') !== false ) ? true : false;
4107
  $type = isset( $setting['type'] ) ? $setting['type'] : '';
4108
  $std = isset( $setting['std'] ) ? $setting['std'] : '';
4109
  $operator = isset( $setting['operator'] ) ? esc_attr( $setting['operator'] ) : 'and';
4110
-
4111
  // Serialize the standard value just incase
4112
  if ( is_array( $std ) ) {
4113
  $std = maybe_serialize( $std );
4114
  }
4115
-
4116
  if ( in_array( $type, array( 'css', 'javascript', 'textarea', 'textarea-simple' ) ) ) {
4117
  $std_form_element = '<textarea class="textarea" rows="10" cols="40" name="' . esc_attr( $name ) . '[' . esc_attr( $key ) . '][std]">' . esc_html( $std ) . '</textarea>';
4118
  } else {
4119
  $std_form_element = '<input type="text" name="' . esc_attr( $name ) . '[' . esc_attr( $key ) . '][std]" value="' . esc_attr( $std ) . '" class="widefat option-tree-ui-input" autocomplete="off" />';
4120
  }
4121
-
4122
  return '
4123
  <div class="option-tree-setting">
4124
  <div class="open">' . ( isset( $setting['label'] ) ? esc_attr( $setting['label'] ) : 'Setting ' . ( $key + 1 ) ) . '</div>
@@ -4152,8 +4152,8 @@ if ( ! function_exists( 'ot_settings_view' ) ) {
4152
  <div class="description">' . __( '<strong>Type</strong>: Choose one of the available option types from the dropdown.', 'option-tree' ) . '</div>
4153
  <div class="format-setting-inner">
4154
  <select name="' . esc_attr( $name ) . '[' . esc_attr( $key ) . '][type]" value="' . esc_attr( $type ) . '" class="option-tree-ui-select">
4155
- ' . ot_loop_through_option_types( $type, $child ) . '
4156
-
4157
  </select>
4158
  </div>
4159
  </div>
@@ -4258,7 +4258,7 @@ if ( ! function_exists( 'ot_settings_view' ) ) {
4258
  </div>
4259
  </div>
4260
  ' . ( ! $child ? '<input type="hidden" class="hidden-section" name="' . esc_attr( $name ) . '[' . esc_attr( $key ) . '][section]" value="' . ( isset( $setting['section'] ) ? esc_attr( $setting['section'] ) : '' ) . '" />' : '' );
4261
-
4262
  }
4263
 
4264
  }
@@ -4281,7 +4281,7 @@ if ( ! function_exists( 'ot_settings_view' ) ) {
4281
  if ( ! function_exists( 'ot_choices_view' ) ) {
4282
 
4283
  function ot_choices_view( $name, $key, $choice = array() ) {
4284
-
4285
  return '
4286
  <div class="option-tree-setting">
4287
  <div class="open">' . ( isset( $choice['label'] ) ? esc_attr( $choice['label'] ) : 'Choice ' . ( $key + 1 ) ) . '</div>
@@ -4325,7 +4325,7 @@ if ( ! function_exists( 'ot_choices_view' ) ) {
4325
  </div>
4326
  </div>
4327
  </div>';
4328
-
4329
  }
4330
 
4331
  }
@@ -4347,7 +4347,7 @@ if ( ! function_exists( 'ot_choices_view' ) ) {
4347
  if ( ! function_exists( 'ot_contextual_help_view' ) ) {
4348
 
4349
  function ot_contextual_help_view( $name, $key, $content = array() ) {
4350
-
4351
  return '
4352
  <div class="option-tree-setting">
4353
  <div class="open">' . ( isset( $content['title'] ) ? esc_attr( $content['title'] ) : 'Content ' . ( $key + 1 ) ) . '</div>
@@ -4386,7 +4386,7 @@ if ( ! function_exists( 'ot_contextual_help_view' ) ) {
4386
  </div>
4387
  </div>
4388
  </div>';
4389
-
4390
  }
4391
 
4392
  }
@@ -4420,7 +4420,7 @@ if ( ! function_exists( 'ot_layout_view' ) ) {
4420
  </div>
4421
  <input type="hidden" name="' . ot_layouts_id() . '[' . esc_attr( $key ) . ']" value="' . $data . '" />
4422
  </div>';
4423
-
4424
  }
4425
 
4426
  }
@@ -4443,7 +4443,7 @@ if ( ! function_exists( 'ot_layout_view' ) ) {
4443
  if ( ! function_exists( 'ot_list_item_view' ) ) {
4444
 
4445
  function ot_list_item_view( $name, $key, $list_item = array(), $post_id = 0, $get_option = '', $settings = array(), $type = '' ) {
4446
-
4447
  /* required title setting */
4448
  $required_setting = array(
4449
  array(
@@ -4458,24 +4458,24 @@ if ( ! function_exists( 'ot_list_item_view' ) ) {
4458
  'choices' => array()
4459
  )
4460
  );
4461
-
4462
  /* load the old filterable slider settings */
4463
  if ( 'slider' == $type ) {
4464
-
4465
  $settings = ot_slider_settings( $name );
4466
-
4467
  }
4468
-
4469
  /* if no settings array load the filterable list item settings */
4470
  if ( empty( $settings ) ) {
4471
-
4472
  $settings = ot_list_item_settings( $name );
4473
-
4474
  }
4475
-
4476
  /* merge the two settings array */
4477
  $settings = array_merge( $required_setting, $settings );
4478
-
4479
  echo '
4480
  <div class="option-tree-setting">
4481
  <div class="open">' . ( isset( $list_item['title'] ) ? esc_attr( $list_item['title'] ) : '' ) . '</div>
@@ -4488,31 +4488,31 @@ if ( ! function_exists( 'ot_list_item_view' ) ) {
4488
  </a>
4489
  </div>
4490
  <div class="option-tree-setting-body">';
4491
-
4492
  foreach( $settings as $field ) {
4493
-
4494
  // Set field value
4495
  $field_value = isset( $list_item[$field['id']] ) ? $list_item[$field['id']] : '';
4496
-
4497
  /* set default to standard value */
4498
- if ( isset( $field['std'] ) ) {
4499
  $field_value = ot_filter_std_value( $field_value, $field['std'] );
4500
  }
4501
-
4502
  // filter the title label and description
4503
  if ( $field['id'] == 'title' ) {
4504
-
4505
  // filter the label
4506
  $field['label'] = apply_filters( 'ot_list_item_title_label', $field['label'], $name );
4507
-
4508
  // filter the description
4509
  $field['desc'] = apply_filters( 'ot_list_item_title_desc', $field['desc'], $name );
4510
-
4511
  }
4512
-
4513
  /* make life easier */
4514
  $_field_name = $get_option ? $get_option . '[' . $name . ']' : $name;
4515
-
4516
  /* build the arguments array */
4517
  $_args = array(
4518
  'type' => $field['type'],
@@ -4533,12 +4533,12 @@ if ( ! function_exists( 'ot_list_item_view' ) ) {
4533
  'post_id' => $post_id,
4534
  'get_option' => $get_option
4535
  );
4536
-
4537
  $conditions = '';
4538
-
4539
  /* setup the conditions */
4540
  if ( isset( $field['condition'] ) && ! empty( $field['condition'] ) ) {
4541
-
4542
  /* doing magic on the conditions so they work in a list item */
4543
  $conditionals = explode( ',', $field['condition'] );
4544
  foreach( $conditionals as $condition ) {
@@ -4571,36 +4571,36 @@ if ( ! function_exists( 'ot_list_item_view' ) ) {
4571
  $class = 'format-settings';
4572
 
4573
  }
4574
-
4575
  /* option label */
4576
  echo '<div id="setting_' . $_args['field_id'] . '" class="' . $class . '"' . $conditions . '>';
4577
-
4578
  /* don't show title with textblocks */
4579
  if ( $_args['type'] != 'textblock' && ! empty( $field['label'] ) ) {
4580
  echo '<div class="format-setting-label">';
4581
  echo '<h3 class="label">' . esc_attr( $field['label'] ) . '</h3>';
4582
  echo '</div>';
4583
  }
4584
-
4585
  /* only allow simple textarea inside a list-item due to known DOM issues with wp_editor() */
4586
  if ( apply_filters( 'ot_override_forced_textarea_simple', false, $field['id'] ) == false && $_args['type'] == 'textarea' )
4587
  $_args['type'] = 'textarea-simple';
4588
-
4589
  /* option body, list-item is not allowed inside another list-item */
4590
  if ( $_args['type'] !== 'list-item' && $_args['type'] !== 'slider' ) {
4591
  echo ot_display_by_type( $_args );
4592
  }
4593
-
4594
  echo '</div>';
4595
-
4596
  }
4597
-
4598
  echo '</div>';
4599
-
4600
  echo '</div>';
4601
-
4602
  }
4603
-
4604
  }
4605
 
4606
  /**
@@ -4621,14 +4621,14 @@ if ( ! function_exists( 'ot_list_item_view' ) ) {
4621
  if ( ! function_exists( 'ot_social_links_view' ) ) {
4622
 
4623
  function ot_social_links_view( $name, $key, $list_item = array(), $post_id = 0, $get_option = '', $settings = array(), $type = '' ) {
4624
-
4625
  /* if no settings array load the filterable social links settings */
4626
  if ( empty( $settings ) ) {
4627
-
4628
  $settings = ot_social_links_settings( $name );
4629
-
4630
  }
4631
-
4632
  echo '
4633
  <div class="option-tree-setting">
4634
  <div class="open">' . ( isset( $list_item['name'] ) ? esc_attr( $list_item['name'] ) : '' ) . '</div>
@@ -4641,20 +4641,20 @@ if ( ! function_exists( 'ot_social_links_view' ) ) {
4641
  </a>
4642
  </div>
4643
  <div class="option-tree-setting-body">';
4644
-
4645
  foreach( $settings as $field ) {
4646
-
4647
  // Set field value
4648
  $field_value = isset( $list_item[$field['id']] ) ? $list_item[$field['id']] : '';
4649
-
4650
  /* set default to standard value */
4651
- if ( isset( $field['std'] ) ) {
4652
  $field_value = ot_filter_std_value( $field_value, $field['std'] );
4653
  }
4654
-
4655
  /* make life easier */
4656
  $_field_name = $get_option ? $get_option . '[' . $name . ']' : $name;
4657
-
4658
  /* build the arguments array */
4659
  $_args = array(
4660
  'type' => $field['type'],
@@ -4675,12 +4675,12 @@ if ( ! function_exists( 'ot_social_links_view' ) ) {
4675
  'post_id' => $post_id,
4676
  'get_option' => $get_option
4677
  );
4678
-
4679
  $conditions = '';
4680
-
4681
  /* setup the conditions */
4682
  if ( isset( $field['condition'] ) && ! empty( $field['condition'] ) ) {
4683
-
4684
  /* doing magic on the conditions so they work in a list item */
4685
  $conditionals = explode( ',', $field['condition'] );
4686
  foreach( $conditionals as $condition ) {
@@ -4694,36 +4694,36 @@ if ( ! function_exists( 'ot_social_links_view' ) ) {
4694
  $conditions.= isset( $field['operator'] ) && in_array( $field['operator'], array( 'and', 'AND', 'or', 'OR' ) ) ? ' data-operator="' . $field['operator'] . '"' : '';
4695
 
4696
  }
4697
-
4698
  /* option label */
4699
  echo '<div id="setting_' . $_args['field_id'] . '" class="format-settings"' . $conditions . '>';
4700
-
4701
  /* don't show title with textblocks */
4702
  if ( $_args['type'] != 'textblock' && ! empty( $field['label'] ) ) {
4703
  echo '<div class="format-setting-label">';
4704
  echo '<h3 class="label">' . esc_attr( $field['label'] ) . '</h3>';
4705
  echo '</div>';
4706
  }
4707
-
4708
  /* only allow simple textarea inside a list-item due to known DOM issues with wp_editor() */
4709
  if ( $_args['type'] == 'textarea' )
4710
  $_args['type'] = 'textarea-simple';
4711
-
4712
  /* option body, list-item is not allowed inside another list-item */
4713
  if ( $_args['type'] !== 'list-item' && $_args['type'] !== 'slider' && $_args['type'] !== 'social-links' ) {
4714
  echo ot_display_by_type( $_args );
4715
  }
4716
-
4717
  echo '</div>';
4718
-
4719
  }
4720
-
4721
  echo '</div>';
4722
-
4723
  echo '</div>';
4724
-
4725
  }
4726
-
4727
  }
4728
 
4729
  /**
@@ -4737,63 +4737,63 @@ if ( ! function_exists( 'ot_social_links_view' ) ) {
4737
  if ( ! function_exists( 'niftycs_options_layouts_form' ) ) {
4738
 
4739
  function niftycs_options_layouts_form( $active = false ) {
4740
-
4741
  echo '<form method="post" id="option-tree-options-layouts-form">';
4742
-
4743
  /* form nonce */
4744
  wp_nonce_field( 'option_tree_modify_layouts_form', 'option_tree_modify_layouts_nonce' );
4745
-
4746
  /* get the saved layouts */
4747
  $layouts = get_option( ot_layouts_id() );
4748
-
4749
  /* set active layout */
4750
  $active_layout = isset( $layouts['active_layout'] ) ? $layouts['active_layout'] : '';
4751
 
4752
  if ( is_array( $layouts ) && count( $layouts ) > 1 ) {
4753
-
4754
  $active_layout = esc_attr( $layouts['active_layout'] );
4755
-
4756
  echo '<input type="hidden" id="the_current_layout" value="' . $active_layout . '" />';
4757
-
4758
  echo '<div class="option-tree-active-layout">';
4759
-
4760
  echo '<select name="' . ot_layouts_id() . '[active_layout]" class="option-tree-ui-select">';
4761
-
4762
- foreach( $layouts as $key => $data ) {
4763
-
4764
  if ( $key == 'active_layout' )
4765
  continue;
4766
-
4767
  echo '<option' . selected( $key, $active_layout, false ) . ' value="' . esc_attr( $key ) . '">' . esc_attr( $key ) . '</option>';
4768
  }
4769
-
4770
  echo '</select>';
4771
-
4772
  echo '</div>';
4773
-
4774
  foreach( $layouts as $key => $data ) {
4775
-
4776
  if ( $key == 'active_layout' )
4777
  continue;
4778
-
4779
  echo '<input type="hidden" name="' . ot_layouts_id() . '[' . $key . ']" value="' . ( isset( $data ) ? $data : '' ) . '" />';
4780
-
4781
  }
4782
-
4783
  }
4784
-
4785
  /* new layout wrapper */
4786
  echo '<div class="option-tree-save-layout' . ( ! empty( $active_layout ) ? ' active-layout' : '' ) . '">';
4787
-
4788
  /* add new layout */
4789
  echo '<input type="text" name="' . ot_layouts_id() . '[_add_new_layout_]" value="" class="widefat option-tree-ui-input" autocomplete="off" />';
4790
-
4791
  echo '<button type="submit" class="option-tree-ui-button button button-primary save-layout" title="' . __( 'New Layout', 'option-tree' ) . '">' . __( 'New Layout', 'option-tree' ) . '</button>';
4792
-
4793
  echo '</div>';
4794
-
4795
  echo '</form>';
4796
-
4797
  }
4798
 
4799
  }
@@ -4810,9 +4810,9 @@ if ( ! function_exists( 'niftycs_options_layouts_form' ) ) {
4810
  if ( ! function_exists( 'ot_sanitize_option_id' ) ) {
4811
 
4812
  function ot_sanitize_option_id( $input ) {
4813
-
4814
  return preg_replace( '/[^a-z0-9]/', '_', trim( strtolower( $input ) ) );
4815
-
4816
  }
4817
 
4818
  }
@@ -4829,9 +4829,9 @@ if ( ! function_exists( 'ot_sanitize_option_id' ) ) {
4829
  if ( ! function_exists( 'ot_sanitize_layout_id' ) ) {
4830
 
4831
  function ot_sanitize_layout_id( $input ) {
4832
-
4833
  return preg_replace( '/[^a-z0-9]/', '-', trim( strtolower( $input ) ) );
4834
-
4835
  }
4836
 
4837
  }
@@ -4852,15 +4852,15 @@ if ( ! function_exists( 'ot_convert_array_to_string' ) ) {
4852
 
4853
  foreach( $input as $k => $choice ) {
4854
  $choices[$k] = $choice['value'] . '|' . $choice['label'];
4855
-
4856
  if ( isset( $choice['src'] ) )
4857
  $choices[$k].= '|' . $choice['src'];
4858
-
4859
  }
4860
-
4861
  return implode( ',', $choices );
4862
  }
4863
-
4864
  return false;
4865
  }
4866
  }
@@ -4876,39 +4876,39 @@ if ( ! function_exists( 'ot_convert_array_to_string' ) ) {
4876
  if ( ! function_exists( 'ot_convert_string_to_array' ) ) {
4877
 
4878
  function ot_convert_string_to_array( $input ) {
4879
-
4880
  if ( '' !== $input ) {
4881
-
4882
  /* empty choices array */
4883
  $choices = array();
4884
-
4885
  /* exlode the string into an array */
4886
  foreach( explode( ',', $input ) as $k => $choice ) {
4887
-
4888
  /* if ":" is splitting the string go deeper */
4889
  if ( preg_match( '/\|/', $choice ) ) {
4890
  $split = explode( '|', $choice );
4891
  $choices[$k]['value'] = trim( $split[0] );
4892
  $choices[$k]['label'] = trim( $split[1] );
4893
-
4894
  /* if radio image there are three values */
4895
  if ( isset( $split[2] ) )
4896
  $choices[$k]['src'] = trim( $split[2] );
4897
-
4898
  } else {
4899
  $choices[$k]['value'] = trim( $choice );
4900
  $choices[$k]['label'] = trim( $choice );
4901
  }
4902
-
4903
  }
4904
-
4905
  /* return a formated choices array */
4906
  return $choices;
4907
-
4908
  }
4909
-
4910
  return false;
4911
-
4912
  }
4913
  }
4914
 
@@ -4925,14 +4925,14 @@ if ( ! function_exists( 'ot_convert_string_to_array' ) ) {
4925
  if ( ! function_exists( 'ot_strpos_array' ) ) {
4926
 
4927
  function ot_strpos_array( $haystack, $needles = array() ) {
4928
-
4929
  foreach( $needles as $needle ) {
4930
  $pos = strpos( $haystack, $needle );
4931
  if ( $pos !== false ) {
4932
  return true;
4933
  }
4934
  }
4935
-
4936
  return false;
4937
  }
4938
 
@@ -4949,18 +4949,18 @@ if ( ! function_exists( 'ot_strpos_array' ) ) {
4949
  * @since 2.0
4950
  */
4951
  if ( ! function_exists( 'ot_array_keys_exists' ) ) {
4952
-
4953
  function ot_array_keys_exists( $array, $keys ) {
4954
-
4955
  foreach($keys as $k) {
4956
  if ( isset($array[$k]) ) {
4957
  return true;
4958
  }
4959
  }
4960
-
4961
  return false;
4962
  }
4963
-
4964
  }
4965
 
4966
  /**
@@ -4975,31 +4975,31 @@ if ( ! function_exists( 'ot_array_keys_exists' ) ) {
4975
  if ( ! function_exists( 'ot_stripslashes' ) ) {
4976
 
4977
  function ot_stripslashes( $input ) {
4978
-
4979
  if ( is_array( $input ) ) {
4980
-
4981
  foreach( $input as &$val ) {
4982
-
4983
  if ( is_array( $val ) ) {
4984
-
4985
  $val = ot_stripslashes( $val );
4986
-
4987
  } else {
4988
-
4989
  $val = stripslashes( trim( $val ) );
4990
-
4991
  }
4992
-
4993
  }
4994
-
4995
  } else {
4996
-
4997
  $input = stripslashes( trim( $input ) );
4998
-
4999
  }
5000
-
5001
  return $input;
5002
-
5003
  }
5004
 
5005
  }
@@ -5016,23 +5016,23 @@ if ( ! function_exists( 'ot_stripslashes' ) ) {
5016
  if ( ! function_exists( 'ot_reverse_wpautop' ) ) {
5017
 
5018
  function ot_reverse_wpautop( $string = '' ) {
5019
-
5020
  /* return if string is empty */
5021
  if ( trim( $string ) === '' )
5022
  return '';
5023
-
5024
  /* remove all new lines & <p> tags */
5025
  $string = str_replace( array( "\n", "<p>" ), "", $string );
5026
-
5027
  /* replace <br /> with \r */
5028
  $string = str_replace( array( "<br />", "<br>", "<br/>" ), "\r", $string );
5029
-
5030
  /* replace </p> with \r\n */
5031
  $string = str_replace( "</p>", "\r\n", $string );
5032
-
5033
  /* return clean string */
5034
  return trim( $string );
5035
-
5036
  }
5037
 
5038
  }
@@ -5040,14 +5040,14 @@ if ( ! function_exists( 'ot_reverse_wpautop' ) ) {
5040
  /**
5041
  * Returns an array of elements from start to limit, inclusive.
5042
  *
5043
- * Occasionally zero will be some impossibly large number to
5044
  * the "E" power when creating a range from negative to positive.
5045
  * This function attempts to fix that by setting that number back to "0".
5046
  *
5047
  * @param string $start First value of the sequence.
5048
  * @param string $limit The sequence is ended upon reaching the limit value.
5049
- * @param string $step If a step value is given, it will be used as the increment
5050
- * between elements in the sequence. step should be given as a
5051
  * positive number. If not specified, step will default to 1.
5052
  * @return array
5053
  *
@@ -5055,18 +5055,18 @@ if ( ! function_exists( 'ot_reverse_wpautop' ) ) {
5055
  * @since 2.0.12
5056
  */
5057
  function ot_range( $start, $limit, $step = 1 ) {
5058
-
5059
  if ( $step < 0 )
5060
  $step = 1;
5061
-
5062
  $range = range( $start, $limit, $step );
5063
-
5064
  foreach( $range as $k => $v ) {
5065
  if ( strpos( $v, 'E' ) ) {
5066
  $range[$k] = 0;
5067
  }
5068
  }
5069
-
5070
  return $range;
5071
  }
5072
 
@@ -5082,7 +5082,7 @@ function ot_encode( $value ) {
5082
 
5083
  $func = 'base64' . '_encode';
5084
  return $func( $value );
5085
-
5086
  }
5087
 
5088
  /**
@@ -5097,7 +5097,7 @@ function ot_decode( $value ) {
5097
 
5098
  $func = 'base64' . '_decode';
5099
  return $func( $value );
5100
-
5101
  }
5102
 
5103
  /**
@@ -5110,7 +5110,7 @@ function ot_file_open( $handle, $mode ) {
5110
 
5111
  $func = 'f' . 'open';
5112
  return @$func( $handle, $mode );
5113
-
5114
  }
5115
 
5116
  /**
@@ -5123,7 +5123,7 @@ function ot_file_close( $handle ) {
5123
 
5124
  $func = 'f' . 'close';
5125
  return $func( $handle );
5126
-
5127
  }
5128
 
5129
  /**
@@ -5136,7 +5136,7 @@ function ot_file_write( $handle, $string ) {
5136
 
5137
  $func = 'f' . 'write';
5138
  return $func( $handle, $string );
5139
-
5140
  }
5141
 
5142
  /**
@@ -5150,29 +5150,29 @@ function ot_file_write( $handle, $string ) {
5150
  * @since 2.0.15
5151
  */
5152
  function ot_filter_std_value( $value = '', $std = '' ) {
5153
-
5154
  $std = maybe_unserialize( $std );
5155
-
5156
  if ( is_array( $value ) && is_array( $std ) ) {
5157
-
5158
  foreach( $value as $k => $v ) {
5159
-
5160
  if ( '' == $value[$k] && isset( $std[$k] ) ) {
5161
-
5162
  $value[$k] = $std[$k];
5163
-
5164
  }
5165
-
5166
  }
5167
-
5168
  } else if ( '' == $value && ! empty( $std ) ) {
5169
-
5170
  $value = $std;
5171
-
5172
  }
5173
 
5174
  return $value;
5175
-
5176
  }
5177
 
5178
  /**
@@ -5254,8 +5254,8 @@ function ot_fetch_google_fonts( $normalize = true, $force_rebuild = false ) {
5254
 
5255
  /* Initiate API request */
5256
  $ot_google_fonts_query_args = array(
5257
- 'key' => $ot_google_fonts_api_key,
5258
- 'fields' => 'items(' . implode( ',', $ot_google_fonts_fields ) . ')',
5259
  'sort' => $ot_google_fonts_sort
5260
  );
5261
 
@@ -5274,7 +5274,7 @@ function ot_fetch_google_fonts( $normalize = true, $force_rebuild = false ) {
5274
  if ( is_array( $ot_google_fonts_data ) && isset( $ot_google_fonts_data['items'] ) ) {
5275
 
5276
  $ot_google_fonts = $ot_google_fonts_data['items'];
5277
-
5278
  // Normalize the array key
5279
  $ot_google_fonts_tmp = array();
5280
  foreach( $ot_google_fonts as $key => $value ) {
@@ -5283,7 +5283,7 @@ function ot_fetch_google_fonts( $normalize = true, $force_rebuild = false ) {
5283
  $id = preg_replace( '/[^a-z0-9_\-]/', '', $id );
5284
  $ot_google_fonts_tmp[$id] = $value;
5285
  }
5286
-
5287
  $ot_google_fonts = $ot_google_fonts_tmp;
5288
  set_theme_mod( 'ot_google_fonts', $ot_google_fonts );
5289
  set_transient( $ot_google_fonts_cache_key, $ot_google_fonts, WEEK_IN_SECONDS );
@@ -5356,11 +5356,11 @@ function ot_normalize_google_fonts( $google_fonts ) {
5356
  function ot_wpml_register_string( $id, $value ) {
5357
 
5358
  if ( function_exists( 'icl_register_string' ) ) {
5359
-
5360
  icl_register_string( 'Theme Options', $id, $value );
5361
-
5362
  }
5363
-
5364
  }
5365
 
5366
  /**
@@ -5372,11 +5372,11 @@ function ot_wpml_register_string( $id, $value ) {
5372
  function ot_wpml_unregister_string( $id ) {
5373
 
5374
  if ( function_exists( 'icl_unregister_string' ) ) {
5375
-
5376
  icl_unregister_string( 'Theme Options', $id );
5377
-
5378
  }
5379
-
5380
  }
5381
 
5382
  /**
@@ -5390,27 +5390,27 @@ function ot_wpml_unregister_string( $id ) {
5390
  if ( ! function_exists( 'ot_maybe_migrate_settings' ) ) {
5391
 
5392
  function ot_maybe_migrate_settings() {
5393
-
5394
  // Filter the ID to migrate from
5395
  $settings_id = apply_filters( 'ot_migrate_settings_id', '' );
5396
-
5397
- // Attempt to migrate Settings
5398
  if ( ! empty( $settings_id ) && get_option( ot_settings_id() ) === false && ot_settings_id() !== $settings_id ) {
5399
-
5400
  // Old settings
5401
  $settings = get_option( $settings_id );
5402
-
5403
  // Check for array keys
5404
  if ( isset( $settings['sections'] ) && isset( $settings['settings'] ) ) {
5405
-
5406
  update_option( ot_settings_id(), $settings );
5407
-
5408
  }
5409
-
5410
  }
5411
 
5412
  }
5413
-
5414
  }
5415
 
5416
  /**
@@ -5424,23 +5424,23 @@ if ( ! function_exists( 'ot_maybe_migrate_settings' ) ) {
5424
  if ( ! function_exists( 'ot_maybe_migrate_options' ) ) {
5425
 
5426
  function ot_maybe_migrate_options() {
5427
-
5428
  // Filter the ID to migrate from
5429
  $options_id = apply_filters( 'ot_migrate_options_id', '' );
5430
-
5431
  // Attempt to migrate Theme Options
5432
  if ( ! empty( $options_id ) && get_option( ot_options_id() ) === false && ot_options_id() !== $options_id ) {
5433
-
5434
  // Old options
5435
  $options = get_option( $options_id );
5436
-
5437
  // Migrate to new ID
5438
  update_option( ot_options_id(), $options );
5439
-
5440
  }
5441
 
5442
  }
5443
-
5444
  }
5445
 
5446
  /**
@@ -5454,19 +5454,19 @@ if ( ! function_exists( 'ot_maybe_migrate_options' ) ) {
5454
  if ( ! function_exists( 'ot_maybe_migrate_layouts' ) ) {
5455
 
5456
  function ot_maybe_migrate_layouts() {
5457
-
5458
  // Filter the ID to migrate from
5459
  $layouts_id = apply_filters( 'ot_migrate_layouts_id', '' );
5460
-
5461
  // Attempt to migrate Layouts
5462
  if ( ! empty( $layouts_id ) && get_option( ot_layouts_id() ) === false && ot_layouts_id() !== $layouts_id ) {
5463
-
5464
  // Old options
5465
  $layouts = get_option( $layouts_id );
5466
-
5467
  // Migrate to new ID
5468
  update_option( ot_layouts_id(), $layouts );
5469
-
5470
  }
5471
 
5472
  }
@@ -5476,8 +5476,8 @@ if ( ! function_exists( 'ot_maybe_migrate_layouts' ) ) {
5476
  /**
5477
  * Returns an array with the post format gallery meta box.
5478
  *
5479
- * @param mixed $pages Excepts a comma separated string or array of
5480
- * post_types and is what tells the metabox where to
5481
  * display. Default 'post'.
5482
  * @return array
5483
  *
@@ -5488,10 +5488,10 @@ function ot_meta_box_post_format_gallery( $pages = 'post' ) {
5488
 
5489
  if ( ! current_theme_supports( 'post-formats' ) || ! in_array( 'gallery', current( get_theme_support( 'post-formats' ) ) ) )
5490
  return false;
5491
-
5492
  if ( is_string( $pages ) )
5493
  $pages = explode( ',', $pages );
5494
-
5495
  return apply_filters( 'ot_meta_box_post_format_gallery', array(
5496
  'id' => 'ot-post-format-gallery',
5497
  'title' => __( 'Gallery', 'option-tree' ),
@@ -5516,8 +5516,8 @@ function ot_meta_box_post_format_gallery( $pages = 'post' ) {
5516
  /**
5517
  * Returns an array with the post format link metabox.
5518
  *
5519
- * @param mixed $pages Excepts a comma separated string or array of
5520
- * post_types and is what tells the metabox where to
5521
  * display. Default 'post'.
5522
  * @return array
5523
  *
@@ -5525,13 +5525,13 @@ function ot_meta_box_post_format_gallery( $pages = 'post' ) {
5525
  * @since 2.4.0
5526
  */
5527
  function ot_meta_box_post_format_link( $pages = 'post' ) {
5528
-
5529
  if ( ! current_theme_supports( 'post-formats' ) || ! in_array( 'link', current( get_theme_support( 'post-formats' ) ) ) )
5530
  return false;
5531
-
5532
  if ( is_string( $pages ) )
5533
  $pages = explode( ',', $pages );
5534
-
5535
  return apply_filters( 'ot_meta_box_post_format_link', array(
5536
  'id' => 'ot-post-format-link',
5537
  'title' => __( 'Link', 'option-tree' ),
@@ -5562,8 +5562,8 @@ function ot_meta_box_post_format_link( $pages = 'post' ) {
5562
  /**
5563
  * Returns an array with the post format quote metabox.
5564
  *
5565
- * @param mixed $pages Excepts a comma separated string or array of
5566
- * post_types and is what tells the metabox where to
5567
  * display. Default 'post'.
5568
  * @return array
5569
  *
@@ -5571,10 +5571,10 @@ function ot_meta_box_post_format_link( $pages = 'post' ) {
5571
  * @since 2.4.0
5572
  */
5573
  function ot_meta_box_post_format_quote( $pages = 'post' ) {
5574
-
5575
  if ( ! current_theme_supports( 'post-formats' ) || ! in_array( 'quote', current( get_theme_support( 'post-formats' ) ) ) )
5576
  return false;
5577
-
5578
  if ( is_string( $pages ) )
5579
  $pages = explode( ',', $pages );
5580
 
@@ -5622,8 +5622,8 @@ function ot_meta_box_post_format_quote( $pages = 'post' ) {
5622
  /**
5623
  * Returns an array with the post format video metabox.
5624
  *
5625
- * @param mixed $pages Excepts a comma separated string or array of
5626
- * post_types and is what tells the metabox where to
5627
  * display. Default 'post'.
5628
  * @return array
5629
  *
@@ -5631,13 +5631,13 @@ function ot_meta_box_post_format_quote( $pages = 'post' ) {
5631
  * @since 2.4.0
5632
  */
5633
  function ot_meta_box_post_format_video( $pages = 'post' ) {
5634
-
5635
  if ( ! current_theme_supports( 'post-formats' ) || ! in_array( 'video', current( get_theme_support( 'post-formats' ) ) ) )
5636
  return false;
5637
-
5638
  if ( is_string( $pages ) )
5639
  $pages = explode( ',', $pages );
5640
-
5641
  return apply_filters( 'ot_meta_box_post_format_video', array(
5642
  'id' => 'ot-post-format-video',
5643
  'title' => __( 'Video', 'option-tree' ),
@@ -5661,8 +5661,8 @@ function ot_meta_box_post_format_video( $pages = 'post' ) {
5661
  /**
5662
  * Returns an array with the post format audio metabox.
5663
  *
5664
- * @param mixed $pages Excepts a comma separated string or array of
5665
- * post_types and is what tells the metabox where to
5666
  * display. Default 'post'.
5667
  * @return array
5668
  *
@@ -5670,13 +5670,13 @@ function ot_meta_box_post_format_video( $pages = 'post' ) {
5670
  * @since 2.4.0
5671
  */
5672
  function ot_meta_box_post_format_audio( $pages = 'post' ) {
5673
-
5674
  if ( ! current_theme_supports( 'post-formats' ) || ! in_array( 'audio', current( get_theme_support( 'post-formats' ) ) ) )
5675
  return false;
5676
-
5677
  if ( is_string( $pages ) )
5678
  $pages = explode( ',', $pages );
5679
-
5680
  return apply_filters( 'ot_meta_box_post_format_audio', array(
5681
  'id' => 'ot-post-format-audio',
5682
  'title' => __( 'Audio', 'option-tree' ),
@@ -5710,33 +5710,33 @@ function ot_meta_box_post_format_audio( $pages = 'post' ) {
5710
  if ( ! function_exists( 'ot_get_option_type_by_id' ) ) {
5711
 
5712
  function ot_get_option_type_by_id( $option_id, $settings_id = '' ) {
5713
-
5714
  if ( empty( $settings_id ) ) {
5715
-
5716
  $settings_id = ot_settings_id();
5717
-
5718
  }
5719
-
5720
  $settings = get_option( $settings_id, array() );
5721
-
5722
  if ( isset( $settings['settings'] ) ) {
5723
-
5724
  foreach( $settings['settings'] as $value ) {
5725
-
5726
  if ( $option_id == $value['id'] && isset( $value['type'] ) ) {
5727
-
5728
  return $value['type'];
5729
-
5730
  }
5731
-
5732
  }
5733
-
5734
  }
5735
-
5736
  return false;
5737
-
5738
  }
5739
-
5740
  }
5741
 
5742
  /**
@@ -5751,7 +5751,7 @@ function _ot_settings_potential_shared_terms() {
5751
 
5752
  $options = array();
5753
  $settings = get_option( ot_settings_id(), array() );
5754
- $option_types = array(
5755
  'category-checkbox',
5756
  'category-select',
5757
  'tag-checkbox',
@@ -5782,7 +5782,7 @@ function _ot_settings_potential_shared_terms() {
5782
  }
5783
 
5784
  if ( ! empty( $sub_options ) ) {
5785
- $options[] = array(
5786
  'id' => $item['id'],
5787
  'taxonomy' => $value['taxonomy'],
5788
  'parent' => $value['id'],
@@ -5798,7 +5798,7 @@ function _ot_settings_potential_shared_terms() {
5798
  if ( in_array( $value['type'], $option_types ) ) {
5799
  $saved = ot_get_option( $value['id'] );
5800
  if ( ! empty( $saved ) ) {
5801
- $options[] = array(
5802
  'id' => $value['id'],
5803
  'taxonomy' => $value['taxonomy'],
5804
  'value' => $saved
@@ -5829,7 +5829,7 @@ function _ot_meta_box_potential_shared_terms() {
5829
 
5830
  $options = array();
5831
  $settings = $ot_meta_boxes;
5832
- $option_types = array(
5833
  'category-checkbox',
5834
  'category-select',
5835
  'tag-checkbox',
@@ -5859,9 +5859,9 @@ function _ot_meta_box_potential_shared_terms() {
5859
  }
5860
 
5861
  }
5862
-
5863
  if ( ! empty( $children[$value['id']] ) ) {
5864
- $options[] = array(
5865
  'id' => $value['id'],
5866
  'children' => $children[$value['id']],
5867
  'taxonomy' => $value['taxonomy'],
@@ -5872,7 +5872,7 @@ function _ot_meta_box_potential_shared_terms() {
5872
 
5873
  if ( in_array( $value['type'], $option_types ) ) {
5874
 
5875
- $options[] = array(
5876
  'id' => $value['id'],
5877
  'taxonomy' => $value['taxonomy'],
5878
  );
@@ -5997,7 +5997,7 @@ function ot_split_shared_term( $term_id, $new_term_id, $term_taxonomy_id, $taxon
5997
 
5998
  // Process the Meta Boxes
5999
  $meta_settings = _ot_meta_box_potential_shared_terms();
6000
- $option_types = array(
6001
  'category-checkbox',
6002
  'category-select',
6003
  'tag-checkbox',
@@ -6008,13 +6008,13 @@ function ot_split_shared_term( $term_id, $new_term_id, $term_taxonomy_id, $taxon
6008
 
6009
  if ( ! empty( $meta_settings ) ) {
6010
  $old_meta = array();
6011
-
6012
  foreach( $meta_settings as $option ) {
6013
 
6014
  if ( ! is_array( $option['taxonomy'] ) ) {
6015
  $option['taxonomy'] = explode( ',', $option['taxonomy'] );
6016
  }
6017
-
6018
  if ( ! in_array( $taxonomy, $option['taxonomy'] ) ) {
6019
  continue;
6020
  }
@@ -6074,9 +6074,9 @@ function ot_split_shared_term( $term_id, $new_term_id, $term_taxonomy_id, $taxon
6074
 
6075
  // Update
6076
  if ( $old_meta !== $new_meta ) {
6077
-
6078
  update_post_meta( $post_id, $option['id'], $new_meta, $old_meta );
6079
-
6080
  }
6081
 
6082
  }
@@ -6131,9 +6131,9 @@ function ot_split_shared_term( $term_id, $new_term_id, $term_taxonomy_id, $taxon
6131
 
6132
  // Update
6133
  if ( $old_meta !== $new_meta ) {
6134
-
6135
  update_post_meta( $post_id, $option['id'], $new_meta, $old_meta );
6136
-
6137
  }
6138
 
6139
  }
@@ -6152,4 +6152,4 @@ function ot_split_shared_term( $term_id, $new_term_id, $term_taxonomy_id, $taxon
6152
  add_action( 'split_shared_term', 'ot_split_shared_term', 10, 4 );
6153
 
6154
  /* End of file ot-functions-admin.php */
6155
- /* Location: ./includes/ot-functions-admin.php */
2
  /**
3
  * Functions used only while viewing the admin UI.
4
  *
5
+ * Limit loading these function only when needed
6
  * and not in the front end.
7
  *
8
  * @package OptionTree
24
  if ( ! function_exists( 'ot_register_theme_options_page' ) ) {
25
 
26
  function ot_register_theme_options_page() {
27
+
28
  /* get the settings array */
29
  $get_settings = get_option( ot_settings_id() );
30
+
31
  /* sections array */
32
  $sections = isset( $get_settings['sections'] ) ? $get_settings['sections'] : array();
33
+
34
  /* settings array */
35
  $settings = isset( $get_settings['settings'] ) ? $get_settings['settings'] : array();
36
+
37
  /* contexual_help array */
38
  $contextual_help = isset( $get_settings['contextual_help'] ) ? $get_settings['contextual_help'] : array();
39
+
40
  /* build the Theme Options */
41
  if ( function_exists( 'ot_register_settings' ) && OT_USE_THEME_OPTIONS ) {
42
+
43
  ot_register_settings( array(
44
  array(
45
  'id' => ot_options_id(),
46
+ 'pages' => array(
47
  array(
48
  'id' => 'niftycs_options',
49
  'parent_slug' => apply_filters( 'niftycs_options_parent_slug', null ),
62
  )
63
  )
64
  )
65
+ )
66
  );
67
+
68
  // Filters the options.php to add the minimum user capabilities.
69
  add_filter( 'option_page_capability_' . ot_options_id(), create_function( '$caps', "return '$caps';" ), 999 );
70
+
71
  }
72
+
73
  }
74
 
75
  }
88
 
89
  function ot_register_settings_page() {
90
  global $ot_has_custom_theme_options;
91
+
92
  // Display UI Builder admin notice
93
  if ( OT_SHOW_OPTIONS_UI == true && isset( $_REQUEST['page'] ) && $_REQUEST['page'] == 'ot-settings' && ( $ot_has_custom_theme_options == true || has_action( 'admin_init', 'custom_theme_options' ) || has_action( 'init', 'custom_theme_options' ) ) ) {
94
+
95
  function ot_has_custom_theme_options() {
96
+
97
  echo '<div class="error"><p>' . __( 'The Theme Options UI Builder is being overridden by a custom file in your theme. Any changes you make via the UI Builder will not be saved.', 'option-tree' ) . '</p></div>';
98
+
99
  }
100
+
101
  add_action( 'admin_notices', 'ot_has_custom_theme_options' );
102
+
103
  }
104
+
105
  // Create the filterable pages array
106
+ $ot_register_pages_array = array(
107
+ array(
108
  'id' => 'ot',
109
  'page_title' => __( 'OptionTree', 'option-tree' ),
110
  'menu_title' => __( 'OptionTree', 'option-tree' ),
303
  )
304
  )
305
  );
306
+
307
  // Loop over the settings and remove as needed.
308
  foreach( $ot_register_pages_array as $key => $page ) {
309
+
310
  // Remove various options from the Settings UI.
311
  if ( $page['id'] == 'settings' ) {
312
+
313
  // Remove the Theme Options UI
314
  if ( OT_SHOW_OPTIONS_UI == false ) {
315
+
316
  foreach( $page['sections'] as $section_key => $section ) {
317
  if ( $section['id'] == 'create_setting' ) {
318
  unset($ot_register_pages_array[$key]['sections'][$section_key]);
319
  }
320
  }
321
+
322
  foreach( $page['settings'] as $setting_key => $setting ) {
323
  if ( $setting['section'] == 'create_setting' ) {
324
  unset($ot_register_pages_array[$key]['settings'][$setting_key]);
325
  }
326
  }
327
+
328
  }
329
+
330
  // Remove parts of the Imports UI
331
  if ( OT_SHOW_SETTINGS_IMPORT == false ) {
332
+
333
  foreach( $page['settings'] as $setting_key => $setting ) {
334
  if ( $setting['section'] == 'import' && in_array( $setting['id'], array('import_xml_text', 'import_settings_text' ) ) ) {
335
  unset($ot_register_pages_array[$key]['settings'][$setting_key]);
336
  }
337
  }
338
+
339
  }
340
+
341
  // Remove parts of the Export UI
342
  if ( OT_SHOW_SETTINGS_EXPORT == false ) {
343
+
344
  foreach( $page['settings'] as $setting_key => $setting ) {
345
  if ( $setting['section'] == 'export' && in_array( $setting['id'], array('export_settings_file_text', 'export_settings_text' ) ) ) {
346
  unset($ot_register_pages_array[$key]['settings'][$setting_key]);
347
  }
348
  }
349
+
350
  }
351
+
352
  // Remove the Layouts UI
353
  if ( OT_SHOW_NEW_LAYOUT == false ) {
354
+
355
  foreach( $page['sections'] as $section_key => $section ) {
356
  if ( $section['id'] == 'layouts' ) {
357
  unset($ot_register_pages_array[$key]['sections'][$section_key]);
358
  }
359
  }
360
+
361
  foreach( $page['settings'] as $setting_key => $setting ) {
362
  if ( $setting['section'] == 'layouts' ) {
363
  unset($ot_register_pages_array[$key]['settings'][$setting_key]);
364
  }
365
  }
366
+
367
  }
368
+
369
  }
370
+
371
  // Remove the Documentation UI.
372
  if ( OT_SHOW_DOCS == false && $page['id'] == 'documentation' ) {
373
+
374
  unset( $ot_register_pages_array[$key] );
375
+
376
  }
377
+
378
  }
379
+
380
  $ot_register_pages_array = apply_filters( 'ot_register_pages_array', $ot_register_pages_array );
381
+
382
  // Register the pages.
383
  ot_register_settings( array(
384
  array(
387
  )
388
  )
389
  );
390
+
391
  }
392
 
393
  }
403
  if ( ! function_exists( 'ot_after_theme_options_save' ) ) {
404
 
405
  function ot_after_theme_options_save() {
406
+
407
  $page = isset( $_REQUEST['page'] ) ? $_REQUEST['page'] : '';
408
  $updated = isset( $_REQUEST['settings-updated'] ) && $_REQUEST['settings-updated'] == 'true' ? true : false;
409
+
410
  /* only execute after the theme options are saved */
411
  if ( apply_filters( 'niftycs_options_menu_slug', 'niftycs-options' ) == $page && $updated ) {
412
+
413
  /* grab a copy of the theme options */
414
  $options = get_option( ot_options_id() );
415
+
416
  /* execute the action hook and pass the theme options to it */
417
  do_action( 'ot_after_theme_options_save', $options );
418
+
419
  }
420
+
421
  }
422
 
423
  }
442
  if ( ! function_exists( 'ot_validate_setting' ) ) {
443
 
444
  function ot_validate_setting( $input, $type, $field_id, $wmpl_id = '' ) {
445
+
446
  /* exit early if missing data */
447
  if ( ! $input || ! $type || ! $field_id )
448
  return $input;
449
+
450
  $input = apply_filters( 'ot_validate_setting', $input, $type, $field_id );
451
+
452
  /* WPML Register and Unregister strings */
453
  if ( ! empty( $wmpl_id ) ) {
454
+
455
  /* Allow filtering on the WPML option types */
456
  $single_string_types = apply_filters( 'ot_wpml_option_types', array( 'text', 'textarea', 'textarea-simple' ) );
457
+
458
  if ( in_array( $type, $single_string_types ) ) {
459
+
460
  if ( ! empty( $input ) ) {
461
+
462
  ot_wpml_register_string( $wmpl_id, $input );
463
+
464
  } else {
465
+
466
  ot_wpml_unregister_string( $wmpl_id );
467
+
468
  }
469
+
470
  }
471
+
472
  }
473
+
474
  if ( 'background' == $type ) {
475
 
476
  $input['background-color'] = ot_validate_setting( $input['background-color'], 'colorpicker', $field_id );
477
+
478
  $input['background-image'] = ot_validate_setting( $input['background-image'], 'upload', $field_id );
479
+
480
  // Loop over array and check for values
481
  foreach( (array) $input as $key => $value ) {
482
  if ( ! empty( $value ) ) {
483
  $has_value = true;
484
  }
485
  }
486
+
487
  // No value; set to empty
488
  if ( ! isset( $has_value ) ) {
489
  $input = '';
490
  }
491
+
492
  } else if ( 'border' == $type ) {
493
+
494
  // Loop over array and set errors or unset key from array.
495
  foreach( $input as $key => $value ) {
496
+
497
  // Validate width
498
  if ( $key == 'width' && ! empty( $value ) && ! is_numeric( $value ) ) {
499
+
500
  $input[$key] = '0';
501
+
502
  add_settings_error( 'option-tree', 'invalid_border_width', sprintf( __( 'The %s input field for %s only allows numeric values.', 'option-tree' ), '<code>width</code>', '<code>' . $field_id . '</code>' ), 'error' );
503
+
504
  }
505
+
506
  // Validate color
507
  if ( $key == 'color' && ! empty( $value ) ) {
508
 
509
  $input[$key] = ot_validate_setting( $value, 'colorpicker', $field_id );
510
+
511
  }
512
+
513
  // Unset keys with empty values.
514
  if ( empty( $value ) && strlen( $value ) == 0 ) {
515
  unset( $input[$key] );
516
  }
517
+
518
  }
519
+
520
  if ( empty( $input ) ) {
521
  $input = '';
522
  }
523
+
524
  } else if ( 'box-shadow' == $type ) {
525
+
526
  // Validate inset
527
  $input['inset'] = isset( $input['inset'] ) ? 'inset' : '';
528
+
529
  // Validate offset-x
530
  $input['offset-x'] = ot_validate_setting( $input['offset-x'], 'text', $field_id );
531
+
532
  // Validate offset-y
533
  $input['offset-y'] = ot_validate_setting( $input['offset-y'], 'text', $field_id );
534
+
535
  // Validate blur-radius
536
  $input['blur-radius'] = ot_validate_setting( $input['blur-radius'], 'text', $field_id );
537
+
538
  // Validate spread-radius
539
  $input['spread-radius'] = ot_validate_setting( $input['spread-radius'], 'text', $field_id );
540
+
541
  // Validate color
542
  $input['color'] = ot_validate_setting( $input['color'], 'colorpicker', $field_id );
543
+
544
  // Unset keys with empty values.
545
  foreach( $input as $key => $value ) {
546
  if ( empty( $value ) && strlen( $value ) == 0 ) {
547
  unset( $input[$key] );
548
  }
549
  }
550
+
551
  // Set empty array to empty string.
552
  if ( empty( $input ) ) {
553
  $input = '';
554
  }
555
+
556
  } else if ( 'colorpicker' == $type ) {
557
 
558
  /* return empty & set error */
559
  if ( 0 === preg_match( '/^#([a-f0-9]{6}|[a-f0-9]{3})$/i', $input ) && 0 === preg_match( '/^rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9\.]{1,4})\s*\)/i', $input ) ) {
560
+
561
  $input = '';
562
+
563
  add_settings_error( 'option-tree', 'invalid_hex', sprintf( __( 'The %s Colorpicker only allows valid hexadecimal or rgba values.', 'option-tree' ), '<code>' . $field_id . '</code>' ), 'error' );
564
+
565
  }
566
+
567
  } else if ( 'colorpicker-opacity' == $type ) {
568
 
569
  // Not allowed
575
  $input = ot_validate_setting( $input, 'colorpicker', $field_id );
576
 
577
  } else if ( in_array( $type, array( 'css', 'javascript', 'text', 'textarea', 'textarea-simple' ) ) ) {
578
+
579
  if ( ! current_user_can( 'unfiltered_html' ) && OT_ALLOW_UNFILTERED_HTML == false ) {
580
+
581
  $input = wp_kses_post( $input );
582
+
583
  }
584
+
585
  } else if ( 'dimension' == $type ) {
586
+
587
  // Loop over array and set error keys or unset key from array.
588
  foreach( $input as $key => $value ) {
589
  if ( ! empty( $value ) && ! is_numeric( $value ) && $key !== 'unit' ) {
596
 
597
  /* return 0 & set error */
598
  if ( isset( $errors ) ) {
599
+
600
  foreach( $errors as $error ) {
601
+
602
  $input[$error] = '0';
603
+
604
  add_settings_error( 'option-tree', 'invalid_dimension_' . $error, sprintf( __( 'The %s input field for %s only allows numeric values.', 'option-tree' ), '<code>' . $error . '</code>', '<code>' . $field_id . '</code>' ), 'error' );
605
+
606
  }
607
+
608
  }
609
+
610
  if ( empty( $input ) ) {
611
  $input = '';
612
  }
613
+
614
  } else if ( 'google-fonts' == $type ) {
615
+
616
  unset($input['%key%']);
617
+
618
  // Loop over array and check for values
619
  if ( is_array( $input ) && ! empty( $input ) ) {
620
  $input = array_values( $input );
624
  if ( empty( $input ) ) {
625
  $input = '';
626
  }
627
+
628
  } else if ( 'link-color' == $type ) {
629
+
630
  // Loop over array and check for values
631
  if ( is_array( $input ) && ! empty( $input ) ) {
632
  foreach( $input as $key => $value ) {
636
  }
637
  }
638
  }
639
+
640
  // No value; set to empty
641
  if ( ! isset( $has_value ) ) {
642
  $input = '';
643
  }
644
+
645
  } else if ( 'measurement' == $type ) {
646
+
647
  $input[0] = sanitize_text_field( $input[0] );
648
+
649
  // No value; set to empty
650
  if ( empty( $input[0] ) && strlen( $input[0] ) == 0 && empty( $input[1] ) ) {
651
  $input = '';
652
  }
653
+
654
  } else if ( 'spacing' == $type ) {
655
+
656
  // Loop over array and set error keys or unset key from array.
657
  foreach( $input as $key => $value ) {
658
  if ( ! empty( $value ) && ! is_numeric( $value ) && $key !== 'unit' ) {
665
 
666
  /* return 0 & set error */
667
  if ( isset( $errors ) ) {
668
+
669
  foreach( $errors as $error ) {
670
+
671
  $input[$error] = '0';
672
+
673
  add_settings_error( 'option-tree', 'invalid_spacing_' . $error, sprintf( __( 'The %s input field for %s only allows numeric values.', 'option-tree' ), '<code>' . $error . '</code>', '<code>' . $field_id . '</code>' ), 'error' );
674
+
675
  }
676
+
677
  }
678
+
679
  if ( empty( $input ) ) {
680
  $input = '';
681
  }
682
+
683
  } else if ( 'typography' == $type && isset( $input['font-color'] ) ) {
684
+
685
  $input['font-color'] = ot_validate_setting( $input['font-color'], 'colorpicker', $field_id );
686
+
687
  // Loop over array and check for values
688
  foreach( $input as $key => $value ) {
689
  if ( ! empty( $value ) ) {
690
  $has_value = true;
691
  }
692
  }
693
+
694
  // No value; set to empty
695
  if ( ! isset( $has_value ) ) {
696
  $input = '';
697
  }
698
+
699
  } else if ( 'upload' == $type ) {
700
 
701
  if( filter_var( $input, FILTER_VALIDATE_INT ) === FALSE ) {
702
  $input = esc_url_raw( $input );
703
  }
704
+
705
  } else if ( 'gallery' == $type ) {
706
 
707
  $input = trim( $input );
708
+
709
  } else if ( 'social-links' == $type ) {
710
+
711
  // Loop over array and check for values, plus sanitize the text field
712
  foreach( (array) $input as $key => $value ) {
713
  if ( ! empty( $value ) && is_array( $value ) ) {
719
  }
720
  }
721
  }
722
+
723
  // No value; set to empty
724
  if ( ! isset( $has_value ) ) {
725
  $input = '';
726
  }
727
+
728
  }
729
+
730
  $input = apply_filters( 'ot_after_validate_setting', $input, $type, $field_id );
731
+
732
  return $input;
733
+
734
  }
735
 
736
  }
747
 
748
  function ot_admin_styles() {
749
  global $wp_styles, $post;
750
+
751
  /* execute styles before actions */
752
  do_action( 'ot_admin_styles_before' );
753
+
754
  /* load WP colorpicker */
755
  wp_enqueue_style( 'wp-color-picker' );
756
+
757
  wp_enqueue_style('wp-jquery-ui-dialog');
758
+
759
  /* load admin styles */
760
  wp_enqueue_style( 'ot-admin-css', OT_URL . 'assets/css/ot-admin.css', false, OT_VERSION );
761
+
762
  /* load the RTL stylesheet */
763
  $wp_styles->add_data( 'ot-admin-css','rtl', true );
764
+
765
  /* Remove styles added by the Easy Digital Downloads plugin */
766
  if ( isset( $post->post_type ) && $post->post_type == 'post' )
767
  wp_dequeue_style( 'jquery-ui-css' );
773
  *
774
  * @param array $screen_ids An array of screen IDs.
775
  */
776
+ $screen_ids = apply_filters( 'ot_dequeue_jquery_ui_css_screen_ids', array(
777
+ 'toplevel_page_ot-settings',
778
+ 'optiontree_page_ot-documentation',
779
+ 'appearance_page_niftycs-options'
780
  ) );
781
+
782
  /* Remove styles added by the WP Review plugin and any custom pages added through filtering */
783
  if ( in_array( get_current_screen()->id, $screen_ids ) ) {
784
  wp_dequeue_style( 'plugin_name-admin-ui-css' );
785
  wp_dequeue_style( 'jquery-ui-css' );
786
  }
787
+
788
  /* execute styles after actions */
789
  do_action( 'ot_admin_styles_after' );
790
 
791
  }
792
+
793
  }
794
 
795
  /**
807
  if ( ! function_exists( 'ot_admin_scripts' ) ) {
808
 
809
  function ot_admin_scripts() {
810
+
811
  /* execute scripts before actions */
812
  do_action( 'ot_admin_scripts_before' );
813
+
814
  if ( function_exists( 'wp_enqueue_media' ) ) {
815
  /* WP 3.5 Media Uploader */
816
  wp_enqueue_media();
829
  wp_enqueue_script( 'wp-color-picker' );
830
 
831
  /* load Ace Editor for CSS Editing */
832
+ wp_enqueue_script( 'ace-editor', 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.1.3/ace.js', null, '1.1.3' );
833
 
834
  /* load jQuery UI timepicker addon */
835
  wp_enqueue_script( 'jquery-ui-timepicker', OT_URL . 'assets/js/vendor/jquery/jquery-ui-timepicker.js', array( 'jquery', 'jquery-ui-slider', 'jquery-ui-datepicker' ), '1.4.3' );
841
 
842
 
843
  /* load all the required scripts */
844
+
845
  wp_enqueue_script('jquery-ui-dialog');
846
  wp_enqueue_script( 'ot-admin-js', OT_URL . 'assets/js/ot-admin.js', array( 'jquery', 'jquery-ui-tabs', 'jquery-ui-sortable', 'jquery-ui-slider', 'wp-color-picker', 'ace-editor', 'jquery-ui-datepicker', 'jquery-ui-timepicker' ), OT_VERSION );
847
 
848
+
849
+
850
 
851
 
852
  /* create localized JS array */
853
+ $localized_array = array(
854
  'ajax' => admin_url( 'admin-ajax.php' ),
855
  'nonce' => wp_create_nonce( 'option_tree' ),
856
  'upload_text' => apply_filters( 'ot_upload_text', __( 'Send to OptionTree', 'option-tree' ) ),
860
  'remove_agree' => __( 'Are you sure you want to remove this?', 'option-tree' ),
861
  'activate_layout_agree' => __( 'Are you sure you want to activate this layout?', 'option-tree' ),
862
  'setting_limit' => __( 'Sorry, you can\'t have settings three levels deep.', 'option-tree' ),
863
+ 'delete' => __( 'Delete Gallery', 'option-tree' ),
864
+ 'edit' => __( 'Edit Gallery', 'option-tree' ),
865
+ 'create' => __( 'Create Gallery', 'option-tree' ),
866
  'confirm' => __( 'Are you sure you want to delete this Gallery?', 'option-tree' ),
867
  'date_current' => __( 'Today', 'option-tree' ),
868
  'date_time_current' => __( 'Now', 'option-tree' ),
872
  'weforms_dialog_upsell_title' => '<img alt="' . __('weForms', 'option-tree') . '" title="' . __('weForms', 'option-tree') . '" src="' . OT_URL . '/assets/images/weforms-logo-white.png' . '">',
873
  'weforms_install_url' => add_query_arg(array('action' => 'install_weforms'), admin_url('admin.php')),
874
  );
875
+
876
  /* localized script attached to 'option_tree' */
877
  wp_localize_script( 'ot-admin-js', 'option_tree', $localized_array );
878
+
879
  /* execute scripts after actions */
880
  do_action( 'ot_admin_scripts_after' );
881
 
882
  }
883
+
884
  }
885
 
886
  /**
896
  if ( ! function_exists( 'ot_get_media_post_ID' ) ) {
897
 
898
  function ot_get_media_post_ID() {
899
+
900
  // Option ID
901
  $option_id = 'ot_media_post_ID';
902
+
903
  // Get the media post ID
904
  $post_ID = get_option( $option_id, false );
905
+
906
  // Add $post_ID to the DB
907
  if ( $post_ID === false || empty( $post_ID ) ) {
908
  global $wpdb;
909
+
910
  // Get the media post ID
911
  $post_ID = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE `post_title` = 'Media' AND `post_type` = 'option-tree' AND `post_status` = 'private'" );
912
+
913
  // Add to the DB
914
  if ( $post_ID !== null )
915
  update_option( $option_id, $post_ID );
916
 
917
  }
918
+
919
  return $post_ID;
920
+
921
  }
922
 
923
  }
933
  * @since 2.0
934
  */
935
  if ( ! function_exists( 'ot_create_media_post' ) ) {
936
+
937
  function ot_create_media_post() {
938
+
939
  $regsiter_post_type = 'register_' . 'post_type';
940
  $regsiter_post_type( 'option-tree', array(
941
  'labels' => array( 'name' => __( 'Nifty options', 'option-tree' ) ),
949
  'can_export' => false,
950
  'show_in_nav_menus' => false
951
  ) );
952
+
953
  /* look for custom page */
954
  $post_id = ot_get_media_post_ID();
955
+
956
  /* no post exists */
957
  if ( $post_id == 0 ) {
958
+
959
  /* create post object */
960
  $_p = array();
961
  $_p['post_title'] = 'Media';
964
  $_p['post_type'] = 'option-tree';
965
  $_p['comment_status'] = 'closed';
966
  $_p['ping_status'] = 'closed';
967
+
968
  /* insert the post into the database */
969
  wp_insert_post( $_p );
970
+
971
  }
972
+
973
  }
974
 
975
  }
986
 
987
  function ot_default_settings() {
988
  global $wpdb;
989
+
990
  if ( ! get_option( ot_settings_id() ) ) {
991
+
992
  $section_count = 0;
993
  $settings_count = 0;
994
  $settings = array();
995
  $table_name = $wpdb->prefix . 'option_tree';
996
+
997
  if ( $wpdb->get_var( $wpdb->prepare( "SHOW TABLES LIKE %s", $table_name ) ) == $table_name && $old_settings = $wpdb->get_results( "SELECT * FROM $table_name ORDER BY item_sort ASC" ) ) {
998
+
999
  foreach ( $old_settings as $setting ) {
1000
+
1001
  /* heading is a section now */
1002
  if ( $setting->item_type == 'heading' ) {
1003
+
1004
  /* add section to the sections array */
1005
  $settings['sections'][$section_count]['id'] = $setting->item_id;
1006
  $settings['sections'][$section_count]['title'] = $setting->item_title;
1007
+
1008
  /* save the last section id to use in creating settings */
1009
  $section = $setting->item_id;
1010
+
1011
  /* increment the section count */
1012
  $section_count++;
1013
+
1014
  } else {
1015
+
1016
  /* add setting to the settings array */
1017
  $settings['settings'][$settings_count]['id'] = $setting->item_id;
1018
  $settings['settings'][$settings_count]['label'] = $setting->item_title;
1021
  $settings['settings'][$settings_count]['type'] = ot_map_old_option_types( $setting->item_type );
1022
  $settings['settings'][$settings_count]['std'] = '';
1023
  $settings['settings'][$settings_count]['class'] = '';
1024
+
1025
  /* textarea rows */
1026
  $rows = '';
1027
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'css', 'javascript', 'textarea' ) ) ) {
1032
  }
1033
  }
1034
  $settings['settings'][$settings_count]['rows'] = $rows;
1035
+
1036
  /* post type */
1037
  $post_type = '';
1038
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'custom-post-type-select', 'custom-post-type-checkbox' ) ) ) {
1043
  }
1044
  }
1045
  $settings['settings'][$settings_count]['post_type'] = $post_type;
1046
+
1047
  /* choices */
1048
  $choices = array();
1049
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'checkbox', 'radio', 'select' ) ) ) {
1052
  }
1053
  }
1054
  $settings['settings'][$settings_count]['choices'] = $choices;
1055
+
1056
  $settings_count++;
1057
  }
1058
+
1059
  }
1060
+
1061
  /* make sure each setting has a section just incase */
1062
  if ( isset( $settings['sections'] ) && isset( $settings['settings'] ) ) {
1063
  foreach( $settings['settings'] as $k => $setting ) {
1066
  }
1067
  }
1068
  }
1069
+
1070
  }
1071
+
1072
  /* if array if not properly formed create fallback settings array */
1073
  if ( ! isset( $settings['sections'] ) || ! isset( $settings['settings'] ) ) {
1074
+
1075
  $settings = array(
1076
  'sections' => array(
1077
  array(
1094
  )
1095
  )
1096
  );
1097
+
1098
  }
1099
+
1100
  /* update the settings array */
1101
  update_option( ot_settings_id(), $settings );
1102
+
1103
  /* get option tree array */
1104
  $options = get_option( ot_options_id() );
1105
+
1106
  /* validate options */
1107
  if ( is_array( $options ) ) {
1108
 
1109
  foreach( $settings['settings'] as $setting ) {
1110
+
1111
  if ( isset( $options[$setting['id']] ) ) {
1112
+
1113
  $content = ot_stripslashes( $options[$setting['id']] );
1114
+
1115
  $options[$setting['id']] = ot_validate_setting( $content, $setting['type'], $setting['id'] );
1116
+
1117
  }
1118
+
1119
  }
1120
+
1121
  /* execute the action hook and pass the theme options to it */
1122
  do_action( 'ot_before_theme_options_save', $options );
1123
+
1124
  /* update the option tree array */
1125
  update_option( ot_options_id(), $options );
1126
+
1127
  }
1128
+
1129
  }
1130
+
1131
  }
1132
 
1133
  }
1143
  if ( ! function_exists( 'ot_save_css' ) ) {
1144
 
1145
  function ot_save_css( $options ) {
1146
+
1147
  /* grab a copy of the settings */
1148
  $settings = get_option( ot_settings_id() );
1149
+
1150
  /* has settings */
1151
  if ( isset( $settings['settings'] ) ) {
1152
+
1153
  /* loop through sections and insert CSS when needed */
1154
  foreach( $settings['settings'] as $k => $setting ) {
1155
+
1156
  /* is the CSS option type */
1157
  if ( isset( $setting['type'] ) && 'css' == $setting['type'] ) {
1158
 
1159
  /* insert CSS into dynamic.css */
1160
  if ( isset( $options[$setting['id']] ) && '' !== $options[$setting['id']] ) {
1161
+
1162
  ot_insert_css_with_markers( $setting['id'], $options[$setting['id']] );
1163
+
1164
  /* remove old CSS from dynamic.css */
1165
  } else {
1166
+
1167
  ot_remove_old_css( $setting['id'] );
1168
+
1169
  }
1170
+
1171
  }
1172
+
1173
  }
1174
+
1175
  }
1176
+
1177
  }
1178
 
1179
  }
1180
+
1181
  /**
1182
  * Helper function to load filters for XML mime type.
1183
  *
1189
  if ( ! function_exists( 'ot_add_xml_to_upload_filetypes' ) ) {
1190
 
1191
  function ot_add_xml_to_upload_filetypes() {
1192
+
1193
  add_filter( 'upload_mimes', 'ot_upload_mimes' );
1194
  add_filter( 'wp_mime_type_icon', 'ot_xml_mime_type_icon', 10, 2 );
1195
+
1196
  }
1197
 
1198
  }
1199
 
1200
  /**
1201
+ * Filter 'upload_mimes' and add xml.
1202
  *
1203
  * @param array $mimes An array of valid upload mime types
1204
  * @return array
1209
  if ( ! function_exists( 'ot_upload_mimes' ) ) {
1210
 
1211
  function ot_upload_mimes( $mimes ) {
1212
+
1213
  $mimes['xml'] = 'application/xml';
1214
+
1215
  return $mimes;
1216
+
1217
  }
1218
 
1219
  }
1231
  if ( ! function_exists( 'ot_xml_mime_type_icon' ) ) {
1232
 
1233
  function ot_xml_mime_type_icon( $icon, $mime ) {
1234
+
1235
  if ( $mime == 'application/xml' || $mime == 'text/xml' )
1236
  return wp_mime_type_icon( 'document' );
1237
+
1238
  return $icon;
1239
+
1240
  }
1241
 
1242
  }
1252
  if ( ! function_exists( 'ot_import' ) ) {
1253
 
1254
  function ot_import() {
1255
+
1256
  /* check and verify import xml nonce */
1257
  if ( isset( $_POST['import_xml_nonce'] ) && wp_verify_nonce( $_POST['import_xml_nonce'], 'import_xml_form' ) ) {
1258
 
1259
  /* import input value */
1260
  $file = isset( $_POST['import_xml'] ) ? esc_url( $_POST['import_xml'] ) : '';
1261
+
1262
  /* validate xml file */
1263
  if ( preg_match( "/(.xml)$/i", $file ) && class_exists( 'SimpleXMLElement' ) ) {
1264
+
1265
  $settings = ot_import_xml( $file );
1266
+
1267
  }
1268
+
1269
  /* default message */
1270
  $message = 'failed';
1271
+
1272
  /* cleanup, save, & show success message */
1273
  if ( isset( $settings ) && ! empty( $settings ) ) {
1274
+
1275
  /* delete file */
1276
  if ( $file ) {
1277
  global $wpdb;
1278
  $attachmentid = $wpdb->get_var( "SELECT ID FROM {$wpdb->posts} WHERE guid='$file'" );
1279
  wp_delete_attachment( $attachmentid, true );
1280
  }
1281
+
1282
  /* update settings */
1283
  update_option( ot_settings_id(), $settings );
1284
+
1285
  /* set message */
1286
  $message = 'success';
1287
+
1288
  }
1289
+
1290
  /* redirect */
1291
+ wp_safe_redirect( esc_url_raw( add_query_arg( array( 'action' => 'import-xml', 'message' => $message ), $_POST['_wp_http_referer'] ) ) );
1292
  exit;
1293
+
1294
  }
1295
+
1296
  /* check and verify import settings nonce */
1297
  if ( isset( $_POST['import_settings_nonce'] ) && wp_verify_nonce( $_POST['import_settings_nonce'], 'import_settings_form' ) ) {
1298
 
1299
  /* textarea value */
1300
  $textarea = isset( $_POST['import_settings'] ) ? unserialize( ot_decode( $_POST['import_settings'] ) ) : '';
1301
+
1302
  /* default message */
1303
  $message = 'failed';
1304
+
1305
  /* is array: save & show success message */
1306
  if ( is_array( $textarea ) ) {
1307
  update_option( ot_settings_id(), $textarea );
1308
  $message = 'success';
1309
  }
1310
+
1311
  /* redirect */
1312
+ wp_safe_redirect( esc_url_raw( add_query_arg( array( 'action' => 'import-settings', 'message' => $message ), $_POST['_wp_http_referer'] ) ) );
1313
  exit;
1314
+
1315
  }
1316
+
1317
  /* check and verify import theme options data nonce */
1318
  if ( isset( $_POST['import_data_nonce'] ) && wp_verify_nonce( $_POST['import_data_nonce'], 'import_data_form' ) ) {
1319
+
1320
  /* default message */
1321
  $message = 'failed';
1322
+
1323
  /* textarea value */
1324
  $options = isset( $_POST['import_data'] ) ? unserialize( ot_decode( $_POST['import_data'] ) ) : '';
1325
+
1326
  /* get settings array */
1327
  $settings = get_option( ot_settings_id() );
1328
+
1329
  /* has options */
1330
  if ( is_array( $options ) ) {
1331
+
1332
  /* validate options */
1333
  if ( is_array( $settings ) ) {
1334
+
1335
  foreach( $settings['settings'] as $setting ) {
1336
+
1337
  if ( isset( $options[$setting['id']] ) ) {
1338
+
1339
  $content = ot_stripslashes( $options[$setting['id']] );
1340
+
1341
  $options[$setting['id']] = ot_validate_setting( $content, $setting['type'], $setting['id'] );
1342
+
1343
  }
1344
+
1345
  }
1346
+
1347
  }
1348
+
1349
  /* execute the action hook and pass the theme options to it */
1350
  do_action( 'ot_before_theme_options_save', $options );
1351
+
1352
  /* update the option tree array */
1353
  update_option( ot_options_id(), $options );
1354
+
1355
  $message = 'success';
1356
+
1357
  }
1358
+
1359
  /* redirect accordingly */
1360
+ wp_safe_redirect( esc_url_raw( add_query_arg( array( 'action' => 'import-data', 'message' => $message ), $_POST['_wp_http_referer'] ) ) );
1361
  exit;
1362
+
1363
  }
1364
+
1365
  /* check and verify import layouts nonce */
1366
  if ( isset( $_POST['import_layouts_nonce'] ) && wp_verify_nonce( $_POST['import_layouts_nonce'], 'import_layouts_form' ) ) {
1367
+
1368
  /* default message */
1369
  $message = 'failed';
1370
+
1371
  /* textarea value */
1372
  $layouts = isset( $_POST['import_layouts'] ) ? unserialize( ot_decode( $_POST['import_layouts'] ) ) : '';
1373
+
1374
  /* get settings array */
1375
  $settings = get_option( ot_settings_id() );
1376
+
1377
  /* has layouts */
1378
  if ( is_array( $layouts ) ) {
1379
+
1380
  /* validate options */
1381
  if ( is_array( $settings ) ) {
1382
+
1383
  foreach( $layouts as $key => $value ) {
1384
+
1385
  if ( $key == 'active_layout' )
1386
  continue;
1387
+
1388
  $options = unserialize( ot_decode( $value ) );
1389
+
1390
  foreach( $settings['settings'] as $setting ) {
1391
 
1392
  if ( isset( $options[$setting['id']] ) ) {
1393
+
1394
  $content = ot_stripslashes( $options[$setting['id']] );
1395
+
1396
  $options[$setting['id']] = ot_validate_setting( $content, $setting['type'], $setting['id'] );
1397
+
1398
  }
1399
+
1400
  }
1401
 
1402
  $layouts[$key] = ot_encode( serialize( $options ) );
1403
+
1404
  }
1405
+
1406
  }
1407
+
1408
  /* update the option tree array */
1409
  if ( isset( $layouts['active_layout'] ) ) {
1410
+
1411
  $new_options = unserialize( ot_decode( $layouts[$layouts['active_layout']] ) );
1412
+
1413
  /* execute the action hook and pass the theme options to it */
1414
  do_action( 'ot_before_theme_options_save', $new_options );
1415
+
1416
  update_option( ot_options_id(), $new_options );
1417
+
1418
  }
1419
+
1420
  /* update the option tree layouts array */
1421
  update_option( ot_layouts_id(), $layouts );
1422
+
1423
  $message = 'success';
1424
+
1425
  }
1426
+
1427
  /* redirect accordingly */
1428
+ wp_safe_redirect( esc_url_raw( add_query_arg( array( 'action' => 'import-layouts', 'message' => $message ), $_POST['_wp_http_referer'] ) ) );
1429
  exit;
1430
+
1431
  }
1432
+
1433
  return false;
1434
 
1435
  }
1436
+
1437
  }
1438
 
1439
  /**
1447
  if ( ! function_exists( 'ot_export' ) ) {
1448
 
1449
  function ot_export() {
1450
+
1451
  /* check and verify export settings file nonce */
1452
  if ( isset( $_POST['export_settings_file_nonce'] ) && wp_verify_nonce( $_POST['export_settings_file_nonce'], 'export_settings_file_form' ) ) {
1453
 
1454
  ot_export_php_settings_array();
1455
+
1456
  }
1457
+
1458
  }
1459
+
1460
  }
1461
 
1462
  /**
1471
  if ( ! function_exists( 'ot_import_xml' ) ) {
1472
 
1473
  function ot_import_xml( $file ) {
1474
+
1475
  $get_data = wp_remote_get( $file );
1476
+
1477
  if ( is_wp_error( $get_data ) )
1478
  return false;
1479
+
1480
  $rawdata = isset( $get_data['body'] ) ? $get_data['body'] : false;
1481
 
1482
  if ( $rawdata ) {
1483
+
1484
  $section_count = 0;
1485
  $settings_count = 0;
1486
+
1487
  $section = '';
1488
+
1489
  $settings = array();
1490
  $xml = new SimpleXMLElement( $rawdata );
1491
+
1492
  foreach ( $xml->row as $value ) {
1493
+
1494
  /* heading is a section now */
1495
  if ( $value->item_type == 'heading' ) {
1496
+
1497
  /* add section to the sections array */
1498
  $settings['sections'][$section_count]['id'] = (string) $value->item_id;
1499
  $settings['sections'][$section_count]['title'] = (string) $value->item_title;
1500
+
1501
  /* save the last section id to use in creating settings */
1502
  $section = (string) $value->item_id;
1503
+
1504
  /* increment the section count */
1505
  $section_count++;
1506
+
1507
  } else {
1508
+
1509
  /* add setting to the settings array */
1510
  $settings['settings'][$settings_count]['id'] = (string) $value->item_id;
1511
  $settings['settings'][$settings_count]['label'] = (string) $value->item_title;
1514
  $settings['settings'][$settings_count]['type'] = ot_map_old_option_types( (string) $value->item_type );
1515
  $settings['settings'][$settings_count]['std'] = '';
1516
  $settings['settings'][$settings_count]['class'] = '';
1517
+
1518
  /* textarea rows */
1519
  $rows = '';
1520
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'css', 'javascript', 'textarea' ) ) ) {
1525
  }
1526
  }
1527
  $settings['settings'][$settings_count]['rows'] = $rows;
1528
+
1529
  /* post type */
1530
  $post_type = '';
1531
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'custom-post-type-select', 'custom-post-type-checkbox' ) ) ) {
1536
  }
1537
  }
1538
  $settings['settings'][$settings_count]['post_type'] = $post_type;
1539
+
1540
  /* choices */
1541
  $choices = array();
1542
  if ( in_array( $settings['settings'][$settings_count]['type'], array( 'checkbox', 'radio', 'select' ) ) ) {
1545
  }
1546
  }
1547
  $settings['settings'][$settings_count]['choices'] = $choices;
1548
+
1549
  $settings_count++;
1550
  }
1551
+
1552
  }
1553
+
1554
  /* make sure each setting has a section just incase */
1555
  if ( isset( $settings['sections'] ) && isset( $settings['settings'] ) ) {
1556
  foreach( $settings['settings'] as $k => $setting ) {
1559
  }
1560
  }
1561
  }
1562
+
1563
  return $settings;
1564
+
1565
  }
1566
+
1567
  return false;
1568
  }
1569
 
1580
  if ( ! function_exists( 'ot_export_php_settings_array' ) ) {
1581
 
1582
  function ot_export_php_settings_array() {
1583
+
1584
  $content = '';
1585
  $build_settings = '';
1586
  $contextual_help = '';
1587
  $sections = '';
1588
  $settings = '';
1589
  $option_tree_settings = get_option( ot_settings_id(), array() );
1590
+
1591
  // Domain string helper
1592
  function ot_I18n_string( $string ) {
1593
  if ( ! empty( $string ) && isset( $_POST['domain'] ) && ! empty( $_POST['domain'] ) ) {
1596
  }
1597
  return "'$string'";
1598
  }
1599
+
1600
  header( "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
1601
  header( "Pragma: no-cache ");
1602
  header( "Content-Description: File Transfer" );
1603
  header( 'Content-Disposition: attachment; filename="theme-options.php"');
1604
  header( "Content-Type: application/octet-stream");
1605
  header( "Content-Transfer-Encoding: binary" );
1606
+
1607
  /* build contextual help content */
1608
  if ( isset( $option_tree_settings['contextual_help']['content'] ) ) {
1609
  $help = '';
1623
  'content' => array( $help
1624
  ),";
1625
  }
1626
+
1627
  /* build contextual help sidebar */
1628
  if ( isset( $option_tree_settings['contextual_help']['sidebar'] ) ) {
1629
  $contextual_help.= "
1630
  'sidebar' => " . ot_I18n_string( html_entity_decode( str_replace( "'", "\'", $option_tree_settings['contextual_help']['sidebar'] ) ) );
1631
  }
1632
+
1633
  /* check that $contexual_help has a value and add to $build_settings */
1634
  if ( '' != $contextual_help ) {
1635
  $build_settings.= "
1636
  'contextual_help' => array( $contextual_help
1637
  ),";
1638
  }
1639
+
1640
  /* build sections */
1641
  if ( isset( $option_tree_settings['sections'] ) ) {
1642
  foreach( $option_tree_settings['sections'] as $value ) {
1650
  }
1651
  $sections = substr_replace( $sections, '' , -1 );
1652
  }
1653
+
1654
  /* check that $sections has a value and add to $build_settings */
1655
  if ( '' != $sections ) {
1656
  $build_settings.= "
1657
  'sections' => array( $sections
1658
  )";
1659
  }
1660
+
1661
  /* build settings */
1662
  if ( isset( $option_tree_settings['settings'] ) ) {
1663
  foreach( $option_tree_settings['settings'] as $value ) {
1674
  $_class = isset( $value['class'] ) ? $value['class'] : '';
1675
  $_condition = isset( $value['condition'] ) ? $value['condition'] : '';
1676
  $_operator = isset( $value['operator'] ) ? $value['operator'] : '';
1677
+
1678
  $choices = '';
1679
  if ( isset( $value['choices'] ) && ! empty( $value['choices'] ) ) {
1680
  foreach( $value['choices'] as $choice ) {
1693
  'choices' => array( $choices
1694
  )";
1695
  }
1696
+
1697
  $std = "'$_std'";
1698
  if ( is_array( $_std ) ) {
1699
  $std_array = array();
1704
  ' . implode( ",\n", $std_array ) . '
1705
  )';
1706
  }
1707
+
1708
  $setting_settings = '';
1709
  if ( isset( $value['settings'] ) && ! empty( $value['settings'] ) ) {
1710
  foreach( $value['settings'] as $setting ) {
1720
  $_setting_class = isset( $setting['class'] ) ? $setting['class'] : '';
1721
  $_setting_condition = isset( $setting['condition'] ) ? $setting['condition'] : '';
1722
  $_setting_operator = isset( $setting['operator'] ) ? $setting['operator'] : '';
1723
+
1724
  $setting_choices = '';
1725
  if ( isset( $setting['choices'] ) && ! empty( $setting['choices'] ) ) {
1726
  foreach( $setting['choices'] as $setting_choice ) {
1739
  'choices' => array( $setting_choices
1740
  )";
1741
  }
1742
+
1743
  $setting_std = "'$_setting_std'";
1744
  if ( is_array( $_setting_std ) ) {
1745
  $setting_std_array = array();
1750
  ' . implode( ",\n", $setting_std_array ) . '
1751
  )';
1752
  }
1753
+
1754
  $setting_settings.= "
1755
  array(
1756
  'id' => '$_setting_id',
1772
  'settings' => array( $setting_settings
1773
  )";
1774
  }
1775
+
1776
  $settings.= "
1777
  array(
1778
  'id' => '$_id',
1792
  }
1793
  $settings = substr_replace( $settings, '' , -1 );
1794
  }
1795
+
1796
  /* check that $sections has a value and add to $build_settings */
1797
  if ( '' != $settings ) {
1798
  $build_settings.= ",
1799
  'settings' => array( $settings
1800
  )";
1801
  }
1802
+
1803
  $content.= "<?php
1804
  /**
1805
  * Initialize the custom theme options.
1810
  * Build the custom settings & update OptionTree.
1811
  */
1812
  function custom_theme_options() {
1813
+
1814
  /* OptionTree is not loaded yet, or this is not an admin request */
1815
  if ( ! function_exists( 'ot_settings_id' ) || ! is_admin() )
1816
  return false;
1817
+
1818
  /**
1819
+ * Get a copy of the saved settings array.
1820
  */
1821
  \$saved_settings = get_option( ot_settings_id(), array() );
1822
+
1823
  /**
1824
+ * Custom settings array that will eventually be
1825
  * passes to the OptionTree Settings API Class.
1826
  */
1827
  \$custom_settings = array( $build_settings
1828
  );
1829
+
1830
  /* allow settings to be filtered before saving */
1831
  \$custom_settings = apply_filters( ot_settings_id() . '_args', \$custom_settings );
1832
+
1833
  /* settings are not the same update the DB */
1834
  if ( \$saved_settings !== \$custom_settings ) {
1835
+ update_option( ot_settings_id(), \$custom_settings );
1836
  }
1837
+
1838
  /* Lets OptionTree know the UI Builder is being overridden */
1839
  global \$ot_has_custom_theme_options;
1840
  \$ot_has_custom_theme_options = true;
1841
+
1842
  }";
1843
 
1844
  echo $content;
1864
 
1865
  /* settings value */
1866
  $settings = isset( $_POST[ot_settings_id()] ) ? $_POST[ot_settings_id()] : '';
1867
+
1868
  /* validate sections */
1869
  if ( isset( $settings['sections'] ) ) {
1870
+
1871
  /* fix numeric keys since drag & drop will change them */
1872
  $settings['sections'] = array_values( $settings['sections'] );
1873
+
1874
  /* loop through sections */
1875
  foreach( $settings['sections'] as $k => $section ) {
1876
+
1877
  /* remove from array if missing values */
1878
  if ( ( ! isset( $section['title'] ) && ! isset( $section['id'] ) ) || ( '' == $section['title'] && '' == $section['id'] ) ) {
1879
+
1880
  unset( $settings['sections'][$k] );
1881
+
1882
  } else {
1883
+
1884
  /* validate label */
1885
  if ( '' != $section['title'] ) {
1886
+
1887
  $settings['sections'][$k]['title'] = wp_kses_post( $section['title'] );
1888
+
1889
  }
1890
+
1891
  /* missing title set to unfiltered ID */
1892
  if ( ! isset( $section['title'] ) || '' == $section['title'] ) {
1893
+
1894
  $settings['sections'][$k]['title'] = wp_kses_post( $section['id'] );
1895
+
1896
+ /* missing ID set to title */
1897
  } else if ( ! isset( $section['id'] ) || '' == $section['id'] ) {
1898
+
1899
  $section['id'] = wp_kses_post( $section['title'] );
1900
+
1901
  }
1902
+
1903
  /* sanitize ID once everything has been checked first */
1904
  $settings['sections'][$k]['id'] = ot_sanitize_option_id( wp_kses_post( $section['id'] ) );
1905
+
1906
  }
1907
+
1908
  }
1909
+
1910
  $settings['sections'] = ot_stripslashes( $settings['sections'] );
1911
+
1912
  }
1913
+
1914
  /* validate settings by looping over array as many times as it takes */
1915
  if ( isset( $settings['settings'] ) ) {
1916
+
1917
  $settings['settings'] = ot_validate_settings_array( $settings['settings'] );
1918
+
1919
  }
1920
+
1921
  /* validate contextual_help */
1922
  if ( isset( $settings['contextual_help']['content'] ) ) {
1923
+
1924
  /* fix numeric keys since drag & drop will change them */
1925
  $settings['contextual_help']['content'] = array_values( $settings['contextual_help']['content'] );
1926
+
1927
  /* loop through content */
1928
  foreach( $settings['contextual_help']['content'] as $k => $content ) {
1929
+
1930
  /* remove from array if missing values */
1931
  if ( ( ! isset( $content['title'] ) && ! isset( $content['id'] ) ) || ( '' == $content['title'] && '' == $content['id'] ) ) {
1932
+
1933
  unset( $settings['contextual_help']['content'][$k] );
1934
+
1935
  } else {
1936
+
1937
  /* validate label */
1938
  if ( '' != $content['title'] ) {
1939
+
1940
  $settings['contextual_help']['content'][$k]['title'] = wp_kses_post( $content['title'] );
1941
+
1942
  }
1943
+
1944
  /* missing title set to unfiltered ID */
1945
  if ( ! isset( $content['title'] ) || '' == $content['title'] ) {
1946
+
1947
  $settings['contextual_help']['content'][$k]['title'] = wp_kses_post( $content['id'] );
1948
+
1949
+ /* missing ID set to title */
1950
  } else if ( ! isset( $content['id'] ) || '' == $content['id'] ) {
1951
+
1952
  $content['id'] = wp_kses_post( $content['title'] );
1953
+
1954
  }
1955
+
1956
  /* sanitize ID once everything has been checked first */
1957
  $settings['contextual_help']['content'][$k]['id'] = ot_sanitize_option_id( wp_kses_post( $content['id'] ) );
1958
+
1959
  }
1960
+
1961
  /* validate textarea description */
1962
  if ( isset( $content['content'] ) ) {
1963
+
1964
  $settings['contextual_help']['content'][$k]['content'] = wp_kses_post( $content['content'] );
1965
+
1966
  }
1967
+
1968
  }
1969
+
1970
  }
1971
+
1972
  /* validate contextual_help sidebar */
1973
  if ( isset( $settings['contextual_help']['sidebar'] ) ) {
1974
+
1975
  $settings['contextual_help']['sidebar'] = wp_kses_post( $settings['contextual_help']['sidebar'] );
1976
+
1977
  }
1978
+
1979
  $settings['contextual_help'] = ot_stripslashes( $settings['contextual_help'] );
1980
+
1981
  /* default message */
1982
  $message = 'failed';
1983
+
1984
  /* is array: save & show success message */
1985
  if ( is_array( $settings ) ) {
1986
+
1987
  /* WPML unregister ID's that have been removed */
1988
  if ( function_exists( 'icl_unregister_string' ) ) {
1989
+
1990
  $current = get_option( ot_settings_id() );
1991
  $options = get_option( ot_options_id() );
1992
+
1993
  if ( isset( $current['settings'] ) ) {
1994
+
1995
  /* Empty ID array */
1996
  $new_ids = array();
1997
+
1998
  /* Build the WPML IDs array */
1999
  foreach( $settings['settings'] as $setting ) {
2000
+
2001
  if ( $setting['id'] ) {
2002
+
2003
  $new_ids[] = $setting['id'];
2004
 
2005
  }
2006
+
2007
  }
2008
+
2009
  /* Remove missing IDs from WPML */
2010
  foreach( $current['settings'] as $current_setting ) {
2011
+
2012
  if ( ! in_array( $current_setting['id'], $new_ids ) ) {
2013
+
2014
  if ( ! empty( $options[$current_setting['id']] ) && in_array( $current_setting['type'], array( 'list-item', 'slider' ) ) ) {
2015
+
2016
  foreach( $options[$current_setting['id']] as $key => $value ) {
2017
+
2018
  foreach( $value as $ckey => $cvalue ) {
2019
+
2020
  ot_wpml_unregister_string( $current_setting['id'] . '_' . $ckey . '_' . $key );
2021
+
2022
  }
2023
+
2024
  }
2025
+
2026
  } else if ( ! empty( $options[$current_setting['id']] ) && $current_setting['type'] == 'social-icons' ) {
2027
+
2028
  foreach( $options[$current_setting['id']] as $key => $value ) {
2029
+
2030
  foreach( $value as $ckey => $cvalue ) {
2031
+
2032
  ot_wpml_unregister_string( $current_setting['id'] . '_' . $ckey . '_' . $key );
2033
+
2034
  }
2035
+
2036
  }
2037
+
2038
  } else {
2039
+
2040
  ot_wpml_unregister_string( $current_setting['id'] );
2041
+
2042
  }
2043
+
2044
  }
2045
+
2046
  }
2047
 
2048
  }
2049
+
2050
  }
2051
+
2052
  update_option( ot_settings_id(), $settings );
2053
  $message = 'success';
2054
 
2073
  Swift_Performance_Cache::clear_all_cache();
2074
  }
2075
  }
2076
+
2077
  /* redirect */
2078
+ wp_safe_redirect( esc_url_raw( add_query_arg( array( 'action' => 'save-settings', 'message' => $message ), $_POST['_wp_http_referer'] ) ) );
2079
  exit;
2080
+
2081
  }
2082
+
2083
  return false;
2084
 
2085
  }
2086
+
2087
  }
2088
 
2089
  /**
2090
  * Validate the settings array before save.
2091
  *
2092
+ * This function will loop over the settings array as many
2093
  * times as it takes to validate every sub setting.
2094
  *
2095
  * @param array $settings The array of settings.
2101
  if ( ! function_exists( 'ot_validate_settings_array' ) ) {
2102
 
2103
  function ot_validate_settings_array( $settings = array() ) {
2104
+
2105
  /* validate settings */
2106
  if ( count( $settings ) > 0 ) {
2107
+
2108
  /* fix numeric keys since drag & drop will change them */
2109
  $settings = array_values( $settings );
2110
+
2111
  /* loop through settings */
2112
  foreach( $settings as $k => $setting ) {
2113
+
2114
+
2115
  /* remove from array if missing values */
2116
  if ( ( ! isset( $setting['label'] ) && ! isset( $setting['id'] ) ) || ( '' == $setting['label'] && '' == $setting['id'] ) ) {
2117
+
2118
  unset( $settings[$k] );
2119
+
2120
  } else {
2121
+
2122
  /* validate label */
2123
  if ( '' != $setting['label'] ) {
2124
+
2125
  $settings[$k]['label'] = wp_kses_post( $setting['label'] );
2126
+
2127
  }
2128
+
2129
  /* missing label set to unfiltered ID */
2130
  if ( ! isset( $setting['label'] ) || '' == $setting['label'] ) {
2131
+
2132
  $settings[$k]['label'] = $setting['id'];
2133
+
2134
+ /* missing ID set to label */
2135
  } else if ( ! isset( $setting['id'] ) || '' == $setting['id'] ) {
2136
+
2137
  $setting['id'] = wp_kses_post( $setting['label'] );
2138
+
2139
  }
2140
+
2141
  /* sanitize ID once everything has been checked first */
2142
  $settings[$k]['id'] = ot_sanitize_option_id( wp_kses_post( $setting['id'] ) );
2143
+
2144
  }
2145
+
2146
  /* validate description */
2147
  if ( '' != $setting['desc'] ) {
2148
+
2149
  $settings[$k]['desc'] = wp_kses_post( $setting['desc'] );
2150
+
2151
  }
2152
+
2153
  /* validate choices */
2154
  if ( isset( $setting['choices'] ) ) {
2155
+
2156
  /* loop through choices */
2157
  foreach( $setting['choices'] as $ck => $choice ) {
2158
+
2159
  /* remove from array if missing values */
2160
  if ( ( ! isset( $choice['label'] ) && ! isset( $choice['value'] ) ) || ( '' == $choice['label'] && '' == $choice['value'] ) ) {
2161
+
2162
  unset( $setting['choices'][$ck] );
2163
+
2164
  } else {
2165
+
2166
  /* missing label set to unfiltered ID */
2167
  if ( ! isset( $choice['label'] ) || '' == $choice['label'] ) {
2168
+
2169
  $setting['choices'][$ck]['label'] = wp_kses_post( $choice['value'] );
2170
+
2171
+ /* missing value set to label */
2172
  } else if ( ! isset( $choice['value'] ) || '' == $choice['value'] ) {
2173
+
2174
  $setting['choices'][$ck]['value'] = ot_sanitize_option_id( wp_kses_post( $choice['label'] ) );
2175
+
2176
  }
2177
+
2178
  }
2179
+
2180
  }
2181
+
2182
  /* update keys and push new array values */
2183
  $settings[$k]['choices'] = array_values( $setting['choices'] );
2184
+
2185
  }
2186
+
2187
  /* validate sub settings */
2188
  if ( isset( $setting['settings'] ) ) {
2189
 
2190
  $settings[$k]['settings'] = ot_validate_settings_array( $setting['settings'] );
2191
+
2192
  }
2193
 
2194
  }
2195
+
2196
  }
2197
+
2198
  /* return array but strip those damn slashes out first!!! */
2199
  return ot_stripslashes( $settings );
2200
+
2201
  }
2202
 
2203
  }
2216
 
2217
  /* check and verify modify layouts nonce */
2218
  if ( isset( $_POST['option_tree_modify_layouts_nonce'] ) && wp_verify_nonce( $_POST['option_tree_modify_layouts_nonce'], 'option_tree_modify_layouts_form' ) ) {
2219
+
2220
  /* previous layouts value */
2221
  $option_tree_layouts = get_option( ot_layouts_id() );
2222
+
2223
  /* new layouts value */
2224
  $layouts = isset( $_POST[ot_layouts_id()] ) ? $_POST[ot_layouts_id()] : '';
2225
+
2226
  /* rebuild layout array */
2227
  $rebuild = array();
2228
+
2229
  /* validate layouts */
2230
  if ( is_array( $layouts ) && ! empty( $layouts ) ) {
2231
+
2232
  /* setup active layout */
2233
  if ( isset( $layouts['active_layout'] ) && ! empty( $layouts['active_layout'] ) ) {
2234
  $rebuild['active_layout'] = $layouts['active_layout'];
2235
  }
2236
+
2237
  /* add new and overwrite active layout */
2238
  if ( isset( $layouts['_add_new_layout_'] ) && ! empty( $layouts['_add_new_layout_'] ) ) {
2239
  $rebuild['active_layout'] = ot_sanitize_layout_id( $layouts['_add_new_layout_'] );
2240
  $rebuild[$rebuild['active_layout']] = ot_encode( serialize( get_option( ot_options_id() ) ) );
2241
  }
2242
+
2243
  $first_layout = '';
2244
+
2245
  /* loop through layouts */
2246
  foreach( $layouts as $key => $layout ) {
2247
+
2248
  /* skip over active layout key */
2249
  if ( $key == 'active_layout' )
2250
  continue;
2251
+
2252
  /* check if the key exists then set value */
2253
  if ( isset( $option_tree_layouts[$key] ) && ! empty( $option_tree_layouts[$key] ) ) {
2254
  $rebuild[$key] = $option_tree_layouts[$key];
2256
  $first_layout = $key;
2257
  }
2258
  }
2259
+
2260
  }
2261
+
2262
  if ( isset( $rebuild['active_layout'] ) && ! isset( $rebuild[$rebuild['active_layout']] ) && ! empty( $first_layout ) ) {
2263
  $rebuild['active_layout'] = $first_layout;
2264
  }
2265
+
2266
  }
2267
+
2268
  /* default message */
2269
  $message = 'failed';
2270
+
2271
  /* is array: save & show success message */
2272
  if ( count( $rebuild ) > 1 ) {
2273
 
2274
  /* rebuild the theme options */
2275
  $rebuild_option_tree = unserialize( ot_decode( $rebuild[$rebuild['active_layout']] ) );
2276
  if ( is_array( $rebuild_option_tree ) ) {
2277
+
2278
  /* execute the action hook and pass the theme options to it */
2279
  do_action( 'ot_before_theme_options_save', $rebuild_option_tree );
2280
+
2281
  update_option( ot_options_id(), $rebuild_option_tree );
2282
+
2283
  }
2284
+
2285
  /* rebuild the layouts */
2286
  update_option( ot_layouts_id(), $rebuild );
2287
+
2288
  /* change message */
2289
  $message = 'success';
2290
+
2291
  } else if ( count( $rebuild ) <= 1 ) {
2292
 
2293
  /* delete layouts option */
2294
  delete_option( ot_layouts_id() );
2295
+
2296
  /* change message */
2297
  $message = 'deleted';
2298
+
2299
  }
2300
+
2301
  /* redirect */
2302
  if ( isset( $_REQUEST['page'] ) && $_REQUEST['page'] == apply_filters( 'niftycs_options_menu_slug', 'niftycs-options' ) ) {
2303
  $query_args = esc_url_raw( add_query_arg( array( 'settings-updated' => 'layout' ), remove_query_arg( array( 'action', 'message' ), $_POST['_wp_http_referer'] ) ) );
2304
  } else {
2305
  $query_args = esc_url_raw( add_query_arg( array( 'action' => 'save-layouts', 'message' => $message ), $_POST['_wp_http_referer'] ) );
2306
  }
2307
+ wp_safe_redirect( $query_args );
2308
  exit;
2309
+
2310
  }
2311
+
2312
  return false;
2313
 
2314
  }
2315
+
2316
  }
2317
 
2318
  /**
2327
  if ( ! function_exists( 'ot_alert_message' ) ) {
2328
 
2329
  function ot_alert_message( $page = array() ) {
2330
+
2331
  if ( empty( $page ) )
2332
  return false;
2333
+
2334
  $before = apply_filters( 'ot_before_page_messages', '', $page );
2335
+
2336
  if ( $before ) {
2337
  return $before;
2338
  }
2339
+
2340
  $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : '';
2341
  $message = isset( $_REQUEST['message'] ) ? $_REQUEST['message'] : '';
2342
  $updated = isset( $_REQUEST['settings-updated'] ) ? $_REQUEST['settings-updated'] : '';
2343
+
2344
  if ( $action == 'save-settings' ) {
2345
+
2346
  if ( $message == 'success' ) {
2347
+
2348
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Settings updated.', 'option-tree' ) . '</p></div>';
2349
+
2350
  } else if ( $message == 'failed' ) {
2351
+
2352
  return '<div id="message" class="error fade below-h2"><p>' . __( 'Settings could not be saved.', 'option-tree' ) . '</p></div>';
2353
+
2354
  }
2355
+
2356
  } else if ( $action == 'import-xml' || $action == 'import-settings' ) {
2357
+
2358
  if ( $message == 'success' ) {
2359
+
2360
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Settings Imported.', 'option-tree' ) . '</p></div>';
2361
+
2362
  } else if ( $message == 'failed' ) {
2363
+
2364
  return '<div id="message" class="error fade below-h2"><p>' . __( 'Settings could not be imported.', 'option-tree' ) . '</p></div>';
2365
+
2366
  }
2367
  } else if ( $action == 'import-data' ) {
2368
+
2369
  if ( $message == 'success' ) {
2370
+
2371
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Data Imported.', 'option-tree' ) . '</p></div>';
2372
+
2373
  } else if ( $message == 'failed' ) {
2374
+
2375
  return '<div id="message" class="error fade below-h2"><p>' . __( 'Data could not be imported.', 'option-tree' ) . '</p></div>';
2376
+
2377
  }
2378
+
2379
  } else if ( $action == 'import-layouts' ) {
2380
+
2381
  if ( $message == 'success' ) {
2382
+
2383
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Layouts Imported.', 'option-tree' ) . '</p></div>';
2384
+
2385
  } else if ( $message == 'failed' ) {
2386
+
2387
  return '<div id="message" class="error fade below-h2"><p>' . __( 'Layouts could not be imported.', 'option-tree' ) . '</p></div>';
2388
+
2389
  }
2390
+
2391
  } else if ( $action == 'save-layouts' ) {
2392
+
2393
  if ( $message == 'success' ) {
2394
+
2395
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Layouts Updated.', 'option-tree' ) . '</p></div>';
2396
+
2397
  } else if ( $message == 'failed' ) {
2398
+
2399
  return '<div id="message" class="error fade below-h2"><p>' . __( 'Layouts could not be updated.', 'option-tree' ) . '</p></div>';
2400
+
2401
  } else if ( $message == 'deleted' ) {
2402
+
2403
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Layouts have been deleted.', 'option-tree' ) . '</p></div>';
2404
+
2405
  }
2406
+
2407
+ } else if ( $updated == 'layout' ) {
2408
+
2409
  return '<div id="message" class="updated fade below-h2"><p>' . __( 'Layout activated.', 'option-tree' ) . '</p></div>';
2410
+
2411
  } else if ( $action == 'reset' ) {
2412
+
2413
  return '<div id="message" class="updated fade below-h2"><p>' . $page['reset_message'] . '</p></div>';
2414
+
2415
  }
2416
+
2417
  do_action( 'ot_custom_page_messages', $page );
2418
+
2419
+ if ( $updated == 'true' ) {
2420
+
2421
  return '<div id="message" class="updated fade below-h2"><p>' . $page['updated_message'] . '</p></div>';
2422
+
2423
+ }
2424
+
2425
  return false;
2426
+
2427
  }
2428
+
2429
  }
2430
 
2431
  /**
2443
  if ( ! function_exists( 'ot_option_types_array' ) ) {
2444
 
2445
  function ot_option_types_array() {
2446
+
2447
+ return apply_filters( 'ot_option_types_array', array(
2448
  'background' => __('Background', 'option-tree'),
2449
  'border' => __('Border', 'option-tree'),
2450
  'box-shadow' => __('Box Shadow', 'option-tree'),
2491
  'typography' => __('Typography', 'option-tree'),
2492
  'upload' => __('Upload', 'option-tree')
2493
  ) );
2494
+
2495
  }
2496
  }
2497
 
2507
  if ( ! function_exists( 'ot_map_old_option_types' ) ) {
2508
 
2509
  function ot_map_old_option_types( $type = '' ) {
2510
+
2511
+ if ( ! $type )
2512
  return 'text';
2513
+
2514
  $types = array(
2515
  'background' => 'background',
2516
  'category' => 'category-select',
2519
  'colorpicker' => 'colorpicker',
2520
  'css' => 'css',
2521
  'custom_post' => 'custom-post-type-select',
2522
+ 'custom_posts' => 'custom-post-type-checkbox',
2523
  'input' => 'text',
2524
  'image' => 'upload',
2525
  'measurement' => 'measurement',
2537
  'typography' => 'typography',
2538
  'upload' => 'upload'
2539
  );
2540
+
2541
  if ( isset( $types[$type] ) )
2542
  return $types[$type];
2543
+
2544
  return false;
2545
+
2546
  }
2547
  }
2548
 
2573
  }
2574
  }
2575
  }
2576
+
2577
  return $families;
2578
  }
2579
  add_filter( 'ot_recognized_font_families', 'ot_google_font_stack', 1, 2 );
2597
  if ( ! function_exists( 'ot_recognized_font_families' ) ) {
2598
 
2599
  function ot_recognized_font_families( $field_id = '' ) {
2600
+
2601
  $families = array(
2602
  'arial' => 'Arial',
2603
  'georgia' => 'Georgia',
2608
  'trebuchet' => 'Trebuchet',
2609
  'verdana' => 'Verdana'
2610
  );
2611
+
2612
  return apply_filters( 'ot_recognized_font_families', $families, $field_id );
2613
+
2614
  }
2615
 
2616
  }
2631
  if ( ! function_exists( 'ot_recognized_font_sizes' ) ) {
2632
 
2633
  function ot_recognized_font_sizes( $field_id ) {
2634
+
2635
+ $range = ot_range(
2636
+ apply_filters( 'ot_font_size_low_range', 0, $field_id ),
2637
+ apply_filters( 'ot_font_size_high_range', 150, $field_id ),
2638
  apply_filters( 'ot_font_size_range_interval', 1, $field_id )
2639
  );
2640
+
2641
  $unit = apply_filters( 'ot_font_size_unit_type', 'px', $field_id );
2642
+
2643
  foreach( $range as $k => $v ) {
2644
  $range[$k] = $v . $unit;
2645
  }
2646
+
2647
  return apply_filters( 'ot_recognized_font_sizes', $range, $field_id );
2648
  }
2649
 
2666
  if ( ! function_exists( 'ot_recognized_font_styles' ) ) {
2667
 
2668
  function ot_recognized_font_styles( $field_id = '' ) {
2669
+
2670
  return apply_filters( 'ot_recognized_font_styles', array(
2671
  'normal' => 'Normal',
2672
  'italic' => 'Italic',
2673
  'oblique' => 'Oblique',
2674
  'inherit' => 'Inherit'
2675
  ), $field_id );
2676
+
2677
  }
2678
 
2679
  }
2695
  if ( ! function_exists( 'ot_recognized_font_variants' ) ) {
2696
 
2697
  function ot_recognized_font_variants( $field_id = '' ) {
2698
+
2699
  return apply_filters( 'ot_recognized_font_variants', array(
2700
  'normal' => 'Normal',
2701
  'small-caps' => 'Small Caps',
2702
  'inherit' => 'Inherit'
2703
  ), $field_id );
2704
+
2705
  }
2706
+
2707
  }
2708
 
2709
  /**
2723
  if ( ! function_exists( 'ot_recognized_font_weights' ) ) {
2724
 
2725
  function ot_recognized_font_weights( $field_id = '' ) {
2726
+
2727
  return apply_filters( 'ot_recognized_font_weights', array(
2728
  'normal' => 'Normal',
2729
  'bold' => 'Bold',
2740
  '900' => '900',
2741
  'inherit' => 'Inherit'
2742
  ), $field_id );
2743
+
2744
  }
2745
+
2746
  }
2747
 
2748
  /**
2761
  if ( ! function_exists( 'ot_recognized_letter_spacing' ) ) {
2762
 
2763
  function ot_recognized_letter_spacing( $field_id ) {
2764
+
2765
+ $range = ot_range(
2766
+ apply_filters( 'ot_letter_spacing_low_range', -0.1, $field_id ),
2767
+ apply_filters( 'ot_letter_spacing_high_range', 0.1, $field_id ),
2768
  apply_filters( 'ot_letter_spacing_range_interval', 0.01, $field_id )
2769
  );
2770
+
2771
  $unit = apply_filters( 'ot_letter_spacing_unit_type', 'em', $field_id );
2772
+
2773
  foreach( $range as $k => $v ) {
2774
  $range[$k] = $v . $unit;
2775
  }
2776
+
2777
  return apply_filters( 'ot_recognized_letter_spacing', $range, $field_id );
2778
  }
2779
 
2795
  if ( ! function_exists( 'ot_recognized_line_heights' ) ) {
2796
 
2797
  function ot_recognized_line_heights( $field_id ) {
2798
+
2799
+ $range = ot_range(
2800
+ apply_filters( 'ot_line_height_low_range', 0, $field_id ),
2801
+ apply_filters( 'ot_line_height_high_range', 150, $field_id ),
2802
  apply_filters( 'ot_line_height_range_interval', 1, $field_id )
2803
  );
2804
+
2805
  $unit = apply_filters( 'ot_line_height_unit_type', 'px', $field_id );
2806
+
2807
  foreach( $range as $k => $v ) {
2808
  $range[$k] = $v . $unit;
2809
  }
2810
+
2811
  return apply_filters( 'ot_recognized_line_heights', $range, $field_id );
2812
  }
2813
 
2828
  * @since 2.0.10
2829
  */
2830
  if ( ! function_exists( 'ot_recognized_text_decorations' ) ) {
2831
+
2832
  function ot_recognized_text_decorations( $field_id = '' ) {
2833
+
2834
  return apply_filters( 'ot_recognized_text_decorations', array(
2835
  'blink' => 'Blink',
2836
  'inherit' => 'Inherit',
2839
  'overline' => 'Overline',
2840
  'underline' => 'Underline'
2841
  ), $field_id );
2842
+
2843
  }
2844
 
2845
  }
2859
  * @since 2.0.10
2860
  */
2861
  if ( ! function_exists( 'ot_recognized_text_transformations' ) ) {
2862
+
2863
  function ot_recognized_text_transformations( $field_id = '' ) {
2864
+
2865
  return apply_filters( 'ot_recognized_text_transformations', array(
2866
  'capitalize' => 'Capitalize',
2867
  'inherit' => 'Inherit',
2869
  'none' => 'None',
2870
  'uppercase' => 'Uppercase'
2871
  ), $field_id );
2872
+
2873
  }
2874
 
2875
  }
2889
  * @updated 2.0
2890
  */
2891
  if ( ! function_exists( 'ot_recognized_background_repeat' ) ) {
2892
+
2893
  function ot_recognized_background_repeat( $field_id = '' ) {
2894
+
2895
  return apply_filters( 'ot_recognized_background_repeat', array(
2896
  'no-repeat' => 'No Repeat',
2897
  'repeat' => 'Repeat All',
2899
  'repeat-y' => 'Repeat Vertically',
2900
  'inherit' => 'Inherit'
2901
  ), $field_id );
2902
+
2903
  }
2904
+
2905
  }
2906
 
2907
  /**
2921
  if ( ! function_exists( 'ot_recognized_background_attachment' ) ) {
2922
 
2923
  function ot_recognized_background_attachment( $field_id = '' ) {
2924
+
2925
  return apply_filters( 'ot_recognized_background_attachment', array(
2926
  "fixed" => "Fixed",
2927
  "scroll" => "Scroll",
2928
  "inherit" => "Inherit"
2929
  ), $field_id );
2930
+
2931
  }
2932
 
2933
  }
2949
  if ( ! function_exists( 'ot_recognized_background_position' ) ) {
2950
 
2951
  function ot_recognized_background_position( $field_id = '' ) {
2952
+
2953
  return apply_filters( 'ot_recognized_background_position', array(
2954
  "left top" => "Left Top",
2955
  "left center" => "Left Center",
2961
  "right center" => "Right Center",
2962
  "right bottom" => "Right Bottom"
2963
  ), $field_id );
2964
+
2965
  }
2966
 
2967
  }
3094
 
3095
  $families = array();
3096
  $ot_google_fonts = get_theme_mod( 'ot_google_fonts', array() );
3097
+
3098
  // Forces an array rebuild when we sitch themes
3099
  if ( empty( $ot_google_fonts ) ) {
3100
  $ot_google_fonts = ot_fetch_google_fonts( true, true );
3101
  }
3102
+
3103
  foreach( (array) $ot_google_fonts as $key => $item ) {
3104
+
3105
  if ( isset( $item['family'] ) ) {
3106
+
3107
  $families[ $key ] = $item['family'];
3108
+
3109
  }
3110
+
3111
  }
3112
+
3113
  return apply_filters( 'ot_recognized_google_font_families', $families, $field_id );
3114
+
3115
  }
3116
 
3117
  }
3134
  $ot_google_fonts = get_theme_mod( 'ot_google_fonts', array() );
3135
 
3136
  if ( isset( $ot_google_fonts[ $family ]['variants'] ) ) {
3137
+
3138
  $variants = $ot_google_fonts[ $family ]['variants'];
3139
+
3140
  }
3141
+
3142
  return apply_filters( 'ot_recognized_google_font_variants', $variants, $field_id, $family );
3143
+
3144
  }
3145
 
3146
  }
3161
 
3162
  $subsets = array();
3163
  $ot_google_fonts = get_theme_mod( 'ot_google_fonts', array() );
3164
+
3165
  if ( isset( $ot_google_fonts[ $family ]['subsets'] ) ) {
3166
+
3167
  $subsets = $ot_google_fonts[ $family ]['subsets'];
3168
+
3169
  }
3170
+
3171
  return apply_filters( 'ot_recognized_google_font_subsets', $subsets, $field_id, $family );
3172
+
3173
  }
3174
 
3175
  }
3189
  * @updated 2.0
3190
  */
3191
  if ( ! function_exists( 'ot_measurement_unit_types' ) ) {
3192
+
3193
  function ot_measurement_unit_types( $field_id = '' ) {
3194
+
3195
  return apply_filters( 'ot_measurement_unit_types', array(
3196
  'px' => 'px',
3197
  '%' => '%',
3198
  'em' => 'em',
3199
  'pt' => 'pt'
3200
  ), $field_id );
3201
+
3202
  }
3203
 
3204
  }
3218
  * @since 2.0
3219
  */
3220
  if ( ! function_exists( 'ot_radio_images' ) ) {
3221
+
3222
  function ot_radio_images( $field_id = '' ) {
3223
+
3224
  return apply_filters( 'ot_radio_images', array(
3225
  array(
3226
  'value' => 'left-sidebar',
3253
  'src' => OT_URL . 'assets/images/layout/right-dual-sidebar.png'
3254
  )
3255
  ), $field_id );
3256
+
3257
  }
3258
 
3259
  }
3275
  if ( ! function_exists( 'ot_list_item_settings' ) ) {
3276
 
3277
  function ot_list_item_settings( $id ) {
3278
+
3279
  $settings = apply_filters( 'ot_list_item_settings', array(
3280
  array(
3281
  'id' => 'image',
3311
  'choices' => array()
3312
  )
3313
  ), $id );
3314
+
3315
  return $settings;
3316
+
3317
  }
3318
 
3319
  }
3335
  if ( ! function_exists( 'ot_slider_settings' ) ) {
3336
 
3337
  function ot_slider_settings( $id ) {
3338
+
3339
  $settings = apply_filters( 'image_slider_fields', array(
3340
  array(
3341
  'name' => 'image',
3356
  'class' => ''
3357
  )
3358
  ), $id );
3359
+
3360
  /* fix the array keys, values, and just get it 2.0 ready */
3361
  foreach( $settings as $_k => $setting ) {
3362
+
3363
  foreach( $setting as $s_key => $s_value ) {
3364
+
3365
  if ( 'name' == $s_key ) {
3366
+
3367
  $settings[$_k]['id'] = $s_value;
3368
  unset($settings[$_k]['name']);
3369
+
3370
  } else if ( 'type' == $s_key ) {
3371
+
3372
  if ( 'input' == $s_value ) {
3373
+
3374
  $settings[$_k]['type'] = 'text';
3375
+
3376
  } else if ( 'textarea' == $s_value ) {
3377
+
3378
  $settings[$_k]['type'] = 'textarea-simple';
3379
+
3380
  } else if ( 'image' == $s_value ) {
3381
+
3382
  $settings[$_k]['type'] = 'upload';
3383
+
3384
  }
3385
+
3386
  }
3387
+
3388
+ }
3389
+
3390
  }
3391
+
3392
  return $settings;
3393
+
3394
  }
3395
 
3396
  }
3412
  if ( ! function_exists( 'ot_social_links_settings' ) ) {
3413
 
3414
  function ot_social_links_settings( $id ) {
3415
+
3416
  $settings = apply_filters( 'ot_social_links_settings', array(
3417
  array(
3418
  'id' => 'name',
3435
  'type' => 'text',
3436
  )
3437
  ), $id );
3438
+
3439
  return $settings;
3440
+
3441
  }
3442
 
3443
  }
3446
  * Inserts CSS with field_id markers.
3447
  *
3448
  * Inserts CSS into a dynamic.css file, placing it between
3449
+ * BEGIN and END field_id markers. Replaces existing marked info,
3450
  * but still retains surrounding data.
3451
  *
3452
  * @param string $field_id The CSS option field ID.
3540
  // Measurement
3541
  if ( $option_type == 'measurement' ) {
3542
  $unit = ! empty( $value[1] ) ? $value[1] : 'px';
3543
+
3544
  // Set $value with measurement properties
3545
  if ( isset( $value[0] ) && strlen( $value[0] ) > 0 )
3546
  $value = $value[0].$unit;
3862
  if ( ! function_exists( 'ot_remove_old_css' ) ) {
3863
 
3864
  function ot_remove_old_css( $field_id = '' ) {
3865
+
3866
  /* missing $field_id string */
3867
  if ( '' == $field_id )
3868
  return false;
3869
+
3870
  /* path to the dynamic.css file */
3871
  $filepath = get_stylesheet_directory() . '/dynamic.css';
3872
+
3873
  /* allow filter on path */
3874
  $filepath = apply_filters( 'css_option_file_path', $filepath, $field_id );
3875
+
3876
  /* remove CSS from file */
3877
  if ( is_writeable( $filepath ) ) {
3878
+
3879
  /* get each line in the file */
3880
  $markerdata = explode( "\n", implode( '', file( $filepath ) ) );
3881
+
3882
  /* can't write to the file return false */
3883
  if ( ! $f = ot_file_open( $filepath, 'w' ) )
3884
  return false;
3885
+
3886
  $searching = true;
3887
+
3888
  /* has array of lines */
3889
  if ( ! empty( $markerdata ) ) {
3890
+
3891
  /* foreach line of code */
3892
  foreach ( $markerdata as $n => $markerline ) {
3893
+
3894
  /* found begining of marker, set $searching to false */
3895
  if ( $markerline == "/* BEGIN {$field_id} */" )
3896
  $searching = false;
3897
+
3898
  /* $searching is true, keep rewrite each line of CSS */
3899
  if ( $searching == true ) {
3900
  if ( $n + 1 < count( $markerdata ) )
3902
  else
3903
  ot_file_write( $f, "{$markerline}" );
3904
  }
3905
+
3906
  /* found end marker delete old CSS */
3907
  if ( $markerline == "/* END {$field_id} */" ) {
3908
  ot_file_write( $f, "" );
3909
  $searching = true;
3910
  }
3911
+
3912
  }
3913
+
3914
  }
3915
+
3916
  /* close file */
3917
  ot_file_close( $f );
3918
  return true;
3919
+
3920
  }
3921
+
3922
  return false;
3923
+
3924
  }
3925
+
3926
  }
3927
 
3928
  /**
3940
  if ( ! function_exists( 'ot_normalize_css' ) ) {
3941
 
3942
  function ot_normalize_css( $css ) {
3943
+
3944
  /* Normalize & Convert */
3945
  $css = str_replace( "\r\n", "\n", $css );
3946
  $css = str_replace( "\r", "\n", $css );
3947
+
3948
  /* Don't allow out-of-control blank lines */
3949
  $css = preg_replace( "/\n{2,}/", "\n\n", $css );
3950
+
3951
  return $css;
3952
  }
3953
+
3954
  }
3955
 
3956
  /**
3966
  if ( ! function_exists( 'ot_loop_through_option_types' ) ) {
3967
 
3968
  function ot_loop_through_option_types( $type = '', $child = false ) {
3969
+
3970
  $content = '';
3971
  $types = ot_option_types_array();
3972
+
3973
  if ( $child )
3974
  unset($types['list-item']);
3975
+
3976
  foreach( $types as $key => $value )
3977
  $content.= '<option value="' . $key . '" ' . selected( $type, $key, false ) . '>' . $value . '</option>';
3978
+
3979
  return $content;
3980
+
3981
  }
3982
+
3983
  }
3984
 
3985
  /**
3996
  if ( ! function_exists( 'ot_loop_through_choices' ) ) {
3997
 
3998
  function ot_loop_through_choices( $name, $choices = array() ) {
3999
+
4000
  $content = '';
4001
+
4002
  foreach( (array) $choices as $key => $choice )
4003
  $content.= '<li class="ui-state-default list-choice">' . ot_choices_view( $name, $key, $choice ) . '</li>';
4004
+
4005
  return $content;
4006
  }
4007
+
4008
  }
4009
 
4010
  /**
4021
  if ( ! function_exists( 'ot_loop_through_sub_settings' ) ) {
4022
 
4023
  function ot_loop_through_sub_settings( $name, $settings = array() ) {
4024
+
4025
  $content = '';
4026
+
4027
  foreach( $settings as $key => $setting )
4028
  $content.= '<li class="ui-state-default list-sub-setting">' . ot_settings_view( $name, $key, $setting ) . '</li>';
4029
+
4030
  return $content;
4031
  }
4032
+
4033
  }
4034
 
4035
  /**
4049
  if ( ! function_exists( 'ot_sections_view' ) ) {
4050
 
4051
  function ot_sections_view( $name, $key, $section = array() ) {
4052
+
4053
  return '
4054
  <div class="option-tree-setting is-section">
4055
  <div class="open">' . ( isset( $section['title'] ) ? esc_attr( $section['title'] ) : 'Section ' . ( $key + 1 ) ) . '</div>
4080
  </div>
4081
  </div>
4082
  </div>';
4083
+
4084
  }
4085
 
4086
  }
4102
  if ( ! function_exists( 'ot_settings_view' ) ) {
4103
 
4104
  function ot_settings_view( $name, $key, $setting = array() ) {
4105
+
4106
  $child = ( strpos( $name, '][settings]') !== false ) ? true : false;
4107
  $type = isset( $setting['type'] ) ? $setting['type'] : '';
4108
  $std = isset( $setting['std'] ) ? $setting['std'] : '';
4109
  $operator = isset( $setting['operator'] ) ? esc_attr( $setting['operator'] ) : 'and';
4110
+
4111
  // Serialize the standard value just incase
4112
  if ( is_array( $std ) ) {
4113
  $std = maybe_serialize( $std );
4114
  }
4115
+
4116
  if ( in_array( $type, array( 'css', 'javascript', 'textarea', 'textarea-simple' ) ) ) {
4117
  $std_form_element = '<textarea class="textarea" rows="10" cols="40" name="' . esc_attr( $name ) . '[' . esc_attr( $key ) . '][std]">' . esc_html( $std ) . '</textarea>';
4118
  } else {
4119
  $std_form_element = '<input type="text" name="' . esc_attr( $name ) . '[' . esc_attr( $key ) . '][std]" value="' . esc_attr( $std ) . '" class="widefat option-tree-ui-input" autocomplete="off" />';
4120
  }
4121
+
4122
  return '
4123
  <div class="option-tree-setting">
4124
  <div class="open">' . ( isset( $setting['label'] ) ? esc_attr( $setting['label'] ) : 'Setting ' . ( $key + 1 ) ) . '</div>
4152
  <div class="description">' . __( '<strong>Type</strong>: Choose one of the available option types from the dropdown.', 'option-tree' ) . '</div>
4153
  <div class="format-setting-inner">
4154
  <select name="' . esc_attr( $name ) . '[' . esc_attr( $key ) . '][type]" value="' . esc_attr( $type ) . '" class="option-tree-ui-select">
4155
+ ' . ot_loop_through_option_types( $type, $child ) . '
4156
+
4157
  </select>
4158
  </div>
4159
  </div>
4258
  </div>
4259
  </div>
4260
  ' . ( ! $child ? '<input type="hidden" class="hidden-section" name="' . esc_attr( $name ) . '[' . esc_attr( $key ) . '][section]" value="' . ( isset( $setting['section'] ) ? esc_attr( $setting['section'] ) : '' ) . '" />' : '' );
4261
+
4262
  }
4263
 
4264
  }
4281
  if ( ! function_exists( 'ot_choices_view' ) ) {
4282
 
4283
  function ot_choices_view( $name, $key, $choice = array() ) {
4284
+
4285
  return '
4286
  <div class="option-tree-setting">
4287
  <div class="open">' . ( isset( $choice['label'] ) ? esc_attr( $choice['label'] ) : 'Choice ' . ( $key + 1 ) ) . '</div>
4325
  </div>
4326
  </div>
4327
  </div>';
4328
+
4329
  }
4330
 
4331
  }
4347
  if ( ! function_exists( 'ot_contextual_help_view' ) ) {
4348
 
4349
  function ot_contextual_help_view( $name, $key, $content = array() ) {
4350
+
4351
  return '
4352
  <div class="option-tree-setting">
4353
  <div class="open">' . ( isset( $content['title'] ) ? esc_attr( $content['title'] ) : 'Content ' . ( $key + 1 ) ) . '</div>
4386
  </div>
4387
  </div>
4388
  </div>';
4389
+
4390
  }
4391
 
4392
  }
4420
  </div>
4421
  <input type="hidden" name="' . ot_layouts_id() . '[' . esc_attr( $key ) . ']" value="' . $data . '" />
4422
  </div>';
4423
+
4424
  }
4425
 
4426
  }
4443
  if ( ! function_exists( 'ot_list_item_view' ) ) {
4444
 
4445
  function ot_list_item_view( $name, $key, $list_item = array(), $post_id = 0, $get_option = '', $settings = array(), $type = '' ) {
4446
+
4447
  /* required title setting */
4448
  $required_setting = array(
4449
  array(
4458
  'choices' => array()
4459
  )
4460
  );
4461
+
4462
  /* load the old filterable slider settings */
4463
  if ( 'slider' == $type ) {
4464
+
4465
  $settings = ot_slider_settings( $name );
4466
+
4467
  }
4468
+
4469
  /* if no settings array load the filterable list item settings */
4470
  if ( empty( $settings ) ) {
4471
+
4472
  $settings = ot_list_item_settings( $name );
4473
+
4474
  }
4475
+
4476
  /* merge the two settings array */
4477
  $settings = array_merge( $required_setting, $settings );
4478
+
4479
  echo '
4480
  <div class="option-tree-setting">
4481
  <div class="open">' . ( isset( $list_item['title'] ) ? esc_attr( $list_item['title'] ) : '' ) . '</div>
4488
  </a>
4489
  </div>
4490
  <div class="option-tree-setting-body">';
4491
+
4492
  foreach( $settings as $field ) {
4493
+
4494
  // Set field value
4495
  $field_value = isset( $list_item[$field['id']] ) ? $list_item[$field['id']] : '';
4496
+
4497
  /* set default to standard value */
4498
+ if ( isset( $field['std'] ) ) {
4499
  $field_value = ot_filter_std_value( $field_value, $field['std'] );
4500
  }
4501
+
4502
  // filter the title label and description
4503
  if ( $field['id'] == 'title' ) {
4504
+
4505
  // filter the label
4506
  $field['label'] = apply_filters( 'ot_list_item_title_label', $field['label'], $name );
4507
+
4508
  // filter the description
4509
  $field['desc'] = apply_filters( 'ot_list_item_title_desc', $field['desc'], $name );
4510
+
4511
  }
4512
+
4513
  /* make life easier */
4514
  $_field_name = $get_option ? $get_option . '[' . $name . ']' : $name;
4515
+
4516
  /* build the arguments array */
4517
  $_args = array(
4518
  'type' => $field['type'],
4533
  'post_id' => $post_id,
4534
  'get_option' => $get_option
4535
  );
4536
+
4537
  $conditions = '';
4538
+
4539
  /* setup the conditions */
4540
  if ( isset( $field['condition'] ) && ! empty( $field['condition'] ) ) {
4541
+
4542
  /* doing magic on the conditions so they work in a list item */
4543
  $conditionals = explode( ',', $field['condition'] );
4544
  foreach( $conditionals as $condition ) {
4571
  $class = 'format-settings';
4572
 
4573
  }
4574
+
4575
  /* option label */
4576
  echo '<div id="setting_' . $_args['field_id'] . '" class="' . $class . '"' . $conditions . '>';
4577
+
4578
  /* don't show title with textblocks */
4579
  if ( $_args['type'] != 'textblock' && ! empty( $field['label'] ) ) {
4580
  echo '<div class="format-setting-label">';
4581
  echo '<h3 class="label">' . esc_attr( $field['label'] ) . '</h3>';
4582
  echo '</div>';
4583
  }
4584
+
4585
  /* only allow simple textarea inside a list-item due to known DOM issues with wp_editor() */
4586
  if ( apply_filters( 'ot_override_forced_textarea_simple', false, $field['id'] ) == false && $_args['type'] == 'textarea' )
4587
  $_args['type'] = 'textarea-simple';
4588
+
4589
  /* option body, list-item is not allowed inside another list-item */
4590
  if ( $_args['type'] !== 'list-item' && $_args['type'] !== 'slider' ) {
4591
  echo ot_display_by_type( $_args );
4592
  }
4593
+
4594
  echo '</div>';
4595
+
4596
  }
4597
+
4598
  echo '</div>';
4599
+
4600
  echo '</div>';
4601
+
4602
  }
4603
+
4604
  }
4605
 
4606
  /**
4621
  if ( ! function_exists( 'ot_social_links_view' ) ) {
4622
 
4623
  function ot_social_links_view( $name, $key, $list_item = array(), $post_id = 0, $get_option = '', $settings = array(), $type = '' ) {
4624
+
4625
  /* if no settings array load the filterable social links settings */
4626
  if ( empty( $settings ) ) {
4627
+
4628
  $settings = ot_social_links_settings( $name );
4629
+
4630
  }
4631
+
4632
  echo '
4633
  <div class="option-tree-setting">
4634
  <div class="open">' . ( isset( $list_item['name'] ) ? esc_attr( $list_item['name'] ) : '' ) . '</div>
4641
  </a>
4642
  </div>
4643
  <div class="option-tree-setting-body">';
4644
+
4645
  foreach( $settings as $field ) {
4646
+
4647
  // Set field value
4648
  $field_value = isset( $list_item[$field['id']] ) ? $list_item[$field['id']] : '';
4649
+
4650
  /* set default to standard value */
4651
+ if ( isset( $field['std'] ) ) {
4652
  $field_value = ot_filter_std_value( $field_value, $field['std'] );
4653
  }
4654
+
4655
  /* make life easier */
4656
  $_field_name = $get_option ? $get_option . '[' . $name . ']' : $name;
4657
+
4658
  /* build the arguments array */
4659
  $_args = array(
4660
  'type' => $field['type'],
4675
  'post_id' => $post_id,
4676
  'get_option' => $get_option
4677
  );
4678
+
4679
  $conditions = '';
4680
+
4681
  /* setup the conditions */
4682
  if ( isset( $field['condition'] ) && ! empty( $field['condition'] ) ) {
4683
+
4684
  /* doing magic on the conditions so they work in a list item */
4685
  $conditionals = explode( ',', $field['condition'] );
4686
  foreach( $conditionals as $condition ) {
4694
  $conditions.= isset( $field['operator'] ) && in_array( $field['operator'], array( 'and', 'AND', 'or', 'OR' ) ) ? ' data-operator="' . $field['operator'] . '"' : '';
4695
 
4696
  }
4697
+
4698
  /* option label */
4699
  echo '<div id="setting_' . $_args['field_id'] . '" class="format-settings"' . $conditions . '>';
4700
+
4701
  /* don't show title with textblocks */
4702
  if ( $_args['type'] != 'textblock' && ! empty( $field['label'] ) ) {
4703
  echo '<div class="format-setting-label">';
4704
  echo '<h3 class="label">' . esc_attr( $field['label'] ) . '</h3>';
4705
  echo '</div>';
4706
  }
4707
+
4708
  /* only allow simple textarea inside a list-item due to known DOM issues with wp_editor() */
4709
  if ( $_args['type'] == 'textarea' )
4710
  $_args['type'] = 'textarea-simple';
4711
+
4712
  /* option body, list-item is not allowed inside another list-item */
4713
  if ( $_args['type'] !== 'list-item' && $_args['type'] !== 'slider' && $_args['type'] !== 'social-links' ) {
4714
  echo ot_display_by_type( $_args );
4715
  }
4716
+
4717
  echo '</div>';
4718
+
4719
  }
4720
+
4721
  echo '</div>';
4722
+
4723
  echo '</div>';
4724
+
4725
  }
4726
+
4727
  }
4728
 
4729
  /**
4737
  if ( ! function_exists( 'niftycs_options_layouts_form' ) ) {
4738
 
4739
  function niftycs_options_layouts_form( $active = false ) {
4740
+
4741
  echo '<form method="post" id="option-tree-options-layouts-form">';
4742
+
4743
  /* form nonce */
4744
  wp_nonce_field( 'option_tree_modify_layouts_form', 'option_tree_modify_layouts_nonce' );
4745
+
4746
  /* get the saved layouts */
4747
  $layouts = get_option( ot_layouts_id() );
4748
+
4749
  /* set active layout */
4750
  $active_layout = isset( $layouts['active_layout'] ) ? $layouts['active_layout'] : '';
4751
 
4752
  if ( is_array( $layouts ) && count( $layouts ) > 1 ) {
4753
+
4754
  $active_layout = esc_attr( $layouts['active_layout'] );
4755
+
4756
  echo '<input type="hidden" id="the_current_layout" value="' . $active_layout . '" />';
4757
+
4758
  echo '<div class="option-tree-active-layout">';
4759
+
4760
  echo '<select name="' . ot_layouts_id() . '[active_layout]" class="option-tree-ui-select">';
4761
+
4762
+ foreach( $layouts as $key => $data ) {
4763
+
4764
  if ( $key == 'active_layout' )
4765
  continue;
4766
+
4767
  echo '<option' . selected( $key, $active_layout, false ) . ' value="' . esc_attr( $key ) . '">' . esc_attr( $key ) . '</option>';
4768
  }
4769
+
4770
  echo '</select>';
4771
+
4772
  echo '</div>';
4773
+
4774
  foreach( $layouts as $key => $data ) {
4775
+
4776
  if ( $key == 'active_layout' )
4777
  continue;
4778
+
4779
  echo '<input type="hidden" name="' . ot_layouts_id() . '[' . $key . ']" value="' . ( isset( $data ) ? $data : '' ) . '" />';
4780
+
4781
  }
4782
+
4783
  }
4784
+
4785
  /* new layout wrapper */
4786
  echo '<div class="option-tree-save-layout' . ( ! empty( $active_layout ) ? ' active-layout' : '' ) . '">';
4787
+
4788
  /* add new layout */
4789
  echo '<input type="text" name="' . ot_layouts_id() . '[_add_new_layout_]" value="" class="widefat option-tree-ui-input" autocomplete="off" />';
4790
+
4791
  echo '<button type="submit" class="option-tree-ui-button button button-primary save-layout" title="' . __( 'New Layout', 'option-tree' ) . '">' . __( 'New Layout', 'option-tree' ) . '</button>';
4792
+
4793
  echo '</div>';
4794
+
4795
  echo '</form>';
4796
+
4797
  }
4798
 
4799
  }
4810
  if ( ! function_exists( 'ot_sanitize_option_id' ) ) {
4811
 
4812
  function ot_sanitize_option_id( $input ) {
4813
+
4814
  return preg_replace( '/[^a-z0-9]/', '_', trim( strtolower( $input ) ) );
4815
+
4816
  }
4817
 
4818
  }
4829
  if ( ! function_exists( 'ot_sanitize_layout_id' ) ) {
4830
 
4831
  function ot_sanitize_layout_id( $input ) {
4832
+
4833
  return preg_replace( '/[^a-z0-9]/', '-', trim( strtolower( $input ) ) );
4834
+
4835
  }
4836
 
4837
  }
4852
 
4853
  foreach( $input as $k => $choice ) {
4854
  $choices[$k] = $choice['value'] . '|' . $choice['label'];
4855
+
4856
  if ( isset( $choice['src'] ) )
4857
  $choices[$k].= '|' . $choice['src'];
4858
+
4859
  }
4860
+
4861
  return implode( ',', $choices );
4862
  }
4863
+
4864
  return false;
4865
  }
4866
  }
4876
  if ( ! function_exists( 'ot_convert_string_to_array' ) ) {
4877
 
4878
  function ot_convert_string_to_array( $input ) {
4879
+
4880
  if ( '' !== $input ) {
4881
+
4882
  /* empty choices array */
4883
  $choices = array();
4884
+
4885
  /* exlode the string into an array */
4886
  foreach( explode( ',', $input ) as $k => $choice ) {
4887
+
4888
  /* if ":" is splitting the string go deeper */
4889
  if ( preg_match( '/\|/', $choice ) ) {
4890
  $split = explode( '|', $choice );
4891
  $choices[$k]['value'] = trim( $split[0] );
4892
  $choices[$k]['label'] = trim( $split[1] );
4893
+
4894
  /* if radio image there are three values */
4895
  if ( isset( $split[2] ) )
4896
  $choices[$k]['src'] = trim( $split[2] );
4897
+
4898
  } else {
4899
  $choices[$k]['value'] = trim( $choice );
4900
  $choices[$k]['label'] = trim( $choice );
4901
  }
4902
+
4903
  }
4904
+
4905
  /* return a formated choices array */
4906
  return $choices;
4907
+
4908
  }
4909
+
4910
  return false;
4911
+
4912
  }
4913
  }
4914
 
4925
  if ( ! function_exists( 'ot_strpos_array' ) ) {
4926
 
4927
  function ot_strpos_array( $haystack, $needles = array() ) {
4928
+
4929
  foreach( $needles as $needle ) {
4930
  $pos = strpos( $haystack, $needle );
4931
  if ( $pos !== false ) {
4932
  return true;
4933
  }
4934
  }
4935
+
4936
  return false;
4937
  }
4938
 
4949
  * @since 2.0
4950
  */
4951
  if ( ! function_exists( 'ot_array_keys_exists' ) ) {
4952
+
4953
  function ot_array_keys_exists( $array, $keys ) {
4954
+
4955
  foreach($keys as $k) {
4956
  if ( isset($array[$k]) ) {
4957
  return true;
4958
  }
4959
  }
4960
+
4961
  return false;
4962
  }
4963
+
4964
  }
4965
 
4966
  /**
4975
  if ( ! function_exists( 'ot_stripslashes' ) ) {
4976
 
4977
  function ot_stripslashes( $input ) {
4978
+
4979
  if ( is_array( $input ) ) {
4980
+
4981
  foreach( $input as &$val ) {
4982
+
4983
  if ( is_array( $val ) ) {
4984
+
4985
  $val = ot_stripslashes( $val );
4986
+
4987
  } else {
4988
+
4989
  $val = stripslashes( trim( $val ) );
4990
+
4991
  }
4992
+
4993
  }
4994
+
4995
  } else {
4996
+
4997
  $input = stripslashes( trim( $input ) );
4998
+
4999
  }
5000
+
5001
  return $input;
5002
+
5003
  }
5004
 
5005
  }
5016
  if ( ! function_exists( 'ot_reverse_wpautop' ) ) {
5017
 
5018
  function ot_reverse_wpautop( $string = '' ) {
5019
+
5020
  /* return if string is empty */
5021
  if ( trim( $string ) === '' )
5022
  return '';
5023
+
5024
  /* remove all new lines & <p> tags */
5025
  $string = str_replace( array( "\n", "<p>" ), "", $string );
5026
+
5027
  /* replace <br /> with \r */
5028
  $string = str_replace( array( "<br />", "<br>", "<br/>" ), "\r", $string );
5029
+
5030
  /* replace </p> with \r\n */
5031
  $string = str_replace( "</p>", "\r\n", $string );
5032
+
5033
  /* return clean string */
5034
  return trim( $string );
5035
+
5036
  }
5037
 
5038
  }
5040
  /**
5041
  * Returns an array of elements from start to limit, inclusive.
5042
  *
5043
+ * Occasionally zero will be some impossibly large number to
5044
  * the "E" power when creating a range from negative to positive.
5045
  * This function attempts to fix that by setting that number back to "0".
5046
  *
5047
  * @param string $start First value of the sequence.
5048
  * @param string $limit The sequence is ended upon reaching the limit value.
5049
+ * @param string $step If a step value is given, it will be used as the increment
5050
+ * between elements in the sequence. step should be given as a
5051
  * positive number. If not specified, step will default to 1.
5052
  * @return array
5053
  *
5055
  * @since 2.0.12
5056
  */
5057
  function ot_range( $start, $limit, $step = 1 ) {
5058
+
5059
  if ( $step < 0 )
5060
  $step = 1;
5061
+
5062
  $range = range( $start, $limit, $step );
5063
+
5064
  foreach( $range as $k => $v ) {
5065
  if ( strpos( $v, 'E' ) ) {
5066
  $range[$k] = 0;
5067
  }
5068
  }
5069
+
5070
  return $range;
5071
  }
5072
 
5082
 
5083
  $func = 'base64' . '_encode';
5084
  return $func( $value );
5085
+
5086
  }
5087
 
5088
  /**
5097
 
5098
  $func = 'base64' . '_decode';
5099
  return $func( $value );
5100
+
5101
  }
5102
 
5103
  /**
5110
 
5111
  $func = 'f' . 'open';
5112
  return @$func( $handle, $mode );
5113
+
5114
  }
5115
 
5116
  /**
5123
 
5124
  $func = 'f' . 'close';
5125
  return $func( $handle );
5126
+
5127
  }
5128
 
5129
  /**
5136
 
5137
  $func = 'f' . 'write';
5138
  return $func( $handle, $string );
5139
+
5140
  }
5141
 
5142
  /**
5150
  * @since 2.0.15
5151
  */
5152
  function ot_filter_std_value( $value = '', $std = '' ) {
5153
+
5154
  $std = maybe_unserialize( $std );
5155
+
5156
  if ( is_array( $value ) && is_array( $std ) ) {
5157
+
5158
  foreach( $value as $k => $v ) {
5159
+
5160
  if ( '' == $value[$k] && isset( $std[$k] ) ) {
5161
+
5162
  $value[$k] = $std[$k];
5163
+
5164
  }
5165
+
5166
  }
5167
+
5168
  } else if ( '' == $value && ! empty( $std ) ) {
5169
+
5170
  $value = $std;
5171
+
5172
  }
5173
 
5174
  return $value;
5175
+
5176
  }
5177
 
5178
  /**
5254
 
5255
  /* Initiate API request */
5256
  $ot_google_fonts_query_args = array(
5257
+ 'key' => $ot_google_fonts_api_key,
5258
+ 'fields' => 'items(' . implode( ',', $ot_google_fonts_fields ) . ')',
5259
  'sort' => $ot_google_fonts_sort
5260
  );
5261
 
5274
  if ( is_array( $ot_google_fonts_data ) && isset( $ot_google_fonts_data['items'] ) ) {
5275
 
5276
  $ot_google_fonts = $ot_google_fonts_data['items'];
5277
+
5278
  // Normalize the array key
5279
  $ot_google_fonts_tmp = array();
5280
  foreach( $ot_google_fonts as $key => $value ) {
5283
  $id = preg_replace( '/[^a-z0-9_\-]/', '', $id );
5284
  $ot_google_fonts_tmp[$id] = $value;
5285
  }
5286
+
5287
  $ot_google_fonts = $ot_google_fonts_tmp;
5288
  set_theme_mod( 'ot_google_fonts', $ot_google_fonts );
5289
  set_transient( $ot_google_fonts_cache_key, $ot_google_fonts, WEEK_IN_SECONDS );
5356
  function ot_wpml_register_string( $id, $value ) {
5357
 
5358
  if ( function_exists( 'icl_register_string' ) ) {
5359
+
5360
  icl_register_string( 'Theme Options', $id, $value );
5361
+
5362
  }
5363
+
5364
  }
5365
 
5366
  /**
5372
  function ot_wpml_unregister_string( $id ) {
5373
 
5374
  if ( function_exists( 'icl_unregister_string' ) ) {
5375
+
5376
  icl_unregister_string( 'Theme Options', $id );
5377
+
5378
  }
5379
+
5380
  }
5381
 
5382
  /**
5390
  if ( ! function_exists( 'ot_maybe_migrate_settings' ) ) {
5391
 
5392
  function ot_maybe_migrate_settings() {
5393
+
5394
  // Filter the ID to migrate from
5395
  $settings_id = apply_filters( 'ot_migrate_settings_id', '' );
5396
+
5397
+ // Attempt to migrate Settings
5398
  if ( ! empty( $settings_id ) && get_option( ot_settings_id() ) === false && ot_settings_id() !== $settings_id ) {
5399
+
5400
  // Old settings
5401
  $settings = get_option( $settings_id );
5402
+
5403
  // Check for array keys
5404
  if ( isset( $settings['sections'] ) && isset( $settings['settings'] ) ) {
5405
+
5406
  update_option( ot_settings_id(), $settings );
5407
+
5408
  }
5409
+
5410
  }
5411
 
5412
  }
5413
+
5414
  }
5415
 
5416
  /**
5424
  if ( ! function_exists( 'ot_maybe_migrate_options' ) ) {
5425
 
5426
  function ot_maybe_migrate_options() {
5427
+
5428
  // Filter the ID to migrate from
5429
  $options_id = apply_filters( 'ot_migrate_options_id', '' );
5430
+
5431
  // Attempt to migrate Theme Options
5432
  if ( ! empty( $options_id ) && get_option( ot_options_id() ) === false && ot_options_id() !== $options_id ) {
5433
+
5434
  // Old options
5435
  $options = get_option( $options_id );
5436
+
5437
  // Migrate to new ID
5438
  update_option( ot_options_id(), $options );
5439
+
5440
  }
5441
 
5442
  }
5443
+
5444
  }
5445
 
5446
  /**
5454
  if ( ! function_exists( 'ot_maybe_migrate_layouts' ) ) {
5455
 
5456
  function ot_maybe_migrate_layouts() {
5457
+
5458
  // Filter the ID to migrate from
5459
  $layouts_id = apply_filters( 'ot_migrate_layouts_id', '' );
5460
+
5461
  // Attempt to migrate Layouts
5462
  if ( ! empty( $layouts_id ) && get_option( ot_layouts_id() ) === false && ot_layouts_id() !== $layouts_id ) {
5463
+
5464
  // Old options
5465
  $layouts = get_option( $layouts_id );
5466
+
5467
  // Migrate to new ID
5468
  update_option( ot_layouts_id(), $layouts );
5469
+
5470
  }
5471
 
5472
  }
5476
  /**
5477
  * Returns an array with the post format gallery meta box.
5478
  *
5479
+ * @param mixed $pages Excepts a comma separated string or array of
5480
+ * post_types and is what tells the metabox where to
5481
  * display. Default 'post'.
5482
  * @return array
5483
  *
5488
 
5489
  if ( ! current_theme_supports( 'post-formats' ) || ! in_array( 'gallery', current( get_theme_support( 'post-formats' ) ) ) )
5490
  return false;
5491
+
5492
  if ( is_string( $pages ) )
5493
  $pages = explode( ',', $pages );
5494
+
5495
  return apply_filters( 'ot_meta_box_post_format_gallery', array(
5496
  'id' => 'ot-post-format-gallery',
5497
  'title' => __( 'Gallery', 'option-tree' ),
5516
  /**
5517
  * Returns an array with the post format link metabox.
5518
  *
5519
+ * @param mixed $pages Excepts a comma separated string or array of
5520
+ * post_types and is what tells the metabox where to
5521
  * display. Default 'post'.
5522
  * @return array
5523
  *
5525
  * @since 2.4.0
5526
  */
5527
  function ot_meta_box_post_format_link( $pages = 'post' ) {
5528
+
5529
  if ( ! current_theme_supports( 'post-formats' ) || ! in_array( 'link', current( get_theme_support( 'post-formats' ) ) ) )
5530
  return false;
5531
+
5532
  if ( is_string( $pages ) )
5533
  $pages = explode( ',', $pages );
5534
+
5535
  return apply_filters( 'ot_meta_box_post_format_link', array(
5536
  'id' => 'ot-post-format-link',
5537
  'title' => __( 'Link', 'option-tree' ),
5562
  /**
5563
  * Returns an array with the post format quote metabox.
5564
  *
5565
+ * @param mixed $pages Excepts a comma separated string or array of
5566
+ * post_types and is what tells the metabox where to
5567
  * display. Default 'post'.
5568
  * @return array
5569
  *
5571
  * @since 2.4.0
5572
  */
5573
  function ot_meta_box_post_format_quote( $pages = 'post' ) {
5574
+
5575
  if ( ! current_theme_supports( 'post-formats' ) || ! in_array( 'quote', current( get_theme_support( 'post-formats' ) ) ) )
5576
  return false;
5577
+
5578
  if ( is_string( $pages ) )
5579
  $pages = explode( ',', $pages );
5580
 
5622
  /**
5623
  * Returns an array with the post format video metabox.
5624
  *
5625
+ * @param mixed $pages Excepts a comma separated string or array of
5626
+ * post_types and is what tells the metabox where to
5627
  * display. Default 'post'.
5628
  * @return array
5629
  *
5631
  * @since 2.4.0
5632
  */
5633
  function ot_meta_box_post_format_video( $pages = 'post' ) {
5634
+
5635
  if ( ! current_theme_supports( 'post-formats' ) || ! in_array( 'video', current( get_theme_support( 'post-formats' ) ) ) )
5636
  return false;
5637
+
5638
  if ( is_string( $pages ) )
5639
  $pages = explode( ',', $pages );
5640
+
5641
  return apply_filters( 'ot_meta_box_post_format_video', array(
5642
  'id' => 'ot-post-format-video',
5643
  'title' => __( 'Video', 'option-tree' ),
5661
  /**
5662
  * Returns an array with the post format audio metabox.
5663
  *
5664
+ * @param mixed $pages Excepts a comma separated string or array of
5665
+ * post_types and is what tells the metabox where to
5666
  * display. Default 'post'.
5667
  * @return array
5668
  *
5670
  * @since 2.4.0
5671
  */
5672
  function ot_meta_box_post_format_audio( $pages = 'post' ) {
5673
+
5674
  if ( ! current_theme_supports( 'post-formats' ) || ! in_array( 'audio', current( get_theme_support( 'post-formats' ) ) ) )
5675
  return false;
5676
+
5677
  if ( is_string( $pages ) )
5678
  $pages = explode( ',', $pages );
5679
+
5680
  return apply_filters( 'ot_meta_box_post_format_audio', array(
5681
  'id' => 'ot-post-format-audio',
5682
  'title' => __( 'Audio', 'option-tree' ),
5710
  if ( ! function_exists( 'ot_get_option_type_by_id' ) ) {
5711
 
5712
  function ot_get_option_type_by_id( $option_id, $settings_id = '' ) {
5713
+
5714
  if ( empty( $settings_id ) ) {
5715
+
5716
  $settings_id = ot_settings_id();
5717
+
5718
  }
5719
+
5720
  $settings = get_option( $settings_id, array() );
5721
+
5722
  if ( isset( $settings['settings'] ) ) {
5723
+
5724
  foreach( $settings['settings'] as $value ) {
5725
+
5726
  if ( $option_id == $value['id'] && isset( $value['type'] ) ) {
5727
+
5728
  return $value['type'];
5729
+
5730
  }
5731
+
5732
  }
5733
+
5734
  }
5735
+
5736
  return false;
5737
+
5738
  }
5739
+
5740
  }
5741
 
5742
  /**
5751
 
5752
  $options = array();
5753
  $settings = get_option( ot_settings_id(), array() );
5754
+ $option_types = array(
5755
  'category-checkbox',
5756
  'category-select',
5757
  'tag-checkbox',
5782
  }
5783
 
5784
  if ( ! empty( $sub_options ) ) {
5785
+ $options[] = array(
5786
  'id' => $item['id'],
5787
  'taxonomy' => $value['taxonomy'],
5788
  'parent' => $value['id'],
5798
  if ( in_array( $value['type'], $option_types ) ) {
5799
  $saved = ot_get_option( $value['id'] );
5800
  if ( ! empty( $saved ) ) {
5801
+ $options[] = array(
5802
  'id' => $value['id'],
5803
  'taxonomy' => $value['taxonomy'],
5804
  'value' => $saved
5829
 
5830
  $options = array();
5831
  $settings = $ot_meta_boxes;
5832
+ $option_types = array(
5833
  'category-checkbox',
5834
  'category-select',
5835
  'tag-checkbox',
5859
  }
5860
 
5861
  }
5862
+
5863
  if ( ! empty( $children[$value['id']] ) ) {
5864
+ $options[] = array(
5865
  'id' => $value['id'],
5866
  'children' => $children[$value['id']],
5867
  'taxonomy' => $value['taxonomy'],
5872
 
5873
  if ( in_array( $value['type'], $option_types ) ) {
5874
 
5875
+ $options[] = array(
5876
  'id' => $value['id'],
5877
  'taxonomy' => $value['taxonomy'],
5878
  );
5997
 
5998
  // Process the Meta Boxes
5999
  $meta_settings = _ot_meta_box_potential_shared_terms();
6000
+ $option_types = array(
6001
  'category-checkbox',
6002
  'category-select',
6003
  'tag-checkbox',
6008
 
6009
  if ( ! empty( $meta_settings ) ) {
6010
  $old_meta = array();
6011
+
6012
  foreach( $meta_settings as $option ) {
6013
 
6014
  if ( ! is_array( $option['taxonomy'] ) ) {
6015
  $option['taxonomy'] = explode( ',', $option['taxonomy'] );
6016
  }
6017
+
6018
  if ( ! in_array( $taxonomy, $option['taxonomy'] ) ) {
6019
  continue;
6020
  }
6074
 
6075
  // Update
6076
  if ( $old_meta !== $new_meta ) {
6077
+
6078
  update_post_meta( $post_id, $option['id'], $new_meta, $old_meta );
6079
+
6080
  }
6081
 
6082
  }
6131
 
6132
  // Update
6133
  if ( $old_meta !== $new_meta ) {
6134
+
6135
  update_post_meta( $post_id, $option['id'], $new_meta, $old_meta );
6136
+
6137
  }
6138
 
6139
  }
6152
  add_action( 'split_shared_term', 'ot_split_shared_term', 10, 4 );
6153
 
6154
  /* End of file ot-functions-admin.php */
6155
+ /* Location: ./includes/ot-functions-admin.php */
admin/includes/ot-settings-api.php CHANGED
@@ -304,11 +304,16 @@ if ( ! class_exists( 'OT_Settings' ) ) {
304
  echo '<button class="option-tree-ui-button button button-primary right">' . $page['button_text'] . '</button>';
305
  echo '<a target="_blank" href="'. get_site_url().'/?get_preview=true"><div class="option-tree-ui-button button right">Live Preview</div></a>';
306
  $options = get_option('nifty_options');
307
- if (empty($options['hide_notice']['rate'])) {
308
  $dismiss_url = add_query_arg(array('action' => 'nifty_dismiss_notice', 'notice' => 'rate', 'redirect' => urlencode($_SERVER['REQUEST_URI'])), admin_url('admin.php'));
309
  echo '<div id="rate-plugin">Please help us out by rating Nifty. It only takes a second &amp; it helps to keep the plugin going! <b>Thank you!</b><p><a target="_blank" href="https://wordpress.org/support/plugin/nifty-coming-soon-and-under-construction-page/reviews/#new-post" class="button button-primary">I want to help! Let\'s rate the plugin!</a> &nbsp;&nbsp; <a href="' . $dismiss_url . '">I\'ve already rated Nifty</a></p></div>';
310
  }
311
 
 
 
 
 
 
312
  /*
313
  echo '<div class="of-notice-small"><p>All themes come with <b>optin boxes</b> &amp; <b>optin popups</b> that you can connect to Mailchimp and other autoresponders to collect leads &amp; subscribers.';
314
  if (ot_is_weforms_active()) {
304
  echo '<button class="option-tree-ui-button button button-primary right">' . $page['button_text'] . '</button>';
305
  echo '<a target="_blank" href="'. get_site_url().'/?get_preview=true"><div class="option-tree-ui-button button right">Live Preview</div></a>';
306
  $options = get_option('nifty_options');
307
+ if (false && empty($options['hide_notice']['rate'])) {
308
  $dismiss_url = add_query_arg(array('action' => 'nifty_dismiss_notice', 'notice' => 'rate', 'redirect' => urlencode($_SERVER['REQUEST_URI'])), admin_url('admin.php'));
309
  echo '<div id="rate-plugin">Please help us out by rating Nifty. It only takes a second &amp; it helps to keep the plugin going! <b>Thank you!</b><p><a target="_blank" href="https://wordpress.org/support/plugin/nifty-coming-soon-and-under-construction-page/reviews/#new-post" class="button button-primary">I want to help! Let\'s rate the plugin!</a> &nbsp;&nbsp; <a href="' . $dismiss_url . '">I\'ve already rated Nifty</a></p></div>';
310
  }
311
 
312
+ if (empty($options['hide_notice']['weforms']) && !ot_is_weforms_active()) {
313
+ $dismiss_url = add_query_arg(array('action' => 'nifty_dismiss_notice', 'notice' => 'weforms', 'redirect' => urlencode($_SERVER['REQUEST_URI'])), admin_url('admin.php'));
314
+ echo '<div id="rate-plugin">Collecting leads &amp; subscribers is the key function of any Coming Soon page. That\'s why we partnered with the free <a href="#" class="open-weforms-upsell">weForms</a> plugin to enable you to start collecting leads and subscribers. A contact form, event registration form, survey form - weForms supports all of them.<p><a href="#" class="button button-primary open-weforms-upsell">Install the free weForms plugin &amp; start collecting leads</a> &nbsp;&nbsp; <a href="' . $dismiss_url . '">I\'m not interested</a></p></div>';
315
+ }
316
+
317
  /*
318
  echo '<div class="of-notice-small"><p>All themes come with <b>optin boxes</b> &amp; <b>optin popups</b> that you can connect to Mailchimp and other autoresponders to collect leads &amp; subscribers.';
319
  if (ot_is_weforms_active()) {
admin/main-options.php CHANGED
@@ -31,7 +31,7 @@ function nifty_cs_custom_theme_options() {
31
 
32
  function admin_action_dismiss_notice() {
33
  if (empty($_GET['notice'])) {
34
- wp_redirect(admin_url());
35
  exit;
36
  }
37
 
@@ -39,15 +39,19 @@ function admin_action_dismiss_notice() {
39
 
40
  if ($_GET['notice'] == 'rate') {
41
  $options['hide_notice']['rate'] = true;
 
 
 
 
 
42
  }
43
 
44
-
45
  update_option('nifty_options', $options);
46
 
47
  if (!empty($_GET['redirect'])) {
48
- wp_redirect($_GET['redirect']);
49
  } else {
50
- wp_redirect(admin_url());
51
  }
52
 
53
  exit;
@@ -939,13 +943,15 @@ function ot_type_custom_themes() {
939
  $weforms_setting = array(
940
  'id' => 'weforms_sign_up_form_enable',
941
  'label' => 'Any Kind of Form - Contact, Subscribe, Event, Optin,...',
942
- 'desc' => 'Collecting subscribers and giving users the ability to contact you is one of the most important aspects of any coming soon page. To add any kind of form, <a href="#" class="open-weforms-upsell">install the free weForms plugin</a>. It seamlessly integrates with Nifty, offers numerous styling options and integrations, and will enable you to instantly collect subscribers without any additional costs.',
943
  'std' => 'off',
944
  'type' => 'on-off',
945
  'section' => 'general_settings',
946
  );
947
  }
948
 
 
 
949
  $custom_settings = array(
950
  'contextual_help' => array(
951
  'sidebar' => ''
31
 
32
  function admin_action_dismiss_notice() {
33
  if (empty($_GET['notice'])) {
34
+ wp_safe_redirect(admin_url());
35
  exit;
36
  }
37
 
39
 
40
  if ($_GET['notice'] == 'rate') {
41
  $options['hide_notice']['rate'] = true;
42
+ } elseif ($_GET['notice'] == 'weforms') {
43
+ $options['hide_notice']['weforms'] = true;
44
+ } else {
45
+ wp_safe_redirect(admin_url());
46
+ exit;
47
  }
48
 
 
49
  update_option('nifty_options', $options);
50
 
51
  if (!empty($_GET['redirect'])) {
52
+ wp_safe_redirect($_GET['redirect']);
53
  } else {
54
+ wp_safe_redirect(admin_url());
55
  }
56
 
57
  exit;
943
  $weforms_setting = array(
944
  'id' => 'weforms_sign_up_form_enable',
945
  'label' => 'Any Kind of Form - Contact, Subscribe, Event, Optin,...',
946
+ 'desc' => 'Collecting subscribers and giving users the ability to contact you is one of the most important features that every website needs. You can simply <a href="#" class="open-weforms-upsell">install the free weForms plugin</a> to add any kind of form to your coming soon page. weForms integrates seamlessly with Nifty, offering a wide range of styling options and useful integrations. More importantly, it enables you to get subscribers without any additional costs.',
947
  'std' => 'off',
948
  'type' => 'on-off',
949
  'section' => 'general_settings',
950
  );
951
  }
952
 
953
+
954
+
955
  $custom_settings = array(
956
  'contextual_help' => array(
957
  'sidebar' => ''
nifty-coming-soon.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Nifty Coming Soon & Maintenance page
4
  Plugin URI: https://wordpress.org/plugins/nifty-coming-soon-and-under-construction-page/
5
  Description: Easy to set up Coming Soon, Maintenance and Under Construction page. It features Responsive design, Countdown timer, Animations, Live Preview, Background Slider, Subscription form and more.
6
- Version: 1.40
7
  Author: WebFactory Ltd
8
  Author URI: https://webfactoryltd.com/
9
  License: GPLv3
@@ -215,11 +215,13 @@ if ( isset($_POST['email']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL
215
  */
216
  function nifty_add_plugin_featured($plugin_slug, $res) {
217
  // check if plugin is alredy on the list
218
- foreach ($res->plugins as $plugin) {
219
- if ($plugin->slug == $plugin_slug) {
220
- return $res;
221
- }
222
- } // foreach
 
 
223
 
224
  if ($plugin_info = get_transient('wf-plugin-info-' . $plugin_slug)) {
225
  //$res->plugins[] = $plugin_info;
3
  Plugin Name: Nifty Coming Soon & Maintenance page
4
  Plugin URI: https://wordpress.org/plugins/nifty-coming-soon-and-under-construction-page/
5
  Description: Easy to set up Coming Soon, Maintenance and Under Construction page. It features Responsive design, Countdown timer, Animations, Live Preview, Background Slider, Subscription form and more.
6
+ Version: 1.42
7
  Author: WebFactory Ltd
8
  Author URI: https://webfactoryltd.com/
9
  License: GPLv3
215
  */
216
  function nifty_add_plugin_featured($plugin_slug, $res) {
217
  // check if plugin is alredy on the list
218
+ if (!empty($res->plugins)) {
219
+ foreach ($res->plugins as $plugin) {
220
+ if ($plugin->slug == $plugin_slug) {
221
+ return $res;
222
+ }
223
+ } // foreach
224
+ }
225
 
226
  if ($plugin_info = get_transient('wf-plugin-info-' . $plugin_slug)) {
227
  //$res->plugins[] = $plugin_info;
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Coming Soon, Under Construction & Maintenance Page ===
2
- Contributors: WebFactory, wpreset, googlemapswidget, securityninja, underconstructionpage
3
  Tags: coming soon, coming soon page, launch page, maintenance mode, coming soon mode, under construction, maintenance mode page, landing page, offline page, subscribe form, maintenance
4
  Tested up to: 5.0
5
  License: GPLv3
6
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
- Stable tag: 1.40
8
 
9
  Nifty Coming Soon, Under Construction & Maintenance page builder creates awesome Coming Soon pages with all premium alike features for free.
10
 
@@ -87,6 +87,11 @@ As from the update of 1.0.9, the plugin offers the way to Live Preview you're Co
87
 
88
  == Changelog ==
89
 
 
 
 
 
 
90
  = 1.40 =
91
  * 2018/11/20
92
  * new: weForms integration - create any kind of form you need on the coming soon page
1
  === Coming Soon, Under Construction & Maintenance Page ===
2
+ Contributors: WebFactory
3
  Tags: coming soon, coming soon page, launch page, maintenance mode, coming soon mode, under construction, maintenance mode page, landing page, offline page, subscribe form, maintenance
4
  Tested up to: 5.0
5
  License: GPLv3
6
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
7
+ Stable tag: 1.42
8
 
9
  Nifty Coming Soon, Under Construction & Maintenance page builder creates awesome Coming Soon pages with all premium alike features for free.
10
 
87
 
88
  == Changelog ==
89
 
90
+ = 1.42 =
91
+ * 2018/11/27
92
+ * minor vulnerability removed
93
+ * few bugs fixed
94
+
95
  = 1.40 =
96
  * 2018/11/20
97
  * new: weForms integration - create any kind of form you need on the coming soon page