Event Tickets - Version 5.4.4

Version Description

Download this release

Release Info

Developer bordoni
Plugin Icon 128x128 Event Tickets
Version 5.4.4
Comparing to
See all releases

Code changes from version 5.4.3.1 to 5.4.4

Files changed (55) hide show
  1. common/lang/tribe-common.pot +49 -29
  2. common/src/Tribe/Admin/Settings.php +82 -0
  3. common/src/Tribe/Field.php +79 -0
  4. common/src/Tribe/Main.php +25 -1
  5. common/src/Tribe/Repository/Query_Filters.php +1 -1
  6. common/src/Tribe/Tracker.php +4 -0
  7. common/src/Tribe/Validate.php +14 -0
  8. common/src/resources/css/tribe-common-admin.min.css +1 -1
  9. common/src/resources/images/welcome/tickets-commerce.png +0 -0
  10. common/src/resources/js/admin-color-field.js +57 -0
  11. common/src/resources/js/admin-color-field.min.js +1 -0
  12. common/src/resources/js/admin-image-field.js +172 -0
  13. common/src/resources/js/admin-image-field.min.js +1 -0
  14. common/vendor/autoload.php +1 -1
  15. common/vendor/autoload_52.php +1 -1
  16. common/vendor/composer/autoload_classmap.php +1 -0
  17. common/vendor/composer/autoload_real.php +4 -4
  18. common/vendor/composer/autoload_real_52.php +3 -3
  19. common/vendor/composer/autoload_static.php +6 -5
  20. event-tickets.php +2 -2
  21. lang/event-tickets-nl_NL.mo +0 -0
  22. lang/event-tickets-ro_RO.mo +0 -0
  23. lang/event-tickets.pot +163 -160
  24. readme.txt +17 -1
  25. src/Tickets/Commerce/Admin_Tables/Orders.php +31 -0
  26. src/Tickets/Commerce/Gateways/Stripe/Payment_Intent_Handler.php +43 -6
  27. src/Tickets/Commerce/Order.php +1 -0
  28. src/Tickets/Commerce/Repositories/Order_Repository.php +261 -0
  29. src/Tickets/Commerce/Ticket.php +13 -0
  30. src/Tribe/Attendee_Repository.php +230 -3
  31. src/Tribe/Attendees_Table.php +52 -0
  32. src/Tribe/Editor/Blocks/Rsvp.php +1 -1
  33. src/Tribe/Editor/Compatibility/Tickets.php +1 -0
  34. src/Tribe/Editor/Template/Overwrite.php +5 -0
  35. src/Tribe/Main.php +1 -1
  36. src/Tribe/REST/V1/Attendee_Repository.php +7 -11
  37. src/Tribe/REST/V1/Endpoints/Attendee_Archive.php +16 -22
  38. src/Tribe/REST/V1/Endpoints/Single_Attendee.php +12 -12
  39. src/Tribe/REST/V1/Endpoints/Ticket_Archive.php +3 -3
  40. src/Tribe/REST/V1/Main.php +78 -3
  41. src/Tribe/REST/V1/Post_Repository.php +9 -9
  42. src/Tribe/REST/V1/Service_Provider.php +10 -6
  43. src/Tribe/RSVP.php +31 -23
  44. src/Tribe/Tickets.php +9 -5
  45. src/admin-views/admin-welcome-message.php +18 -5
  46. src/resources/css/tickets-report.css +1 -1
  47. src/resources/css/tickets-report.min.css +1 -1
  48. src/resources/js/v2/__tests__/tickets-utils.test.js +24 -0
  49. src/resources/js/v2/tickets-block.js +23 -14
  50. src/resources/js/v2/tickets-utils.js +25 -0
  51. src/resources/postcss/tickets-report.pcss +1 -1
  52. src/views/v2/tickets/item/inactive.php +1 -1
  53. vendor/autoload.php +1 -1
  54. vendor/composer/autoload_real.php +4 -4
  55. vendor/composer/autoload_static.php +4 -4
common/lang/tribe-common.pot CHANGED
@@ -2,13 +2,13 @@
2
  # This file is distributed under the same license as the Tribe Common package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Tribe Common 4.15.4\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
- "POT-Creation-Date: 2022-07-19 15:31:51+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2022-07-19 15:31\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
@@ -58,7 +58,7 @@ msgctxt "Error status label for system info optin"
58
  msgid "Status:"
59
  msgstr ""
60
 
61
- #. #-#-#-#-# tribe-common.pot (Tribe Common 4.15.4) #-#-#-#-#
62
  #. Author of the plugin/theme
63
  #: src/Tribe/Admin/Help_Page.php:116 src/Tribe/Customizer.php:664
64
  #: src/Tribe/Plugins_API.php:25 src/admin-views/help-calendar.php:97
@@ -1091,22 +1091,38 @@ msgid ""
1091
  "and you should likely delete it."
1092
  msgstr ""
1093
 
1094
- #: src/Tribe/Field.php:235
1095
  msgid "Invalid field type specified"
1096
  msgstr ""
1097
 
1098
- #: src/Tribe/Field.php:545
1099
  msgid "No radio options specified"
1100
  msgstr ""
1101
 
1102
- #: src/Tribe/Field.php:581
1103
  msgid "No checkbox options specified"
1104
  msgstr ""
1105
 
1106
- #: src/Tribe/Field.php:643
1107
  msgid "No select options specified"
1108
  msgstr ""
1109
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1110
  #: src/Tribe/Languages/Locations.php:79
1111
  msgid "United States"
1112
  msgstr ""
@@ -2327,87 +2343,87 @@ msgstr ""
2327
  msgid "Full debug (all events)"
2328
  msgstr ""
2329
 
2330
- #: src/Tribe/Main.php:354
2331
  msgid ": activate to sort column ascending"
2332
  msgstr ""
2333
 
2334
- #: src/Tribe/Main.php:355
2335
  msgid ": activate to sort column descending"
2336
  msgstr ""
2337
 
2338
- #: src/Tribe/Main.php:357
2339
  msgid "Show _MENU_ entries"
2340
  msgstr ""
2341
 
2342
- #: src/Tribe/Main.php:358
2343
  msgid "No data available in table"
2344
  msgstr ""
2345
 
2346
- #: src/Tribe/Main.php:359
2347
  msgid "Showing _START_ to _END_ of _TOTAL_ entries"
2348
  msgstr ""
2349
 
2350
- #: src/Tribe/Main.php:360
2351
  msgid "Showing 0 to 0 of 0 entries"
2352
  msgstr ""
2353
 
2354
- #: src/Tribe/Main.php:361
2355
  msgid "(filtered from _MAX_ total entries)"
2356
  msgstr ""
2357
 
2358
- #: src/Tribe/Main.php:362
2359
  msgid "No matching records found"
2360
  msgstr ""
2361
 
2362
- #: src/Tribe/Main.php:363
2363
  msgid "Search:"
2364
  msgstr ""
2365
 
2366
- #: src/Tribe/Main.php:364
2367
  msgid "All items on this page were selected. "
2368
  msgstr ""
2369
 
2370
- #: src/Tribe/Main.php:365
2371
  msgid "Select all pages"
2372
  msgstr ""
2373
 
2374
- #: src/Tribe/Main.php:366
2375
  msgid "Clear Selection."
2376
  msgstr ""
2377
 
2378
- #: src/Tribe/Main.php:368
2379
  msgid "All"
2380
  msgstr ""
2381
 
2382
- #: src/Tribe/Main.php:369 src/Tribe/Main.php:386
2383
  msgid "Next"
2384
  msgstr ""
2385
 
2386
- #: src/Tribe/Main.php:370
2387
  msgid "Previous"
2388
  msgstr ""
2389
 
2390
- #: src/Tribe/Main.php:375
2391
  msgid ": Selected %d rows"
2392
  msgstr ""
2393
 
2394
- #: src/Tribe/Main.php:376
2395
  msgid ": Selected 1 row"
2396
  msgstr ""
2397
 
2398
- #: src/Tribe/Main.php:387
2399
  msgid "Prev"
2400
  msgstr ""
2401
 
2402
- #: src/Tribe/Main.php:388 src/Tribe/Main.php:390
2403
  msgid "Today"
2404
  msgstr ""
2405
 
2406
- #: src/Tribe/Main.php:389
2407
  msgid "Done"
2408
  msgstr ""
2409
 
2410
- #: src/Tribe/Main.php:391
2411
  msgid "Clear"
2412
  msgstr ""
2413
 
@@ -3113,6 +3129,10 @@ msgstr ""
3113
  msgid "%s must be an email address."
3114
  msgstr ""
3115
 
 
 
 
 
3116
  #: src/Tribe/View_Helpers.php:59
3117
  msgid "Select a Country:"
3118
  msgstr ""
2
  # This file is distributed under the same license as the Tribe Common package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Tribe Common 4.15.5\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
+ "POT-Creation-Date: 2022-08-11 05:07:49+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2022-08-11 05:07\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
58
  msgid "Status:"
59
  msgstr ""
60
 
61
+ #. #-#-#-#-# tribe-common.pot (Tribe Common 4.15.5) #-#-#-#-#
62
  #. Author of the plugin/theme
63
  #: src/Tribe/Admin/Help_Page.php:116 src/Tribe/Customizer.php:664
64
  #: src/Tribe/Plugins_API.php:25 src/admin-views/help-calendar.php:97
1091
  "and you should likely delete it."
1092
  msgstr ""
1093
 
1094
+ #: src/Tribe/Field.php:240
1095
  msgid "Invalid field type specified"
1096
  msgstr ""
1097
 
1098
+ #: src/Tribe/Field.php:550
1099
  msgid "No radio options specified"
1100
  msgstr ""
1101
 
1102
+ #: src/Tribe/Field.php:586
1103
  msgid "No checkbox options specified"
1104
  msgstr ""
1105
 
1106
+ #: src/Tribe/Field.php:648
1107
  msgid "No select options specified"
1108
  msgstr ""
1109
 
1110
+ #: src/Tribe/Field.php:750
1111
+ msgid "Select Image"
1112
+ msgstr ""
1113
+
1114
+ #: src/Tribe/Field.php:751
1115
+ msgid "Remove Image"
1116
+ msgstr ""
1117
+
1118
+ #: src/Tribe/Field.php:755
1119
+ msgid "Select an image"
1120
+ msgstr ""
1121
+
1122
+ #: src/Tribe/Field.php:756
1123
+ msgid "Use this image"
1124
+ msgstr ""
1125
+
1126
  #: src/Tribe/Languages/Locations.php:79
1127
  msgid "United States"
1128
  msgstr ""
2343
  msgid "Full debug (all events)"
2344
  msgstr ""
2345
 
2346
+ #: src/Tribe/Main.php:378
2347
  msgid ": activate to sort column ascending"
2348
  msgstr ""
2349
 
2350
+ #: src/Tribe/Main.php:379
2351
  msgid ": activate to sort column descending"
2352
  msgstr ""
2353
 
2354
+ #: src/Tribe/Main.php:381
2355
  msgid "Show _MENU_ entries"
2356
  msgstr ""
2357
 
2358
+ #: src/Tribe/Main.php:382
2359
  msgid "No data available in table"
2360
  msgstr ""
2361
 
2362
+ #: src/Tribe/Main.php:383
2363
  msgid "Showing _START_ to _END_ of _TOTAL_ entries"
2364
  msgstr ""
2365
 
2366
+ #: src/Tribe/Main.php:384
2367
  msgid "Showing 0 to 0 of 0 entries"
2368
  msgstr ""
2369
 
2370
+ #: src/Tribe/Main.php:385
2371
  msgid "(filtered from _MAX_ total entries)"
2372
  msgstr ""
2373
 
2374
+ #: src/Tribe/Main.php:386
2375
  msgid "No matching records found"
2376
  msgstr ""
2377
 
2378
+ #: src/Tribe/Main.php:387
2379
  msgid "Search:"
2380
  msgstr ""
2381
 
2382
+ #: src/Tribe/Main.php:388
2383
  msgid "All items on this page were selected. "
2384
  msgstr ""
2385
 
2386
+ #: src/Tribe/Main.php:389
2387
  msgid "Select all pages"
2388
  msgstr ""
2389
 
2390
+ #: src/Tribe/Main.php:390
2391
  msgid "Clear Selection."
2392
  msgstr ""
2393
 
2394
+ #: src/Tribe/Main.php:392
2395
  msgid "All"
2396
  msgstr ""
2397
 
2398
+ #: src/Tribe/Main.php:393 src/Tribe/Main.php:410
2399
  msgid "Next"
2400
  msgstr ""
2401
 
2402
+ #: src/Tribe/Main.php:394
2403
  msgid "Previous"
2404
  msgstr ""
2405
 
2406
+ #: src/Tribe/Main.php:399
2407
  msgid ": Selected %d rows"
2408
  msgstr ""
2409
 
2410
+ #: src/Tribe/Main.php:400
2411
  msgid ": Selected 1 row"
2412
  msgstr ""
2413
 
2414
+ #: src/Tribe/Main.php:411
2415
  msgid "Prev"
2416
  msgstr ""
2417
 
2418
+ #: src/Tribe/Main.php:412 src/Tribe/Main.php:414
2419
  msgid "Today"
2420
  msgstr ""
2421
 
2422
+ #: src/Tribe/Main.php:413
2423
  msgid "Done"
2424
  msgstr ""
2425
 
2426
+ #: src/Tribe/Main.php:415
2427
  msgid "Clear"
2428
  msgstr ""
2429
 
3129
  msgid "%s must be an email address."
3130
  msgstr ""
3131
 
3132
+ #: src/Tribe/Validate.php:512
3133
+ msgid "%s must be a valid HTML color code."
3134
+ msgstr ""
3135
+
3136
  #: src/Tribe/View_Helpers.php:59
3137
  msgid "Select a Country:"
3138
  msgstr ""
common/src/Tribe/Admin/Settings.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Tribe\Admin;
4
+
5
+ /**
6
+ * Admin Settings class.
7
+ *
8
+ * @since TBD
9
+ */
10
+
11
+ class Settings {
12
+
13
+ /**
14
+ * Loaded image field assets if not already loaded.
15
+ *
16
+ * @since TBD
17
+ *
18
+ * @return void
19
+ */
20
+ public function maybe_load_image_field_assets() {
21
+ if ( has_filter( 'tec_admin_load_image_fields_assets', '__return_true' ) ) {
22
+ return;
23
+ }
24
+ add_filter( 'tec_admin_load_image_fields_assets', '__return_true' );
25
+ }
26
+
27
+ /**
28
+ * Logic to load image field assets.
29
+ *
30
+ * @since TBD
31
+ *
32
+ * @return bool
33
+ */
34
+ public function should_load_image_field_assets() {
35
+ /**
36
+ * Filters whether or not we should load the image field assets on the settings page.
37
+ *
38
+ * @since TBD
39
+ *
40
+ * @param boolean $return True or false whether to load image field assets.
41
+ */
42
+ $load_assets = apply_filters( 'tec_admin_load_image_fields_assets', false );
43
+ if ( $load_assets ) {
44
+ wp_enqueue_media();
45
+ }
46
+ return $load_assets;
47
+ }
48
+
49
+ /**
50
+ * Load color field assets if not already loaded.
51
+ *
52
+ * @since TBD
53
+ *
54
+ * @return void
55
+ */
56
+ public function maybe_load_color_field_assets() {
57
+ if ( has_filter( 'tec_admin_load_color_field_assets', '__return_true' ) ) {
58
+ return;
59
+ }
60
+ add_filter( 'tec_admin_load_color_field_assets', '__return_true' );
61
+ }
62
+
63
+ /**
64
+ * Logic to load color field assets.
65
+ *
66
+ * @since TBD
67
+ *
68
+ * @return bool
69
+ */
70
+ public function should_load_color_field_assets() {
71
+ /**
72
+ * Filters whether or not we should load the color field assets on the settings page.
73
+ *
74
+ * @since TBD
75
+ *
76
+ * @param boolean $return True or false whether to load color field assets.
77
+ */
78
+ $load_assets = apply_filters( 'tec_admin_load_color_field_assets', false );
79
+ return $load_assets;
80
+ }
81
+
82
+ }
common/src/Tribe/Field.php CHANGED
@@ -1,6 +1,9 @@
1
  <?php
2
 
3
  // Don't load directly
 
 
 
4
  if ( ! defined( 'ABSPATH' ) ) {
5
  die( '-1' );
6
  }
@@ -110,6 +113,8 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
110
  'number',
111
  'wrapped_html',
112
  'email',
 
 
113
  ];
114
 
115
  $this->valid_field_types = apply_filters( 'tribe_valid_field_types', $this->valid_field_types );
@@ -702,6 +707,80 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
702
  return $field;
703
  }
704
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
705
  /* deprecated camelCase methods */
706
  public function doField() {
707
  _deprecated_function( __METHOD__, '4.3', __CLASS__ . '::do_field' );
1
  <?php
2
 
3
  // Don't load directly
4
+
5
+ use Tribe\Admin\Settings;
6
+
7
  if ( ! defined( 'ABSPATH' ) ) {
8
  die( '-1' );
9
  }
113
  'number',
114
  'wrapped_html',
115
  'email',
116
+ 'color',
117
+ 'image',
118
  ];
119
 
120
  $this->valid_field_types = apply_filters( 'tribe_valid_field_types', $this->valid_field_types );
707
  return $field;
708
  }
709
 
710
+ /**
711
+ * Generate a color field.
712
+ *
713
+ * @since TBD
714
+ *
715
+ * @return string The field.
716
+ */
717
+ public function color() {
718
+
719
+ tribe( Settings::class )->maybe_load_color_field_assets();
720
+
721
+ $field = $this->do_field_start();
722
+ $field .= $this->do_field_label();
723
+ $field .= $this->do_field_div_start();
724
+ $field .= '<input';
725
+ $field .= ' type="text"';
726
+ $field .= ' class="tec-admin__settings-color-field-input"';
727
+ $field .= $this->do_field_name();
728
+ $field .= $this->do_field_value();
729
+ $field .= $this->do_field_attributes();
730
+ $field .= '/>';
731
+ $field .= $this->do_screen_reader_label();
732
+ $field .= $this->do_field_div_end();
733
+ $field .= $this->do_field_end();
734
+
735
+ return $field;
736
+ }
737
+
738
+ /**
739
+ * Generate an image field.
740
+ *
741
+ * @since TBD
742
+ *
743
+ * @return string The field.
744
+ */
745
+ public function image() {
746
+
747
+ tribe( Settings::class )->maybe_load_image_field_assets();
748
+
749
+ $image_exists = ! empty( $this->value );
750
+ $upload_image_text = esc_html__( 'Select Image', 'tribe-common' );
751
+ $remove_image_text = esc_html__( 'Remove Image', 'tribe-common' );
752
+
753
+ // Add default fieldset attributes if none exist.
754
+ $image_fieldset_attributes = [
755
+ 'data-select-image-text' => esc_html__( 'Select an image', 'tribe-common' ),
756
+ 'data-use-image-text' => esc_html__( 'Use this image', 'tribe-common' ),
757
+ ];
758
+ $this->fieldset_attributes = array_merge( $image_fieldset_attributes, $this->fieldset_attributes );
759
+
760
+ $field = $this->do_field_start();
761
+ $field .= $this->do_field_label();
762
+ $field .= $this->do_field_div_start();
763
+ $field .= '<input';
764
+ $field .= ' type="hidden"';
765
+ $field .= ' class="tec-admin__settings-image-field-input"';
766
+ $field .= $this->do_field_name();
767
+ $field .= $this->do_field_value();
768
+ $field .= $this->do_field_attributes();
769
+ $field .= '/>';
770
+ $field .= '<button type="button" class="button tec-admin__settings-image-field-btn-add">' . $upload_image_text . '</button>';
771
+ $field .= '<div class="tec-admin__settings-image-field-image-container hidden">';
772
+ if ( $image_exists ) {
773
+ $field .= '<img src="' . esc_url( $this->value ) . '" />';
774
+ }
775
+ $field .= '</div>';
776
+ $field .= '<button class="tec-admin__settings-image-field-btn-remove hidden">' . $remove_image_text . '</button>';
777
+ $field .= $this->do_screen_reader_label();
778
+ $field .= $this->do_field_div_end();
779
+ $field .= $this->do_field_end();
780
+
781
+ return $field;
782
+ }
783
+
784
  /* deprecated camelCase methods */
785
  public function doField() {
786
  _deprecated_function( __METHOD__, '4.3', __CLASS__ . '::do_field' );
common/src/Tribe/Main.php CHANGED
@@ -5,6 +5,7 @@
5
 
6
  // Don't load directly
7
 
 
8
  use Tribe\DB_Lock;
9
 
10
  if ( ! defined( 'ABSPATH' ) ) {
@@ -20,7 +21,7 @@ class Tribe__Main {
20
  const OPTIONNAME = 'tribe_events_calendar_options';
21
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
22
 
23
- const VERSION = '4.15.4.1';
24
  const FEED_URL = 'https://theeventscalendar.com/feed/';
25
 
26
  protected $plugin_context;
@@ -286,6 +287,17 @@ class Tribe__Main {
286
  ]
287
  );
288
 
 
 
 
 
 
 
 
 
 
 
 
289
  // Register the asset for Customizer controls.
290
  tribe_asset(
291
  $this,
@@ -295,6 +307,18 @@ class Tribe__Main {
295
  'customize_controls_print_styles'
296
  );
297
 
 
 
 
 
 
 
 
 
 
 
 
 
298
  tribe( Tribe__Admin__Help_Page::class )->register_assets();
299
  }
300
 
5
 
6
  // Don't load directly
7
 
8
+ use Tribe\Admin\Settings;
9
  use Tribe\DB_Lock;
10
 
11
  if ( ! defined( 'ABSPATH' ) ) {
21
  const OPTIONNAME = 'tribe_events_calendar_options';
22
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
23
 
24
+ const VERSION = '4.15.5';
25
  const FEED_URL = 'https://theeventscalendar.com/feed/';
26
 
27
  protected $plugin_context;
287
  ]
288
  );
289
 
290
+ tribe_asset(
291
+ $this,
292
+ 'tec-admin-settings-image-field',
293
+ 'admin-image-field.js',
294
+ [ 'jquery' ],
295
+ 'in_admin_footer',
296
+ [
297
+ 'conditionals' => [ tribe( Settings::class ), 'should_load_image_field_assets' ]
298
+ ]
299
+ );
300
+
301
  // Register the asset for Customizer controls.
302
  tribe_asset(
303
  $this,
307
  'customize_controls_print_styles'
308
  );
309
 
310
+ // Register the asset for color fields.
311
+ tribe_asset(
312
+ $this,
313
+ 'tec-settings-color-field',
314
+ 'admin-color-field.js',
315
+ [ 'jquery', 'wp-color-picker' ],
316
+ 'admin_footer',
317
+ [
318
+ 'conditionals' => [ tribe( Settings::class ), 'should_load_color_field_assets' ]
319
+ ]
320
+ );
321
+
322
  tribe( Tribe__Admin__Help_Page::class )->register_assets();
323
  }
324
 
common/src/Tribe/Repository/Query_Filters.php CHANGED
@@ -1012,7 +1012,7 @@ class Tribe__Repository__Query_Filters {
1012
  $frags[] = implode( ', ', array_map( $build_entry, $this->query_vars[ static::AFTER . 'orderby' ] ) );
1013
  }
1014
 
1015
- return implode( ', ', $frags );
1016
  }
1017
 
1018
  /**
1012
  $frags[] = implode( ', ', array_map( $build_entry, $this->query_vars[ static::AFTER . 'orderby' ] ) );
1013
  }
1014
 
1015
+ return implode( ', ', array_filter( $frags ) );
1016
  }
1017
 
1018
  /**
common/src/Tribe/Tracker.php CHANGED
@@ -282,8 +282,12 @@ class Tribe__Tracker {
282
  // If we got here we will update the Modified Meta
283
  $modified[ $meta_key ] = $now;
284
 
 
 
285
  // Actually do the Update
286
  update_post_meta( $post->ID, self::$field_key, $modified );
 
 
287
 
288
  // We need to return this, because we are still on a filter
289
  return $check;
282
  // If we got here we will update the Modified Meta
283
  $modified[ $meta_key ] = $now;
284
 
285
+ // Avoid loops!
286
+ remove_filter( 'update_post_metadata', [ $this, 'filter_watch_updated_meta' ], PHP_INT_MAX - 1 );
287
  // Actually do the Update
288
  update_post_meta( $post->ID, self::$field_key, $modified );
289
+ // Safe to filter again.
290
+ add_filter( 'update_post_metadata', [ $this, 'filter_watch_updated_meta' ], PHP_INT_MAX - 1, 5 );
291
 
292
  // We need to return this, because we are still on a filter
293
  return $check;
common/src/Tribe/Validate.php CHANGED
@@ -499,5 +499,19 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
499
  }
500
  }
501
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
502
  } // end class
503
  } // endif class_exists
499
  }
500
  }
501
 
502
+ /**
503
+ * Validates and sanitizes a HTML color codes, including hex, rgb, rgba, hsl and hsla.
504
+ *
505
+ * @since TBD
506
+ */
507
+ public function color() {
508
+ if ( preg_match( '/^(#(?:[0-9a-f]{2}){2,4}|#[0-9a-f]{3}|(?:rgba?|hsla?)\((?:\d+%?(?:deg|rad|grad|turn)?(?:,|\s)+){2,3}[\s\/]*[\d\.]+%?\))$/i', $this->value ) ) {
509
+ $this->result->valid = true;
510
+ } else {
511
+ $this->result->valid = false;
512
+ $this->result->error = sprintf( esc_html__( '%s must be a valid HTML color code.', 'tribe-common' ), $this->label );
513
+ }
514
+ }
515
+
516
  } // end class
517
  } // endif class_exists
