Contact Form 7 - Version 5.4

Version Description

https://contactform7.com/contact-form-7-54/

=

Download this release

Release Info

Developer takayukister
Plugin Icon 128x128 Contact Form 7
Version 5.4
Comparing to
See all releases

Code changes from version 5.3.2 to 5.4

Files changed (47) hide show
  1. admin/admin.php +111 -46
  2. admin/css/styles.css +16 -1
  3. admin/js/scripts.js +9 -0
  4. assets/ajax-loader.gif +0 -0
  5. includes/block-editor/index.js +1 -1
  6. includes/controller.php +115 -42
  7. includes/css/styles-rtl.css +4 -5
  8. includes/css/styles.css +66 -21
  9. includes/file.php +367 -0
  10. includes/formatting.php +33 -168
  11. includes/functions.php +0 -13
  12. includes/integration.php +4 -4
  13. includes/js/html5-fallback.js +26 -0
  14. includes/js/index.js +1 -0
  15. includes/js/jquery-ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  16. includes/js/jquery-ui/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  17. includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  18. includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  19. includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  20. includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  21. includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  22. includes/js/jquery-ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  23. includes/js/jquery-ui/themes/smoothness/images/ui-icons_222222_256x240.png +0 -0
  24. includes/js/jquery-ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  25. includes/js/jquery-ui/themes/smoothness/images/ui-icons_454545_256x240.png +0 -0
  26. includes/js/jquery-ui/themes/smoothness/images/ui-icons_888888_256x240.png +0 -0
  27. includes/js/jquery-ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  28. includes/js/jquery-ui/themes/smoothness/jquery-ui.css +318 -232
  29. includes/js/jquery-ui/themes/smoothness/jquery-ui.min.css +4 -4
  30. includes/js/jquery-ui/themes/smoothness/theme.css +66 -33
  31. includes/js/scripts.js +0 -531
  32. includes/mail.php +3 -4
  33. includes/submission.php +75 -15
  34. includes/validation-functions.php +168 -0
  35. license.txt +365 -366
  36. load.php +7 -3
  37. modules/constant-contact.php +5 -5
  38. modules/disallowed-list.php +1 -1
  39. modules/file.php +14 -306
  40. modules/recaptcha/index.js +1 -0
  41. modules/recaptcha/recaptcha.php +29 -9
  42. modules/recaptcha/script.js +0 -53
  43. modules/sendinblue/contact-form-properties.php +302 -0
  44. modules/sendinblue/sendinblue.php +173 -0
  45. modules/sendinblue/service.php +381 -0
  46. readme.txt +6 -51
  47. wp-contact-form-7.php +3 -3
admin/admin.php CHANGED
@@ -6,13 +6,21 @@ require_once WPCF7_PLUGIN_DIR . '/admin/includes/tag-generator.php';
6
  require_once WPCF7_PLUGIN_DIR . '/admin/includes/welcome-panel.php';
7
  require_once WPCF7_PLUGIN_DIR . '/admin/includes/config-validator.php';
8
 
9
- add_action( 'admin_init', 'wpcf7_admin_init', 10, 0 );
10
 
11
- function wpcf7_admin_init() {
12
- do_action( 'wpcf7_admin_init' );
13
- }
 
 
 
 
 
14
 
15
- add_action( 'admin_menu', 'wpcf7_admin_menu', 9, 0 );
 
 
 
 
16
 