common/src/resources/css/tribe-common-admin.min.css CHANGED
@@ -1 +1 @@
1
- .invalid input,input:out-of-range{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input::placeholder,textarea::placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia,serif!important;font-size:17px!important;font-weight:400;margin:8px 0}.tribe-rating{color:#3d54ff}.tribe-rating:hover{color:#1c39bb}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label>p,.tribe-settings-form .tribe-field-radio label>p{margin-left:1px;text-indent:0}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.tribe-settings-form .tribe-settings-form-wrap #tribe-field-stylesheetOption .description{color:#999;margin-left:1px}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}#modern-tribe-info{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{margin:10px 0}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:alpha(opacity=50);opacity:.5}.ui-widget-shadow{background:#000;border-radius:5px;filter:alpha(opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none!important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}#ui-datepicker-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page{max-width:850px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p{font-size:15px}p.tribe-update-message{font-size:18px;font-weight:400}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}a.tribe-rating-link{text-decoration:none}.tribe-update-links{margin-top:30px}.tribe_update_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-events-widget-admin-form__input-section p{margin:0}.tribe-events-widget-admin-form__input-section h4{margin:.5em 0}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#7ad03a;height:1rem;width:1%}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;height:300px;overflow-y:scroll}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{min-height:100px;padding:1em}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;height:100%;max-height:150px;max-width:150px;vertical-align:middle;width:auto}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-marketing-notice__icon{display:none;flex-shrink:0;padding:0;position:static}.tribe-marketing-notice .tribe-marketing-notice__icon img{display:inline-block;max-height:100%;max-width:none;vertical-align:middle;width:100%}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}.notice-tribe-banner .tribe-marketing-notice__icon{width:47px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:0;padding:1em 0}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice{min-height:50px}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__content{align-content:center;display:flex;flex-wrap:wrap;justify-content:center;margin:auto}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__icon{align-self:baseline;height:20px;margin:auto 14px auto 0;width:13px}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__icon .tribe-common-c-svgicon--stellar-icon circle{stroke:#fff}.notice-tribe-banner.tribe-notice-stellar-sale .tec-stellar-sale-text{fill:#fff;height:16px;margin:unset;margin-top:.25em;stroke:#fff;width:176px}.notice-tribe-banner.tribe-notice-stellar-sale h3{font-weight:400;margin:auto 8px auto 14px;text-align:center}.notice-tribe-banner h3{color:#fff;display:block;font-size:.875rem;line-height:1.25;margin:0 0 .25rem}.notice-tribe-banner a{border-bottom:1px solid;line-height:1.25;margin:0;text-decoration:none}.notice-tribe-banner a:hover{text-decoration:none}.notice-tribe-banner a,.notice-tribe-banner p{color:#fff;display:inline-block;font-size:.875rem;line-height:1.25}.notice-tribe-banner p{display:inline-block;margin:0;padding:0}.notice-tribe-banner .tribe-marketing-notice{align-items:center;display:flex;justify-content:flex-start;margin:0 auto;min-height:65px;padding:0 .75rem;width:100%}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:100%}.notice-tribe-banner .notice-dismiss{position:static}.notice-tribe-banner .notice-dismiss:before{color:#eaf1ff}#wpcontent .notice-tribe-banner{align-items:center;background-color:#161b7d;border:0;box-shadow:none;display:flex;justify-content:flex-start;margin:0 0 16px;padding-right:0}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale{background-color:#000}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a{color:#d8ff00;text-transform:uppercase}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:active,#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:focus,#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:hover{color:#e6b1fc}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container .selection,.tribe-ea-dropdown.select2-container .selection{margin-top:inherit}.tribe-dropdown .select2-selection--single,.tribe-ea-dropdown .select2-selection--single{height:32px}.tribe-dropdown .select2-selection--single .select2-selection__clear,.tribe-ea-dropdown .select2-selection--single .select2-selection__clear{line-height:28px}.tribe-dropdown .select2-selection--single .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--single .select2-selection__rendered{line-height:32px;padding-right:28px}.tribe-dropdown.select2-container--focus .select2-selection--single,.tribe-ea-dropdown.select2-container--focus .select2-selection--single{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-container--open .select2-search__field,.tribe-ea-dropdown.select2-container--open .select2-search__field{padding:0}.tribe-dropdown.select2-container--open .select2-dropdown--below,.tribe-ea-dropdown.select2-container--open .select2-dropdown--below{border-top:1px solid #aaa;margin-top:-1px}.tribe-dropdown.select2-container--open .select2-dropdown--above,.tribe-ea-dropdown.select2-container--open .select2-dropdown--above{border-bottom:1px solid #aaa;margin-bottom:-16px}.tribe-dropdown.select2-container--open .select2-selection--single,.tribe-ea-dropdown.select2-container--open .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown.select2-container--open .select2-selection__arrow b,.tribe-ea-dropdown.select2-container--open .select2-selection__arrow b{transform:rotate(180deg)}.tribe-dropdown.select2-selection--single,.tribe-ea-dropdown.select2-selection--single{background-image:none;border:1px solid #ccc;border-radius:3px;overflow:hidden}.tribe-dropdown.select2-selection--single>.select2-selection__rendered,.tribe-ea-dropdown.select2-selection--single>.select2-selection__rendered{white-space:normal}.tribe-dropdown.select2-selection--single .select2-selection__arrow,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow{background:transparent;background-image:none;border-left:0;top:2px;width:26px}.tribe-dropdown.select2-selection--single .select2-selection__arrow b,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow b{background:#fff url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E") no-repeat right 5px top 55%;background-size:auto;background-size:16px 16px;border:0;bottom:0;display:block;height:auto;left:0;margin:0;padding:0;right:0;top:0;width:auto}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered{background-image:none;border:1px solid #ccc;border-radius:3px;min-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline{line-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input{padding-bottom:0;padding-top:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice{line-height:19px;margin-top:2px;padding-bottom:0;padding-top:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div{line-height:inherit}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove{left:4px;top:3px;transition-property:border,color}.select2-results .select2-results__option{color:#939393;font-weight:400;margin-bottom:0}.select2-results .select2-results__option[aria-disabled=true]{background-color:#e0e0e0}.select2-results.select2-results__option--highlighted{background-color:#efefef;color:#a1a1a1;cursor:default;display:block}.wp-core-ui .button-red{background-color:#a00;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;color:#e79496!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.ticket_form .select2-container .select2-selection--single .select2-selection__arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{border:solid #0ab152;border-width:0 3px 3px 0;content:"";display:block;height:15px;transform:rotate(45deg);width:8px}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}body.tec-help,body.tribe-welcome{background-color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.tec-help .update-nag,body.tribe-welcome .update-nag{display:none}body.tec-help #wpcontent,body.tribe-welcome #wpcontent{padding:0}body.tec-help .tribe_settings,body.tribe-welcome .tribe_settings{margin:0}body.tec-help #wpfooter,body.tec-help .tribe_settings>h1,body.tribe-welcome #wpfooter,body.tribe-welcome .tribe_settings>h1{display:none}body.tec-help #wpbody-content,body.tribe-welcome #wpbody-content{padding-bottom:25px}body.tec-help .tribe-dependency-error,body.tribe-welcome .tribe-dependency-error{display:none}.tribe-events-admin-content-wrapper{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;margin:0 auto;padding:0 0 30px;width:calc(100% - 40px)}.tribe-events-admin-card{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;display:block;margin:0 auto 36px;padding:27px;text-align:center}.tribe-events-admin-card--2up .tribe-events-admin-card__title{max-width:260px}.tribe-events-admin-card--3up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--3up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card__button{background-color:#fff;border:none;color:#3d54ff;font-size:14px;font-weight:700;letter-spacing:1px;line-height:16px;position:absolute;right:20px;text-transform:uppercase;top:17px}.tribe-events-admin-card__button:hover{color:#161b7d}.tribe-events-admin-card__description{color:#000;font-size:14px;font-style:normal;font-weight:400;line-height:22px;margin-top:16px}.tribe-events-admin-card__image{display:block;height:100px;margin:0 auto}.tribe-events-admin-card__link{color:#3d54ff;display:inline-block;font-size:16px;font-style:normal;font-weight:700;line-height:18px;margin-top:24px;position:relative;text-decoration:none}.tribe-events-admin-card__link:hover{color:#161b7d}.tribe-events-admin-card__link:after{border-style:solid;border-width:0 0 1px;bottom:-4px;content:"";left:0;position:absolute;width:100%}.tribe-events-admin-card__title{color:#0f1031;font-size:20px;font-weight:700;line-height:23px;margin:auto}.tribe-events-admin-card-grid{max-width:1048px}input[type=checkbox].tribe-common-switch__input{display:none}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label{background:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;cursor:pointer;display:block;height:18px;outline:0;padding:3px;position:relative;transition:all .2s ease;-webkit-user-select:none;user-select:none;width:27px}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:after,input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:before{content:"";display:block;height:10px;position:relative;width:10px}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:after{background:#878787;border-radius:2px;content:"";left:0;transition:all .2s ease}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:before{display:none}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label::selection{background:none}input[type=checkbox].tribe-common-switch__input:checked+.tribe-common-switch__label:after{background:#2e709d;left:50%}.tribe-events-admin-header__logo-word-mark{display:inline-block;height:auto;margin:0 0 26px;vertical-align:middle;width:312px}.tribe-events-admin-header{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:45px 0 0}.tribe-events-admin-header__right-image{height:280px;position:absolute;right:0;top:0;width:auto;z-index:-1}.tribe-events-admin-header__title{font-size:48px;line-height:48px;margin:0 0 18px}.tribe-events-admin-header__description{font-size:18px;line-height:28px;margin-bottom:44px;max-width:60%}.tribe-events-admin-tab-nav{display:flex;margin:0}.tribe-events-admin-tab-nav li{cursor:pointer;font-size:16px;font-weight:500;margin-bottom:0;margin-right:30px}.tribe-events-admin-tab-nav li:hover{color:#334aff}.tribe-events-admin-tab-nav .selected{border-bottom:3px solid currentColor;color:#334aff;padding-bottom:17px}.tribe-events-admin-tab-nav li:after{background:#334aff;border-radius:100px;bottom:0;content:"";display:block;height:3px;left:0;position:absolute;right:0}.tribe-events-admin__line{border-top:1px solid #e1e1e4}.tribe-events-admin-products-description{color:#0f1031;font-size:14px;line-height:2}.tribe-events-admin-products-card{align-items:center;border:1px solid #e1e1e4;border-radius:20px;display:flex;padding:10px 15px}.tribe-events-admin-products-card__icon{height:40px;object-fit:contain;width:40px}.tribe-events-admin-products-card__group{margin:0 20px;max-width:55%}.tribe-events-admin-products-card__group-title{color:#0f1031;font-size:16px;font-weight:700;line-height:1;margin:0}.tribe-events-admin-products-card__group-description{font-size:12px;margin-top:5px}.tribe-events-admin-products-card__button{background-color:#fff;border:1px solid #e1e1e4;border-radius:20px;color:#0f1031;font-size:12px;font-weight:700;letter-spacing:1px;line-height:16px;margin-left:auto;padding:10px 15px;text-decoration:none;text-transform:uppercase}.tribe-events-admin-products-card__button:hover{background-color:#334aff;color:#fff}.tribe-events-admin-products-card__button:active,.tribe-events-admin-products-card__button:focus{box-shadow:none;outline:none}.tribe-events-admin-products-card__button--active,.tribe-events-admin-products-card__button--active:active,.tribe-events-admin-products-card__button--active:focus,.tribe-events-admin-products-card__button--active:hover{background:rgba(61,84,255,.16);color:#334aff;cursor:not-allowed;text-transform:uppercase}.tribe-events-admin-card--1up{width:100%}.tribe-events-admin-card--no-pad{padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__image{display:block;height:152px;margin:0;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{font-size:28px;line-height:34px;text-align:left}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin:0;padding:0;text-align:left}.tribe-events-admin-card--no-pad .tribe-events-admin-card__link{margin:0;padding:0}.tribe-events-admin-card--faq{display:inline-block;font-size:0;height:147px;margin:0 0 0 30px;padding:24px 16px 22px 20px;width:230px}.tribe-events-admin-card--faq:first-child{margin-left:0}.tribe-events-admin-card--faq img{float:left;height:22px;width:16px}.tribe-events-admin-card--faq .tribe-events-admin-faq__question{color:#334aff;font-size:16px;line-height:19px;margin:0 0 12px 26px;text-align:left}.tribe-events-admin-card--faq .tribe-events-admin-faq__answer{font-size:13px;line-height:16px;margin-left:26px;text-align:left}.tribe-events-admin-video{border-radius:16px;height:200px;margin-bottom:72px;-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 0);overflow:hidden;-webkit-transform:rotate(.000001deg)}.tribe-events-admin-video iframe{width:100%}.tribe-events-admin-card--promo-blue{background-color:#3d54ff;background-image:url(../images/welcome/promo.jpg)}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{color:#fff;font-size:16px;margin-bottom:16px;text-align:left}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__title{color:#fff;text-align:left}.tribe-events-admin-graphic{position:absolute;right:0;top:106px;z-index:-1}.tribe-events-admin-graphic--desktop-only{display:none}.tribe-events-admin-graphic--mobile-only{display:block}.tribe-events-admin-card__form{position:relative}input[type=email].tribe-events-admin-card__input{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;font-size:14px;height:54px}input[type=email].tribe-events-admin-card__input::placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}.tribe-events-admin-container,.tribe-events-admin-content-wrapper.tribe-events-admin-container{margin:0 auto;max-width:1024px;width:90%}.tribe-events-admin-2col-grid{display:grid;grid-gap:15px 30px;gap:15px 30px;grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-3col-grid{display:grid;grid-gap:30px;gap:30px;grid-template-areas:". . .";grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-4col-grid{display:grid;grid-gap:30px;gap:30px;grid-template-areas:". . . .";grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-products{margin:10px 0 0}.tribe-events-admin-quick-nav{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;display:block;margin:40px 0 78px;padding:18px 23px 2px}.tribe-events-admin-quick-nav__link{color:#3d54ff;font-size:16px;font-weight:700;line-height:18px;text-align:center;text-decoration:none}.tribe-events-admin-quick-nav__link:hover{color:#161b7d}.tribe-events-admin-quick-nav__link-item{display:block;padding-bottom:19px}.tribe-events-admin-quick-nav__links{display:inline}.tribe-events-admin-quick-nav__title{color:rgba(15,16,49,.72);display:inline-block;font-size:14px;font-weight:400;line-height:16px;padding-bottom:14px;text-transform:uppercase}.tribe-events-admin-title{padding-top:14px}.tribe-events-admin-title__description{color:#0f1031;font-size:16px;font-weight:400;line-height:24px;max-width:584px;padding-top:15px}.tribe-events-admin-title__heading{color:#0f1031;display:inline-block;font-size:24px;font-weight:700;line-height:28px;margin:5px 0 0}.tribe-events-admin-title__logo{margin-right:8px;vertical-align:top;width:34px}.tribe-events-admin-notice{background-color:#3d54ff;height:65px}.tribe-events-admin-notice .tribe-events-admin-content-wrapper{padding-bottom:0;padding-top:8px}.tribe-events-admin-notice p{color:#fff;display:inline-block;font-family:Helvetica,sans-serif;font-size:16px;line-height:18px;margin-top:0;padding-bottom:12px;padding-left:16px;vertical-align:middle;width:calc(100% - 60px)}.tribe-events-admin-notice__logo{display:inline-block}.tribe-events-admin-tickets .tribe-events-admin-section-header{font-size:28px;line-height:32px}.tribe-events-admin-tickets .tribe-events-admin-graphic--desktop-only{width:365px}.tribe-events-admin-tickets .tribe-events-admin-graphic--mobile-only{top:230px;width:300px}.tribe-events-admin-tickets .tribe-events-admin-title__heading{margin-top:0}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:4px;width:32px}.tribe-events-admin-kb{margin:10px 0 0}.tribe-events-admin-kb-card{border:1px solid #e1e1e4;border-radius:20px}.tribe-events-admin-kb-card__image{height:auto;width:100%}.tribe-events-admin-kb-card__title{color:#0f1031;flex-grow:0;font-size:20px;font-weight:700;line-height:1.2;margin:0;padding:20px 28px 10px}.tribe-events-admin-kb-card__links{margin:0;padding:0 28px 25px}.tribe-events-admin-kb-card__links li{margin:0 0 10px}.tribe-events-admin-kb-card__links li a{color:#334aff;font-size:14px;line-height:1.2;text-decoration:none}.tribe-events-admin-kb-card__links li a:focus{box-shadow:none;outline:none}.tribe-events-admin-kb-card__links li a:hover{color:#1c39bb}.tribe-events-admin-section-header{align-items:center;color:#000;display:flex;font-weight:700;justify-content:space-between;margin:0}.tribe-events-admin-section-header h3{color:#0f1031;font-size:28px;font-weight:700;line-height:1}.tribe-events-admin-section-header a{border-bottom:2px solid;color:#334aff;font-size:14px;padding-bottom:2px;text-decoration:none}.tribe-events-admin-section-header a:focus{box-shadow:none;outline:none}.tribe-events-admin-section-header a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-faq{margin:10px 0 0}.tribe-events-admin-faq-card{border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;padding:24px 15px 19px 19px}.tribe-events-admin-faq-card a{color:#0f1031}.tribe-events-admin-faq-card a:focus{box-shadow:none;outline:none}.tribe-events-admin-faq-card a:hover{color:#1c39bb}.tribe-events-admin-faq-card__icon img{height:22px;width:16px}.tribe-events-admin-faq-card__content{margin-left:10px}.tribe-events-admin-faq__question,.tribe-events-admin-faq__question a{color:#334aff;font-size:16px;text-decoration:none}.tribe-events-admin-faq__question a:focus{box-shadow:none;outline:none}.tribe-events-admin-faq__question a:hover{color:#1c39bb}.tribe-events-admin-faq__answer{color:#0f1031;font-size:13px;margin-top:18px}.tribe-events-admin-extensions-title{color:#0f1031;font-size:16px;line-height:1.5;margin:0 0 30px;max-width:70%}.tribe-events-admin-extensions{margin:10px 0 0}.tribe-events-admin-extensions-card{border:1px solid #e1e1e4;border-radius:20px;border-top:8px solid #334aff;padding:48px 35px 24px 25px}.tribe-events-admin-extensions-card__title{font-size:20px;margin:0}.tribe-events-admin-extensions-card__title a{color:#0f1031;font-family:Helvetica,sans-serif;font-size:20px;font-weight:700;line-height:1.2;text-decoration:none}.tribe-events-admin-extensions-card__title a:active,.tribe-events-admin-extensions-card__title a:focus,.tribe-events-admin-extensions-card__title a:hover{box-shadow:none;color:#334aff}.tribe-events-admin-extensions-card__description{color:#0f1031;font-family:Helvetica,sans-serif;font-size:14px;line-height:1.43;margin:20px 0}.tribe-events-admin-cta{align-items:center;border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;margin:60px 0}.tribe-events-admin-cta__image{height:152px;object-fit:contain;width:auto}.tribe-events-admin-cta__content,.tribe-events-admin__troubleshooting-cta{align-items:center;display:flex;flex-direction:column;justify-content:center;padding:20px 0;width:100%}.tribe-events-admin-cta__content-title{color:#0f1031;font-size:28px;font-weight:700;line-height:normal;margin:0 0 10px;text-align:center}.tribe-events-admin-cta__content-subtitle{color:#0f1031;font-size:16px;line-height:1.5;margin-bottom:10px;text-align:center}.tribe-events-admin-cta__content-description a{border-bottom:2px solid;color:#334aff;font-size:16px;font-weight:700;padding-bottom:2px;text-decoration:none}.tribe-events-admin-cta__content-description a:focus{box-shadow:none;outline:none}.tribe-events-admin-cta__content-description a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-footer-logo{display:inline-block;vertical-align:middle;width:228px}.tribe-events-admin-step{margin:10px 0 0}.tribe-events-admin-step-card{border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;padding:24px 15px 19px 19px}.tribe-events-admin-step-card a{border-bottom:2px solid;color:#334aff;padding-bottom:2px;text-decoration:none}.tribe-events-admin-step-card a:focus{box-shadow:none;outline:none}.tribe-events-admin-step-card a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-step-card__icon img{height:43px;margin-right:5px;width:42px}.tribe-events-admin-step-card__content{margin-left:10px}.tribe-events-admin-step__title{color:#0f1031;font-size:20px;font-weight:700;line-height:1.2;margin-bottom:10px}.tribe-events-admin-step__answer{color:#0f1031;font-size:13px;margin-top:18px}.tribe-events-admin__system-information{display:grid;grid-gap:15px 30px;gap:15px 30px;grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:1fr;margin:100px 0;position:relative}.tribe-events-admin__troubleshooting-title{color:#0f1031;font-size:28px;font-weight:700;line-height:1;margin:0}.tribe-events-admin__troubleshooting-description{color:#0f1031;font-size:18px;line-height:1.2;line-height:1.44;margin:20px 0}.tribe-events-admin__system-information-select{display:flex;margin:30px 0 20px}.tribe-events-admin__system-information-select input[type=checkbox]{margin:0 10px 0 0}.tribe-events-admin__system-information-select label{color:#0f1031;font-size:16px;line-height:1.2}.tribe-events-admin__system-information-content small{color:#0f1031;font-size:12px;line-height:1.2}.tribe-events-admin__recent-template-changes .template-updates-wrapper,.tribe-events-admin__system-information-widget{background:#0f1031;border-radius:16px;color:#fff;font-size:14px;line-height:1.14;max-height:280px;overflow:scroll;-ms-overflow-style:none;padding:12px 0 0 27px;scrollbar-width:none}.tribe-events-admin__recent-template-changes .template-updates-wrapper p{color:#fff;font-size:14px;line-height:1.14;margin:0}.tribe-events-admin__system-information-widget a{color:#334aff}.tribe-events-admin__system-information-widget a:hover{opacity:.8}.tribe-events-admin__recent-template-changes .template-updates-wrapper{padding:30px 0 30px 27px}.tribe-events-admin__recent-template-changes .template-updates-wrapper::-webkit-scrollbar,.tribe-events-admin__system-information-widget::-webkit-scrollbar{display:none}.tribe-events-admin__system-information-widget-copy{bottom:10px;position:absolute}.tribe-events-admin__system-information-widget-copy button{background-color:#334aff;border:none;border-radius:100px;color:#fff;cursor:pointer;font-size:16px;font-weight:700;outline:none;padding:18px 25px;text-align:center}.tribe-events-admin__system-information-widget-copy button:hover{background-color:#1c39bb}.tribe-events-admin__system-information-widget-copy button .dashicons,.tribe-events-admin__system-information-widget-copy button .dashicons-before:before{display:none}.tribe-events-admin__system-information-widget-copy button .optin-success{color:#fff;font-size:16px;font-weight:700;text-align:center}.tribe-events-admin__recent-template-changes p{color:#0f1031;font-size:18px;line-height:1.2;line-height:1.44;margin:20px 0}.tribe-events-admin__recent-log{margin-top:50px}.tribe-events-admin__troubleshooting-event-log-wrapper label{color:#0f1031;display:block;font-size:16px;line-height:1.63;margin-bottom:10px}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-controls{margin:20px 0 10px}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-viewer{background:#0f1031;border-radius:16px;color:#fff;font-size:14px;line-height:1.14;max-height:280px;min-height:60px;overflow:scroll;-ms-overflow-style:none;padding:12px 0 0 27px;scrollbar-width:none}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-viewer::-webkit-scrollbar{display:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log{border-bottom:2px solid;color:#334aff;font-size:16px;padding-bottom:2px;text-decoration:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log:focus{box-shadow:none;outline:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__troubleshooting-event-log-wrapper .tribe-events-admin__recent-log-filters-select-wrapper:after{display:none}.tribe-events-admin__recent-log-filters{display:flex;padding:20px 0 40px}.tribe-events-admin__recent-log-filters-field{margin-right:40px}.tribe-events-admin__recent-log-filters-select-wrapper:after{content:url(../images/help/polygon.svg);height:13px;pointer-events:none;position:absolute;right:22px;top:20px;width:14px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default .select2-selection--single{border:1px solid #e1e1e4!important;border-radius:16px;color:#0f1031;font-size:14px;line-height:1.14;padding:0 25px 0 15px!important}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls{margin-bottom:20px;padding:0}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:first-child,.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(2),.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(3){padding-right:75px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-selection__clear{display:none}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default .select2-selection--single .select2-selection__arrow{right:5px}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:16px;border-bottom-right-radius:16px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container .select2-selection--single .select2-selection__rendered{width:100%}.tribe-events-admin__recent-log-filters-select-wrapper select.focus-visible,.tribe-events-admin__recent-log-filters-select-wrapper select:focus-visible{outline:none}.tribe-events-admin__recent-log-filters-select-wrapper select option{color:#0f1031;font-size:14px;line-height:1.14}.tribe-events-admin__ea-status{margin-top:50px}.tribe-events-admin__issues-found-card{background-color:#f3eee8;border-radius:8px;margin-bottom:20px}.tribe-events-admin__issues-found-card:last-of-type{margin-bottom:100px}.tribe-events-admin__issues-found-card-title{align-items:center;cursor:pointer;display:flex;padding:10px 20px 10px 17px;position:relative}.tribe-events-admin__issues-found-card-title img{height:21px;margin-right:14px;object-fit:contain;width:21px}.tribe-events-admin__issues-found-card-title h3{margin:0}.tribe-events-admin__issues-found-card-title span{color:#0f1031;display:block}.tribe-events-admin__issues-found-card-title i{background-image:url(../images/help/arrow-down.svg);background-position:50%;background-repeat:no-repeat;background-size:contain;height:15px;margin:12px 20px;position:absolute;right:0;top:0;transition:all .3s ease;width:15px}.tribe-events-admin__issues-found-card-title.active i{background-image:url(../images/help/arrow-up.svg);background-repeat:no-repeat;top:5px}.tribe-events-admin__issues-found-card-description{display:none;padding:0 20px 20px 55px}.tribe-events-admin__issues-found-card-description p{color:#0f1031;font-size:16px;margin:0}.tribe-events-admin__issues-found-card-description-actions{display:flex;padding:20px 0 10px}.tribe-events-admin__issues-found-card-description-actions a{border-bottom:2px solid;color:#334aff;font-size:16px;margin-right:20px;padding-bottom:5px;text-decoration:none}.tribe-events-admin__issues-found-card-description-actions a:focus{box-shadow:none;outline:none}.tribe-events-admin__issues-found-card-description-actions a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__ea-status-table-wrapper{overflow-x:auto}.tribe-events-admin__ea-status-table{border:1px solid #e1e1e4;border-radius:16px;margin:30px 0 40px;overflow:hidden}.tribe-events-admin__ea-status-table a{border-bottom:2px solid;color:#334aff;padding-bottom:2px;text-decoration:none}.tribe-events-admin__ea-status-table a:focus{box-shadow:none;outline:none}.tribe-events-admin__ea-status-table a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__ea-status-table tr{align-items:center;display:flex}.tribe-events-admin__ea-status-table th{color:#0f1031;font-weight:700;line-height:1.17;margin-top:10px;padding:5px 25px}.tribe-events-admin__ea-status-table td{align-items:center;color:#0f1031;display:flex;font-size:16px;line-height:1.63;padding:10px 25px;width:25%}.tribe-events-admin__ea-status-table td:nth-child(2){width:45%}.tribe-events-admin__ea-status-table td:nth-child(3){display:flex;justify-content:flex-end;width:30%}.tribe-events-admin__ea-status-table-dark{background-color:#f9f7f4}.tribe-events-admin__ea-status-table td img{height:21px;margin-right:14px;object-fit:contain;width:21px}.tec-troubleshooting,.tribe_events_page_tec-troubleshooting{background-color:#fff}#tribe-community,#tribe-ticketing{display:none}.tribe-events-admin__troubleshooting-notice{background-color:#161b7d;color:#fff;font-size:16px;line-height:1;margin-left:-1.55vw;padding:24px 0}.tribe-events-admin__troubleshooting-notice_title{margin:0 auto;max-width:1024px;padding-left:25px;width:90%}.tribe-events-admin__troubleshooting-notice_title a{border-bottom:2px solid;color:#fff;font-size:16px;line-height:1;padding-bottom:2px;text-decoration:none}.tribe-events-admin__troubleshooting-notice_title a:focus{box-shadow:none;outline:none}.tribe-events-admin__troubleshooting-notice_title a:hover{border-bottom:2px solid;color:#f3eee8}.tec-help #tec-help-community,.tec-help #tec-help-ticketing{display:none}.tec-help .tribe-events-admin-title{padding-top:25px}.tec-help .tribe-events-admin-title img{height:67px}body.tribe-welcome #fs_connect{border:1px solid #e1e1e4;border-radius:16px;box-shadow:none;box-sizing:border-box;margin-left:22px}body.tribe-welcome #fs_connect .fs-actions{background-color:transparent}body.tribe-welcome #fs_connect .fs-permissions{border-top:1px solid #e1e1e4;margin:0 16px}body.tribe-welcome #fs_connect button{background-color:#3d54ff;border-color:#3d54ff}body.tribe-welcome #fs_connect .button-secondary{background:#fff;border-color:#3d54ff;color:#3d54ff}body.tribe-welcome #fs_connect a{color:#3d54ff}body.tribe-welcome #fs_connect a:focus{box-shadow:none;outline:none}body.tribe-welcome #fs_connect a:hover{color:#161b7d}.black-friday-promo{align-items:flex-start;display:flex;flex-direction:column-reverse;justify-content:space-between}.black-friday-promo .black-friday-promo__button{background:#3d54ff;border-color:transparent;border-radius:20px;color:#fff;font-size:12px;height:34px;line-height:32px;min-height:unset;width:115px}.black-friday-promo .black-friday-promo__button:active,.black-friday-promo .black-friday-promo__button:focus,.black-friday-promo .black-friday-promo__button:hover{background:#1c39bb;border-color:transparent;color:#fff}.black-friday-promo__promo{background-position:50%;background-repeat:no-repeat;border-radius:10px;display:grid;grid-template-areas:"a b";grid-template-columns:auto 150px;height:150px;margin:10px 0;max-width:100%;width:450px}.black-friday-promo__content{grid-area:b;padding-top:8px;text-align:center}.black-friday-promo__text{color:#0f1031;font-family:monospace;font-size:16px;line-height:1;text-transform:uppercase}.black-friday-promo__branding-image{max-width:390px;width:100%}.end-of-year-sale-promo{align-items:flex-start;display:flex;flex-direction:column-reverse;justify-content:space-between}.end-of-year-sale-promo .end-of-year-sale-promo__button{background:#3d54ff;border-color:transparent;border-radius:20px;color:#fff;font-size:12px;height:34px;line-height:32px;min-height:unset;width:115px}.end-of-year-sale-promo .end-of-year-sale-promo__button:active,.end-of-year-sale-promo .end-of-year-sale-promo__button:focus,.end-of-year-sale-promo .end-of-year-sale-promo__button:hover{background:#1c39bb;border-color:transparent;color:#fff}.end-of-year-sale-promo__promo{background-color:#fff;background-position:0 0;background-repeat:no-repeat;border-radius:10px;display:grid;flex-shrink:0;grid-template-areas:"a b";grid-template-columns:auto 160px;height:150px;margin:10px 0;max-width:100%;width:460px}.end-of-year-sale-promo__content{grid-area:b;padding-top:8px;text-align:center}.end-of-year-sale-promo__text{color:#0f1031;font-family:monospace;font-size:13px;line-height:1.2;margin-bottom:8px;text-transform:uppercase}.end-of-year-sale-promo__branding-image{max-width:390px;width:100%}.tribe-common .tec-admin__upsell{display:inline-block;font-family:var(--tec-font-family-sans-serif);font-size:var(--tec-font-size-1);font-weight:var(--tec-font-weight-regular);line-height:var(--tec-line-height-1)}.tribe-common .tec-admin__upsell-content{align-items:center;display:flex;padding:var(--tec-spacer-1);padding-right:var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-icon,.tribe-common .tec-admin__upsell-icon-image{height:24px;width:24px}.tribe-common .tec-admin__upsell-text-wrap{margin-left:var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-link{color:var(--tec-color-accent-primary);font-weight:var(--tec-font-weight-bold);text-decoration:none}.tribe-common .tec-admin__upsell--rounded-corners .tec-admin__upsell-content{background:var(--tec-color-accent-primary-background);border-radius:24px}.tribe-common .tec-admin__upsell--rounded-corners-text .tec-admin__upsell-text-wrap{background:rgba(51,74,255,.1);border-radius:14px;padding:var(--tec-spacer-1) var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-link--dark{color:var(--tec-color-text-primary)}.tribe-common .tec-admin__upsell-link--underlined{text-decoration:underline}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:320px){.tribe-marketing-notice .tribe-marketing-notice__icon{display:block}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:145px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:130px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:642px}}@media screen and (min-width:400px){.notice-tribe-banner .tribe-marketing-notice__icon{width:67px}}@media screen and (min-width:800px){.notice-tribe-banner h3{display:inline-block;font-size:1rem;margin:0 .5rem 0 0}.notice-tribe-banner a{line-height:1.5}.notice-tribe-banner a,.notice-tribe-banner p{font-size:1rem}.notice-tribe-banner p{margin:0 .5rem 0 0}.notice-tribe-banner .tribe-marketing-notice__cta{display:inline-block;margin-left:.5rem}}@media screen and (min-width:1215px){.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:992px}.tribe-welcome .notice-tribe-banner .tribe-marketing-notice{max-width:1036px}}@media screen and (min-width:710px){.tribe-events-admin-content-wrapper{width:670px}.tribe-events-admin-card--2up{display:inline-block;width:calc(50% - 20px)}.tribe-events-admin-card--2up.tribe-events-admin-card--first{margin-right:36px}.tribe-events-admin-card--2up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--2up .tribe-events-admin-card__image{height:100px;margin-bottom:12px}.tribe-events-admin-card--2up .tribe-events-admin-card__title{margin-bottom:27px;max-width:340px}.tribe-events-admin-card--3up{display:inline-block;margin-bottom:32px;width:calc(50% - 18px)}.tribe-events-admin-card--3up.tribe-events-admin-card--first{margin-right:32px}.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:0}.tribe-events-admin-card__title{font-size:20px;line-height:23px}.tribe-events-admin-card--1up{display:inline-block;margin-left:32px;width:calc(50% - 18px)}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--1up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card--no-pad{height:154px;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{margin-left:50%;padding:42px 0 10px}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin-left:50%}.tribe-events-admin-card--promo-blue{display:block;margin-left:0;min-height:170px;width:100%}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{float:left;max-width:300px}.tribe-events-admin-graphic{max-width:250px;top:0}.tribe-events-admin-graphic--desktop-only{display:block}.tribe-events-admin-graphic--mobile-only{display:none}.tribe-events-admin-card__form{float:right;width:300px}input[type=email].tribe-events-admin-card__input{width:300px}.tribe-events-admin-title{padding-top:50px}.tribe-events-admin-title__description{padding-top:15px}.tribe-events-admin-title__heading{font-size:48px;line-height:55px;margin:0}.tribe-events-admin-title__logo{margin-right:14px;padding-top:5px;width:40px}.tribe-events-admin-tickets .tribe-events-admin-card__title{font-size:18px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{font-size:18px;height:66px}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:8px;padding-top:4px;width:60px}}@media screen and (min-width:1217px){.tribe-events-admin-content-wrapper{max-width:1060px;width:100%}.tribe-events-admin-card--2up{margin-right:36px;width:486px}.tribe-events-admin-card--3up{width:310px}.tribe-events-admin-card--3up.tribe-events-admin-card--first,.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:36px}.tribe-events-admin-card--3up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--1up{margin:0 0 36px;padding:33px 44px 30px;text-align:left;width:1012px}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:auto}.tribe-events-admin-card--1up .tribe-events-admin-card__image{float:left;margin:0 48px 10px 0}.tribe-events-admin-card--no-pad{padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__image{margin:0;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{margin-left:50%;padding:42px 0 10px}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin-left:50%}.tribe-events-admin-card--promo-blue{min-height:150px}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{max-width:450px}.tribe-events-admin-graphic{max-width:none}.tribe-events-admin-card__form,input[type=email].tribe-events-admin-card__input{width:365px}.tribe-events-admin-quick-nav{border-radius:100px;display:inline-block;height:54px;margin:24px 0 94px;max-width:1010px;padding:0 36px 0 0}.tribe-events-admin-quick-nav__link-item{display:inline-block;padding:18px 10px 0}.tribe-events-admin-quick-nav__title{padding:19px 6px 17px 32px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{height:auto}}@media screen and (max-width:768px){.tribe-events-admin-header__logo-word-mark{width:285px}.tribe-events-admin-header__right-image{height:160px}.tribe-events-admin-header__description{max-width:100%}.tribe-events-admin-tab-nav li{margin-right:20px}.tribe-events-admin-tab-nav .selected{border-bottom:2px solid currentColor;padding-bottom:10px}.tribe-events-admin-2col-grid{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr))}.tribe-events-admin-3col-grid{grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr))}.tribe-events-admin-extensions-title{max-width:100%}.tribe-events-admin-cta{align-items:flex-start;flex-direction:column;overflow:hidden}.tribe-events-admin-footer-logo{width:225px}.tribe-events-admin__system-information{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr));margin:50px 0}}@media screen and (max-width:480px){.tribe-events-admin-header__logo-word-mark{width:260px}.tribe-events-admin-header__right-image{height:120px}.tribe-events-admin-header__title{font-size:35px}.tribe-events-admin-header__description{max-width:100%}.tribe-events-admin-tab-nav{border:1px solid #e1e1e4;border-radius:20px;flex-direction:column;padding:18px 22px}.tribe-events-admin-tab-nav li{margin-bottom:18px;margin-right:0}.tribe-events-admin-tab-nav .selected{border-bottom:2px solid currentColor;padding-bottom:10px;width:fit-content}.tribe-events-admin__line{border:none}.tribe-events-admin-products-card,.tribe-events-admin-products-description{display:none}.tribe-events-admin-container,.tribe-events-admin-content-wrapper.tribe-events-admin-container{max-width:90%}.tribe-events-admin-2col-grid,.tribe-events-admin-3col-grid,.tribe-events-admin-4col-grid{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr))}.tribe-events-admin-extensions-title{max-width:100%}.tribe-events-admin-cta__image{height:auto;width:90%}.tribe-events-admin-cta__content,.tribe-events-admin__troubleshooting-cta{align-items:flex-start;padding:32px 23px 45px;width:auto}.tribe-events-admin-cta__content-title{font-size:22px;text-align:left}.tribe-events-admin-cta__content-subtitle{text-align:left}.tribe-events-admin-footer-logo{width:210px}.tribe-events-admin__system-information{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr));margin:50px 0}.tribe-events-admin__troubleshooting-notice{margin-left:-20px}.tribe-events-admin__troubleshooting-notice_title{max-width:90%}}@media screen and (min-width:1200px){.tribe-events-admin-products-card__group{max-width:47%}}@media screen and (min-width:500px) and (max-width:1080px){.tribe-events-admin-4col-grid{grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr))}}@media screen and (min-width:768px){.tribe-events-admin-section-header{font-size:28px;line-height:1.143;margin:50px 0 21px}}@media screen and (max-width:1080px){.tribe-events-admin-cta__content-title{font-size:24px}}@media only screen and (max-width:1920px){.tribe-events-admin__system-information-widget-copy{right:20.5vw}}@media only screen and (max-width:1280px){.tribe-events-admin__system-information-widget-copy{right:22vw}}@media only screen and (max-width:768px){.tribe-events-admin__system-information-widget-copy{left:10px;right:auto}.tribe-events-admin__recent-log-filters{flex-direction:column}.tribe-events-admin__recent-log-filters-field{margin-bottom:30px;margin-right:0}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:first-child,.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(2),.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(3){padding-right:30px}.tribe-events-admin__issues-found-card-title h3{max-width:90%}}@media only screen and (max-width:480px){.tribe-events-admin__system-information-widget-copy{left:10px;right:auto}.tribe-events-admin__recent-log-filters{flex-direction:column}.tribe-events-admin__recent-log-filters-field{margin-bottom:30px;margin-right:0}.tribe-events-admin__recent-log-filters-select-wrapper:after{right:25px}.tribe-events-admin__issues-found-card-title h3{max-width:80%}.tribe-events-admin__ea-status-table{overflow:scroll}.tribe-events-admin__ea-status-table td{min-width:150px}.tribe-events-admin__ea-status-table td:nth-child(2),.tribe-events-admin__ea-status-table td:nth-child(3){width:100%}}@media (min-width:1024px){.black-friday-promo{align-items:center;flex-direction:row}.black-friday-promo__branding{padding-right:10px;width:calc(100% - 450px)}.end-of-year-sale-promo{align-items:center;flex-direction:row}.end-of-year-sale-promo__branding{padding-right:10px;width:calc(100% - 460px)}}@media (max-width:525px){.end-of-year-sale-promo__promo{grid-template-areas:"a" "b";grid-template-columns:auto;margin:20px auto;padding-top:100px;width:300px}}
1
+ .invalid input,input:out-of-range{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input::placeholder,textarea::placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia,serif!important;font-size:17px!important;font-weight:400;margin:8px 0}.tribe-rating{color:#3d54ff}.tribe-rating:hover{color:#1c39bb}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label>p,.tribe-settings-form .tribe-field-radio label>p{margin-left:1px;text-indent:0}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.tribe-settings-form .tribe-settings-form-wrap #tribe-field-stylesheetOption .description{color:#999;margin-left:1px}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}#modern-tribe-info{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{margin:10px 0}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:alpha(opacity=50);opacity:.5}.ui-widget-shadow{background:#000;border-radius:5px;filter:alpha(opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none!important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}#ui-datepicker-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page{max-width:850px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p{font-size:15px}p.tribe-update-message{font-size:18px;font-weight:400}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}a.tribe-rating-link{text-decoration:none}.tribe-update-links{margin-top:30px}.tribe_update_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-events-widget-admin-form__input-section p{margin:0}.tribe-events-widget-admin-form__input-section h4{margin:.5em 0}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#7ad03a;height:1rem;width:1%}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;height:300px;overflow-y:scroll}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{min-height:100px;padding:1em}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;height:100%;max-height:150px;max-width:150px;vertical-align:middle;width:auto}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-marketing-notice__icon{display:none;flex-shrink:0;padding:0;position:static}.tribe-marketing-notice .tribe-marketing-notice__icon img{display:inline-block;max-height:100%;max-width:none;vertical-align:middle;width:100%}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}.notice-tribe-banner .tribe-marketing-notice__icon{width:47px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:0;padding:1em 0}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice{min-height:50px}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__content{align-content:center;display:flex;flex-wrap:wrap;justify-content:center;margin:auto}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__icon{align-self:baseline;height:20px;margin:auto 14px auto 0;width:13px}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__icon .tribe-common-c-svgicon--stellar-icon circle{stroke:#fff}.notice-tribe-banner.tribe-notice-stellar-sale .tec-stellar-sale-text{fill:#fff;height:16px;margin:unset;margin-top:.25em;stroke:#fff;width:176px}.notice-tribe-banner.tribe-notice-stellar-sale h3{font-weight:400;margin:auto 8px auto 14px;text-align:center}.notice-tribe-banner h3{color:#fff;display:block;font-size:.875rem;line-height:1.25;margin:0 0 .25rem}.notice-tribe-banner a{border-bottom:1px solid;line-height:1.25;margin:0;text-decoration:none}.notice-tribe-banner a:hover{text-decoration:none}.notice-tribe-banner a,.notice-tribe-banner p{color:#fff;display:inline-block;font-size:.875rem;line-height:1.25}.notice-tribe-banner p{display:inline-block;margin:0;padding:0}.notice-tribe-banner .tribe-marketing-notice{align-items:center;display:flex;justify-content:flex-start;margin:0 auto;min-height:65px;padding:0 .75rem;width:100%}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:100%}.notice-tribe-banner .notice-dismiss{position:static}.notice-tribe-banner .notice-dismiss:before{color:#eaf1ff}#wpcontent .notice-tribe-banner{align-items:center;background-color:#161b7d;border:0;box-shadow:none;display:flex;justify-content:flex-start;margin:0 0 16px;padding-right:0}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale{background-color:#000}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a{color:#d8ff00;text-transform:uppercase}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:active,#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:focus,#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:hover{color:#e6b1fc}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container .selection,.tribe-ea-dropdown.select2-container .selection{margin-top:inherit}.tribe-dropdown .select2-selection--single,.tribe-ea-dropdown .select2-selection--single{height:32px}.tribe-dropdown .select2-selection--single .select2-selection__clear,.tribe-ea-dropdown .select2-selection--single .select2-selection__clear{line-height:28px}.tribe-dropdown .select2-selection--single .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--single .select2-selection__rendered{line-height:32px;padding-right:28px}.tribe-dropdown.select2-container--focus .select2-selection--single,.tribe-ea-dropdown.select2-container--focus .select2-selection--single{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-container--open .select2-search__field,.tribe-ea-dropdown.select2-container--open .select2-search__field{padding:0}.tribe-dropdown.select2-container--open .select2-dropdown--below,.tribe-ea-dropdown.select2-container--open .select2-dropdown--below{border-top:1px solid #aaa;margin-top:-1px}.tribe-dropdown.select2-container--open .select2-dropdown--above,.tribe-ea-dropdown.select2-container--open .select2-dropdown--above{border-bottom:1px solid #aaa;margin-bottom:-16px}.tribe-dropdown.select2-container--open .select2-selection--single,.tribe-ea-dropdown.select2-container--open .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown.select2-container--open .select2-selection__arrow b,.tribe-ea-dropdown.select2-container--open .select2-selection__arrow b{transform:rotate(180deg)}.tribe-dropdown.select2-selection--single,.tribe-ea-dropdown.select2-selection--single{background-image:none;border:1px solid #ccc;border-radius:3px;overflow:hidden}.tribe-dropdown.select2-selection--single>.select2-selection__rendered,.tribe-ea-dropdown.select2-selection--single>.select2-selection__rendered{white-space:normal}.tribe-dropdown.select2-selection--single .select2-selection__arrow,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow{background:transparent;background-image:none;border-left:0;top:2px;width:26px}.tribe-dropdown.select2-selection--single .select2-selection__arrow b,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow b{background:#fff url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E") no-repeat right 5px top 55%;background-size:auto;background-size:16px 16px;border:0;bottom:0;display:block;height:auto;left:0;margin:0;padding:0;right:0;top:0;width:auto}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered{background-image:none;border:1px solid #ccc;border-radius:3px;min-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline{line-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input{padding-bottom:0;padding-top:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice{line-height:19px;margin-top:2px;padding-bottom:0;padding-top:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div{line-height:inherit}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove{left:4px;top:3px;transition-property:border,color}.select2-results .select2-results__option{color:#939393;font-weight:400;margin-bottom:0}.select2-results .select2-results__option[aria-disabled=true]{background-color:#e0e0e0}.select2-results.select2-results__option--highlighted{background-color:#efefef;color:#a1a1a1;cursor:default;display:block}.wp-core-ui .button-red{background-color:#a00;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;color:#e79496!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.ticket_form .select2-container .select2-selection--single .select2-selection__arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{border:solid #0ab152;border-width:0 3px 3px 0;content:"";display:block;height:15px;transform:rotate(45deg);width:8px}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}body.tec-help,body.tribe-welcome{background-color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.tec-help .update-nag,body.tribe-welcome .update-nag{display:none}body.tec-help #wpcontent,body.tribe-welcome #wpcontent{padding:0}body.tec-help .tribe_settings,body.tribe-welcome .tribe_settings{margin:0}body.tec-help #wpfooter,body.tec-help .tribe_settings>h1,body.tribe-welcome #wpfooter,body.tribe-welcome .tribe_settings>h1{display:none}body.tec-help #wpbody-content,body.tribe-welcome #wpbody-content{padding-bottom:25px}body.tec-help .tribe-dependency-error,body.tribe-welcome .tribe-dependency-error{display:none}.tribe-events-admin-content-wrapper{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;margin:0 auto;padding:0 0 30px;width:calc(100% - 40px)}.tribe-events-admin-card{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;display:block;margin:0 auto 36px;padding:27px;text-align:center}.tribe-events-admin-card--2up .tribe-events-admin-card__title{max-width:260px}.tribe-events-admin-card--3up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--3up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card__button{background-color:#fff;border:none;color:#3d54ff;font-size:14px;font-weight:700;letter-spacing:1px;line-height:16px;position:absolute;right:20px;text-transform:uppercase;top:17px}.tribe-events-admin-card__button:hover{color:#161b7d}.tribe-events-admin-card__description{color:#000;font-size:14px;font-style:normal;font-weight:400;line-height:22px;margin-top:16px}.tribe-events-admin-card__image{display:block;height:100px;margin:0 auto}.tribe-events-admin-card__link{color:#3d54ff;display:inline-block;font-size:16px;font-style:normal;font-weight:700;line-height:18px;margin-top:24px;position:relative;text-decoration:none}.tribe-events-admin-card__link:hover{color:#161b7d}.tribe-events-admin-card__link:after{border-style:solid;border-width:0 0 1px;bottom:-4px;content:"";left:0;position:absolute;width:100%}.tribe-events-admin-card__title{color:#0f1031;font-size:20px;font-weight:700;line-height:23px;margin:auto}.tribe-events-admin-card-grid{max-width:1048px}input[type=checkbox].tribe-common-switch__input{display:none}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label{background:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;cursor:pointer;display:block;height:18px;outline:0;padding:3px;position:relative;transition:all .2s ease;-webkit-user-select:none;user-select:none;width:27px}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:after,input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:before{content:"";display:block;height:10px;position:relative;width:10px}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:after{background:#878787;border-radius:2px;content:"";left:0;transition:all .2s ease}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:before{display:none}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label::selection{background:none}input[type=checkbox].tribe-common-switch__input:checked+.tribe-common-switch__label:after{background:#2e709d;left:50%}.tribe-events-admin-header__logo-word-mark{display:inline-block;height:auto;margin:0 0 26px;vertical-align:middle;width:312px}.tribe-events-admin-header{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:45px 0 0}.tribe-events-admin-header__right-image{height:280px;position:absolute;right:0;top:0;width:auto;z-index:-1}.tribe-events-admin-header__title{font-size:48px;line-height:48px;margin:0 0 18px}.tribe-events-admin-header__description{font-size:18px;line-height:28px;margin-bottom:44px;max-width:60%}.tribe-events-admin-tab-nav{display:flex;margin:0}.tribe-events-admin-tab-nav li{cursor:pointer;font-size:16px;font-weight:500;margin-bottom:0;margin-right:30px}.tribe-events-admin-tab-nav li:hover{color:#334aff}.tribe-events-admin-tab-nav .selected{border-bottom:3px solid currentColor;color:#334aff;padding-bottom:17px}.tribe-events-admin-tab-nav li:after{background:#334aff;border-radius:100px;bottom:0;content:"";display:block;height:3px;left:0;position:absolute;right:0}.tribe-events-admin__line{border-top:1px solid #e1e1e4}.tribe-events-admin-products-description{color:#0f1031;font-size:14px;line-height:2}.tribe-events-admin-products-card{align-items:center;border:1px solid #e1e1e4;border-radius:20px;display:flex;padding:10px 15px}.tribe-events-admin-products-card__icon{height:40px;object-fit:contain;width:40px}.tribe-events-admin-products-card__group{margin:0 20px;max-width:55%}.tribe-events-admin-products-card__group-title{color:#0f1031;font-size:16px;font-weight:700;line-height:1;margin:0}.tribe-events-admin-products-card__group-description{font-size:12px;margin-top:5px}.tribe-events-admin-products-card__button{background-color:#fff;border:1px solid #e1e1e4;border-radius:20px;color:#0f1031;font-size:12px;font-weight:700;letter-spacing:1px;line-height:16px;margin-left:auto;padding:10px 15px;text-decoration:none;text-transform:uppercase}.tribe-events-admin-products-card__button:hover{background-color:#334aff;color:#fff}.tribe-events-admin-products-card__button:active,.tribe-events-admin-products-card__button:focus{box-shadow:none;outline:none}.tribe-events-admin-products-card__button--active,.tribe-events-admin-products-card__button--active:active,.tribe-events-admin-products-card__button--active:focus,.tribe-events-admin-products-card__button--active:hover{background:rgba(61,84,255,.16);color:#334aff;cursor:not-allowed;text-transform:uppercase}.tribe-events-admin-card--1up{width:100%}.tribe-events-admin-card--no-pad{padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__image{display:block;height:152px;margin:0;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{font-size:28px;line-height:34px;text-align:left}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin:0;padding:0;text-align:left}.tribe-events-admin-card--no-pad .tribe-events-admin-card__link{margin:0;padding:0}.tribe-events-admin-card--faq{display:inline-block;font-size:0;height:147px;margin:0 0 0 30px;padding:24px 16px 22px 20px;width:230px}.tribe-events-admin-card--faq:first-child{margin-left:0}.tribe-events-admin-card--faq img{float:left;height:22px;width:16px}.tribe-events-admin-card--faq .tribe-events-admin-faq__question{color:#334aff;font-size:16px;line-height:19px;margin:0 0 12px 26px;text-align:left}.tribe-events-admin-card--faq .tribe-events-admin-faq__answer{font-size:13px;line-height:16px;margin-left:26px;text-align:left}.tribe-events-admin-video{border-radius:16px;height:200px;margin-bottom:72px;-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 0);overflow:hidden;-webkit-transform:rotate(.000001deg)}.tribe-events-admin-video iframe{width:100%}.tribe-events-admin-card--promo-blue{background-color:#3d54ff;background-image:url(../images/welcome/promo.jpg)}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{color:#fff;font-size:16px;margin-bottom:16px;text-align:left}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__title{color:#fff;text-align:left}.tribe-events-admin-graphic{position:absolute;right:0;top:106px;z-index:-1}.tribe-events-admin-graphic--desktop-only{display:none}.tribe-events-admin-graphic--mobile-only{display:block}.tribe-events-admin-card__form{position:relative}input[type=email].tribe-events-admin-card__input{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;font-size:14px;height:54px}input[type=email].tribe-events-admin-card__input::placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}.tribe-events-admin-container,.tribe-events-admin-content-wrapper.tribe-events-admin-container{margin:0 auto;max-width:1024px;width:90%}.tribe-events-admin-2col-grid{display:grid;grid-gap:15px 30px;gap:15px 30px;grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-3col-grid{display:grid;grid-gap:30px;gap:30px;grid-template-areas:". . .";grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-4col-grid{display:grid;grid-gap:30px;gap:30px;grid-template-areas:". . . .";grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-products{margin:10px 0 0}.tribe-events-admin-quick-nav{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;display:block;margin:40px 0 78px;padding:18px 23px 2px}.tribe-events-admin-quick-nav__link{color:#3d54ff;font-size:16px;font-weight:700;line-height:18px;text-align:center;text-decoration:none}.tribe-events-admin-quick-nav__link:hover{color:#161b7d}.tribe-events-admin-quick-nav__link-item{display:block;padding-bottom:19px}.tribe-events-admin-quick-nav__links{display:inline}.tribe-events-admin-quick-nav__title{color:rgba(15,16,49,.72);display:inline-block;font-size:14px;font-weight:400;line-height:16px;padding-bottom:14px;text-transform:uppercase}.tribe-events-admin-title{padding-top:14px}.tribe-events-admin-title__description{color:#0f1031;font-size:16px;font-weight:400;line-height:24px;max-width:584px;padding-top:15px}.tribe-events-admin-title__heading{color:#0f1031;display:inline-block;font-size:24px;font-weight:700;line-height:28px;margin:5px 0 0}.tribe-events-admin-title__logo{margin-right:8px;vertical-align:top;width:34px}.tribe-events-admin-notice{background-color:#3d54ff;height:65px}.tribe-events-admin-notice .tribe-events-admin-content-wrapper{padding-bottom:0;padding-top:8px}.tribe-events-admin-notice p{color:#fff;display:inline-block;font-family:Helvetica,sans-serif;font-size:16px;line-height:18px;margin-top:0;padding-bottom:12px;padding-left:16px;vertical-align:middle;width:calc(100% - 60px)}.tribe-events-admin-notice__logo{display:inline-block}.tribe-events-admin-tickets .tribe-events-admin-section-header{font-size:28px;line-height:32px}.tribe-events-admin-tickets .tribe-events-admin-graphic--desktop-only{width:365px}.tribe-events-admin-tickets .tribe-events-admin-graphic--mobile-only{top:230px;width:300px}.tribe-events-admin-tickets .tribe-events-admin-title__heading{margin-top:0}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:4px;width:32px}.tribe-events-admin-kb{margin:10px 0 0}.tribe-events-admin-kb-card{border:1px solid #e1e1e4;border-radius:20px}.tribe-events-admin-kb-card__image{height:auto;width:100%}.tribe-events-admin-kb-card__title{color:#0f1031;flex-grow:0;font-size:20px;font-weight:700;line-height:1.2;margin:0;padding:20px 28px 10px}.tribe-events-admin-kb-card__links{margin:0;padding:0 28px 25px}.tribe-events-admin-kb-card__links li{margin:0 0 10px}.tribe-events-admin-kb-card__links li a{color:#334aff;font-size:14px;line-height:1.2;text-decoration:none}.tribe-events-admin-kb-card__links li a:focus{box-shadow:none;outline:none}.tribe-events-admin-kb-card__links li a:hover{color:#1c39bb}.tribe-events-admin-section-header{align-items:center;color:#000;display:flex;font-weight:700;justify-content:space-between;margin:0}.tribe-events-admin-section-header h3{color:#0f1031;font-size:28px;font-weight:700;line-height:1}.tribe-events-admin-section-header a{border-bottom:2px solid;color:#334aff;font-size:14px;padding-bottom:2px;text-decoration:none}.tribe-events-admin-section-header a:focus{box-shadow:none;outline:none}.tribe-events-admin-section-header a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-faq{margin:10px 0 0}.tribe-events-admin-faq-card{border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;padding:24px 15px 19px 19px}.tribe-events-admin-faq-card a{color:#0f1031}.tribe-events-admin-faq-card a:focus{box-shadow:none;outline:none}.tribe-events-admin-faq-card a:hover{color:#1c39bb}.tribe-events-admin-faq-card__icon img{height:22px;width:16px}.tribe-events-admin-faq-card__content{margin-left:10px}.tribe-events-admin-faq__question,.tribe-events-admin-faq__question a{color:#334aff;font-size:16px;text-decoration:none}.tribe-events-admin-faq__question a:focus{box-shadow:none;outline:none}.tribe-events-admin-faq__question a:hover{color:#1c39bb}.tribe-events-admin-faq__answer{color:#0f1031;font-size:13px;margin-top:18px}.tribe-events-admin-extensions-title{color:#0f1031;font-size:16px;line-height:1.5;margin:0 0 30px;max-width:70%}.tribe-events-admin-extensions{margin:10px 0 0}.tribe-events-admin-extensions-card{border:1px solid #e1e1e4;border-radius:20px;border-top:8px solid #334aff;padding:48px 35px 24px 25px}.tribe-events-admin-extensions-card__title{font-size:20px;margin:0}.tribe-events-admin-extensions-card__title a{color:#0f1031;font-family:Helvetica,sans-serif;font-size:20px;font-weight:700;line-height:1.2;text-decoration:none}.tribe-events-admin-extensions-card__title a:active,.tribe-events-admin-extensions-card__title a:focus,.tribe-events-admin-extensions-card__title a:hover{box-shadow:none;color:#334aff}.tribe-events-admin-extensions-card__description{color:#0f1031;font-family:Helvetica,sans-serif;font-size:14px;line-height:1.43;margin:20px 0}.tribe-events-admin-cta{align-items:center;border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;margin:60px 0}.tribe-events-admin-cta__image{height:152px;object-fit:contain;width:auto}.tribe-events-admin-cta__content,.tribe-events-admin__troubleshooting-cta{align-items:center;display:flex;flex-direction:column;justify-content:center;padding:20px 0;width:100%}.tribe-events-admin-cta__content-title{color:#0f1031;font-size:28px;font-weight:700;line-height:normal;margin:0 0 10px;text-align:center}.tribe-events-admin-cta__content-subtitle{color:#0f1031;font-size:16px;line-height:1.5;margin-bottom:10px;text-align:center}.tribe-events-admin-cta__content-description a{border-bottom:2px solid;color:#334aff;font-size:16px;font-weight:700;padding-bottom:2px;text-decoration:none}.tribe-events-admin-cta__content-description a:focus{box-shadow:none;outline:none}.tribe-events-admin-cta__content-description a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-footer-logo{display:inline-block;vertical-align:middle;width:228px}.tribe-events-admin-step{margin:10px 0 0}.tribe-events-admin-step-card{border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;padding:24px 15px 19px 19px}.tribe-events-admin-step-card a{border-bottom:2px solid;color:#334aff;padding-bottom:2px;text-decoration:none}.tribe-events-admin-step-card a:focus{box-shadow:none;outline:none}.tribe-events-admin-step-card a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-step-card__icon img{height:43px;margin-right:5px;width:42px}.tribe-events-admin-step-card__content{margin-left:10px}.tribe-events-admin-step__title{color:#0f1031;font-size:20px;font-weight:700;line-height:1.2;margin-bottom:10px}.tribe-events-admin-step__answer{color:#0f1031;font-size:13px;margin-top:18px}.tribe-events-admin__system-information{display:grid;grid-gap:15px 30px;gap:15px 30px;grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:1fr;margin:100px 0;position:relative}.tribe-events-admin__troubleshooting-title{color:#0f1031;font-size:28px;font-weight:700;line-height:1;margin:0}.tribe-events-admin__troubleshooting-description{color:#0f1031;font-size:18px;line-height:1.2;line-height:1.44;margin:20px 0}.tribe-events-admin__system-information-select{display:flex;margin:30px 0 20px}.tribe-events-admin__system-information-select input[type=checkbox]{margin:0 10px 0 0}.tribe-events-admin__system-information-select label{color:#0f1031;font-size:16px;line-height:1.2}.tribe-events-admin__system-information-content small{color:#0f1031;font-size:12px;line-height:1.2}.tribe-events-admin__recent-template-changes .template-updates-wrapper,.tribe-events-admin__system-information-widget{background:#0f1031;border-radius:16px;color:#fff;font-size:14px;line-height:1.14;max-height:280px;overflow:scroll;-ms-overflow-style:none;padding:12px 0 0 27px;scrollbar-width:none}.tribe-events-admin__recent-template-changes .template-updates-wrapper p{color:#fff;font-size:14px;line-height:1.14;margin:0}.tribe-events-admin__system-information-widget a{color:#334aff}.tribe-events-admin__system-information-widget a:hover{opacity:.8}.tribe-events-admin__recent-template-changes .template-updates-wrapper{padding:30px 0 30px 27px}.tribe-events-admin__recent-template-changes .template-updates-wrapper::-webkit-scrollbar,.tribe-events-admin__system-information-widget::-webkit-scrollbar{display:none}.tribe-events-admin__system-information-widget-copy{bottom:10px;position:absolute}.tribe-events-admin__system-information-widget-copy button{background-color:#334aff;border:none;border-radius:100px;color:#fff;cursor:pointer;font-size:16px;font-weight:700;outline:none;padding:18px 25px;text-align:center}.tribe-events-admin__system-information-widget-copy button:hover{background-color:#1c39bb}.tribe-events-admin__system-information-widget-copy button .dashicons,.tribe-events-admin__system-information-widget-copy button .dashicons-before:before{display:none}.tribe-events-admin__system-information-widget-copy button .optin-success{color:#fff;font-size:16px;font-weight:700;text-align:center}.tribe-events-admin__recent-template-changes p{color:#0f1031;font-size:18px;line-height:1.2;line-height:1.44;margin:20px 0}.tribe-events-admin__recent-log{margin-top:50px}.tribe-events-admin__troubleshooting-event-log-wrapper label{color:#0f1031;display:block;font-size:16px;line-height:1.63;margin-bottom:10px}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-controls{margin:20px 0 10px}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-viewer{background:#0f1031;border-radius:16px;color:#fff;font-size:14px;line-height:1.14;max-height:280px;min-height:60px;overflow:scroll;-ms-overflow-style:none;padding:12px 0 0 27px;scrollbar-width:none}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-viewer::-webkit-scrollbar{display:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log{border-bottom:2px solid;color:#334aff;font-size:16px;padding-bottom:2px;text-decoration:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log:focus{box-shadow:none;outline:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__troubleshooting-event-log-wrapper .tribe-events-admin__recent-log-filters-select-wrapper:after{display:none}.tribe-events-admin__recent-log-filters{display:flex;padding:20px 0 40px}.tribe-events-admin__recent-log-filters-field{margin-right:40px}.tribe-events-admin__recent-log-filters-select-wrapper:after{content:url(../images/help/polygon.svg);height:13px;pointer-events:none;position:absolute;right:22px;top:20px;width:14px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default .select2-selection--single{border:1px solid #e1e1e4!important;border-radius:16px;color:#0f1031;font-size:14px;line-height:1.14;padding:0 25px 0 15px!important}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls{margin-bottom:20px;padding:0}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:first-child,.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(2),.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(3){padding-right:75px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-selection__clear{display:none}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default .select2-selection--single .select2-selection__arrow{right:5px}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:16px;border-bottom-right-radius:16px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container .select2-selection--single .select2-selection__rendered{width:100%}.tribe-events-admin__recent-log-filters-select-wrapper select.focus-visible,.tribe-events-admin__recent-log-filters-select-wrapper select:focus-visible{outline:none}.tribe-events-admin__recent-log-filters-select-wrapper select option{color:#0f1031;font-size:14px;line-height:1.14}.tribe-events-admin__ea-status{margin-top:50px}.tribe-events-admin__issues-found-card{background-color:#f3eee8;border-radius:8px;margin-bottom:20px}.tribe-events-admin__issues-found-card:last-of-type{margin-bottom:100px}.tribe-events-admin__issues-found-card-title{align-items:center;cursor:pointer;display:flex;padding:10px 20px 10px 17px;position:relative}.tribe-events-admin__issues-found-card-title img{height:21px;margin-right:14px;object-fit:contain;width:21px}.tribe-events-admin__issues-found-card-title h3{margin:0}.tribe-events-admin__issues-found-card-title span{color:#0f1031;display:block}.tribe-events-admin__issues-found-card-title i{background-image:url(../images/help/arrow-down.svg);background-position:50%;background-repeat:no-repeat;background-size:contain;height:15px;margin:12px 20px;position:absolute;right:0;top:0;transition:all .3s ease;width:15px}.tribe-events-admin__issues-found-card-title.active i{background-image:url(../images/help/arrow-up.svg);background-repeat:no-repeat;top:5px}.tribe-events-admin__issues-found-card-description{display:none;padding:0 20px 20px 55px}.tribe-events-admin__issues-found-card-description p{color:#0f1031;font-size:16px;margin:0}.tribe-events-admin__issues-found-card-description-actions{display:flex;padding:20px 0 10px}.tribe-events-admin__issues-found-card-description-actions a{border-bottom:2px solid;color:#334aff;font-size:16px;margin-right:20px;padding-bottom:5px;text-decoration:none}.tribe-events-admin__issues-found-card-description-actions a:focus{box-shadow:none;outline:none}.tribe-events-admin__issues-found-card-description-actions a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__ea-status-table-wrapper{overflow-x:auto}.tribe-events-admin__ea-status-table{border:1px solid #e1e1e4;border-radius:16px;margin:30px 0 40px;overflow:hidden}.tribe-events-admin__ea-status-table a{border-bottom:2px solid;color:#334aff;padding-bottom:2px;text-decoration:none}.tribe-events-admin__ea-status-table a:focus{box-shadow:none;outline:none}.tribe-events-admin__ea-status-table a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__ea-status-table tr{align-items:center;display:flex}.tribe-events-admin__ea-status-table th{color:#0f1031;font-weight:700;line-height:1.17;margin-top:10px;padding:5px 25px}.tribe-events-admin__ea-status-table td{align-items:center;color:#0f1031;display:flex;font-size:16px;line-height:1.63;padding:10px 25px;width:25%}.tribe-events-admin__ea-status-table td:nth-child(2){width:45%}.tribe-events-admin__ea-status-table td:nth-child(3){display:flex;justify-content:flex-end;width:30%}.tribe-events-admin__ea-status-table-dark{background-color:#f9f7f4}.tribe-events-admin__ea-status-table td img{height:21px;margin-right:14px;object-fit:contain;width:21px}.tec-troubleshooting,.tribe_events_page_tec-troubleshooting{background-color:#fff}#tribe-community,#tribe-ticketing{display:none}.tribe-events-admin__troubleshooting-notice{background-color:#161b7d;color:#fff;font-size:16px;line-height:1;margin-left:-1.55vw;padding:24px 0}.tribe-events-admin__troubleshooting-notice_title{margin:0 auto;max-width:1024px;padding-left:25px;width:90%}.tribe-events-admin__troubleshooting-notice_title a{border-bottom:2px solid;color:#fff;font-size:16px;line-height:1;padding-bottom:2px;text-decoration:none}.tribe-events-admin__troubleshooting-notice_title a:focus{box-shadow:none;outline:none}.tribe-events-admin__troubleshooting-notice_title a:hover{border-bottom:2px solid;color:#f3eee8}.tec-help #tec-help-community,.tec-help #tec-help-ticketing{display:none}.tec-help .tribe-events-admin-title{padding-top:25px}.tec-help .tribe-events-admin-title img{height:67px}body.tribe-welcome #fs_connect{border:1px solid #e1e1e4;border-radius:16px;box-shadow:none;box-sizing:border-box;margin-left:22px}body.tribe-welcome #fs_connect .fs-actions{background-color:transparent}body.tribe-welcome #fs_connect .fs-permissions{border-top:1px solid #e1e1e4;margin:0 16px}body.tribe-welcome #fs_connect button{background-color:#3d54ff;border-color:#3d54ff}body.tribe-welcome #fs_connect .button-secondary{background:#fff;border-color:#3d54ff;color:#3d54ff}body.tribe-welcome #fs_connect a{color:#3d54ff}body.tribe-welcome #fs_connect a:focus{box-shadow:none;outline:none}body.tribe-welcome #fs_connect a:hover{color:#161b7d}.black-friday-promo{align-items:flex-start;display:flex;flex-direction:column-reverse;justify-content:space-between}.black-friday-promo .black-friday-promo__button{background:#3d54ff;border-color:transparent;border-radius:20px;color:#fff;font-size:12px;height:34px;line-height:32px;min-height:unset;width:115px}.black-friday-promo .black-friday-promo__button:active,.black-friday-promo .black-friday-promo__button:focus,.black-friday-promo .black-friday-promo__button:hover{background:#1c39bb;border-color:transparent;color:#fff}.black-friday-promo__promo{background-position:50%;background-repeat:no-repeat;border-radius:10px;display:grid;grid-template-areas:"a b";grid-template-columns:auto 150px;height:150px;margin:10px 0;max-width:100%;width:450px}.black-friday-promo__content{grid-area:b;padding-top:8px;text-align:center}.black-friday-promo__text{color:#0f1031;font-family:monospace;font-size:16px;line-height:1;text-transform:uppercase}.black-friday-promo__branding-image{max-width:390px;width:100%}.end-of-year-sale-promo{align-items:flex-start;display:flex;flex-direction:column-reverse;justify-content:space-between}.end-of-year-sale-promo .end-of-year-sale-promo__button{background:#3d54ff;border-color:transparent;border-radius:20px;color:#fff;font-size:12px;height:34px;line-height:32px;min-height:unset;width:115px}.end-of-year-sale-promo .end-of-year-sale-promo__button:active,.end-of-year-sale-promo .end-of-year-sale-promo__button:focus,.end-of-year-sale-promo .end-of-year-sale-promo__button:hover{background:#1c39bb;border-color:transparent;color:#fff}.end-of-year-sale-promo__promo{background-color:#fff;background-position:0 0;background-repeat:no-repeat;border-radius:10px;display:grid;flex-shrink:0;grid-template-areas:"a b";grid-template-columns:auto 160px;height:150px;margin:10px 0;max-width:100%;width:460px}.end-of-year-sale-promo__content{grid-area:b;padding-top:8px;text-align:center}.end-of-year-sale-promo__text{color:#0f1031;font-family:monospace;font-size:13px;line-height:1.2;margin-bottom:8px;text-transform:uppercase}.end-of-year-sale-promo__branding-image{max-width:390px;width:100%}.tribe-common .tec-admin__upsell{display:inline-block;font-family:var(--tec-font-family-sans-serif);font-size:var(--tec-font-size-1);font-weight:var(--tec-font-weight-regular);line-height:var(--tec-line-height-1)}.tribe-common .tec-admin__upsell-content{align-items:center;display:flex;padding:var(--tec-spacer-1);padding-right:var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-icon,.tribe-common .tec-admin__upsell-icon-image{height:24px;width:24px}.tribe-common .tec-admin__upsell-text-wrap{margin-left:var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-link{color:var(--tec-color-accent-primary);font-weight:var(--tec-font-weight-bold);text-decoration:none}.tribe-common .tec-admin__upsell--rounded-corners .tec-admin__upsell-content{background:var(--tec-color-accent-primary-background);border-radius:24px}.tribe-common .tec-admin__upsell--rounded-corners-text .tec-admin__upsell-text-wrap{background:rgba(51,74,255,.1);border-radius:14px;padding:var(--tec-spacer-1) var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-link--dark{color:var(--tec-color-text-primary)}.tribe-common .tec-admin__upsell-link--underlined{text-decoration:underline}.tribe-field .tec-admin__settings-image-field-btn-remove{border:none;color:#3c434a;cursor:pointer;padding:0;text-decoration:underline}.tribe-field .tec-admin__settings-image-field-image-container{height:120px;position:relative}.tribe-field .tec-admin__settings-image-field-image-container img{height:auto;max-height:100%;width:auto}.tribe-field.tribe-field-color .wp-color-result.button{align-items:stretch;border-radius:var(--tec-border-radius-default);display:flex;margin:0 6px 6px 0;min-height:30px;padding:0 0 0 var(--tec-spacer-7)}.tribe-field.tribe-field-color .wp-color-result-text{background:var(--tec-color-background);border-left:1px solid var(--tec-color-border-default);font-size:var(--tec-font-size-0);line-height:30px;padding:0 var(--tec-spacer-2)}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:320px){.tribe-marketing-notice .tribe-marketing-notice__icon{display:block}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:145px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:130px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:642px}}@media screen and (min-width:400px){.notice-tribe-banner .tribe-marketing-notice__icon{width:67px}}@media screen and (min-width:800px){.notice-tribe-banner h3{display:inline-block;font-size:1rem;margin:0 .5rem 0 0}.notice-tribe-banner a{line-height:1.5}.notice-tribe-banner a,.notice-tribe-banner p{font-size:1rem}.notice-tribe-banner p{margin:0 .5rem 0 0}.notice-tribe-banner .tribe-marketing-notice__cta{display:inline-block;margin-left:.5rem}}@media screen and (min-width:1215px){.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:992px}.tribe-welcome .notice-tribe-banner .tribe-marketing-notice{max-width:1036px}}@media screen and (min-width:710px){.tribe-events-admin-content-wrapper{width:670px}.tribe-events-admin-card--2up{display:inline-block;width:calc(50% - 20px)}.tribe-events-admin-card--2up.tribe-events-admin-card--first{margin-right:36px}.tribe-events-admin-card--2up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--2up .tribe-events-admin-card__image{height:100px;margin-bottom:12px}.tribe-events-admin-card--2up .tribe-events-admin-card__title{margin-bottom:27px;max-width:340px}.tribe-events-admin-card--3up{display:inline-block;margin-bottom:32px;width:calc(50% - 18px)}.tribe-events-admin-card--3up.tribe-events-admin-card--first{margin-right:32px}.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:0}.tribe-events-admin-card__title{font-size:20px;line-height:23px}.tribe-events-admin-card--1up{display:inline-block;margin-left:32px;width:calc(50% - 18px)}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--1up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card--no-pad{height:154px;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{margin-left:50%;padding:42px 0 10px}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin-left:50%}.tribe-events-admin-card--promo-blue{display:block;margin-left:0;min-height:170px;width:100%}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{float:left;max-width:300px}.tribe-events-admin-graphic{max-width:250px;top:0}.tribe-events-admin-graphic--desktop-only{display:block}.tribe-events-admin-graphic--mobile-only{display:none}.tribe-events-admin-card__form{float:right;width:300px}input[type=email].tribe-events-admin-card__input{width:300px}.tribe-events-admin-title{padding-top:50px}.tribe-events-admin-title__description{padding-top:15px}.tribe-events-admin-title__heading{font-size:48px;line-height:55px;margin:0}.tribe-events-admin-title__logo{margin-right:14px;padding-top:5px;width:40px}.tribe-events-admin-tickets .tribe-events-admin-card__title{font-size:18px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{font-size:18px;height:66px}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:8px;padding-top:4px;width:60px}}@media screen and (min-width:1217px){.tribe-events-admin-content-wrapper{max-width:1060px;width:100%}.tribe-events-admin-card--2up{margin-right:36px;width:486px}.tribe-events-admin-card--3up{width:310px}.tribe-events-admin-card--3up.tribe-events-admin-card--first,.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:36px}.tribe-events-admin-card--3up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--1up{margin:0 0 36px;padding:33px 44px 30px;text-align:left;width:1012px}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:auto}.tribe-events-admin-card--1up .tribe-events-admin-card__image{float:left;margin:0 48px 10px 0}.tribe-events-admin-card--no-pad{padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__image{margin:0;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{margin-left:50%;padding:42px 0 10px}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin-left:50%}.tribe-events-admin-card--promo-blue{min-height:150px}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{max-width:450px}.tribe-events-admin-graphic{max-width:none}.tribe-events-admin-card__form,input[type=email].tribe-events-admin-card__input{width:365px}.tribe-events-admin-quick-nav{border-radius:100px;display:inline-block;height:54px;margin:24px 0 94px;max-width:1010px;padding:0 36px 0 0}.tribe-events-admin-quick-nav__link-item{display:inline-block;padding:18px 10px 0}.tribe-events-admin-quick-nav__title{padding:19px 6px 17px 32px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{height:auto}}@media screen and (max-width:768px){.tribe-events-admin-header__logo-word-mark{width:285px}.tribe-events-admin-header__right-image{height:160px}.tribe-events-admin-header__description{max-width:100%}.tribe-events-admin-tab-nav li{margin-right:20px}.tribe-events-admin-tab-nav .selected{border-bottom:2px solid currentColor;padding-bottom:10px}.tribe-events-admin-2col-grid{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr))}.tribe-events-admin-3col-grid{grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr))}.tribe-events-admin-extensions-title{max-width:100%}.tribe-events-admin-cta{align-items:flex-start;flex-direction:column;overflow:hidden}.tribe-events-admin-footer-logo{width:225px}.tribe-events-admin__system-information{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr));margin:50px 0}}@media screen and (max-width:480px){.tribe-events-admin-header__logo-word-mark{width:260px}.tribe-events-admin-header__right-image{height:120px}.tribe-events-admin-header__title{font-size:35px}.tribe-events-admin-header__description{max-width:100%}.tribe-events-admin-tab-nav{border:1px solid #e1e1e4;border-radius:20px;flex-direction:column;padding:18px 22px}.tribe-events-admin-tab-nav li{margin-bottom:18px;margin-right:0}.tribe-events-admin-tab-nav .selected{border-bottom:2px solid currentColor;padding-bottom:10px;width:fit-content}.tribe-events-admin__line{border:none}.tribe-events-admin-products-card,.tribe-events-admin-products-description{display:none}.tribe-events-admin-container,.tribe-events-admin-content-wrapper.tribe-events-admin-container{max-width:90%}.tribe-events-admin-2col-grid,.tribe-events-admin-3col-grid,.tribe-events-admin-4col-grid{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr))}.tribe-events-admin-extensions-title{max-width:100%}.tribe-events-admin-cta__image{height:auto;width:90%}.tribe-events-admin-cta__content,.tribe-events-admin__troubleshooting-cta{align-items:flex-start;padding:32px 23px 45px;width:auto}.tribe-events-admin-cta__content-title{font-size:22px;text-align:left}.tribe-events-admin-cta__content-subtitle{text-align:left}.tribe-events-admin-footer-logo{width:210px}.tribe-events-admin__system-information{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr));margin:50px 0}.tribe-events-admin__troubleshooting-notice{margin-left:-20px}.tribe-events-admin__troubleshooting-notice_title{max-width:90%}}@media screen and (min-width:1200px){.tribe-events-admin-products-card__group{max-width:47%}}@media screen and (min-width:500px) and (max-width:1080px){.tribe-events-admin-4col-grid{grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr))}}@media screen and (min-width:768px){.tribe-events-admin-section-header{font-size:28px;line-height:1.143;margin:50px 0 21px}}@media screen and (max-width:1080px){.tribe-events-admin-cta__content-title{font-size:24px}}@media only screen and (max-width:1920px){.tribe-events-admin__system-information-widget-copy{right:20.5vw}}@media only screen and (max-width:1280px){.tribe-events-admin__system-information-widget-copy{right:22vw}}@media only screen and (max-width:768px){.tribe-events-admin__system-information-widget-copy{left:10px;right:auto}.tribe-events-admin__recent-log-filters{flex-direction:column}.tribe-events-admin__recent-log-filters-field{margin-bottom:30px;margin-right:0}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:first-child,.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(2),.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(3){padding-right:30px}.tribe-events-admin__issues-found-card-title h3{max-width:90%}}@media only screen and (max-width:480px){.tribe-events-admin__system-information-widget-copy{left:10px;right:auto}.tribe-events-admin__recent-log-filters{flex-direction:column}.tribe-events-admin__recent-log-filters-field{margin-bottom:30px;margin-right:0}.tribe-events-admin__recent-log-filters-select-wrapper:after{right:25px}.tribe-events-admin__issues-found-card-title h3{max-width:80%}.tribe-events-admin__ea-status-table{overflow:scroll}.tribe-events-admin__ea-status-table td{min-width:150px}.tribe-events-admin__ea-status-table td:nth-child(2),.tribe-events-admin__ea-status-table td:nth-child(3){width:100%}}@media (min-width:1024px){.black-friday-promo{align-items:center;flex-direction:row}.black-friday-promo__branding{padding-right:10px;width:calc(100% - 450px)}.end-of-year-sale-promo{align-items:center;flex-direction:row}.end-of-year-sale-promo__branding{padding-right:10px;width:calc(100% - 460px)}}@media (max-width:525px){.end-of-year-sale-promo__promo{grid-template-areas:"a" "b";grid-template-columns:auto;margin:20px auto;padding-top:100px;width:300px}}
common/src/resources/images/welcome/tickets-commerce.png ADDED
Binary file
common/src/resources/js/admin-color-field.js ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* eslint-disable es5/no-arrow-functions */
2
+ /* eslint-disable linebreak-style */
3
+ /**
4
+ * Makes sure we have all the required levels on the Tribe Object.
5
+ *
6
+ * @since TBD
7
+ *
8
+ * @type {PlainObject}
9
+ */
10
+ tribe.settings = tribe.settings || {};
11
+ tribe.settings.fields = tribe.settings.fields || {};
12
+
13
+ /**
14
+ * Configure image field for settings in global Tribe variable.
15
+ *
16
+ * @since TBD
17
+ *
18
+ * @type {PlainObject}
19
+ */
20
+ tribe.settings.fields.color = {};
21
+
22
+ /**
23
+ * Initializes the color field for settings.
24
+ *
25
+ * @since TBD
26
+ *
27
+ * @param {PlainObject} $ jQuery
28
+ * @param {PlainObject} obj tribe.settings.fields.color
29
+ */
30
+ ( function( $, obj ) {
31
+ 'use strict';
32
+
33
+ /**
34
+ * Selectors used for configuration and setup
35
+ *
36
+ * @since TBD
37
+ *
38
+ * @type {PlainObject}
39
+ */
40
+ obj.selectors = {
41
+ colorFieldInput: '.tec-admin__settings-color-field-input',
42
+ };
43
+
44
+ /**
45
+ * Handles the initialization of color fields when Document is ready.
46
+ *
47
+ * @since TBD
48
+ *
49
+ * @return {void}
50
+ */
51
+ obj.init = () => {
52
+ $( obj.selectors.colorFieldInput ).wpColorPicker();
53
+ };
54
+
55
+ $( obj.init );
56
+
57
+ } )( jQuery, tribe.settings.fields.color );
common/src/resources/js/admin-color-field.min.js ADDED
@@ -0,0 +1 @@
 
1
+ tribe.settings=tribe.settings||{},tribe.settings.fields=tribe.settings.fields||{},tribe.settings.fields.color={},function(t,i){"use strict";i.selectors={colorFieldInput:".tec-admin__settings-color-field-input"},i.init=(()=>{t(i.selectors.colorFieldInput).wpColorPicker()}),t(i.init)}(jQuery,tribe.settings.fields.color);
common/src/resources/js/admin-image-field.js ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* eslint-disable linebreak-style */
2
+ /**
3
+ * Makes sure we have all the required levels on the Tribe Object.
4
+ *
5
+ * @since TBD
6
+ *
7
+ * @type {PlainObject}
8
+ */
9
+ tribe.settings = tribe.settings || {};
10
+ tribe.settings.fields = tribe.settings.fields || {};
11
+
12
+ /**
13
+ * Configure image field for settings in global Tribe variable.
14
+ *
15
+ * @since TBD
16
+ *
17
+ * @type {PlainObject}
18
+ */
19
+ tribe.settings.fields.image = {};
20
+
21
+ /**
22
+ * Intializes the image field for settings.
23
+ *
24
+ * @since TBD
25
+ *
26
+ * @param {PlainObject} $ jQuery
27
+ * @param {PlainObject} obj tribe.settings.fields.image
28
+ */
29
+ ( function( $, obj ) {
30
+ 'use strict';
31
+ var $document = $( document );
32
+
33
+ /**
34
+ * Store the frame object globally.
35
+ *
36
+ * @since TBD
37
+ *
38
+ * @type {PlainObject}
39
+ */
40
+ obj.frame = false;
41
+
42
+ /**
43
+ * Selectors used for configuration and setup
44
+ *
45
+ * @since TBD
46
+ *
47
+ * @type {PlainObject}
48
+ */
49
+ obj.selectors = {
50
+ imageFieldContainer: '.tribe-field-image',
51
+ addImgLink: '.tec-admin__settings-image-field-btn-add',
52
+ removeImgLink: '.tec-admin__settings-image-field-btn-remove',
53
+ imgContainer: '.tec-admin__settings-image-field-image-container',
54
+ imgIdInput: '.tec-admin__settings-image-field-input',
55
+ };
56
+
57
+ /**
58
+ * Method to hide/show elements based on the image input field.
59
+ *
60
+ * @since TBD
61
+ *
62
+ * @param {jQuery} $fieldParent jQuery object of the field container.
63
+ *
64
+ * @return {void}
65
+ */
66
+ obj.hideElements = function( $fieldParent ) {
67
+ const imageIsSet = $fieldParent.find( obj.selectors.imgIdInput ).val() !== '';
68
+ $fieldParent.find( obj.selectors.addImgLink ).toggleClass( 'hidden', imageIsSet );
69
+ $fieldParent.find( obj.selectors.removeImgLink ).toggleClass( 'hidden', !imageIsSet );
70
+ $fieldParent.find( obj.selectors.imgContainer ).toggleClass( 'hidden', !imageIsSet );
71
+ };
72
+
73
+ /**
74
+ * Method to handle when image is selected from WP Media feature.
75
+ *
76
+ * @since TBD
77
+ *
78
+ * @param {jQuery} $fieldParent jQuery object of the field container.
79
+ *
80
+ * @return {void}
81
+ */
82
+ obj.onImageSelect = function( $fieldParent ) {
83
+ const attachment = obj.frame.state().get('selection').first().toJSON(),
84
+ $imgContainer = $fieldParent.find( obj.selectors.imgContainer );
85
+ if ( $imgContainer.find( 'img' ).length > 0 ) {
86
+ $imgContainer.find( 'img' ).attr( 'src', attachment.url );
87
+ } else {
88
+ $imgContainer.html( '<img src="' + attachment.url + '" />' );
89
+ }
90
+ $fieldParent.find( obj.selectors.imgIdInput ).val( attachment.url );
91
+ obj.hideElements( $fieldParent );
92
+ };
93
+
94
+ /**
95
+ * Method that handles 'Add Image' button click event.
96
+ *
97
+ * @since TBD
98
+ *
99
+ * @param {Event} e Click event.
100
+ *
101
+ * @return {void}
102
+ */
103
+ obj.addImage = function( e ) {
104
+ e.preventDefault();
105
+ const $target = $( e.target );
106
+ const $fieldParent = $target.closest( obj.selectors.imageFieldContainer );
107
+
108
+ if ( obj.frame ) {
109
+ obj.frame.open();
110
+ } else {
111
+ obj.frame = wp.media({ // eslint-disable-line no-undef
112
+ title: $fieldParent.data( 'select-image-text' ),
113
+ button: {
114
+ text: $fieldParent.data( 'use-image-text' )
115
+ },
116
+ multiple: false
117
+ });
118
+ obj.frame.open();
119
+ }
120
+
121
+ obj.frame.off( 'select' ).on( 'select', function() {
122
+ obj.onImageSelect( $fieldParent );
123
+ } );
124
+ };
125
+
126
+ /**
127
+ * Method that handles 'Remove Image' button click event.
128
+ *
129
+ * @since TBD
130
+ *
131
+ * @param {Event} e Click event.
132
+ *
133
+ * @return {void}
134
+ */
135
+ obj.removeImage = function( e ) {
136
+ e.preventDefault();
137
+ const $target = $( e.target );
138
+ const $fieldParent = $target.closest( obj.selectors.imageFieldContainer );
139
+ $fieldParent.find( obj.selectors.imgIdInput ).val( '' );
140
+ $fieldParent.find( obj.selectors.imgContainer ).html( '' );
141
+ obj.hideElements( $fieldParent );
142
+ };
143
+
144
+ /**
145
+ * Bind events for events bar
146
+ *
147
+ * @since TBD
148
+ *
149
+ * @return {void}
150
+ */
151
+ obj.bindEvents = function() {
152
+ $document.on( 'click', obj.selectors.addImgLink, obj.addImage );
153
+ $document.on( 'click', obj.selectors.removeImgLink, obj.removeImage );
154
+ };
155
+
156
+ /**
157
+ * Handles the initialization of image fields when Document is ready.
158
+ *
159
+ * @since TBD
160
+ *
161
+ * @return {void}
162
+ */
163
+ obj.init = function() {
164
+ $( obj.selectors.imageFieldContainer ).each( function( x, elm ) {
165
+ obj.hideElements( $( elm ) );
166
+ } );
167
+ obj.bindEvents();
168
+ };
169
+
170
+ $( obj.init );
171
+
172
+ } )( jQuery, tribe.settings.fields.image );
common/src/resources/js/admin-image-field.min.js ADDED
@@ -0,0 +1 @@
 
1
+ tribe.settings=tribe.settings||{},tribe.settings.fields=tribe.settings.fields||{},tribe.settings.fields.image={},function(e,t){"use strict";var i=e(document);t.frame=!1,t.selectors={imageFieldContainer:".tribe-field-image",addImgLink:".tec-admin__settings-image-field-btn-add",removeImgLink:".tec-admin__settings-image-field-btn-remove",imgContainer:".tec-admin__settings-image-field-image-container",imgIdInput:".tec-admin__settings-image-field-input"},t.hideElements=function(e){const i=""!==e.find(t.selectors.imgIdInput).val();e.find(t.selectors.addImgLink).toggleClass("hidden",i),e.find(t.selectors.removeImgLink).toggleClass("hidden",!i),e.find(t.selectors.imgContainer).toggleClass("hidden",!i)},t.onImageSelect=function(e){const i=t.frame.state().get("selection").first().toJSON(),n=e.find(t.selectors.imgContainer);n.find("img").length>0?n.find("img").attr("src",i.url):n.html('<img src="'+i.url+'" />'),e.find(t.selectors.imgIdInput).val(i.url),t.hideElements(e)},t.addImage=function(i){i.preventDefault();const n=e(i.target).closest(t.selectors.imageFieldContainer);t.frame?t.frame.open():(t.frame=wp.media({title:n.data("select-image-text"),button:{text:n.data("use-image-text")},multiple:!1}),t.frame.open()),t.frame.off("select").on("select",function(){t.onImageSelect(n)})},t.removeImage=function(i){i.preventDefault();const n=e(i.target).closest(t.selectors.imageFieldContainer);n.find(t.selectors.imgIdInput).val(""),n.find(t.selectors.imgContainer).html(""),t.hideElements(n)},t.bindEvents=function(){i.on("click",t.selectors.addImgLink,t.addImage),i.on("click",t.selectors.removeImgLink,t.removeImage)},t.init=function(){e(t.selectors.imageFieldContainer).each(function(i,n){t.hideElements(e(n))}),t.bindEvents()},e(t.init)}(jQuery,tribe.settings.fields.image);
common/vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitbe502ab6c2b9b341451ac40a62acd01b::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit7aca5473727aeb3be10fa099344985aa::getLoader();
common/vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInit0bcc44b8fd3b541feacf464057247397::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInit7b4c9b325ada73e49f16fe5940811ddf::getLoader();
common/vendor/composer/autoload_classmap.php CHANGED
@@ -126,6 +126,7 @@ return array(
126
  'Tribe\\Admin\\Notice\\Service_Provider' => $baseDir . '/src/Tribe/Admin/Notice/Service_Provider.php',
127
  'Tribe\\Admin\\Notice\\WP_Version' => $baseDir . '/src/Tribe/Admin/Notice/WP_Version.php',
128
  'Tribe\\Admin\\Pages' => $baseDir . '/src/Tribe/Admin/Pages.php',
 
129
  'Tribe\\Admin\\Troubleshooting' => $baseDir . '/src/Tribe/Admin/Troubleshooting.php',
130
  'Tribe\\Admin\\Upsell_Notice\\Main' => $baseDir . '/src/Tribe/Admin/Upsell_Notice/Main.php',
131
  'Tribe\\Customizer\\Control' => $baseDir . '/src/Tribe/Customizer/Control.php',
126
  'Tribe\\Admin\\Notice\\Service_Provider' => $baseDir . '/src/Tribe/Admin/Notice/Service_Provider.php',
127
  'Tribe\\Admin\\Notice\\WP_Version' => $baseDir . '/src/Tribe/Admin/Notice/WP_Version.php',
128
  'Tribe\\Admin\\Pages' => $baseDir . '/src/Tribe/Admin/Pages.php',
129
+ 'Tribe\\Admin\\Settings' => $baseDir . '/src/Tribe/Admin/Settings.php',
130
  'Tribe\\Admin\\Troubleshooting' => $baseDir . '/src/Tribe/Admin/Troubleshooting.php',
131
  'Tribe\\Admin\\Upsell_Notice\\Main' => $baseDir . '/src/Tribe/Admin/Upsell_Notice/Main.php',
132
  'Tribe\\Customizer\\Control' => $baseDir . '/src/Tribe/Customizer/Control.php',
common/vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitbe502ab6c2b9b341451ac40a62acd01b
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInitbe502ab6c2b9b341451ac40a62acd01b
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInitbe502ab6c2b9b341451ac40a62acd01b', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInitbe502ab6c2b9b341451ac40a62acd01b', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInitbe502ab6c2b9b341451ac40a62acd01b::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit7aca5473727aeb3be10fa099344985aa
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit7aca5473727aeb3be10fa099344985aa', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit7aca5473727aeb3be10fa099344985aa', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit7aca5473727aeb3be10fa099344985aa::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
common/vendor/composer/autoload_real_52.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
- class ComposerAutoloaderInit0bcc44b8fd3b541feacf464057247397 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit0bcc44b8fd3b541feacf464057247397 {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit0bcc44b8fd3b541feacf464057247397', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit0bcc44b8fd3b541feacf464057247397', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
+ class ComposerAutoloaderInit7b4c9b325ada73e49f16fe5940811ddf {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit7b4c9b325ada73e49f16fe5940811ddf', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit7b4c9b325ada73e49f16fe5940811ddf', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
common/vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInitbe502ab6c2b9b341451ac40a62acd01b
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
@@ -187,6 +187,7 @@ class ComposerStaticInitbe502ab6c2b9b341451ac40a62acd01b
187
  'Tribe\\Admin\\Notice\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Admin/Notice/Service_Provider.php',
188
  'Tribe\\Admin\\Notice\\WP_Version' => __DIR__ . '/../..' . '/src/Tribe/Admin/Notice/WP_Version.php',
189
  'Tribe\\Admin\\Pages' => __DIR__ . '/../..' . '/src/Tribe/Admin/Pages.php',
 
190
  'Tribe\\Admin\\Troubleshooting' => __DIR__ . '/../..' . '/src/Tribe/Admin/Troubleshooting.php',
191
  'Tribe\\Admin\\Upsell_Notice\\Main' => __DIR__ . '/../..' . '/src/Tribe/Admin/Upsell_Notice/Main.php',
192
  'Tribe\\Customizer\\Control' => __DIR__ . '/../..' . '/src/Tribe/Customizer/Control.php',
@@ -269,10 +270,10 @@ class ComposerStaticInitbe502ab6c2b9b341451ac40a62acd01b
269
  public static function getInitializer(ClassLoader $loader)
270
  {
271
  return \Closure::bind(function () use ($loader) {
272
- $loader->prefixLengthsPsr4 = ComposerStaticInitbe502ab6c2b9b341451ac40a62acd01b::$prefixLengthsPsr4;
273
- $loader->prefixDirsPsr4 = ComposerStaticInitbe502ab6c2b9b341451ac40a62acd01b::$prefixDirsPsr4;
274
- $loader->prefixesPsr0 = ComposerStaticInitbe502ab6c2b9b341451ac40a62acd01b::$prefixesPsr0;
275
- $loader->classMap = ComposerStaticInitbe502ab6c2b9b341451ac40a62acd01b::$classMap;
276
 
277
  }, null, ClassLoader::class);
278
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit7aca5473727aeb3be10fa099344985aa
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
187
  'Tribe\\Admin\\Notice\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Admin/Notice/Service_Provider.php',
188
  'Tribe\\Admin\\Notice\\WP_Version' => __DIR__ . '/../..' . '/src/Tribe/Admin/Notice/WP_Version.php',
189
  'Tribe\\Admin\\Pages' => __DIR__ . '/../..' . '/src/Tribe/Admin/Pages.php',
190
+ 'Tribe\\Admin\\Settings' => __DIR__ . '/../..' . '/src/Tribe/Admin/Settings.php',
191
  'Tribe\\Admin\\Troubleshooting' => __DIR__ . '/../..' . '/src/Tribe/Admin/Troubleshooting.php',
192
  'Tribe\\Admin\\Upsell_Notice\\Main' => __DIR__ . '/../..' . '/src/Tribe/Admin/Upsell_Notice/Main.php',
193
  'Tribe\\Customizer\\Control' => __DIR__ . '/../..' . '/src/Tribe/Customizer/Control.php',
270
  public static function getInitializer(ClassLoader $loader)
271
  {
272
  return \Closure::bind(function () use ($loader) {
273
+ $loader->prefixLengthsPsr4 = ComposerStaticInit7aca5473727aeb3be10fa099344985aa::$prefixLengthsPsr4;
274
+ $loader->prefixDirsPsr4 = ComposerStaticInit7aca5473727aeb3be10fa099344985aa::$prefixDirsPsr4;
275
+ $loader->prefixesPsr0 = ComposerStaticInit7aca5473727aeb3be10fa099344985aa::$prefixesPsr0;
276
+ $loader->classMap = ComposerStaticInit7aca5473727aeb3be10fa099344985aa::$classMap;
277
 
278
  }, null, ClassLoader::class);
279
  }
event-tickets.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Event Tickets
4
  Plugin URI: https://evnt.is/1acb
5
  Description: Event Tickets allows you to sell basic tickets and collect RSVPs from any post, page, or event.
6
- Version: 5.4.3.1
7
  Author: The Events Calendar
8
  Author URI: https://evnt.is/1aor
9
  License: GPLv2 or later
@@ -12,7 +12,7 @@ Text Domain: event-tickets
12
  Domain Path: /lang/
13
  */
14
  /*
15
- Copyright 2010-2012 by Modern Tribe Inc and the contributors
16
 
17
  This program is free software; you can redistribute it and/or
18
  modify it under the terms of the GNU General Public License
3
  Plugin Name: Event Tickets
4
  Plugin URI: https://evnt.is/1acb
5
  Description: Event Tickets allows you to sell basic tickets and collect RSVPs from any post, page, or event.
6
+ Version: 5.4.4
7
  Author: The Events Calendar
8
  Author URI: https://evnt.is/1aor
9
  License: GPLv2 or later
12
  Domain Path: /lang/
13
  */
14
  /*
15
+ Copyright 2010-2022 by The Events Calendar and the contributors
16
 
17
  This program is free software; you can redistribute it and/or
18
  modify it under the terms of the GNU General Public License
lang/event-tickets-nl_NL.mo CHANGED
Binary file
lang/event-tickets-ro_RO.mo CHANGED
Binary file
lang/event-tickets.pot CHANGED
@@ -2,20 +2,20 @@
2
  # This file is distributed under the same license as the Event Tickets package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Event Tickets 5.4.2\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/event-tickets\n"
7
- "POT-Creation-Date: 2022-07-01 13:34:05+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2022-07-01 13:34\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
15
- #. #-#-#-#-# event-tickets.pot (Event Tickets 5.4.2) #-#-#-#-#
16
  #. Plugin Name of the plugin/theme
17
  #: event-tickets.php:61 src/Tribe/Admin/Notices.php:92 src/Tribe/Main.php:701
18
- #: src/Tribe/Privacy.php:59 src/admin-views/admin-welcome-message.php:60
19
  msgid "Event Tickets"
20
  msgstr ""
21
 
@@ -175,61 +175,61 @@ msgid "Check In"
175
  msgstr ""
176
 
177
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:350
178
- #: src/Tribe/Attendees_Table.php:994
179
  msgctxt "Attendees Table search options"
180
  msgid "Search by Purchaser Name"
181
  msgstr ""
182
 
183
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:351
184
- #: src/Tribe/Attendees_Table.php:995
185
  msgctxt "Attendees Table search options"
186
  msgid "Search by Purchaser Email"
187
  msgstr ""
188
 
189
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:352
190
- #: src/Tribe/Attendees_Table.php:996
191
  msgctxt "Attendees Table search options"
192
  msgid "Search by Ticket Holder Name"
193
  msgstr ""
194
 
195
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:353
196
- #: src/Tribe/Attendees_Table.php:997
197
  msgctxt "Attendees Table search options"
198
  msgid "Search by Ticket Holder Email"
199
  msgstr ""
200
 
201
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:354
202
- #: src/Tribe/Attendees_Table.php:998
203
  msgctxt "Attendees Table search options"
204
  msgid "Search by User ID"
205
  msgstr ""
206
 
207
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:355
208
- #: src/Tribe/Attendees_Table.php:999
209
  msgctxt "Attendees Table search options"
210
  msgid "Search by Order Status"
211
  msgstr ""
212
 
213
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:356
214
- #: src/Tribe/Attendees_Table.php:1000
215
  msgctxt "Attendees Table search options"
216
  msgid "Search by Order ID"
217
  msgstr ""
218
 
219
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:357
220
- #: src/Tribe/Attendees_Table.php:1001
221
  msgctxt "Attendees Table search options"
222
  msgid "Search by Security Code"
223
  msgstr ""
224
 
225
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:358
226
- #: src/Tribe/Attendees_Table.php:1002
227
  msgctxt "Attendees Table search options"
228
  msgid "Search by %s ID"
229
  msgstr ""
230
 
231
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:359
232
- #: src/Tribe/Attendees_Table.php:1003
233
  msgctxt "Attendees Table search options"
234
  msgid "Search by Product ID"
235
  msgstr ""
@@ -259,7 +259,7 @@ msgid "Delete"
259
  msgstr ""
260
 
261
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:630
262
- #: src/Tribe/Attendees_Table.php:980
263
  msgid "No matching attendees found."
264
  msgstr ""
265
 
@@ -307,12 +307,12 @@ msgstr ""
307
  msgid "Total"
308
  msgstr ""
309
 
310
- #: src/Tickets/Commerce/Admin_Tables/Orders.php:178
311
  #: src/Tribe/Commerce/PayPal/Orders/Table.php:274
312
  msgid "No matching orders found."
313
  msgstr ""
314
 
315
- #: src/Tickets/Commerce/Admin_Tables/Orders.php:281
316
  #: src/Tribe/Commerce/PayPal/Orders/Table.php:177
317
  msgid "%1$s"
318
  msgstr ""
@@ -4639,32 +4639,32 @@ msgid "Reach out to PayPal to resolve the following capabilities:"
4639
  msgstr ""
4640
 
4641
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:77
4642
- #: src/Tribe/Commerce/PayPal/Main.php:1906 src/Tribe/RSVP.php:2361
4643
  msgid "Return to the %1$sAttendees Report%2$s."
4644
  msgstr ""
4645
 
4646
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:84
4647
- #: src/Tribe/Commerce/PayPal/Main.php:1913 src/Tribe/RSVP.php:2368
4648
  msgid "Post updated. %1$s"
4649
  msgstr ""
4650
 
4651
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:88
4652
- #: src/Tribe/Commerce/PayPal/Main.php:1917 src/Tribe/RSVP.php:2372
4653
  msgid "Post published. %1$s"
4654
  msgstr ""
4655
 
4656
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:91
4657
- #: src/Tribe/Commerce/PayPal/Main.php:1920 src/Tribe/RSVP.php:2375
4658
  msgid "Post submitted."
4659
  msgstr ""
4660
 
4661
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:92
4662
- #: src/Tribe/Commerce/PayPal/Main.php:1921 src/Tribe/RSVP.php:2376
4663
  msgid "Post scheduled."
4664
  msgstr ""
4665
 
4666
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:93
4667
- #: src/Tribe/Commerce/PayPal/Main.php:1922 src/Tribe/RSVP.php:2377
4668
  msgid "Post draft updated."
4669
  msgstr ""
4670
 
@@ -4827,9 +4827,8 @@ msgstr ""
4827
  #: src/Tickets/Commerce/Gateways/Stripe/Settings.php:194
4828
  #: src/Tribe/Admin/Settings/Service_Provider.php:147
4829
  #: src/Tribe/Admin/Settings/Service_Provider.php:195
4830
- #: src/admin-views/admin-welcome-message.php:150
4831
- #: src/admin-views/admin-welcome-message.php:172
4832
- #: src/admin-views/admin-welcome-message.php:192
4833
  msgid "Learn more"
4834
  msgstr ""
4835
 
@@ -5060,11 +5059,12 @@ msgid "Tribe Commerce ( Legacy PayPal, not recommended )"
5060
  msgstr ""
5061
 
5062
  #: src/Tickets/Commerce/Models/Attendee_Model.php:62
5063
- #: src/Tribe/Commerce/PayPal/Main.php:2957 src/Tribe/RSVP.php:2020
5064
  msgid "(deleted)"
5065
  msgstr ""
5066
 
5067
  #: src/Tickets/Commerce/Module.php:20 src/Tickets/Commerce/Payments_Tab.php:200
 
5068
  msgid "Tickets Commerce"
5069
  msgstr ""
5070
 
@@ -5079,7 +5079,7 @@ msgid "Payments"
5079
  msgstr ""
5080
 
5081
  #: src/Tickets/Commerce/Payments_Tab.php:300 src/Tribe/Admin/Notices.php:214
5082
- #: src/Tribe/Main.php:676 src/admin-views/admin-welcome-message.php:58
5083
  #: src/admin-views/tribe-commerce-settings.php:4
5084
  msgid "Event Tickets Plus"
5085
  msgstr ""
@@ -5434,11 +5434,11 @@ msgstr ""
5434
  msgid "%s will be available on %s at %s"
5435
  msgstr ""
5436
 
5437
- #: src/Tickets/Commerce/Status/Pending.php:163 src/Tribe/Tickets.php:3200
5438
  msgid "%s are no longer available."
5439
  msgstr ""
5440
 
5441
- #: src/Tickets/Commerce/Status/Pending.php:165 src/Tribe/Tickets.php:3202
5442
  msgid "There are no %s available at this time."
5443
  msgstr ""
5444
 
@@ -6237,7 +6237,7 @@ msgid ""
6237
  msgstr ""
6238
 
6239
  #: src/Tribe/Admin/Settings/Service_Provider.php:53
6240
- #: src/admin-views/admin-welcome-message.php:128
6241
  msgid "Getting Started Guide"
6242
  msgstr ""
6243
 
@@ -6297,6 +6297,7 @@ msgid ""
6297
  msgstr ""
6298
 
6299
  #: src/Tribe/Admin/Settings/Service_Provider.php:145
 
6300
  msgid "Get started"
6301
  msgstr ""
6302
 
@@ -6774,28 +6775,28 @@ msgstr ""
6774
  msgid "Are you sure you want to cancel?"
6775
  msgstr ""
6776
 
6777
- #: src/Tribe/Editor/Blocks/Tickets.php:282 src/Tribe/Tickets.php:4334
6778
  msgctxt "Error message title, will be followed by the error code."
6779
  msgid "API Error"
6780
  msgstr ""
6781
 
6782
- #: src/Tribe/Editor/Blocks/Tickets.php:283 src/Tribe/Tickets.php:4335
6783
  msgid ""
6784
  "Refresh this page or wait a few minutes before trying again. If this happens "
6785
  "repeatedly, please contact the Site Admin."
6786
  msgstr ""
6787
 
6788
- #: src/Tribe/Editor/Blocks/Tickets.php:284 src/Tribe/Tickets.php:4336
6789
  msgid ""
6790
  "The ticket for this event has sold out and has been removed from your cart."
6791
  msgstr ""
6792
 
6793
- #: src/Tribe/Editor/Blocks/Tickets.php:285 src/Tribe/Tickets.php:4337
6794
  #: src/views/v2/commerce/order/header/title-empty.php:28
6795
  msgid "Whoops!"
6796
  msgstr ""
6797
 
6798
- #: src/Tribe/Editor/Blocks/Tickets.php:286 src/Tribe/Tickets.php:4338
6799
  msgctxt "The %s will change based on the error produced."
6800
  msgid "You have %s ticket(s) with a field that requires information."
6801
  msgstr ""
@@ -6903,7 +6904,7 @@ msgstr ""
6903
  msgid "Powered by"
6904
  msgstr ""
6905
 
6906
- #: src/Tribe/JSON_LD/Order.php:132 src/Tribe/RSVP.php:1612
6907
  #: src/admin-views/editor/column-body-price.php:23
6908
  msgid "Free"
6909
  msgstr ""
@@ -7423,139 +7424,134 @@ msgstr ""
7423
  msgid "The requested page was not found."
7424
  msgstr ""
7425
 
7426
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:91
7427
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:90
7428
- msgid "Sorry, Event Tickets Plus must be active to use this endpoint."
7429
- msgstr ""
7430
-
7431
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:205
7432
  #: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:239
7433
  msgid "The page of results to return; defaults to 1"
7434
  msgstr ""
7435
 
7436
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:213
7437
  msgid ""
7438
  "How many attendees to return per results page; defaults to posts_per_page."
7439
  msgstr ""
7440
 
7441
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:222
7442
  msgid ""
7443
  "Limit results to attendees whose ticket is provided by one of the providers "
7444
  "specified in the CSV list or array; defaults to all the available."
7445
  msgstr ""
7446
 
7447
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:235
7448
  msgid ""
7449
  "Limit results to attendees containing the specified string in the title or "
7450
  "description."
7451
  msgstr ""
7452
 
7453
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:241
7454
  #: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:260
7455
  msgid "Offset the results by a specific number of items."
7456
  msgstr ""
7457
 
7458
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:247
7459
  #: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:266
7460
  msgid "Sort results in ASC or DESC order. Defaults to ASC."
7461
  msgstr ""
7462
 
7463
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:256
7464
  msgid ""
7465
  "Order the results by one of date, relevance, id, include, title or slug. "
7466
  "Defaults to id."
7467
  msgstr ""
7468
 
7469
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:268
7470
  msgid "Limit results to attendees by post the ticket is associated with."
7471
  msgstr ""
7472
 
7473
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:274
7474
  msgid "Limit results to attendees associated with a ticket."
7475
  msgstr ""
7476
 
7477
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:280
7478
  msgid ""
7479
  "Limit results to attendees created after or on the specified UTC date or "
7480
  "timestamp."
7481
  msgstr ""
7482
 
7483
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:286
7484
  msgid ""
7485
  "Limit results to attendees created before or on the specified UTC date or "
7486
  "timestamp."
7487
  msgstr ""
7488
 
7489
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:292
7490
  msgid "Limit results to a specific CSV list or array of attendee IDs."
7491
  msgstr ""
7492
 
7493
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:305
7494
  msgid "Exclude a specific CSV list or array of attendee IDs from the results."
7495
  msgstr ""
7496
 
7497
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:318
7498
  msgid ""
7499
  "Limit results to attendees that paid tickets a price equal or below the "
7500
  "specified value; if not specified no maximum price limit will be used."
7501
  msgstr ""
7502
 
7503
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:324
7504
  msgid ""
7505
  "Limit results to attendees that paid tickets a price equal or above the "
7506
  "specified value; if not specified no minimum price limit will be used."
7507
  msgstr ""
7508
 
7509
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:330
7510
  msgid ""
7511
  "Limit results to attendees whose ticket is assigned to one of the posts "
7512
  "specified in the CSV list or array."
7513
  msgstr ""
7514
 
7515
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:343
7516
  msgid ""
7517
  "Limit results to attendees whose tickets is not assigned to any of the posts "
7518
  "specified in the CSV list or array.."
7519
  msgstr ""
7520
 
7521
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:356
7522
  #: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:314
7523
  msgid "Limit results to a specific CSV list or array of ticket IDs."
7524
  msgstr ""
7525
 
7526
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:368
7527
  msgid "Exclude a specific CSV list or array of ticket IDs."
7528
  msgstr ""
7529
 
7530
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:380
7531
  msgid ""
7532
  "Limit results to attendees for posts that are in one of the post statuses "
7533
  "specified in the CSV list or array; defaults to publish."
7534
  msgstr ""
7535
 
7536
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:391
7537
  msgid ""
7538
  "Limit results to attendees that are in one of post statuses specified in the "
7539
  "CSV list or array; defaults to publish."
7540
  msgstr ""
7541
 
7542
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:402
7543
  msgid ""
7544
  "Limit results to attendees whose order status is in one of post statuses "
7545
  "specified in the CSV list or array; defaults to public."
7546
  msgstr ""
7547
 
7548
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:413
7549
  msgid "Limit results to attendees that are or not checked-in."
7550
  msgstr ""
7551
 
7552
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:418
7553
  msgid ""
7554
  "Limit results to RSVP Attendees that have one of the RSVP Going status "
7555
  "specified in the CSV list or array."
7556
  msgstr ""
7557
 
7558
- #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:429
7559
  msgid ""
7560
  "Limit results to attendees for tickets that provide attendees the "
7561
  "possibility to fill in additional information or not; requires ET+."
@@ -7626,65 +7622,65 @@ msgstr ""
7626
  msgid "List of meta for each ticket to be saved for Attendee Registration"
7627
  msgstr ""
7628
 
7629
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:19
7630
  msgid "Returns the data of the attendee with the specified post ID"
7631
  msgstr ""
7632
 
7633
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:29
7634
  msgid "The attendee post ID is invalid."
7635
  msgstr ""
7636
 
7637
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:39
7638
  msgid "The attendee with the specified ID is not accessible."
7639
  msgstr ""
7640
 
7641
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:49
7642
  msgid "An attendee with the specified ID does not exist."
7643
  msgstr ""
7644
 
7645
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:71
7646
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:217
7647
  msgid "The attendee post ID"
7648
  msgstr ""
7649
 
7650
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:117
7651
  msgid "Something went wrong! Attendee creation failed."
7652
  msgstr ""
7653
 
7654
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:141
7655
  msgid "The Ticket ID, where the attendee is registered."
7656
  msgstr ""
7657
 
7658
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:146
7659
  msgid "Full name of the attendee."
7660
  msgstr ""
7661
 
7662
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:152
7663
  msgid "Email of the attendeee."
7664
  msgstr ""
7665
 
7666
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:157
7667
  msgid "Order Status for the attendee."
7668
  msgstr ""
7669
 
7670
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:194
7671
  msgid "Something went wrong! Attendee update failed."
7672
  msgstr ""
7673
 
7674
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:245
7675
  msgid "Ticket Provider not found."
7676
  msgstr ""
7677
 
7678
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:290
7679
  msgid "Attendee ID is not valid."
7680
  msgstr ""
7681
 
7682
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:296
7683
  msgid "Attendee provider not found."
7684
  msgstr ""
7685
 
7686
  #. Translators: %s - List of valid statuses.
7687
- #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:345
7688
  msgid "Supported statuses for this attendee are: %s"
7689
  msgstr ""
7690
 
@@ -7933,10 +7929,6 @@ msgstr ""
7933
  msgid "Not going"
7934
  msgstr ""
7935
 
7936
- #: src/Tribe/RSVP.php:487
7937
- msgid "Your RSVP was unsuccessful, please try again."
7938
- msgstr ""
7939
-
7940
  #: src/Tribe/RSVP.php:524
7941
  msgid "Unable to verify your opt-in request, please try again."
7942
  msgstr ""
@@ -7972,27 +7964,47 @@ msgstr ""
7972
  msgid "Unable to process your request, attendee creation failed."
7973
  msgstr ""
7974
 
7975
- #: src/Tribe/RSVP.php:1274
 
 
 
 
7976
  msgid "Your %1$s from %2$s"
7977
  msgstr ""
7978
 
7979
- #: src/Tribe/RSVP.php:1380
7980
  msgid "You confirmed you will not be attending %s"
7981
  msgstr ""
7982
 
7983
- #: src/Tribe/RSVP.php:1729
7984
  msgid ""
7985
  "Your %1$s has been received! Check your email for your %1$s confirmation."
7986
  msgstr ""
7987
 
7988
- #: src/Tribe/RSVP.php:1736
7989
  msgid "You can't %1$s more than the total remaining %2$s."
7990
  msgstr ""
7991
 
7992
- #: src/Tribe/RSVP.php:1744
7993
  msgid "In order to %s, you must enter your name and a valid email address."
7994
  msgstr ""
7995
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7996
  #: src/Tribe/Status/Abstract_Commerce.php:169
7997
  msgid "Sold"
7998
  msgstr ""
@@ -8049,43 +8061,42 @@ msgstr ""
8049
  msgid "Move %s"
8050
  msgstr ""
8051
 
8052
- #: src/Tribe/Tickets.php:1786
8053
  msgid "Shared capacity with other tickets"
8054
  msgstr ""
8055
 
8056
- #: src/Tribe/Tickets.php:1787
8057
  msgid "Set capacity for this ticket only"
8058
  msgstr ""
8059
 
8060
  #. translators: %1$s: The singular of "RSVP" or "ticket", %2$s: The plural of
8061
  #. "RSVPs" or "tickets", %3$s: The site name.
8062
- #: src/Tribe/Tickets.php:2404
8063
  msgctxt "The default RSVP/ticket email subject"
8064
  msgid "Your %1$s from %3$s"
8065
  msgid_plural "Your %2$s from %3$s"
8066
  msgstr[0] ""
8067
  msgstr[1] ""
8068
 
8069
- #: src/Tribe/Tickets.php:3152
8070
  msgid "%s are not available as this %s has passed."
8071
  msgstr ""
8072
 
8073
- #: src/Tribe/Tickets.php:3188
8074
  msgid "%s will be available on "
8075
  msgstr ""
8076
 
8077
- #: src/Tribe/Tickets.php:3194
8078
  msgid " at "
8079
  msgstr ""
8080
 
8081
  #. translators: %s: Tickets label
8082
- #: src/Tribe/Tickets.php:3197 src/views/blocks/tickets/content-inactive.php:19
8083
  #: src/views/v2/tickets/item/content/inactive.php:53
8084
- #: src/views/v2/tickets/item/inactive.php:63
8085
  msgid "%s are not yet available"
8086
  msgstr ""
8087
 
8088
- #: src/Tribe/Tickets.php:3653
8089
  msgid "(copy)"
8090
  msgstr ""
8091
 
@@ -8109,194 +8120,186 @@ msgstr ""
8109
  msgid "This %s is no longer active."
8110
  msgstr ""
8111
 
8112
- #: src/admin-views/admin-welcome-message.php:29
8113
  msgid "The Events Calendar product suite logo"
8114
  msgstr ""
8115
 
8116
- #: src/admin-views/admin-welcome-message.php:31
8117
  msgctxt "short expression of excitement"
8118
  msgid "WOOHOO!"
8119
  msgstr ""
8120
 
8121
- #: src/admin-views/admin-welcome-message.php:31
8122
  msgid "You're the proud owner of Event Tickets Plus! Let's get started…"
8123
  msgstr ""
8124
 
8125
- #: src/admin-views/admin-welcome-message.php:40
8126
- #: src/admin-views/admin-welcome-message.php:46
8127
  msgid "Shapes and lines for visual interest"
8128
  msgstr ""
8129
 
8130
- #: src/admin-views/admin-welcome-message.php:53
8131
  msgid "Event Tickets logo"
8132
  msgstr ""
8133
 
8134
- #: src/admin-views/admin-welcome-message.php:66
8135
  msgid ""
8136
  "Thanks for installing Event Tickets Plus! Here are some handy resources for "
8137
  "getting started with our plugins."
8138
  msgstr ""
8139
 
8140
- #: src/admin-views/admin-welcome-message.php:68
8141
  msgid ""
8142
  "Thanks for installing Event Tickets! Here are some handy resources for "
8143
  "getting started with our plugins."
8144
  msgstr ""
8145
 
8146
- #: src/admin-views/admin-welcome-message.php:74
8147
  msgid "Quick Links:"
8148
  msgstr ""
8149
 
8150
- #: src/admin-views/admin-welcome-message.php:77
8151
  msgid "Configure Settings"
8152
  msgstr ""
8153
 
8154
- #: src/admin-views/admin-welcome-message.php:81
8155
- #: src/admin-views/admin-welcome-message.php:88
8156
  msgid "Install WooCommerce"
8157
  msgstr ""
8158
 
8159
- #: src/admin-views/admin-welcome-message.php:84
8160
  msgid "Create Ticket"
8161
  msgstr ""
8162
 
8163
- #: src/admin-views/admin-welcome-message.php:91
8164
- #: src/admin-views/admin-welcome-message.php:102
8165
  msgid "Install The Events Calendar"
8166
  msgstr ""
8167
 
8168
- #: src/admin-views/admin-welcome-message.php:95
8169
  msgid "Create RSVP"
8170
  msgstr ""
8171
 
8172
- #: src/admin-views/admin-welcome-message.php:98
8173
- #: src/admin-views/admin-welcome-message.php:105
8174
  msgid "Set Up Tickets Commerce"
8175
  msgstr ""
8176
 
8177
- #: src/admin-views/admin-welcome-message.php:111
8178
  msgid "Helpful Resources"
8179
  msgstr ""
8180
 
8181
- #: src/admin-views/admin-welcome-message.php:126
8182
- #: src/admin-views/admin-welcome-message.php:179
8183
- #: src/admin-views/admin-welcome-message.php:201
8184
  msgid "Illustration of a book with The Events Calendar logo"
8185
  msgstr ""
8186
 
8187
- #: src/admin-views/admin-welcome-message.php:129
8188
  msgid "New to Event Tickets? Here's everything you need to get started."
8189
  msgstr ""
8190
 
8191
- #: src/admin-views/admin-welcome-message.php:130
8192
  msgid "Check out the guide"
8193
  msgstr ""
8194
 
8195
- #: src/admin-views/admin-welcome-message.php:136
8196
  msgid "Illustration of a thought lightbulb coming from a book"
8197
  msgstr ""
8198
 
8199
- #: src/admin-views/admin-welcome-message.php:138
8200
  msgid "Knowledgebase"
8201
  msgstr ""
8202
 
8203
- #: src/admin-views/admin-welcome-message.php:139
8204
  msgid ""
8205
  "Ready to dig deeper? Our Knowledgebase can help you get the most out of The "
8206
  "Events Calendar suite."
8207
  msgstr ""
8208
 
8209
- #: src/admin-views/admin-welcome-message.php:140
8210
  msgid "Dig deeper"
8211
  msgstr ""
8212
 
8213
- #: src/admin-views/admin-welcome-message.php:146
8214
- msgid "Illustration of characters being translated"
8215
- msgstr ""
8216
-
8217
- #: src/admin-views/admin-welcome-message.php:148
8218
- msgid "Translations"
8219
- msgstr ""
8220
-
8221
- #: src/admin-views/admin-welcome-message.php:149
8222
- msgid "Need a language other than English? We've got you covered here."
8223
  msgstr ""
8224
 
8225
- #: src/admin-views/admin-welcome-message.php:157
8226
  msgid "Illustration of a phone screen with a person's face"
8227
  msgstr ""
8228
 
8229
- #: src/admin-views/admin-welcome-message.php:159
8230
  msgid "Virtual Event Resources"
8231
  msgstr ""
8232
 
8233
- #: src/admin-views/admin-welcome-message.php:160
8234
  msgid ""
8235
  "Tips and tools to help with planning online events, webinars, and more on "
8236
  "WordPress and beyond."
8237
  msgstr ""
8238
 
8239
- #: src/admin-views/admin-welcome-message.php:161
8240
  msgid "Get started with online events"
8241
  msgstr ""
8242
 
8243
- #: src/admin-views/admin-welcome-message.php:169
8244
  msgid "Illustration of a power plug and gears"
8245
  msgstr ""
8246
 
8247
- #: src/admin-views/admin-welcome-message.php:171
8248
  msgid "Browse our library of free extensions for Event Tickets."
8249
  msgstr ""
8250
 
8251
- #: src/admin-views/admin-welcome-message.php:181
8252
- #: src/admin-views/admin-welcome-message.php:203
8253
  msgid "Want to take your events to the next level?"
8254
  msgstr ""
8255
 
8256
- #: src/admin-views/admin-welcome-message.php:182
8257
- #: src/admin-views/admin-welcome-message.php:204
8258
  msgid "Check out our suite of add-ons"
8259
  msgstr ""
8260
 
8261
- #: src/admin-views/admin-welcome-message.php:189
8262
  msgid "Illustration of a calendar"
8263
  msgstr ""
8264
 
8265
- #: src/admin-views/admin-welcome-message.php:191
8266
  msgid "Add The Events Calendar (it's free!) to enhance Event Tickets."
8267
  msgstr ""
8268
 
8269
- #: src/admin-views/admin-welcome-message.php:211
8270
  msgid "Illustration of a hand holding a ticket and the WooCommerce logo"
8271
  msgstr ""
8272
 
8273
- #: src/admin-views/admin-welcome-message.php:213
8274
  msgid "Add WooCommerce integration, advanced registration, and more."
8275
  msgstr ""
8276
 
8277
- #: src/admin-views/admin-welcome-message.php:214
8278
  msgid "Check out Event Tickets Plus"
8279
  msgstr ""
8280
 
8281
- #: src/admin-views/admin-welcome-message.php:219
8282
  msgid "Want this emailed to you?"
8283
  msgstr ""
8284
 
8285
- #: src/admin-views/admin-welcome-message.php:220
8286
  msgid ""
8287
  "Keep this list of links on hand and stay subscribed to receive tips and "
8288
  "tricks about The Events Calendar products."
8289
  msgstr ""
8290
 
8291
- #: src/admin-views/admin-welcome-message.php:223
8292
  msgid "Your email"
8293
  msgstr ""
8294
 
8295
- #: src/admin-views/admin-welcome-message.php:225
8296
  msgid "Sign Up"
8297
  msgstr ""
8298
 
8299
- #: src/admin-views/admin-welcome-message.php:238
8300
  msgid "The Events Calendar brand logo"
8301
  msgstr ""
8302
 
2
  # This file is distributed under the same license as the Event Tickets package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Event Tickets 5.4.4\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/event-tickets\n"
7
+ "POT-Creation-Date: 2022-08-11 05:07:59+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2022-08-11 05:07\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
15
+ #. #-#-#-#-# event-tickets.pot (Event Tickets 5.4.4) #-#-#-#-#
16
  #. Plugin Name of the plugin/theme
17
  #: event-tickets.php:61 src/Tribe/Admin/Notices.php:92 src/Tribe/Main.php:701
18
+ #: src/Tribe/Privacy.php:59 src/admin-views/admin-welcome-message.php:73
19
  msgid "Event Tickets"
20
  msgstr ""
21
 
175
  msgstr ""
176
 
177
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:350
178
+ #: src/Tribe/Attendees_Table.php:1003
179
  msgctxt "Attendees Table search options"
180
  msgid "Search by Purchaser Name"
181
  msgstr ""
182
 
183
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:351
184
+ #: src/Tribe/Attendees_Table.php:1004
185
  msgctxt "Attendees Table search options"
186
  msgid "Search by Purchaser Email"
187
  msgstr ""
188
 
189
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:352
190
+ #: src/Tribe/Attendees_Table.php:1005
191
  msgctxt "Attendees Table search options"
192
  msgid "Search by Ticket Holder Name"
193
  msgstr ""
194
 
195
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:353
196
+ #: src/Tribe/Attendees_Table.php:1006
197
  msgctxt "Attendees Table search options"
198
  msgid "Search by Ticket Holder Email"
199
  msgstr ""
200
 
201
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:354
202
+ #: src/Tribe/Attendees_Table.php:1007
203
  msgctxt "Attendees Table search options"
204
  msgid "Search by User ID"
205
  msgstr ""
206
 
207
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:355
208
+ #: src/Tribe/Attendees_Table.php:1008
209
  msgctxt "Attendees Table search options"
210
  msgid "Search by Order Status"
211
  msgstr ""
212
 
213
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:356
214
+ #: src/Tribe/Attendees_Table.php:1009
215
  msgctxt "Attendees Table search options"
216
  msgid "Search by Order ID"
217
  msgstr ""
218
 
219
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:357
220
+ #: src/Tribe/Attendees_Table.php:1010
221
  msgctxt "Attendees Table search options"
222
  msgid "Search by Security Code"
223
  msgstr ""
224
 
225
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:358
226
+ #: src/Tribe/Attendees_Table.php:1011
227
  msgctxt "Attendees Table search options"
228
  msgid "Search by %s ID"
229
  msgstr ""
230
 
231
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:359
232
+ #: src/Tribe/Attendees_Table.php:1012
233
  msgctxt "Attendees Table search options"
234
  msgid "Search by Product ID"
235
  msgstr ""
259
  msgstr ""
260
 
261
  #: src/Tickets/Commerce/Admin_Tables/Attendees.php:630
262
+ #: src/Tribe/Attendees_Table.php:989
263
  msgid "No matching attendees found."
264
  msgstr ""
265
 
307
  msgid "Total"
308
  msgstr ""
309
 
310
+ #: src/Tickets/Commerce/Admin_Tables/Orders.php:188
311
  #: src/Tribe/Commerce/PayPal/Orders/Table.php:274
312
  msgid "No matching orders found."
313
  msgstr ""
314
 
315
+ #: src/Tickets/Commerce/Admin_Tables/Orders.php:291
316
  #: src/Tribe/Commerce/PayPal/Orders/Table.php:177
317
  msgid "%1$s"
318
  msgstr ""
4639
  msgstr ""
4640
 
4641
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:77
4642
+ #: src/Tribe/Commerce/PayPal/Main.php:1906 src/Tribe/RSVP.php:2365
4643
  msgid "Return to the %1$sAttendees Report%2$s."
4644
  msgstr ""
4645
 
4646
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:84
4647
+ #: src/Tribe/Commerce/PayPal/Main.php:1913 src/Tribe/RSVP.php:2372
4648
  msgid "Post updated. %1$s"
4649
  msgstr ""
4650
 
4651
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:88
4652
+ #: src/Tribe/Commerce/PayPal/Main.php:1917 src/Tribe/RSVP.php:2376
4653
  msgid "Post published. %1$s"
4654
  msgstr ""
4655
 
4656
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:91
4657
+ #: src/Tribe/Commerce/PayPal/Main.php:1920 src/Tribe/RSVP.php:2379
4658
  msgid "Post submitted."
4659
  msgstr ""
4660
 
4661
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:92
4662
+ #: src/Tribe/Commerce/PayPal/Main.php:1921 src/Tribe/RSVP.php:2380
4663
  msgid "Post scheduled."
4664
  msgstr ""
4665
 
4666
  #: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:93
4667
+ #: src/Tribe/Commerce/PayPal/Main.php:1922 src/Tribe/RSVP.php:2381
4668
  msgid "Post draft updated."
4669
  msgstr ""
4670
 
4827
  #: src/Tickets/Commerce/Gateways/Stripe/Settings.php:194
4828
  #: src/Tribe/Admin/Settings/Service_Provider.php:147
4829
  #: src/Tribe/Admin/Settings/Service_Provider.php:195
4830
+ #: src/admin-views/admin-welcome-message.php:185
4831
+ #: src/admin-views/admin-welcome-message.php:205
 
4832
  msgid "Learn more"
4833
  msgstr ""
4834
 
5059
  msgstr ""
5060
 
5061
  #: src/Tickets/Commerce/Models/Attendee_Model.php:62
5062
+ #: src/Tribe/Commerce/PayPal/Main.php:2957 src/Tribe/RSVP.php:2024
5063
  msgid "(deleted)"
5064
  msgstr ""
5065
 
5066
  #: src/Tickets/Commerce/Module.php:20 src/Tickets/Commerce/Payments_Tab.php:200
5067
+ #: src/admin-views/admin-welcome-message.php:161
5068
  msgid "Tickets Commerce"
5069
  msgstr ""
5070
 
5079
  msgstr ""
5080
 
5081
  #: src/Tickets/Commerce/Payments_Tab.php:300 src/Tribe/Admin/Notices.php:214
5082
+ #: src/Tribe/Main.php:676 src/admin-views/admin-welcome-message.php:71
5083
  #: src/admin-views/tribe-commerce-settings.php:4
5084
  msgid "Event Tickets Plus"
5085
  msgstr ""
5434
  msgid "%s will be available on %s at %s"
5435
  msgstr ""
5436
 
5437
+ #: src/Tickets/Commerce/Status/Pending.php:163 src/Tribe/Tickets.php:3208
5438
  msgid "%s are no longer available."
5439
  msgstr ""
5440
 
5441
+ #: src/Tickets/Commerce/Status/Pending.php:165 src/Tribe/Tickets.php:3210
5442
  msgid "There are no %s available at this time."
5443
  msgstr ""
5444
 
6237
  msgstr ""
6238
 
6239
  #: src/Tribe/Admin/Settings/Service_Provider.php:53
6240
+ #: src/admin-views/admin-welcome-message.php:141
6241
  msgid "Getting Started Guide"
6242
  msgstr ""
6243
 
6297
  msgstr ""
6298
 
6299
  #: src/Tribe/Admin/Settings/Service_Provider.php:145
6300
+ #: src/admin-views/admin-welcome-message.php:163
6301
  msgid "Get started"
6302
  msgstr ""
6303
 
6775
  msgid "Are you sure you want to cancel?"
6776
  msgstr ""
6777
 
6778
+ #: src/Tribe/Editor/Blocks/Tickets.php:282 src/Tribe/Tickets.php:4338
6779
  msgctxt "Error message title, will be followed by the error code."
6780
  msgid "API Error"
6781
  msgstr ""
6782
 
6783
+ #: src/Tribe/Editor/Blocks/Tickets.php:283 src/Tribe/Tickets.php:4339
6784
  msgid ""
6785
  "Refresh this page or wait a few minutes before trying again. If this happens "
6786
  "repeatedly, please contact the Site Admin."
6787
  msgstr ""
6788
 
6789
+ #: src/Tribe/Editor/Blocks/Tickets.php:284 src/Tribe/Tickets.php:4340
6790
  msgid ""
6791
  "The ticket for this event has sold out and has been removed from your cart."
6792
  msgstr ""
6793
 
6794
+ #: src/Tribe/Editor/Blocks/Tickets.php:285 src/Tribe/Tickets.php:4341
6795
  #: src/views/v2/commerce/order/header/title-empty.php:28
6796
  msgid "Whoops!"
6797
  msgstr ""
6798
 
6799
+ #: src/Tribe/Editor/Blocks/Tickets.php:286 src/Tribe/Tickets.php:4342
6800
  msgctxt "The %s will change based on the error produced."
6801
  msgid "You have %s ticket(s) with a field that requires information."
6802
  msgstr ""
6904
  msgid "Powered by"
6905
  msgstr ""
6906
 
6907
+ #: src/Tribe/JSON_LD/Order.php:132 src/Tribe/RSVP.php:1616
6908
  #: src/admin-views/editor/column-body-price.php:23
6909
  msgid "Free"
6910
  msgstr ""
7424
  msgid "The requested page was not found."
7425
  msgstr ""
7426
 
7427
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:199
 
 
 
 
 
7428
  #: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:239
7429
  msgid "The page of results to return; defaults to 1"
7430
  msgstr ""
7431
 
7432
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:207
7433
  msgid ""
7434
  "How many attendees to return per results page; defaults to posts_per_page."
7435
  msgstr ""
7436
 
7437
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:216
7438
  msgid ""
7439
  "Limit results to attendees whose ticket is provided by one of the providers "
7440
  "specified in the CSV list or array; defaults to all the available."
7441
  msgstr ""
7442
 
7443
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:229
7444
  msgid ""
7445
  "Limit results to attendees containing the specified string in the title or "
7446
  "description."
7447
  msgstr ""
7448
 
7449
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:235
7450
  #: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:260
7451
  msgid "Offset the results by a specific number of items."
7452
  msgstr ""
7453
 
7454
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:241
7455
  #: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:266
7456
  msgid "Sort results in ASC or DESC order. Defaults to ASC."
7457
  msgstr ""
7458
 
7459
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:250
7460
  msgid ""
7461
  "Order the results by one of date, relevance, id, include, title or slug. "
7462
  "Defaults to id."
7463
  msgstr ""
7464
 
7465
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:262
7466
  msgid "Limit results to attendees by post the ticket is associated with."
7467
  msgstr ""
7468
 
7469
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:268
7470
  msgid "Limit results to attendees associated with a ticket."
7471
  msgstr ""
7472
 
7473
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:274
7474
  msgid ""
7475
  "Limit results to attendees created after or on the specified UTC date or "
7476
  "timestamp."
7477
  msgstr ""
7478
 
7479
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:280
7480
  msgid ""
7481
  "Limit results to attendees created before or on the specified UTC date or "
7482
  "timestamp."
7483
  msgstr ""
7484
 
7485
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:286
7486
  msgid "Limit results to a specific CSV list or array of attendee IDs."
7487
  msgstr ""
7488
 
7489
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:299
7490
  msgid "Exclude a specific CSV list or array of attendee IDs from the results."
7491
  msgstr ""
7492
 
7493
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:312
7494
  msgid ""
7495
  "Limit results to attendees that paid tickets a price equal or below the "
7496
  "specified value; if not specified no maximum price limit will be used."
7497
  msgstr ""
7498
 
7499
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:318
7500
  msgid ""
7501
  "Limit results to attendees that paid tickets a price equal or above the "
7502
  "specified value; if not specified no minimum price limit will be used."
7503
  msgstr ""
7504
 
7505
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:324
7506
  msgid ""
7507
  "Limit results to attendees whose ticket is assigned to one of the posts "
7508
  "specified in the CSV list or array."
7509
  msgstr ""
7510
 
7511
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:337
7512
  msgid ""
7513
  "Limit results to attendees whose tickets is not assigned to any of the posts "
7514
  "specified in the CSV list or array.."
7515
  msgstr ""
7516
 
7517
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:350
7518
  #: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:314
7519
  msgid "Limit results to a specific CSV list or array of ticket IDs."
7520
  msgstr ""
7521
 
7522
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:362
7523
  msgid "Exclude a specific CSV list or array of ticket IDs."
7524
  msgstr ""
7525
 
7526
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:374
7527
  msgid ""
7528
  "Limit results to attendees for posts that are in one of the post statuses "
7529
  "specified in the CSV list or array; defaults to publish."
7530
  msgstr ""
7531
 
7532
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:385
7533
  msgid ""
7534
  "Limit results to attendees that are in one of post statuses specified in the "
7535
  "CSV list or array; defaults to publish."
7536
  msgstr ""
7537
 
7538
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:396
7539
  msgid ""
7540
  "Limit results to attendees whose order status is in one of post statuses "
7541
  "specified in the CSV list or array; defaults to public."
7542
  msgstr ""
7543
 
7544
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:407
7545
  msgid "Limit results to attendees that are or not checked-in."
7546
  msgstr ""
7547
 
7548
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:412
7549
  msgid ""
7550
  "Limit results to RSVP Attendees that have one of the RSVP Going status "
7551
  "specified in the CSV list or array."
7552
  msgstr ""
7553
 
7554
+ #: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:423
7555
  msgid ""
7556
  "Limit results to attendees for tickets that provide attendees the "
7557
  "possibility to fill in additional information or not; requires ET+."
7622
  msgid "List of meta for each ticket to be saved for Attendee Registration"
7623
  msgstr ""
7624
 
7625
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:23
7626
  msgid "Returns the data of the attendee with the specified post ID"
7627
  msgstr ""
7628
 
7629
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:33
7630
  msgid "The attendee post ID is invalid."
7631
  msgstr ""
7632
 
7633
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:43
7634
  msgid "The attendee with the specified ID is not accessible."
7635
  msgstr ""
7636
 
7637
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:53
7638
  msgid "An attendee with the specified ID does not exist."
7639
  msgstr ""
7640
 
7641
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:75
7642
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:216
7643
  msgid "The attendee post ID"
7644
  msgstr ""
7645
 
7646
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:116
7647
  msgid "Something went wrong! Attendee creation failed."
7648
  msgstr ""
7649
 
7650
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:140
7651
  msgid "The Ticket ID, where the attendee is registered."
7652
  msgstr ""
7653
 
7654
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:145
7655
  msgid "Full name of the attendee."
7656
  msgstr ""
7657
 
7658
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:151
7659
  msgid "Email of the attendeee."
7660
  msgstr ""
7661
 
7662
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:156
7663
  msgid "Order Status for the attendee."
7664
  msgstr ""
7665
 
7666
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:193
7667
  msgid "Something went wrong! Attendee update failed."
7668
  msgstr ""
7669
 
7670
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:244
7671
  msgid "Ticket Provider not found."
7672
  msgstr ""
7673
 
7674
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:289
7675
  msgid "Attendee ID is not valid."
7676
  msgstr ""
7677
 
7678
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:295
7679
  msgid "Attendee provider not found."
7680
  msgstr ""
7681
 
7682
  #. Translators: %s - List of valid statuses.
7683
+ #: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:344
7684
  msgid "Supported statuses for this attendee are: %s"
7685
  msgstr ""
7686
 
7929
  msgid "Not going"
7930
  msgstr ""
7931
 
 
 
 
 
7932
  #: src/Tribe/RSVP.php:524
7933
  msgid "Unable to verify your opt-in request, please try again."
7934
  msgstr ""
7964
  msgid "Unable to process your request, attendee creation failed."
7965
  msgstr ""
7966
 
7967
+ #: src/Tribe/RSVP.php:1072
7968
+ msgid "Invalid data! Missing required attendee details!"
7969
+ msgstr ""
7970
+
7971
+ #: src/Tribe/RSVP.php:1278
7972
  msgid "Your %1$s from %2$s"
7973
  msgstr ""
7974
 
7975
+ #: src/Tribe/RSVP.php:1384
7976
  msgid "You confirmed you will not be attending %s"
7977
  msgstr ""
7978
 
7979
+ #: src/Tribe/RSVP.php:1733
7980
  msgid ""
7981
  "Your %1$s has been received! Check your email for your %1$s confirmation."
7982
  msgstr ""
7983
 
7984
+ #: src/Tribe/RSVP.php:1740
7985
  msgid "You can't %1$s more than the total remaining %2$s."
7986
  msgstr ""
7987
 
7988
+ #: src/Tribe/RSVP.php:1748
7989
  msgid "In order to %s, you must enter your name and a valid email address."
7990
  msgstr ""
7991
 
7992
+ #: src/Tribe/RSVP.php:2546
7993
+ msgid "Invalid parent ID provided!"
7994
+ msgstr ""
7995
+
7996
+ #: src/Tribe/RSVP.php:2553
7997
+ msgid "Invalid Ticket ID provided!"
7998
+ msgstr ""
7999
+
8000
+ #: src/Tribe/RSVP.php:2568 src/Tribe/RSVP.php:2574
8001
+ msgid "Missing required RSVP field: %s"
8002
+ msgstr ""
8003
+
8004
+ #: src/Tribe/RSVP.php:2612
8005
+ msgid "Requested amount of Tickets are not available!"
8006
+ msgstr ""
8007
+
8008
  #: src/Tribe/Status/Abstract_Commerce.php:169
8009
  msgid "Sold"
8010
  msgstr ""
8061
  msgid "Move %s"
8062
  msgstr ""
8063
 
8064
+ #: src/Tribe/Tickets.php:1794
8065
  msgid "Shared capacity with other tickets"
8066
  msgstr ""
8067
 
8068
+ #: src/Tribe/Tickets.php:1795
8069
  msgid "Set capacity for this ticket only"
8070
  msgstr ""
8071
 
8072
  #. translators: %1$s: The singular of "RSVP" or "ticket", %2$s: The plural of
8073
  #. "RSVPs" or "tickets", %3$s: The site name.
8074
+ #: src/Tribe/Tickets.php:2412
8075
  msgctxt "The default RSVP/ticket email subject"
8076
  msgid "Your %1$s from %3$s"
8077
  msgid_plural "Your %2$s from %3$s"
8078
  msgstr[0] ""
8079
  msgstr[1] ""
8080
 
8081
+ #: src/Tribe/Tickets.php:3160
8082
  msgid "%s are not available as this %s has passed."
8083
  msgstr ""
8084
 
8085
+ #: src/Tribe/Tickets.php:3196
8086
  msgid "%s will be available on "
8087
  msgstr ""
8088
 
8089
+ #: src/Tribe/Tickets.php:3202
8090
  msgid " at "
8091
  msgstr ""
8092
 
8093
  #. translators: %s: Tickets label
8094
+ #: src/Tribe/Tickets.php:3205 src/views/blocks/tickets/content-inactive.php:19
8095
  #: src/views/v2/tickets/item/content/inactive.php:53
 
8096
  msgid "%s are not yet available"
8097
  msgstr ""
8098
 
8099
+ #: src/Tribe/Tickets.php:3657
8100
  msgid "(copy)"
8101
  msgstr ""
8102
 
8120
  msgid "This %s is no longer active."
8121
  msgstr ""
8122
 
8123
+ #: src/admin-views/admin-welcome-message.php:42
8124
  msgid "The Events Calendar product suite logo"
8125
  msgstr ""
8126
 
8127
+ #: src/admin-views/admin-welcome-message.php:44
8128
  msgctxt "short expression of excitement"
8129
  msgid "WOOHOO!"
8130
  msgstr ""
8131
 
8132
+ #: src/admin-views/admin-welcome-message.php:44
8133
  msgid "You're the proud owner of Event Tickets Plus! Let's get started…"
8134
  msgstr ""
8135
 
8136
+ #: src/admin-views/admin-welcome-message.php:53
8137
+ #: src/admin-views/admin-welcome-message.php:59
8138
  msgid "Shapes and lines for visual interest"
8139
  msgstr ""
8140
 
8141
+ #: src/admin-views/admin-welcome-message.php:66
8142
  msgid "Event Tickets logo"
8143
  msgstr ""
8144
 
8145
+ #: src/admin-views/admin-welcome-message.php:79
8146
  msgid ""
8147
  "Thanks for installing Event Tickets Plus! Here are some handy resources for "
8148
  "getting started with our plugins."
8149
  msgstr ""
8150
 
8151
+ #: src/admin-views/admin-welcome-message.php:81
8152
  msgid ""
8153
  "Thanks for installing Event Tickets! Here are some handy resources for "
8154
  "getting started with our plugins."
8155
  msgstr ""
8156
 
8157
+ #: src/admin-views/admin-welcome-message.php:87
8158
  msgid "Quick Links:"
8159
  msgstr ""
8160
 
8161
+ #: src/admin-views/admin-welcome-message.php:90
8162
  msgid "Configure Settings"
8163
  msgstr ""
8164
 
8165
+ #: src/admin-views/admin-welcome-message.php:94
8166
+ #: src/admin-views/admin-welcome-message.php:101
8167
  msgid "Install WooCommerce"
8168
  msgstr ""
8169
 
8170
+ #: src/admin-views/admin-welcome-message.php:97
8171
  msgid "Create Ticket"
8172
  msgstr ""
8173
 
8174
+ #: src/admin-views/admin-welcome-message.php:104
8175
+ #: src/admin-views/admin-welcome-message.php:115
8176
  msgid "Install The Events Calendar"
8177
  msgstr ""
8178
 
8179
+ #: src/admin-views/admin-welcome-message.php:108
8180
  msgid "Create RSVP"
8181
  msgstr ""
8182
 
8183
+ #: src/admin-views/admin-welcome-message.php:111
8184
+ #: src/admin-views/admin-welcome-message.php:118
8185
  msgid "Set Up Tickets Commerce"
8186
  msgstr ""
8187
 
8188
+ #: src/admin-views/admin-welcome-message.php:124
8189
  msgid "Helpful Resources"
8190
  msgstr ""
8191
 
8192
+ #: src/admin-views/admin-welcome-message.php:139
8193
+ #: src/admin-views/admin-welcome-message.php:192
8194
+ #: src/admin-views/admin-welcome-message.php:214
8195
  msgid "Illustration of a book with The Events Calendar logo"
8196
  msgstr ""
8197
 
8198
+ #: src/admin-views/admin-welcome-message.php:142
8199
  msgid "New to Event Tickets? Here's everything you need to get started."
8200
  msgstr ""
8201
 
8202
+ #: src/admin-views/admin-welcome-message.php:143
8203
  msgid "Check out the guide"
8204
  msgstr ""
8205
 
8206
+ #: src/admin-views/admin-welcome-message.php:149
8207
  msgid "Illustration of a thought lightbulb coming from a book"
8208
  msgstr ""
8209
 
8210
+ #: src/admin-views/admin-welcome-message.php:151
8211
  msgid "Knowledgebase"
8212
  msgstr ""
8213
 
8214
+ #: src/admin-views/admin-welcome-message.php:152
8215
  msgid ""
8216
  "Ready to dig deeper? Our Knowledgebase can help you get the most out of The "
8217
  "Events Calendar suite."
8218
  msgstr ""
8219
 
8220
+ #: src/admin-views/admin-welcome-message.php:153
8221
  msgid "Dig deeper"
8222
  msgstr ""
8223
 
8224
+ #: src/admin-views/admin-welcome-message.php:159
8225
+ msgid "Illustration of money turning into a ticket"
 
 
 
 
 
 
 
 
8226
  msgstr ""
8227
 
8228
+ #: src/admin-views/admin-welcome-message.php:170
8229
  msgid "Illustration of a phone screen with a person's face"
8230
  msgstr ""
8231
 
8232
+ #: src/admin-views/admin-welcome-message.php:172
8233
  msgid "Virtual Event Resources"
8234
  msgstr ""
8235
 
8236
+ #: src/admin-views/admin-welcome-message.php:173
8237
  msgid ""
8238
  "Tips and tools to help with planning online events, webinars, and more on "
8239
  "WordPress and beyond."
8240
  msgstr ""
8241
 
8242
+ #: src/admin-views/admin-welcome-message.php:174
8243
  msgid "Get started with online events"
8244
  msgstr ""
8245
 
8246
+ #: src/admin-views/admin-welcome-message.php:182
8247
  msgid "Illustration of a power plug and gears"
8248
  msgstr ""
8249
 
8250
+ #: src/admin-views/admin-welcome-message.php:184
8251
  msgid "Browse our library of free extensions for Event Tickets."
8252
  msgstr ""
8253
 
8254
+ #: src/admin-views/admin-welcome-message.php:194
8255
+ #: src/admin-views/admin-welcome-message.php:216
8256
  msgid "Want to take your events to the next level?"
8257
  msgstr ""
8258
 
8259
+ #: src/admin-views/admin-welcome-message.php:195
8260
+ #: src/admin-views/admin-welcome-message.php:217
8261
  msgid "Check out our suite of add-ons"
8262
  msgstr ""
8263
 
8264
+ #: src/admin-views/admin-welcome-message.php:202
8265
  msgid "Illustration of a calendar"
8266
  msgstr ""
8267
 
8268
+ #: src/admin-views/admin-welcome-message.php:204
8269
  msgid "Add The Events Calendar (it's free!) to enhance Event Tickets."
8270
  msgstr ""
8271
 
8272
+ #: src/admin-views/admin-welcome-message.php:224
8273
  msgid "Illustration of a hand holding a ticket and the WooCommerce logo"
8274
  msgstr ""
8275
 
8276
+ #: src/admin-views/admin-welcome-message.php:226
8277
  msgid "Add WooCommerce integration, advanced registration, and more."
8278
  msgstr ""
8279
 
8280
+ #: src/admin-views/admin-welcome-message.php:227
8281
  msgid "Check out Event Tickets Plus"
8282
  msgstr ""
8283
 
8284
+ #: src/admin-views/admin-welcome-message.php:232
8285
  msgid "Want this emailed to you?"
8286
  msgstr ""
8287
 
8288
+ #: src/admin-views/admin-welcome-message.php:233
8289
  msgid ""
8290
  "Keep this list of links on hand and stay subscribed to receive tips and "
8291
  "tricks about The Events Calendar products."
8292
  msgstr ""
8293
 
8294
+ #: src/admin-views/admin-welcome-message.php:236
8295
  msgid "Your email"
8296
  msgstr ""
8297
 
8298
+ #: src/admin-views/admin-welcome-message.php:238
8299
  msgid "Sign Up"
8300
  msgstr ""
8301
 
8302
+ #: src/admin-views/admin-welcome-message.php:251
8303
  msgid "The Events Calendar brand logo"
8304
  msgstr ""
8305
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Contributors: theeventscalendar, brianjessee, camwynsp, aguseo, bordoni, borkweb
4
  Tags: tickets, registration, event registration, RSVP, ticket sales, attendee management
5
  Requires at least: 5.6
6
  Tested up to: 6.0.1
7
- Stable tag: 5.4.3.1
8
  Requires PHP: 7.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -188,6 +188,22 @@ Check out our extensive [knowledgebase](https://evnt.is/18wm) for articles on us
188
 
189
  == Changelog ==
190
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  = [5.4.3.1] 2022-07-21 =
192
 
193
  * Fix - Update Freemius to avoid PHP 8 fatals. [TEC-4330]
4
  Tags: tickets, registration, event registration, RSVP, ticket sales, attendee management
5
  Requires at least: 5.6
6
  Tested up to: 6.0.1
7
+ Stable tag: 5.4.4
8
  Requires PHP: 7.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
188
 
189
  == Changelog ==
190
 
191
+ = [5.4.4] 2022-08-15 =
192
+
193
+ * Fix - Tickets/RSVP blocks appear in wrong place on non-events when block editor is disabled in The Events Calendar. [ET-1544]
194
+ * Fix - Fixed searching attendees by purchaser name and email for Tickets Commerce attendees. [ET-1543]
195
+ * Fix - Fixed concurrent RSVP booking not showing error messages for out of stock tickets. [ET-1506]
196
+ * Fix - Fixed showing proper ticket unavailable message for past events. [ET-1146]
197
+ * Fix - Fixed Shared Capacity calculation with capped tickets. [ETP-801]
198
+ * Fix - Fixed logic that was causing fatal errors when using Elementor. [ET-1561]
199
+ * Enhancement - Sorting support added on Tickets Commerce Order Report page columns. [ET-1527]
200
+ * Enhancement - Sorting support added on Attendee Report page for Ticket, Security Code, and Check In columns. [ET-1526]
201
+ * Enhancement - Added section about Tickets Commerce on the Tickets Home page. [ET-1539]
202
+ * Enhancement - Tickets Commerce Stripe gateway now shows additional purchaser info metadata in Stripe dashboard. [ET-1542]
203
+ * Enhancement - Update REST API Endpoints to have access via API KEY and remove the restriction to be using Event Tickets Plus to access the `attendees` endpoint. [ET-1559]
204
+ * Enhancement - Allow filtering of Events Archive REST API using `ticketed` parameter to filter Ticketed and Non-ticketed events. [TEC-4439]
205
+ * Language - 6 new strings added, 162 updated, 0 fuzzied, and 9 obsoleted
206
+
207
  = [5.4.3.1] 2022-07-21 =
208
 
209
  * Fix - Update Freemius to avoid PHP 8 fatals. [TEC-4330]
src/Tickets/Commerce/Admin_Tables/Orders.php CHANGED
@@ -140,6 +140,8 @@ class Orders extends WP_List_Table {
140
 
141
  $search = tribe_get_request_var( 's' );
142
  $page = absint( tribe_get_request_var( 'paged', 0 ) );
 
 
143
  $arguments = [
144
  'status' => 'any',
145
  'paged' => $page,
@@ -157,6 +159,14 @@ class Orders extends WP_List_Table {
157
  $arguments['tickets'] = $product_ids;
158
  }
159
 
 
 
 
 
 
 
 
 
160
  $orders_repository = tec_tc_orders()->by_args( $arguments );
161
 
162
  $total_items = $orders_repository->found();
@@ -334,4 +344,25 @@ class Orders extends WP_List_Table {
334
  }
335
  return $gateway::get_label();
336
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
337
  }
140
 
141
  $search = tribe_get_request_var( 's' );
142
  $page = absint( tribe_get_request_var( 'paged', 0 ) );
143
+ $orderby = tribe_get_request_var( 'orderby' );
144
+ $order = tribe_get_request_var( 'order' );
145
  $arguments = [
146
  'status' => 'any',
147
  'paged' => $page,
159
  $arguments['tickets'] = $product_ids;
160
  }
161
 
162
+ if ( ! empty( $orderby ) ) {
163
+ $arguments['orderby'] = $orderby;
164
+ }
165
+
166
+ if ( ! empty( $order ) ) {
167
+ $arguments['order'] = $order;
168
+ }
169
+
170
  $orders_repository = tec_tc_orders()->by_args( $arguments );
171
 
172
  $total_items = $orders_repository->found();
344
  }
345
  return $gateway::get_label();
346
  }
347
+
348
+ /**
349
+ * List of sortable columns.
350
+ *
351
+ * @since TBD
352
+ *
353
+ * @return array
354
+ */
355
+ public function get_sortable_columns() {
356
+ return [
357
+ 'order' => 'order_id',
358
+ 'purchaser' => 'purchaser_full_name',
359
+ 'email' => 'purchaser_email',
360
+ 'date' => 'purchase_time',
361
+ 'gateway' => 'gateway',
362
+ 'gateway_order_id' => 'gateway_id',
363
+ 'status' => 'status',
364
+ 'total' => 'total_value'
365
+ ];
366
+ }
367
+
368
  }
src/Tickets/Commerce/Gateways/Stripe/Payment_Intent_Handler.php CHANGED
@@ -112,12 +112,7 @@ class Payment_Intent_Handler {
112
 
113
  $stripe_receipt_emails = tribe_get_option( Settings::$option_stripe_receipt_emails );
114
  $payment_intent = Payment_Intent::get( $payment_intent_id );
115
-
116
- // Add the Order ID as metadata to the Payment Intent
117
- $metadata = $payment_intent['metadata'];
118
- $metadata['order_id'] = $order->ID;
119
- $metadata['return_url'] = tribe( Webhook_Endpoint::class )->get_route_url();
120
- $body['metadata'] = $metadata;
121
 
122
  if ( $stripe_receipt_emails ) {
123
  if ( is_user_logged_in() ) {
@@ -215,4 +210,46 @@ class Payment_Intent_Handler {
215
  public function store_payment_intent( $payment_intent ) {
216
  set_transient( $this->get_payment_intent_transient_name(), $payment_intent, 6 * HOUR_IN_SECONDS );
217
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  }
112
 
113
  $stripe_receipt_emails = tribe_get_option( Settings::$option_stripe_receipt_emails );
114
  $payment_intent = Payment_Intent::get( $payment_intent_id );
115
+ $body['metadata'] = $this->get_updated_metadata( $order, $payment_intent );
 
 
 
 
 
116
 
117
  if ( $stripe_receipt_emails ) {
118
  if ( is_user_logged_in() ) {
210
  public function store_payment_intent( $payment_intent ) {
211
  set_transient( $this->get_payment_intent_transient_name(), $payment_intent, 6 * HOUR_IN_SECONDS );
212
  }
213
+
214
+ /**
215
+ * Get the additional metadata for the payment intent.
216
+ *
217
+ * @since TBD
218
+ *
219
+ * @param \WP_Post $order The Order data.
220
+ * @param array $payment_intent The Payment intent.
221
+ *
222
+ * @return array
223
+ */
224
+ protected function get_updated_metadata( \WP_Post $order, array $payment_intent ) {
225
+ // Add the Order ID as metadata to the Payment Intent.
226
+ $metadata = $payment_intent['metadata'];
227
+ $metadata['order_id'] = $order->ID;
228
+ $metadata['return_url'] = tribe( Webhook_Endpoint::class )->get_route_url();
229
+
230
+ $events_in_order = array_unique( array_filter( wp_list_pluck( $order->items, 'event_id' ) ) );
231
+ $tickets_in_order = array_unique( array_filter( wp_list_pluck( $order->items, 'ticket_id' ) ) );
232
+ $ticket_names = array_map(
233
+ static function ( $item ) {
234
+ return get_the_title( $item );
235
+ },
236
+ $tickets_in_order
237
+ );
238
+
239
+ $metadata[ 'purchaser_name' ] = $order->purchaser_name;
240
+ $metadata[ 'purchaser_email' ] = $order->purchaser_email;
241
+ $metadata[ 'event_name' ] = get_post( current( $events_in_order ) )->post_title;
242
+ $metadata[ 'event_url' ] = get_post_permalink( current( $events_in_order ) );
243
+ $metadata[ 'ticket_names' ] = implode( $ticket_names, ' ,' );
244
+
245
+ /**
246
+ * Filter the updated metadata for a completed order's payment intent.
247
+ *
248
+ * @since TBD
249
+ *
250
+ * @param \WP_Post $order The Order data.
251
+ * @param array $payment_intent The Payment intent.
252
+ */
253
+ return apply_filters( 'tec_tickets_commerce_stripe_update_payment_intent_metadata', $metadata, $order, $payment_intent );
254
+ }
255
  }
src/Tickets/Commerce/Order.php CHANGED
@@ -350,6 +350,7 @@ class Order extends Abstract_Order {
350
 
351
  $item['price'] = $ticket_value->get_decimal();
352
  $item['sub_total'] = $ticket_value->sub_total( $item['quantity'] )->get_decimal();
 
353
 
354
  return $item;
355
  },
350
 
351
  $item['price'] = $ticket_value->get_decimal();
352
  $item['sub_total'] = $ticket_value->sub_total( $item['quantity'] )->get_decimal();
353
+ $item['event_id'] = tribe( Ticket::class )->get_related_event_id( $item['ticket_id'] );
354
 
355
  return $item;
356
  },
src/Tickets/Commerce/Repositories/Order_Repository.php CHANGED
@@ -487,4 +487,265 @@ class Order_Repository extends Tribe__Repository {
487
  return null;
488
  }
489
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
490
  }
487
  return null;
488
  }
489
 
490
+ /**
491
+ * Overrides the base method to correctly handle the `order_by` clauses before.
492
+ *
493
+ * @since TBD
494
+ *
495
+ * @return \WP_Query The built query object.
496
+ */
497
+ protected function build_query_internally() {
498
+ $order_by = Arr::get_in_any( [ $this->query_args, $this->default_args ], 'orderby', 'event_date' );
499
+ unset( $this->query_args['orderby'], $this->default_args['order_by'] );
500
+
501
+ $this->handle_order_by( $order_by );
502
+
503
+ return parent::build_query_internally();
504
+ }
505
+
506
+ /**
507
+ * Handles the `order_by` clauses for events
508
+ *
509
+ * @since TBD
510
+ *
511
+ * @param string $order_by The key used to order items.
512
+ */
513
+ public function handle_order_by( $order_by ) {
514
+ $check_orderby = $order_by;
515
+
516
+ if ( ! is_array( $check_orderby ) ) {
517
+ $check_orderby = explode( ' ', $check_orderby );
518
+ }
519
+
520
+ $after = false;
521
+ $loop = 0;
522
+
523
+ foreach ( $check_orderby as $key => $value ) {
524
+ $order_by = is_numeric( $key ) ? $value : $key;
525
+ $default_order = Arr::get_in_any( [ $this->query_args, $this->default_args ], 'order', 'ASC' );
526
+ $order = is_numeric( $key ) ? $default_order : $value;
527
+
528
+ // Let the first applied ORDER BY clause override the existing ones, then stack the ORDER BY clauses.
529
+ $override = $loop === 0;
530
+
531
+ switch ( $order_by ) {
532
+ case 'purchaser_full_name':
533
+ $this->order_by_purchaser_full_name( $order, $after, $override );
534
+ break;
535
+ case 'purchaser_email':
536
+ $this->order_by_purchaser_email( $order, $after, $override );
537
+ break;
538
+ case 'total_value':
539
+ $this->order_by_total_value( $order, $after, $override );
540
+ break;
541
+ case 'status':
542
+ $this->order_by_status( $order, $after, $override );
543
+ break;
544
+ case 'gateway':
545
+ $this->order_by_gateway( $order, $after, $override );
546
+ break;
547
+ case 'gateway_id':
548
+ $this->order_by_gateway_id( $order, $after, $override );
549
+ break;
550
+ case '__none':
551
+ unset( $this->query_args['orderby'] );
552
+ unset( $this->query_args['order'] );
553
+ break;
554
+ default:
555
+ $after = $after || 1 === $loop;
556
+ if ( empty( $this->query_args['orderby'] ) ) {
557
+ // In some versions of WP, [ $order_by, $order ] doesn't work as expected. Using explict value setting instead.
558
+ $this->query_args['orderby'] = $order_by;
559
+ $this->query_args['order'] = $order;
560
+ } else {
561
+ $add = [ $order_by => $order ];
562
+ // Make sure all `orderby` clauses have the shape `<orderby> => <order>`.
563
+ $normalized = [];
564
+
565
+ if ( ! is_array( $this->query_args['orderby'] ) ) {
566
+ $this->query_args['orderby'] = [
567
+ $this->query_args['orderby'] => $this->query_args['order']
568
+ ];
569
+ }
570
+
571
+ foreach ( $this->query_args['orderby'] as $k => $v ) {
572
+ $the_order_by = is_numeric( $k ) ? $v : $k;
573
+ $the_order = is_numeric( $k ) ? $default_order : $v;
574
+ $normalized[ $the_order_by ] = $the_order;
575
+ }
576
+ $this->query_args['orderby'] = $normalized;
577
+ $this->query_args['orderby'] = array_merge( $this->query_args['orderby'], $add );
578
+ }
579
+ }
580
+ }
581
+ }
582
+
583
+ /**
584
+ * Sets up the query filters to order items by the purchaser email.
585
+ *
586
+ * @since TBD
587
+ *
588
+ * @param string $key The meta key that is used for the sorting.
589
+ * @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
590
+ * specified in the current query or default arguments.
591
+ * @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
592
+ * defaults to `false` to prepend the duration clause to the existing ORDER BY
593
+ * clauses.
594
+ * @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
595
+ * `true` to override existing ORDER BY clauses.
596
+ */
597
+ protected function order_by_key( $meta_key, $order = null, $after = false, $override = true ) {
598
+ global $wpdb;
599
+
600
+ $meta_alias = "sorted_by_{$meta_key}";
601
+ $filter_id = "order_by_{$meta_alias}";
602
+ $postmeta_table = "orderby_{$meta_alias}_meta";
603
+
604
+ $this->filter_query->join(
605
+ $wpdb->prepare(
606
+ "
607
+ LEFT JOIN {$wpdb->postmeta} AS {$postmeta_table}
608
+ ON (
609
+ {$postmeta_table}.post_id = {$wpdb->posts}.ID
610
+ AND {$postmeta_table}.meta_key = %s
611
+ )
612
+ ",
613
+ $meta_key
614
+ ),
615
+ $filter_id,
616
+ true
617
+ );
618
+
619
+ $order = $this->get_query_order_type( $order );
620
+
621
+ $this->filter_query->orderby( [ $meta_alias => $order ], $filter_id, $override, $after );
622
+ $this->filter_query->fields( "{$postmeta_table}.meta_value AS {$meta_alias}", $filter_id, $override );
623
+ }
624
+
625
+ /**
626
+ * Sets up the query filters to order items by purchaser name.
627
+ *
628
+ * @since TBD
629
+ *
630
+ * @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
631
+ * specified in the current query or default arguments.
632
+ * @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
633
+ * defaults to `false` to prepend the duration clause to the existing ORDER BY
634
+ * clauses.
635
+ * @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
636
+ * `true` to override existing ORDER BY clauses.
637
+ */
638
+ protected function order_by_purchaser_full_name( $order = null, $after = false, $override = true ) {
639
+ $this->order_by_key( Order::$purchaser_full_name_meta_key, $order, $after, $override );
640
+ }
641
+
642
+ /**
643
+ * Sets up the query filters to order items by the purchaser email.
644
+ *
645
+ * @since TBD
646
+ *
647
+ * @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
648
+ * specified in the current query or default arguments.
649
+ * @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
650
+ * defaults to `false` to prepend the duration clause to the existing ORDER BY
651
+ * clauses.
652
+ * @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
653
+ * `true` to override existing ORDER BY clauses.
654
+ */
655
+ protected function order_by_purchaser_email( $order = null, $after = false, $override = true ) {
656
+ $this->order_by_key( Order::$purchaser_email_meta_key, $order, $after, $override );
657
+ }
658
+
659
+ /**
660
+ * Sets up the query filters to order items by the total value.
661
+ *
662
+ * @since TBD
663
+ *
664
+ * @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
665
+ * specified in the current query or default arguments.
666
+ * @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
667
+ * defaults to `false` to prepend the duration clause to the existing ORDER BY
668
+ * clauses.
669
+ * @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
670
+ * `true` to override existing ORDER BY clauses.
671
+ */
672
+ protected function order_by_total_value( $order = null, $after = false, $override = true ) {
673
+ $this->order_by_key( Order::$total_value_meta_key, $order, $after, $override );
674
+ }
675
+
676
+ /**
677
+ * Sets up the query filters to order items by the gateway id.
678
+ *
679
+ * @since TBD
680
+ *
681
+ * @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
682
+ * specified in the current query or default arguments.
683
+ * @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
684
+ * defaults to `false` to prepend the duration clause to the existing ORDER BY
685
+ * clauses.
686
+ * @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
687
+ * `true` to override existing ORDER BY clauses.
688
+ */
689
+ protected function order_by_gateway_id( $order = null, $after = false, $override = true ) {
690
+ $this->order_by_key( Order::$gateway_order_id_meta_key, $order, $after, $override );
691
+ }
692
+
693
+ /**
694
+ * Sets up the query filters to order items by the gatway name.
695
+ *
696
+ * @since TBD
697
+ *
698
+ * @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
699
+ * specified in the current query or default arguments.
700
+ * @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
701
+ * defaults to `false` to prepend the duration clause to the existing ORDER BY
702
+ * clauses.
703
+ * @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
704
+ * `true` to override existing ORDER BY clauses.
705
+ */
706
+ protected function order_by_gateway( $order = null, $after = false, $override = true ) {
707
+ $this->order_by_key( Order::$gateway_meta_key, $order, $after, $override );
708
+ }
709
+
710
+ /**
711
+ * Sets up the query filters to order items by the status.
712
+ *
713
+ * @since TBD
714
+ *
715
+ * @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
716
+ * specified in the current query or default arguments.
717
+ * @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
718
+ * defaults to `false` to prepend the duration clause to the existing ORDER BY
719
+ * clauses.
720
+ * @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
721
+ * `true` to override existing ORDER BY clauses.
722
+ */
723
+ protected function order_by_status( $order = null, $after = false, $override = true ) {
724
+ global $wpdb;
725
+
726
+ $meta_alias = 'status';
727
+ $filter_id = "order_by_{$meta_alias}";
728
+ $prefix = 'tec-' . Commerce::ABBR . '-';
729
+
730
+ $order = $this->get_query_order_type( $order );
731
+
732
+ $this->filter_query->orderby( [ $meta_alias => $order ], $filter_id, $override, $after );
733
+ $this->filter_query->fields( "TRIM( '{$prefix}' from {$wpdb->posts}.post_status ) AS {$meta_alias}", $filter_id, $override );
734
+ }
735
+
736
+ /**
737
+ * Get the order param for the current orderby clause.
738
+ *
739
+ * @since TBD
740
+ *
741
+ * @param $order string|null order type value either 'ASC' or 'DESC'.
742
+ *
743
+ * @return string
744
+ */
745
+ protected function get_query_order_type( $order = null ) {
746
+ return $order === null
747
+ ? Arr::get_in_any( [ $this->query_args, $this->default_args ], 'order', 'ASC' )
748
+ : $order;
749
+ }
750
+
751
  }
src/Tickets/Commerce/Ticket.php CHANGED
@@ -900,4 +900,17 @@ class Ticket {
900
 
901
  return $this->get_template()->template( 'price', [ 'price' => $value ], false );
902
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
903
  }
900
 
901
  return $this->get_template()->template( 'price', [ 'price' => $value ], false );
902
  }
903
+
904
+ /**
905
+ * Get the event ID for the ticket.
906
+ *
907
+ * @since TBD
908
+ *
909
+ * @param int $ticket_id The ticket post ID.
910
+ *
911
+ * @return mixed
912
+ */
913
+ public function get_related_event_id( $ticket_id ) {
914
+ return get_post_meta( $ticket_id, static::$event_relation_meta_key, true );
915
+ }
916
  }
src/Tribe/Attendee_Repository.php CHANGED
@@ -217,7 +217,7 @@ class Tribe__Tickets__Attendee_Repository extends Tribe__Repository {
217
  return [
218
  'rsvp' => '_tribe_rsvp_full_name',
219
  'tribe-commerce' => '_tribe_tpp_full_name',
220
- \TEC\Tickets\Commerce::PROVIDER => \TEC\Tickets\Commerce\Attendee::$purchaser_name_meta_key,
221
  ];
222
  }
223
 
@@ -234,7 +234,7 @@ class Tribe__Tickets__Attendee_Repository extends Tribe__Repository {
234
  return [
235
  'rsvp' => '_tribe_rsvp_email',
236
  'tribe-commerce' => '_tribe_tpp_email',
237
- \TEC\Tickets\Commerce::PROVIDER => \TEC\Tickets\Commerce\Attendee::$purchaser_email_meta_key,
238
  ];
239
  }
240
 
@@ -529,7 +529,7 @@ class Tribe__Tickets__Attendee_Repository extends Tribe__Repository {
529
  public function filter_by_order_status( $order_status, $type = 'in' ) {
530
  $statuses = Arr::list_to_array( $order_status );
531
 
532
- $has_manage_access = current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' );
533
 
534
  // map the `any` meta-status
535
  if ( 1 === count( $statuses ) && 'any' === $statuses[0] ) {
@@ -1307,4 +1307,231 @@ class Tribe__Tickets__Attendee_Repository extends Tribe__Repository {
1307
 
1308
  $this->attendee_provider->send_tickets_email_for_attendees( $attendee_tickets, $send_ticket_email_args );
1309
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1310
  }
217
  return [
218
  'rsvp' => '_tribe_rsvp_full_name',
219
  'tribe-commerce' => '_tribe_tpp_full_name',
220
+ \TEC\Tickets\Commerce::PROVIDER => \TEC\Tickets\Commerce\Attendee::$full_name_meta_key,
221
  ];
222
  }
223
 
234
  return [
235
  'rsvp' => '_tribe_rsvp_email',
236
  'tribe-commerce' => '_tribe_tpp_email',
237
+ \TEC\Tickets\Commerce::PROVIDER => \TEC\Tickets\Commerce\Attendee::$email_meta_key,
238
  ];
239
  }
240
 
529
  public function filter_by_order_status( $order_status, $type = 'in' ) {
530
  $statuses = Arr::list_to_array( $order_status );
531
 
532
+ $has_manage_access = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
533
 
534
  // map the `any` meta-status
535
  if ( 1 === count( $statuses ) && 'any' === $statuses[0] ) {
1307
 
1308
  $this->attendee_provider->send_tickets_email_for_attendees( $attendee_tickets, $send_ticket_email_args );
1309
  }
1310
+
1311
+ /**
1312
+ * Overrides the base method to correctly handle the `order_by` clauses before.
1313
+ *
1314
+ * The Event repository handles ordering with some non trivial logic and some query filtering.
1315
+ * To avoid the "stacking" of `orderby` clauses and filters the query filters are added at the very last moment,
1316
+ * right before building the query.
1317
+ *
1318
+ * @since TBD
1319
+ *
1320
+ * @return WP_Query The built query object.
1321
+ */
1322
+ protected function build_query_internally() {
1323
+ $order_by = Arr::get_in_any( [ $this->query_args, $this->default_args ], 'orderby' );
1324
+ unset( $this->query_args['orderby'], $this->default_args['order_by'] );
1325
+
1326
+ $this->handle_order_by( $order_by );
1327
+
1328
+ return parent::build_query_internally();
1329
+ }
1330
+
1331
+ /**
1332
+ * Handles the `order_by` clauses for events
1333
+ *
1334
+ * @since TBD
1335
+ *
1336
+ * @param string $order_by The key used to order events; e.g. `event_date` to order events by start date.
1337
+ */
1338
+ public function handle_order_by( $order_by ) {
1339
+ $check_orderby = $order_by;
1340
+
1341
+ if ( ! is_array( $check_orderby ) ) {
1342
+ $check_orderby = explode( ' ', $check_orderby );
1343
+ }
1344
+
1345
+ $after = false;
1346
+ $loop = 0;
1347
+
1348
+ foreach ( $check_orderby as $key => $value ) {
1349
+ $order_by = is_numeric( $key ) ? $value : $key;
1350
+ $default_order = Arr::get_in_any( [ $this->query_args, $this->default_args ], 'order', 'ASC' );
1351
+ $order = is_numeric( $key ) ? $default_order : $value;
1352
+
1353
+ // Let the first applied ORDER BY clause override the existing ones, then stack the ORDER BY clauses.
1354
+ $override = $loop === 0;
1355
+
1356
+ switch ( $order_by ) {
1357
+ case 'security_code':
1358
+ $this->order_by_security_code( $order, $after, $override );
1359
+ break;
1360
+ case 'check_in':
1361
+ $this->order_by_check_in( $order, $after, $override );
1362
+ break;
1363
+ case 'rsvp_status':
1364
+ $this->order_by_rsvp_status( $order, $after, $override );
1365
+ break;
1366
+ case '__none':
1367
+ unset( $this->query_args['orderby'] );
1368
+ unset( $this->query_args['order'] );
1369
+ break;
1370
+ default:
1371
+ $after = $after || 1 === $loop;
1372
+ if ( empty( $this->query_args['orderby'] ) ) {
1373
+ // In some versions of WP, [ $order_by, $order ] doesn't work as expected. Using explict value setting instead.
1374
+ $this->query_args['orderby'] = $order_by;
1375
+ $this->query_args['order'] = $order;
1376
+ } else {
1377
+ $add = [ $order_by => $order ];
1378
+ // Make sure all `orderby` clauses have the shape `<orderby> => <order>`.
1379
+ $normalized = [];
1380
+
1381
+ if ( ! is_array( $this->query_args['orderby'] ) ) {
1382
+ $this->query_args['orderby'] = [
1383
+ $this->query_args['orderby'] => $this->query_args['order']
1384
+ ];
1385
+ }
1386
+
1387
+ foreach ( $this->query_args['orderby'] as $k => $v ) {
1388
+ $the_order_by = is_numeric( $k ) ? $v : $k;
1389
+ $the_order = is_numeric( $k ) ? $default_order : $v;
1390
+ $normalized[ $the_order_by ] = $the_order;
1391
+ }
1392
+ $this->query_args['orderby'] = $normalized;
1393
+ $this->query_args['orderby'] = array_merge( $this->query_args['orderby'], $add );
1394
+ }
1395
+ }
1396
+ }
1397
+ }
1398
+
1399
+ /**
1400
+ * Sets up the query filters to order attendees by the security code meta.
1401
+ *
1402
+ * @since TBD
1403
+ *
1404
+ * @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
1405
+ * specified in the current query or default arguments.
1406
+ * @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
1407
+ * defaults to `false` to prepend the duration clause to the existing ORDER BY
1408
+ * clauses.
1409
+ * @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
1410
+ * `true` to override existing ORDER BY clauses.
1411
+ */
1412
+ protected function order_by_security_code( $order = null, $after = false, $override = true ) {
1413
+ global $wpdb;
1414
+
1415
+ $meta_alias = 'security_code';
1416
+ $meta_keys_in = $this->prepare_interval( $this->security_code_keys() );
1417
+ $postmeta_table = "orderby_{$meta_alias}_meta";
1418
+ $filter_id = 'order_by_security_code';
1419
+
1420
+ $this->filter_query->join(
1421
+ "
1422
+ LEFT JOIN {$wpdb->postmeta} AS {$postmeta_table}
1423
+ ON (
1424
+ {$postmeta_table}.post_id = {$wpdb->posts}.ID
1425
+ AND {$postmeta_table}.meta_key IN {$meta_keys_in}
1426
+ )
1427
+ "
1428
+ ,
1429
+ $filter_id,
1430
+ true
1431
+ );
1432
+
1433
+ $order = $this->get_query_order_type( $order );
1434
+
1435
+ $this->filter_query->orderby( [ $meta_alias => $order ], $filter_id, true, $after );
1436
+ $this->filter_query->fields( "{$postmeta_table}.meta_value AS {$meta_alias}", $filter_id, $override );
1437
+ }
1438
+
1439
+ /**
1440
+ * Sets up the query filters to order attendees by the check-in status.
1441
+ *
1442
+ * @since TBD
1443
+ *
1444
+ * @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
1445
+ * specified in the current query or default arguments.
1446
+ * @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
1447
+ * defaults to `false` to prepend the duration clause to the existing ORDER BY
1448
+ * clauses.
1449
+ * @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
1450
+ * `true` to override existing ORDER BY clauses.
1451
+ */
1452
+ protected function order_by_check_in( $order = null, $after = false, $override = true ) {
1453
+ global $wpdb;
1454
+
1455
+ $meta_alias = 'check_in';
1456
+ $meta_keys_in = $this->prepare_interval( $this->checked_in_keys() );
1457
+
1458
+ $postmeta_table = "orderby_{$meta_alias}_meta";
1459
+ $filter_id = "order_by_{$meta_alias}";
1460
+
1461
+ $this->filter_query->join(
1462
+ "
1463
+ LEFT JOIN {$wpdb->postmeta} AS {$postmeta_table}
1464
+ ON (
1465
+ {$postmeta_table}.post_id = {$wpdb->posts}.ID
1466
+ AND {$postmeta_table}.meta_key IN {$meta_keys_in}
1467
+ )
1468
+ "
1469
+ ,
1470
+ $filter_id,
1471
+ true
1472
+ );
1473
+
1474
+ $order = $this->get_query_order_type( $order );
1475
+
1476
+ $this->filter_query->orderby( [ $meta_alias => $order ], $filter_id, true, $after );
1477
+ $this->filter_query->fields( "{$postmeta_table}.meta_value AS {$meta_alias}", $filter_id, $override );
1478
+ }
1479
+
1480
+ /**
1481
+ * Sets up the query filters to order attendees by the order status.
1482
+ *
1483
+ * @since TBD
1484
+ *
1485
+ * @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
1486
+ * specified in the current query or default arguments.
1487
+ * @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
1488
+ * defaults to `false` to prepend the duration clause to the existing ORDER BY
1489
+ * clauses.
1490
+ * @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
1491
+ * `true` to override existing ORDER BY clauses.
1492
+ */
1493
+ protected function order_by_rsvp_status( $order = null, $after = false, $override = true ) {
1494
+ global $wpdb;
1495
+
1496
+ $meta_alias = 'rsvp_status';
1497
+ $meta_key = Tribe__Tickets__RSVP::ATTENDEE_RSVP_KEY;
1498
+
1499
+ $postmeta_table = "orderby_{$meta_alias}";
1500
+ $filter_id = "order_by_{$meta_alias}";
1501
+
1502
+ $this->filter_query->join(
1503
+ $wpdb->prepare(
1504
+ "
1505
+ LEFT JOIN {$wpdb->postmeta} AS {$postmeta_table}
1506
+ ON (
1507
+ {$postmeta_table}.post_id = {$wpdb->posts}.ID
1508
+ AND {$postmeta_table}.meta_key = %s
1509
+ )
1510
+ ",
1511
+ $meta_key
1512
+ ),
1513
+ $filter_id,
1514
+ true
1515
+ );
1516
+
1517
+ $order = $this->get_query_order_type( $order );
1518
+
1519
+ $this->filter_query->orderby( [ $meta_alias => $order ], $filter_id, $override, $after );
1520
+ $this->filter_query->fields( "{$postmeta_table}.meta_value AS {$meta_alias}", $filter_id, $override );
1521
+ }
1522
+
1523
+ /**
1524
+ * Get the order param for the current orderby clause.
1525
+ *
1526
+ * @since TBD
1527
+ *
1528
+ * @param $order string|null order type value either 'ASC' or 'DESC'.
1529
+ *
1530
+ * @return string
1531
+ */
1532
+ protected function get_query_order_type( $order = null ) {
1533
+ return $order === null
1534
+ ? Arr::get_in_any( [ $this->query_args, $this->default_args ], 'order', 'ASC' )
1535
+ : $order;
1536
+ }
1537
  }
src/Tribe/Attendees_Table.php CHANGED
@@ -956,6 +956,15 @@ class Tribe__Tickets__Attendees_Table extends WP_List_Table {
956
  ];
957
  }
958
 
 
 
 
 
 
 
 
 
 
959
  $item_data = Tribe__Tickets__Tickets::get_event_attendees_by_args( $event_id, $args );
960
 
961
  $items = [];
@@ -1066,4 +1075,47 @@ class Tribe__Tickets__Attendees_Table extends WP_List_Table {
1066
 
1067
  echo $search_box;
1068
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1069
  }
956
  ];
957
  }
958
 
959
+ // Setup sorting args.
960
+ if ( tribe_get_request_var( 'orderby' ) ) {
961
+ $args['orderby'] = tribe_get_request_var( 'orderby' );
962
+ }
963
+
964
+ if ( tribe_get_request_var( 'order' ) ) {
965
+ $args['order'] = tribe_get_request_var( 'order' );
966
+ }
967
+
968
  $item_data = Tribe__Tickets__Tickets::get_event_attendees_by_args( $event_id, $args );
969
 
970
  $items = [];
1075
 
1076
  echo $search_box;
1077
  }
1078
+
1079
+ /**
1080
+ * Return list of sortable columns.
1081
+ *
1082
+ * @since TBD
1083
+ *
1084
+ * @return array
1085
+ */
1086
+ public function get_sortable_columns() {
1087
+ return [
1088
+ 'ticket' => 'id',
1089
+ 'security' => 'security_code',
1090
+ 'check_in' => 'check_in',
1091
+ 'status' => $this->is_status_sortable()
1092
+ ];
1093
+ }
1094
+
1095
+ /**
1096
+ * Check if `Status` column is sortable or not.
1097
+ *
1098
+ * @since TBD
1099
+ *
1100
+ * @return false|string
1101
+ */
1102
+ protected function is_status_sortable() {
1103
+ $event_id = tribe_get_request_var( 'event_id' );
1104
+ $providers = Tribe__Tickets__Tickets::get_active_providers_for_post( $event_id );
1105
+
1106
+ if ( count( $providers ) > 1 ) {
1107
+ return false;
1108
+ }
1109
+
1110
+ /** @var \Tribe__Tickets__Status__Manager $status */
1111
+ $status = tribe( 'tickets.status' );
1112
+ $provider = $status->get_provider_slug( current( $providers ) );
1113
+
1114
+ // For now, disabled for all providers but RSVP, we may remove this logic once we implement sorting for other providers.
1115
+ if ( 'rsvp' !== $provider ) {
1116
+ return false;
1117
+ }
1118
+
1119
+ return $provider . '_status';
1120
+ }
1121
  }