17
  function wpcf7_admin_menu() {
18
  do_action( 'wpcf7_admin_menu' );
@@ -54,7 +62,7 @@ function wpcf7_admin_menu() {
54
 
55
  if ( $integration->service_exists() ) {
56
  $integration = add_submenu_page( 'wpcf7',
57
- __( 'Integration with Other Services', 'contact-form-7' ),
58
  __( 'Integration', 'contact-form-7' )
59
  . wpcf7_admin_menu_change_notice( 'wpcf7-integration' ),
60
  'wpcf7_manage_integration',
@@ -66,6 +74,7 @@ function wpcf7_admin_menu() {
66
  }
67
  }
68
 
 
69
  function wpcf7_admin_menu_change_notice( $menu_slug = '' ) {
70
  $counts = apply_filters( 'wpcf7_admin_menu_change_notice',
71
  array(
@@ -94,7 +103,12 @@ function wpcf7_admin_menu_change_notice( $menu_slug = '' ) {
94
  return '';
95
  }
96
 
97
- add_action( 'admin_enqueue_scripts', 'wpcf7_admin_enqueue_scripts', 10, 1 );
 
 
 
 
 
98
 
99
  function wpcf7_admin_enqueue_scripts( $hook_suffix ) {
100
  if ( false === strpos( $hook_suffix, 'wpcf7' ) ) {
@@ -160,32 +174,45 @@ function wpcf7_admin_enqueue_scripts( $hook_suffix ) {
160
 
161
  wp_enqueue_script( 'wpcf7-admin-taggenerator',
162
  wpcf7_plugin_url( 'admin/js/tag-generator.js' ),
163
- array( 'jquery', 'thickbox', 'wpcf7-admin' ), WPCF7_VERSION, true );
 
 
 
164
  }
165
 
166
- add_action( 'doing_dark_mode', 'wpcf7_dark_mode_support', 10, 1 );
 
 
 
 
 
167
 
168
  function wpcf7_dark_mode_support( $user_id ) {
169
  wp_enqueue_style( 'contact-form-7-admin-dark-mode',
170
  wpcf7_plugin_url( 'admin/css/styles-dark-mode.css' ),
171
- array( 'contact-form-7-admin' ), WPCF7_VERSION, 'screen' );
 
 
 
172
  }
173
 
174
- add_filter( 'set_screen_option_wpcf7_contact_forms_per_page',
175
- 'wpcf7_set_screen_options', 10, 3
176
- );
177
 
178
- function wpcf7_set_screen_options( $result, $option, $value ) {
179
- $wpcf7_screens = array(
180
- 'wpcf7_contact_forms_per_page',
181
- );
 
 
182
 
183
- if ( in_array( $option, $wpcf7_screens ) ) {
184
- $result = $value;
185
- }
 
 
 
 
 
186
 
187
- return $result;
188
- }
189
 
190
  function wpcf7_load_contact_form_admin() {
191
  global $plugin_page;
@@ -202,7 +229,9 @@ function wpcf7_load_contact_form_admin() {
202
  check_admin_referer( 'wpcf7-save-contact-form_' . $id );
203
 
204
  if ( ! current_user_can( 'wpcf7_edit_contact_form', $id ) ) {
205
- wp_die( __( 'You are not allowed to edit this item.', 'contact-form-7' ) );
 
 
206
  }
207
 
208
  $args = $_REQUEST;
@@ -264,7 +293,9 @@ function wpcf7_load_contact_form_admin() {
264
  check_admin_referer( 'wpcf7-copy-contact-form_' . $id );
265
 
266
  if ( ! current_user_can( 'wpcf7_edit_contact_form', $id ) ) {
267
- wp_die( __( 'You are not allowed to edit this item.', 'contact-form-7' ) );
 
 
268
  }
269
 
270
  $query = array();
@@ -306,11 +337,13 @@ function wpcf7_load_contact_form_admin() {
306
  }
307
 
308
  if ( ! current_user_can( 'wpcf7_delete_contact_form', $post->id() ) ) {
309
- wp_die( __( 'You are not allowed to delete this item.', 'contact-form-7' ) );
 
 
310
  }
311
 
312
  if ( ! $post->delete() ) {
313
- wp_die( __( 'Error in deleting.', 'contact-form-7' ) );
314
  }
315
 
316
  $deleted += 1;
@@ -352,8 +385,11 @@ function wpcf7_load_contact_form_admin() {
352
  require_once WPCF7_PLUGIN_DIR . '/admin/includes/class-contact-forms-list-table.php';
353
  }
354
 
355
- add_filter( 'manage_' . $current_screen->id . '_columns',
356
- array( 'WPCF7_Contact_Form_List_Table', 'define_columns' ), 10, 0 );
 
 
 
357
 
358
  add_screen_option( 'per_page', array(
359
  'default' => 20,
@@ -362,6 +398,7 @@ function wpcf7_load_contact_form_admin() {
362
  }
363
  }
364
 
 
365
  function wpcf7_admin_management_page() {
366
  if ( $post = wpcf7_get_current_contact_form() ) {
367
  $post_id = $post->initial() ? -1 : $post->id();
@@ -398,10 +435,12 @@ function wpcf7_admin_management_page() {
398
  }
399
 
400
  if ( ! empty( $_REQUEST['s'] ) ) {
401
- echo sprintf( '<span class="subtitle">'
 
402
  /* translators: %s: search keywords */
403
  . __( 'Search results for &#8220;%s&#8221;', 'contact-form-7' )
404
- . '</span>', esc_html( $_REQUEST['s'] )
 
405
  );
406
  }
407
  ?>
@@ -410,12 +449,14 @@ function wpcf7_admin_management_page() {
410
 
411
  <?php
412
  do_action( 'wpcf7_admin_warnings',
413
- 'wpcf7', wpcf7_current_action(), null );
 
414
 
415
  wpcf7_welcome_panel();
416
 
417
  do_action( 'wpcf7_admin_notices',
418
- 'wpcf7', wpcf7_current_action(), null );
 
419
  ?>
420
 
421
  <form method="get" action="">
@@ -428,6 +469,7 @@ function wpcf7_admin_management_page() {
428
  <?php
429
  }
430
 
 
431
  function wpcf7_admin_add_new_page() {
432
  $post = wpcf7_get_current_contact_form();
433
 
@@ -441,6 +483,7 @@ function wpcf7_admin_add_new_page() {
441
  require_once WPCF7_PLUGIN_DIR . '/admin/edit-contact-form.php';
442
  }
443
 
 
444
  function wpcf7_load_integration_page() {
445
  do_action( 'wpcf7_admin_load',
446
  isset( $_GET['page'] ) ? trim( $_GET['page'] ) : '',
@@ -459,6 +502,7 @@ function wpcf7_load_integration_page() {
459
  $help_tabs->set_help_tabs( 'integration' );
460
  }
461
 
 
462
  function wpcf7_admin_integration_page() {
463
  $integration = WPCF7_Integration::get_instance();
464
 
@@ -469,19 +513,24 @@ function wpcf7_admin_integration_page() {
469
  ?>
470
  <div class="wrap" id="wpcf7-integration">
471
 
472
- <h1><?php echo esc_html( __( 'Integration with Other Services', 'contact-form-7' ) ); ?></h1>
473
 
474
  <?php
475
  do_action( 'wpcf7_admin_warnings',
476
- 'wpcf7-integration', wpcf7_current_action(), $service );
 
477
 
478
  do_action( 'wpcf7_admin_notices',
479
- 'wpcf7-integration', wpcf7_current_action(), $service );
 
480
 
481
  if ( $service ) {
482
  $message = isset( $_REQUEST['message'] ) ? $_REQUEST['message'] : '';
483
  $service->admin_notice( $message );
484
- $integration->list_services( array( 'include' => $_REQUEST['service'] ) );
 
 
 
485
  } else {
486
  $integration->list_services();
487
  }
@@ -491,7 +540,6 @@ function wpcf7_admin_integration_page() {
491
  <?php
492
  }
493
 
494
- /* Misc */
495
 
496
  add_action( 'wpcf7_admin_notices', 'wpcf7_admin_updated_message', 10, 3 );
497
 
@@ -513,15 +561,23 @@ function wpcf7_admin_updated_message( $page, $action, $object ) {
513
  }
514
 
515
  if ( ! empty( $updated_message ) ) {
516
- echo sprintf( '<div id="message" class="notice notice-success is-dismissible"><p>%s</p></div>', esc_html( $updated_message ) );
 
 
 
 
517
  return;
518
  }
519
 
520
  if ( 'failed' == $_REQUEST['message'] ) {
521
- $updated_message = __( "There was an error saving the contact form.",
522
- 'contact-form-7' );
 
 
 
 
 
523
 
524
- echo sprintf( '<div id="message" class="notice notice-error is-dismissible"><p>%s</p></div>', esc_html( $updated_message ) );
525
  return;
526
  }
527
 
@@ -541,17 +597,24 @@ function wpcf7_admin_updated_message( $page, $action, $object ) {
541
  number_format_i18n( $count_invalid )
542
  );
543
 
544
- echo sprintf( '<div id="message" class="notice notice-warning is-dismissible"><p>%s</p></div>', esc_html( $updated_message ) );
 
 
 
545
  } else {
546
  $updated_message = __( "Configuration validation completed. No invalid contact form was found.", 'contact-form-7' );
547
 
548
- echo sprintf( '<div id="message" class="notice notice-success is-dismissible"><p>%s</p></div>', esc_html( $updated_message ) );
 
 
 
549
  }
550
 
551
  return;
552
  }
553
  }
554
 
 
555
  add_filter( 'plugin_action_links', 'wpcf7_plugin_action_links', 10, 2 );
556
 
557
  function wpcf7_plugin_action_links( $links, $file ) {
@@ -573,6 +636,7 @@ function wpcf7_plugin_action_links( $links, $file ) {
573
  return $links;
574
  }
575
 
 
576
  add_action( 'wpcf7_admin_warnings', 'wpcf7_old_wp_version_error', 10, 3 );
577
 
578
  function wpcf7_old_wp_version_error( $page, $action, $object ) {
@@ -597,6 +661,7 @@ function wpcf7_old_wp_version_error( $page, $action, $object ) {
597
  <?php
598
  }
599
 
 
600
  add_action( 'wpcf7_admin_warnings', 'wpcf7_not_allowed_to_edit', 10, 3 );
601
 
602
  function wpcf7_not_allowed_to_edit( $page, $action, $object ) {
@@ -610,10 +675,10 @@ function wpcf7_not_allowed_to_edit( $page, $action, $object ) {
610
  return;
611
  }
612
 
613
- $message = __( "You are not allowed to edit this contact form.",
614
- 'contact-form-7' );
615
 
616
  echo sprintf(
617
  '<div class="notice notice-warning"><p>%s</p></div>',
618
- esc_html( $message ) );
 
619
  }
6
  require_once WPCF7_PLUGIN_DIR . '/admin/includes/welcome-panel.php';
7
  require_once WPCF7_PLUGIN_DIR . '/admin/includes/config-validator.php';
8
 
 
9
 
10
+ add_action(
11
+ 'admin_init',
12
+ function () {
13
+ do_action( 'wpcf7_admin_init' );
14
+ },
15
+ 10, 0
16
+ );
17
+
18
 
19
+ add_action(
20
+ 'admin_menu',
21
+ 'wpcf7_admin_menu',
22
+ 9, 0
23
+ );
24
 
25
  function wpcf7_admin_menu() {
26
  do_action( 'wpcf7_admin_menu' );
62
 
63
  if ( $integration->service_exists() ) {
64
  $integration = add_submenu_page( 'wpcf7',
65
+ __( 'Integration with External API', 'contact-form-7' ),
66
  __( 'Integration', 'contact-form-7' )
67
  . wpcf7_admin_menu_change_notice( 'wpcf7-integration' ),
68
  'wpcf7_manage_integration',
74
  }
75
  }
76
 
77
+
78
  function wpcf7_admin_menu_change_notice( $menu_slug = '' ) {
79
  $counts = apply_filters( 'wpcf7_admin_menu_change_notice',
80
  array(
103
  return '';
104
  }
105
 
106
+
107
+ add_action(
108
+ 'admin_enqueue_scripts',
109
+ 'wpcf7_admin_enqueue_scripts',
110
+ 10, 1
111
+ );
112
 
113
  function wpcf7_admin_enqueue_scripts( $hook_suffix ) {
114
  if ( false === strpos( $hook_suffix, 'wpcf7' ) ) {
174
 
175
  wp_enqueue_script( 'wpcf7-admin-taggenerator',
176
  wpcf7_plugin_url( 'admin/js/tag-generator.js' ),
177
+ array( 'jquery', 'thickbox', 'wpcf7-admin' ),
178
+ WPCF7_VERSION,
179
+ true
180
+ );
181
  }
182
 
183
+
184
+ add_action(
185
+ 'doing_dark_mode',
186
+ 'wpcf7_dark_mode_support',
187
+ 10, 1
188
+ );
189
 
190
  function wpcf7_dark_mode_support( $user_id ) {
191
  wp_enqueue_style( 'contact-form-7-admin-dark-mode',
192
  wpcf7_plugin_url( 'admin/css/styles-dark-mode.css' ),
193
+ array( 'contact-form-7-admin' ),
194
+ WPCF7_VERSION,
195
+ 'screen'
196
+ );
197
  }
198
 
 
 
 
199
 
200
+ add_filter(
201
+ 'set_screen_option_wpcf7_contact_forms_per_page',
202
+ function ( $result, $option, $value ) {
203
+ $wpcf7_screens = array(
204
+ 'wpcf7_contact_forms_per_page',
205
+ );
206
 
207
+ if ( in_array( $option, $wpcf7_screens ) ) {
208
+ $result = $value;
209
+ }
210
+
211
+ return $result;
212
+ },
213
+ 10, 3
214
+ );
215
 
 
 
216
 
217
  function wpcf7_load_contact_form_admin() {
218
  global $plugin_page;
229
  check_admin_referer( 'wpcf7-save-contact-form_' . $id );
230
 
231
  if ( ! current_user_can( 'wpcf7_edit_contact_form', $id ) ) {
232
+ wp_die(
233
+ __( "You are not allowed to edit this item.", 'contact-form-7' )
234
+ );
235
  }
236
 
237
  $args = $_REQUEST;
293
  check_admin_referer( 'wpcf7-copy-contact-form_' . $id );
294
 
295
  if ( ! current_user_can( 'wpcf7_edit_contact_form', $id ) ) {
296
+ wp_die(
297
+ __( "You are not allowed to edit this item.", 'contact-form-7' )
298
+ );
299
  }
300
 
301
  $query = array();
337
  }
338
 
339
  if ( ! current_user_can( 'wpcf7_delete_contact_form', $post->id() ) ) {
340
+ wp_die(
341
+ __( "You are not allowed to delete this item.", 'contact-form-7' )
342
+ );
343
  }
344
 
345
  if ( ! $post->delete() ) {
346
+ wp_die( __( "Error in deleting.", 'contact-form-7' ) );
347
  }
348
 
349
  $deleted += 1;
385
  require_once WPCF7_PLUGIN_DIR . '/admin/includes/class-contact-forms-list-table.php';
386
  }
387
 
388
+ add_filter(
389
+ 'manage_' . $current_screen->id . '_columns',
390
+ array( 'WPCF7_Contact_Form_List_Table', 'define_columns' ),
391
+ 10, 0
392
+ );
393
 
394
  add_screen_option( 'per_page', array(
395
  'default' => 20,
398
  }
399
  }
400
 
401
+
402
  function wpcf7_admin_management_page() {
403
  if ( $post = wpcf7_get_current_contact_form() ) {
404
  $post_id = $post->initial() ? -1 : $post->id();
435
  }
436
 
437
  if ( ! empty( $_REQUEST['s'] ) ) {
438
+ echo sprintf(
439
+ '<span class="subtitle">'
440
  /* translators: %s: search keywords */
441
  . __( 'Search results for &#8220;%s&#8221;', 'contact-form-7' )
442
+ . '</span>',
443
+ esc_html( $_REQUEST['s'] )
444
  );
445
  }
446
  ?>
449
 
450
  <?php
451
  do_action( 'wpcf7_admin_warnings',
452
+ 'wpcf7', wpcf7_current_action(), null
453
+ );
454
 
455
  wpcf7_welcome_panel();
456
 
457
  do_action( 'wpcf7_admin_notices',
458
+ 'wpcf7', wpcf7_current_action(), null
459
+ );
460
  ?>
461
 
462
  <form method="get" action="">
469
  <?php
470
  }
471
 
472
+
473
  function wpcf7_admin_add_new_page() {
474
  $post = wpcf7_get_current_contact_form();
475
 
483
  require_once WPCF7_PLUGIN_DIR . '/admin/edit-contact-form.php';
484
  }
485
 
486
+
487
  function wpcf7_load_integration_page() {
488
  do_action( 'wpcf7_admin_load',
489
  isset( $_GET['page'] ) ? trim( $_GET['page'] ) : '',
502
  $help_tabs->set_help_tabs( 'integration' );
503
  }
504
 
505
+
506
  function wpcf7_admin_integration_page() {
507
  $integration = WPCF7_Integration::get_instance();
508
 
513
  ?>
514
  <div class="wrap" id="wpcf7-integration">
515
 
516
+ <h1><?php echo esc_html( __( 'Integration with External API', 'contact-form-7' ) ); ?></h1>
517
 
518
  <?php
519
  do_action( 'wpcf7_admin_warnings',
520
+ 'wpcf7-integration', wpcf7_current_action(), $service
521
+ );
522
 
523
  do_action( 'wpcf7_admin_notices',
524
+ 'wpcf7-integration', wpcf7_current_action(), $service
525
+ );
526
 
527
  if ( $service ) {
528
  $message = isset( $_REQUEST['message'] ) ? $_REQUEST['message'] : '';
529
  $service->admin_notice( $message );
530
+
531
+ $integration->list_services( array(
532
+ 'include' => $_REQUEST['service'],
533
+ ) );
534
  } else {
535
  $integration->list_services();
536
  }
540
  <?php
541
  }
542
 
 
543
 
544
  add_action( 'wpcf7_admin_notices', 'wpcf7_admin_updated_message', 10, 3 );
545
 
561
  }
562
 
563
  if ( ! empty( $updated_message ) ) {
564
+ echo sprintf(
565
+ '<div id="message" class="notice notice-success"><p>%s</p></div>',
566
+ esc_html( $updated_message )
567
+ );
568
+
569
  return;
570
  }
571
 
572
  if ( 'failed' == $_REQUEST['message'] ) {
573
+ $updated_message =
574
+ __( "There was an error saving the contact form.", 'contact-form-7' );
575
+
576
+ echo sprintf(
577
+ '<div id="message" class="notice notice-error"><p>%s</p></div>',
578
+ esc_html( $updated_message )
579
+ );
580
 
 
581
  return;
582
  }
583
 
597
  number_format_i18n( $count_invalid )
598
  );
599
 
600
+ echo sprintf(
601
+ '<div id="message" class="notice notice-warning"><p>%s</p></div>',
602
+ esc_html( $updated_message )
603
+ );
604
  } else {
605
  $updated_message = __( "Configuration validation completed. No invalid contact form was found.", 'contact-form-7' );
606
 
607
+ echo sprintf(
608
+ '<div id="message" class="notice notice-success"><p>%s</p></div>',
609
+ esc_html( $updated_message )
610
+ );
611
  }
612
 
613
  return;
614
  }
615
  }
616
 
617
+
618
  add_filter( 'plugin_action_links', 'wpcf7_plugin_action_links', 10, 2 );
619
 
620
  function wpcf7_plugin_action_links( $links, $file ) {
636
  return $links;
637
  }
638
 
639
+
640
  add_action( 'wpcf7_admin_warnings', 'wpcf7_old_wp_version_error', 10, 3 );
641
 
642
  function wpcf7_old_wp_version_error( $page, $action, $object ) {
661
  <?php
662
  }
663
 
664
+
665
  add_action( 'wpcf7_admin_warnings', 'wpcf7_not_allowed_to_edit', 10, 3 );
666
 
667
  function wpcf7_not_allowed_to_edit( $page, $action, $object ) {
675
  return;
676
  }
677
 
678
+ $message = __( "You are not allowed to edit this contact form.", 'contact-form-7' );
 
679
 
680
  echo sprintf(
681
  '<div class="notice notice-warning"><p>%s</p></div>',
682
+ esc_html( $message )
683
+ );
684
  }
admin/css/styles.css CHANGED
@@ -327,6 +327,21 @@ ul.config-error li {
327
  margin: 5px 0 10px;
328
  }
329
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
  /*
331
  * List Table
332
  */
@@ -416,7 +431,7 @@ ul.config-error li {
416
  float: right;
417
  font-size: 13px;
418
  color: #666;
419
- margin: 2px 0 5px;
420
  line-height: 1.5;
421
  max-width: 240px;
422
  }
327
  margin: 5px 0 10px;
328
  }
329
 
330
+ /*
331
+ * Sendinblue Tab
332
+ */
333
+ #sendinblue-panel table tr.inactive ~ tr {
334
+ display: none;
335
+ }
336
+
337
+ #sendinblue-panel .dashicons {
338
+ text-decoration: none;
339
+ }
340
+
341
+ #sendinblue-panel td p {
342
+ margin-top: 12px;
343
+ }
344
+
345
  /*
346
  * List Table
347
  */
431
  float: right;
432
  font-size: 13px;
433
  color: #666;
434
+ margin: 1em;
435
  line-height: 1.5;
436
  max-width: 240px;
437
  }
admin/js/scripts.js CHANGED
@@ -126,6 +126,15 @@
126
  $( '#publishing-action .spinner' ).addClass( 'is-active' );
127
  }
128
  } );
 
 
 
 
 
 
 
 
 
129
  } );
130
 
131
  wpcf7.toggleMail2 = function( checkbox ) {
126
  $( '#publishing-action .spinner' ).addClass( 'is-active' );
127
  }
128
  } );
129
+
130
+ $( '#wpcf7-sendinblue-enable-contact-list, #wpcf7-sendinblue-enable-transactional-email' ).on( 'change', function() {
131
+ if ( $( this ).is( ':checked' ) ) {
132
+ $( this ).closest( 'tr' ).removeClass( 'inactive' );
133
+ } else {
134
+ $( this ).closest( 'tr' ).addClass( 'inactive' );
135
+ }
136
+ } );
137
+
138
  } );
139
 
140
  wpcf7.toggleMail2 = function( checkbox ) {
assets/ajax-loader.gif DELETED
Binary file
includes/block-editor/index.js CHANGED
@@ -1 +1 @@
1
- !function(t){var e={};function r(n){if(e[n])return e[n].exports;var c=e[n]={i:n,l:!1,exports:{}};return t[n].call(c.exports,c,c.exports,r),c.l=!0,c.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var c in t)r.d(n,c,function(e){return t[e]}.bind(null,c));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=12)}([function(t,e){!function(){t.exports=this.wp.element}()},function(t,e){!function(){t.exports=this.wp.i18n}()},function(t,e){!function(){t.exports=this.wp.blocks}()},function(t,e,r){var n=r(7),c=r(8),o=r(9),a=r(11);t.exports=function(t,e){return n(t)||c(t,e)||o(t,e)||a()}},function(t,e){!function(){t.exports=this.wp.apiFetch}()},function(t,e){!function(){t.exports=this.wp.compose}()},function(t,e){!function(){t.exports=this.wp.components}()},function(t,e){t.exports=function(t){if(Array.isArray(t))return t}},function(t,e){t.exports=function(t,e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t)){var r=[],n=!0,c=!1,o=void 0;try{for(var a,i=t[Symbol.iterator]();!(n=(a=i.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){c=!0,o=t}finally{try{n||null==i.return||i.return()}finally{if(c)throw o}}return r}}},function(t,e,r){var n=r(10);t.exports=function(t,e){if(t){if("string"==typeof t)return n(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}},function(t,e){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}},function(t,e){t.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}},function(t,e,r){"use strict";r.r(e);var n=r(0),c=r(1),o=r(2),a=Object(n.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 242.5 239.46"},Object(n.createElement)("defs",null,Object(n.createElement)("clipPath",{id:"clip-path",transform:"translate(1.72)"},Object(n.createElement)("circle",{class:"cls-1",cx:"119.73",cy:"119.73",r:"116.15",fill:"none"}))),Object(n.createElement)("g",{id:"Layer_2","data-name":"Layer 2"},Object(n.createElement)("g",{id:"Layer_1","data-name":"Layer 1"},Object(n.createElement)("g",{class:"cls-2","clip-path":"url(#clip-path)"},Object(n.createElement)("circle",{class:"cls-3",cx:"121.45",cy:"119.73",r:"116.15",fill:"#33c6f4"}),Object(n.createElement)("path",{class:"cls-4",d:"M239.32,167.79c-53.41-24-108.37-91.46-113-94.55s-10.84.77-10.84.77c-3.87-6.19-10.06.77-10.06.77C76.77,123.55.14,170.11.14,170.11S36.94,237.79,122,237.79C208.48,237.79,239.32,167.79,239.32,167.79Z",transform:"translate(1.72)",fill:"#1b447e"}),Object(n.createElement)("path",{class:"cls-5",d:"M67.48,116.58s15.48-7,12.38,4.65-15.48,28.64-11.61,29.41S83,140.58,86.06,142.12s5.42.78,3.87,6.2-3.1,9.29,0,9.29,5.42-7,9.29-13.94,10.06-3.87,12.38-1.55,9.29,15.49,14.71,13.94,8.51-8.52,6.19-24,1.55-20.12,1.55-20.12,4.64-2.32,13.16,8.51,24,27.09,26.31,26.32-10.83-17.8-7.74-19.35,15.48,2.32,21.68,7.74c0,0,2.12,8.87,2.12.36L126.31,73.24,115.47,74l-10.06.77S80.64,111.94,67.48,116.58Z",transform:"translate(1.72)",fill:"#fff"}),Object(n.createElement)("path",{class:"cls-6",d:"M239.32,170.11c-53.41-24-108.37-93.78-113-96.87s-10.84.77-10.84.77c-3.87-6.19-10.06.77-10.06.77C76.77,123.55.14,170.11.14,170.11",transform:"translate(1.72)",fill:"none",stroke:"#221e1f","stroke-miterlimit":"10","stroke-width":"8px"})),Object(n.createElement)("circle",{class:"cls-6",cx:"121.45",cy:"119.73",r:"116.15",fill:"none",stroke:"#1b447e","stroke-miterlimit":"10","stroke-width":"8px"})))),i=r(3),l=r.n(i),s=r(4),f=r.n(s),u=r(5),p=r(6),m=new Map;f()({path:"contact-form-7/v1/contact-forms?per_page=20"}).then((function(t){Object.entries(t).forEach((function(t){var e=l()(t,2),r=(e[0],e[1]);m.set(r.id,r)}))}));var d={from:[{type:"shortcode",tag:"contact-form-7",attributes:{id:{type:"integer",shortcode:function(t){var e=t.named.id;return parseInt(e)}},title:{type:"string",shortcode:function(t){return t.named.title}}}}],to:[{type:"block",blocks:["core/shortcode"],transform:function(t){return Object(o.createBlock)("core/shortcode",{text:'[contact-form-7 id="'.concat(t.id,'" title="').concat(t.title,'"]')})}}]};Object(o.registerBlockType)("contact-form-7/contact-form-selector",{title:Object(c.__)("Contact Form 7","contact-form-7"),description:Object(c.__)("Insert a contact form you have created with Contact Form 7.","contact-form-7"),category:"widgets",attributes:{id:{type:"integer"},title:{type:"string"}},icon:a,transforms:d,edit:function t(e){var r=e.attributes,o=e.setAttributes;if(!m.size&&!r.id)return Object(n.createElement)("div",{className:"components-placeholder"},Object(n.createElement)("p",null,Object(c.__)("No contact forms were found. Create a contact form first.","contact-form-7")));var a=Array.from(m.values(),(function(t){return{value:t.id,label:t.title}}));if(r.id)a.length||a.push({value:r.id,label:r.title});else{var i=a[0];o({id:parseInt(i.value),title:i.label})}var l=Object(u.useInstanceId)(t),s="contact-form-7-contact-form-selector-".concat(l);return Object(n.createElement)("div",{className:"components-placeholder"},Object(n.createElement)("label",{htmlFor:s,className:"components-placeholder__label"},Object(c.__)("Select a contact form:","contact-form-7")),Object(n.createElement)(p.SelectControl,{id:s,options:a,value:r.id,onChange:function(t){return o({id:parseInt(t),title:m.get(parseInt(t)).title})}}))},save:function(t){var e=t.attributes;return Object(n.createElement)("div",null,'[contact-form-7 id="',e.id,'" title="',e.title,'"]')}})}]);
1
+ !function(t){var e={};function r(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)r.d(n,o,function(e){return t[e]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=12)}([function(t,e){t.exports=window.wp.element},function(t,e){t.exports=window.wp.i18n},function(t,e){t.exports=window.wp.blocks},function(t,e,r){var n=r(7),o=r(8),c=r(9),a=r(11);t.exports=function(t,e){return n(t)||o(t,e)||c(t,e)||a()}},function(t,e){t.exports=window.wp.apiFetch},function(t,e){t.exports=window.wp.compose},function(t,e){t.exports=window.wp.components},function(t,e){t.exports=function(t){if(Array.isArray(t))return t}},function(t,e){t.exports=function(t,e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t)){var r=[],_n=!0,n=!1,o=void 0;try{for(var c,a=t[Symbol.iterator]();!(_n=(c=a.next()).done)&&(r.push(c.value),!e||r.length!==e);_n=!0);}catch(t){n=!0,o=t}finally{try{_n||null==a.return||a.return()}finally{if(n)throw o}}return r}}},function(t,e,r){var n=r(10);t.exports=function(t,e){if(t){if("string"==typeof t)return n(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}},function(t,e){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}},function(t,e){t.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}},function(t,e,r){"use strict";r.r(e);var n=r(0),o=r(1),c=r(2),a=Object(n.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 242.5 239.46"},Object(n.createElement)("defs",null,Object(n.createElement)("clipPath",{id:"clip-path",transform:"translate(1.72)"},Object(n.createElement)("circle",{class:"cls-1",cx:"119.73",cy:"119.73",r:"116.15",fill:"none"}))),Object(n.createElement)("g",{id:"Layer_2","data-name":"Layer 2"},Object(n.createElement)("g",{id:"Layer_1","data-name":"Layer 1"},Object(n.createElement)("g",{class:"cls-2","clip-path":"url(#clip-path)"},Object(n.createElement)("circle",{class:"cls-3",cx:"121.45",cy:"119.73",r:"116.15",fill:"#33c6f4"}),Object(n.createElement)("path",{class:"cls-4",d:"M239.32,167.79c-53.41-24-108.37-91.46-113-94.55s-10.84.77-10.84.77c-3.87-6.19-10.06.77-10.06.77C76.77,123.55.14,170.11.14,170.11S36.94,237.79,122,237.79C208.48,237.79,239.32,167.79,239.32,167.79Z",transform:"translate(1.72)",fill:"#1b447e"}),Object(n.createElement)("path",{class:"cls-5",d:"M67.48,116.58s15.48-7,12.38,4.65-15.48,28.64-11.61,29.41S83,140.58,86.06,142.12s5.42.78,3.87,6.2-3.1,9.29,0,9.29,5.42-7,9.29-13.94,10.06-3.87,12.38-1.55,9.29,15.49,14.71,13.94,8.51-8.52,6.19-24,1.55-20.12,1.55-20.12,4.64-2.32,13.16,8.51,24,27.09,26.31,26.32-10.83-17.8-7.74-19.35,15.48,2.32,21.68,7.74c0,0,2.12,8.87,2.12.36L126.31,73.24,115.47,74l-10.06.77S80.64,111.94,67.48,116.58Z",transform:"translate(1.72)",fill:"#fff"}),Object(n.createElement)("path",{class:"cls-6",d:"M239.32,170.11c-53.41-24-108.37-93.78-113-96.87s-10.84.77-10.84.77c-3.87-6.19-10.06.77-10.06.77C76.77,123.55.14,170.11.14,170.11",transform:"translate(1.72)",fill:"none",stroke:"#221e1f","stroke-miterlimit":"10","stroke-width":"8px"})),Object(n.createElement)("circle",{class:"cls-6",cx:"121.45",cy:"119.73",r:"116.15",fill:"none",stroke:"#1b447e","stroke-miterlimit":"10","stroke-width":"8px"})))),i=r(3),l=r.n(i),s=r(4),f=r.n(s),u=r(5),p=r(6),m=new Map;f()({path:"contact-form-7/v1/contact-forms?per_page=20"}).then((function(t){Object.entries(t).forEach((function(t){var e=l()(t,2),r=(e[0],e[1]);m.set(r.id,r)}))}));var d={from:[{type:"shortcode",tag:"contact-form-7",attributes:{id:{type:"integer",shortcode:function(t){var e=t.named.id;return parseInt(e)}},title:{type:"string",shortcode:function(t){return t.named.title}}}}],to:[{type:"block",blocks:["core/shortcode"],transform:function(t){return Object(c.createBlock)("core/shortcode",{text:'[contact-form-7 id="'.concat(t.id,'" title="').concat(t.title,'"]')})}}]};Object(c.registerBlockType)("contact-form-7/contact-form-selector",{title:Object(o.__)("Contact Form 7","contact-form-7"),description:Object(o.__)("Insert a contact form you have created with Contact Form 7.","contact-form-7"),category:"widgets",attributes:{id:{type:"integer"},title:{type:"string"}},icon:a,transforms:d,edit:function t(e){var r=e.attributes,c=e.setAttributes;if(!m.size&&!r.id)return Object(n.createElement)("div",{className:"components-placeholder"},Object(n.createElement)("p",null,Object(o.__)("No contact forms were found. Create a contact form first.","contact-form-7")));var a=Array.from(m.values(),(function(t){return{value:t.id,label:t.title}}));if(r.id)a.length||a.push({value:r.id,label:r.title});else{var i=a[0];c({id:parseInt(i.value),title:i.label})}var l=Object(u.useInstanceId)(t),s="contact-form-7-contact-form-selector-".concat(l);return Object(n.createElement)("div",{className:"components-placeholder"},Object(n.createElement)("label",{htmlFor:s,className:"components-placeholder__label"},Object(o.__)("Select a contact form:","contact-form-7")),Object(n.createElement)(p.SelectControl,{id:s,options:a,value:r.id,onChange:function(t){return c({id:parseInt(t),title:m.get(parseInt(t)).title})}}))},save:function(t){var e=t.attributes;return Object(n.createElement)("div",null,'[contact-form-7 id="',e.id,'" title="',e.title,'"]')}})}]);
includes/controller.php CHANGED
@@ -1,7 +1,18 @@
1
  <?php
 
 
 
2
 
3
- add_action( 'parse_request', 'wpcf7_control_init', 20, 0 );
4
 
 
 
 
 
 
 
 
 
 
5
  function wpcf7_control_init() {
6
  if ( WPCF7_Submission::is_restful() ) {
7
  return;
@@ -16,89 +27,151 @@ function wpcf7_control_init() {
16
  }
17
  }
18
 
19
- add_action( 'wp_enqueue_scripts', 'wpcf7_do_enqueue_scripts', 10, 0 );
20
 
21
- function wpcf7_do_enqueue_scripts() {
22
- if ( wpcf7_load_js() ) {
23
- wpcf7_enqueue_scripts();
24
- }
 
 
 
 
25
 
26
- if ( wpcf7_load_css() ) {
27
- wpcf7_enqueue_styles();
28
- }
29
- }
30
 
31
- function wpcf7_enqueue_scripts() {
32
- $in_footer = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
- if ( 'header' === wpcf7_load_js() ) {
35
- $in_footer = false;
36
- }
37
 
38
- wp_enqueue_script( 'contact-form-7',
39
- wpcf7_plugin_url( 'includes/js/scripts.js' ),
40
- array( 'jquery' ), WPCF7_VERSION, $in_footer );
 
 
41
 
42
- $wpcf7 = array(
43
- 'apiSettings' => array(
44
- 'root' => esc_url_raw( rest_url( 'contact-form-7/v1' ) ),
45
- 'namespace' => 'contact-form-7/v1',
46
- ),
47
- );
48
 
49
  if ( defined( 'WP_CACHE' ) and WP_CACHE ) {
50
  $wpcf7['cached'] = 1;
51
  }
52
 
53
- if ( wpcf7_support_html5_fallback() ) {
54
- $wpcf7['jqueryUi'] = 1;
55
- }
56
-
57
  wp_localize_script( 'contact-form-7', 'wpcf7', $wpcf7 );
58
 
59
  do_action( 'wpcf7_enqueue_scripts' );
60
  }
61
 
 
 
 
 
62
  function wpcf7_script_is() {
63
  return wp_script_is( 'contact-form-7' );
64
  }
65
 
 
 
 
 
66
  function wpcf7_enqueue_styles() {
67
- wp_enqueue_style( 'contact-form-7',
68
- wpcf7_plugin_url( 'includes/css/styles.css' ),
69
- array(), WPCF7_VERSION, 'all' );
70
 
71
  if ( wpcf7_is_rtl() ) {
72
- wp_enqueue_style( 'contact-form-7-rtl',
73
- wpcf7_plugin_url( 'includes/css/styles-rtl.css' ),
74
- array(), WPCF7_VERSION, 'all' );
75
  }
76
 
77
  do_action( 'wpcf7_enqueue_styles' );
78
  }
79
 
 
 
 
 
80
  function wpcf7_style_is() {
81
  return wp_style_is( 'contact-form-7' );
82
  }
83
 
84
- /* HTML5 Fallback */
85
 
86
- add_action( 'wp_enqueue_scripts', 'wpcf7_html5_fallback', 20, 0 );
 
 
 
 
87
 
 
 
 
88
  function wpcf7_html5_fallback() {
89
  if ( ! wpcf7_support_html5_fallback() ) {
90
  return;
91
  }
92
 
93
  if ( wpcf7_script_is() ) {
94
- wp_enqueue_script( 'jquery-ui-datepicker' );
95
- wp_enqueue_script( 'jquery-ui-spinner' );
96
  }
97
 
98
  if ( wpcf7_style_is() ) {
99
- wp_enqueue_style( 'jquery-ui-smoothness',
100
- wpcf7_plugin_url(
101
- 'includes/js/jquery-ui/themes/smoothness/jquery-ui.min.css' ),
102
- array(), '1.11.4', 'screen' );
103
  }
104
  }
1
  <?php
2
+ /**
3
+ * Controller for front-end requests, scripts, and styles
4
+ */
5
 
 
6
 
7
+ add_action(
8
+ 'parse_request',
9
+ 'wpcf7_control_init',
10
+ 20, 0
11
+ );
12
+
13
+ /**
14
+ * Handles a submission in non-Ajax mode.
15
+ */
16
  function wpcf7_control_init() {
17
  if ( WPCF7_Submission::is_restful() ) {
18
  return;
27
  }
28
  }
29
 
 
30
 
31
+ /**
32
+ * Registers main scripts and styles.
33
+ */
34
+ add_action(
35
+ 'wp_enqueue_scripts',
36
+ function () {
37
+ $assets = array();
38
+ $asset_file = wpcf7_plugin_path( 'includes/js/index.asset.php' );
39
 
40
+ if ( file_exists( $asset_file ) ) {
41
+ $assets = include( $asset_file );
42
+ }
 
43
 
44
+ $assets = wp_parse_args( $assets, array(
45
+ 'src' => wpcf7_plugin_url( 'includes/js/index.js' ),
46
+ 'dependencies' => array(
47
+ 'wp-api-fetch',
48
+ 'wp-polyfill',
49
+ ),
50
+ 'version' => WPCF7_VERSION,
51
+ 'in_footer' => ( 'header' !== wpcf7_load_js() ),
52
+ ) );
53
+
54
+ wp_register_script(
55
+ 'contact-form-7',
56
+ $assets['src'],
57
+ $assets['dependencies'],
58
+ $assets['version'],
59
+ $assets['in_footer']
60
+ );
61
+
62
+ wp_register_script(
63
+ 'contact-form-7-html5-fallback',
64
+ wpcf7_plugin_url( 'includes/js/html5-fallback.js' ),
65
+ array( 'jquery-ui-datepicker' ),
66
+ WPCF7_VERSION,
67
+ true
68
+ );
69
+
70
+ if ( wpcf7_load_js() ) {
71
+ wpcf7_enqueue_scripts();
72
+ }
73
+
74
+ wp_register_style(
75
+ 'contact-form-7',
76
+ wpcf7_plugin_url( 'includes/css/styles.css' ),
77
+ array(),
78
+ WPCF7_VERSION,
79
+ 'all'
80
+ );
81
+
82
+ wp_register_style(
83
+ 'contact-form-7-rtl',
84
+ wpcf7_plugin_url( 'includes/css/styles-rtl.css' ),
85
+ array(),
86
+ WPCF7_VERSION,
87
+ 'all'
88
+ );
89
+
90
+ wp_register_style(
91
+ 'jquery-ui-smoothness',
92
+ wpcf7_plugin_url(
93
+ 'includes/js/jquery-ui/themes/smoothness/jquery-ui.min.css'
94
+ ),
95
+ array(),
96
+ '1.12.1',
97
+ 'screen'
98
+ );
99
+
100
+ if ( wpcf7_load_css() ) {
101
+ wpcf7_enqueue_styles();
102
+ }
103
+ },
104
+ 10, 0
105
+ );
106
 
 
 
 
107
 
108
+ /**
109
+ * Enqueues scripts.
110
+ */
111
+ function wpcf7_enqueue_scripts() {
112
+ wp_enqueue_script( 'contact-form-7' );
113
 
114
+ $wpcf7 = array();
 
 
 
 
 
115
 
116
  if ( defined( 'WP_CACHE' ) and WP_CACHE ) {
117
  $wpcf7['cached'] = 1;
118
  }
119
 
 
 
 
 
120
  wp_localize_script( 'contact-form-7', 'wpcf7', $wpcf7 );
121
 
122
  do_action( 'wpcf7_enqueue_scripts' );
123
  }
124
 
125
+
126
+ /**
127
+ * Returns true if the main script is enqueued.
128
+ */
129
  function wpcf7_script_is() {
130
  return wp_script_is( 'contact-form-7' );
131
  }
132
 
133
+
134
+ /**
135
+ * Enqueues styles.
136
+ */
137
  function wpcf7_enqueue_styles() {
138
+ wp_enqueue_style( 'contact-form-7' );
 
 
139
 
140
  if ( wpcf7_is_rtl() ) {
141
+ wp_enqueue_style( 'contact-form-7-rtl' );
 
 
142
  }
143
 
144
  do_action( 'wpcf7_enqueue_styles' );
145
  }
146
 
147
+
148
+ /**
149
+ * Returns true if the main stylesheet is enqueued.
150
+ */
151
  function wpcf7_style_is() {
152
  return wp_style_is( 'contact-form-7' );
153
  }
154
 
 
155
 
156
+ add_action(
157
+ 'wp_enqueue_scripts',
158
+ 'wpcf7_html5_fallback',
159
+ 20, 0
160
+ );
161
 
162
+ /**
163
+ * Enqueues scripts and styles for the HTML5 fallback.
164
+ */
165
  function wpcf7_html5_fallback() {
166
  if ( ! wpcf7_support_html5_fallback() ) {
167
  return;
168
  }
169
 
170
  if ( wpcf7_script_is() ) {
171
+ wp_enqueue_script( 'contact-form-7-html5-fallback' );
 
172
  }
173
 
174
  if ( wpcf7_style_is() ) {
175
+ wp_enqueue_style( 'jquery-ui-smoothness' );
 
 
 
176
  }
177
  }
includes/css/styles-rtl.css CHANGED
@@ -1,12 +1,11 @@
1
- span.wpcf7-not-valid-tip {
2
  direction: rtl;
3
  }
4
 
5
- .use-floating-validation-tip span.wpcf7-not-valid-tip {
6
- left: auto;
7
- right: 20%;
8
  }
9
 
10
- span.wpcf7-list-item {
11
  margin: 0 1em 0 0;
12
  }
1
+ .wpcf7-not-valid-tip {
2
  direction: rtl;
3
  }
4
 
5
+ .use-floating-validation-tip .wpcf7-not-valid-tip {
6
+ right: 1em;
 
7
  }
8
 
9
+ .wpcf7-list-item {
10
  margin: 0 1em 0 0;
11
  }
includes/css/styles.css CHANGED
@@ -15,7 +15,9 @@
15
  border: 2px solid #00a0d2; /* Blue */
16
  }
17
 
18
- .wpcf7 form.init .wpcf7-response-output {
 
 
19
  display: none;
20
  }
21
 
@@ -49,58 +51,101 @@
49
  }
50
 
51
  .use-floating-validation-tip .wpcf7-not-valid-tip {
52
- position: absolute;
53
- top: 20%;
54
- left: 20%;
55
  z-index: 100;
56
  border: 1px solid #dc3232;
57
  background: #fff;
58
  padding: .2em .8em;
 
59
  }
60
 
61
- span.wpcf7-list-item {
62
  display: inline-block;
63
  margin: 0 0 0 1em;
64
  }
65
 
66
- span.wpcf7-list-item-label::before,
67
- span.wpcf7-list-item-label::after {
68
  content: " ";
69
  }
70
 
71
- div.wpcf7 .ajax-loader {
72
  visibility: hidden;
73
  display: inline-block;
74
- background-image: url('../../assets/ajax-loader.gif');
75
- width: 16px;
76
- height: 16px;
 
77
  border: none;
 
78
  padding: 0;
79
- margin: 0 0 0 4px;
80
- vertical-align: middle;
81
  }
82
 
83
- div.wpcf7 .ajax-loader.is-active {
84
  visibility: visible;
85
  }
86
 
87
- div.wpcf7 div.ajax-error {
88
- display: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  }
90
 
91
- div.wpcf7 .placeheld {
92
- color: #888;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  }
94
 
95
- div.wpcf7 input[type="file"] {
96
  cursor: pointer;
97
  }
98
 
99
- div.wpcf7 input[type="file"]:disabled {
100
  cursor: default;
101
  }
102
 
103
- div.wpcf7 .wpcf7-submit:disabled {
104
  cursor: not-allowed;
105
  }
106
 
15
  border: 2px solid #00a0d2; /* Blue */
16
  }
17
 
18
+ .wpcf7 form.init .wpcf7-response-output,
19
+ .wpcf7 form.resetting .wpcf7-response-output,
20
+ .wpcf7 form.submitting .wpcf7-response-output {
21
  display: none;
22
  }
23
 
51
  }
52
 
53
  .use-floating-validation-tip .wpcf7-not-valid-tip {
54
+ position: relative;
55
+ top: -2ex;
56
+ left: 1em;
57
  z-index: 100;
58
  border: 1px solid #dc3232;
59
  background: #fff;
60
  padding: .2em .8em;
61
+ width: 24em;
62
  }
63
 
64
+ .wpcf7-list-item {
65
  display: inline-block;
66
  margin: 0 0 0 1em;
67
  }
68
 
69
+ .wpcf7-list-item-label::before,
70
+ .wpcf7-list-item-label::after {
71
  content: " ";
72
  }
73
 
74
+ .wpcf7 .ajax-loader {
75
  visibility: hidden;
76
  display: inline-block;
77
+ background-color: #23282d; /* Dark Gray 800 */
78
+ opacity: 0.75;
79
+ width: 24px;
80
+ height: 24px;
81
  border: none;
82
+ border-radius: 100%;
83
  padding: 0;
84
+ margin: 0 24px;
85
+ position: relative;
86
  }
87
 
88
+ .wpcf7 form.submitting .ajax-loader {
89
  visibility: visible;
90
  }
91
 
92
+ .wpcf7 .ajax-loader::before {
93
+ content: '';
94
+ position: absolute;
95
+ background-color: #fbfbfc; /* Light Gray 100 */
96
+ top: 4px;
97
+ left: 4px;
98
+ width: 6px;
99
+ height: 6px;
100
+ border: none;
101
+ border-radius: 100%;
102
+ transform-origin: 8px 8px;
103
+ animation-name: spin;
104
+ animation-duration: 1000ms;
105
+ animation-timing-function: linear;
106
+ animation-iteration-count: infinite;
107
  }
108
 
109
+ @media (prefers-reduced-motion: reduce) {
110
+ .wpcf7 .ajax-loader::before {
111
+ animation-name: blink;
112
+ animation-duration: 2000ms;
113
+ }
114
+ }
115
+
116
+ @keyframes spin {
117
+ from {
118
+ transform: rotate(0deg);
119
+ }
120
+
121
+ to {
122
+ transform: rotate(360deg);
123
+ }
124
+ }
125
+
126
+ @keyframes blink {
127
+ from {
128
+ opacity: 0;
129
+ }
130
+
131
+ 50% {
132
+ opacity: 1;
133
+ }
134
+
135
+ to {
136
+ opacity: 0;
137
+ }
138
  }
139
 
140
+ .wpcf7 input[type="file"] {
141
  cursor: pointer;
142
  }
143
 
144
+ .wpcf7 input[type="file"]:disabled {
145
  cursor: default;
146
  }
147
 
148
+ .wpcf7 .wpcf7-submit:disabled {
149
  cursor: not-allowed;
150
  }
151
 
includes/file.php ADDED
@@ -0,0 +1,367 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Validates uploaded files and moves them to the temporary directory.
5
+ *
6
+ * @param array $file An item of `$_FILES`.
7
+ * @param string|array $args Optional. Arguments to control behavior.
8
+ * @return array|WP_Error Array of file paths, or WP_Error if validation fails.
9
+ */
10
+ function wpcf7_unship_uploaded_file( $file, $args = '' ) {
11
+ $args = wp_parse_args( $args, array(
12
+ 'required' => false,
13
+ 'filetypes' => '',
14
+ 'limit' => MB_IN_BYTES,
15
+ ) );
16
+
17
+ foreach ( array( 'name', 'size', 'tmp_name', 'error' ) as $key ) {
18
+ if ( ! isset( $file[$key] ) ) {
19
+ $file[$key] = array();
20
+ }
21
+ }
22
+
23
+ $names = wpcf7_array_flatten( $file['name'] );
24
+ $sizes = wpcf7_array_flatten( $file['size'] );
25
+ $tmp_names = wpcf7_array_flatten( $file['tmp_name'] );
26
+ $errors = wpcf7_array_flatten( $file['error'] );
27
+
28
+ foreach ( $errors as $error ) {
29
+ if ( ! empty( $error ) and UPLOAD_ERR_NO_FILE !== $error ) {
30
+ return new WP_Error( 'wpcf7_upload_failed_php_error',
31
+ wpcf7_get_message( 'upload_failed_php_error' )
32
+ );
33
+ }
34
+ }
35
+
36
+ if ( $args['required'] and ! array_filter( $tmp_names ) ) {
37
+ return new WP_Error( 'wpcf7_invalid_required',
38
+ wpcf7_get_message( 'invalid_required' )
39
+ );
40
+ }
41
+
42
+ // File type validation
43
+ $file_type_pattern = wpcf7_acceptable_filetypes(
44
+ $args['filetypes'], 'regex'
45
+ );
46
+
47
+ $file_type_pattern = '/\.(' . $file_type_pattern . ')$/i';
48
+
49
+ foreach ( $names as $name ) {
50
+ if ( ! empty( $name ) and ! preg_match( $file_type_pattern, $name ) ) {
51
+ return new WP_Error( 'wpcf7_upload_file_type_invalid',
52
+ wpcf7_get_message( 'upload_file_type_invalid' )
53
+ );
54
+ }
55
+ }
56
+
57
+ // File size validation
58
+ $total_size = array_sum( $sizes );
59
+
60
+ if ( $args['limit'] < $total_size ) {
61
+ return new WP_Error( 'wpcf7_upload_file_too_large',
62
+ wpcf7_get_message( 'upload_file_too_large' )
63
+ );
64
+ }
65
+
66
+ // Move uploaded file to tmp dir
67
+ $uploads_dir = wpcf7_upload_tmp_dir();
68
+ $uploads_dir = wpcf7_maybe_add_random_dir( $uploads_dir );
69
+
70
+ $uploaded_files = array();
71
+
72
+ foreach ( $names as $key => $name ) {
73
+ $tmp_name = $tmp_names[$key];
74
+
75
+ if ( empty( $tmp_name ) or ! is_uploaded_file( $tmp_name ) ) {
76
+ continue;
77
+ }
78
+
79
+ $filename = $name;
80
+ $filename = wpcf7_canonicalize( $filename, 'as-is' );
81
+ $filename = wpcf7_antiscript_file_name( $filename );
82
+
83
+ $filename = apply_filters( 'wpcf7_upload_file_name',
84
+ $filename, $name, $args
85
+ );
86
+
87
+ $filename = wp_unique_filename( $uploads_dir, $filename );
88
+ $new_file = path_join( $uploads_dir, $filename );
89
+
90
+ if ( false === @move_uploaded_file( $tmp_name, $new_file ) ) {
91
+ return new WP_Error( 'wpcf7_upload_failed',
92
+ wpcf7_get_message( 'upload_failed' )
93
+ );
94
+ }
95
+
96
+ // Make sure the uploaded file is only readable for the owner process
97
+ chmod( $new_file, 0400 );
98
+
99
+ $uploaded_files[] = $new_file;
100
+ }
101
+
102
+ return $uploaded_files;
103
+ }
104
+
105
+
106
+ add_filter(
107
+ 'wpcf7_messages',
108
+ 'wpcf7_file_messages',
109
+ 10, 1
110
+ );
111
+
112
+ function wpcf7_file_messages( $messages ) {
113
+ return array_merge( $messages, array(
114
+ 'upload_failed' => array(
115
+ 'description' => __( "Uploading a file fails for any reason", 'contact-form-7' ),
116
+ 'default' => __( "There was an unknown error uploading the file.", 'contact-form-7' )
117
+ ),
118
+
119
+ 'upload_file_type_invalid' => array(
120
+ 'description' => __( "Uploaded file is not allowed for file type", 'contact-form-7' ),
121
+ 'default' => __( "You are not allowed to upload files of this type.", 'contact-form-7' )
122
+ ),
123
+
124
+ 'upload_file_too_large' => array(
125
+ 'description' => __( "Uploaded file is too large", 'contact-form-7' ),
126
+ 'default' => __( "The file is too big.", 'contact-form-7' )
127
+ ),
128
+
129
+ 'upload_failed_php_error' => array(
130
+ 'description' => __( "Uploading a file fails for PHP error", 'contact-form-7' ),
131
+ 'default' => __( "There was an error uploading the file.", 'contact-form-7' )
132
+ )
133
+ ) );
134
+ }
135
+
136
+
137
+ add_filter(
138
+ 'wpcf7_form_enctype',
139
+ 'wpcf7_file_form_enctype_filter',
140
+ 10, 1
141
+ );
142
+
143
+ function wpcf7_file_form_enctype_filter( $enctype ) {
144
+ $multipart = (bool) wpcf7_scan_form_tags( array(
145
+ 'feature' => 'file-uploading',
146
+ ) );
147
+
148
+ if ( $multipart ) {
149
+ $enctype = 'multipart/form-data';
150
+ }
151
+
152
+ return $enctype;
153
+ }
154
+
155
+
156
+ /**
157
+ * Returns a formatted list of acceptable filetypes.
158
+ *
159
+ * @param string|array $types Optional. Array of filetypes.
160
+ * @param string $format Optional. Pre-defined format designator.
161
+ * @return string Formatted list of acceptable filetypes.
162
+ */
163
+ function wpcf7_acceptable_filetypes( $types = 'default', $format = 'regex' ) {
164
+ if ( 'default' === $types
165
+ or empty( $types ) ) {
166
+ $types = array(
167
+ 'jpg',
168
+ 'jpeg',
169
+ 'png',
170
+ 'gif',
171
+ 'pdf',
172
+ 'doc',
173
+ 'docx',
174
+ 'ppt',
175
+ 'pptx',
176
+ 'odt',
177
+ 'avi',
178
+ 'ogg',
179
+ 'm4a',
180
+ 'mov',
181
+ 'mp3',
182
+ 'mp4',
183
+ 'mpg',
184
+ 'wav',
185
+ 'wmv',
186
+ );
187
+ } else {
188
+ $types_tmp = (array) $types;
189
+ $types = array();
190
+
191
+ foreach ( $types_tmp as $val ) {
192
+ if ( is_string( $val ) ) {
193
+ $val = preg_split( '/[\s|,]+/', $val );
194
+ }
195
+
196
+ $types = array_merge( $types, (array) $val );
197
+ }
198
+ }
199
+
200
+ $types = array_unique( array_filter( $types ) );
201
+
202
+ $output = '';
203
+
204
+ foreach ( $types as $type ) {
205
+ $type = trim( $type, ' ,.|' );
206
+
207
+ $type = str_replace(
208
+ array( '.', '+', '*', '?' ),
209
+ array( '\.', '\+', '\*', '\?' ),
210
+ $type
211
+ );
212
+
213
+ if ( '' === $type ) {
214
+ continue;
215
+ }
216
+
217
+ if ( 'attr' === $format
218
+ or 'attribute' === $format ) {
219
+ $output .= sprintf( '.%s', $type );
220
+ $output .= ',';
221
+ } else {
222
+ $output .= $type;
223
+ $output .= '|';
224
+ }
225
+ }
226
+
227
+ return trim( $output, ' ,|' );
228
+ }
229
+
230
+
231
+ add_action(
232
+ 'wpcf7_init',
233
+ 'wpcf7_init_uploads',
234
+ 10, 0
235
+ );
236
+
237
+ function wpcf7_init_uploads() {
238
+ $dir = wpcf7_upload_tmp_dir();
239
+ wp_mkdir_p( $dir );
240
+
241
+ $htaccess_file = path_join( $dir, '.htaccess' );
242
+
243
+ if ( file_exists( $htaccess_file ) ) {
244
+ return;
245
+ }
246
+
247
+ if ( $handle = fopen( $htaccess_file, 'w' ) ) {
248
+ fwrite( $handle, "Deny from all\n" );
249
+ fclose( $handle );
250
+ }
251
+ }
252
+
253
+
254
+ function wpcf7_maybe_add_random_dir( $dir ) {
255
+ do {
256
+ $rand_max = mt_getrandmax();
257
+ $rand = zeroise( mt_rand( 0, $rand_max ), strlen( $rand_max ) );
258
+ $dir_new = path_join( $dir, $rand );
259
+ } while ( file_exists( $dir_new ) );
260
+
261
+ if ( wp_mkdir_p( $dir_new ) ) {
262
+ return $dir_new;
263
+ }
264
+
265
+ return $dir;
266
+ }
267
+
268
+
269
+ function wpcf7_upload_tmp_dir() {
270
+ if ( defined( 'WPCF7_UPLOADS_TMP_DIR' ) ) {
271
+ return WPCF7_UPLOADS_TMP_DIR;
272
+ } else {
273
+ return path_join( wpcf7_upload_dir( 'dir' ), 'wpcf7_uploads' );
274
+ }
275
+ }
276
+
277
+
278
+ add_action(
279
+ 'template_redirect',
280
+ 'wpcf7_cleanup_upload_files',
281
+ 20, 0
282
+ );
283
+
284
+ function wpcf7_cleanup_upload_files( $seconds = 60, $max = 100 ) {
285
+ if ( is_admin()
286
+ or 'GET' != $_SERVER['REQUEST_METHOD']
287
+ or is_robots()
288
+ or is_feed()
289
+ or is_trackback() ) {
290
+ return;
291
+ }
292
+
293
+ $dir = trailingslashit( wpcf7_upload_tmp_dir() );
294
+
295
+ if ( ! is_dir( $dir )
296
+ or ! is_readable( $dir )
297
+ or ! wp_is_writable( $dir ) ) {
298
+ return;
299
+ }
300
+
301
+ $seconds = absint( $seconds );
302
+ $max = absint( $max );
303
+ $count = 0;
304
+
305
+ if ( $handle = opendir( $dir ) ) {
306
+ while ( false !== ( $file = readdir( $handle ) ) ) {
307
+ if ( '.' == $file
308
+ or '..' == $file
309
+ or '.htaccess' == $file ) {
310
+ continue;
311
+ }
312
+
313
+ $mtime = @filemtime( path_join( $dir, $file ) );
314
+
315
+ if ( $mtime and time() < $mtime + $seconds ) { // less than $seconds old
316
+ continue;
317
+ }
318
+
319
+ wpcf7_rmdir_p( path_join( $dir, $file ) );
320
+ $count += 1;
321
+
322
+ if ( $max <= $count ) {
323
+ break;
324
+ }
325
+ }
326
+
327
+ closedir( $handle );
328
+ }
329
+ }
330
+
331
+
332
+ add_action(
333
+ 'wpcf7_admin_warnings',
334
+ 'wpcf7_file_display_warning_message',
335
+ 10, 3
336
+ );
337
+
338
+ function wpcf7_file_display_warning_message( $page, $action, $object ) {
339
+ if ( $object instanceof WPCF7_ContactForm ) {
340
+ $contact_form = $object;
341
+ } else {
342
+ return;
343
+ }
344
+
345
+ $has_tags = (bool) $contact_form->scan_form_tags( array(
346
+ 'feature' => 'file-uploading',
347
+ ) );
348
+
349
+ if ( ! $has_tags ) {
350
+ return;
351
+ }
352
+
353
+ $uploads_dir = wpcf7_upload_tmp_dir();
354
+
355
+ if ( ! is_dir( $uploads_dir ) or ! wp_is_writable( $uploads_dir ) ) {
356
+ $message = sprintf(
357
+ /* translators: %s: the path of the temporary folder */
358
+ __( 'This contact form has file uploading fields, but the temporary folder for the files (%s) does not exist or is not writable. You can create the folder or change its permission manually.', 'contact-form-7' ),
359
+ $uploads_dir
360
+ );
361
+
362
+ echo sprintf(
363
+ '<div class="notice notice-warning"><p>%s</p></div>',
364
+ esc_html( $message )
365
+ );
366
+ }
367
+ }
includes/formatting.php CHANGED
@@ -39,8 +39,10 @@ function wpcf7_autop( $pee, $br = 1 ) {
39
  $pee .= '<p>' . trim( $tinkle, "\n" ) . "</p>\n";
40
  }
41
 
42
- $pee = preg_replace( '|<p>\s*</p>|', '', $pee ); // under certain strange conditions it could create a P of entirely whitespace
43
  $pee = preg_replace( '!<p>([^<]+)</(div|address|form|fieldset)>!', "<p>$1</p></$2>", $pee );
 
 
 
44
  $pee = preg_replace( '!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee ); // don't pee all over a tag
45
  $pee = preg_replace( "|<p>(<li.+?)</p>|", "$1", $pee ); // problem with nested lists
46
  $pee = preg_replace( '|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee );
@@ -178,168 +180,16 @@ function wpcf7_canonicalize( $text, $strto = 'lower' ) {
178
  return $text;
179
  }
180
 
181
- /**
182
- * Check whether a string is a valid NAME token.
183
- *
184
- * ID and NAME tokens must begin with a letter ([A-Za-z])
185
- * and may be followed by any number of letters, digits ([0-9]),
186
- * hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
187
- *
188
- * @see http://www.w3.org/TR/html401/types.html#h-6.2
189
- *
190
- * @return bool True if it is a valid name, false if not.
191
- */
192
- function wpcf7_is_name( $string ) {
193
- return preg_match( '/^[A-Za-z][-A-Za-z0-9_:.]*$/', $string );
194
- }
195
-
196
  function wpcf7_sanitize_unit_tag( $tag ) {
197
  $tag = preg_replace( '/[^A-Za-z0-9_-]/', '', $tag );
198
  return $tag;
199
  }
200
 
201
- function wpcf7_is_email( $email ) {
202
- $result = is_email( $email );
203
- return apply_filters( 'wpcf7_is_email', $result, $email );
204
- }
205
-
206
- function wpcf7_is_url( $url ) {
207
- $result = ( false !== filter_var( $url, FILTER_VALIDATE_URL ) );
208
- return apply_filters( 'wpcf7_is_url', $result, $url );
209
- }
210
-
211
- function wpcf7_is_tel( $tel ) {
212
- $pattern = '%^[+]?' // + sign
213
- . '(?:\([0-9]+\)|[0-9]+)' // (1234) or 1234
214
- . '(?:[/ -]*' // delimiter
215
- . '(?:\([0-9]+\)|[0-9]+)' // (1234) or 1234
216
- . ')*$%';
217
-
218
- $result = preg_match( $pattern, trim( $tel ) );
219
- return apply_filters( 'wpcf7_is_tel', $result, $tel );
220
- }
221
-
222
- function wpcf7_is_number( $number ) {
223
- $result = is_numeric( $number );
224
- return apply_filters( 'wpcf7_is_number', $result, $number );
225
- }
226
-
227
- function wpcf7_is_date( $date ) {
228
- $result = preg_match( '/^([0-9]{4,})-([0-9]{2})-([0-9]{2})$/', $date, $matches );
229
-
230
- if ( $result ) {
231
- $result = checkdate( $matches[2], $matches[3], $matches[1] );
232
- }
233
-
234
- return apply_filters( 'wpcf7_is_date', $result, $date );
235
- }
236
-
237
- function wpcf7_is_mailbox_list( $mailbox_list ) {
238
- if ( ! is_array( $mailbox_list ) ) {
239
- $mailbox_text = (string) $mailbox_list;
240
- $mailbox_text = wp_unslash( $mailbox_text );
241
-
242
- $mailbox_text = preg_replace( '/\\\\(?:\"|\')/', 'esc-quote',
243
- $mailbox_text );
244
-
245
- $mailbox_text = preg_replace( '/(?:\".*?\"|\'.*?\')/', 'quoted-string',
246
- $mailbox_text );
247
-
248
- $mailbox_list = explode( ',', $mailbox_text );
249
- }
250
-
251
- $addresses = array();
252
-
253
- foreach ( $mailbox_list as $mailbox ) {
254
- if ( ! is_string( $mailbox ) ) {
255
- return false;
256
- }
257
-
258
- $mailbox = trim( $mailbox );
259
-
260
- if ( preg_match( '/<(.+)>$/', $mailbox, $matches ) ) {
261
- $addr_spec = $matches[1];
262
- } else {
263
- $addr_spec = $mailbox;
264
- }
265
-
266
- if ( ! wpcf7_is_email( $addr_spec ) ) {
267
- return false;
268
- }
269
-
270
- $addresses[] = $addr_spec;
271
- }
272
-
273
- return $addresses;
274
- }
275
-
276
- function wpcf7_is_email_in_domain( $email, $domain ) {
277
- $email_list = wpcf7_is_mailbox_list( $email );
278
- $domain = strtolower( $domain );
279
-
280
- foreach ( $email_list as $email ) {
281
- $email_domain = substr( $email, strrpos( $email, '@' ) + 1 );
282
- $email_domain = strtolower( $email_domain );
283
- $domain_parts = explode( '.', $domain );
284
-
285
- do {
286
- $site_domain = implode( '.', $domain_parts );
287
-
288
- if ( $site_domain == $email_domain ) {
289
- continue 2;
290
- }
291
-
292
- array_shift( $domain_parts );
293
- } while ( $domain_parts );
294
-
295
- return false;
296
- }
297
-
298
- return true;
299
- }
300
-
301
- function wpcf7_is_email_in_site_domain( $email ) {
302
- if ( wpcf7_is_localhost() ) {
303
- return true;
304
- }
305
-
306
- $site_domain = strtolower( $_SERVER['SERVER_NAME'] );
307
-
308
- if ( preg_match( '/^[0-9.]+$/', $site_domain ) ) { // 123.456.789.012
309
- return true;
310
- }
311
-
312
- if ( wpcf7_is_email_in_domain( $email, $site_domain ) ) {
313
- return true;
314
- }
315
-
316
- $home_url = home_url();
317
-
318
- // for interoperability with WordPress MU Domain Mapping plugin
319
- if ( is_multisite()
320
- and function_exists( 'domain_mapping_siteurl' ) ) {
321
- $domain_mapping_siteurl = domain_mapping_siteurl( false );
322
-
323
- if ( $domain_mapping_siteurl ) {
324
- $home_url = $domain_mapping_siteurl;
325
- }
326
- }
327
-
328
- if ( preg_match( '%^https?://([^/]+)%', $home_url, $matches ) ) {
329
- $site_domain = strtolower( $matches[1] );
330
-
331
- if ( $site_domain != strtolower( $_SERVER['SERVER_NAME'] )
332
- and wpcf7_is_email_in_domain( $email, $site_domain ) ) {
333
- return true;
334
- }
335
- }
336
-
337
- return false;
338
- }
339
-
340
  function wpcf7_antiscript_file_name( $filename ) {
341
  $filename = wp_basename( $filename );
342
- $filename = preg_replace( '/[\pC\pZ]+/i', '', $filename );
 
 
343
 
344
  $parts = explode( '.', $filename );
345
 
@@ -369,21 +219,36 @@ function wpcf7_antiscript_file_name( $filename ) {
369
  return $filename;
370
  }
371
 
372
- function wpcf7_mask_password( $text, $length_unmasked = 0 ) {
 
 
 
 
 
 
 
 
373
  $length = strlen( $text );
374
- $length_unmasked = absint( $length_unmasked );
375
 
376
- if ( 0 == $length_unmasked ) {
377
- if ( 9 < $length ) {
378
- $length_unmasked = 4;
379
- } elseif ( 3 < $length ) {
380
- $length_unmasked = 2;
381
- } else {
382
- $length_unmasked = $length;
383
- }
384
  }
385
 
386
- $text = substr( $text, 0 - $length_unmasked );
387
- $text = str_pad( $text, $length, '*', STR_PAD_LEFT );
 
 
 
 
 
 
 
 
 
 
 
388
  return $text;
389
  }
39
  $pee .= '<p>' . trim( $tinkle, "\n" ) . "</p>\n";
40
  }
41
 
 
42
  $pee = preg_replace( '!<p>([^<]+)</(div|address|form|fieldset)>!', "<p>$1</p></$2>", $pee );
43
+
44
+ $pee = preg_replace( '|<p>\s*</p>|', '', $pee ); // under certain strange conditions it could create a P of entirely whitespace
45
+
46
  $pee = preg_replace( '!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee ); // don't pee all over a tag
47
  $pee = preg_replace( "|<p>(<li.+?)</p>|", "$1", $pee ); // problem with nested lists
48
  $pee = preg_replace( '|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee );
180
  return $text;
181
  }
182
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  function wpcf7_sanitize_unit_tag( $tag ) {
184
  $tag = preg_replace( '/[^A-Za-z0-9_-]/', '', $tag );
185
  return $tag;
186
  }
187
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188
  function wpcf7_antiscript_file_name( $filename ) {
189
  $filename = wp_basename( $filename );
190
+
191
+ $filename = preg_replace( '/[\r\n\t -]+/', '-', $filename );
192
+ $filename = preg_replace( '/[\pC\pZ]+/iu', '', $filename );
193
 
194
  $parts = explode( '.', $filename );
195
 
219
  return $filename;
220
  }
221
 
222
+
223
+ /**
224
+ * Masks a password with asterisks (*).
225
+ *
226
+ * @param int $right Length of right-hand unmasked text. Default 0.
227
+ * @param int $left Length of left-hand unmasked text. Default 0.
228
+ * @return string Text of masked password.
229
+ */
230
+ function wpcf7_mask_password( $text, $right = 0, $left = 0 ) {
231
  $length = strlen( $text );
 
232
 
233
+ $right = absint( $right );
234
+ $left = absint( $left );
235
+
236
+ if ( $length < $right + $left ) {
237
+ $right = $left = 0;
 
 
 
238
  }
239
 
240
+ if ( $length <= 48 ) {
241
+ $masked = str_repeat( '*', $length - ( $right + $left ) );
242
+ } elseif ( $right + $left < 48 ) {
243
+ $masked = str_repeat( '*', 48 - ( $right + $left ) );
244
+ } else {
245
+ $masked = '****';
246
+ }
247
+
248
+ $left_unmasked = $left ? substr( $text, 0, $left ) : '';
249
+ $right_unmasked = $right ? substr( $text, -1 * $right ) : '';
250
+
251
+ $text = $left_unmasked . $masked . $right_unmasked;
252
+
253
  return $text;
254
  }
includes/functions.php CHANGED
@@ -464,16 +464,3 @@ function wpcf7_anonymize_ip_addr( $ip_addr ) {
464
 
465
  return inet_ntop( $packed & inet_pton( $mask ) );
466
  }
467
-
468
- function wpcf7_is_file_path_in_content_dir( $path ) {
469
- if ( 0 === strpos( realpath( $path ), realpath( WP_CONTENT_DIR ) ) ) {
470
- return true;
471
- }
472
-
473
- if ( defined( 'UPLOADS' )
474
- and 0 === strpos( realpath( $path ), realpath( ABSPATH . UPLOADS ) ) ) {
475
- return true;
476
- }
477
-
478
- return false;
479
- }
464
 
465
  return inet_ntop( $packed & inet_pton( $mask ) );
466
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/integration.php CHANGED
@@ -65,7 +65,8 @@ class WPCF7_Integration {
65
 
66
  if ( ! empty( $args['include'] ) ) {
67
  $services = array_intersect_key( $services,
68
- array_flip( (array) $args['include'] ) );
 
69
 
70
  if ( 1 == count( $services ) ) {
71
  $singular = true;
@@ -80,15 +81,14 @@ class WPCF7_Integration {
80
 
81
  foreach ( $services as $name => $service ) {
82
  $cats = array_intersect_key( $this->categories,
83
- array_flip( $service->get_categories() ) );
 
84
  ?>
85
  <div class="card<?php echo $service->is_active() ? ' active' : ''; ?>" id="<?php echo esc_attr( $name ); ?>">
86
  <?php $service->icon(); ?>
87
  <h2 class="title"><?php echo esc_html( $service->get_title() ); ?></h2>
88
  <div class="infobox">
89
  <?php echo esc_html( implode( ', ', $cats ) ); ?>
90
- <br />
91
- <?php $service->link(); ?>
92
  </div>
93
  <br class="clear" />
94
 
65
 
66
  if ( ! empty( $args['include'] ) ) {
67
  $services = array_intersect_key( $services,
68
+ array_flip( (array) $args['include'] )
69
+ );
70
 
71
  if ( 1 == count( $services ) ) {
72
  $singular = true;
81
 
82
  foreach ( $services as $name => $service ) {
83
  $cats = array_intersect_key( $this->categories,
84
+ array_flip( $service->get_categories() )
85
+ );
86
  ?>
87
  <div class="card<?php echo $service->is_active() ? ' active' : ''; ?>" id="<?php echo esc_attr( $name ); ?>">
88
  <?php $service->icon(); ?>
89
  <h2 class="title"><?php echo esc_html( $service->get_title() ); ?></h2>
90
  <div class="infobox">
91
  <?php echo esc_html( implode( ', ', $cats ) ); ?>
 
 
92
  </div>
93
  <br class="clear" />
94
 
includes/js/html5-fallback.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ( function( $ ) {
2
+ $( function() {
3
+ var supportHtml5 = ( function() {
4
+ var features = {};
5
+ var input = document.createElement( 'input' );
6
+ var inputTypes = [ 'date' ];
7
+
8
+ $.each( inputTypes, function( index, value ) {
9
+ input.setAttribute( 'type', value );
10
+ features[ value ] = input.type !== 'text';
11
+ } );
12
+
13
+ return features;
14
+ } )();
15
+
16
+ if ( ! supportHtml5.date ) {
17
+ $( 'input.wpcf7-date[type="date"]' ).each( function() {
18
+ $( this ).datepicker( {
19
+ dateFormat: 'yy-mm-dd',
20
+ minDate: new Date( $( this ).attr( 'min' ) ),
21
+ maxDate: new Date( $( this ).attr( 'max' ) )
22
+ } );
23
+ } );
24
+ }
25
+ } );
26
+ } )( jQuery );
includes/js/index.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(e){var t={};function n(r){if(t[r])return t[r].exports;var c=t[r]={i:r,l:!1,exports:{}};return e[r].call(c.exports,c,c.exports,n),c.l=!0,c.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var c in e)n.d(r,c,function(t){return e[t]}.bind(null,c));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=2)}([function(e,t){e.exports=window.wp.apiFetch},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){"use strict";n.r(t);var r=n(1),c=n.n(r),a=function(e){return Math.abs(parseInt(e,10))},i=n(0),o=n.n(i),u=function(e,t){var n=new Map([["init","init"],["validation_failed","invalid"],["acceptance_missing","unaccepted"],["spam","spam"],["aborted","aborted"],["mail_sent","sent"],["mail_failed","failed"],["submitting","submitting"],["resetting","resetting"]]);n.has(t)&&(t=n.get(t)),Array.from(n.values()).includes(t)||(t=(t=t.replace(/[^0-9a-z]+/i," ").trim()).replace(/\s+/,"-"),t="custom-".concat(t));var r=e.getAttribute("data-status");return e.wpcf7.status=t,e.setAttribute("data-status",t),e.classList.add(t),r&&r!==t&&e.classList.remove(r),t},s=function(e,t,n){var r=new CustomEvent("wpcf7".concat(t),{bubbles:!0,detail:n});"string"==typeof e&&(e=document.querySelector(e)),e.dispatchEvent(r)};function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=new FormData(e);t.submitter&&t.submitter.name&&n.append(t.submitter.name,t.submitter.value);var r={contactFormId:e.wpcf7.id,pluginVersion:e.wpcf7.pluginVersion,contactFormLocale:e.wpcf7.locale,unitTag:e.wpcf7.unitTag,containerPostId:e.wpcf7.containerPost,status:e.wpcf7.status,inputs:Array.from(n,(function(e){var t=e[0],n=e[1];return!t.match(/^_/)&&{name:t,value:n}})).filter((function(e){return!1!==e})),formData:n},c=function(t){var n=document.createElement("li");n.setAttribute("id",t.error_id),t.idref?n.insertAdjacentHTML("beforeend",'<a href="#'.concat(t.idref,'">').concat(t.message,"</a>")):n.insertAdjacentText("beforeend",t.message),e.wpcf7.parent.querySelector(".screen-reader-response ul").appendChild(n)},a=function(t){var n=e.querySelector(t.into),r=n.querySelector(".wpcf7-form-control");r.classList.add("wpcf7-not-valid"),r.setAttribute("aria-invalid","true"),r.setAttribute("aria-describedby",t.error_id);var c=document.createElement("span");c.setAttribute("class","wpcf7-not-valid-tip"),c.setAttribute("aria-hidden","true"),c.insertAdjacentText("beforeend",t.message),n.appendChild(c),r.closest(".use-floating-validation-tip")&&(r.addEventListener("focus",(function(e){c.setAttribute("style","display: none")})),c.addEventListener("mouseover",(function(e){c.setAttribute("style","display: none")})))};o()({path:"contact-form-7/v1/contact-forms/".concat(e.wpcf7.id,"/feedback"),method:"POST",body:n,wpcf7:{endpoint:"feedback",form:e,detail:r}}).then((function(t){var n=u(e,t.status);return r.status=t.status,r.apiResponse=t,["invalid","unaccepted","spam","aborted"].includes(n)?s(e,n,r):["sent","failed"].includes(n)&&s(e,"mail".concat(n),r),s(e,"submit",r),t})).then((function(t){t.posted_data_hash&&(e.querySelector('input[name="_wpcf7_posted_data_hash"]').value=t.posted_data_hash),"mail_sent"===t.status&&e.reset(),t.invalid_fields&&(t.invalid_fields.forEach(c),t.invalid_fields.forEach(a)),e.wpcf7.parent.querySelector('.screen-reader-response [role="status"]').insertAdjacentText("beforeend",t.message),e.querySelectorAll(".wpcf7-response-output").forEach((function(e){e.innerText=t.message}))})).catch((function(e){return console.error(e)}))}o.a.use((function(e,t){if(e.wpcf7&&"feedback"===e.wpcf7.endpoint){var n=e.wpcf7,r=n.form,c=n.detail;l(r),s(r,"beforesubmit",c),u(r,"submitting")}return t(e)}));var l=function(e){e.wpcf7.parent.querySelector('.screen-reader-response [role="status"]').innerText="",e.wpcf7.parent.querySelector(".screen-reader-response ul").innerText="",e.querySelectorAll(".wpcf7-not-valid-tip").forEach((function(e){e.remove()})),e.querySelectorAll(".wpcf7-form-control").forEach((function(e){e.setAttribute("aria-invalid","false"),e.removeAttribute("aria-describedby"),e.classList.remove("wpcf7-not-valid")})),e.querySelectorAll(".wpcf7-response-output").forEach((function(e){e.innerText=""}))};function p(e){var t=new FormData(e),n={contactFormId:e.wpcf7.id,pluginVersion:e.wpcf7.pluginVersion,contactFormLocale:e.wpcf7.locale,unitTag:e.wpcf7.unitTag,containerPostId:e.wpcf7.containerPost,status:e.wpcf7.status,inputs:Array.from(t,(function(e){var t=e[0],n=e[1];return!t.match(/^_/)&&{name:t,value:n}})).filter((function(e){return!1!==e})),formData:t};o()({path:"contact-form-7/v1/contact-forms/".concat(e.wpcf7.id,"/refill"),method:"GET",wpcf7:{endpoint:"refill",form:e,detail:n}}).then((function(t){"sent"===n.status?u(e,"mail_sent"):u(e,"init"),n.apiResponse=t,s(e,"reset",n)})).catch((function(e){return console.error(e)}))}o.a.use((function(e,t){if(e.wpcf7&&"refill"===e.wpcf7.endpoint){var n=e.wpcf7,r=n.form;n.detail,l(r),u(r,"resetting")}return t(e)}));var d=function(e,t){var n=function(n){var r=t[n];e.querySelectorAll('input[name="'.concat(n,'"]')).forEach((function(e){e.value=""})),e.querySelectorAll("img.wpcf7-captcha-".concat(n)).forEach((function(e){e.setAttribute("src",r)}));var c=/([0-9]+)\.(png|gif|jpeg)$/.exec(r);c&&e.querySelectorAll('input[name="_wpcf7_captcha_challenge_'.concat(n,'"]')).forEach((function(e){e.value=c[1]}))};for(var r in t)n(r)},v=function(e,t){var n=function(n){var r=t[n][0],c=t[n][1];e.querySelectorAll(".wpcf7-form-control-wrap.".concat(n)).forEach((function(e){e.querySelector('input[name="'.concat(n,'"]')).value="",e.querySelector(".wpcf7-quiz-label").textContent=r,e.querySelector('input[name="_wpcf7_quiz_answer_'.concat(n,'"]')).value=c}))};for(var r in t)n(r)};function m(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function b(e){var t=new FormData(e);e.wpcf7={id:a(t.get("_wpcf7")),status:e.getAttribute("data-status"),pluginVersion:t.get("_wpcf7_version"),locale:t.get("_wpcf7_locale"),unitTag:t.get("_wpcf7_unit_tag"),containerPost:a(t.get("_wpcf7_container_post")),parent:e.closest(".wpcf7")},e.querySelectorAll(".wpcf7-submit").forEach((function(e){e.insertAdjacentHTML("afterend",'<span class="ajax-loader"></span>')})),function(e){e.querySelectorAll(".wpcf7-exclusive-checkbox").forEach((function(t){t.addEventListener("change",(function(t){var n=t.target.getAttribute("name");e.querySelectorAll('input[type="checkbox"][name="'.concat(n,'"]')).forEach((function(e){e!==t.target&&(e.checked=!1)}))}))}))}(e),function(e){e.querySelectorAll(".has-free-text").forEach((function(t){var n=t.querySelector("input.wpcf7-free-text"),r=t.querySelector('input[type="checkbox"], input[type="radio"]');n.disabled=!r.checked,e.addEventListener("change",(function(e){n.disabled=!r.checked,e.target===r&&r.checked&&n.focus()}))}))}(e),function(e){e.querySelectorAll(".wpcf7-validates-as-url").forEach((function(e){e.addEventListener("change",(function(t){var n=e.value.trim();n&&!n.match(/^[a-z][a-z0-9.+-]*:/i)&&-1!==n.indexOf(".")&&(n="http://"+(n=n.replace(/^\/+/,""))),e.value=n}))}))}(e),function(e){if(e.querySelector(".wpcf7-acceptance")&&!e.classList.contains("wpcf7-acceptance-as-validation")){var t=function(){var t=!0;e.querySelectorAll(".wpcf7-acceptance").forEach((function(e){if(t&&!e.classList.contains("optional")){var n=e.querySelector('input[type="checkbox"]');(e.classList.contains("invert")&&n.checked||!e.classList.contains("invert")&&!n.checked)&&(t=!1)}})),e.querySelectorAll(".wpcf7-submit").forEach((function(e){e.disabled=!t}))};t(),e.addEventListener("change",(function(e){t()})),e.addEventListener("wpcf7reset",(function(e){t()}))}}(e),function(e){var t=function(e,t){var n=a(e.getAttribute("data-starting-value")),r=a(e.getAttribute("data-maximum-value")),c=a(e.getAttribute("data-minimum-value")),i=e.classList.contains("down")?n-t.value.length:t.value.length;e.setAttribute("data-current-value",i),e.innerText=i,r&&r<t.value.length?e.classList.add("too-long"):e.classList.remove("too-long"),c&&t.value.length<c?e.classList.add("too-short"):e.classList.remove("too-short")},n=function(n){n=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?m(Object(n),!0).forEach((function(t){c()(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({init:!1},n),e.querySelectorAll(".wpcf7-character-count").forEach((function(r){var c=r.getAttribute("data-target-name"),a=e.querySelector('[name="'.concat(c,'"]'));a&&(a.value=a.defaultValue,t(r,a),n.init&&a.addEventListener("keyup",(function(e){t(r,a)})))}))};n({init:!0}),e.addEventListener("wpcf7reset",(function(e){n()}))}(e),window.addEventListener("load",(function(t){wpcf7.cached&&e.reset()})),e.addEventListener("reset",(function(t){wpcf7.reset(e)})),e.addEventListener("submit",(function(t){var n=t.submitter;wpcf7.submit(e,{submitter:n}),t.preventDefault()})),e.addEventListener("wpcf7submit",(function(t){t.detail.apiResponse.captcha&&d(e,t.detail.apiResponse.captcha),t.detail.apiResponse.quiz&&v(e,t.detail.apiResponse.quiz)})),e.addEventListener("wpcf7reset",(function(t){t.detail.apiResponse.captcha&&d(e,t.detail.apiResponse.captcha),t.detail.apiResponse.quiz&&v(e,t.detail.apiResponse.quiz)}))}function w(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}document.addEventListener("DOMContentLoaded",(function(e){var t;wpcf7=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?w(Object(n),!0).forEach((function(t){c()(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):w(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({init:b,submit:f,reset:p},null!==(t=wpcf7)&&void 0!==t?t:{}),document.querySelectorAll(".wpcf7 > form").forEach((function(e){return wpcf7.init(e)}))}))}]);
includes/js/jquery-ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png DELETED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png DELETED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png CHANGED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png CHANGED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png CHANGED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png CHANGED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png CHANGED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png CHANGED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-icons_222222_256x240.png CHANGED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png CHANGED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-icons_454545_256x240.png CHANGED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-icons_888888_256x240.png CHANGED
Binary file
includes/js/jquery-ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png CHANGED
Binary file
includes/js/jquery-ui/themes/smoothness/jquery-ui.css CHANGED
@@ -1,8 +1,8 @@
1
- /*! jQuery UI - v1.11.4 - 2015-03-11
2
  * http://jqueryui.com
3
- * Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
  * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
- * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
6
 
7
  /* Layout helpers
8
  ----------------------------------*/
@@ -38,9 +38,6 @@
38
  .ui-helper-clearfix:after {
39
  clear: both;
40
  }
41
- .ui-helper-clearfix {
42
- min-height: 0; /* support: IE7 */
43
- }
44
  .ui-helper-zfix {
45
  width: 100%;
46
  height: 100%;
@@ -60,20 +57,27 @@
60
  ----------------------------------*/
61
  .ui-state-disabled {
62
  cursor: default !important;
 
63
  }
64
 
65
 
66
  /* Icons
67
  ----------------------------------*/
68
-
69
- /* states and images */
70
  .ui-icon {
71
- display: block;
 
 
 
72
  text-indent: -99999px;
73
  overflow: hidden;
74
  background-repeat: no-repeat;
75
  }
76
 
 
 
 
 
 
77
 
78
  /* Misc visuals
79
  ----------------------------------*/
@@ -92,21 +96,8 @@
92
  position: relative;
93
  margin: 2px 0 0 0;
94
  padding: .5em .5em .5em .7em;
95
- min-height: 0; /* support: IE7 */
96
  font-size: 100%;
97
  }
98
- .ui-accordion .ui-accordion-icons {
99
- padding-left: 2.2em;
100
- }
101
- .ui-accordion .ui-accordion-icons .ui-accordion-icons {
102
- padding-left: 2.2em;
103
- }
104
- .ui-accordion .ui-accordion-header .ui-accordion-header-icon {
105
- position: absolute;
106
- left: .5em;
107
- top: 50%;
108
- margin-top: -8px;
109
- }
110
  .ui-accordion .ui-accordion-content {
111
  padding: 1em 2.2em;
112
  border-top: 0;
@@ -118,17 +109,78 @@
118
  left: 0;
119
  cursor: default;
120
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
121
  .ui-button {
 
122
  display: inline-block;
123
  position: relative;
124
- padding: 0;
125
  line-height: normal;
126
  margin-right: .1em;
127
  cursor: pointer;
128
  vertical-align: middle;
129
  text-align: center;
130
- overflow: visible; /* removes extra width in IE */
 
 
 
 
 
 
131
  }
 
132
  .ui-button,
133
  .ui-button:link,
134
  .ui-button:visited,
@@ -136,91 +188,129 @@
136
  .ui-button:active {
137
  text-decoration: none;
138
  }
 
139
  /* to make room for the icon, a width needs to be set here */
140
  .ui-button-icon-only {
141
- width: 2.2em;
142
- }
143
- /* button elements seem to need a little more width */
144
- button.ui-button-icon-only {
145
- width: 2.4em;
146
  }
147
- .ui-button-icons-only {
148
- width: 3.4em;
 
 
149
  }
150
- button.ui-button-icons-only {
151
- width: 3.7em;
 
 
 
 
 
 
152
  }
153
 
154
- /* button text element */
155
- .ui-button .ui-button-text {
156
- display: block;
157
- line-height: normal;
 
 
 
158
  }
159
- .ui-button-text-only .ui-button-text {
 
 
 
 
 
160
  padding: .4em 1em;
161
  }
162
- .ui-button-icon-only .ui-button-text,
163
- .ui-button-icons-only .ui-button-text {
164
- padding: .4em;
165
- text-indent: -9999999px;
 
 
 
166
  }
167
- .ui-button-text-icon-primary .ui-button-text,
168
- .ui-button-text-icons .ui-button-text {
169
- padding: .4em 1em .4em 2.1em;
170
  }
171
- .ui-button-text-icon-secondary .ui-button-text,
172
- .ui-button-text-icons .ui-button-text {
173
- padding: .4em 2.1em .4em 1em;
 
174
  }
175
- .ui-button-text-icons .ui-button-text {
176
- padding-left: 2.1em;
177
- padding-right: 2.1em;
178
  }
179
- /* no icon support for input elements, provide padding by default */
180
- input.ui-button {
 
 
 
 
 
 
 
 
 
 
181
  padding: .4em 1em;
182
  }
183
-
184
- /* button icon element(s) */
185
- .ui-button-icon-only .ui-icon,
186
- .ui-button-text-icon-primary .ui-icon,
187
- .ui-button-text-icon-secondary .ui-icon,
188
- .ui-button-text-icons .ui-icon,
189
- .ui-button-icons-only .ui-icon {
190
- position: absolute;
191
- top: 50%;
192
- margin-top: -8px;
193
  }
194
- .ui-button-icon-only .ui-icon {
195
- left: 50%;
196
- margin-left: -8px;
197
  }
198
- .ui-button-text-icon-primary .ui-button-icon-primary,
199
- .ui-button-text-icons .ui-button-icon-primary,
200
- .ui-button-icons-only .ui-button-icon-primary {
201
- left: .5em;
202
  }
203
- .ui-button-text-icon-secondary .ui-button-icon-secondary,
204
- .ui-button-text-icons .ui-button-icon-secondary,
205
- .ui-button-icons-only .ui-button-icon-secondary {
206
- right: .5em;
207
  }
 
 
 
 
 
 
208
 
209
- /* button sets */
210
- .ui-buttonset {
211
- margin-right: 7px;
212
  }
213
- .ui-buttonset .ui-button {
214
- margin-left: 0;
215
- margin-right: -.3em;
216
  }
217
 
218
- /* workarounds */
219
- /* reset extra padding in Firefox, see h5bp.com/l */
220
- input.ui-button::-moz-focus-inner,
221
- button.ui-button::-moz-focus-inner {
222
- border: 0;
223
- padding: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
224
  }
225
  .ui-datepicker {
226
  width: 17em;
@@ -387,8 +477,17 @@ button.ui-button::-moz-focus-inner {
387
  border-right-width: 0;
388
  border-left-width: 1px;
389
  }
390
- .ui-dialog {
 
 
 
 
391
  overflow: hidden;
 
 
 
 
 
392
  position: absolute;
393
  top: 0;
394
  left: 0;
@@ -437,90 +536,51 @@ button.ui-button::-moz-focus-inner {
437
  margin: .5em .4em .5em 0;
438
  cursor: pointer;
439
  }
440
- .ui-dialog .ui-resizable-se {
441
- width: 12px;
442
- height: 12px;
443
- right: -5px;
444
- bottom: -5px;
445
- background-position: 16px 16px;
446
- }
447
- .ui-draggable .ui-dialog-titlebar {
448
- cursor: move;
449
- }
450
- .ui-draggable-handle {
451
- -ms-touch-action: none;
452
- touch-action: none;
453
- }
454
- .ui-menu {
455
- list-style: none;
456
- padding: 0;
457
- margin: 0;
458
- display: block;
459
- outline: none;
460
- }
461
- .ui-menu .ui-menu {
462
- position: absolute;
463
  }
464
- .ui-menu .ui-menu-item {
465
- position: relative;
466
- margin: 0;
467
- padding: 3px 1em 3px .4em;
468
- cursor: pointer;
469
- min-height: 0; /* support: IE7 */
470
- /* support: IE10, see #8844 */
471
- list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
472
  }
473
- .ui-menu .ui-menu-divider {
474
- margin: 5px 0;
475
- height: 0;
476
- font-size: 0;
477
- line-height: 0;
478
- border-width: 1px 0 0 0;
479
  }
480
- .ui-menu .ui-state-focus,
481
- .ui-menu .ui-state-active {
482
- margin: -1px;
483
  }
484
-
485
- /* icon support */
486
- .ui-menu-icons {
487
- position: relative;
 
 
488
  }
489
- .ui-menu-icons .ui-menu-item {
490
- padding-left: 2em;
 
491
  }
492
-
493
- /* left-aligned */
494
- .ui-menu .ui-icon {
495
- position: absolute;
496
- top: 0;
497
  bottom: 0;
498
- left: .2em;
499
- margin: auto 0;
500
  }
501
-
502
- /* right-aligned */
503
- .ui-menu .ui-menu-icon {
504
- left: auto;
505
  right: 0;
 
506
  }
507
- .ui-progressbar {
508
- height: 2em;
509
- text-align: left;
510
- overflow: hidden;
511
- }
512
- .ui-progressbar .ui-progressbar-value {
513
- margin: -1px;
514
- height: 100%;
515
  }
516
- .ui-progressbar .ui-progressbar-overlay {
517
- background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
518
- height: 100%;
519
- filter: alpha(opacity=25); /* support: IE8 */
520
- opacity: 0.25;
521
  }
522
- .ui-progressbar-indeterminate .ui-progressbar-value {
523
- background-image: none;
 
524
  }
525
  .ui-resizable {
526
  position: relative;
@@ -592,6 +652,24 @@ button.ui-button::-moz-focus-inner {
592
  right: -5px;
593
  top: -5px;
594
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
595
  .ui-selectable {
596
  -ms-touch-action: none;
597
  touch-action: none;
@@ -611,7 +689,6 @@ button.ui-button::-moz-focus-inner {
611
  }
612
  .ui-selectmenu-menu .ui-menu {
613
  overflow: auto;
614
- /* Support: IE7 */
615
  overflow-x: hidden;
616
  padding-bottom: 1px;
617
  }
@@ -627,28 +704,20 @@ button.ui-button::-moz-focus-inner {
627
  .ui-selectmenu-open {
628
  display: block;
629
  }
630
- .ui-selectmenu-button {
631
- display: inline-block;
632
- overflow: hidden;
633
- position: relative;
634
- text-decoration: none;
635
- cursor: pointer;
636
- }
637
- .ui-selectmenu-button span.ui-icon {
638
- right: 0.5em;
639
- left: auto;
640
- margin-top: -8px;
641
- position: absolute;
642
- top: 50%;
643
- }
644
- .ui-selectmenu-button span.ui-selectmenu-text {
645
- text-align: left;
646
- padding: 0.4em 2.1em 0.4em 1em;
647
  display: block;
648
- line-height: 1.4;
649
  overflow: hidden;
650
  text-overflow: ellipsis;
 
 
 
651
  white-space: nowrap;
 
 
 
 
 
652
  }
653
  .ui-slider {
654
  position: relative;
@@ -730,14 +799,14 @@ button.ui-button::-moz-focus-inner {
730
  border: none;
731
  background: none;
732
  color: inherit;
733
- padding: 0;
734
  margin: .2em 0;
735
  vertical-align: middle;
736
  margin-left: .4em;
737
- margin-right: 22px;
738
  }
739
  .ui-spinner-button {
740
- width: 16px;
741
  height: 50%;
742
  font-size: .5em;
743
  padding: 0;
@@ -751,16 +820,9 @@ button.ui-button::-moz-focus-inner {
751
  }
752
  /* more specificity required here to override default borders */
753
  .ui-spinner a.ui-spinner-button {
754
- border-top: none;
755
- border-bottom: none;
756
- border-right: none;
757
- }
758
- /* vertically center icon */
759
- .ui-spinner .ui-icon {
760
- position: absolute;
761
- margin-top: -8px;
762
- top: 50%;
763
- left: 0;
764
  }
765
  .ui-spinner-up {
766
  top: 0;
@@ -768,12 +830,6 @@ button.ui-button::-moz-focus-inner {
768
  .ui-spinner-down {
769
  bottom: 0;
770
  }
771
-
772
- /* TR overrides */
773
- .ui-spinner .ui-icon-triangle-1-s {
774
- /* need to fix icons sprite */
775
- background-position: -65px -16px;
776
- }
777
  .ui-tabs {
778
  position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
779
  padding: .2em;
@@ -820,13 +876,10 @@ button.ui-button::-moz-focus-inner {
820
  position: absolute;
821
  z-index: 9999;
822
  max-width: 300px;
823
- -webkit-box-shadow: 0 0 5px #aaa;
824
- box-shadow: 0 0 5px #aaa;
825
  }
826
  body .ui-tooltip {
827
  border-width: 2px;
828
  }
829
-
830
  /* Component containers
831
  ----------------------------------*/
832
  .ui-widget {
@@ -843,9 +896,12 @@ body .ui-tooltip {
843
  font-family: Verdana,Arial,sans-serif;
844
  font-size: 1em;
845
  }
 
 
 
846
  .ui-widget-content {
847
  border: 1px solid #aaaaaa;
848
- background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
849
  color: #222222;
850
  }
851
  .ui-widget-content a {
@@ -865,7 +921,13 @@ body .ui-tooltip {
865
  ----------------------------------*/
866
  .ui-state-default,
867
  .ui-widget-content .ui-state-default,
868
- .ui-widget-header .ui-state-default {
 
 
 
 
 
 
869
  border: 1px solid #d3d3d3;
870
  background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
871
  font-weight: normal;
@@ -873,7 +935,11 @@ body .ui-tooltip {
873
  }
874
  .ui-state-default a,
875
  .ui-state-default a:link,
876
- .ui-state-default a:visited {
 
 
 
 
877
  color: #555555;
878
  text-decoration: none;
879
  }
@@ -882,7 +948,9 @@ body .ui-tooltip {
882
  .ui-widget-header .ui-state-hover,
883
  .ui-state-focus,
884
  .ui-widget-content .ui-state-focus,
885
- .ui-widget-header .ui-state-focus {
 
 
886
  border: 1px solid #999999;
887
  background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
888
  font-weight: normal;
@@ -895,18 +963,32 @@ body .ui-tooltip {
895
  .ui-state-focus a,
896
  .ui-state-focus a:hover,
897
  .ui-state-focus a:link,
898
- .ui-state-focus a:visited {
 
 
899
  color: #212121;
900
  text-decoration: none;
901
  }
 
 
 
 
902
  .ui-state-active,
903
  .ui-widget-content .ui-state-active,
904
- .ui-widget-header .ui-state-active {
 
 
 
905
  border: 1px solid #aaaaaa;
906
  background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
907
  font-weight: normal;
908
  color: #212121;
909
  }
 
 
 
 
 
910
  .ui-state-active a,
911
  .ui-state-active a:link,
912
  .ui-state-active a:visited {
@@ -923,6 +1005,10 @@ body .ui-tooltip {
923
  background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
924
  color: #363636;
925
  }
 
 
 
 
926
  .ui-state-highlight a,
927
  .ui-widget-content .ui-state-highlight a,
928
  .ui-widget-header .ui-state-highlight a {
@@ -983,41 +1069,45 @@ body .ui-tooltip {
983
  .ui-widget-header .ui-icon {
984
  background-image: url("images/ui-icons_222222_256x240.png");
985
  }
986
- .ui-state-default .ui-icon {
987
- background-image: url("images/ui-icons_888888_256x240.png");
988
- }
989
  .ui-state-hover .ui-icon,
990
- .ui-state-focus .ui-icon {
 
 
991
  background-image: url("images/ui-icons_454545_256x240.png");
992
  }
993
- .ui-state-active .ui-icon {
 
994
  background-image: url("images/ui-icons_454545_256x240.png");
995
  }
996
- .ui-state-highlight .ui-icon {
 
997
  background-image: url("images/ui-icons_2e83ff_256x240.png");
998
  }
999
  .ui-state-error .ui-icon,
1000
  .ui-state-error-text .ui-icon {
1001
  background-image: url("images/ui-icons_cd0a0a_256x240.png");
1002
  }
 
 
 
1003
 
1004
  /* positioning */
1005
  .ui-icon-blank { background-position: 16px 16px; }
1006
- .ui-icon-carat-1-n { background-position: 0 0; }
1007
- .ui-icon-carat-1-ne { background-position: -16px 0; }
1008
- .ui-icon-carat-1-e { background-position: -32px 0; }
1009
- .ui-icon-carat-1-se { background-position: -48px 0; }
1010
- .ui-icon-carat-1-s { background-position: -64px 0; }
1011
- .ui-icon-carat-1-sw { background-position: -80px 0; }
1012
- .ui-icon-carat-1-w { background-position: -96px 0; }
1013
- .ui-icon-carat-1-nw { background-position: -112px 0; }
1014
- .ui-icon-carat-2-n-s { background-position: -128px 0; }
1015
- .ui-icon-carat-2-e-w { background-position: -144px 0; }
1016
  .ui-icon-triangle-1-n { background-position: 0 -16px; }
1017
  .ui-icon-triangle-1-ne { background-position: -16px -16px; }
1018
  .ui-icon-triangle-1-e { background-position: -32px -16px; }
1019
  .ui-icon-triangle-1-se { background-position: -48px -16px; }
1020
- .ui-icon-triangle-1-s { background-position: -64px -16px; }
1021
  .ui-icon-triangle-1-sw { background-position: -80px -16px; }
1022
  .ui-icon-triangle-1-w { background-position: -96px -16px; }
1023
  .ui-icon-triangle-1-nw { background-position: -112px -16px; }
@@ -1027,7 +1117,7 @@ body .ui-tooltip {
1027
  .ui-icon-arrow-1-ne { background-position: -16px -32px; }
1028
  .ui-icon-arrow-1-e { background-position: -32px -32px; }
1029
  .ui-icon-arrow-1-se { background-position: -48px -32px; }
1030
- .ui-icon-arrow-1-s { background-position: -64px -32px; }
1031
  .ui-icon-arrow-1-sw { background-position: -80px -32px; }
1032
  .ui-icon-arrow-1-w { background-position: -96px -32px; }
1033
  .ui-icon-arrow-1-nw { background-position: -112px -32px; }
@@ -1039,7 +1129,7 @@ body .ui-tooltip {
1039
  .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
1040
  .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
1041
  .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
1042
- .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
1043
  .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
1044
  .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
1045
  .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
@@ -1211,15 +1301,11 @@ body .ui-tooltip {
1211
 
1212
  /* Overlays */
1213
  .ui-widget-overlay {
1214
- background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
1215
  opacity: .3;
1216
  filter: Alpha(Opacity=30); /* support: IE8 */
1217
  }
1218
  .ui-widget-shadow {
1219
- margin: -8px 0 0 -8px;
1220
- padding: 8px;
1221
- background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
1222
- opacity: .3;
1223
- filter: Alpha(Opacity=30); /* support: IE8 */
1224
- border-radius: 8px;
1225
  }
1
+ /*! jQuery UI - v1.12.1 - 2016-09-14
2
  * http://jqueryui.com
3
+ * Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
  * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
+ * Copyright jQuery Foundation and other contributors; Licensed MIT */
6
 
7
  /* Layout helpers
8
  ----------------------------------*/
38
  .ui-helper-clearfix:after {
39
  clear: both;
40
  }
 
 
 
41
  .ui-helper-zfix {
42
  width: 100%;
43
  height: 100%;
57
  ----------------------------------*/
58
  .ui-state-disabled {
59
  cursor: default !important;
60
+ pointer-events: none;
61
  }
62
 
63
 
64
  /* Icons
65
  ----------------------------------*/
 
 
66
  .ui-icon {
67
+ display: inline-block;
68
+ vertical-align: middle;
69
+ margin-top: -.25em;
70
+ position: relative;
71
  text-indent: -99999px;
72
  overflow: hidden;
73
  background-repeat: no-repeat;
74
  }
75
 
76
+ .ui-widget-icon-block {
77
+ left: 50%;
78
+ margin-left: -8px;
79
+ display: block;
80
+ }
81
 
82
  /* Misc visuals
83
  ----------------------------------*/
96
  position: relative;
97
  margin: 2px 0 0 0;
98
  padding: .5em .5em .5em .7em;
 
99
  font-size: 100%;
100
  }
 
 
 
 
 
 
 
 
 
 
 
 
101
  .ui-accordion .ui-accordion-content {
102
  padding: 1em 2.2em;
103
  border-top: 0;
109
  left: 0;
110
  cursor: default;
111
  }
112
+ .ui-menu {
113
+ list-style: none;
114
+ padding: 0;
115
+ margin: 0;
116
+ display: block;
117
+ outline: 0;
118
+ }
119
+ .ui-menu .ui-menu {
120
+ position: absolute;
121
+ }
122
+ .ui-menu .ui-menu-item {
123
+ margin: 0;
124
+ cursor: pointer;
125
+ /* support: IE10, see #8844 */
126
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
127
+ }
128
+ .ui-menu .ui-menu-item-wrapper {
129
+ position: relative;
130
+ padding: 3px 1em 3px .4em;
131
+ }
132
+ .ui-menu .ui-menu-divider {
133
+ margin: 5px 0;
134
+ height: 0;
135
+ font-size: 0;
136
+ line-height: 0;
137
+ border-width: 1px 0 0 0;
138
+ }
139
+ .ui-menu .ui-state-focus,
140
+ .ui-menu .ui-state-active {
141
+ margin: -1px;
142
+ }
143
+
144
+ /* icon support */
145
+ .ui-menu-icons {
146
+ position: relative;
147
+ }
148
+ .ui-menu-icons .ui-menu-item-wrapper {
149
+ padding-left: 2em;
150
+ }
151
+
152
+ /* left-aligned */
153
+ .ui-menu .ui-icon {
154
+ position: absolute;
155
+ top: 0;
156
+ bottom: 0;
157
+ left: .2em;
158
+ margin: auto 0;
159
+ }
160
+
161
+ /* right-aligned */
162
+ .ui-menu .ui-menu-icon {
163
+ left: auto;
164
+ right: 0;
165
+ }
166
  .ui-button {
167
+ padding: .4em 1em;
168
  display: inline-block;
169
  position: relative;
 
170
  line-height: normal;
171
  margin-right: .1em;
172
  cursor: pointer;
173
  vertical-align: middle;
174
  text-align: center;
175
+ -webkit-user-select: none;
176
+ -moz-user-select: none;
177
+ -ms-user-select: none;
178
+ user-select: none;
179
+
180
+ /* Support: IE <= 11 */
181
+ overflow: visible;
182
  }
183
+
184
  .ui-button,
185
  .ui-button:link,
186
  .ui-button:visited,
188
  .ui-button:active {
189
  text-decoration: none;
190
  }
191
+
192
  /* to make room for the icon, a width needs to be set here */
193
  .ui-button-icon-only {
194
+ width: 2em;
195
+ box-sizing: border-box;
196
+ text-indent: -9999px;
197
+ white-space: nowrap;
 
198
  }
199
+
200
+ /* no icon support for input elements */
201
+ input.ui-button.ui-button-icon-only {
202
+ text-indent: 0;
203
  }
204
+
205
+ /* button icon element(s) */
206
+ .ui-button-icon-only .ui-icon {
207
+ position: absolute;
208
+ top: 50%;
209
+ left: 50%;
210
+ margin-top: -8px;
211
+ margin-left: -8px;
212
  }
213
 
214
+ .ui-button.ui-icon-notext .ui-icon {
215
+ padding: 0;
216
+ width: 2.1em;
217
+ height: 2.1em;
218
+ text-indent: -9999px;
219
+ white-space: nowrap;
220
+
221
  }
222
+
223
+ input.ui-button.ui-icon-notext .ui-icon {
224
+ width: auto;
225
+ height: auto;
226
+ text-indent: 0;
227
+ white-space: normal;
228
  padding: .4em 1em;
229
  }
230
+
231
+ /* workarounds */
232
+ /* Support: Firefox 5 - 40 */
233
+ input.ui-button::-moz-focus-inner,
234
+ button.ui-button::-moz-focus-inner {
235
+ border: 0;
236
+ padding: 0;
237
  }
238
+ .ui-controlgroup {
239
+ vertical-align: middle;
240
+ display: inline-block;
241
  }
242
+ .ui-controlgroup > .ui-controlgroup-item {
243
+ float: left;
244
+ margin-left: 0;
245
+ margin-right: 0;
246
  }
247
+ .ui-controlgroup > .ui-controlgroup-item:focus,
248
+ .ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
249
+ z-index: 9999;
250
  }
251
+ .ui-controlgroup-vertical > .ui-controlgroup-item {
252
+ display: block;
253
+ float: none;
254
+ width: 100%;
255
+ margin-top: 0;
256
+ margin-bottom: 0;
257
+ text-align: left;
258
+ }
259
+ .ui-controlgroup-vertical .ui-controlgroup-item {
260
+ box-sizing: border-box;
261
+ }
262
+ .ui-controlgroup .ui-controlgroup-label {
263
  padding: .4em 1em;
264
  }
265
+ .ui-controlgroup .ui-controlgroup-label span {
266
+ font-size: 80%;
 
 
 
 
 
 
 
 
267
  }
268
+ .ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
269
+ border-left: none;
 
270
  }
271
+ .ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
272
+ border-top: none;
 
 
273
  }
274
+ .ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
275
+ border-right: none;
 
 
276
  }
277
+ .ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
278
+ border-bottom: none;
279
+ }
280
+
281
+ /* Spinner specific style fixes */
282
+ .ui-controlgroup-vertical .ui-spinner-input {
283
 
284
+ /* Support: IE8 only, Android < 4.4 only */
285
+ width: 75%;
286
+ width: calc( 100% - 2.4em );
287
  }
288
+ .ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
289
+ border-top-style: solid;
 
290
  }
291
 
292
+ .ui-checkboxradio-label .ui-icon-background {
293
+ box-shadow: inset 1px 1px 1px #ccc;
294
+ border-radius: .12em;
295
+ border: none;
296
+ }
297
+ .ui-checkboxradio-radio-label .ui-icon-background {
298
+ width: 16px;
299
+ height: 16px;
300
+ border-radius: 1em;
301
+ overflow: visible;
302
+ border: none;
303
+ }
304
+ .ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
305
+ .ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
306
+ background-image: none;
307
+ width: 8px;
308
+ height: 8px;
309
+ border-width: 4px;
310
+ border-style: solid;
311
+ }
312
+ .ui-checkboxradio-disabled {
313
+ pointer-events: none;
314
  }
315
  .ui-datepicker {
316
  width: 17em;
477
  border-right-width: 0;
478
  border-left-width: 1px;
479
  }
480
+
481
+ /* Icons */
482
+ .ui-datepicker .ui-icon {
483
+ display: block;
484
+ text-indent: -99999px;
485
  overflow: hidden;
486
+ background-repeat: no-repeat;
487
+ left: .5em;
488
+ top: .3em;
489
+ }
490
+ .ui-dialog {
491
  position: absolute;
492
  top: 0;
493
  left: 0;
536
  margin: .5em .4em .5em 0;
537
  cursor: pointer;
538
  }
539
+ .ui-dialog .ui-resizable-n {
540
+ height: 2px;
541
+ top: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
542
  }
543
+ .ui-dialog .ui-resizable-e {
544
+ width: 2px;
545
+ right: 0;
 
 
 
 
 
546
  }
547
+ .ui-dialog .ui-resizable-s {
548
+ height: 2px;
549
+ bottom: 0;
 
 
 
550
  }
551
+ .ui-dialog .ui-resizable-w {
552
+ width: 2px;
553
+ left: 0;
554
  }
555
+ .ui-dialog .ui-resizable-se,
556
+ .ui-dialog .ui-resizable-sw,
557
+ .ui-dialog .ui-resizable-ne,
558
+ .ui-dialog .ui-resizable-nw {
559
+ width: 7px;
560
+ height: 7px;
561
  }
562
+ .ui-dialog .ui-resizable-se {
563
+ right: 0;
564
+ bottom: 0;
565
  }
566
+ .ui-dialog .ui-resizable-sw {
567
+ left: 0;
 
 
 
568
  bottom: 0;
 
 
569
  }
570
+ .ui-dialog .ui-resizable-ne {
 
 
 
571
  right: 0;
572
+ top: 0;
573
  }
574
+ .ui-dialog .ui-resizable-nw {
575
+ left: 0;
576
+ top: 0;
 
 
 
 
 
577
  }
578
+ .ui-draggable .ui-dialog-titlebar {
579
+ cursor: move;
 
 
 
580
  }
581
+ .ui-draggable-handle {
582
+ -ms-touch-action: none;
583
+ touch-action: none;
584
  }
585
  .ui-resizable {
586
  position: relative;
652
  right: -5px;
653
  top: -5px;
654
  }
655
+ .ui-progressbar {
656
+ height: 2em;
657
+ text-align: left;
658
+ overflow: hidden;
659
+ }
660
+ .ui-progressbar .ui-progressbar-value {
661
+ margin: -1px;
662
+ height: 100%;
663
+ }
664
+ .ui-progressbar .ui-progressbar-overlay {
665
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
666
+ height: 100%;
667
+ filter: alpha(opacity=25); /* support: IE8 */
668
+ opacity: 0.25;
669
+ }
670
+ .ui-progressbar-indeterminate .ui-progressbar-value {
671
+ background-image: none;
672
+ }
673
  .ui-selectable {
674
  -ms-touch-action: none;
675
  touch-action: none;
689
  }
690
  .ui-selectmenu-menu .ui-menu {
691
  overflow: auto;
 
692
  overflow-x: hidden;
693
  padding-bottom: 1px;
694
  }
704
  .ui-selectmenu-open {
705
  display: block;
706
  }
707
+ .ui-selectmenu-text {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
708
  display: block;
709
+ margin-right: 20px;
710
  overflow: hidden;
711
  text-overflow: ellipsis;
712
+ }
713
+ .ui-selectmenu-button.ui-button {
714
+ text-align: left;
715
  white-space: nowrap;
716
+ width: 14em;
717
+ }
718
+ .ui-selectmenu-icon.ui-icon {
719
+ float: right;
720
+ margin-top: 0;
721
  }
722
  .ui-slider {
723
  position: relative;
799
  border: none;
800
  background: none;
801
  color: inherit;
802
+ padding: .222em 0;
803
  margin: .2em 0;
804
  vertical-align: middle;
805
  margin-left: .4em;
806
+ margin-right: 2em;
807
  }
808
  .ui-spinner-button {
809
+ width: 1.6em;
810
  height: 50%;
811
  font-size: .5em;
812
  padding: 0;
820
  }
821
  /* more specificity required here to override default borders */
822
  .ui-spinner a.ui-spinner-button {
823
+ border-top-style: none;
824
+ border-bottom-style: none;
825
+ border-right-style: none;
 
 
 
 
 
 
 
826
  }
827
  .ui-spinner-up {
828
  top: 0;
830
  .ui-spinner-down {
831
  bottom: 0;
832
  }
 
 
 
 
 
 
833
  .ui-tabs {
834
  position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
835
  padding: .2em;
876
  position: absolute;
877
  z-index: 9999;
878
  max-width: 300px;
 
 
879
  }
880
  body .ui-tooltip {
881
  border-width: 2px;
882
  }
 
883
  /* Component containers
884
  ----------------------------------*/
885
  .ui-widget {
896
  font-family: Verdana,Arial,sans-serif;
897
  font-size: 1em;
898
  }
899
+ .ui-widget.ui-widget-content {
900
+ border: 1px solid #d3d3d3;
901
+ }
902
  .ui-widget-content {
903
  border: 1px solid #aaaaaa;
904
+ background: #ffffff;
905
  color: #222222;
906
  }
907
  .ui-widget-content a {
921
  ----------------------------------*/
922
  .ui-state-default,
923
  .ui-widget-content .ui-state-default,
924
+ .ui-widget-header .ui-state-default,
925
+ .ui-button,
926
+
927
+ /* We use html here because we need a greater specificity to make sure disabled
928
+ works properly when clicked or hovered */
929
+ html .ui-button.ui-state-disabled:hover,
930
+ html .ui-button.ui-state-disabled:active {
931
  border: 1px solid #d3d3d3;
932
  background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
933
  font-weight: normal;
935
  }
936
  .ui-state-default a,
937
  .ui-state-default a:link,
938
+ .ui-state-default a:visited,
939
+ a.ui-button,
940
+ a:link.ui-button,
941
+ a:visited.ui-button,
942
+ .ui-button {
943
  color: #555555;
944
  text-decoration: none;
945
  }
948
  .ui-widget-header .ui-state-hover,
949
  .ui-state-focus,
950
  .ui-widget-content .ui-state-focus,
951
+ .ui-widget-header .ui-state-focus,
952
+ .ui-button:hover,
953
+ .ui-button:focus {
954
  border: 1px solid #999999;
955
  background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
956
  font-weight: normal;
963
  .ui-state-focus a,
964
  .ui-state-focus a:hover,
965
  .ui-state-focus a:link,
966
+ .ui-state-focus a:visited,
967
+ a.ui-button:hover,
968
+ a.ui-button:focus {
969
  color: #212121;
970
  text-decoration: none;
971
  }
972
+
973
+ .ui-visual-focus {
974
+ box-shadow: 0 0 3px 1px rgb(94, 158, 214);
975
+ }
976
  .ui-state-active,
977
  .ui-widget-content .ui-state-active,
978
+ .ui-widget-header .ui-state-active,
979
+ a.ui-button:active,
980
+ .ui-button:active,
981
+ .ui-button.ui-state-active:hover {
982
  border: 1px solid #aaaaaa;
983
  background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
984
  font-weight: normal;
985
  color: #212121;
986
  }
987
+ .ui-icon-background,
988
+ .ui-state-active .ui-icon-background {
989
+ border: #aaaaaa;
990
+ background-color: #212121;
991
+ }
992
  .ui-state-active a,
993
  .ui-state-active a:link,
994
  .ui-state-active a:visited {
1005
  background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
1006
  color: #363636;
1007
  }
1008
+ .ui-state-checked {
1009
+ border: 1px solid #fcefa1;
1010
+ background: #fbf9ee;
1011
+ }
1012
  .ui-state-highlight a,
1013
  .ui-widget-content .ui-state-highlight a,
1014
  .ui-widget-header .ui-state-highlight a {
1069
  .ui-widget-header .ui-icon {
1070
  background-image: url("images/ui-icons_222222_256x240.png");
1071
  }
 
 
 
1072
  .ui-state-hover .ui-icon,
1073
+ .ui-state-focus .ui-icon,
1074
+ .ui-button:hover .ui-icon,
1075
+ .ui-button:focus .ui-icon {
1076
  background-image: url("images/ui-icons_454545_256x240.png");
1077
  }
1078
+ .ui-state-active .ui-icon,
1079
+ .ui-button:active .ui-icon {
1080
  background-image: url("images/ui-icons_454545_256x240.png");
1081
  }
1082
+ .ui-state-highlight .ui-icon,
1083
+ .ui-button .ui-state-highlight.ui-icon {
1084
  background-image: url("images/ui-icons_2e83ff_256x240.png");
1085
  }
1086
  .ui-state-error .ui-icon,
1087
  .ui-state-error-text .ui-icon {
1088
  background-image: url("images/ui-icons_cd0a0a_256x240.png");
1089
  }
1090
+ .ui-button .ui-icon {
1091
+ background-image: url("images/ui-icons_888888_256x240.png");
1092
+ }
1093
 
1094
  /* positioning */
1095
  .ui-icon-blank { background-position: 16px 16px; }
1096
+ .ui-icon-caret-1-n { background-position: 0 0; }
1097
+ .ui-icon-caret-1-ne { background-position: -16px 0; }
1098
+ .ui-icon-caret-1-e { background-position: -32px 0; }
1099
+ .ui-icon-caret-1-se { background-position: -48px 0; }
1100
+ .ui-icon-caret-1-s { background-position: -65px 0; }
1101
+ .ui-icon-caret-1-sw { background-position: -80px 0; }
1102
+ .ui-icon-caret-1-w { background-position: -96px 0; }
1103
+ .ui-icon-caret-1-nw { background-position: -112px 0; }
1104
+ .ui-icon-caret-2-n-s { background-position: -128px 0; }
1105
+ .ui-icon-caret-2-e-w { background-position: -144px 0; }
1106
  .ui-icon-triangle-1-n { background-position: 0 -16px; }
1107
  .ui-icon-triangle-1-ne { background-position: -16px -16px; }
1108
  .ui-icon-triangle-1-e { background-position: -32px -16px; }
1109
  .ui-icon-triangle-1-se { background-position: -48px -16px; }
1110
+ .ui-icon-triangle-1-s { background-position: -65px -16px; }
1111
  .ui-icon-triangle-1-sw { background-position: -80px -16px; }
1112
  .ui-icon-triangle-1-w { background-position: -96px -16px; }
1113
  .ui-icon-triangle-1-nw { background-position: -112px -16px; }
1117
  .ui-icon-arrow-1-ne { background-position: -16px -32px; }
1118
  .ui-icon-arrow-1-e { background-position: -32px -32px; }
1119
  .ui-icon-arrow-1-se { background-position: -48px -32px; }
1120
+ .ui-icon-arrow-1-s { background-position: -65px -32px; }
1121
  .ui-icon-arrow-1-sw { background-position: -80px -32px; }
1122
  .ui-icon-arrow-1-w { background-position: -96px -32px; }
1123
  .ui-icon-arrow-1-nw { background-position: -112px -32px; }
1129
  .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
1130
  .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
1131
  .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
1132
+ .ui-icon-arrowthick-1-n { background-position: 1px -48px; }
1133
  .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
1134
  .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
1135
  .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
1301
 
1302
  /* Overlays */
1303
  .ui-widget-overlay {
1304
+ background: #aaaaaa;
1305
  opacity: .3;
1306
  filter: Alpha(Opacity=30); /* support: IE8 */
1307
  }
1308
  .ui-widget-shadow {
1309
+ -webkit-box-shadow: -8px -8px 8px #aaaaaa;
1310
+ box-shadow: -8px -8px 8px #aaaaaa;
 
 
 
 
1311
  }
includes/js/jquery-ui/themes/smoothness/jquery-ui.min.css CHANGED
@@ -1,7 +1,7 @@
1
- /*! jQuery UI - v1.11.4 - 2015-03-11
2
  * http://jqueryui.com
3
- * Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
  * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
- * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
6
 
7
- .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
1
+ /*! jQuery UI - v1.12.1 - 2016-09-14
2
  * http://jqueryui.com
3
+ * Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
4
  * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
+ * Copyright jQuery Foundation and other contributors; Licensed MIT */
6
 
7
+ .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #d3d3d3}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#212121;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-icon-background,.ui-state-active .ui-icon-background{border:#aaa;background-color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.ui-state-checked{border:1px solid #fcefa1;background:#fbf9ee}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{-webkit-box-shadow:-8px -8px 8px #aaa;box-shadow:-8px -8px 8px #aaa}
includes/js/jquery-ui/themes/smoothness/theme.css CHANGED
@@ -1,5 +1,5 @@
1
  /*!
2
- * jQuery UI CSS Framework 1.11.4
3
  * http://jqueryui.com
4
  *
5
  * Copyright jQuery Foundation and other contributors
@@ -28,9 +28,12 @@
28
  font-family: Verdana,Arial,sans-serif;
29
  font-size: 1em;
30
  }
 
 
 
31
  .ui-widget-content {
32
  border: 1px solid #aaaaaa;
33
- background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
34
  color: #222222;
35
  }
36
  .ui-widget-content a {
@@ -50,7 +53,13 @@
50
  ----------------------------------*/
51
  .ui-state-default,
52
  .ui-widget-content .ui-state-default,
53
- .ui-widget-header .ui-state-default {
 
 
 
 
 
 
54
  border: 1px solid #d3d3d3;
55
  background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
56
  font-weight: normal;
@@ -58,7 +67,11 @@
58
  }
59
  .ui-state-default a,
60
  .ui-state-default a:link,
61
- .ui-state-default a:visited {
 
 
 
 
62
  color: #555555;
63
  text-decoration: none;
64
  }
@@ -67,7 +80,9 @@
67
  .ui-widget-header .ui-state-hover,
68
  .ui-state-focus,
69
  .ui-widget-content .ui-state-focus,
70
- .ui-widget-header .ui-state-focus {
 
 
71
  border: 1px solid #999999;
72
  background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
73
  font-weight: normal;
@@ -80,18 +95,32 @@
80
  .ui-state-focus a,
81
  .ui-state-focus a:hover,
82
  .ui-state-focus a:link,
83
- .ui-state-focus a:visited {
 
 
84
  color: #212121;
85
  text-decoration: none;
86
  }
 
 
 
 
87
  .ui-state-active,
88
  .ui-widget-content .ui-state-active,
89
- .ui-widget-header .ui-state-active {
 
 
 
90
  border: 1px solid #aaaaaa;
91
  background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
92
  font-weight: normal;
93
  color: #212121;
94
  }
 
 
 
 
 
95
  .ui-state-active a,
96
  .ui-state-active a:link,
97
  .ui-state-active a:visited {
@@ -108,6 +137,10 @@
108
  background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
109
  color: #363636;
110
  }
 
 
 
 
111
  .ui-state-highlight a,
112
  .ui-widget-content .ui-state-highlight a,
113
  .ui-widget-header .ui-state-highlight a {
@@ -168,41 +201,45 @@
168
  .ui-widget-header .ui-icon {
169
  background-image: url("images/ui-icons_222222_256x240.png");
170
  }
171
- .ui-state-default .ui-icon {
172
- background-image: url("images/ui-icons_888888_256x240.png");
173
- }
174
  .ui-state-hover .ui-icon,
175
- .ui-state-focus .ui-icon {
 
 
176
  background-image: url("images/ui-icons_454545_256x240.png");
177
  }
178
- .ui-state-active .ui-icon {
 
179
  background-image: url("images/ui-icons_454545_256x240.png");
180
  }
181
- .ui-state-highlight .ui-icon {
 
182
  background-image: url("images/ui-icons_2e83ff_256x240.png");
183
  }
184
  .ui-state-error .ui-icon,
185
  .ui-state-error-text .ui-icon {
186
  background-image: url("images/ui-icons_cd0a0a_256x240.png");
187
  }
 
 
 
188
 
189
  /* positioning */
190
  .ui-icon-blank { background-position: 16px 16px; }
191
- .ui-icon-carat-1-n { background-position: 0 0; }
192
- .ui-icon-carat-1-ne { background-position: -16px 0; }
193
- .ui-icon-carat-1-e { background-position: -32px 0; }
194
- .ui-icon-carat-1-se { background-position: -48px 0; }
195
- .ui-icon-carat-1-s { background-position: -64px 0; }
196
- .ui-icon-carat-1-sw { background-position: -80px 0; }
197
- .ui-icon-carat-1-w { background-position: -96px 0; }
198
- .ui-icon-carat-1-nw { background-position: -112px 0; }
199
- .ui-icon-carat-2-n-s { background-position: -128px 0; }
200
- .ui-icon-carat-2-e-w { background-position: -144px 0; }
201
  .ui-icon-triangle-1-n { background-position: 0 -16px; }
202
  .ui-icon-triangle-1-ne { background-position: -16px -16px; }
203
  .ui-icon-triangle-1-e { background-position: -32px -16px; }
204
  .ui-icon-triangle-1-se { background-position: -48px -16px; }
205
- .ui-icon-triangle-1-s { background-position: -64px -16px; }
206
  .ui-icon-triangle-1-sw { background-position: -80px -16px; }
207
  .ui-icon-triangle-1-w { background-position: -96px -16px; }
208
  .ui-icon-triangle-1-nw { background-position: -112px -16px; }
@@ -212,7 +249,7 @@
212
  .ui-icon-arrow-1-ne { background-position: -16px -32px; }
213
  .ui-icon-arrow-1-e { background-position: -32px -32px; }
214
  .ui-icon-arrow-1-se { background-position: -48px -32px; }
215
- .ui-icon-arrow-1-s { background-position: -64px -32px; }
216
  .ui-icon-arrow-1-sw { background-position: -80px -32px; }
217
  .ui-icon-arrow-1-w { background-position: -96px -32px; }
218
  .ui-icon-arrow-1-nw { background-position: -112px -32px; }
@@ -224,7 +261,7 @@
224
  .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
225
  .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
226
  .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
227
- .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
228
  .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
229
  .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
230
  .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
@@ -396,15 +433,11 @@
396
 
397
  /* Overlays */
398
  .ui-widget-overlay {
399
- background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
400
  opacity: .3;
401
  filter: Alpha(Opacity=30); /* support: IE8 */
402
  }
403
  .ui-widget-shadow {
404
- margin: -8px 0 0 -8px;
405
- padding: 8px;
406
- background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
407
- opacity: .3;
408
- filter: Alpha(Opacity=30); /* support: IE8 */
409
- border-radius: 8px;
410
  }
1
  /*!
2
+ * jQuery UI CSS Framework 1.12.1
3
  * http://jqueryui.com
4
  *
5
  * Copyright jQuery Foundation and other contributors
28
  font-family: Verdana,Arial,sans-serif;
29
  font-size: 1em;
30
  }
31
+ .ui-widget.ui-widget-content {
32
+ border: 1px solid #d3d3d3;
33
+ }
34
  .ui-widget-content {
35
  border: 1px solid #aaaaaa;
36
+ background: #ffffff;
37
  color: #222222;
38
  }
39
  .ui-widget-content a {
53
  ----------------------------------*/
54
  .ui-state-default,
55
  .ui-widget-content .ui-state-default,
56
+ .ui-widget-header .ui-state-default,
57
+ .ui-button,
58
+
59
+ /* We use html here because we need a greater specificity to make sure disabled
60
+ works properly when clicked or hovered */
61
+ html .ui-button.ui-state-disabled:hover,
62
+ html .ui-button.ui-state-disabled:active {
63
  border: 1px solid #d3d3d3;
64
  background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
65
  font-weight: normal;
67
  }
68
  .ui-state-default a,
69
  .ui-state-default a:link,
70
+ .ui-state-default a:visited,
71
+ a.ui-button,
72
+ a:link.ui-button,
73
+ a:visited.ui-button,
74
+ .ui-button {
75
  color: #555555;
76
  text-decoration: none;
77
  }
80
  .ui-widget-header .ui-state-hover,
81
  .ui-state-focus,
82
  .ui-widget-content .ui-state-focus,
83
+ .ui-widget-header .ui-state-focus,
84
+ .ui-button:hover,
85
+ .ui-button:focus {
86
  border: 1px solid #999999;
87
  background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
88
  font-weight: normal;
95
  .ui-state-focus a,
96
  .ui-state-focus a:hover,
97
  .ui-state-focus a:link,
98
+ .ui-state-focus a:visited,
99
+ a.ui-button:hover,
100
+ a.ui-button:focus {
101
  color: #212121;
102
  text-decoration: none;
103
  }
104
+
105
+ .ui-visual-focus {
106
+ box-shadow: 0 0 3px 1px rgb(94, 158, 214);
107
+ }
108
  .ui-state-active,
109
  .ui-widget-content .ui-state-active,
110
+ .ui-widget-header .ui-state-active,
111
+ a.ui-button:active,
112
+ .ui-button:active,
113
+ .ui-button.ui-state-active:hover {
114
  border: 1px solid #aaaaaa;
115
  background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
116
  font-weight: normal;
117
  color: #212121;
118
  }
119
+ .ui-icon-background,
120
+ .ui-state-active .ui-icon-background {
121
+ border: #aaaaaa;
122
+ background-color: #212121;
123
+ }
124
  .ui-state-active a,
125
  .ui-state-active a:link,
126
  .ui-state-active a:visited {
137
  background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
138
  color: #363636;
139
  }
140
+ .ui-state-checked {
141
+ border: 1px solid #fcefa1;
142
+ background: #fbf9ee;
143
+ }
144
  .ui-state-highlight a,
145
  .ui-widget-content .ui-state-highlight a,
146
  .ui-widget-header .ui-state-highlight a {
201
  .ui-widget-header .ui-icon {
202
  background-image: url("images/ui-icons_222222_256x240.png");
203
  }
 
 
 
204
  .ui-state-hover .ui-icon,
205
+ .ui-state-focus .ui-icon,
206
+ .ui-button:hover .ui-icon,
207
+ .ui-button:focus .ui-icon {
208
  background-image: url("images/ui-icons_454545_256x240.png");
209
  }
210
+ .ui-state-active .ui-icon,
211
+ .ui-button:active .ui-icon {
212
  background-image: url("images/ui-icons_454545_256x240.png");
213
  }
214
+ .ui-state-highlight .ui-icon,
215
+ .ui-button .ui-state-highlight.ui-icon {
216
  background-image: url("images/ui-icons_2e83ff_256x240.png");
217
  }
218
  .ui-state-error .ui-icon,
219
  .ui-state-error-text .ui-icon {
220
  background-image: url("images/ui-icons_cd0a0a_256x240.png");
221
  }
222
+ .ui-button .ui-icon {
223
+ background-image: url("images/ui-icons_888888_256x240.png");
224
+ }
225
 
226
  /* positioning */
227
  .ui-icon-blank { background-position: 16px 16px; }
228
+ .ui-icon-caret-1-n { background-position: 0 0; }
229
+ .ui-icon-caret-1-ne { background-position: -16px 0; }
230
+ .ui-icon-caret-1-e { background-position: -32px 0; }
231
+ .ui-icon-caret-1-se { background-position: -48px 0; }
232
+ .ui-icon-caret-1-s { background-position: -65px 0; }
233
+ .ui-icon-caret-1-sw { background-position: -80px 0; }
234
+ .ui-icon-caret-1-w { background-position: -96px 0; }
235
+ .ui-icon-caret-1-nw { background-position: -112px 0; }
236
+ .ui-icon-caret-2-n-s { background-position: -128px 0; }
237
+ .ui-icon-caret-2-e-w { background-position: -144px 0; }
238
  .ui-icon-triangle-1-n { background-position: 0 -16px; }
239
  .ui-icon-triangle-1-ne { background-position: -16px -16px; }
240
  .ui-icon-triangle-1-e { background-position: -32px -16px; }
241
  .ui-icon-triangle-1-se { background-position: -48px -16px; }
242
+ .ui-icon-triangle-1-s { background-position: -65px -16px; }
243
  .ui-icon-triangle-1-sw { background-position: -80px -16px; }
244
  .ui-icon-triangle-1-w { background-position: -96px -16px; }
245
  .ui-icon-triangle-1-nw { background-position: -112px -16px; }
249
  .ui-icon-arrow-1-ne { background-position: -16px -32px; }
250
  .ui-icon-arrow-1-e { background-position: -32px -32px; }
251
  .ui-icon-arrow-1-se { background-position: -48px -32px; }
252
+ .ui-icon-arrow-1-s { background-position: -65px -32px; }
253
  .ui-icon-arrow-1-sw { background-position: -80px -32px; }
254
  .ui-icon-arrow-1-w { background-position: -96px -32px; }
255
  .ui-icon-arrow-1-nw { background-position: -112px -32px; }
261
  .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
262
  .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
263
  .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
264
+ .ui-icon-arrowthick-1-n { background-position: 1px -48px; }
265
  .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
266
  .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
267
  .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
433
 
434
  /* Overlays */
435
  .ui-widget-overlay {
436
+ background: #aaaaaa;
437
  opacity: .3;
438
  filter: Alpha(Opacity=30); /* support: IE8 */
439
  }
440
  .ui-widget-shadow {
441
+ -webkit-box-shadow: -8px -8px 8px #aaaaaa;
442
+ box-shadow: -8px -8px 8px #aaaaaa;
 
 
 
 
443
  }
includes/js/scripts.js DELETED
@@ -1,531 +0,0 @@
1
- ( function( $ ) {
2
-
3
- 'use strict';
4
-
5
- if ( typeof wpcf7 === 'undefined' || wpcf7 === null ) {
6
- return;
7
- }
8
-
9
- wpcf7 = $.extend( {
10
- cached: 0,
11
- inputs: []
12
- }, wpcf7 );
13
-
14
- $( function() {
15
- wpcf7.supportHtml5 = ( function() {
16
- var features = {};
17
- var input = document.createElement( 'input' );
18
-
19
- features.placeholder = 'placeholder' in input;
20
-
21
- var inputTypes = [ 'email', 'url', 'tel', 'number', 'range', 'date' ];
22
-
23
- $.each( inputTypes, function( index, value ) {
24
- input.setAttribute( 'type', value );
25
- features[ value ] = input.type !== 'text';
26
- } );
27
-
28
- return features;
29
- } )();
30
-
31
- $( 'div.wpcf7 > form' ).each( function() {
32
- var $form = $( this );
33
- wpcf7.initForm( $form );
34
-
35
- if ( wpcf7.cached ) {
36
- wpcf7.refill( $form );
37
- }
38
- } );
39
- } );
40
-
41
- wpcf7.getId = function( form ) {
42
- return parseInt( $( 'input[name="_wpcf7"]', form ).val(), 10 );
43
- };
44
-
45
- wpcf7.initForm = function( form ) {
46
- var $form = $( form );
47
-
48
- wpcf7.setStatus( $form, 'init' );
49
-
50
- $form.submit( function( event ) {
51
- if ( ! wpcf7.supportHtml5.placeholder ) {
52
- $( '[placeholder].placeheld', $form ).each( function( i, n ) {
53
- $( n ).val( '' ).removeClass( 'placeheld' );
54
- } );
55
- }
56
-
57
- if ( typeof window.FormData === 'function' ) {
58
- wpcf7.submit( $form );
59
- event.preventDefault();
60
- }
61
- } );
62
-
63
- $( '.wpcf7-submit', $form ).after( '<span class="ajax-loader"></span>' );
64
-
65
- wpcf7.toggleSubmit( $form );
66
-
67
- $form.on( 'click', '.wpcf7-acceptance', function() {
68
- wpcf7.toggleSubmit( $form );
69
- } );
70
-
71
- // Exclusive Checkbox
72
- $( '.wpcf7-exclusive-checkbox', $form ).on( 'click', 'input:checkbox', function() {
73
- var name = $( this ).attr( 'name' );
74
- $form.find( 'input:checkbox[name="' + name + '"]' ).not( this ).prop( 'checked', false );
75
- } );
76
-
77
- // Free Text Option for Checkboxes and Radio Buttons
78
- $( '.wpcf7-list-item.has-free-text', $form ).each( function() {
79
- var $freetext = $( ':input.wpcf7-free-text', this );
80
- var $wrap = $( this ).closest( '.wpcf7-form-control' );
81
-
82
- if ( $( ':checkbox, :radio', this ).is( ':checked' ) ) {
83
- $freetext.prop( 'disabled', false );
84
- } else {
85
- $freetext.prop( 'disabled', true );
86
- }
87
-
88
- $wrap.on( 'change', ':checkbox, :radio', function() {
89
- var $cb = $( '.has-free-text', $wrap ).find( ':checkbox, :radio' );
90
-
91
- if ( $cb.is( ':checked' ) ) {
92
- $freetext.prop( 'disabled', false ).focus();
93
- } else {
94
- $freetext.prop( 'disabled', true );
95
- }
96
- } );
97
- } );
98
-
99
- // Placeholder Fallback
100
- if ( ! wpcf7.supportHtml5.placeholder ) {
101
- $( '[placeholder]', $form ).each( function() {
102
- $( this ).val( $( this ).attr( 'placeholder' ) );
103
- $( this ).addClass( 'placeheld' );
104
-
105
- $( this ).focus( function() {
106
- if ( $( this ).hasClass( 'placeheld' ) ) {
107
- $( this ).val( '' ).removeClass( 'placeheld' );
108
- }
109
- } );
110
-
111
- $( this ).blur( function() {
112
- if ( '' === $( this ).val() ) {
113
- $( this ).val( $( this ).attr( 'placeholder' ) );
114
- $( this ).addClass( 'placeheld' );
115
- }
116
- } );
117
- } );
118
- }
119
-
120
- if ( wpcf7.jqueryUi && ! wpcf7.supportHtml5.date ) {
121
- $form.find( 'input.wpcf7-date[type="date"]' ).each( function() {
122
- $( this ).datepicker( {
123
- dateFormat: 'yy-mm-dd',
124
- minDate: new Date( $( this ).attr( 'min' ) ),
125
- maxDate: new Date( $( this ).attr( 'max' ) )
126
- } );
127
- } );
128
- }
129
-
130
- if ( wpcf7.jqueryUi && ! wpcf7.supportHtml5.number ) {
131
- $form.find( 'input.wpcf7-number[type="number"]' ).each( function() {
132
- $( this ).spinner( {
133
- min: $( this ).attr( 'min' ),
134
- max: $( this ).attr( 'max' ),
135
- step: $( this ).attr( 'step' )
136
- } );
137
- } );
138
- }
139
-
140
- // Character Count
141
- wpcf7.resetCounter( $form );
142
-
143
- // URL Input Correction
144
- $form.on( 'change', '.wpcf7-validates-as-url', function() {
145
- var val = $.trim( $( this ).val() );
146
-
147
- if ( val
148
- && ! val.match( /^[a-z][a-z0-9.+-]*:/i )
149
- && -1 !== val.indexOf( '.' ) ) {
150
- val = val.replace( /^\/+/, '' );
151
- val = 'http://' + val;
152
- }
153
-
154
- $( this ).val( val );
155
- } );
156
- };
157
-
158
- wpcf7.submit = function( form ) {
159
- if ( typeof window.FormData !== 'function' ) {
160
- return;
161
- }
162
-
163
- var $form = $( form );
164
-
165
- $( '.ajax-loader', $form ).addClass( 'is-active' );
166
- wpcf7.clearResponse( $form );
167
-
168
- var formData = new FormData( $form.get( 0 ) );
169
-
170
- var detail = {
171
- id: $form.closest( 'div.wpcf7' ).attr( 'id' ),
172
- status: 'init',
173
- inputs: [],
174
- formData: formData
175
- };
176
-
177
- $.each( $form.serializeArray(), function( i, field ) {
178
- if ( '_wpcf7' == field.name ) {
179
- detail.contactFormId = field.value;
180
- } else if ( '_wpcf7_version' == field.name ) {
181
- detail.pluginVersion = field.value;
182
- } else if ( '_wpcf7_locale' == field.name ) {
183
- detail.contactFormLocale = field.value;
184
- } else if ( '_wpcf7_unit_tag' == field.name ) {
185
- detail.unitTag = field.value;
186
- } else if ( '_wpcf7_container_post' == field.name ) {
187
- detail.containerPostId = field.value;
188
- } else if ( field.name.match( /^_/ ) ) {
189
- // do nothing
190
- } else {
191
- detail.inputs.push( field );
192
- }
193
- } );
194
-
195
- wpcf7.triggerEvent( $form.closest( 'div.wpcf7' ), 'beforesubmit', detail );
196
-
197
- var ajaxSuccess = function( data, status, xhr, $form ) {
198
- detail.id = $( data.into ).attr( 'id' );
199
- detail.status = data.status;
200
- detail.apiResponse = data;
201
-
202
- switch ( data.status ) {
203
- case 'init':
204
- wpcf7.setStatus( $form, 'init' );
205
- break;
206
- case 'validation_failed':
207
- $.each( data.invalid_fields, function( i, n ) {
208
- $( n.into, $form ).each( function() {
209
- wpcf7.notValidTip( this, n.message );
210
- $( '.wpcf7-form-control', this ).addClass( 'wpcf7-not-valid' );
211
- $( '.wpcf7-form-control', this ).attr(
212
- 'aria-describedby',
213
- n.error_id
214
- );
215
- $( '[aria-invalid]', this ).attr( 'aria-invalid', 'true' );
216
- } );
217
- } );
218
-
219
- wpcf7.setStatus( $form, 'invalid' );
220
- wpcf7.triggerEvent( data.into, 'invalid', detail );
221
- break;
222
- case 'acceptance_missing':
223
- wpcf7.setStatus( $form, 'unaccepted' );
224
- wpcf7.triggerEvent( data.into, 'unaccepted', detail );
225
- break;
226
- case 'spam':
227
- wpcf7.setStatus( $form, 'spam' );
228
- wpcf7.triggerEvent( data.into, 'spam', detail );
229
- break;
230
- case 'aborted':
231
- wpcf7.setStatus( $form, 'aborted' );
232
- wpcf7.triggerEvent( data.into, 'aborted', detail );
233
- break;
234
- case 'mail_sent':
235
- wpcf7.setStatus( $form, 'sent' );
236
- wpcf7.triggerEvent( data.into, 'mailsent', detail );
237
- break;
238
- case 'mail_failed':
239
- wpcf7.setStatus( $form, 'failed' );
240
- wpcf7.triggerEvent( data.into, 'mailfailed', detail );
241
- break;
242
- default:
243
- wpcf7.setStatus( $form,
244
- 'custom-' + data.status.replace( /[^0-9a-z]+/i, '-' )
245
- );
246
- }
247
-
248
- wpcf7.refill( $form, data );
249
-
250
- wpcf7.triggerEvent( data.into, 'submit', detail );
251
-
252
- if ( 'mail_sent' == data.status ) {
253
- $form.each( function() {
254
- this.reset();
255
- } );
256
-
257
- wpcf7.toggleSubmit( $form );
258
- wpcf7.resetCounter( $form );
259
- }
260
-
261
- if ( ! wpcf7.supportHtml5.placeholder ) {
262
- $form.find( '[placeholder].placeheld' ).each( function( i, n ) {
263
- $( n ).val( $( n ).attr( 'placeholder' ) );
264
- } );
265
- }
266
-
267
- $( '.wpcf7-response-output', $form )
268
- .html( '' ).append( data.message ).slideDown( 'fast' );
269
-
270
- $( '.screen-reader-response', $form.closest( '.wpcf7' ) ).each( function() {
271
- var $response = $( this );
272
- $( '[role="status"]', $response ).html( data.message );
273
-
274
- if ( data.invalid_fields ) {
275
- $.each( data.invalid_fields, function( i, n ) {
276
- if ( n.idref ) {
277
- var $li = $( '<li></li>' ).append( $( '<a></a>' ).attr( 'href', '#' + n.idref ).append( n.message ) );
278
- } else {
279
- var $li = $( '<li></li>' ).append( n.message );
280
- }
281
-
282
- $li.attr( 'id', n.error_id );
283
-
284
- $( 'ul', $response ).append( $li );
285
- } );
286
- }
287
- } );
288
-
289
- if ( data.posted_data_hash ) {
290
- $form.find( 'input[name="_wpcf7_posted_data_hash"]' ).first()
291
- .val( data.posted_data_hash );
292
- }
293
- };
294
-
295
- $.ajax( {
296
- type: 'POST',
297
- url: wpcf7.apiSettings.getRoute(
298
- '/contact-forms/' + wpcf7.getId( $form ) + '/feedback' ),
299
- data: formData,
300
- dataType: 'json',
301
- processData: false,
302
- contentType: false
303
- } ).done( function( data, status, xhr ) {
304
- ajaxSuccess( data, status, xhr, $form );
305
- $( '.ajax-loader', $form ).removeClass( 'is-active' );
306
- } ).fail( function( xhr, status, error ) {
307
- var $e = $( '<div class="ajax-error"></div>' ).text( error.message );
308
- $form.after( $e );
309
- } );
310
- };
311
-
312
- wpcf7.triggerEvent = function( target, name, detail ) {
313
- var event = new CustomEvent( 'wpcf7' + name, {
314
- bubbles: true,
315
- detail: detail
316
- } );
317
-
318
- $( target ).get( 0 ).dispatchEvent( event );
319
- };
320
-
321
- wpcf7.setStatus = function( form, status ) {
322
- var $form = $( form );
323
- var prevStatus = $form.attr( 'data-status' );
324
-
325
- $form.data( 'status', status );
326
- $form.addClass( status );
327
- $form.attr( 'data-status', status );
328
-
329
- if ( prevStatus && prevStatus !== status ) {
330
- $form.removeClass( prevStatus );
331
- }
332
- }
333
-
334
- wpcf7.toggleSubmit = function( form, state ) {
335
- var $form = $( form );
336
- var $submit = $( 'input:submit', $form );
337
-
338
- if ( typeof state !== 'undefined' ) {
339
- $submit.prop( 'disabled', ! state );
340
- return;
341
- }
342
-
343
- if ( $form.hasClass( 'wpcf7-acceptance-as-validation' ) ) {
344
- return;
345
- }
346
-
347
- $submit.prop( 'disabled', false );
348
-
349
- $( '.wpcf7-acceptance', $form ).each( function() {
350
- var $span = $( this );
351
- var $input = $( 'input:checkbox', $span );
352
-
353
- if ( ! $span.hasClass( 'optional' ) ) {
354
- if ( $span.hasClass( 'invert' ) && $input.is( ':checked' )
355
- || ! $span.hasClass( 'invert' ) && ! $input.is( ':checked' ) ) {
356
- $submit.prop( 'disabled', true );
357
- return false;
358
- }
359
- }
360
- } );
361
- };
362
-
363
- wpcf7.resetCounter = function( form ) {
364
- var $form = $( form );
365
-
366
- $( '.wpcf7-character-count', $form ).each( function() {
367
- var $count = $( this );
368
- var name = $count.attr( 'data-target-name' );
369
- var down = $count.hasClass( 'down' );
370
- var starting = parseInt( $count.attr( 'data-starting-value' ), 10 );
371
- var maximum = parseInt( $count.attr( 'data-maximum-value' ), 10 );
372
- var minimum = parseInt( $count.attr( 'data-minimum-value' ), 10 );
373
-
374
- var updateCount = function( target ) {
375
- var $target = $( target );
376
- var length = $target.val().length;
377
- var count = down ? starting - length : length;
378
- $count.attr( 'data-current-value', count );
379
- $count.text( count );
380
-
381
- if ( maximum && maximum < length ) {
382
- $count.addClass( 'too-long' );
383
- } else {
384
- $count.removeClass( 'too-long' );
385
- }
386
-
387
- if ( minimum && length < minimum ) {
388
- $count.addClass( 'too-short' );
389
- } else {
390
- $count.removeClass( 'too-short' );
391
- }
392
- };
393
-
394
- $( ':input[name="' + name + '"]', $form ).each( function() {
395
- updateCount( this );
396
-
397
- $( this ).keyup( function() {
398
- updateCount( this );
399
- } );
400
- } );
401
- } );
402
- };
403
-
404
- wpcf7.notValidTip = function( target, message ) {
405
- var $target = $( target );
406
- $( '.wpcf7-not-valid-tip', $target ).remove();
407
-
408
- $( '<span></span>' ).attr( {
409
- 'class': 'wpcf7-not-valid-tip',
410
- 'aria-hidden': 'true',
411
- } ).text( message ).appendTo( $target );
412
-
413
- if ( $target.is( '.use-floating-validation-tip *' ) ) {
414
- var fadeOut = function( target ) {
415
- $( target ).not( ':hidden' ).animate( {
416
- opacity: 0
417
- }, 'fast', function() {
418
- $( this ).css( { 'z-index': -100 } );
419
- } );
420
- };
421
-
422
- $target.on( 'mouseover', '.wpcf7-not-valid-tip', function() {
423
- fadeOut( this );
424
- } );
425
-
426
- $target.on( 'focus', ':input', function() {
427
- fadeOut( $( '.wpcf7-not-valid-tip', $target ) );
428
- } );
429
- }
430
- };
431
-
432
- wpcf7.refill = function( form, data ) {
433
- var $form = $( form );
434
-
435
- var refillCaptcha = function( $form, items ) {
436
- $.each( items, function( i, n ) {
437
- $form.find( ':input[name="' + i + '"]' ).val( '' );
438
- $form.find( 'img.wpcf7-captcha-' + i ).attr( 'src', n );
439
- var match = /([0-9]+)\.(png|gif|jpeg)$/.exec( n );
440
- $form.find( 'input:hidden[name="_wpcf7_captcha_challenge_' + i + '"]' ).attr( 'value', match[ 1 ] );
441
- } );
442
- };
443
-
444
- var refillQuiz = function( $form, items ) {
445
- $.each( items, function( i, n ) {
446
- $form.find( ':input[name="' + i + '"]' ).val( '' );
447
- $form.find( ':input[name="' + i + '"]' ).siblings( 'span.wpcf7-quiz-label' ).text( n[ 0 ] );
448
- $form.find( 'input:hidden[name="_wpcf7_quiz_answer_' + i + '"]' ).attr( 'value', n[ 1 ] );
449
- } );
450
- };
451
-
452
- if ( typeof data === 'undefined' ) {
453
- $.ajax( {
454
- type: 'GET',
455
- url: wpcf7.apiSettings.getRoute(
456
- '/contact-forms/' + wpcf7.getId( $form ) + '/refill' ),
457
- beforeSend: function( xhr ) {
458
- var nonce = $form.find( ':input[name="_wpnonce"]' ).val();
459
-
460
- if ( nonce ) {
461
- xhr.setRequestHeader( 'X-WP-Nonce', nonce );
462
- }
463
- },
464
- dataType: 'json'
465
- } ).done( function( data, status, xhr ) {
466
- if ( data.captcha ) {
467
- refillCaptcha( $form, data.captcha );
468
- }
469
-
470
- if ( data.quiz ) {
471
- refillQuiz( $form, data.quiz );
472
- }
473
- } );
474
-
475
- } else {
476
- if ( data.captcha ) {
477
- refillCaptcha( $form, data.captcha );
478
- }
479
-
480
- if ( data.quiz ) {
481
- refillQuiz( $form, data.quiz );
482
- }
483
- }
484
- };
485
-
486
- wpcf7.clearResponse = function( form ) {
487
- var $form = $( form );
488
-
489
- $form.siblings( '.screen-reader-response' ).each( function() {
490
- $( '[role="status"]', this ).html( '' );
491
- $( 'ul', this ).html( '' );
492
- } );
493
-
494
- $( '.wpcf7-not-valid-tip', $form ).remove();
495
- $( '[aria-invalid]', $form ).attr( 'aria-invalid', 'false' );
496
- $( '.wpcf7-form-control', $form ).removeClass( 'wpcf7-not-valid' );
497
-
498
- $( '.wpcf7-response-output', $form ).hide().empty();
499
- };
500
-
501
- wpcf7.apiSettings.getRoute = function( path ) {
502
- var url = wpcf7.apiSettings.root;
503
-
504
- url = url.replace(
505
- wpcf7.apiSettings.namespace,
506
- wpcf7.apiSettings.namespace + path );
507
-
508
- return url;
509
- };
510
-
511
- } )( jQuery );
512
-
513
- /*
514
- * Polyfill for Internet Explorer
515
- * See https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent
516
- */
517
- ( function () {
518
- if ( typeof window.CustomEvent === "function" ) return false;
519
-
520
- function CustomEvent ( event, params ) {
521
- params = params || { bubbles: false, cancelable: false, detail: undefined };
522
- var evt = document.createEvent( 'CustomEvent' );
523
- evt.initCustomEvent( event,
524
- params.bubbles, params.cancelable, params.detail );
525
- return evt;
526
- }
527
-
528
- CustomEvent.prototype = window.Event.prototype;
529
-
530
- window.CustomEvent = CustomEvent;
531
- } )();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/mail.php CHANGED
@@ -158,10 +158,9 @@ class WPCF7_Mail {
158
  if ( $submission = WPCF7_Submission::get_instance() ) {
159
  $uploaded_files = $submission->uploaded_files();
160
 
161
- foreach ( (array) $uploaded_files as $name => $path ) {
162
- if ( false !== strpos( $template, "[${name}]" )
163
- and ! empty( $path ) ) {
164
- $attachments[] = $path;
165
  }
166
  }
167
  }
158
  if ( $submission = WPCF7_Submission::get_instance() ) {
159
  $uploaded_files = $submission->uploaded_files();
160
 
161
+ foreach ( (array) $uploaded_files as $name => $paths ) {
162
+ if ( false !== strpos( $template, "[${name}]" ) ) {
163
+ $attachments = array_merge( $attachments, (array) $paths );
 
164
  }
165
  }
166
  }
includes/submission.php CHANGED
@@ -71,6 +71,11 @@ class WPCF7_Submission {
71
  $this->set_response( $contact_form->message( 'spam' ) );
72
  }
73
 
 
 
 
 
 
74
  if ( $this->is( 'init' ) ) {
75
  $abort = ! $this->before_send_mail();
76
 
@@ -349,10 +354,11 @@ class WPCF7_Submission {
349
  return false;
350
  }
351
 
352
- require_once WPCF7_PLUGIN_DIR . '/includes/validation.php';
353
  $result = new WPCF7_Validation();
354
 
355
- $tags = $this->contact_form->scan_form_tags();
 
 
356
 
357
  foreach ( $tags as $tag ) {
358
  $type = $tag->type;
@@ -493,32 +499,86 @@ class WPCF7_Submission {
493
  return $this->uploaded_files;
494
  }
495
 
496
- public function add_uploaded_file( $name, $file_path ) {
497
  if ( ! wpcf7_is_name( $name ) ) {
498
  return false;
499
  }
500
 
501
- if ( ! @is_file( $file_path ) or ! @is_readable( $file_path ) ) {
502
- return false;
 
 
 
 
 
 
 
503
  }
504
 
505
- $this->uploaded_files[$name] = $file_path;
506
 
507
  if ( empty( $this->posted_data[$name] ) ) {
508
- $this->posted_data[$name] = md5_file( $file_path );
509
  }
510
  }
511
 
512
- public function remove_uploaded_files() {
513
- foreach ( (array) $this->uploaded_files as $name => $path ) {
514
- wpcf7_rmdir_p( $path );
515
 
516
- if ( $dir = dirname( $path )
517
- and false !== ( $files = scandir( $dir ) )
518
- and ! array_diff( $files, array( '.', '..' ) ) ) {
519
- // remove parent dir if it's empty.
520
- rmdir( $dir );
 
 
 
 
521
  }
522
  }
523
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
524
  }
71
  $this->set_response( $contact_form->message( 'spam' ) );
72
  }
73
 
74
+ if ( $this->is( 'init' ) and ! $this->unship_uploaded_files() ) {
75
+ $this->set_status( 'validation_failed' );
76
+ $this->set_response( $contact_form->message( 'validation_error' ) );
77
+ }
78
+
79
  if ( $this->is( 'init' ) ) {
80
  $abort = ! $this->before_send_mail();
81
 
354
  return false;
355
  }
356
 
 
357
  $result = new WPCF7_Validation();
358
 
359
+ $tags = $this->contact_form->scan_form_tags( array(
360
+ 'feature' => '! file-uploading',
361
+ ) );
362
 
363
  foreach ( $tags as $tag ) {
364
  $type = $tag->type;
499
  return $this->uploaded_files;
500
  }
501
 
502
+ private function add_uploaded_file( $name, $file_path ) {
503
  if ( ! wpcf7_is_name( $name ) ) {
504
  return false;
505
  }
506
 
507
+ $paths = (array) $file_path;
508
+ $uploaded_files = array();
509
+ $hash_strings = array();
510
+
511
+ foreach ( $paths as $path ) {
512
+ if ( @is_file( $path ) and @is_readable( $path ) ) {
513
+ $uploaded_files[] = $path;
514
+ $hash_strings[] = md5_file( $path );
515
+ }
516
  }
517
 
518
+ $this->uploaded_files[$name] = $uploaded_files;
519
 
520
  if ( empty( $this->posted_data[$name] ) ) {
521
+ $this->posted_data[$name] = implode( ' ', $hash_strings );
522
  }
523
  }
524
 
525
+ private function remove_uploaded_files() {
526
+ foreach ( (array) $this->uploaded_files as $file_path ) {
527
+ $paths = (array) $file_path;
528
 
529
+ foreach ( $paths as $path ) {
530
+ wpcf7_rmdir_p( $path );
531
+
532
+ if ( $dir = dirname( $path )
533
+ and false !== ( $files = scandir( $dir ) )
534
+ and ! array_diff( $files, array( '.', '..' ) ) ) {
535
+ // remove parent dir if it's empty.
536
+ rmdir( $dir );
537
+ }
538
  }
539
  }
540
  }
541
+
542
+ private function unship_uploaded_files() {
543
+ $result = new WPCF7_Validation();
544
+
545
+ $tags = $this->contact_form->scan_form_tags( array(
546
+ 'feature' => 'file-uploading',
547
+ ) );
548
+
549
+ foreach ( $tags as $tag ) {
550
+ if ( empty( $_FILES[$tag->name] ) ) {
551
+ continue;
552
+ }
553
+
554
+ $file = $_FILES[$tag->name];
555
+
556
+ $args = array(
557
+ 'tag' => $tag,
558
+ 'name' => $tag->name,
559
+ 'required' => $tag->is_required(),
560
+ 'filetypes' => $tag->get_option( 'filetypes' ),
561
+ 'limit' => $tag->get_limit_option(),
562
+ );
563
+
564
+ $new_files = wpcf7_unship_uploaded_file( $file, $args );
565
+
566
+ if ( ! is_wp_error( $new_files ) ) {
567
+ $this->add_uploaded_file( $tag->name, $new_files );
568
+ }
569
+
570
+ $result = apply_filters(
571
+ "wpcf7_validate_{$tag->type}",
572
+ $result, $tag,
573
+ array(
574
+ 'uploaded_files' => $new_files,
575
+ )
576
+ );
577
+ }
578
+
579
+ $this->invalid_fields = $result->get_invalid_fields();
580
+
581
+ return $result->is_valid();
582
+ }
583
+
584
  }
includes/validation-functions.php ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Checks whether a string is a valid NAME token.
5
+ *
6
+ * ID and NAME tokens must begin with a letter ([A-Za-z])
7
+ * and may be followed by any number of letters, digits ([0-9]),
8
+ * hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
9
+ *
10
+ * @see http://www.w3.org/TR/html401/types.html#h-6.2
11
+ *
12
+ * @return bool True if it is a valid name, false if not.
13
+ */
14
+ function wpcf7_is_name( $string ) {
15
+ return preg_match( '/^[A-Za-z][-A-Za-z0-9_:.]*$/', $string );
16
+ }
17
+
18
+ function wpcf7_is_email( $email ) {
19
+ $result = is_email( $email );
20
+ return apply_filters( 'wpcf7_is_email', $result, $email );
21
+ }
22
+
23
+ function wpcf7_is_url( $url ) {
24
+ $result = ( false !== filter_var( $url, FILTER_VALIDATE_URL ) );
25
+ return apply_filters( 'wpcf7_is_url', $result, $url );
26
+ }
27
+
28
+ function wpcf7_is_tel( $tel ) {
29
+ $pattern = '%^[+]?' // + sign
30
+ . '(?:\([0-9]+\)|[0-9]+)' // (1234) or 1234
31
+ . '(?:[/ -]*' // delimiter
32
+ . '(?:\([0-9]+\)|[0-9]+)' // (1234) or 1234
33
+ . ')*$%';
34
+
35
+ $result = preg_match( $pattern, trim( $tel ) );
36
+ return apply_filters( 'wpcf7_is_tel', $result, $tel );
37
+ }
38
+
39
+ function wpcf7_is_number( $number ) {
40
+ $result = is_numeric( $number );
41
+ return apply_filters( 'wpcf7_is_number', $result, $number );
42
+ }
43
+
44
+ function wpcf7_is_date( $date ) {
45
+ $result = preg_match( '/^([0-9]{4,})-([0-9]{2})-([0-9]{2})$/', $date, $matches );
46
+
47
+ if ( $result ) {
48
+ $result = checkdate( $matches[2], $matches[3], $matches[1] );
49
+ }
50
+
51
+ return apply_filters( 'wpcf7_is_date', $result, $date );
52
+ }
53
+
54
+ function wpcf7_is_mailbox_list( $mailbox_list ) {
55
+ if ( ! is_array( $mailbox_list ) ) {
56
+ $mailbox_text = (string) $mailbox_list;
57
+ $mailbox_text = wp_unslash( $mailbox_text );
58
+
59
+ $mailbox_text = preg_replace( '/\\\\(?:\"|\')/', 'esc-quote',
60
+ $mailbox_text );
61
+
62
+ $mailbox_text = preg_replace( '/(?:\".*?\"|\'.*?\')/', 'quoted-string',
63
+ $mailbox_text );
64
+
65
+ $mailbox_list = explode( ',', $mailbox_text );
66
+ }
67
+
68
+ $addresses = array();
69
+
70
+ foreach ( $mailbox_list as $mailbox ) {
71
+ if ( ! is_string( $mailbox ) ) {
72
+ return false;
73
+ }
74
+
75
+ $mailbox = trim( $mailbox );
76
+
77
+ if ( preg_match( '/<(.+)>$/', $mailbox, $matches ) ) {
78
+ $addr_spec = $matches[1];
79
+ } else {
80
+ $addr_spec = $mailbox;
81
+ }
82
+
83
+ if ( ! wpcf7_is_email( $addr_spec ) ) {
84
+ return false;
85
+ }
86
+
87
+ $addresses[] = $addr_spec;
88
+ }
89
+
90
+ return $addresses;
91
+ }
92
+
93
+ function wpcf7_is_email_in_domain( $email, $domain ) {
94
+ $email_list = wpcf7_is_mailbox_list( $email );
95
+ $domain = strtolower( $domain );
96
+
97
+ foreach ( $email_list as $email ) {
98
+ $email_domain = substr( $email, strrpos( $email, '@' ) + 1 );
99
+ $email_domain = strtolower( $email_domain );
100
+ $domain_parts = explode( '.', $domain );
101
+
102
+ do {
103
+ $site_domain = implode( '.', $domain_parts );
104
+
105
+ if ( $site_domain == $email_domain ) {
106
+ continue 2;
107
+ }
108
+
109
+ array_shift( $domain_parts );
110
+ } while ( $domain_parts );
111
+
112
+ return false;
113
+ }
114
+
115
+ return true;
116
+ }
117
+
118
+ function wpcf7_is_email_in_site_domain( $email ) {
119
+ if ( wpcf7_is_localhost() ) {
120
+ return true;
121
+ }
122
+
123
+ $site_domain = strtolower( $_SERVER['SERVER_NAME'] );
124
+
125
+ if ( preg_match( '/^[0-9.]+$/', $site_domain ) ) { // 123.456.789.012
126
+ return true;
127
+ }
128
+
129
+ if ( wpcf7_is_email_in_domain( $email, $site_domain ) ) {
130
+ return true;
131
+ }
132
+
133
+ $home_url = home_url();
134
+
135
+ // for interoperability with WordPress MU Domain Mapping plugin
136
+ if ( is_multisite()
137
+ and function_exists( 'domain_mapping_siteurl' ) ) {
138
+ $domain_mapping_siteurl = domain_mapping_siteurl( false );
139
+
140
+ if ( $domain_mapping_siteurl ) {
141
+ $home_url = $domain_mapping_siteurl;
142
+ }
143
+ }
144
+
145
+ if ( preg_match( '%^https?://([^/]+)%', $home_url, $matches ) ) {
146
+ $site_domain = strtolower( $matches[1] );
147
+
148
+ if ( $site_domain != strtolower( $_SERVER['SERVER_NAME'] )
149
+ and wpcf7_is_email_in_domain( $email, $site_domain ) ) {
150
+ return true;
151
+ }
152
+ }
153
+
154
+ return false;
155
+ }
156
+
157
+ function wpcf7_is_file_path_in_content_dir( $path ) {
158
+ if ( 0 === strpos( realpath( $path ), realpath( WP_CONTENT_DIR ) ) ) {
159
+ return true;
160
+ }
161
+
162
+ if ( defined( 'UPLOADS' )
163
+ and 0 === strpos( realpath( $path ), realpath( ABSPATH . UPLOADS ) ) ) {
164
+ return true;
165
+ }
166
+
167
+ return false;
168
+ }
license.txt CHANGED
@@ -1,366 +1,365 @@
1
- Contact Form 7 WordPress Plugin, 2007-2020 Takayuki Miyoshi
2
- Contact Form 7 is distributed under the terms of the GNU GPL
3
-
4
- This program is free software; you can redistribute it and/or modify
5
- it under the terms of the GNU General Public License as published by
6
- the Free Software Foundation; either version 2 of the License, or
7
- (at your option) any later version.
8
-
9
- This program is distributed in the hope that it will be useful,
10
- but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- GNU General Public License for more details.
13
-
14
- You should have received a copy of the GNU General Public License
15
- along with this program; if not, write to the Free Software
16
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
-
18
-
19
- Contact Form 7 WordPress Plugin bundles the following third-party resources:
20
-
21
- The official icon designed by Cheung Vong
22
- https://contactform7.com/2020/04/08/new-official-logo/
23
-
24
-
25
-
26
- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
27
-
28
- GNU GENERAL PUBLIC LICENSE
29
- Version 2, June 1991
30
-
31
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
32
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33
- Everyone is permitted to copy and distribute verbatim copies
34
- of this license document, but changing it is not allowed.
35
-
36
- Preamble
37
-
38
- The licenses for most software are designed to take away your
39
- freedom to share and change it. By contrast, the GNU General Public
40
- License is intended to guarantee your freedom to share and change free
41
- software--to make sure the software is free for all its users. This
42
- General Public License applies to most of the Free Software
43
- Foundation's software and to any other program whose authors commit to
44
- using it. (Some other Free Software Foundation software is covered by
45
- the GNU Lesser General Public License instead.) You can apply it to
46
- your programs, too.
47
-
48
- When we speak of free software, we are referring to freedom, not
49
- price. Our General Public Licenses are designed to make sure that you
50
- have the freedom to distribute copies of free software (and charge for
51
- this service if you wish), that you receive source code or can get it
52
- if you want it, that you can change the software or use pieces of it
53
- in new free programs; and that you know you can do these things.
54
-
55
- To protect your rights, we need to make restrictions that forbid
56
- anyone to deny you these rights or to ask you to surrender the rights.
57
- These restrictions translate to certain responsibilities for you if you
58
- distribute copies of the software, or if you modify it.
59
-
60
- For example, if you distribute copies of such a program, whether
61
- gratis or for a fee, you must give the recipients all the rights that
62
- you have. You must make sure that they, too, receive or can get the
63
- source code. And you must show them these terms so they know their
64
- rights.
65
-
66
- We protect your rights with two steps: (1) copyright the software, and
67
- (2) offer you this license which gives you legal permission to copy,
68
- distribute and/or modify the software.
69
-
70
- Also, for each author's protection and ours, we want to make certain
71
- that everyone understands that there is no warranty for this free
72
- software. If the software is modified by someone else and passed on, we
73
- want its recipients to know that what they have is not the original, so
74
- that any problems introduced by others will not reflect on the original
75
- authors' reputations.
76
-
77
- Finally, any free program is threatened constantly by software
78
- patents. We wish to avoid the danger that redistributors of a free
79
- program will individually obtain patent licenses, in effect making the
80
- program proprietary. To prevent this, we have made it clear that any
81
- patent must be licensed for everyone's free use or not licensed at all.
82
-
83
- The precise terms and conditions for copying, distribution and
84
- modification follow.
85
-
86
- GNU GENERAL PUBLIC LICENSE
87
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
88
-
89
- 0. This License applies to any program or other work which contains
90
- a notice placed by the copyright holder saying it may be distributed
91
- under the terms of this General Public License. The "Program", below,
92
- refers to any such program or work, and a "work based on the Program"
93
- means either the Program or any derivative work under copyright law:
94
- that is to say, a work containing the Program or a portion of it,
95
- either verbatim or with modifications and/or translated into another
96
- language. (Hereinafter, translation is included without limitation in
97
- the term "modification".) Each licensee is addressed as "you".
98
-
99
- Activities other than copying, distribution and modification are not
100
- covered by this License; they are outside its scope. The act of
101
- running the Program is not restricted, and the output from the Program
102
- is covered only if its contents constitute a work based on the
103
- Program (independent of having been made by running the Program).
104
- Whether that is true depends on what the Program does.
105
-
106
- 1. You may copy and distribute verbatim copies of the Program's
107
- source code as you receive it, in any medium, provided that you
108
- conspicuously and appropriately publish on each copy an appropriate
109
- copyright notice and disclaimer of warranty; keep intact all the
110
- notices that refer to this License and to the absence of any warranty;
111
- and give any other recipients of the Program a copy of this License
112
- along with the Program.
113
-
114
- You may charge a fee for the physical act of transferring a copy, and
115
- you may at your option offer warranty protection in exchange for a fee.
116
-
117
- 2. You may modify your copy or copies of the Program or any portion
118
- of it, thus forming a work based on the Program, and copy and
119
- distribute such modifications or work under the terms of Section 1
120
- above, provided that you also meet all of these conditions:
121
-
122
- a) You must cause the modified files to carry prominent notices
123
- stating that you changed the files and the date of any change.
124
-
125
- b) You must cause any work that you distribute or publish, that in
126
- whole or in part contains or is derived from the Program or any
127
- part thereof, to be licensed as a whole at no charge to all third
128
- parties under the terms of this License.
129
-
130
- c) If the modified program normally reads commands interactively
131
- when run, you must cause it, when started running for such
132
- interactive use in the most ordinary way, to print or display an
133
- announcement including an appropriate copyright notice and a
134
- notice that there is no warranty (or else, saying that you provide
135
- a warranty) and that users may redistribute the program under
136
- these conditions, and telling the user how to view a copy of this
137
- License. (Exception: if the Program itself is interactive but
138
- does not normally print such an announcement, your work based on
139
- the Program is not required to print an announcement.)
140
-
141
- These requirements apply to the modified work as a whole. If
142
- identifiable sections of that work are not derived from the Program,
143
- and can be reasonably considered independent and separate works in
144
- themselves, then this License, and its terms, do not apply to those
145
- sections when you distribute them as separate works. But when you
146
- distribute the same sections as part of a whole which is a work based
147
- on the Program, the distribution of the whole must be on the terms of
148
- this License, whose permissions for other licensees extend to the
149
- entire whole, and thus to each and every part regardless of who wrote it.
150
-
151
- Thus, it is not the intent of this section to claim rights or contest
152
- your rights to work written entirely by you; rather, the intent is to
153
- exercise the right to control the distribution of derivative or
154
- collective works based on the Program.
155
-
156
- In addition, mere aggregation of another work not based on the Program
157
- with the Program (or with a work based on the Program) on a volume of
158
- a storage or distribution medium does not bring the other work under
159
- the scope of this License.
160
-
161
- 3. You may copy and distribute the Program (or a work based on it,
162
- under Section 2) in object code or executable form under the terms of
163
- Sections 1 and 2 above provided that you also do one of the following:
164
-
165
- a) Accompany it with the complete corresponding machine-readable
166
- source code, which must be distributed under the terms of Sections
167
- 1 and 2 above on a medium customarily used for software interchange; or,
168
-
169
- b) Accompany it with a written offer, valid for at least three
170
- years, to give any third party, for a charge no more than your
171
- cost of physically performing source distribution, a complete
172
- machine-readable copy of the corresponding source code, to be
173
- distributed under the terms of Sections 1 and 2 above on a medium
174
- customarily used for software interchange; or,
175
-
176
- c) Accompany it with the information you received as to the offer
177
- to distribute corresponding source code. (This alternative is
178
- allowed only for noncommercial distribution and only if you
179
- received the program in object code or executable form with such
180
- an offer, in accord with Subsection b above.)
181
-
182
- The source code for a work means the preferred form of the work for
183
- making modifications to it. For an executable work, complete source
184
- code means all the source code for all modules it contains, plus any
185
- associated interface definition files, plus the scripts used to
186
- control compilation and installation of the executable. However, as a
187
- special exception, the source code distributed need not include
188
- anything that is normally distributed (in either source or binary
189
- form) with the major components (compiler, kernel, and so on) of the
190
- operating system on which the executable runs, unless that component
191
- itself accompanies the executable.
192
-
193
- If distribution of executable or object code is made by offering
194
- access to copy from a designated place, then offering equivalent
195
- access to copy the source code from the same place counts as
196
- distribution of the source code, even though third parties are not
197
- compelled to copy the source along with the object code.
198
-
199
- 4. You may not copy, modify, sublicense, or distribute the Program
200
- except as expressly provided under this License. Any attempt
201
- otherwise to copy, modify, sublicense or distribute the Program is
202
- void, and will automatically terminate your rights under this License.
203
- However, parties who have received copies, or rights, from you under
204
- this License will not have their licenses terminated so long as such
205
- parties remain in full compliance.
206
-
207
- 5. You are not required to accept this License, since you have not
208
- signed it. However, nothing else grants you permission to modify or
209
- distribute the Program or its derivative works. These actions are
210
- prohibited by law if you do not accept this License. Therefore, by
211
- modifying or distributing the Program (or any work based on the
212
- Program), you indicate your acceptance of this License to do so, and
213
- all its terms and conditions for copying, distributing or modifying
214
- the Program or works based on it.
215
-
216
- 6. Each time you redistribute the Program (or any work based on the
217
- Program), the recipient automatically receives a license from the
218
- original licensor to copy, distribute or modify the Program subject to
219
- these terms and conditions. You may not impose any further
220
- restrictions on the recipients' exercise of the rights granted herein.
221
- You are not responsible for enforcing compliance by third parties to
222
- this License.
223
-
224
- 7. If, as a consequence of a court judgment or allegation of patent
225
- infringement or for any other reason (not limited to patent issues),
226
- conditions are imposed on you (whether by court order, agreement or
227
- otherwise) that contradict the conditions of this License, they do not
228
- excuse you from the conditions of this License. If you cannot
229
- distribute so as to satisfy simultaneously your obligations under this
230
- License and any other pertinent obligations, then as a consequence you
231
- may not distribute the Program at all. For example, if a patent
232
- license would not permit royalty-free redistribution of the Program by
233
- all those who receive copies directly or indirectly through you, then
234
- the only way you could satisfy both it and this License would be to
235
- refrain entirely from distribution of the Program.
236
-
237
- If any portion of this section is held invalid or unenforceable under
238
- any particular circumstance, the balance of the section is intended to
239
- apply and the section as a whole is intended to apply in other
240
- circumstances.
241
-
242
- It is not the purpose of this section to induce you to infringe any
243
- patents or other property right claims or to contest validity of any
244
- such claims; this section has the sole purpose of protecting the
245
- integrity of the free software distribution system, which is
246
- implemented by public license practices. Many people have made
247
- generous contributions to the wide range of software distributed
248
- through that system in reliance on consistent application of that
249
- system; it is up to the author/donor to decide if he or she is willing
250
- to distribute software through any other system and a licensee cannot
251
- impose that choice.
252
-
253
- This section is intended to make thoroughly clear what is believed to
254
- be a consequence of the rest of this License.
255
-
256
- 8. If the distribution and/or use of the Program is restricted in
257
- certain countries either by patents or by copyrighted interfaces, the
258
- original copyright holder who places the Program under this License
259
- may add an explicit geographical distribution limitation excluding
260
- those countries, so that distribution is permitted only in or among
261
- countries not thus excluded. In such case, this License incorporates
262
- the limitation as if written in the body of this License.
263
-
264
- 9. The Free Software Foundation may publish revised and/or new versions
265
- of the General Public License from time to time. Such new versions will
266
- be similar in spirit to the present version, but may differ in detail to
267
- address new problems or concerns.
268
-
269
- Each version is given a distinguishing version number. If the Program
270
- specifies a version number of this License which applies to it and "any
271
- later version", you have the option of following the terms and conditions
272
- either of that version or of any later version published by the Free
273
- Software Foundation. If the Program does not specify a version number of
274
- this License, you may choose any version ever published by the Free Software
275
- Foundation.
276
-
277
- 10. If you wish to incorporate parts of the Program into other free
278
- programs whose distribution conditions are different, write to the author
279
- to ask for permission. For software which is copyrighted by the Free
280
- Software Foundation, write to the Free Software Foundation; we sometimes
281
- make exceptions for this. Our decision will be guided by the two goals
282
- of preserving the free status of all derivatives of our free software and
283
- of promoting the sharing and reuse of software generally.
284
-
285
- NO WARRANTY
286
-
287
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
288
- FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
289
- OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
290
- PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
291
- OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
292
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
293
- TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
294
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
295
- REPAIR OR CORRECTION.
296
-
297
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
298
- WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
299
- REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
300
- INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
301
- OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
302
- TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
303
- YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
304
- PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
305
- POSSIBILITY OF SUCH DAMAGES.
306
-
307
- END OF TERMS AND CONDITIONS
308
-
309
- How to Apply These Terms to Your New Programs
310
-
311
- If you develop a new program, and you want it to be of the greatest
312
- possible use to the public, the best way to achieve this is to make it
313
- free software which everyone can redistribute and change under these terms.
314
-
315
- To do so, attach the following notices to the program. It is safest
316
- to attach them to the start of each source file to most effectively
317
- convey the exclusion of warranty; and each file should have at least
318
- the "copyright" line and a pointer to where the full notice is found.
319
-
320
- <one line to give the program's name and a brief idea of what it does.>
321
- Copyright (C) <year> <name of author>
322
-
323
- This program is free software; you can redistribute it and/or modify
324
- it under the terms of the GNU General Public License as published by
325
- the Free Software Foundation; either version 2 of the License, or
326
- (at your option) any later version.
327
-
328
- This program is distributed in the hope that it will be useful,
329
- but WITHOUT ANY WARRANTY; without even the implied warranty of
330
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
331
- GNU General Public License for more details.
332
-
333
- You should have received a copy of the GNU General Public License along
334
- with this program; if not, write to the Free Software Foundation, Inc.,
335
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
336
-
337
- Also add information on how to contact you by electronic and paper mail.
338
-
339
- If the program is interactive, make it output a short notice like this
340
- when it starts in an interactive mode:
341
-
342
- Gnomovision version 69, Copyright (C) year name of author
343
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
344
- This is free software, and you are welcome to redistribute it
345
- under certain conditions; type `show c' for details.
346
-
347
- The hypothetical commands `show w' and `show c' should show the appropriate
348
- parts of the General Public License. Of course, the commands you use may
349
- be called something other than `show w' and `show c'; they could even be
350
- mouse-clicks or menu items--whatever suits your program.
351
-
352
- You should also get your employer (if you work as a programmer) or your
353
- school, if any, to sign a "copyright disclaimer" for the program, if
354
- necessary. Here is a sample; alter the names:
355
-
356
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
357
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
358
-
359
- <signature of Ty Coon>, 1 April 1989
360
- Ty Coon, President of Vice
361
-
362
- This General Public License does not permit incorporating your program into
363
- proprietary programs. If your program is a subroutine library, you may
364
- consider it more useful to permit linking proprietary applications with the
365
- library. If this is what you want to do, use the GNU Lesser General
366
- Public License instead of this License.
1
+ Contact Form 7 WordPress Plugin, 2007-2021 Takayuki Miyoshi
2
+ Contact Form 7 is distributed under the terms of the GNU GPL
3
+
4
+ This program is free software; you can redistribute it and/or modify
5
+ it under the terms of the GNU General Public License as published by
6
+ the Free Software Foundation; either version 2 of the License, or
7
+ (at your option) any later version.
8
+
9
+ This program is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License
15
+ along with this program; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+
19
+ Contact Form 7 WordPress Plugin bundles the following third-party resources:
20
+
21
+ The official icon designed by Cheung Vong
22
+ https://contactform7.com/2020/04/08/new-official-logo/
23
+
24
+
25
+ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
26
+
27
+ GNU GENERAL PUBLIC LICENSE
28
+ Version 2, June 1991
29
+
30
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
31
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
32
+ Everyone is permitted to copy and distribute verbatim copies
33
+ of this license document, but changing it is not allowed.
34
+
35
+ Preamble
36
+
37
+ The licenses for most software are designed to take away your
38
+ freedom to share and change it. By contrast, the GNU General Public
39
+ License is intended to guarantee your freedom to share and change free
40
+ software--to make sure the software is free for all its users. This
41
+ General Public License applies to most of the Free Software
42
+ Foundation's software and to any other program whose authors commit to
43
+ using it. (Some other Free Software Foundation software is covered by
44
+ the GNU Lesser General Public License instead.) You can apply it to
45
+ your programs, too.
46
+
47
+ When we speak of free software, we are referring to freedom, not
48
+ price. Our General Public Licenses are designed to make sure that you
49
+ have the freedom to distribute copies of free software (and charge for
50
+ this service if you wish), that you receive source code or can get it
51
+ if you want it, that you can change the software or use pieces of it
52
+ in new free programs; and that you know you can do these things.
53
+
54
+ To protect your rights, we need to make restrictions that forbid
55
+ anyone to deny you these rights or to ask you to surrender the rights.
56
+ These restrictions translate to certain responsibilities for you if you
57
+ distribute copies of the software, or if you modify it.
58
+
59
+ For example, if you distribute copies of such a program, whether
60
+ gratis or for a fee, you must give the recipients all the rights that
61
+ you have. You must make sure that they, too, receive or can get the
62
+ source code. And you must show them these terms so they know their
63
+ rights.
64
+
65
+ We protect your rights with two steps: (1) copyright the software, and
66
+ (2) offer you this license which gives you legal permission to copy,
67
+ distribute and/or modify the software.
68
+
69
+ Also, for each author's protection and ours, we want to make certain
70
+ that everyone understands that there is no warranty for this free
71
+ software. If the software is modified by someone else and passed on, we
72
+ want its recipients to know that what they have is not the original, so
73
+ that any problems introduced by others will not reflect on the original
74
+ authors' reputations.
75
+
76
+ Finally, any free program is threatened constantly by software
77
+ patents. We wish to avoid the danger that redistributors of a free
78
+ program will individually obtain patent licenses, in effect making the
79
+ program proprietary. To prevent this, we have made it clear that any
80
+ patent must be licensed for everyone's free use or not licensed at all.
81
+
82
+ The precise terms and conditions for copying, distribution and
83
+ modification follow.
84
+
85
+ GNU GENERAL PUBLIC LICENSE
86
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
87
+
88
+ 0. This License applies to any program or other work which contains
89
+ a notice placed by the copyright holder saying it may be distributed
90
+ under the terms of this General Public License. The "Program", below,
91
+ refers to any such program or work, and a "work based on the Program"
92
+ means either the Program or any derivative work under copyright law:
93
+ that is to say, a work containing the Program or a portion of it,
94
+ either verbatim or with modifications and/or translated into another
95
+ language. (Hereinafter, translation is included without limitation in
96
+ the term "modification".) Each licensee is addressed as "you".
97
+
98
+ Activities other than copying, distribution and modification are not
99
+ covered by this License; they are outside its scope. The act of
100
+ running the Program is not restricted, and the output from the Program
101
+ is covered only if its contents constitute a work based on the
102
+ Program (independent of having been made by running the Program).
103
+ Whether that is true depends on what the Program does.
104
+
105
+ 1. You may copy and distribute verbatim copies of the Program's
106
+ source code as you receive it, in any medium, provided that you
107
+ conspicuously and appropriately publish on each copy an appropriate
108
+ copyright notice and disclaimer of warranty; keep intact all the
109
+ notices that refer to this License and to the absence of any warranty;
110
+ and give any other recipients of the Program a copy of this License
111
+ along with the Program.
112
+
113
+ You may charge a fee for the physical act of transferring a copy, and
114
+ you may at your option offer warranty protection in exchange for a fee.
115
+
116
+ 2. You may modify your copy or copies of the Program or any portion
117
+ of it, thus forming a work based on the Program, and copy and
118
+ distribute such modifications or work under the terms of Section 1
119
+ above, provided that you also meet all of these conditions:
120
+
121
+ a) You must cause the modified files to carry prominent notices
122
+ stating that you changed the files and the date of any change.
123
+
124
+ b) You must cause any work that you distribute or publish, that in
125
+ whole or in part contains or is derived from the Program or any
126
+ part thereof, to be licensed as a whole at no charge to all third
127
+ parties under the terms of this License.
128
+
129
+ c) If the modified program normally reads commands interactively
130
+ when run, you must cause it, when started running for such
131
+ interactive use in the most ordinary way, to print or display an
132
+ announcement including an appropriate copyright notice and a
133
+ notice that there is no warranty (or else, saying that you provide
134
+ a warranty) and that users may redistribute the program under
135
+ these conditions, and telling the user how to view a copy of this
136
+ License. (Exception: if the Program itself is interactive but
137
+ does not normally print such an announcement, your work based on
138
+ the Program is not required to print an announcement.)
139
+
140
+ These requirements apply to the modified work as a whole. If
141
+ identifiable sections of that work are not derived from the Program,
142
+ and can be reasonably considered independent and separate works in
143
+ themselves, then this License, and its terms, do not apply to those
144
+ sections when you distribute them as separate works. But when you
145
+ distribute the same sections as part of a whole which is a work based
146
+ on the Program, the distribution of the whole must be on the terms of
147
+ this License, whose permissions for other licensees extend to the
148
+ entire whole, and thus to each and every part regardless of who wrote it.
149
+
150
+ Thus, it is not the intent of this section to claim rights or contest
151
+ your rights to work written entirely by you; rather, the intent is to
152
+ exercise the right to control the distribution of derivative or
153
+ collective works based on the Program.
154
+
155
+ In addition, mere aggregation of another work not based on the Program
156
+ with the Program (or with a work based on the Program) on a volume of
157
+ a storage or distribution medium does not bring the other work under
158
+ the scope of this License.
159
+
160
+ 3. You may copy and distribute the Program (or a work based on it,
161
+ under Section 2) in object code or executable form under the terms of
162
+ Sections 1 and 2 above provided that you also do one of the following:
163
+
164
+ a) Accompany it with the complete corresponding machine-readable
165
+ source code, which must be distributed under the terms of Sections
166
+ 1 and 2 above on a medium customarily used for software interchange; or,
167
+
168
+ b) Accompany it with a written offer, valid for at least three
169
+ years, to give any third party, for a charge no more than your
170
+ cost of physically performing source distribution, a complete
171
+ machine-readable copy of the corresponding source code, to be
172
+ distributed under the terms of Sections 1 and 2 above on a medium
173
+ customarily used for software interchange; or,
174
+
175
+ c) Accompany it with the information you received as to the offer
176
+ to distribute corresponding source code. (This alternative is
177
+ allowed only for noncommercial distribution and only if you
178
+ received the program in object code or executable form with such
179
+ an offer, in accord with Subsection b above.)
180
+
181
+ The source code for a work means the preferred form of the work for
182
+ making modifications to it. For an executable work, complete source
183
+ code means all the source code for all modules it contains, plus any
184
+ associated interface definition files, plus the scripts used to
185
+ control compilation and installation of the executable. However, as a
186
+ special exception, the source code distributed need not include
187
+ anything that is normally distributed (in either source or binary
188
+ form) with the major components (compiler, kernel, and so on) of the
189
+ operating system on which the executable runs, unless that component
190
+ itself accompanies the executable.
191
+
192
+ If distribution of executable or object code is made by offering
193
+ access to copy from a designated place, then offering equivalent
194
+ access to copy the source code from the same place counts as
195
+ distribution of the source code, even though third parties are not
196
+ compelled to copy the source along with the object code.
197
+
198
+ 4. You may not copy, modify, sublicense, or distribute the Program
199
+ except as expressly provided under this License. Any attempt
200
+ otherwise to copy, modify, sublicense or distribute the Program is
201
+ void, and will automatically terminate your rights under this License.
202
+ However, parties who have received copies, or rights, from you under
203
+ this License will not have their licenses terminated so long as such
204
+ parties remain in full compliance.
205
+
206
+ 5. You are not required to accept this License, since you have not
207
+ signed it. However, nothing else grants you permission to modify or
208
+ distribute the Program or its derivative works. These actions are
209
+ prohibited by law if you do not accept this License. Therefore, by
210
+ modifying or distributing the Program (or any work based on the
211
+ Program), you indicate your acceptance of this License to do so, and
212
+ all its terms and conditions for copying, distributing or modifying
213
+ the Program or works based on it.
214
+
215
+ 6. Each time you redistribute the Program (or any work based on the
216
+ Program), the recipient automatically receives a license from the
217
+ original licensor to copy, distribute or modify the Program subject to
218
+ these terms and conditions. You may not impose any further
219
+ restrictions on the recipients' exercise of the rights granted herein.
220
+ You are not responsible for enforcing compliance by third parties to
221
+ this License.
222
+
223
+ 7. If, as a consequence of a court judgment or allegation of patent
224
+ infringement or for any other reason (not limited to patent issues),
225
+ conditions are imposed on you (whether by court order, agreement or
226
+ otherwise) that contradict the conditions of this License, they do not
227
+ excuse you from the conditions of this License. If you cannot
228
+ distribute so as to satisfy simultaneously your obligations under this
229
+ License and any other pertinent obligations, then as a consequence you
230
+ may not distribute the Program at all. For example, if a patent
231
+ license would not permit royalty-free redistribution of the Program by
232
+ all those who receive copies directly or indirectly through you, then
233
+ the only way you could satisfy both it and this License would be to
234
+ refrain entirely from distribution of the Program.
235
+
236
+ If any portion of this section is held invalid or unenforceable under
237
+ any particular circumstance, the balance of the section is intended to
238
+ apply and the section as a whole is intended to apply in other
239
+ circumstances.
240
+
241
+ It is not the purpose of this section to induce you to infringe any
242
+ patents or other property right claims or to contest validity of any
243
+ such claims; this section has the sole purpose of protecting the
244
+ integrity of the free software distribution system, which is
245
+ implemented by public license practices. Many people have made
246
+ generous contributions to the wide range of software distributed
247
+ through that system in reliance on consistent application of that
248
+ system; it is up to the author/donor to decide if he or she is willing
249
+ to distribute software through any other system and a licensee cannot
250
+ impose that choice.
251
+
252
+ This section is intended to make thoroughly clear what is believed to
253
+ be a consequence of the rest of this License.
254
+
255
+ 8. If the distribution and/or use of the Program is restricted in
256
+ certain countries either by patents or by copyrighted interfaces, the
257
+ original copyright holder who places the Program under this License
258
+ may add an explicit geographical distribution limitation excluding
259
+ those countries, so that distribution is permitted only in or among
260
+ countries not thus excluded. In such case, this License incorporates
261
+ the limitation as if written in the body of this License.
262
+
263
+ 9. The Free Software Foundation may publish revised and/or new versions
264
+ of the General Public License from time to time. Such new versions will
265
+ be similar in spirit to the present version, but may differ in detail to
266
+ address new problems or concerns.
267
+
268
+ Each version is given a distinguishing version number. If the Program
269
+ specifies a version number of this License which applies to it and "any
270
+ later version", you have the option of following the terms and conditions
271
+ either of that version or of any later version published by the Free
272
+ Software Foundation. If the Program does not specify a version number of
273
+ this License, you may choose any version ever published by the Free Software
274
+ Foundation.
275
+
276
+ 10. If you wish to incorporate parts of the Program into other free
277
+ programs whose distribution conditions are different, write to the author
278
+ to ask for permission. For software which is copyrighted by the Free
279
+ Software Foundation, write to the Free Software Foundation; we sometimes
280
+ make exceptions for this. Our decision will be guided by the two goals
281
+ of preserving the free status of all derivatives of our free software and
282
+ of promoting the sharing and reuse of software generally.
283
+
284
+ NO WARRANTY
285
+
286
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
287
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
288
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
289
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
290
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
291
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
292
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
293
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
294
+ REPAIR OR CORRECTION.
295
+
296
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
297
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
298
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
299
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
300
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
301
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
302
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
303
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
304
+ POSSIBILITY OF SUCH DAMAGES.
305
+
306
+ END OF TERMS AND CONDITIONS
307
+
308
+ How to Apply These Terms to Your New Programs
309
+
310
+ If you develop a new program, and you want it to be of the greatest
311
+ possible use to the public, the best way to achieve this is to make it
312
+ free software which everyone can redistribute and change under these terms.
313
+
314
+ To do so, attach the following notices to the program. It is safest
315
+ to attach them to the start of each source file to most effectively
316
+ convey the exclusion of warranty; and each file should have at least
317
+ the "copyright" line and a pointer to where the full notice is found.
318
+
319
+ <one line to give the program's name and a brief idea of what it does.>
320
+ Copyright (C) <year> <name of author>
321
+
322
+ This program is free software; you can redistribute it and/or modify
323
+ it under the terms of the GNU General Public License as published by
324
+ the Free Software Foundation; either version 2 of the License, or
325
+ (at your option) any later version.
326
+
327
+ This program is distributed in the hope that it will be useful,
328
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
329
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
330
+ GNU General Public License for more details.
331
+
332
+ You should have received a copy of the GNU General Public License along
333
+ with this program; if not, write to the Free Software Foundation, Inc.,
334
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
335
+
336
+ Also add information on how to contact you by electronic and paper mail.
337
+
338
+ If the program is interactive, make it output a short notice like this
339
+ when it starts in an interactive mode:
340
+
341
+ Gnomovision version 69, Copyright (C) year name of author
342
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
343
+ This is free software, and you are welcome to redistribute it
344
+ under certain conditions; type `show c' for details.
345
+
346
+ The hypothetical commands `show w' and `show c' should show the appropriate
347
+ parts of the General Public License. Of course, the commands you use may
348
+ be called something other than `show w' and `show c'; they could even be
349
+ mouse-clicks or menu items--whatever suits your program.
350
+
351
+ You should also get your employer (if you work as a programmer) or your
352
+ school, if any, to sign a "copyright disclaimer" for the program, if
353
+ necessary. Here is a sample; alter the names:
354
+
355
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
356
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
357
+
358
+ <signature of Ty Coon>, 1 April 1989
359
+ Ty Coon, President of Vice
360
+
361
+ This General Public License does not permit incorporating your program into
362
+ proprietary programs. If your program is a subroutine library, you may
363
+ consider it more useful to permit linking proprietary applications with the
364
+ library. If this is what you want to do, use the GNU Lesser General
365
+ Public License instead of this License.
 
load.php CHANGED
@@ -1,18 +1,21 @@
1
  <?php
2
 
3
- require_once WPCF7_PLUGIN_DIR . '/includes/functions.php';
4
  require_once WPCF7_PLUGIN_DIR . '/includes/l10n.php';
 
 
5
  require_once WPCF7_PLUGIN_DIR . '/includes/formatting.php';
6
  require_once WPCF7_PLUGIN_DIR . '/includes/pipe.php';
7
  require_once WPCF7_PLUGIN_DIR . '/includes/form-tag.php';
8
  require_once WPCF7_PLUGIN_DIR . '/includes/form-tags-manager.php';
9
  require_once WPCF7_PLUGIN_DIR . '/includes/shortcodes.php';
10
- require_once WPCF7_PLUGIN_DIR . '/includes/capabilities.php';
11
  require_once WPCF7_PLUGIN_DIR . '/includes/contact-form-template.php';
12
  require_once WPCF7_PLUGIN_DIR . '/includes/contact-form.php';
13
- require_once WPCF7_PLUGIN_DIR . '/includes/contact-form-functions.php';
14
  require_once WPCF7_PLUGIN_DIR . '/includes/mail.php';
15
  require_once WPCF7_PLUGIN_DIR . '/includes/special-mail-tags.php';
 
 
 
16
  require_once WPCF7_PLUGIN_DIR . '/includes/submission.php';
17
  require_once WPCF7_PLUGIN_DIR . '/includes/upgrade.php';
18
  require_once WPCF7_PLUGIN_DIR . '/includes/integration.php';
@@ -46,6 +49,7 @@ class WPCF7 {
46
  self::load_module( 'recaptcha' );
47
  self::load_module( 'response' );
48
  self::load_module( 'select' );
 
49
  self::load_module( 'submit' );
50
  self::load_module( 'text' );
51
  self::load_module( 'textarea' );
1
  <?php
2
 
 
3
  require_once WPCF7_PLUGIN_DIR . '/includes/l10n.php';
4
+ require_once WPCF7_PLUGIN_DIR . '/includes/capabilities.php';
5
+ require_once WPCF7_PLUGIN_DIR . '/includes/functions.php';
6
  require_once WPCF7_PLUGIN_DIR . '/includes/formatting.php';
7
  require_once WPCF7_PLUGIN_DIR . '/includes/pipe.php';
8
  require_once WPCF7_PLUGIN_DIR . '/includes/form-tag.php';
9
  require_once WPCF7_PLUGIN_DIR . '/includes/form-tags-manager.php';
10
  require_once WPCF7_PLUGIN_DIR . '/includes/shortcodes.php';
11
+ require_once WPCF7_PLUGIN_DIR . '/includes/contact-form-functions.php';
12
  require_once WPCF7_PLUGIN_DIR . '/includes/contact-form-template.php';
13
  require_once WPCF7_PLUGIN_DIR . '/includes/contact-form.php';
 
14
  require_once WPCF7_PLUGIN_DIR . '/includes/mail.php';
15
  require_once WPCF7_PLUGIN_DIR . '/includes/special-mail-tags.php';
16
+ require_once WPCF7_PLUGIN_DIR . '/includes/file.php';
17
+ require_once WPCF7_PLUGIN_DIR . '/includes/validation-functions.php';
18
+ require_once WPCF7_PLUGIN_DIR . '/includes/validation.php';
19
  require_once WPCF7_PLUGIN_DIR . '/includes/submission.php';
20
  require_once WPCF7_PLUGIN_DIR . '/includes/upgrade.php';
21
  require_once WPCF7_PLUGIN_DIR . '/includes/integration.php';
49
  self::load_module( 'recaptcha' );
50
  self::load_module( 'response' );
51
  self::load_module( 'select' );
52
+ self::load_module( 'sendinblue' );
53
  self::load_module( 'submit' );
54
  self::load_module( 'text' );
55
  self::load_module( 'textarea' );
modules/constant-contact.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- add_action( 'wpcf7_init', 'wpcf7_constant_contact_register_service', 10, 0 );
4
 
5
  function wpcf7_constant_contact_register_service() {
6
  $integration = WPCF7_Integration::get_instance();
@@ -459,20 +459,20 @@ class WPCF7_ConstantContact extends WPCF7_Service_OAuth2 {
459
  switch ( $message ) {
460
  case 'success':
461
  echo sprintf(
462
- '<div class="notice notice-success is-dismissible"><p>%s</p></div>',
463
  esc_html( __( "Connection established.", 'contact-form-7' ) )
464
  );
465
  break;
466
  case 'failed':
467
  echo sprintf(
468
- '<div class="notice notice-error is-dismissible"><p><strong>%1$s</strong>: %2$s</p></div>',
469
  esc_html( __( "Error", 'contact-form-7' ) ),
470
  esc_html( __( "Failed to establish connection. Please double-check your configuration.", 'contact-form-7' ) )
471
  );
472
  break;
473
  case 'updated':
474
  echo sprintf(
475
- '<div class="notice notice-success is-dismissible"><p>%s</p></div>',
476
  esc_html( __( "Configuration updated.", 'contact-form-7' ) )
477
  );
478
  break;
@@ -536,7 +536,7 @@ class WPCF7_ConstantContact extends WPCF7_Service_OAuth2 {
536
  <th scope="row"><label for="client_secret"><?php echo esc_html( __( 'App Secret', 'contact-form-7' ) ); ?></label></th>
537
  <td><?php
538
  if ( $this->is_active() ) {
539
- echo esc_html( wpcf7_mask_password( $this->client_secret ) );
540
  echo sprintf(
541
  '<input type="hidden" value="%1$s" id="client_secret" name="client_secret" />',
542
  esc_attr( $this->client_secret )
1
  <?php
2
 
3
+ add_action( 'wpcf7_init', 'wpcf7_constant_contact_register_service', 20, 0 );
4
 
5
  function wpcf7_constant_contact_register_service() {
6
  $integration = WPCF7_Integration::get_instance();
459
  switch ( $message ) {
460
  case 'success':
461
  echo sprintf(
462
+ '<div class="notice notice-success"><p>%s</p></div>',
463
  esc_html( __( "Connection established.", 'contact-form-7' ) )
464
  );
465
  break;
466
  case 'failed':
467
  echo sprintf(
468
+ '<div class="notice notice-error"><p><strong>%1$s</strong>: %2$s</p></div>',
469
  esc_html( __( "Error", 'contact-form-7' ) ),
470
  esc_html( __( "Failed to establish connection. Please double-check your configuration.", 'contact-form-7' ) )
471
  );
472
  break;
473
  case 'updated':
474
  echo sprintf(
475
+ '<div class="notice notice-success"><p>%s</p></div>',
476
  esc_html( __( "Configuration updated.", 'contact-form-7' ) )
477
  );
478
  break;
536
  <th scope="row"><label for="client_secret"><?php echo esc_html( __( 'App Secret', 'contact-form-7' ) ); ?></label></th>
537
  <td><?php
538
  if ( $this->is_active() ) {
539
+ echo esc_html( wpcf7_mask_password( $this->client_secret, 4, 4 ) );
540
  echo sprintf(
541
  '<input type="hidden" value="%1$s" id="client_secret" name="client_secret" />',
542
  esc_attr( $this->client_secret )
modules/disallowed-list.php CHANGED
@@ -49,7 +49,7 @@ function wpcf7_disallowed_list( $spam, $submission ) {
49
  }
50
 
51
  function wpcf7_check_disallowed_list( $target ) {
52
- $mod_keys = trim( get_option( 'blacklist_keys' ) );
53
 
54
  if ( '' === $mod_keys ) {
55
  return false;
49
  }
50
 
51
  function wpcf7_check_disallowed_list( $target ) {
52
+ $mod_keys = trim( get_option( 'disallowed_keys' ) );
53
 
54
  if ( '' === $mod_keys ) {
55
  return false;
modules/file.php CHANGED
@@ -12,6 +12,7 @@ function wpcf7_add_form_tag_file() {
12
  'wpcf7_file_form_tag_handler',
13
  array(
14
  'name-attr' => true,
 
15
  )
16
  );
17
  }
@@ -66,100 +67,20 @@ function wpcf7_file_form_tag_handler( $tag ) {
66
  }
67
 
68
 
69
- /* Encode type filter */
70
-
71
- add_filter( 'wpcf7_form_enctype', 'wpcf7_file_form_enctype_filter', 10, 1 );
72
-
73
- function wpcf7_file_form_enctype_filter( $enctype ) {
74
- $multipart = (bool) wpcf7_scan_form_tags(
75
- array( 'type' => array( 'file', 'file*' ) )
76
- );
77
-
78
- if ( $multipart ) {
79
- $enctype = 'multipart/form-data';
80
- }
81
-
82
- return $enctype;
83
- }
84
-
85
-
86
  /* Validation + upload handling filter */
87
 
88
- add_filter( 'wpcf7_validate_file', 'wpcf7_file_validation_filter', 10, 2 );
89
- add_filter( 'wpcf7_validate_file*', 'wpcf7_file_validation_filter', 10, 2 );
90
-
91
- function wpcf7_file_validation_filter( $result, $tag ) {
92
- $name = $tag->name;
93
- $id = $tag->get_id_option();
94
-
95
- $file = isset( $_FILES[$name] ) ? $_FILES[$name] : null;
96
-
97
- if ( ! empty( $file['error'] ) and UPLOAD_ERR_NO_FILE !== $file['error'] ) {
98
- $result->invalidate( $tag, wpcf7_get_message( 'upload_failed_php_error' ) );
99
- return $result;
100
- }
101
-
102
- if ( empty( $file['tmp_name'] ) and $tag->is_required() ) {
103
- $result->invalidate( $tag, wpcf7_get_message( 'invalid_required' ) );
104
- return $result;
105
- }
106
-
107
- if ( empty( $file['tmp_name'] )
108
- or ! is_uploaded_file( $file['tmp_name'] ) ) {
109
- return $result;
110
- }
111
-
112
- /* File type validation */
113
-
114
- $file_type_pattern = wpcf7_acceptable_filetypes(
115
- $tag->get_option( 'filetypes' ), 'regex'
116
- );
117
-
118
- $file_type_pattern = '/\.(' . $file_type_pattern . ')$/i';
119
-
120
- if ( empty( $file['name'] )
121
- or ! preg_match( $file_type_pattern, $file['name'] ) ) {
122
- $result->invalidate( $tag,
123
- wpcf7_get_message( 'upload_file_type_invalid' )
124
- );
125
-
126
- return $result;
127
- }
128
-
129
- /* File size validation */
130
-
131
- $allowed_size = $tag->get_limit_option();
132
-
133
- if ( ! empty( $file['size'] ) and $allowed_size < $file['size'] ) {
134
- $result->invalidate( $tag, wpcf7_get_message( 'upload_file_too_large' ) );
135
- return $result;
136
- }
137
-
138
- wpcf7_init_uploads(); // Confirm upload dir
139
- $uploads_dir = wpcf7_upload_tmp_dir();
140
- $uploads_dir = wpcf7_maybe_add_random_dir( $uploads_dir );
141
 
142
- $filename = $file['name'];
143
- $filename = wpcf7_canonicalize( $filename, 'as-is' );
144
- $filename = wpcf7_antiscript_file_name( $filename );
145
-
146
- $filename = apply_filters( 'wpcf7_upload_file_name', $filename,
147
- $file['name'], $tag
148
- );
149
-
150
- $filename = wp_unique_filename( $uploads_dir, $filename );
151
- $new_file = path_join( $uploads_dir, $filename );
152
-
153
- if ( false === @move_uploaded_file( $file['tmp_name'], $new_file ) ) {
154
- $result->invalidate( $tag, wpcf7_get_message( 'upload_failed' ) );
155
- return $result;
156
- }
157
 
158
- // Make sure the uploaded file is only readable for the owner process
159
- chmod( $new_file, 0400 );
160
 
161
- if ( $submission = WPCF7_Submission::get_instance() ) {
162
- $submission->add_uploaded_file( $name, $new_file );
 
163
  }
164
 
165
  return $result;
@@ -174,42 +95,16 @@ function wpcf7_file_mail_tag( $replaced, $submitted, $html, $mail_tag ) {
174
  $name = $mail_tag->field_name();
175
 
176
  if ( ! empty( $uploaded_files[$name] ) ) {
177
- $replaced = wp_basename( $uploaded_files[$name] );
 
 
 
178
  }
179
 
180
  return $replaced;
181
  }
182
 
183
 
184
- /* Messages */
185
-
186
- add_filter( 'wpcf7_messages', 'wpcf7_file_messages', 10, 1 );
187
-
188
- function wpcf7_file_messages( $messages ) {
189
- return array_merge( $messages, array(
190
- 'upload_failed' => array(
191
- 'description' => __( "Uploading a file fails for any reason", 'contact-form-7' ),
192
- 'default' => __( "There was an unknown error uploading the file.", 'contact-form-7' )
193
- ),
194
-
195
- 'upload_file_type_invalid' => array(
196
- 'description' => __( "Uploaded file is not allowed for file type", 'contact-form-7' ),
197
- 'default' => __( "You are not allowed to upload files of this type.", 'contact-form-7' )
198
- ),
199
-
200
- 'upload_file_too_large' => array(
201
- 'description' => __( "Uploaded file is too large", 'contact-form-7' ),
202
- 'default' => __( "The file is too big.", 'contact-form-7' )
203
- ),
204
-
205
- 'upload_failed_php_error' => array(
206
- 'description' => __( "Uploading a file fails for PHP error", 'contact-form-7' ),
207
- 'default' => __( "There was an error uploading the file.", 'contact-form-7' )
208
- )
209
- ) );
210
- }
211
-
212
-
213
  /* Tag generator */
214
 
215
  add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_file', 50, 0 );
@@ -288,190 +183,3 @@ function wpcf7_tag_generator_file( $contact_form, $args = '' ) {
288
  </div>
289
  <?php
290
  }
291
-
292
-
293
- /* Warning message */
294
-
295
- add_action( 'wpcf7_admin_warnings',
296
- 'wpcf7_file_display_warning_message', 10, 3 );
297
-
298
- function wpcf7_file_display_warning_message( $page, $action, $object ) {
299
- if ( $object instanceof WPCF7_ContactForm ) {
300
- $contact_form = $object;
301
- } else {
302
- return;
303
- }
304
-
305
- $has_tags = (bool) $contact_form->scan_form_tags(
306
- array( 'type' => array( 'file', 'file*' ) ) );
307
-
308
- if ( ! $has_tags ) {
309
- return;
310
- }
311
-
312
- $uploads_dir = wpcf7_upload_tmp_dir();
313
- wpcf7_init_uploads();
314
-
315
- if ( ! is_dir( $uploads_dir )
316
- or ! wp_is_writable( $uploads_dir ) ) {
317
- $message = sprintf( __( 'This contact form contains file uploading fields, but the temporary folder for the files (%s) does not exist or is not writable. You can create the folder or change its permission manually.', 'contact-form-7' ), $uploads_dir );
318
-
319
- echo sprintf( '<div class="notice notice-warning"><p>%s</p></div>',
320
- esc_html( $message ) );
321
- }
322
- }
323
-
324
-
325
- /* File uploading functions */
326
-
327
- function wpcf7_acceptable_filetypes( $types = 'default', $format = 'regex' ) {
328
- if ( 'default' === $types
329
- or empty( $types ) ) {
330
- $types = array(
331
- 'jpg',
332
- 'jpeg',
333
- 'png',
334
- 'gif',
335
- 'pdf',
336
- 'doc',
337
- 'docx',
338
- 'ppt',
339
- 'pptx',
340
- 'odt',
341
- 'avi',
342
- 'ogg',
343
- 'm4a',
344
- 'mov',
345
- 'mp3',
346
- 'mp4',
347
- 'mpg',
348
- 'wav',
349
- 'wmv',
350
- );
351
- } else {
352
- $types_tmp = (array) $types;
353
- $types = array();
354
-
355
- foreach ( $types_tmp as $val ) {
356
- if ( is_string( $val ) ) {
357
- $val = preg_split( '/[\s|,]+/', $val );
358
- }
359
-
360
- $types = array_merge( $types, (array) $val );
361
- }
362
- }
363
-
364
- $types = array_unique( array_filter( $types ) );
365
-
366
- $output = '';
367
-
368
- foreach ( $types as $type ) {
369
- $type = trim( $type, ' ,.|' );
370
- $type = str_replace(
371
- array( '.', '+', '*', '?' ),
372
- array( '\.', '\+', '\*', '\?' ),
373
- $type );
374
-
375
- if ( '' === $type ) {
376
- continue;
377
- }
378
-
379
- if ( 'attr' === $format
380
- or 'attribute' === $format ) {
381
- $output .= sprintf( '.%s', $type );
382
- $output .= ',';
383
- } else {
384
- $output .= $type;
385
- $output .= '|';
386
- }
387
- }
388
-
389
- return trim( $output, ' ,|' );
390
- }
391
-
392
- function wpcf7_init_uploads() {
393
- $dir = wpcf7_upload_tmp_dir();
394
- wp_mkdir_p( $dir );
395
-
396
- $htaccess_file = path_join( $dir, '.htaccess' );
397
-
398
- if ( file_exists( $htaccess_file ) ) {
399
- return;
400
- }
401
-
402
- if ( $handle = fopen( $htaccess_file, 'w' ) ) {
403
- fwrite( $handle, "Deny from all\n" );
404
- fclose( $handle );
405
- }
406
- }
407
-
408
- function wpcf7_maybe_add_random_dir( $dir ) {
409
- do {
410
- $rand_max = mt_getrandmax();
411
- $rand = zeroise( mt_rand( 0, $rand_max ), strlen( $rand_max ) );
412
- $dir_new = path_join( $dir, $rand );
413
- } while ( file_exists( $dir_new ) );
414
-
415
- if ( wp_mkdir_p( $dir_new ) ) {
416
- return $dir_new;
417
- }
418
-
419
- return $dir;
420
- }
421
-
422
- function wpcf7_upload_tmp_dir() {
423
- if ( defined( 'WPCF7_UPLOADS_TMP_DIR' ) ) {
424
- return WPCF7_UPLOADS_TMP_DIR;
425
- } else {
426
- return path_join( wpcf7_upload_dir( 'dir' ), 'wpcf7_uploads' );
427
- }
428
- }
429
-
430
- add_action( 'template_redirect', 'wpcf7_cleanup_upload_files', 20, 0 );
431
-
432
- function wpcf7_cleanup_upload_files( $seconds = 60, $max = 100 ) {
433
- if ( is_admin()
434
- or 'GET' != $_SERVER['REQUEST_METHOD']
435
- or is_robots()
436
- or is_feed()
437
- or is_trackback() ) {
438
- return;
439
- }
440
-
441
- $dir = trailingslashit( wpcf7_upload_tmp_dir() );
442
-
443
- if ( ! is_dir( $dir )
444
- or ! is_readable( $dir )
445
- or ! wp_is_writable( $dir ) ) {
446
- return;
447
- }
448
-
449
- $seconds = absint( $seconds );
450
- $max = absint( $max );
451
- $count = 0;
452
-
453
- if ( $handle = opendir( $dir ) ) {
454
- while ( false !== ( $file = readdir( $handle ) ) ) {
455
- if ( '.' == $file
456
- or '..' == $file
457
- or '.htaccess' == $file ) {
458
- continue;
459
- }
460
-
461
- $mtime = @filemtime( path_join( $dir, $file ) );
462
-
463
- if ( $mtime and time() < $mtime + $seconds ) { // less than $seconds old
464
- continue;
465
- }
466
-
467
- wpcf7_rmdir_p( path_join( $dir, $file ) );
468
- $count += 1;
469
-
470
- if ( $max <= $count ) {
471
- break;
472
- }
473
- }
474
-
475
- closedir( $handle );
476
- }
477
- }
12
  'wpcf7_file_form_tag_handler',
13
  array(
14
  'name-attr' => true,
15
+ 'file-uploading' => true,
16
  )
17
  );
18
  }
67
  }
68
 
69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  /* Validation + upload handling filter */
71
 
72
+ add_filter( 'wpcf7_validate_file', 'wpcf7_file_validation_filter', 10, 3 );
73
+ add_filter( 'wpcf7_validate_file*', 'wpcf7_file_validation_filter', 10, 3 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
 
75
+ function wpcf7_file_validation_filter( $result, $tag, $args ) {
76
+ $args = wp_parse_args( $args, array() );
 
 
 
 
 
 
 
 
 
 
 
 
 
77
 
78
+ if ( isset( $args['uploaded_files'] ) ) {
79
+ $maybe_error = $args['uploaded_files'];
80
 
81
+ if ( is_wp_error( $maybe_error ) ) {
82
+ $result->invalidate( $tag, $maybe_error->get_error_message() );
83
+ }
84
  }
85
 
86
  return $result;
95
  $name = $mail_tag->field_name();
96
 
97
  if ( ! empty( $uploaded_files[$name] ) ) {
98
+ $paths = (array) $uploaded_files[$name];
99
+ $paths = array_map( 'wp_basename', $paths );
100
+
101
+ $replaced = wpcf7_flat_join( $paths );
102
  }
103
 
104
  return $replaced;
105
  }
106
 
107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  /* Tag generator */
109
 
110
  add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_file', 50, 0 );
183
  </div>
184
  <?php
185
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/recaptcha/index.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=3)}([function(t,e){t.exports=function(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}},function(t,e,n){var r=n(4),o=n(5),c=n(6),i=n(7);t.exports=function(t){return r(t)||o(t)||c(t)||i()}},function(t,e){t.exports=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}},function(t,e,n){"use strict";n.r(e);var r=n(1),o=n.n(r),c=n(2),i=n.n(c);function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}document.addEventListener("DOMContentLoaded",(function(t){var e;wpcf7_recaptcha=function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?a(Object(n),!0).forEach((function(e){i()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},null!==(e=wpcf7_recaptcha)&&void 0!==e?e:{});var n=wpcf7_recaptcha.sitekey,r=wpcf7_recaptcha.actions,c=r.homepage,u=r.contactform,f=function(t){var e=t.action,r=t.func,c=t.params;grecaptcha.execute(n,{action:e}).then((function(t){var n=new CustomEvent("wpcf7grecaptchaexecuted",{detail:{action:e,token:t}});document.dispatchEvent(n)})).then((function(){"function"==typeof r&&r.apply(void 0,o()(c))})).catch((function(t){return console.error(t)}))};if(grecaptcha.ready((function(){f({action:c})})),document.addEventListener("change",(function(t){f({action:u})})),"undefined"!=typeof wpcf7&&"function"==typeof wpcf7.submit){var p=wpcf7.submit;wpcf7.submit=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};f({action:u,func:p,params:[t,e]})}}document.addEventListener("wpcf7grecaptchaexecuted",(function(t){document.querySelectorAll('form.wpcf7-form input[name="_wpcf7_recaptcha_response"]').forEach((function(e){e.setAttribute("value",t.detail.token)}))}))}))},function(t,e,n){var r=n(0);t.exports=function(t){if(Array.isArray(t))return r(t)}},function(t,e){t.exports=function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}},function(t,e,n){var r=n(0);t.exports=function(t,e){if(t){if("string"==typeof t)return r(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(t,e):void 0}}},function(t,e){t.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}}]);
modules/recaptcha/recaptcha.php CHANGED
@@ -14,7 +14,7 @@ function wpcf7_recaptcha_register_service() {
14
  );
15
  }
16
 
17
- add_action( 'wp_enqueue_scripts', 'wpcf7_recaptcha_enqueue_scripts', 10, 0 );
18
 
19
  function wpcf7_recaptcha_enqueue_scripts() {
20
  $service = WPCF7_RECAPTCHA::get_instance();
@@ -35,13 +35,33 @@ function wpcf7_recaptcha_enqueue_scripts() {
35
  true
36
  );
37
 
38
- wp_enqueue_script( 'wpcf7-recaptcha',
39
- wpcf7_plugin_url( 'modules/recaptcha/script.js' ),
40
- array( 'google-recaptcha' ),
41
- WPCF7_VERSION,
42
- true
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  );
44
 
 
 
45
  wp_localize_script( 'wpcf7-recaptcha',
46
  'wpcf7_recaptcha',
47
  array(
@@ -414,13 +434,13 @@ class WPCF7_RECAPTCHA extends WPCF7_Service {
414
  public function admin_notice( $message = '' ) {
415
  if ( 'invalid' == $message ) {
416
  echo sprintf(
417
- '<div class="notice notice-error is-dismissible"><p><strong>%1$s</strong>: %2$s</p></div>',
418
  esc_html( __( "Error", 'contact-form-7' ) ),
419
  esc_html( __( "Invalid key values.", 'contact-form-7' ) ) );
420
  }
421
 
422
  if ( 'success' == $message ) {
423
- echo sprintf( '<div class="notice notice-success is-dismissible"><p>%s</p></div>',
424
  esc_html( __( 'Settings saved.', 'contact-form-7' ) ) );
425
  }
426
  }
@@ -482,7 +502,7 @@ class WPCF7_RECAPTCHA extends WPCF7_Service {
482
  <th scope="row"><label for="secret"><?php echo esc_html( __( 'Secret Key', 'contact-form-7' ) ); ?></label></th>
483
  <td><?php
484
  if ( $this->is_active() ) {
485
- echo esc_html( wpcf7_mask_password( $secret ) );
486
  echo sprintf(
487
  '<input type="hidden" value="%1$s" id="secret" name="secret" />',
488
  esc_attr( $secret )
14
  );
15
  }
16
 
17
+ add_action( 'wp_enqueue_scripts', 'wpcf7_recaptcha_enqueue_scripts', 20, 0 );
18
 
19
  function wpcf7_recaptcha_enqueue_scripts() {
20
  $service = WPCF7_RECAPTCHA::get_instance();
35
  true
36
  );
37
 
38
+ $assets = array();
39
+ $asset_file = wpcf7_plugin_path( 'modules/recaptcha/index.asset.php' );
40
+
41
+ if ( file_exists( $asset_file ) ) {
42
+ $assets = include( $asset_file );
43
+ }
44
+
45
+ $assets = wp_parse_args( $assets, array(
46
+ 'src' => wpcf7_plugin_url( 'modules/recaptcha/index.js' ),
47
+ 'dependencies' => array(
48
+ 'google-recaptcha',
49
+ 'wp-polyfill',
50
+ ),
51
+ 'version' => WPCF7_VERSION,
52
+ 'in_footer' => true,
53
+ ) );
54
+
55
+ wp_register_script(
56
+ 'wpcf7-recaptcha',
57
+ $assets['src'],
58
+ $assets['dependencies'],
59
+ $assets['version'],
60
+ $assets['in_footer']
61
  );
62
 
63
+ wp_enqueue_script( 'wpcf7-recaptcha' );
64
+
65
  wp_localize_script( 'wpcf7-recaptcha',
66
  'wpcf7_recaptcha',
67
  array(
434
  public function admin_notice( $message = '' ) {
435
  if ( 'invalid' == $message ) {
436
  echo sprintf(
437
+ '<div class="notice notice-error"><p><strong>%1$s</strong>: %2$s</p></div>',
438
  esc_html( __( "Error", 'contact-form-7' ) ),
439
  esc_html( __( "Invalid key values.", 'contact-form-7' ) ) );
440
  }
441
 
442
  if ( 'success' == $message ) {
443
+ echo sprintf( '<div class="notice notice-success"><p>%s</p></div>',
444
  esc_html( __( 'Settings saved.', 'contact-form-7' ) ) );
445
  }
446
  }
502
  <th scope="row"><label for="secret"><?php echo esc_html( __( 'Secret Key', 'contact-form-7' ) ); ?></label></th>
503
  <td><?php
504
  if ( $this->is_active() ) {
505
+ echo esc_html( wpcf7_mask_password( $secret, 4, 4 ) );
506
  echo sprintf(
507
  '<input type="hidden" value="%1$s" id="secret" name="secret" />',
508
  esc_attr( $secret )
modules/recaptcha/script.js DELETED
@@ -1,53 +0,0 @@
1
- ( function() {
2
- document.addEventListener( 'DOMContentLoaded', function( event ) {
3
-
4
- wpcf7_recaptcha.execute = function( action ) {
5
- grecaptcha.execute(
6
- wpcf7_recaptcha.sitekey,
7
- { action: action }
8
- ).then( function( token ) {
9
- var event = new CustomEvent( 'wpcf7grecaptchaexecuted', {
10
- detail: {
11
- action: action,
12
- token: token,
13
- },
14
- } );
15
-
16
- document.dispatchEvent( event );
17
- } );
18
- };
19
-
20
- wpcf7_recaptcha.execute_on_homepage = function() {
21
- wpcf7_recaptcha.execute( wpcf7_recaptcha.actions[ 'homepage' ] );
22
- };
23
-
24
- wpcf7_recaptcha.execute_on_contactform = function() {
25
- wpcf7_recaptcha.execute( wpcf7_recaptcha.actions[ 'contactform' ] );
26
- };
27
-
28
- grecaptcha.ready(
29
- wpcf7_recaptcha.execute_on_homepage
30
- );
31
-
32
- document.addEventListener( 'change',
33
- wpcf7_recaptcha.execute_on_contactform
34
- );
35
-
36
- document.addEventListener( 'wpcf7submit',
37
- wpcf7_recaptcha.execute_on_homepage
38
- );
39
-
40
- } );
41
-
42
- document.addEventListener( 'wpcf7grecaptchaexecuted', function( event ) {
43
- var fields = document.querySelectorAll(
44
- "form.wpcf7-form input[name='_wpcf7_recaptcha_response']"
45
- );
46
-
47
- for ( var i = 0; i < fields.length; i++ ) {
48
- var field = fields[ i ];
49
- field.setAttribute( 'value', event.detail.token );
50
- }
51
- } );
52
-
53
- } )();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/sendinblue/contact-form-properties.php ADDED
@@ -0,0 +1,302 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ add_filter(
4
+ 'wpcf7_contact_form_properties',
5
+ 'wpcf7_sendinblue_register_property',
6
+ 10, 2
7
+ );
8
+
9
+ function wpcf7_sendinblue_register_property( $properties, $contact_form ) {
10
+ $service = WPCF7_Sendinblue::get_instance();
11
+
12
+ if ( ! $service->is_active() ) {
13
+ return $properties;
14
+ }
15
+
16
+ $properties += array(
17
+ 'sendinblue' => array(),
18
+ );
19
+
20
+ return $properties;
21
+ }
22
+
23
+
24
+ add_action(
25
+ 'wpcf7_save_contact_form',
26
+ 'wpcf7_sendinblue_save_contact_form',
27
+ 10, 3
28
+ );
29
+
30
+ function wpcf7_sendinblue_save_contact_form( $contact_form, $args, $context ) {
31
+ $service = WPCF7_Sendinblue::get_instance();
32
+
33
+ if ( ! $service->is_active() ) {
34
+ return;
35
+ }
36
+
37
+ $prop = isset( $_POST['wpcf7-sendinblue'] )
38
+ ? (array) $_POST['wpcf7-sendinblue']
39
+ : array();
40
+
41
+ $prop = wp_parse_args(
42
+ $prop,
43
+ array(
44
+ 'enable_contact_list' => false,
45
+ 'contact_lists' => array(),
46
+ 'enable_transactional_email' => false,
47
+ 'email_template' => 0,
48
+ )
49
+ );
50
+
51
+ $prop['contact_lists'] = array_map( 'absint', $prop['contact_lists'] );
52
+
53
+ $prop['email_template'] = absint( $prop['email_template'] );
54
+
55
+ $contact_form->set_properties( array(
56
+ 'sendinblue' => $prop,
57
+ ) );
58
+ }
59
+
60
+
61
+ add_filter(
62
+ 'wpcf7_editor_panels',
63
+ 'wpcf7_sendinblue_editor_panels',
64
+ 10, 1
65
+ );
66
+
67
+ function wpcf7_sendinblue_editor_panels( $panels ) {
68
+ $service = WPCF7_Sendinblue::get_instance();
69
+
70
+ if ( ! $service->is_active() ) {
71
+ return $panels;
72
+ }
73
+
74
+ $contact_form = WPCF7_ContactForm::get_current();
75
+
76
+ $prop = wp_parse_args(
77
+ $contact_form->prop( 'sendinblue' ),
78
+ array(
79
+ 'enable_contact_list' => false,
80
+ 'contact_lists' => array(),
81
+ 'enable_transactional_email' => false,
82
+ 'email_template' => 0,
83
+ )
84
+ );
85
+
86
+ $editor_panel = function () use ( $prop, $service ) {
87
+
88
+ $description = sprintf(
89
+ esc_html(
90
+ __( "You can set up the Sendinblue integration here. For details, see %s.", 'contact-form-7' )
91
+ ),
92
+ wpcf7_link(
93
+ __( 'https://contactform7.com/sendinblue-integration/', 'contact-form-7' ),
94
+ __( 'Sendinblue integration', 'contact-form-7' )
95
+ )
96
+ );
97
+
98
+ $lists = $service->get_lists();
99
+ $templates = $service->get_templates();
100
+
101
+ ?>
102
+ <h2><?php echo esc_html( __( 'Sendinblue', 'contact-form-7' ) ); ?></h2>
103
+
104
+ <fieldset>
105
+ <legend><?php echo $description; ?></legend>
106
+
107
+ <table class="form-table" role="presentation">
108
+ <tbody>
109
+ <tr class="<?php echo $prop['enable_contact_list'] ? '' : 'inactive'; ?>">
110
+ <th scope="row">
111
+ <?php
112
+
113
+ echo esc_html( __( 'Contact lists', 'contact-form-7' ) );
114
+
115
+ ?>
116
+ </th>
117
+ <td>
118
+ <fieldset>
119
+ <legend class="screen-reader-text">
120
+ <?php
121
+
122
+ echo esc_html( __( 'Contact lists', 'contact-form-7' ) );
123
+
124
+ ?>
125
+ </legend>
126
+ <label for="wpcf7-sendinblue-enable-contact-list">
127
+ <input type="checkbox" name="wpcf7-sendinblue[enable_contact_list]" id="wpcf7-sendinblue-enable-contact-list" value="1" <?php checked( $prop['enable_contact_list'] ); ?> />
128
+ <?php
129
+
130
+ echo esc_html(
131
+ __( "Add form submitters to your contact lists", 'contact-form-7' )
132
+ );
133
+
134
+ ?>
135
+ </label>
136
+ </fieldset>
137
+ </td>
138
+ </tr>
139
+ <tr>
140
+ <th scope="row"></th>
141
+ <td>
142
+ <fieldset>
143
+ <?php
144
+
145
+ if ( $lists ) {
146
+ echo sprintf(
147
+ '<legend>%1$s</legend>',
148
+ esc_html( __( 'Select lists to which contacts are added:', 'contact-form-7' ) )
149
+ );
150
+
151
+ echo '<ul>';
152
+
153
+ foreach ( $lists as $list ) {
154
+ echo sprintf(
155
+ '<li><label><input %1$s /> %2$s</label></li>',
156
+ wpcf7_format_atts( array(
157
+ 'type' => 'checkbox',
158
+ 'name' => 'wpcf7-sendinblue[contact_lists][]',
159
+ 'value' => $list['id'],
160
+ 'checked' => in_array( $list['id'], $prop['contact_lists'] )
161
+ ? 'checked'
162
+ : '',
163
+ ) ),
164
+ esc_html( $list['name'] )
165
+ );
166
+ }
167
+
168
+ echo '</ul>';
169
+ } else {
170
+ echo sprintf(
171
+ '<legend>%1$s</legend>',
172
+ esc_html( __( 'You have no contact list yet.', 'contact-form-7' ) )
173
+ );
174
+ }
175
+
176
+ ?>
177
+ </fieldset>
178
+ <?php
179
+
180
+ echo sprintf(
181
+ '<p><a %1$s>%2$s <span class="screen-reader-text">%3$s</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a></p>',
182
+ wpcf7_format_atts( array(
183
+ 'href' => 'https://my.sendinblue.com/lists',
184
+ 'target' => '_blank',
185
+ 'rel' => 'external noreferrer noopener',
186
+ ) ),
187
+ esc_html( __( 'Manage your contact lists', 'contact-form-7' ) ),
188
+ esc_html( __( '(opens in a new tab)', 'contact-form-7' ) )
189
+ );
190
+
191
+ ?>
192
+ </td>
193
+ </tr>
194
+ <tr class="<?php echo $prop['enable_transactional_email'] ? '' : 'inactive'; ?>">
195
+ <th scope="row">
196
+ <?php
197
+
198
+ echo esc_html( __( 'Welcome email', 'contact-form-7' ) );
199
+
200
+ ?>
201
+ </th>
202
+ <td>
203
+ <fieldset>
204
+ <legend class="screen-reader-text">
205
+ <?php
206
+
207
+ echo esc_html( __( 'Welcome email', 'contact-form-7' ) );
208
+
209
+ ?>
210
+ </legend>
211
+ <label for="wpcf7-sendinblue-enable-transactional-email">
212
+ <input type="checkbox" name="wpcf7-sendinblue[enable_transactional_email]" id="wpcf7-sendinblue-enable-transactional-email" value="1" <?php checked( $prop['enable_transactional_email'] ); ?> />
213
+ <?php
214
+
215
+ echo esc_html(
216
+ __( "Send a welcome email to new contacts", 'contact-form-7' )
217
+ );
218
+
219
+ ?>
220
+ </label>
221
+ </fieldset>
222
+ </td>
223
+ </tr>
224
+ <tr>
225
+ <th scope="row"></th>
226
+ <td>
227
+ <fieldset>
228
+ <?php
229
+
230
+ if ( $templates ) {
231
+ echo sprintf(
232
+ '<legend>%1$s</legend>',
233
+ esc_html( __( 'Select an email template:', 'contact-form-7' ) )
234
+ );
235
+
236
+ echo '<select name="wpcf7-sendinblue[email_template]">';
237
+
238
+ echo sprintf(
239
+ '<option %1$s>%2$s</option>',
240
+ wpcf7_format_atts( array(
241
+ 'value' => 0,
242
+ 'selected' => 0 === $prop['email_template']
243
+ ? 'selected'
244
+ : '',
245
+ ) ),
246
+ esc_html( __( '&mdash; Select &mdash;', 'contact-form-7' ) )
247
+ );
248
+
249
+ foreach ( $templates as $template ) {
250
+ echo sprintf(
251
+ '<option %1$s>%2$s</option>',
252
+ wpcf7_format_atts( array(
253
+ 'value' => $template['id'],
254
+ 'selected' => $prop['email_template'] === $template['id']
255
+ ? 'selected'
256
+ : '',
257
+ ) ),
258
+ esc_html( $template['name'] )
259
+ );
260
+ }
261
+
262
+ echo '</select>';
263
+ } else {
264
+ echo sprintf(
265
+ '<legend>%1$s</legend>',
266
+ esc_html( __( 'You have no active email template yet.', 'contact-form-7' ) )
267
+ );
268
+ }
269
+
270
+ ?>
271
+ </fieldset>
272
+ <?php
273
+
274
+ echo sprintf(
275
+ '<p><a %1$s>%2$s <span class="screen-reader-text">%3$s</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a></p>',
276
+ wpcf7_format_atts( array(
277
+ 'href' => 'https://my.sendinblue.com/camp/lists/template',
278
+ 'target' => '_blank',
279
+ 'rel' => 'external noreferrer noopener',
280
+ ) ),
281
+ esc_html( __( 'Manage your email templates', 'contact-form-7' ) ),
282
+ esc_html( __( '(opens in a new tab)', 'contact-form-7' ) )
283
+ );
284
+
285
+ ?>
286
+ </td>
287
+ </tr>
288
+ </tbody>
289
+ </table>
290
+ </fieldset>
291
+ <?php
292
+ };
293
+
294
+ $panels += array(
295
+ 'sendinblue-panel' => array(
296
+ 'title' => __( 'Sendinblue', 'contact-form-7' ),
297
+ 'callback' => $editor_panel,
298
+ ),
299
+ );
300
+
301
+ return $panels;
302
+ }
modules/sendinblue/sendinblue.php ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ include_once path_join(
4
+ WPCF7_PLUGIN_MODULES_DIR,
5
+ 'sendinblue/service.php'
6
+ );
7
+
8
+ include_once path_join(
9
+ WPCF7_PLUGIN_MODULES_DIR,
10
+ 'sendinblue/contact-form-properties.php'
11
+ );
12
+
13
+
14
+ add_action( 'wpcf7_init', 'wpcf7_sendinblue_register_service', 1, 0 );
15
+
16
+ function wpcf7_sendinblue_register_service() {
17
+ $integration = WPCF7_Integration::get_instance();
18
+
19
+ $integration->add_service( 'sendinblue',
20
+ WPCF7_Sendinblue::get_instance()
21
+ );
22
+ }
23
+
24
+
25
+ add_action( 'wpcf7_submit', 'wpcf7_sendinblue_submit', 10, 2 );
26
+
27
+ function wpcf7_sendinblue_submit( $contact_form, $result ) {
28
+ if ( $contact_form->in_demo_mode() ) {
29
+ return;
30
+ }
31
+
32
+ $service = WPCF7_Sendinblue::get_instance();
33
+
34
+ if ( ! $service->is_active() ) {
35
+ return;
36
+ }
37
+
38
+ if ( empty( $result['posted_data_hash'] ) ) {
39
+ return;
40
+ }
41
+
42
+ if ( empty( $result['status'] )
43
+ or ! in_array( $result['status'], array( 'mail_sent', 'mail_failed' ) ) ) {
44
+ return;
45
+ }
46
+
47
+ $submission = WPCF7_Submission::get_instance();
48
+
49
+ $consented = true;
50
+
51
+ foreach ( $contact_form->scan_form_tags( 'feature=name-attr' ) as $tag ) {
52
+ if ( $tag->has_option( 'consent_for:sendinblue' )
53
+ and null == $submission->get_posted_data( $tag->name ) ) {
54
+ $consented = false;
55
+ break;
56
+ }
57
+ }
58
+
59
+ if ( ! $consented ) {
60
+ return;
61
+ }
62
+
63
+ $prop = wp_parse_args(
64
+ $contact_form->prop( 'sendinblue' ),
65
+ array(
66
+ 'enable_contact_list' => false,
67
+ 'contact_lists' => array(),
68
+ 'enable_transactional_email' => false,
69
+ 'email_template' => 0,
70
+ )
71
+ );
72
+
73
+ if ( ! $prop['enable_contact_list'] ) {
74
+ return;
75
+ }
76
+
77
+ $attributes = wpcf7_sendinblue_collect_parameters();
78
+
79
+ if ( empty( $attributes['EMAIL'] ) and empty( $attributes['SMS'] ) ) {
80
+ return;
81
+ }
82
+
83
+ $contact_id = $service->create_contact( array(
84
+ 'email' => $attributes['EMAIL'],
85
+ 'attributes' => (object) $attributes,
86
+ 'listIds' => (array) $prop['contact_lists'],
87
+ ) );
88
+
89
+ if ( ! $contact_id ) {
90
+ return;
91
+ }
92
+
93
+ if ( ! $prop['enable_transactional_email'] or ! $prop['email_template'] ) {
94
+ return;
95
+ }
96
+
97
+ $service->send_email( array(
98
+ 'templateId' => absint( $prop['email_template'] ),
99
+ 'to' => array(
100
+ array(
101
+ 'name' => sprintf(
102
+ '%1$s %2$s',
103
+ $attributes['FIRSTNAME'],
104
+ $attributes['LASTNAME']
105
+ ),
106
+ 'email' => $attributes['EMAIL'],
107
+ ),
108
+ ),
109
+ 'params' => (object) $attributes,
110
+ 'tags' => array( 'Contact Form 7' ),
111
+ ) );
112
+ }
113
+
114
+
115
+ function wpcf7_sendinblue_collect_parameters() {
116
+ $params = array();
117
+
118
+ $submission = WPCF7_Submission::get_instance();
119
+
120
+ foreach ( (array) $submission->get_posted_data() as $name => $val ) {
121
+ $name = strtoupper( $name );
122
+
123
+ if ( 'YOUR-' == substr( $name, 0, 5 ) ) {
124
+ $name = substr( $name, 5 );
125
+ }
126
+
127
+ if ( $val ) {
128
+ $params += array(
129
+ $name => $val,
130
+ );
131
+ }
132
+ }
133
+
134
+ if ( isset( $params['SMS'] ) ) {
135
+ $sms = implode( ' ', (array) $params['SMS'] );
136
+ $sms = trim( $sms );
137
+
138
+ $plus = '+' == substr( $sms, 0, 1 ) ? '+' : '';
139
+ $sms = preg_replace( '/[^0-9]/', '', $sms );
140
+
141
+ if ( 6 < strlen( $sms ) and strlen( $sms ) < 18 ) {
142
+ $params['SMS'] = $plus . $sms;
143
+ } else { // Invalid phone number
144
+ unset( $params['SMS'] );
145
+ }
146
+ }
147
+
148
+ if ( isset( $params['NAME'] ) ) {
149
+ $your_name = implode( ' ', (array) $params['NAME'] );
150
+ $your_name = explode( ' ', $your_name );
151
+
152
+ if ( ! isset( $params['LASTNAME'] ) ) {
153
+ $params['LASTNAME'] = implode(
154
+ ' ',
155
+ array_slice( $your_name, 1 )
156
+ );
157
+ }
158
+
159
+ if ( ! isset( $params['FIRSTNAME'] ) ) {
160
+ $params['FIRSTNAME'] = implode(
161
+ ' ',
162
+ array_slice( $your_name, 0, 1 )
163
+ );
164
+ }
165
+ }
166
+
167
+ $params = apply_filters(
168
+ 'wpcf7_sendinblue_collect_parameters',
169
+ $params
170
+ );
171
+
172
+ return $params;
173
+ }
modules/sendinblue/service.php ADDED
@@ -0,0 +1,381 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! class_exists( 'WPCF7_Service' ) ) {
4
+ return;
5
+ }
6
+
7
+ class WPCF7_Sendinblue extends WPCF7_Service {
8
+ use WPCF7_Sendinblue_API;
9
+
10
+ private static $instance;
11
+ private $api_key;
12
+
13
+ public static function get_instance() {
14
+ if ( empty( self::$instance ) ) {
15
+ self::$instance = new self;
16
+ }
17
+
18
+ return self::$instance;
19
+ }
20
+
21
+ private function __construct() {
22
+ $option = WPCF7::get_option( 'sendinblue' );
23
+
24
+ if ( isset( $option['api_key'] ) ) {
25
+ $this->api_key = $option['api_key'];
26
+ }
27
+ }
28
+
29
+ public function get_title() {
30
+ return __( 'Sendinblue', 'contact-form-7' );
31
+ }
32
+
33
+ public function is_active() {
34
+ return (bool) $this->get_api_key();
35
+ }
36
+
37
+ public function get_api_key() {
38
+ return $this->api_key;
39
+ }
40
+
41
+ public function get_categories() {
42
+ return array( 'email_marketing' );
43
+ }
44
+
45
+ public function icon() {
46
+ }
47
+
48
+ public function link() {
49
+ echo wpcf7_link(
50
+ 'https://www.sendinblue.com/?tap_a=30591-fb13f0&tap_s=1031580-b1bb1d',
51
+ 'sendinblue.com'
52
+ );
53
+ }
54
+
55
+ protected function log( $url, $request, $response ) {
56
+ wpcf7_log_remote_request( $url, $request, $response );
57
+ }
58
+
59
+ protected function menu_page_url( $args = '' ) {
60
+ $args = wp_parse_args( $args, array() );
61
+
62
+ $url = menu_page_url( 'wpcf7-integration', false );
63
+ $url = add_query_arg( array( 'service' => 'sendinblue' ), $url );
64
+
65
+ if ( ! empty( $args ) ) {
66
+ $url = add_query_arg( $args, $url );
67
+ }
68
+
69
+ return $url;
70
+ }
71
+
72
+ protected function save_data() {
73
+ WPCF7::update_option( 'sendinblue', array(
74
+ 'api_key' => $this->api_key,
75
+ ) );
76
+ }
77
+
78
+ protected function reset_data() {
79
+ $this->api_key = null;
80
+ $this->save_data();
81
+ }
82
+
83
+ public function load( $action = '' ) {
84
+ if ( 'setup' == $action and 'POST' == $_SERVER['REQUEST_METHOD'] ) {
85
+ check_admin_referer( 'wpcf7-sendinblue-setup' );
86
+
87
+ if ( ! empty( $_POST['reset'] ) ) {
88
+ $this->reset_data();
89
+ $redirect_to = $this->menu_page_url( 'action=setup' );
90
+ } else {
91
+ $this->api_key = isset( $_POST['api_key'] )
92
+ ? trim( $_POST['api_key'] )
93
+ : '';
94
+
95
+ $confirmed = $this->confirm_key();
96
+
97
+ if ( true === $confirmed ) {
98
+ $redirect_to = $this->menu_page_url( array(
99
+ 'message' => 'success',
100
+ ) );
101
+
102
+ $this->save_data();
103
+ } elseif ( false === $confirmed ) {
104
+ $redirect_to = $this->menu_page_url( array(
105
+ 'action' => 'setup',
106
+ 'message' => 'unauthorized',
107
+ ) );
108
+ } else {
109
+ $redirect_to = $this->menu_page_url( array(
110
+ 'action' => 'setup',
111
+ 'message' => 'invalid',
112
+ ) );
113
+ }
114
+ }
115
+
116
+ wp_safe_redirect( $redirect_to );
117
+ exit();
118
+ }
119
+ }
120
+
121
+ public function admin_notice( $message = '' ) {
122
+ if ( 'unauthorized' == $message ) {
123
+ echo sprintf(
124
+ '<div class="notice notice-error"><p><strong>%1$s</strong>: %2$s</p></div>',
125
+ esc_html( __( "Error", 'contact-form-7' ) ),
126
+ esc_html( __( "You have not been authenticated. Make sure the provided API key is correct.", 'contact-form-7' ) )
127
+ );
128
+ }
129
+
130
+ if ( 'invalid' == $message ) {
131
+ echo sprintf(
132
+ '<div class="notice notice-error"><p><strong>%1$s</strong>: %2$s</p></div>',
133
+ esc_html( __( "Error", 'contact-form-7' ) ),
134
+ esc_html( __( "Invalid key values.", 'contact-form-7' ) )
135
+ );
136
+ }
137
+
138
+ if ( 'success' == $message ) {
139
+ echo sprintf(
140
+ '<div class="notice notice-success"><p>%s</p></div>',
141
+ esc_html( __( 'Settings saved.', 'contact-form-7' ) )
142
+ );
143
+ }
144
+ }
145
+
146
+ public function display( $action = '' ) {
147
+ echo '<p>' . sprintf(
148
+ esc_html( __( "Store and organize your contacts while protecting user privacy on Sendinblue, the leading CRM & email marketing platform in Europe. Sendinblue offers unlimited contacts and advanced marketing features. For details, see %s.", 'contact-form-7' ) ),
149
+ wpcf7_link(
150
+ __( 'https://contactform7.com/sendinblue-integration/', 'contact-form-7' ),
151
+ __( 'Sendinblue integration', 'contact-form-7' )
152
+ )
153
+ ) . '</p>';
154
+
155
+ if ( $this->is_active() ) {
156
+ echo sprintf(
157
+ '<p class="dashicons-before dashicons-yes">%s</p>',
158
+ esc_html( __( "Sendinblue is active on this site.", 'contact-form-7' ) )
159
+ );
160
+ }
161
+
162
+ if ( 'setup' == $action ) {
163
+ $this->display_setup();
164
+ } else {
165
+ echo sprintf(
166
+ '<p><a href="%1$s" class="button">%2$s</a></p>',
167
+ esc_url( $this->menu_page_url( 'action=setup' ) ),
168
+ esc_html( __( 'Setup integration', 'contact-form-7' ) )
169
+ );
170
+ }
171
+ }
172
+
173
+ private function display_setup() {
174
+ $api_key = $this->get_api_key();
175
+
176
+ ?>
177
+ <form method="post" action="<?php echo esc_url( $this->menu_page_url( 'action=setup' ) ); ?>">
178
+ <?php wp_nonce_field( 'wpcf7-sendinblue-setup' ); ?>
179
+ <table class="form-table">
180
+ <tbody>
181
+ <tr>
182
+ <th scope="row"><label for="publishable"><?php echo esc_html( __( 'API key', 'contact-form-7' ) ); ?></label></th>
183
+ <td><?php
184
+ if ( $this->is_active() ) {
185
+ echo esc_html( wpcf7_mask_password( $api_key, 4, 8 ) );
186
+ echo sprintf(
187
+ '<input type="hidden" value="%s" id="api_key" name="api_key" />',
188
+ esc_attr( $api_key )
189
+ );
190
+ } else {
191
+ echo sprintf(
192
+ '<input type="text" aria-required="true" value="%s" id="api_key" name="api_key" class="regular-text code" />',
193
+ esc_attr( $api_key )
194
+ );
195
+ }
196
+ ?></td>
197
+ </tr>
198
+ </tbody>
199
+ </table>
200
+ <?php
201
+ if ( $this->is_active() ) {
202
+ submit_button(
203
+ _x( 'Remove key', 'API keys', 'contact-form-7' ),
204
+ 'small', 'reset'
205
+ );
206
+ } else {
207
+ submit_button( __( 'Save changes', 'contact-form-7' ) );
208
+ }
209
+ ?>
210
+ </form>
211
+ <?php
212
+ }
213
+ }
214
+
215
+
216
+ /**
217
+ * Trait for the Sendinblue API (v3).
218
+ *
219
+ * @link https://developers.sendinblue.com/reference
220
+ */
221
+ trait WPCF7_Sendinblue_API {
222
+
223
+
224
+ public function confirm_key() {
225
+ $endpoint = 'https://api.sendinblue.com/v3/account';
226
+
227
+ $request = array(
228
+ 'headers' => array(
229
+ 'Accept' => 'application/json',
230
+ 'Content-Type' => 'application/json; charset=utf-8',
231
+ 'API-Key' => $this->get_api_key(),
232
+ ),
233
+ );
234
+
235
+ $response = wp_remote_get( $endpoint, $request );
236
+ $response_code = (int) wp_remote_retrieve_response_code( $response );
237
+
238
+ if ( 200 === $response_code ) { // 200 OK
239
+ return true;
240
+ } elseif ( 401 === $response_code ) { // 401 Unauthorized
241
+ return false;
242
+ } elseif ( 400 <= $response_code ) {
243
+ if ( WP_DEBUG ) {
244
+ $this->log( $endpoint, $request, $response );
245
+ }
246
+ }
247
+ }
248
+
249
+
250
+ public function get_lists() {
251
+ $endpoint = add_query_arg(
252
+ array(
253
+ 'limit' => 50,
254
+ 'offset' => 0,
255
+ ),
256
+ 'https://api.sendinblue.com/v3/contacts/lists'
257
+ );
258
+
259
+ $request = array(
260
+ 'headers' => array(
261
+ 'Accept' => 'application/json',
262
+ 'Content-Type' => 'application/json; charset=utf-8',
263
+ 'API-Key' => $this->get_api_key(),
264
+ ),
265
+ );
266
+
267
+ $response = wp_remote_get( $endpoint, $request );
268
+ $response_code = (int) wp_remote_retrieve_response_code( $response );
269
+
270
+ if ( 200 === $response_code ) { // 200 OK
271
+ $response_body = wp_remote_retrieve_body( $response );
272
+ $response_body = json_decode( $response_body, true );
273
+
274
+ if ( empty( $response_body['lists'] ) ) {
275
+ return array();
276
+ } else {
277
+ return (array) $response_body['lists'];
278
+ }
279
+ } elseif ( 400 <= $response_code ) {
280
+ if ( WP_DEBUG ) {
281
+ $this->log( $endpoint, $request, $response );
282
+ }
283
+ }
284
+ }
285
+
286
+
287
+ public function get_templates() {
288
+ $endpoint = add_query_arg(
289
+ array(
290
+ 'templateStatus' => 'true',
291
+ 'limit' => 100,
292
+ 'offset' => 0,
293
+ ),
294
+ 'https://api.sendinblue.com/v3/smtp/templates'
295
+ );
296
+
297
+ $request = array(
298
+ 'headers' => array(
299
+ 'Accept' => 'application/json',
300
+ 'Content-Type' => 'application/json; charset=utf-8',
301
+ 'API-Key' => $this->get_api_key(),
302
+ ),
303
+ );
304
+
305
+ $response = wp_remote_get( $endpoint, $request );
306
+ $response_code = (int) wp_remote_retrieve_response_code( $response );
307
+
308
+ if ( 200 === $response_code ) { // 200 OK
309
+ $response_body = wp_remote_retrieve_body( $response );
310
+ $response_body = json_decode( $response_body, true );
311
+
312
+ if ( empty( $response_body['templates'] ) ) {
313
+ return array();
314
+ } else {
315
+ return (array) $response_body['templates'];
316
+ }
317
+ } elseif ( 400 <= $response_code ) {
318
+ if ( WP_DEBUG ) {
319
+ $this->log( $endpoint, $request, $response );
320
+ }
321
+ }
322
+ }
323
+
324
+
325
+ public function create_contact( $properties ) {
326
+ $endpoint = 'https://api.sendinblue.com/v3/contacts';
327
+
328
+ $request = array(
329
+ 'headers' => array(
330
+ 'Accept' => 'application/json',
331
+ 'Content-Type' => 'application/json; charset=utf-8',
332
+ 'API-Key' => $this->get_api_key(),
333
+ ),
334
+ 'body' => json_encode( $properties ),
335
+ );
336
+
337
+ $response = wp_remote_post( $endpoint, $request );
338
+ $response_code = (int) wp_remote_retrieve_response_code( $response );
339
+
340
+ if ( in_array( $response_code, array( 201, 204 ), true ) ) {
341
+ $contact_id = wp_remote_retrieve_body( $response );
342
+ return $contact_id;
343
+ } elseif ( 400 <= $response_code ) {
344
+ if ( WP_DEBUG ) {
345
+ $this->log( $endpoint, $request, $response );
346
+ }
347
+ }
348
+
349
+ return false;
350
+ }
351
+
352
+
353
+ public function send_email( $properties ) {
354
+ $endpoint = 'https://api.sendinblue.com/v3/smtp/email';
355
+
356
+ $request = array(
357
+ 'headers' => array(
358
+ 'Accept' => 'application/json',
359
+ 'Content-Type' => 'application/json; charset=utf-8',
360
+ 'API-Key' => $this->get_api_key(),
361
+ ),
362
+ 'body' => json_encode( $properties ),
363
+ );
364
+
365
+ $response = wp_remote_post( $endpoint, $request );
366
+ $response_code = (int) wp_remote_retrieve_response_code( $response );
367
+
368
+ if ( 201 === $response_code ) { // 201 Transactional email sent
369
+ $message_id = wp_remote_retrieve_body( $response );
370
+ return $message_id;
371
+ } elseif ( 400 <= $response_code ) {
372
+ if ( WP_DEBUG ) {
373
+ $this->log( $endpoint, $request, $response );
374
+ }
375
+ }
376
+
377
+ return false;
378
+ }
379
+
380
+
381
+ }
readme.txt CHANGED
@@ -2,9 +2,9 @@
2
  Contributors: takayukister
3
  Donate link: https://contactform7.com/donate/
4
  Tags: contact, form, contact form, feedback, email, ajax, captcha, akismet, multilingual
5
- Requires at least: 5.4
6
- Tested up to: 5.6
7
- Stable tag: 5.3.2
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -36,6 +36,7 @@ If you activate certain features in this plugin, the contact form submitter's pe
36
  * reCAPTCHA ([Google](https://policies.google.com/?hl=en))
37
  * Akismet ([Automattic](https://automattic.com/privacy/))
38
  * Constant Contact ([Endurance International Group](https://www.endurance.com/privacy))
 
39
 
40
  = Recommended plugins =
41
 
@@ -75,54 +76,8 @@ Do you have questions or issues with Contact Form 7? Use these support channels
75
 
76
  For more information, see [Releases](https://contactform7.com/category/releases/).
77
 
78
- = 5.3.2 =
79
 
80
- * Removes control, separator, and other types of special characters from filename to fix the unrestricted file upload vulnerability issue.
81
- * Akismet: Sets ISO 8601 date/time format for the `comment_date_gmt` parameter.
82
-
83
- = 5.3.1 =
84
-
85
- * Flamingo: Passes the `last_contacted` parameter based on the submission timestamp.
86
-
87
- = 5.3 =
88
-
89
- * Block Editor: Introduces the contact form selector block type.
90
- * Renames the 'images' directory to 'assets'.
91
- * New filter hook: `wpcf7_form_tag_date_option`.
92
- * Date: Makes all DateTime date formats available for `min` and `max` options.
93
- * Date: Converts the default value to Y-m-d date format string.
94
- * Disallowed list: Deprecates the `wpcf7_submission_is_blacklisted` filter hook in favor of `wpcf7_submission_has_disallowed_words`.
95
- * Accessibility: Sets the `aria-describedby` attribute for invalid fields.
96
- * Default form template: Removes the "(required)" labels from required fields. Adds "(optional)" to optional fields instead.
97
- * Default mail template: Uses site-related special mail-tags.
98
-
99
- = 5.2.2 =
100
-
101
- * Fixed: A REST API call aborted with a PHP fatal error when the `WPCF7_USE_PIPE` constant value was false.
102
- * Introduces the `wpcf7_doing_it_wrong()` function.
103
- * Sets the `trigger_error()` function’s `$error_type` parameter explicitly.
104
- * Makes the `wpcf7_special_mail_tags` filter functions’ `$mail_tag` parameter optional.
105
-
106
- = 5.2.1 =
107
-
108
- * Makes the [contact-form-7 404 "Not Found"] message localizable.
109
- * REST API: Adds the `permission_callback` argument to every endpoint definition.
110
- * Flamingo: Uses `id()` instead of `id`, if available.
111
- * Fixed: The `free_text` option did not work correctly with the `exclusive` option.
112
- * Applies `wpcf7_mail_tag_replaced` filters even when the `$posted_data` is null.
113
- * Adds custom mail-tag replacement for quiz fields.
114
- * Admin: Updates the date column format in the list table.
115
-
116
- = 5.2 =
117
-
118
- * Submission: Introduces the `$posted_data_hash` and `$skip_spam_check` properties.
119
- * Submission: Introduces the `wpcf7_skip_spam_check` filter hook.
120
- * Contact form: Introduces the `pref()` method.
121
- * REST API: Adds parsed form-tags data to the response.
122
- * REST API: Deprecates the `wpcf7_ajax_json_echo` and `wpcf7_ajax_onload` filter hooks and introduces the `wpcf7_feedback_response` and `wpcf7_refill_response` filter hooks as alternatives.
123
- * Frontend CSS: Style rules for the response output refer to the `form` element’s `class` attribute.
124
- * Frontend JavaScript: Abolishes the use of jQuery events.
125
- * reCAPTCHA: Moves script code to a separate file.
126
- * reCAPTCHA: Changes the name of the field for reCAPTCHA response token from `g-recaptcha-response` to `_wpcf7_recaptcha_response`.
127
 
128
  == Upgrade Notice ==
2
  Contributors: takayukister
3
  Donate link: https://contactform7.com/donate/
4
  Tags: contact, form, contact form, feedback, email, ajax, captcha, akismet, multilingual
5
+ Requires at least: 5.5
6
+ Tested up to: 5.7
7
+ Stable tag: 5.4
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
 
36
  * reCAPTCHA ([Google](https://policies.google.com/?hl=en))
37
  * Akismet ([Automattic](https://automattic.com/privacy/))
38
  * Constant Contact ([Endurance International Group](https://www.endurance.com/privacy))
39
+ * [Sendinblue](https://www.sendinblue.com/legal/privacypolicy/)
40
 
41
  = Recommended plugins =
42
 
76
 
77
  For more information, see [Releases](https://contactform7.com/category/releases/).
78
 
79
+ = 5.4 =
80
 
81
+ https://contactform7.com/contact-form-7-54/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
  == Upgrade Notice ==
wp-contact-form-7.php CHANGED
@@ -7,12 +7,12 @@ Author: Takayuki Miyoshi
7
  Author URI: https://ideasilo.wordpress.com/
8
  Text Domain: contact-form-7
9
  Domain Path: /languages/
10
- Version: 5.3.2
11
  */
12
 
13
- define( 'WPCF7_VERSION', '5.3.2' );
14
 
15
- define( 'WPCF7_REQUIRED_WP_VERSION', '5.4' );
16
 
17
  define( 'WPCF7_TEXT_DOMAIN', 'contact-form-7' );
18
 
7
  Author URI: https://ideasilo.wordpress.com/
8
  Text Domain: contact-form-7
9
  Domain Path: /languages/
10
+ Version: 5.4
11
  */
12
 
13
+ define( 'WPCF7_VERSION', '5.4' );
14
 
15
+ define( 'WPCF7_REQUIRED_WP_VERSION', '5.5' );
16
 
17
  define( 'WPCF7_TEXT_DOMAIN', 'contact-form-7' );
18