src/Tribe/Editor/Blocks/Rsvp.php CHANGED
@@ -415,7 +415,7 @@ class Tribe__Tickets__Editor__Blocks__Rsvp extends Tribe__Editor__Blocks__Abstra
415
  continue;
416
  }
417
 
418
- $has_tickets |= $rsvp->generate_tickets_for( $product_id, $ticket_qty, $attendee_details );
419
  }
420
 
421
  $order_id = $attendee_details['order_id'];
415
  continue;
416
  }
417
 
418
+ $has_tickets = ! is_wp_error( $rsvp->generate_tickets_for( $product_id, $ticket_qty, $attendee_details ) );
419
  }
420
 
421
  $order_id = $attendee_details['order_id'];
src/Tribe/Editor/Compatibility/Tickets.php CHANGED
@@ -36,6 +36,7 @@ class Tribe__Tickets__Editor__Compatibility__Tickets {
36
  $post = get_post();
37
  if ( $post instanceof WP_Post
38
  && class_exists( '\Elementor\Plugin' )
 
39
  && \Elementor\Plugin::$instance->documents->get( $post->ID )->is_built_with_elementor()
40
  ) {
41
  return $content;
36
  $post = get_post();
37
  if ( $post instanceof WP_Post
38
  && class_exists( '\Elementor\Plugin' )
39
+ && \Elementor\Plugin::$instance->documents->get( $post->ID )
40
  && \Elementor\Plugin::$instance->documents->get( $post->ID )->is_built_with_elementor()
41
  ) {
42
  return $content;
src/Tribe/Editor/Template/Overwrite.php CHANGED
@@ -94,6 +94,11 @@ class Tribe__Tickets__Editor__Template__Overwrite {
94
  public function has_classic_editor( $post_id ) {
95
  $is_event = function_exists( 'tribe_is_event' ) && tribe_is_event( $post_id );
96
 
 
 
 
 
 
97
  if ( $is_event && $this->has_early_access_to_blocks() ) {
98
  return false;
99
  }
94
  public function has_classic_editor( $post_id ) {
95
  $is_event = function_exists( 'tribe_is_event' ) && tribe_is_event( $post_id );
96
 
97
+ // If not an event, just check if it has blocks or not.
98
+ if ( ! $is_event ) {
99
+ return ! has_blocks( $post_id );
100
+ }
101
+
102
  if ( $is_event && $this->has_early_access_to_blocks() ) {
103
  return false;
104
  }
src/Tribe/Main.php CHANGED
@@ -8,7 +8,7 @@ class Tribe__Tickets__Main {
8
  /**
9
  * Current version of this plugin
10
  */
11
- const VERSION = '5.4.3.1';
12
 
13
  /**
14
  * Used to store the version history.
8
  /**
9
  * Current version of this plugin
10
  */
11
+ const VERSION = '5.4.4';
12
 
13
  /**
14
  * Used to store the version history.
src/Tribe/REST/V1/Attendee_Repository.php CHANGED
@@ -23,7 +23,7 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
23
  public function __construct() {
24
  $this->decorated = tribe( 'tickets.attendee-repository' );
25
  $this->decorated->set_formatter( $this );
26
- $this->decorated->set_query_builder($this);
27
  $this->decorated->set_default_args( array_merge(
28
  $this->decorated->get_default_args(),
29
  array( 'order' => 'ASC', 'orderby' => array( 'id', 'title' ) )
@@ -39,11 +39,7 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
39
  * @return WP_Query
40
  */
41
  public function build_query( $use_query_builder = true ) {
42
- $can_view_hidden_attendees = false;
43
-
44
- if ( current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' ) ) {
45
- $can_view_hidden_attendees = true;
46
- }
47
 
48
  /**
49
  * Whether the current user can view hidden attendees,
@@ -115,7 +111,7 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
115
  *
116
  * @since 4.8
117
  *
118
- * @param mixed $primary_key
119
  *
120
  * @return array|WP_Error The Attendee data on success, or a WP_Error
121
  * detailing why the read failed.
@@ -131,10 +127,10 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
131
  $messages = tribe( 'tickets.rest-v1.messages' );
132
 
133
  if ( empty( $found ) ) {
134
- return new WP_Error( 'attendee-not-found', $messages->get_message( 'attendee-not-found' ), array( 'status' => 404 ) );
135
  }
136
 
137
- if ( current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' ) ) {
138
  return $this->format_item( $found[0] );
139
  }
140
 
@@ -148,7 +144,7 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
148
  $found_w_cap = $cap_query->get_posts();
149
 
150
  if ( empty( $found_w_cap ) ) {
151
- return new WP_Error( 'attendee-not-accessible', $messages->get_message( 'attendee-not-accessible' ), array( 'status' => 401 ) );
152
  }
153
 
154
  $this->decorated->set_query_builder( $this );
@@ -161,7 +157,7 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
161
  *
162
  * @since 4.8
163
  *
164
- * @param int|WP_Post $id
165
  *
166
  * @return array|null The attendee information in the REST API format or
167
  * `null` if the attendee is invalid.
23
  public function __construct() {
24
  $this->decorated = tribe( 'tickets.attendee-repository' );
25
  $this->decorated->set_formatter( $this );
26
+ $this->decorated->set_query_builder( $this );
27
  $this->decorated->set_default_args( array_merge(
28
  $this->decorated->get_default_args(),
29
  array( 'order' => 'ASC', 'orderby' => array( 'id', 'title' ) )
39
  * @return WP_Query
40
  */
41
  public function build_query( $use_query_builder = true ) {
42
+ $can_view_hidden_attendees = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
 
 
 
 
43
 
44
  /**
45
  * Whether the current user can view hidden attendees,
111
  *
112
  * @since 4.8
113
  *
114
+ * @param mixed $primary_key The attendee ID.
115
  *
116
  * @return array|WP_Error The Attendee data on success, or a WP_Error
117
  * detailing why the read failed.
127
  $messages = tribe( 'tickets.rest-v1.messages' );
128
 
129
  if ( empty( $found ) ) {
130
+ return new WP_Error( 'attendee-not-found', $messages->get_message( 'attendee-not-found' ), [ 'status' => 404 ] );
131
  }
132
 
133
+ if ( tribe( 'tickets.rest-v1.main' )->request_has_manage_access() ) {
134
  return $this->format_item( $found[0] );
135
  }
136
 
144
  $found_w_cap = $cap_query->get_posts();
145
 
146
  if ( empty( $found_w_cap ) ) {
147
+ return new WP_Error( 'attendee-not-accessible', $messages->get_message( 'attendee-not-accessible' ), [ 'status' => 401 ] );
148
  }
149
 
150
  $this->decorated->set_query_builder( $this );
157
  *
158
  * @since 4.8
159
  *
160
+ * @param int|WP_Post $id The attendee ID.
161
  *
162
  * @return array|null The attendee information in the REST API format or
163
  * `null` if the attendee is invalid.
src/Tribe/REST/V1/Endpoints/Attendee_Archive.php CHANGED
@@ -10,7 +10,7 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
10
  *
11
  * While the structure must conform to that used by v2.0 of Swagger the structure can be that of a full document
12
  * or that of a document part.
13
- * The intelligence lies in the "gatherer" of informations rather than in the single "providers" implementing this
14
  * interface.
15
  *
16
  * @link http://swagger.io/
@@ -86,18 +86,13 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
86
  * @return WP_Error|WP_REST_Response An array containing the data on success or a WP_Error instance on failure.
87
  */
88
  public function get( WP_REST_Request $request ) {
89
- // Early bail: ET Plus must be active to use this endpoint.
90
- if ( ! class_exists( 'Tribe__Tickets_Plus__Main' ) ) {
91
- return new WP_REST_Response( __( 'Sorry, Event Tickets Plus must be active to use this endpoint.', 'event-tickets' ), 401 );
92
- }
93
-
94
  $query_args = $request->get_query_params();
95
- $page = $request['page'];
96
- $per_page = $request['per_page'];
97
 
98
- $fetch_args = array();
99
 
100
- $supported_args = array(
101
  'provider' => 'provider',
102
  'search' => 's',
103
  'post_id' => 'event',
@@ -119,7 +114,7 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
119
  'price_min' => 'price_min',
120
  'price_max' => 'price_max',
121
  'attendee_information_available' => 'has_attendee_meta',
122
- );
123
 
124
  foreach ( $supported_args as $request_arg => $query_arg ) {
125
  if ( isset( $request[ $request_arg ] ) ) {
@@ -127,7 +122,7 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
127
  }
128
  }
129
 
130
- if ( current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' ) ) {
131
  $permission = Tribe__Tickets__REST__V1__Attendee_Repository::PERMISSION_EDITABLE;
132
  $fetch_args['post_status'] = Tribe__Utils__Array::get( $fetch_args, 'post_status', 'any' );
133
  $fetch_args['event_status'] = Tribe__Utils__Array::get( $fetch_args, 'event_status', 'any' );
@@ -156,13 +151,12 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
156
  }
157
 
158
  $query_args = array_intersect_key( $query_args, $this->READ_args() );
159
-
160
- $found = $query->found();
161
 
162
  if ( 0 === $found && 1 === $page ) {
163
- $attendees = array();
164
  } elseif ( 1 !== $page && $page * $per_page > $found ) {
165
- return new WP_Error( 'invalid-page-number', $this->messages->get_message( 'invalid-page-number' ), array( 'status' => 400 ) );
166
  } else {
167
  $attendees = $query
168
  ->per_page( $per_page )
@@ -173,7 +167,7 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
173
  /** @var Tribe__Tickets__REST__V1__Main $main */
174
  $main = tribe( 'tickets.rest-v1.main' );
175
 
176
- // make sure all arrays are formatted to by CSV lists
177
  foreach ( $query_args as $key => &$value ) {
178
  if ( is_array( $value ) ) {
179
  $value = Tribe__Utils__Array::to_list( $value );
@@ -185,10 +179,10 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
185
  $data['total_pages'] = (int) ceil( $found / $per_page );
186
  $data['attendees'] = $attendees;
187
 
188
- $headers = array(
189
  'X-ET-TOTAL' => $data['total'],
190
  'X-ET-TOTAL-PAGES' => $data['total_pages'],
191
- );
192
 
193
  return new WP_REST_Response( $data, 200, $headers );
194
  }
@@ -426,9 +420,9 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
426
  ),
427
  ),
428
  'attendee_information_available' => array(
429
- 'description' => __( 'Limit results to attendees for tickets that provide attendees the possibility to fill in additional information or not; requires ET+.', 'event-tickets' ),
430
- 'required' => false,
431
- 'type' => 'boolean',
432
  ),
433
  );
434
  }
10
  *
11
  * While the structure must conform to that used by v2.0 of Swagger the structure can be that of a full document
12
  * or that of a document part.
13
+ * The intelligence lies in the "gatherer" of information rather than in the single "providers" implementing this
14
  * interface.
15
  *
16
  * @link http://swagger.io/
86
  * @return WP_Error|WP_REST_Response An array containing the data on success or a WP_Error instance on failure.
87
  */
88
  public function get( WP_REST_Request $request ) {
 
 
 
 
 
89
  $query_args = $request->get_query_params();
90
+ $page = $request['page'];
91
+ $per_page = $request['per_page'];
92
 
93
+ $fetch_args = [];
94
 
95
+ $supported_args = [
96
  'provider' => 'provider',
97
  'search' => 's',
98
  'post_id' => 'event',
114
  'price_min' => 'price_min',
115
  'price_max' => 'price_max',
116
  'attendee_information_available' => 'has_attendee_meta',
117
+ ];
118
 
119
  foreach ( $supported_args as $request_arg => $query_arg ) {
120
  if ( isset( $request[ $request_arg ] ) ) {
122
  }
123
  }
124
 
125
+ if ( tribe( 'tickets.rest-v1.main' )->request_has_manage_access() ) {
126
  $permission = Tribe__Tickets__REST__V1__Attendee_Repository::PERMISSION_EDITABLE;
127
  $fetch_args['post_status'] = Tribe__Utils__Array::get( $fetch_args, 'post_status', 'any' );
128
  $fetch_args['event_status'] = Tribe__Utils__Array::get( $fetch_args, 'event_status', 'any' );
151
  }
152
 
153
  $query_args = array_intersect_key( $query_args, $this->READ_args() );
154
+ $found = $query->found();
 
155
 
156
  if ( 0 === $found && 1 === $page ) {
157
+ $attendees = [];
158
  } elseif ( 1 !== $page && $page * $per_page > $found ) {
159
+ return new WP_Error( 'invalid-page-number', $this->messages->get_message( 'invalid-page-number' ), [ 'status' => 400 ] );
160
  } else {
161
  $attendees = $query
162
  ->per_page( $per_page )
167
  /** @var Tribe__Tickets__REST__V1__Main $main */
168
  $main = tribe( 'tickets.rest-v1.main' );
169
 
170
+ // Make sure all arrays are formatted to by CSV lists.
171
  foreach ( $query_args as $key => &$value ) {
172
  if ( is_array( $value ) ) {
173
  $value = Tribe__Utils__Array::to_list( $value );
179
  $data['total_pages'] = (int) ceil( $found / $per_page );
180
  $data['attendees'] = $attendees;
181
 
182
+ $headers = [
183
  'X-ET-TOTAL' => $data['total'],
184
  'X-ET-TOTAL-PAGES' => $data['total_pages'],
185
+ ];
186
 
187
  return new WP_REST_Response( $data, 200, $headers );
188
  }
420
  ),
421
  ),
422
  'attendee_information_available' => array(
423
+ 'description' => __( 'Limit results to attendees for tickets that provide attendees the possibility to fill in additional information or not; requires ET+.', 'event-tickets' ),
424
+ 'required' => false,
425
+ 'type' => 'boolean',
426
  ),
427
  );
428
  }
src/Tribe/REST/V1/Endpoints/Single_Attendee.php CHANGED
@@ -9,7 +9,11 @@ class Tribe__Tickets__REST__V1__Endpoints__Single_Attendee
9
  * {@inheritdoc}
10
  */
11
  public function get_documentation() {
12
- $GET_defaults = array( 'in' => 'query', 'default' => '', 'type' => 'string' );
 
 
 
 
13
 
14
  return array(
15
  'get' => array(
@@ -64,8 +68,8 @@ class Tribe__Tickets__REST__V1__Endpoints__Single_Attendee
64
  * {@inheritdoc}
65
  */
66
  public function READ_args() {
67
- return array(
68
- 'id' => array(
69
  'type' => 'integer',
70
  'in' => 'path',
71
  'description' => __( 'The attendee post ID', 'event-tickets' ),
@@ -74,9 +78,9 @@ class Tribe__Tickets__REST__V1__Endpoints__Single_Attendee
74
  * Here we check for a positive int, not an attendee ID to properly
75
  * return 404 for missing post in place of 400.
76
  */
77
- 'validate_callback' => array( $this->validator, 'is_positive_int' ),
78
- ),
79
- );
80
  }
81
 
82
  /**
@@ -85,11 +89,6 @@ class Tribe__Tickets__REST__V1__Endpoints__Single_Attendee
85
  * @since 4.12.0 Returns 401 Unauthorized if Event Tickets Plus is not loaded.
86
  */
87
  public function get( WP_REST_Request $request ) {
88
- // Early bail: ET Plus must be active to use this endpoint.
89
- if ( ! class_exists( 'Tribe__Tickets_Plus__Main' ) ) {
90
- return new WP_REST_Response( __( 'Sorry, Event Tickets Plus must be active to use this endpoint.', 'event-tickets' ), 401 );
91
- }
92
-
93
  return tribe_attendees( 'restv1' )->by_primary_key( $request['id'] );
94
  }
95
 
@@ -356,10 +355,11 @@ class Tribe__Tickets__REST__V1__Endpoints__Single_Attendee
356
  * Validates the user permission.
357
  *
358
  * @since 5.3.2
 
359
  *
360
  * @return bool
361
  */
362
  public function validate_user_permission() {
363
- return current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' );
364
  }
365
  }
9
  * {@inheritdoc}
10
  */
11
  public function get_documentation() {
12
+ $GET_defaults = [
13
+ 'in' => 'query',
14
+ 'default' => '',
15
+ 'type' => 'string',
16
+ ];
17
 
18
  return array(
19
  'get' => array(
68
  * {@inheritdoc}
69
  */
70
  public function READ_args() {
71
+ return [
72
+ 'id' => [
73
  'type' => 'integer',
74
  'in' => 'path',
75
  'description' => __( 'The attendee post ID', 'event-tickets' ),
78
  * Here we check for a positive int, not an attendee ID to properly
79
  * return 404 for missing post in place of 400.
80
  */
81
+ 'validate_callback' => [ $this->validator, 'is_positive_int' ],
82
+ ],
83
+ ];
84
  }
85
 
86
  /**
89
  * @since 4.12.0 Returns 401 Unauthorized if Event Tickets Plus is not loaded.
90
  */
91
  public function get( WP_REST_Request $request ) {
 
 
 
 
 
92
  return tribe_attendees( 'restv1' )->by_primary_key( $request['id'] );
93
  }
94
 
355
  * Validates the user permission.
356
  *
357
  * @since 5.3.2
358
+ * @since TBD check the REST API permission via centralized method.
359
  *
360
  * @return bool
361
  */
362
  public function validate_user_permission() {
363
+ return tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
364
  }
365
  }
src/Tribe/REST/V1/Endpoints/Ticket_Archive.php CHANGED
@@ -113,8 +113,8 @@ class Tribe__Tickets__REST__V1__Endpoints__Ticket_Archive
113
  'attendees_max' => 'attendees_max',
114
  'checkedin_min' => 'checkedin_min',
115
  'checkedin_max' => 'checkedin_max',
116
- 'capacity_min' => 'capacity_min',
117
- 'capacity_max' => 'capacity_max',
118
  );
119
 
120
  foreach ( $supported_args as $request_arg => $query_arg ) {
@@ -123,7 +123,7 @@ class Tribe__Tickets__REST__V1__Endpoints__Ticket_Archive
123
  }
124
  }
125
 
126
- $has_manage_access = current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' );
127
 
128
  $attendess_btwn = $checkedin_btwn = $capacity_btwn = null;
129
 
113
  'attendees_max' => 'attendees_max',
114
  'checkedin_min' => 'checkedin_min',
115
  'checkedin_max' => 'checkedin_max',
116
+ 'capacity_min' => 'capacity_min',
117
+ 'capacity_max' => 'capacity_max',
118
  );
119
 
120
  foreach ( $supported_args as $request_arg => $query_arg ) {
123
  }
124
  }
125
 
126
+ $has_manage_access = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
127
 
128
  $attendess_btwn = $checkedin_btwn = $capacity_btwn = null;
129
 
src/Tribe/REST/V1/Main.php CHANGED
@@ -22,13 +22,12 @@ class Tribe__Tickets__REST__V1__Main extends Tribe__REST__Main {
22
  /**
23
  * @var array
24
  */
25
- protected $registered_endpoints = array();
26
 
27
  /**
28
  * Hooks the filters and actions required for the REST API support to kick in.
29
  *
30
  * @since 4.7.5
31
- *
32
  */
33
  public function hook() {
34
  $this->hook_headers();
@@ -41,6 +40,27 @@ class Tribe__Tickets__REST__V1__Main extends Tribe__REST__Main {
41
  return;
42
  }
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  }
45
 
46
  /**
@@ -123,7 +143,6 @@ class Tribe__Tickets__REST__V1__Main extends Tribe__REST__Main {
123
  return 'v1';
124
  }
125
 
126
-
127
  /**
128
  * Returns the REST API URL prefix that will be appended to the namespace.
129
  *
@@ -137,4 +156,60 @@ class Tribe__Tickets__REST__V1__Main extends Tribe__REST__Main {
137
  return $this->url_prefix;
138
  }
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  }
22
  /**
23
  * @var array
24
  */
25
+ protected $registered_endpoints = [];
26
 
27
  /**
28
  * Hooks the filters and actions required for the REST API support to kick in.
29
  *
30
  * @since 4.7.5
 
31
  */
32
  public function hook() {
33
  $this->hook_headers();
40
  return;
41
  }
42
 
43
+ // Add support for `ticketed` param on tribe_events filter on REST API.
44
+ add_filter( 'tribe_events_archive_get_args', [ $this , 'parse_events_rest_args' ], 10, 3 );
45
+ }
46
+
47
+ /**
48
+ * Filter the args for Event Query over REST API.
49
+ *
50
+ * @since TBD
51
+ *
52
+ * @param array $args Arguments used to get the events from the archive page.
53
+ * @param array $data Array with the data to be returned to the REST response.
54
+ * @param WP_REST_Request $request The request object.
55
+ *
56
+ * @return mixed
57
+ */
58
+ public function parse_events_rest_args( $args, $data, $request ) {
59
+ if ( isset( $request['ticketed'] ) ) {
60
+ $args['has_rsvp_or_tickets'] = tribe_is_truthy( $request['ticketed'] );
61
+ }
62
+
63
+ return $args;
64
  }
65
 
66
  /**
143
  return 'v1';
144
  }
145
 
 
146
  /**
147
  * Returns the REST API URL prefix that will be appended to the namespace.
148
  *
156
  return $this->url_prefix;
157
  }
158
 
159
+ /**
160
+ * Return if the request has access to private information.
161
+ *
162
+ * @since TBD
163
+ *
164
+ * @return bool True if the request has access to private information, false otherwise.
165
+ */
166
+ public function request_has_manage_access() : bool {
167
+ return $this->user_has_manage_access() || $this->request_has_valid_api_key();
168
+ }
169
+
170
+ /**
171
+ * Return if the user has manage access.
172
+ *
173
+ * @since TBD
174
+ *
175
+ * @return bool True if the user has manage access, false otherwise.
176
+ */
177
+ public function user_has_manage_access() : bool {
178
+ return current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' );
179
+ }
180
+
181
+ /**
182
+ * Return if user can read private information.
183
+ *
184
+ * @since TBD
185
+ *
186
+ * @return bool True if user can read private information, false otherwise.
187
+ */
188
+ public function user_has_read_private_posts_access() : bool {
189
+ return current_user_can( 'read_private_posts' );
190
+ }
191
+
192
+ /**
193
+ * Return if the request has a valid api key.
194
+ *
195
+ * @since TBD
196
+ *
197
+ * @return bool True if the request has a valid api key, false otherwise.
198
+ */
199
+ public function request_has_valid_api_key() : bool {
200
+ $option = tribe_get_option( 'tickets-plus-qr-options-api-key', '' );
201
+
202
+ if ( empty( $option ) ) {
203
+ return false;
204
+ }
205
+
206
+ $request_var = tribe_get_request_var( 'api_key' );
207
+
208
+ if ( empty( $request_var ) || $option !== $request_var ) {
209
+ return false;
210
+ }
211
+
212
+ return true;
213
+ }
214
+
215
  }
src/Tribe/REST/V1/Post_Repository.php CHANGED
@@ -586,12 +586,12 @@ class Tribe__Tickets__REST__V1__Post_Repository
586
 
587
  // @todo here we need to uniform the return values to indicate unlimited and oversold!
588
 
589
- $details = array(
590
  'available_percentage' => $available_percentage,
591
- 'available' => (int) $ticket->stock(), // see note above about why we use this
592
- );
593
 
594
- if ( current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' ) ) {
595
  $details['max'] = (int) $ticket->capacity();
596
  $details['sold'] = (int) $ticket->qty_sold();
597
  $details['pending'] = (int) $ticket->qty_pending();
@@ -663,7 +663,7 @@ class Tribe__Tickets__REST__V1__Post_Repository
663
 
664
  $event = $ticket_object->get_event();
665
 
666
- $has_manage_access = current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' );
667
  $always_show_attendees_data = $has_manage_access;
668
 
669
  /**
@@ -765,7 +765,7 @@ class Tribe__Tickets__REST__V1__Post_Repository
765
  return false;
766
  }
767
 
768
- $has_manage_access = current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' );
769
  $permission = $has_manage_access ? 'editable' : 'readable';
770
 
771
  $query = tribe_attendees( 'restv1' )
@@ -950,9 +950,9 @@ class Tribe__Tickets__REST__V1__Post_Repository
950
  'rest_url' => $main->get_url( '/attendees/' . $attendee_id ),
951
  ];
952
 
953
- $has_manage_access = current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' );
954
 
955
- // Only show the attendee name if the attendee did not optout or the user can read private posts
956
  if ( empty( $attendee['optout'] ) || $has_manage_access ) {
957
  $attendee_data['title'] = Tribe__Utils__Array::get( $attendee, 'holder_name', Tribe__Utils__Array::get( $attendee, 'purchaser_name', '' ) );
958
  $attendee_data['optout'] = tribe_is_truthy( $attendee['optout'] );
@@ -960,7 +960,7 @@ class Tribe__Tickets__REST__V1__Post_Repository
960
  $attendee_data['optout'] = true;
961
  }
962
 
963
- // Sensible information should not be shown to everyone
964
  if ( $has_manage_access ) {
965
  $attendee_data = array_merge(
966
  $attendee_data,
586
 
587
  // @todo here we need to uniform the return values to indicate unlimited and oversold!
588
 
589
+ $details = [
590
  'available_percentage' => $available_percentage,
591
+ 'available' => (int) $ticket->stock(), // see note above about why we use this.
592
+ ];
593
 
594
+ if ( tribe( 'tickets.rest-v1.main' )->request_has_manage_access() ) {
595
  $details['max'] = (int) $ticket->capacity();
596
  $details['sold'] = (int) $ticket->qty_sold();
597
  $details['pending'] = (int) $ticket->qty_pending();
663
 
664
  $event = $ticket_object->get_event();
665
 
666
+ $has_manage_access = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
667
  $always_show_attendees_data = $has_manage_access;
668
 
669
  /**
765
  return false;
766
  }
767
 
768
+ $has_manage_access = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
769
  $permission = $has_manage_access ? 'editable' : 'readable';
770
 
771
  $query = tribe_attendees( 'restv1' )
950
  'rest_url' => $main->get_url( '/attendees/' . $attendee_id ),
951
  ];
952
 
953
+ $has_manage_access = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
954
 
955
+ // Only show the attendee name if the attendee did not optout or the user can read private posts.
956
  if ( empty( $attendee['optout'] ) || $has_manage_access ) {
957
  $attendee_data['title'] = Tribe__Utils__Array::get( $attendee, 'holder_name', Tribe__Utils__Array::get( $attendee, 'purchaser_name', '' ) );
958
  $attendee_data['optout'] = tribe_is_truthy( $attendee['optout'] );
960
  $attendee_data['optout'] = true;
961
  }
962
 
963
+ // Sensible information should not be shown to everyone.
964
  if ( $has_manage_access ) {
965
  $attendee_data = array_merge(
966
  $attendee_data,
src/Tribe/REST/V1/Service_Provider.php CHANGED
@@ -21,7 +21,7 @@ class Tribe__Tickets__REST__V1__Service_Provider extends tad_DI52_ServiceProvide
21
  * @since 4.7.5
22
  */
23
  public function register() {
24
- tribe_singleton( 'tickets.rest-v1.main', 'Tribe__Tickets__REST__V1__Main', array( 'hook' ) );
25
  tribe_singleton( 'tickets.rest-v1.messages', 'Tribe__Tickets__REST__V1__Messages' );
26
  tribe_singleton( 'tickets.rest-v1.headers-base', 'Tribe__Tickets__REST__V1__Headers__Base' );
27
  tribe_singleton( 'tickets.rest-v1.settings', 'Tribe__Tickets__REST__V1__Settings' );
@@ -114,11 +114,15 @@ class Tribe__Tickets__REST__V1__Service_Provider extends tad_DI52_ServiceProvide
114
  /** @var Tribe__Documentation__Swagger__Builder_Interface $endpoint */
115
  $endpoint = tribe( 'tickets.rest-v1.endpoints.documentation' );
116
 
117
- register_rest_route( $this->namespace, '/doc', array(
118
- 'methods' => WP_REST_Server::READABLE,
119
- 'callback' => array( $endpoint, 'get' ),
120
- 'permission_callback' => '__return_true',
121
- ) );
 
 
 
 
122
 
123
  $endpoint->register_definition_provider( 'Image', new Tribe__Documentation__Swagger__Image_Definition_Provider() );
124
  $endpoint->register_definition_provider( 'ImageSize', new Tribe__Documentation__Swagger__Image_Size_Definition_Provider() );
21
  * @since 4.7.5
22
  */
23
  public function register() {
24
+ tribe_singleton( 'tickets.rest-v1.main', 'Tribe__Tickets__REST__V1__Main', [ 'hook' ] );
25
  tribe_singleton( 'tickets.rest-v1.messages', 'Tribe__Tickets__REST__V1__Messages' );
26
  tribe_singleton( 'tickets.rest-v1.headers-base', 'Tribe__Tickets__REST__V1__Headers__Base' );
27
  tribe_singleton( 'tickets.rest-v1.settings', 'Tribe__Tickets__REST__V1__Settings' );
114
  /** @var Tribe__Documentation__Swagger__Builder_Interface $endpoint */
115
  $endpoint = tribe( 'tickets.rest-v1.endpoints.documentation' );
116
 
117
+ register_rest_route(
118
+ $this->namespace,
119
+ '/doc',
120
+ [
121
+ 'methods' => WP_REST_Server::READABLE,
122
+ 'callback' => [ $endpoint, 'get' ],
123
+ 'permission_callback' => '__return_true',
124
+ ]
125
+ );
126
 
127
  $endpoint->register_definition_provider( 'Image', new Tribe__Documentation__Swagger__Image_Definition_Provider() );
128
  $endpoint->register_definition_provider( 'ImageSize', new Tribe__Documentation__Swagger__Image_Size_Definition_Provider() );
src/Tribe/RSVP.php CHANGED
@@ -482,9 +482,9 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
482
  */
483
  $attendee_ids = $this->generate_tickets( $args['post_id'], false );
484
 
485
- if ( false === $attendee_ids ) {
486
  $result['success'] = false;
487
- $result['errors'][] = __( 'Your RSVP was unsuccessful, please try again.', 'event-tickets' );
488
 
489
  return $result;
490
  }
@@ -1040,7 +1040,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1040
  * @param int|null $post_id Post ID for ticket, null to use current post ID.
1041
  * @param boolean $redirect Whether to redirect on error.
1042
  *
1043
- * @return array|false List of attendee ID(s) generated, or false if there was a problem.
1044
  */
1045
  public function generate_tickets( $post_id = null, $redirect = true ) {
1046
  $has_tickets = false;
@@ -1069,7 +1069,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1069
  tribe_exit();
1070
  }
1071
 
1072
- return false;
1073
  }
1074
 
1075
  $product_ids = [];
@@ -1096,6 +1096,10 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1096
 
1097
  $tickets_generated = $this->generate_tickets_for( $product_id, $ticket_qty, $attendee_details, $redirect );
1098
 
 
 
 
 
1099
  if ( $tickets_generated ) {
1100
  if ( is_array( $tickets_generated ) ) {
1101
  $attendee_ids[] = $tickets_generated;
@@ -2524,15 +2528,31 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
2524
  *
2525
  * @since 4.7
2526
  *
 
 
2527
  * @param int $product_id The ticket post ID.
2528
  * @param int $ticket_qty The number of attendees that should be generated.
2529
  * @param array $attendee_details An array containing the details for the attendees
2530
  * that should be generated.
2531
  * @param boolean $redirect Whether to redirect on error.
2532
  *
2533
- * @return bool|array `true` if the attendees were successfully generated, `false` otherwise. If $redirect is set to false, upon success this method will return an array of attendee IDs generated.
2534
  */
2535
  public function generate_tickets_for( $product_id, $ticket_qty, $attendee_details, $redirect = true ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2536
  $rsvp_options = $this->tickets_view->get_rsvp_options( null, false );
2537
 
2538
  $required_details = array(
@@ -2545,12 +2565,14 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
2545
 
2546
  foreach ( $required_details as $required_detail ) {
2547
  if ( ! isset( $attendee_details[ $required_detail ] ) ) {
2548
- return false;
 
2549
  }
2550
 
2551
  // Some details should not be empty.
2552
  if ( 'optout' !== $required_detail && empty( $attendee_details[ $required_detail ] ) ) {
2553
- return false;
 
2554
  }
2555
  }
2556
 
@@ -2569,20 +2591,6 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
2569
  $attendee_optout = filter_var( $attendee_optout, FILTER_VALIDATE_BOOLEAN );
2570
  $attendee_optout = (int) $attendee_optout;
2571
 
2572
- // Get the event this tickets is for
2573
- $post_id = get_post_meta( $product_id, $this->get_event_key(), true );
2574
-
2575
- if ( empty( $post_id ) ) {
2576
- return false;
2577
- }
2578
-
2579
- /** @var Tribe__Tickets__Ticket_Object $ticket_type */
2580
- $ticket_type = $this->get_ticket( $post_id, $product_id );
2581
-
2582
- if ( ! $ticket_type instanceof Tribe__Tickets__Ticket_Object ) {
2583
- return false;
2584
- }
2585
-
2586
  // get the RSVP status `decrease_stock_by` value
2587
  $status_stock_size = $rsvp_options[ $attendee_order_status ]['decrease_stock_by'];
2588
 
@@ -2601,7 +2609,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
2601
  tribe_exit();
2602
  }
2603
 
2604
- return false;
2605
  }
2606
 
2607
  /**
@@ -2631,7 +2639,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
2631
  $attendee_ids[] = $this->create_attendee_for_ticket( $ticket_type, $attendee_data );
2632
  } catch ( Exception $exception ) {
2633
  // Stop processing and return false.
2634
- return false;
2635
  }
2636
  }
2637
 
482
  */
483
  $attendee_ids = $this->generate_tickets( $args['post_id'], false );
484
 
485
+ if ( is_wp_error( $attendee_ids ) ) {
486
  $result['success'] = false;
487
+ $result['errors'][] = $attendee_ids->get_error_message();
488
 
489
  return $result;
490
  }
1040
  * @param int|null $post_id Post ID for ticket, null to use current post ID.
1041
  * @param boolean $redirect Whether to redirect on error.
1042
  *
1043
+ * @return array|WP_Error List of attendee ID(s) generated, or \WP_Error if there was a problem.
1044
  */
1045
  public function generate_tickets( $post_id = null, $redirect = true ) {
1046
  $has_tickets = false;
1069
  tribe_exit();
1070
  }
1071
 
1072
+ return new WP_Error( 'rsvp-error', __( 'Invalid data! Missing required attendee details!', 'event-tickets' ) );
1073
  }
1074
 
1075
  $product_ids = [];
1096
 
1097
  $tickets_generated = $this->generate_tickets_for( $product_id, $ticket_qty, $attendee_details, $redirect );
1098
 
1099
+ if ( is_wp_error( $tickets_generated ) ) {
1100
+ return $tickets_generated;
1101
+ }
1102
+
1103
  if ( $tickets_generated ) {
1104
  if ( is_array( $tickets_generated ) ) {
1105
  $attendee_ids[] = $tickets_generated;
2528
  *
2529
  * @since 4.7
2530
  *
2531
+ * @since TBD Return WP_Error in case of errors to show proper error messages.
2532
+ *
2533
  * @param int $product_id The ticket post ID.
2534
  * @param int $ticket_qty The number of attendees that should be generated.
2535
  * @param array $attendee_details An array containing the details for the attendees
2536
  * that should be generated.
2537
  * @param boolean $redirect Whether to redirect on error.
2538
  *
2539
+ * @return array|WP_Error `true` if the attendees were successfully generated, `false` otherwise. If $redirect is set to false, upon success this method will return an array of attendee IDs generated.
2540
  */
2541
  public function generate_tickets_for( $product_id, $ticket_qty, $attendee_details, $redirect = true ) {
2542
+ // Get the event this tickets is for
2543
+ $post_id = get_post_meta( $product_id, $this->get_event_key(), true );
2544
+
2545
+ if ( empty( $post_id ) ) {
2546
+ return new WP_Error( 'rsvp-invalid-parent-id', __( 'Invalid parent ID provided!', 'event-tickets' ) );
2547
+ }
2548
+
2549
+ /** @var Tribe__Tickets__Ticket_Object $ticket_type */
2550
+ $ticket_type = $this->get_ticket( $post_id, $product_id );
2551
+
2552
+ if ( ! $ticket_type instanceof Tribe__Tickets__Ticket_Object ) {
2553
+ return new WP_Error( 'rsvp-invalid-ticket-id', __( 'Invalid Ticket ID provided!', 'event-tickets' ) );
2554
+ }
2555
+
2556
  $rsvp_options = $this->tickets_view->get_rsvp_options( null, false );
2557
 
2558
  $required_details = array(
2565
 
2566
  foreach ( $required_details as $required_detail ) {
2567
  if ( ! isset( $attendee_details[ $required_detail ] ) ) {
2568
+ $message = sprintf( __( "Missing required RSVP field: %s", 'event-tickets' ), $required_detail );
2569
+ return new WP_Error( 'rsvp-missing-required-data', $message );
2570
  }
2571
 
2572
  // Some details should not be empty.
2573
  if ( 'optout' !== $required_detail && empty( $attendee_details[ $required_detail ] ) ) {
2574
+ $message = sprintf( __( "Missing required RSVP field: %s", 'event-tickets' ), $required_detail );
2575
+ return new WP_Error( 'rsvp-missing-required-data', $message );
2576
  }
2577
  }
2578
 
2591
  $attendee_optout = filter_var( $attendee_optout, FILTER_VALIDATE_BOOLEAN );
2592
  $attendee_optout = (int) $attendee_optout;
2593
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2594
  // get the RSVP status `decrease_stock_by` value
2595
  $status_stock_size = $rsvp_options[ $attendee_order_status ]['decrease_stock_by'];
2596
 
2609
  tribe_exit();
2610
  }
2611
 
2612
+ return new WP_Error( 'rsvp-invalid-stock-request', __( 'Requested amount of Tickets are not available!', 'event-tickets' ) );
2613
  }
2614
 
2615
  /**
2639
  $attendee_ids[] = $this->create_attendee_for_ticket( $ticket_type, $attendee_data );
2640
  } catch ( Exception $exception ) {
2641
  // Stop processing and return false.
2642
+ return new WP_Error( 'rsvp-invalid-stock-request', $exception->getMessage() );
2643
  }
2644
  }
2645
 
src/Tribe/Tickets.php CHANGED
@@ -1475,6 +1475,14 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
1475
  if ( ! empty( $args['per_page'] ) ) {
1476
  $repository->per_page( absint( $args['per_page'] ) );
1477
  }
 
 
 
 
 
 
 
 
1478
  }
1479
 
1480
  /**
@@ -3409,11 +3417,7 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
3409
  $editor = tribe( 'editor' );
3410
 
3411
  // Blocks and ticket templates merged - bail if we should be seeing blocks.
3412
- if (
3413
- has_blocks( $post->ID )
3414
- && $editor->should_load_blocks()
3415
- && ! $editor->is_classic_editor()
3416
- ) {
3417
  return false;
3418
  }
3419
 
1475
  if ( ! empty( $args['per_page'] ) ) {
1476
  $repository->per_page( absint( $args['per_page'] ) );
1477
  }
1478
+
1479
+ if ( ! empty( $args['orderby'] ) ) {
1480
+ $repository->order_by( strval( $args['orderby'] ) );
1481
+ }
1482
+
1483
+ if ( ! empty( $args['order'] ) ) {
1484
+ $repository->order( strval( $args['order'] ) );
1485
+ }
1486
  }
1487
 
1488
  /**
3417
  $editor = tribe( 'editor' );
3418
 
3419
  // Blocks and ticket templates merged - bail if we should be seeing blocks.
3420
+ if ( has_blocks( $post->ID ) ) {
 
 
 
 
3421
  return false;
3422
  }
3423
 
src/admin-views/admin-welcome-message.php CHANGED
@@ -3,6 +3,7 @@
3
  * The template that displays the welcome message when the plugin is first activated.
4
  */
5
 
 
6
  use Tribe\Tickets\Admin\Settings;
7
 
8
  $main = Tribe__Main::instance();
@@ -18,6 +19,18 @@ if ( $has_plus ) {
18
  $logo_image = 'images/logo/event-tickets-plus.svg';
19
  $mobile_graphic = 'images/header/welcome-mobile-etplus.jpg';
20
  }
 
 
 
 
 
 
 
 
 
 
 
 
21
  ?>
22
 
23
  <?php if ( $has_plus ) : ?>
@@ -142,12 +155,12 @@ if ( $has_plus ) {
142
  <div class="tribe-events-admin-card tribe-events-admin-card--3up tribe-events-admin-card--last">
143
  <img
144
  class="tribe-events-admin-card__image"
145
- src="<?php echo esc_url( tribe_resource_url( 'images/welcome/translations.jpg', false, null, $main ) ); ?>"
146
- alt="<?php esc_attr_e( 'Illustration of characters being translated', 'event-tickets' ); ?>"
147
  />
148
- <div class="tribe-events-admin-card__title"><?php esc_html_e( 'Translations', 'event-tickets' ); ?></div>
149
- <div class="tribe-events-admin-card__description"><?php esc_html_e( 'Need a language other than English? We\'ve got you covered here.', 'event-tickets' ); ?></div>
150
- <a class="tribe-events-admin-card__link" href="https://evnt.is/language" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Learn more', 'event-tickets' ); ?></a>
151
  </div>
152
 
153
  <div class="tribe-events-admin-card tribe-events-admin-card--1up">
3
  * The template that displays the welcome message when the plugin is first activated.
4
  */
5
 
6
+ use TEC\Tickets\Commerce\Payments_Tab;
7
  use Tribe\Tickets\Admin\Settings;
8
 
9
  $main = Tribe__Main::instance();
19
  $logo_image = 'images/logo/event-tickets-plus.svg';
20
  $mobile_graphic = 'images/header/welcome-mobile-etplus.jpg';
21
  }
22
+
23
+ $tc_description = esc_html( 'Tickets Commerce provides flexible online payments right out of the box.', 'event-tickets' );
24
+ $tc_link = tribe( Payments_Tab::class )->get_url();
25
+
26
+ if ( $has_tec ) {
27
+ $tc_description = sprintf(
28
+ '%s %s',
29
+ esc_html( 'Want to monetize your events?', 'event-tickets' ),
30
+ $tc_description
31
+ );
32
+ }
33
+
34
  ?>
35
 
36
  <?php if ( $has_plus ) : ?>
155
  <div class="tribe-events-admin-card tribe-events-admin-card--3up tribe-events-admin-card--last">
156
  <img
157
  class="tribe-events-admin-card__image"
158
+ src="<?php echo esc_url( tribe_resource_url( 'images/welcome/tickets-commerce.png', false, null, $main ) ); ?>"
159
+ alt="<?php esc_attr_e( 'Illustration of money turning into a ticket', 'event-tickets' ); ?>"
160
  />
161
+ <div class="tribe-events-admin-card__title"><?php esc_html_e( 'Tickets Commerce', 'event-tickets' ); ?></div>
162
+ <div class="tribe-events-admin-card__description"><?php echo $tc_description; ?></div>
163
+ <a class="tribe-events-admin-card__link" href="<?php echo $tc_link; ?>"><?php esc_html_e( 'Get started', 'event-tickets' ); ?></a>
164
  </div>
165
 
166
  <div class="tribe-events-admin-card tribe-events-admin-card--1up">
src/resources/css/tickets-report.css CHANGED
@@ -181,7 +181,7 @@
181
  }
182
 
183
  .tribe-report-page .column-security {
184
- width: 120px;
185
  }
186
 
187
  .tribe-report-page .column-check_in {
181
  }
182
 
183
  .tribe-report-page .column-security {
184
+ width: 130px;
185
  }
186
 
187
  .tribe-report-page .column-check_in {
src/resources/css/tickets-report.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-report-panel{overflow:visible;padding:0;position:relative}.tribe-report-panel.welcome-panel{background:none;overflow:visible}.tribe-report-panel.welcome-panel:before{content:none}.tribe-report-panel .about-description{width:66%}.tribe-report-panel .about-description a{color:inherit}.tribe-report-panel .welcome-panel-content{min-height:0}.tribe-report-panel .welcome-panel-column-container{display:grid;grid-gap:unset;gap:unset;grid-template-columns:repeat(3,1fr);grid-template-areas:"a b c" "d d c";margin-top:0;padding:0;position:static;*zoom:1}.tribe-report-panel .welcome-panel-column{display:inline-block;max-width:none;padding:20px 10px;width:auto}.tribe-report-panel .welcome-panel-column li{line-height:1.4em;margin-bottom:6px;padding:0}.tribe-report-panel .welcome-panel-column .tribe-event-meta-note div{padding:0 0 0 15px}.tribe-report-panel .welcome-panel-first{grid-area:a}.tribe-report-panel .welcome-panel-extra{grid-area:d}.tribe-report-panel .welcome-panel-middle{grid-area:b}.tribe-report-panel .welcome-panel-last{align-content:start;border-left:1px solid #eee;display:flex;flex-flow:row wrap;grid-area:c;padding:10px 20px 5px;*zoom:1}.tribe-report-panel .welcome-panel-last li{margin-bottom:2px}.tribe-report-panel .welcome-panel-last .totals-header{flex:0 0 100%}.tribe-report-panel .welcome-panel-last .totals-header h3{display:inline-block;width:auto}.tribe-report-panel .welcome-panel-last .totals-header .order-total{font-size:16px;margin:1.2em 0 0;font-weight:600}.tribe-report-panel .welcome-panel-last h4{font-size:1.5em;text-align:center}.tribe-report-panel .welcome-panel-last li{font-size:1.1em}.tribe-report-page .welcome-panel-content h3{margin-top:0}.tribe-report-page h4.tickets-summary{margin:0}.tribe-report-page .tickets_checkin{min-width:87px;text-align:center;white-space:nowrap}.tribe-report-page .tickets_uncheckin{display:none;height:auto;line-height:1.5;white-space:normal}.tribe-report-page .tickets_checked td{opacity:.6}.tribe-report-page .tickets_checked td.check_in{opacity:1}.tribe-report-page .tickets_checked .tickets_checkin{display:none}.tribe-report-page .tickets_checked .tickets_uncheckin{display:block;opacity:1}.tribe-report-page .tickets_checked .inline .tickets_uncheckin{display:inline}.tribe-report-page .cancelled{font-style:italic}.tribe-report-page .cancelled .check_in{font-style:normal}.tribe-report-page .column-attendee_id,.tribe-report-page .column-order_id{width:70px}.tribe-report-page td[class*=column]{word-break:break-word}.tribe-report-page td.column-status{font-size:13px;width:80px}.tribe-report-page .column-security{width:120px}.tribe-report-page .column-check_in{min-width:90px;width:auto}.tribe-report-page .attendees-actions a.email,.tribe-report-page .attendees-actions a.export,.tribe-report-page .attendees-actions input.print{float:left;margin:1px 8px 0 0}.tribe-attendees-email .tribe-attendees-email-message{float:left;margin:0}.tribe-attendees-email .button-primary{margin-top:3px}.tribe-attendees-email-message ul{font-size:13px;line-height:1.5;margin:.5em 0;padding:2px}.tribe-attendees-email-message ul li:last-child{margin-bottom:0}#attendees_email_wrapper{margin-top:10px;overflow:hidden;padding:20px}#attendees_email_wrapper label{display:block}#attendees_email_wrapper label span{display:inline-block;width:105px}#attendees_email_wrapper input[type=text],#attendees_email_wrapper select{width:285px}#attendees_email_wrapper .attendees_or{display:block;font-size:20px;margin:20px 0;text-align:center}.wp-list-table{font-size:14px}.wp-list-table td.check_in .delete{text-align:center}.welcome-panel .welcome-panel-content{margin:0;*zoom:1}table.orders tr.denied,table.orders tr.pending,table.orders tr.refunded{font-style:italic}.tec-admin__upsell-tec-tickets-manual-attendees .tec-admin__upsell-content{padding:0}.tec-admin__upsell-tec-tickets-manual-attendees .tec-admin__upsell-text{color:#1d2327}@media screen and (max-width:768px){.tribe-report-panel .welcome-panel-column-container{grid-template-columns:1fr;grid-template-areas:"a" "b" "c" "d"}.tribe-report-panel .welcome-panel-column{padding:20px 0}.tribe-report-panel .welcome-panel-column h3{display:inline-block;padding-left:15px}.tribe-report-panel .welcome-panel-column .tribe-event-meta-note div,.tribe-report-panel .welcome-panel-column ul,.tribe-report-panel .welcome-panel-middle>div{padding:0 15px}.tribe-report-panel .welcome-panel-last{width:100%}.welcome-panel .welcome-panel-content{margin-left:0;max-width:100%}}@media screen and (min-width:1024px){.tribe-report-panel .welcome-panel-column{padding:20px var(--tec-spacer-5)}}@media screen and (max-width:870px){.tribe-report-panel .welcome-panel-column li{display:list-item}.tribe-report-panel .welcome-panel-last ul{width:50%}}@media screen and (min-width:870px){.tribe-report-panel .welcome-panel-last ul:first-child{margin-bottom:0}}@media screen and (max-width:782px){.tribe-attendees-email-message .notice-dismiss{padding:9px}#TB_window{height:auto!important}#plugin-information-title{height:auto!important;overflow:hidden!important}#plugin-information-footer{position:relative!important}}@media screen and (max-width:440px){#TB_window{left:0!important;margin-left:0!important}#TB_iframeContent,#TB_window{width:100%!important}}
1
+ .tribe-report-panel{overflow:visible;padding:0;position:relative}.tribe-report-panel.welcome-panel{background:none;overflow:visible}.tribe-report-panel.welcome-panel:before{content:none}.tribe-report-panel .about-description{width:66%}.tribe-report-panel .about-description a{color:inherit}.tribe-report-panel .welcome-panel-content{min-height:0}.tribe-report-panel .welcome-panel-column-container{display:grid;grid-gap:unset;gap:unset;grid-template-columns:repeat(3,1fr);grid-template-areas:"a b c" "d d c";margin-top:0;padding:0;position:static;*zoom:1}.tribe-report-panel .welcome-panel-column{display:inline-block;max-width:none;padding:20px 10px;width:auto}.tribe-report-panel .welcome-panel-column li{line-height:1.4em;margin-bottom:6px;padding:0}.tribe-report-panel .welcome-panel-column .tribe-event-meta-note div{padding:0 0 0 15px}.tribe-report-panel .welcome-panel-first{grid-area:a}.tribe-report-panel .welcome-panel-extra{grid-area:d}.tribe-report-panel .welcome-panel-middle{grid-area:b}.tribe-report-panel .welcome-panel-last{align-content:start;border-left:1px solid #eee;display:flex;flex-flow:row wrap;grid-area:c;padding:10px 20px 5px;*zoom:1}.tribe-report-panel .welcome-panel-last li{margin-bottom:2px}.tribe-report-panel .welcome-panel-last .totals-header{flex:0 0 100%}.tribe-report-panel .welcome-panel-last .totals-header h3{display:inline-block;width:auto}.tribe-report-panel .welcome-panel-last .totals-header .order-total{font-size:16px;margin:1.2em 0 0;font-weight:600}.tribe-report-panel .welcome-panel-last h4{font-size:1.5em;text-align:center}.tribe-report-panel .welcome-panel-last li{font-size:1.1em}.tribe-report-page .welcome-panel-content h3{margin-top:0}.tribe-report-page h4.tickets-summary{margin:0}.tribe-report-page .tickets_checkin{min-width:87px;text-align:center;white-space:nowrap}.tribe-report-page .tickets_uncheckin{display:none;height:auto;line-height:1.5;white-space:normal}.tribe-report-page .tickets_checked td{opacity:.6}.tribe-report-page .tickets_checked td.check_in{opacity:1}.tribe-report-page .tickets_checked .tickets_checkin{display:none}.tribe-report-page .tickets_checked .tickets_uncheckin{display:block;opacity:1}.tribe-report-page .tickets_checked .inline .tickets_uncheckin{display:inline}.tribe-report-page .cancelled{font-style:italic}.tribe-report-page .cancelled .check_in{font-style:normal}.tribe-report-page .column-attendee_id,.tribe-report-page .column-order_id{width:70px}.tribe-report-page td[class*=column]{word-break:break-word}.tribe-report-page td.column-status{font-size:13px;width:80px}.tribe-report-page .column-security{width:130px}.tribe-report-page .column-check_in{min-width:90px;width:auto}.tribe-report-page .attendees-actions a.email,.tribe-report-page .attendees-actions a.export,.tribe-report-page .attendees-actions input.print{float:left;margin:1px 8px 0 0}.tribe-attendees-email .tribe-attendees-email-message{float:left;margin:0}.tribe-attendees-email .button-primary{margin-top:3px}.tribe-attendees-email-message ul{font-size:13px;line-height:1.5;margin:.5em 0;padding:2px}.tribe-attendees-email-message ul li:last-child{margin-bottom:0}#attendees_email_wrapper{margin-top:10px;overflow:hidden;padding:20px}#attendees_email_wrapper label{display:block}#attendees_email_wrapper label span{display:inline-block;width:105px}#attendees_email_wrapper input[type=text],#attendees_email_wrapper select{width:285px}#attendees_email_wrapper .attendees_or{display:block;font-size:20px;margin:20px 0;text-align:center}.wp-list-table{font-size:14px}.wp-list-table td.check_in .delete{text-align:center}.welcome-panel .welcome-panel-content{margin:0;*zoom:1}table.orders tr.denied,table.orders tr.pending,table.orders tr.refunded{font-style:italic}.tec-admin__upsell-tec-tickets-manual-attendees .tec-admin__upsell-content{padding:0}.tec-admin__upsell-tec-tickets-manual-attendees .tec-admin__upsell-text{color:#1d2327}@media screen and (max-width:768px){.tribe-report-panel .welcome-panel-column-container{grid-template-columns:1fr;grid-template-areas:"a" "b" "c" "d"}.tribe-report-panel .welcome-panel-column{padding:20px 0}.tribe-report-panel .welcome-panel-column h3{display:inline-block;padding-left:15px}.tribe-report-panel .welcome-panel-column .tribe-event-meta-note div,.tribe-report-panel .welcome-panel-column ul,.tribe-report-panel .welcome-panel-middle>div{padding:0 15px}.tribe-report-panel .welcome-panel-last{width:100%}.welcome-panel .welcome-panel-content{margin-left:0;max-width:100%}}@media screen and (min-width:1024px){.tribe-report-panel .welcome-panel-column{padding:20px var(--tec-spacer-5)}}@media screen and (max-width:870px){.tribe-report-panel .welcome-panel-column li{display:list-item}.tribe-report-panel .welcome-panel-last ul{width:50%}}@media screen and (min-width:870px){.tribe-report-panel .welcome-panel-last ul:first-child{margin-bottom:0}}@media screen and (max-width:782px){.tribe-attendees-email-message .notice-dismiss{padding:9px}#TB_window{height:auto!important}#plugin-information-title{height:auto!important;overflow:hidden!important}#plugin-information-footer{position:relative!important}}@media screen and (max-width:440px){#TB_window{left:0!important;margin-left:0!important}#TB_iframeContent,#TB_window{width:100%!important}}
src/resources/js/v2/__tests__/tickets-utils.test.js CHANGED
@@ -114,4 +114,28 @@ describe( 'Format number extended tests', () => {
114
  it( 'Should return false if invalid format given', () => {
115
  expect( utils.numberFormat( '111', 'invalid-format' ) ).toBe(false);
116
  } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  } );
114
  it( 'Should return false if invalid format given', () => {
115
  expect( utils.numberFormat( '111', 'invalid-format' ) ).toBe(false);
116
  } );
117
+ } );
118
+
119
+ describe( 'Testing Shared Capacity Calculations', () => {
120
+
121
+ // result should always the be minimum value between `target_available` and `maxAvailable - addedtToCart`.
122
+ const dataset = [
123
+ { targetQty: 2, targetAvailable: 2, maxAvailable: 2, addedToCart: 0, result: 2 },
124
+ { targetQty: 1, targetAvailable: 1, maxAvailable: 2, addedToCart: 0, result: 1 },
125
+ { targetQty: 3, targetAvailable: 2, maxAvailable: 5, addedToCart: 0, result: 2 },
126
+ { targetQty: 3, targetAvailable: 3, maxAvailable: 2, addedToCart: 0, result: 2 },
127
+ { targetQty: 1, targetAvailable: 1, maxAvailable: 2, addedToCart: 2, result: 0 },
128
+ { targetQty: 3, targetAvailable: 3, maxAvailable: 2, addedToCart: 2, result: 0 },
129
+ { targetQty: 4, targetAvailable: 4, maxAvailable: 6, addedToCart: 3, result: 3 },
130
+ { targetQty: 4, targetAvailable: 5, maxAvailable: 3, addedToCart: 0, result: 3 },
131
+ { targetQty: 4, targetAvailable: 5, maxAvailable: 3, addedToCart: 1, result: 2 },
132
+ { targetQty: 4, targetAvailable: 5, maxAvailable: 3, addedToCart: 2, result: 1 },
133
+ { targetQty: 4, targetAvailable: 5, maxAvailable: 3, addedToCart: 3, result: 0 },
134
+ ];
135
+
136
+ describe( 'Testing Shared Cap combinations', () => {
137
+ test.each(dataset)( 'values : ( $targetQty, $targetAvailable, $maxAvailable, $addedToCart )', ( { targetQty, targetAvailable, maxAvailable, addedToCart, result } ) => {
138
+ expect(utils.calculateSharedCap( targetQty, targetAvailable, maxAvailable, addedToCart )).toBe(result);
139
+ } );
140
+ });
141
  } );
src/resources/js/v2/tickets-block.js CHANGED
@@ -297,7 +297,7 @@ tribe.tickets.block = {
297
 
298
  if ( 'true' === $parent.attr( 'data-has-shared-cap' ) ) {
299
  const $form = $parent.closest( 'form' );
300
- newValue = obj.checkSharedCapacity( $form, newValue );
301
  }
302
 
303
  if ( 0 === newValue ) {
@@ -396,10 +396,11 @@ tribe.tickets.block = {
396
  *
397
  * @param {jQuery} $form jQuery object that is the form we are checking.
398
  * @param {number} qty The quantity we desire.
 
399
  *
400
  * @returns {integer} The quantity, limited by existing shared cap tickets.
401
  */
402
- obj.checkSharedCapacity = function( $form, qty ) {
403
  let sharedCap = [];
404
  let currentLoad = [];
405
  const $sharedTickets = $form
@@ -411,11 +412,12 @@ tribe.tickets.block = {
411
  return qty;
412
  }
413
 
414
- $sharedTickets.each(
415
- function() {
416
- sharedCap.push( parseInt( $( this ).attr( 'data-available-cap' ), 10 ) );
417
- }
418
- );
 
419
 
420
  $sharedCapTickets.each(
421
  function() {
@@ -423,10 +425,6 @@ tribe.tickets.block = {
423
  }
424
  );
425
 
426
- // IE doesn't allow spread operator.
427
- // @todo: check that we're no longer supporting some IE versions.
428
- sharedCap = Math.max.apply( this, sharedCap );
429
-
430
  currentLoad = currentLoad.reduce(
431
  function( a, b ) {
432
  return a + b;
@@ -434,9 +432,20 @@ tribe.tickets.block = {
434
  0
435
  );
436
 
437
- const currentAvailable = sharedCap - currentLoad;
 
 
 
 
 
 
438
 
439
- return Math.min( currentAvailable, qty );
 
 
 
 
 
440
  };
441
 
442
  /**
@@ -637,7 +646,7 @@ tribe.tickets.block = {
637
  }
638
 
639
  if ( 'true' === $ticket.attr( 'data-has-shared-cap' ) ) {
640
- maxQty = obj.checkSharedCapacity( $form, newQuantity );
641
  }
642
 
643
  if ( 0 > maxQty ) {
297
 
298
  if ( 'true' === $parent.attr( 'data-has-shared-cap' ) ) {
299
  const $form = $parent.closest( 'form' );
300
+ newValue = obj.checkSharedCapacity( $form, newValue, $parent );
301
  }
302
 
303
  if ( 0 === newValue ) {
396
  *
397
  * @param {jQuery} $form jQuery object that is the form we are checking.
398
  * @param {number} qty The quantity we desire.
399
+ * @param {obj} target The ticket item that was clicked.
400
  *
401
  * @returns {integer} The quantity, limited by existing shared cap tickets.
402
  */
403
+ obj.checkSharedCapacity = function( $form, qty, $target ) {
404
  let sharedCap = [];
405
  let currentLoad = [];
406
  const $sharedTickets = $form
412
  return qty;
413
  }
414
 
415
+ let active_ticket_limit = $target.attr( 'data-available-count' );
416
+ let totalSharedCap = $target.attr( 'data-shared-cap' );
417
+
418
+ if ( undefined === active_ticket_limit || undefined === totalSharedCap ) {
419
+ return qty;
420
+ }
421
 
422
  $sharedCapTickets.each(
423
  function() {
425
  }
426
  );
427
 
 
 
 
 
428
  currentLoad = currentLoad.reduce(
429
  function( a, b ) {
430
  return a + b;
432
  0
433
  );
434
 
435
+ $sharedTickets.each(
436
+ function() {
437
+ sharedCap.push( parseInt( $( this ).attr( 'data-available-count' ), 10 ) );
438
+ }
439
+ );
440
+
441
+ sharedCap = Math.max.apply( this, sharedCap );
442
 
443
+ return tribe.tickets.utils.calculateSharedCap(
444
+ qty,
445
+ active_ticket_limit,
446
+ sharedCap,
447
+ currentLoad
448
+ );
449
  };
450
 
451
  /**
646
  }
647
 
648
  if ( 'true' === $ticket.attr( 'data-has-shared-cap' ) ) {
649
+ maxQty = obj.checkSharedCapacity( $form, newQuantity, $this );
650
  }
651
 
652
  if ( 0 > maxQty ) {
src/resources/js/v2/tickets-utils.js CHANGED
@@ -247,4 +247,29 @@ tribe.tickets.utils = {};
247
  return parseFloat( priceString );
248
  };
249
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  } )( jQuery, tribe.tickets.utils );
247
  return parseFloat( priceString );
248
  };
249
 
250
+ /**
251
+ *
252
+ * @param targetQty {integer}
253
+ * @param targetAvailable {integer}
254
+ * @param maxAvailable {integer}
255
+ * @param addedToCart {integer}
256
+ * @returns {number|integer}
257
+ */
258
+ obj.calculateSharedCap = function( targetQty, targetAvailable, maxAvailable, addedToCart ) {
259
+
260
+ const maxLimit = maxAvailable - addedToCart;
261
+
262
+ // If target qty is smaller than both max available and target ticket capacity then it's valid.
263
+ if ( targetQty <= targetAvailable && targetQty <= maxLimit ) {
264
+ return targetQty;
265
+ }
266
+
267
+ // If qty is larger than ticket capacity then return ticket availability, given it's less than max available.
268
+ if ( targetQty > targetAvailable ) {
269
+ return targetAvailable <= maxLimit ? targetAvailable : 0;
270
+ }
271
+
272
+ return maxLimit;
273
+ }
274
+
275
  } )( jQuery, tribe.tickets.utils );
src/resources/postcss/tickets-report.pcss CHANGED
@@ -237,7 +237,7 @@
237
  }
238
 
239
  .column-security {
240
- width: 120px;
241
  }
242
 
243
  .column-check_in {
237
  }
238
 
239
  .column-security {
240
+ width: 130px;
241
  }
242
 
243
  .column-check_in {
src/views/v2/tickets/item/inactive.php CHANGED
@@ -60,7 +60,7 @@ $message = $is_sale_past
60
  /* translators: %s: Tickets label */
61
  ? sprintf( __( '%s are no longer available', 'event-tickets' ), tribe_get_ticket_label_plural( 'event-tickets' ) )
62
  /* translators: %s: Tickets label */
63
- : sprintf( __( '%s are not yet available', 'event-tickets' ), tribe_get_ticket_label_plural( 'event-tickets' ) );
64
  ?>
65
  <div <?php tribe_classes( $classes ); ?>>
66
  <div
60
  /* translators: %s: Tickets label */
61
  ? sprintf( __( '%s are no longer available', 'event-tickets' ), tribe_get_ticket_label_plural( 'event-tickets' ) )
62
  /* translators: %s: Tickets label */
63
+ : $provider->get_tickets_unavailable_message( $tickets );
64
  ?>
65
  <div <?php tribe_classes( $classes ); ?>>
66
  <div
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitfe9e70a3c24664320f614afeeec7f17f::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit30ba9895520bddaa0c47342927fb07ef::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitfe9e70a3c24664320f614afeeec7f17f
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInitfe9e70a3c24664320f614afeeec7f17f
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInitfe9e70a3c24664320f614afeeec7f17f', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInitfe9e70a3c24664320f614afeeec7f17f', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInitfe9e70a3c24664320f614afeeec7f17f::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit30ba9895520bddaa0c47342927fb07ef
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit30ba9895520bddaa0c47342927fb07ef', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit30ba9895520bddaa0c47342927fb07ef', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit30ba9895520bddaa0c47342927fb07ef::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInitfe9e70a3c24664320f614afeeec7f17f
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
@@ -207,9 +207,9 @@ class ComposerStaticInitfe9e70a3c24664320f614afeeec7f17f
207
  public static function getInitializer(ClassLoader $loader)
208
  {
209
  return \Closure::bind(function () use ($loader) {
210
- $loader->prefixLengthsPsr4 = ComposerStaticInitfe9e70a3c24664320f614afeeec7f17f::$prefixLengthsPsr4;
211
- $loader->prefixDirsPsr4 = ComposerStaticInitfe9e70a3c24664320f614afeeec7f17f::$prefixDirsPsr4;
212
- $loader->classMap = ComposerStaticInitfe9e70a3c24664320f614afeeec7f17f::$classMap;
213
 
214
  }, null, ClassLoader::class);
215
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit30ba9895520bddaa0c47342927fb07ef
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
207
  public static function getInitializer(ClassLoader $loader)
208
  {
209
  return \Closure::bind(function () use ($loader) {
210
+ $loader->prefixLengthsPsr4 = ComposerStaticInit30ba9895520bddaa0c47342927fb07ef::$prefixLengthsPsr4;
211
+ $loader->prefixDirsPsr4 = ComposerStaticInit30ba9895520bddaa0c47342927fb07ef::$prefixDirsPsr4;
212
+ $loader->classMap = ComposerStaticInit30ba9895520bddaa0c47342927fb07ef::$classMap;
213
 
214
  }, null, ClassLoader::class);
215
  }