Event Tickets - Version 4.10.9

Version Description

Download this release

Release Info

Developer ModernTribe
Plugin Icon 128x128 Event Tickets
Version 4.10.9
Comparing to
See all releases

Code changes from version 4.10.8 to 4.10.9

Files changed (128) hide show
  1. common/src/Tribe/Context.php +40 -0
  2. common/src/Tribe/Context/locations.php +7 -0
  3. common/src/Tribe/Languages/Locations.php +1 -1
  4. common/src/Tribe/Main.php +1 -1
  5. common/src/Tribe/Models/Post_Types/Base.php +201 -0
  6. common/src/Tribe/Models/Post_Types/Nothing.php +44 -0
  7. common/src/Tribe/Repository.php +9 -1
  8. common/src/Tribe/Rewrite.php +16 -4
  9. common/src/Tribe/Support.php +3 -3
  10. common/src/functions/utils.php +40 -0
  11. common/src/resources/css/common.css +109 -1
  12. common/src/resources/css/common.min.css +1 -1
  13. common/src/resources/postcss/base/_buttons.pcss +21 -0
  14. common/src/resources/postcss/base/typography/_body.pcss +20 -0
  15. common/src/resources/postcss/base/typography/_ctas.pcss +6 -1
  16. common/src/resources/postcss/components/buttons/_border.pcss +20 -0
  17. common/src/resources/postcss/components/buttons/_icon.pcss +20 -0
  18. common/src/resources/postcss/components/buttons/_solid.pcss +22 -0
  19. common/src/resources/postcss/utilities/README.md +55 -28
  20. common/src/resources/postcss/utilities/mixins/_typography.pcss +17 -0
  21. common/src/resources/postcss/utilities/variables/_box-shadows.pcss +1 -0
  22. common/src/resources/postcss/utilities/variables/_colors.pcss +3 -0
  23. common/src/resources/postcss/utilities/variables/_grids.pcss +1 -1
  24. common/src/resources/postcss/utilities/variables/_svgs.pcss +21 -0
  25. common/src/resources/postcss/utilities/variables/_z-index.pcss +4 -0
  26. common/vendor/autoload.php +1 -1
  27. common/vendor/autoload_52.php +1 -1
  28. common/vendor/composer/autoload_classmap.php +2 -0
  29. common/vendor/composer/autoload_real.php +4 -4
  30. common/vendor/composer/autoload_real_52.php +3 -3
  31. common/vendor/composer/autoload_static.php +7 -5
  32. common/vendor/composer/installed.json +6 -6
  33. common/vendor/lucatume/di52/src/tad/DI52/Container.php +6 -2
  34. event-tickets.php +4 -1
  35. lang/event-tickets-el.mo +0 -0
  36. lang/event-tickets-ru_RU.mo +0 -0
  37. lang/event-tickets.pot +589 -539
  38. readme.txt +16 -1
  39. src/Tribe/Admin/Move_Ticket_Types.php +23 -11
  40. src/Tribe/Admin/Move_Tickets.php +12 -4
  41. src/Tribe/Admin/Ticket_Settings.php +2 -2
  42. src/Tribe/Admin/Views/Ticketed.php +8 -8
  43. src/Tribe/Assets.php +4 -3
  44. src/Tribe/Attendee_Registration/Main.php +31 -0
  45. src/Tribe/Attendee_Registration/Template.php +5 -2
  46. src/Tribe/Attendees.php +1 -1
  47. src/Tribe/Attendees_Table.php +10 -10
  48. src/Tribe/CSV_Importer/Column_Names.php +10 -10
  49. src/Tribe/CSV_Importer/Rows.php +2 -2
  50. src/Tribe/Commerce/PayPal/Attendance_Totals.php +2 -1
  51. src/Tribe/Commerce/PayPal/Errors.php +7 -6
  52. src/Tribe/Commerce/PayPal/Frontend/Tickets_Form.php +2 -1
  53. src/Tribe/Commerce/PayPal/Main.php +1 -1
  54. src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php +9 -5
  55. src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php +2 -1
  56. src/Tribe/Main.php +57 -52
  57. src/Tribe/Metabox.php +16 -18
  58. src/Tribe/Plugin_Register.php +1 -1
  59. src/Tribe/Promoter/Observer.php +49 -9
  60. src/Tribe/REST/V1/Documentation/Attendee_Definition_Provider.php +1 -1
  61. src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php +19 -19
  62. src/Tribe/REST/V1/Documentation/Checkin_Details_Definition_Provider.php +1 -1
  63. src/Tribe/REST/V1/Documentation/RSVP_Report_Definition_Provider.php +2 -2
  64. src/Tribe/REST/V1/Post_Repository.php +8 -4
  65. src/Tribe/REST/V1/Ticket_Repository.php +3 -3
  66. src/Tribe/RSVP.php +21 -12
  67. src/Tribe/RSVP/Attendance_Totals.php +1 -1
  68. src/Tribe/RSVP/Status/Not_Going.php +2 -2
  69. src/Tribe/Tickets.php +48 -34
  70. src/Tribe/Tickets_View.php +32 -25
  71. src/Tribe/Views/V2/Hooks.php +94 -0
  72. src/Tribe/Views/V2/Models/Tickets.php +294 -0
  73. src/Tribe/Views/V2/Service_Provider.php +47 -0
  74. src/admin-views/editor/column-body-price.php +1 -1
  75. src/admin-views/editor/fieldset/advanced.php +5 -5
  76. src/admin-views/editor/fieldset/price.php +7 -7
  77. src/admin-views/editor/list-row.php +6 -2
  78. src/admin-views/editor/list-table.php +2 -2
  79. src/admin-views/editor/panel/list.php +4 -4
  80. src/admin-views/editor/panel/settings.php +4 -3
  81. src/admin-views/editor/panel/ticket.php +14 -10
  82. src/admin-views/meta-box.php +9 -9
  83. src/admin-views/privacy.php +32 -9
  84. src/admin-views/ticket-type-history.php +1 -1
  85. src/admin-views/tribe-options-tickets.php +119 -113
  86. src/functions/views/provider.php +34 -0
  87. src/modules/blocks/rsvp/action-dashboard/template.js +2 -1
  88. src/modules/blocks/tickets/action-dashboard/template.js +3 -3
  89. src/resources/js/app/blocks.js +5 -4
  90. src/resources/js/app/blocks.min.js +1 -1
  91. src/resources/js/tpp.js +24 -3
  92. src/resources/js/tpp.min.js +1 -1
  93. src/template-tags/tickets.php +604 -373
  94. src/views/blocks/attendees/view-link.php +18 -12
  95. src/views/blocks/rsvp/content-inactive.php +5 -2
  96. src/views/blocks/rsvp/form/error.php +3 -2
  97. src/views/blocks/rsvp/form/quantity.php +4 -2
  98. src/views/blocks/rsvp/form/submit-button.php +4 -3
  99. src/views/blocks/rsvp/icon.php +3 -2
  100. src/views/blocks/rsvp/messages/success.php +3 -2
  101. src/views/blocks/rsvp/status/full.php +3 -2
  102. src/views/blocks/tickets/registration/summary/title.php +3 -2
  103. src/views/registration/content.php +24 -3
  104. src/views/tickets/email.php +10 -2
  105. src/views/tickets/orders-pp-tickets.php +8 -2
  106. src/views/tickets/orders-rsvp.php +5 -2
  107. src/views/tickets/orders.php +3 -2
  108. src/views/tickets/rsvp.php +11 -6
  109. src/views/tickets/tpp-success.php +10 -6
  110. src/views/tickets/tpp.php +11 -7
  111. src/views/tickets/view-link.php +21 -14
  112. src/views/v2/day/event/cost.php +42 -0
  113. src/views/v2/list/event/cost.php +42 -0
  114. src/views/v2/map/event-cards/event-card/event/actions/cost.php +29 -0
  115. src/views/v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/cost.php +35 -0
  116. src/views/v2/month/mobile-events/mobile-day/mobile-event/cost.php +45 -0
  117. src/views/v2/photo/event/cost.php +40 -0
  118. src/views/v2/week/grid-body/events-day/event/tooltip/cost.php +36 -0
  119. src/views/v2/week/mobile-events/day/event/cost.php +41 -0
  120. vendor/autoload.php +7 -0
  121. vendor/composer/ClassLoader.php +445 -0
  122. vendor/composer/LICENSE +21 -0
  123. vendor/composer/autoload_classmap.php +13 -0
  124. vendor/composer/autoload_namespaces.php +9 -0
  125. vendor/composer/autoload_psr4.php +13 -0
  126. vendor/composer/autoload_real.php +52 -0
  127. vendor/composer/autoload_static.php +54 -0
  128. vendor/composer/installed.json +1 -0
common/src/Tribe/Context.php CHANGED
@@ -129,6 +129,13 @@ class Tribe__Context {
129
  */
130
  const WP_MATCHED_QUERY = 'wp_matched_query';
131
 
 
 
 
 
 
 
 
132
  /*
133
  *
134
  * An array defining the properties the context will be able to read and (dangerously) write.
@@ -155,6 +162,7 @@ class Tribe__Context {
155
  * method - get the value calling a method on a tribe() container binding.
156
  * func - get the value from a function or a closure.
157
  * filter - get the value by applying a filter.
 
158
  *
159
  * For each location additional arguments can be specified:
160
  * orm_arg - if `false` then the location will never produce an ORM argument, if provided the ORM arg produced bye the
@@ -1450,4 +1458,36 @@ class Tribe__Context {
1450
 
1451
  return $filled;
1452
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1453
  }
129
  */
130
  const WP_MATCHED_QUERY = 'wp_matched_query';
131
 
132
+ /**
133
+ * The key to indicate a location should be read by applying a callback to the value of another context location.
134
+ *
135
+ * @since 4.9.18
136
+ */
137
+ const LOCATION_FUNC = 'location_func';
138
+
139
  /*
140
  *
141
  * An array defining the properties the context will be able to read and (dangerously) write.
162
  * method - get the value calling a method on a tribe() container binding.
163
  * func - get the value from a function or a closure.
164
  * filter - get the value by applying a filter.
165
+ * location_func - get the value by applying a callback to the value of a location.
166
  *
167
  * For each location additional arguments can be specified:
168
  * orm_arg - if `false` then the location will never produce an ORM argument, if provided the ORM arg produced bye the
1458
 
1459
  return $filled;
1460
  }
1461
+
1462
+ /**
1463
+ * Convenience method to get and check if a location has a truthy value or not.
1464
+ *
1465
+ * @since 4.9.18
1466
+ *
1467
+ * @param string $flag_key The location to check.
1468
+ * @param bool $default The default value to return if the location is not set.
1469
+ *
1470
+ * @return bool Whether the location has a truthy value or not.
1471
+ */
1472
+ public function is( $flag_key, $default = false ) {
1473
+ $val = $this->get( $flag_key, $default );
1474
+
1475
+ return ! empty( $val ) || tribe_is_truthy( $val );
1476
+ }
1477
+
1478
+ /**
1479
+ * Reads the value from one callback, passing it the value of another Context location.
1480
+ *
1481
+ * @since 4.9.18
1482
+ *
1483
+ * @param array $location_and_callback An array of two elements: the location key and the callback to call on the
1484
+ * location value. The callback will receive the location value as argument.
1485
+ *
1486
+ * @return mixed The return value of the callback, called on the location value.
1487
+ */
1488
+ public function location_func( array $location_and_callback ) {
1489
+ list( $location, $callback ) = $location_and_callback;
1490
+
1491
+ return $callback( $this->get( $location ) );
1492
+ }
1493
  }
common/src/Tribe/Context/locations.php CHANGED
@@ -67,4 +67,11 @@ return [
67
  Tribe__Context::QUERY_VAR => [ 'name', 'post_name' ],
68
  ],
69
  ],
 
 
 
 
 
 
 
70
  ];
67
  Tribe__Context::QUERY_VAR => [ 'name', 'post_name' ],
68
  ],
69
  ],
70
+ 'post_type' => [
71
+ 'read' => [
72
+ Tribe__Context::QUERY_PROP => 'post_type',
73
+ Tribe__Context::QUERY_VAR => 'post_type',
74
+ Tribe__Context::REQUEST_VAR => 'post_type',
75
+ ],
76
+ ],
77
  ];
common/src/Tribe/Languages/Locations.php CHANGED
@@ -182,7 +182,6 @@ class Tribe__Languages__Locations {
182
  'LT' => esc_html__( 'Lithuania', 'tribe-common' ),
183
  'LU' => esc_html__( 'Luxembourg', 'tribe-common' ),
184
  'MO' => esc_html__( 'Macau', 'tribe-common' ),
185
- 'MK' => esc_html__( 'Macedonia', 'tribe-common' ),
186
  'MG' => esc_html__( 'Madagascar', 'tribe-common' ),
187
  'MW' => esc_html__( 'Malawi', 'tribe-common' ),
188
  'MY' => esc_html__( 'Malaysia', 'tribe-common' ),
@@ -215,6 +214,7 @@ class Tribe__Languages__Locations {
215
  'NG' => esc_html__( 'Nigeria', 'tribe-common' ),
216
  'NU' => esc_html__( 'Niue', 'tribe-common' ),
217
  'NF' => esc_html__( 'Norfolk Island', 'tribe-common' ),
 
218
  'MP' => esc_html__( 'Northern Mariana Islands', 'tribe-common' ),
219
  'NO' => esc_html__( 'Norway', 'tribe-common' ),
220
  'OM' => esc_html__( 'Oman', 'tribe-common' ),
182
  'LT' => esc_html__( 'Lithuania', 'tribe-common' ),
183
  'LU' => esc_html__( 'Luxembourg', 'tribe-common' ),
184
  'MO' => esc_html__( 'Macau', 'tribe-common' ),
 
185
  'MG' => esc_html__( 'Madagascar', 'tribe-common' ),
186
  'MW' => esc_html__( 'Malawi', 'tribe-common' ),
187
  'MY' => esc_html__( 'Malaysia', 'tribe-common' ),
214
  'NG' => esc_html__( 'Nigeria', 'tribe-common' ),
215
  'NU' => esc_html__( 'Niue', 'tribe-common' ),
216
  'NF' => esc_html__( 'Norfolk Island', 'tribe-common' ),
217
+ 'MK' => esc_html__( 'North Macedonia', 'tribe-common' ),
218
  'MP' => esc_html__( 'Northern Mariana Islands', 'tribe-common' ),
219
  'NO' => esc_html__( 'Norway', 'tribe-common' ),
220
  'OM' => esc_html__( 'Oman', 'tribe-common' ),
common/src/Tribe/Main.php CHANGED
@@ -17,7 +17,7 @@ class Tribe__Main {
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
- const VERSION = '4.9.17';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
+ const VERSION = '4.9.18';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
common/src/Tribe/Models/Post_Types/Base.php ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The base, abstract, class modeling a post.
4
+ *
5
+ * @since 4.9.18
6
+ *
7
+ * @package Tribe\Models\Post_Types
8
+ */
9
+
10
+
11
+ namespace Tribe\Models\Post_Types;
12
+
13
+ use Tribe__Cache as Cache;
14
+ use Tribe__Cache_Listener as Cache_Listener;
15
+
16
+ /**
17
+ * Class Base
18
+ *
19
+ * @since 4.9.18
20
+ *
21
+ * @package Tribe\Models\Post_Types
22
+ */
23
+ abstract class Base {
24
+ /**
25
+ * The post object base for this post type instance.
26
+ *
27
+ * @since 4.9.18
28
+ *
29
+ * @var \WP_Post
30
+ */
31
+ protected $post;
32
+
33
+ /**
34
+ * Builds, and returns, a post type model from a given post.
35
+ *
36
+ * @since 4.9.18
37
+ *
38
+ * @param \WP_Post|int $post The post ID or post object.
39
+ *
40
+ * @return Base|Nothing Either the built Post Type model, or a Nothing model if the post does not exist.
41
+ */
42
+ public static function from_post( $post ) {
43
+ $post = get_post( $post );
44
+
45
+ if ( ! $post instanceof \WP_Post ) {
46
+ return new Nothing();
47
+ }
48
+
49
+ $instance = new static;
50
+ $instance->post = $post;
51
+
52
+ return $instance;
53
+ }
54
+
55
+ /**
56
+ * Returns the slug that will be prefixed to the cache key for the model.
57
+ *
58
+ * @since 4.9.18
59
+ *
60
+ * @return string The slug that will be prefixed to the cache key for the model.
61
+ */
62
+ abstract protected function get_cache_slug();
63
+
64
+ /**
65
+ * Returns the cached model properties for the specified filter, if any.
66
+ *
67
+ * @since 4.9.18
68
+ *
69
+ * @param string $filter Type of filter to apply, used here as the stored post values might change.
70
+ *
71
+ * @return array|false An array of model properties, or `false` if not found.
72
+ */
73
+ protected function get_cached_properties( $filter ) {
74
+ $cache_slug = $this->get_cache_slug();
75
+
76
+ if ( empty( $cache_slug ) ) {
77
+ return false;
78
+ }
79
+
80
+ // Cache by post ID and filter.
81
+ $cache_key = $cache_slug . '_' . $this->post->ID . '_' . $filter;
82
+
83
+ return ( new Cache() )->get( $cache_key, Cache_Listener::TRIGGER_SAVE_POST );
84
+ }
85
+
86
+ /**
87
+ * Builds and returns the properties for the model.
88
+ *
89
+ * In this method child classes should also implement any caching trigger mechanism, if any.
90
+ *
91
+ * @since 4.9.18
92
+ *
93
+ * @param string $filter The type of filter to build the properties for.
94
+ *
95
+ * @return array An array of built properties.
96
+ */
97
+ abstract protected function build_properties( $filter );
98
+
99
+ /**
100
+ * Returns an array of the model properties.
101
+ *
102
+ * @since 4.9.18
103
+ *
104
+ * @param string $filter The type of filter to get the properties for.
105
+ *
106
+ * @return array The model properties. This value might be cached.
107
+ */
108
+ protected function get_properties( $filter ) {
109
+ $cached = $this->get_cached_properties( $filter);
110
+
111
+ if ( false !== $cached ) {
112
+ return $cached;
113
+ }
114
+
115
+ $props = $this->build_properties( $filter );
116
+
117
+ $cache_slug = $this->get_cache_slug();
118
+
119
+ /**
120
+ * Filters the array of properties that will be used to decorate the post object handled by the class.
121
+ *
122
+ * @since 4.9.18
123
+ *
124
+ * @param array $props An associative array of all the properties that will be set on the "decorated" post
125
+ * object.
126
+ * @param \WP_Post $post The post object handled by the class.
127
+ */
128
+ $props = apply_filters( "tribe_post_type_{$cache_slug}_properties", $props, $this->post );
129
+
130
+ return $props;
131
+ }
132
+
133
+ /**
134
+ * Returns the WP_Post version of this model.
135
+ *
136
+ * @since 4.9.18
137
+ *
138
+ * @param string $output The required return type. One of OBJECT, ARRAY_A, or ARRAY_N, which correspond to a WP_Post
139
+ * object,an associative array, or a numeric array, respectively.
140
+ * @param string $filter Type of filter to apply. Accepts 'raw', 'edit', 'db', or 'display' and other formats
141
+ * supported by the specific type implementation.
142
+ *
143
+ * @return \WP_Post|array|null The post object version of this post type model or `null` if the post is not valid.
144
+ */
145
+ public function to_post( $output = OBJECT, $filter = 'raw' ) {
146
+ $properties = $this->get_properties( $filter );
147
+
148
+ // Clone the post to avoid side effects.
149
+ $post = clone $this->post;
150
+
151
+ // And decorate the clone with the properties.
152
+ foreach ( $properties as $key => $value ) {
153
+ $post->{$key} = $value;
154
+ }
155
+
156
+ switch ( $output ) {
157
+ case ARRAY_A:
158
+ return (array) $post;
159
+ case ARRAY_N:
160
+ return array_values( (array) $post );
161
+ case OBJECT:
162
+ default;
163
+ return $post;
164
+ }
165
+ }
166
+
167
+ /**
168
+ * Returns the closure that should be used to cache the post type model when, and if, caching it is required.
169
+ *
170
+ * @since 4.9.18
171
+ *
172
+ * @param string $filter The kind of filter applied to the model.
173
+ *
174
+ * @return callable The closure, or callable, that should be used to cache this model when, and if, required.
175
+ */
176
+ protected function get_caching_callback( $filter ) {
177
+ $cache_slug = $this->get_cache_slug();
178
+
179
+ if ( empty( $cache_slug ) ) {
180
+ return '__return_true';
181
+ }
182
+
183
+ // Cache by post ID and filter.
184
+ $cache_key = $cache_slug . '_' . $this->post->ID . '_' . $filter;
185
+ $cache = new Cache();
186
+
187
+ // Define a function to cache this event when, and if, one of the lazy properties is loaded.
188
+ $callback = function () use ( $cache, $cache_key, $filter )
189
+ {
190
+ $properties = $this->get_properties( $filter );
191
+
192
+ /*
193
+ * Cache without expiration, but only until a post of the types managed by The Events Calendar is
194
+ * updated or created.
195
+ */
196
+ $cache->set( $cache_key, $properties, 0, Cache_Listener::TRIGGER_SAVE_POST );
197
+ };
198
+
199
+ return $callback;
200
+ }
201
+ }
common/src/Tribe/Models/Post_Types/Nothing.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Models a non existing post.
4
+ *
5
+ * The reason for this class existence is to allow method chaining to happen without errors and to return a consistent
6
+ * model type from methods.
7
+ *
8
+ * @since 4.9.18
9
+ *
10
+ * @package Tribe\Models\Post_Types
11
+ */
12
+
13
+ namespace Tribe\Models\Post_Types;
14
+
15
+ /**
16
+ * Class Nothing
17
+ *
18
+ * @since 4.9.18
19
+ *
20
+ * @package Tribe\Models\Post_Types
21
+ */
22
+ class Nothing extends Base {
23
+
24
+ /**
25
+ * {@inheritDoc}
26
+ */
27
+ protected function get_cache_slug() {
28
+ return '';
29
+ }
30
+
31
+ /**
32
+ * {@inheritDoc}
33
+ */
34
+ protected function build_properties( $filter ) {
35
+ return [];
36
+ }
37
+
38
+ /**
39
+ * {@inheritDoc}
40
+ */
41
+ public function to_post( $output = OBJECT, $filter = 'raw' ) {
42
+ return null;
43
+ }
44
+ }
common/src/Tribe/Repository.php CHANGED
@@ -833,6 +833,10 @@ abstract class Tribe__Repository
833
  if ( ! empty( $query->request ) ) {
834
  $ids = $this->get_ids();
835
 
 
 
 
 
836
  return $return_id ? reset( $ids ) : $this->format_item( reset( $ids ) );
837
  }
838
 
@@ -893,6 +897,10 @@ abstract class Tribe__Repository
893
  if ( ! empty( $query->request ) ) {
894
  $ids = $this->get_ids();
895
 
 
 
 
 
896
  return $return_id ? end( $ids ) : $this->format_item( end( $ids ) );
897
  }
898
 
@@ -2783,7 +2791,7 @@ abstract class Tribe__Repository
2783
 
2784
  $created = call_user_func( $this->get_create_callback( $postarr ), $postarr );
2785
 
2786
- $post = get_post( $created );
2787
 
2788
  return $post instanceof WP_Post && $post->ID === $created ? $post : false;
2789
  }
833
  if ( ! empty( $query->request ) ) {
834
  $ids = $this->get_ids();
835
 
836
+ if ( empty( $ids ) ) {
837
+ return null;
838
+ }
839
+
840
  return $return_id ? reset( $ids ) : $this->format_item( reset( $ids ) );
841
  }
842
 
897
  if ( ! empty( $query->request ) ) {
898
  $ids = $this->get_ids();
899
 
900
+ if ( empty( $ids ) ) {
901
+ return null;
902
+ }
903
+
904
  return $return_id ? end( $ids ) : $this->format_item( end( $ids ) );
905
  }
906
 
2791
 
2792
  $created = call_user_func( $this->get_create_callback( $postarr ), $postarr );
2793
 
2794
+ $post = $this->format_item( $created );
2795
 
2796
  return $post instanceof WP_Post && $post->ID === $created ? $post : false;
2797
  }
common/src/Tribe/Rewrite.php CHANGED
@@ -558,13 +558,25 @@ class Tribe__Rewrite {
558
  // While this is specific to The Events Calendar we're handling a small enough post type base to keep it here.
559
  $pattern = '/post_type=tribe_(events|venue|organizer)/';
560
  // Reverse the rules to try and match the most complex first.
561
- $rules = isset( $this->rewrite->rules ) ? (array) $this->rewrite->rules : [];
562
- $handled_rewrite_rules = array_filter( $rules,
563
  static function ( $rule_query_string ) use ( $pattern ) {
564
  return preg_match( $pattern, $rule_query_string );
565
- } );
 
 
 
 
 
 
 
 
 
 
 
 
566
 
567
- return $handled_rewrite_rules;
568
  }
569
 
570
  /**
558
  // While this is specific to The Events Calendar we're handling a small enough post type base to keep it here.
559
  $pattern = '/post_type=tribe_(events|venue|organizer)/';
560
  // Reverse the rules to try and match the most complex first.
561
+ $rules = isset( $this->rewrite->rules ) ? (array) $this->rewrite->rules : [];
562
+ $our_rules = array_filter( $rules,
563
  static function ( $rule_query_string ) use ( $pattern ) {
564
  return preg_match( $pattern, $rule_query_string );
565
+ }
566
+ );
567
+
568
+ /**
569
+ * Filters the list of rewrite rules handled by our code to add or remove some as required.
570
+ *
571
+ * @since 4.9.18
572
+ *
573
+ * @param array $our_rules An array of rewrite rules handled by our code, in the shape
574
+ * `[ <rewrite_rule_regex_pattern> => <query_string> ]`.
575
+ * E.g. `[ '(?:events)/(?:list)/?$' => 'index.php?post_type=tribe_events&eventDisplay=list' ]`.
576
+ */
577
+ $our_rules = apply_filters( 'tribe_rewrite_handled_rewrite_rules', $our_rules );
578
 
579
+ return $our_rules;
580
  }
581
 
582
  /**
common/src/Tribe/Support.php CHANGED
@@ -87,7 +87,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
87
  $plugin .= sprintf( ' by %s', $plugin_details['Author'] );
88
  }
89
  if ( ! empty( $plugin_details['AuthorURI'] ) ) {
90
- $plugin .= sprintf( '(%s)', $plugin_details['AuthorURI'] );
91
  }
92
  $plugins[] = $plugin;
93
  }
@@ -106,7 +106,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
106
  $plugin .= sprintf( ' by %s', $plugin_details['Author'] );
107
  }
108
  if ( ! empty( $plugin_details['AuthorURI'] ) ) {
109
- $plugin .= sprintf( '(%s)', $plugin_details['AuthorURI'] );
110
  }
111
  $network_plugins[] = $plugin;
112
  }
@@ -124,7 +124,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
124
  $plugin .= sprintf( ' by %s', $v['Author'] );
125
  }
126
  if ( ! empty( $v['AuthorURI'] ) ) {
127
- $plugin .= sprintf( '(%s)', $v['AuthorURI'] );
128
  }
129
  $mu_plugins[] = $plugin;
130
  }
87
  $plugin .= sprintf( ' by %s', $plugin_details['Author'] );
88
  }
89
  if ( ! empty( $plugin_details['AuthorURI'] ) ) {
90
+ $plugin .= sprintf( ' (%s)', $plugin_details['AuthorURI'] );
91
  }
92
  $plugins[] = $plugin;
93
  }
106
  $plugin .= sprintf( ' by %s', $plugin_details['Author'] );
107
  }
108
  if ( ! empty( $plugin_details['AuthorURI'] ) ) {
109
+ $plugin .= sprintf( ' (%s)', $plugin_details['AuthorURI'] );
110
  }
111
  $network_plugins[] = $plugin;
112
  }
124
  $plugin .= sprintf( ' by %s', $v['Author'] );
125
  }
126
  if ( ! empty( $v['AuthorURI'] ) ) {
127
+ $plugin .= sprintf( ' (%s)', $v['AuthorURI'] );
128
  }
129
  $mu_plugins[] = $plugin;
130
  }
common/src/functions/utils.php CHANGED
@@ -636,4 +636,44 @@ if ( ! function_exists( 'tribe_register_rest_route' ) ) {
636
  $args = apply_filters( 'tribe_register_rest_route_args', $args, $namespace, $route, $override );
637
  return register_rest_route( $namespace, $route, $args, $override );
638
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
639
  }
636
  $args = apply_filters( 'tribe_register_rest_route_args', $args, $namespace, $route, $override );
637
  return register_rest_route( $namespace, $route, $args, $override );
638
  }
639
+ }
640
+
641
+ if ( ! function_exists( 'tribe_get_request_vars' ) ) {
642
+ /**
643
+ * Returns the sanitized version of the `$_REQUEST` super-global array.
644
+ *
645
+ * Note: the return value is cached. It will be resolve the first time the function is called, per HTTP request,
646
+ * then the same return value will be returned. After the function has been called the first time, changes to the
647
+ * `$_REQUEST` super-global will NOT be reflected in the function return value.
648
+ * Call the function with `$refresh` set to `true` to refresh the function value.
649
+ *
650
+ * @since 4.9.18
651
+ *
652
+ * @param bool $refresh Whether to parse the `$_REQUEST` cache again and refresh the cache or not; defaults to
653
+ * `false`.
654
+ *
655
+ * @return array The sanitized version of the `$_REQUEST` super-global.
656
+ */
657
+ function tribe_get_request_vars( $refresh = false ) {
658
+ static $cache;
659
+
660
+ if ( ! isset( $_REQUEST ) ) {
661
+ return [];
662
+ }
663
+
664
+ if ( null !== $cache && ! $refresh ) {
665
+ return $cache;
666
+ }
667
+
668
+ $cache = array_combine(
669
+ array_keys( $_REQUEST ),
670
+ array_map( static function ( $v )
671
+ {
672
+ return filter_var( $v, FILTER_SANITIZE_STRING );
673
+ },
674
+ $_REQUEST )
675
+ );
676
+
677
+ return $cache;
678
+ }
679
  }
common/src/resources/css/common.css CHANGED
@@ -423,6 +423,10 @@
423
  * Anchor - Thin
424
  * ----------------------------------------------------------------------------- */
425
 
 
 
 
 
426
  /* -----------------------------------------------------------------------------
427
  * Button - Global
428
  * ----------------------------------------------------------------------------- */
@@ -1299,6 +1303,14 @@
1299
  * Body 1 for --viewport-medium
1300
  * ------------------------------------------------------------------------- */
1301
 
 
 
 
 
 
 
 
 
1302
  .tribe-common {
1303
 
1304
  /* -------------------------------------------------------------------------
@@ -1348,12 +1360,27 @@
1348
  color: #334AFF;
1349
  }
1350
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1351
  /* -------------------------------------------------------------------------
1352
  * Theme Overrides - Twenty Seventeen
1353
  * ------------------------------------------------------------------------- */
1354
 
1355
  .tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:hover,
1356
- .tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:focus {
 
 
1357
  color: #334AFF;
1358
  }
1359
 
@@ -1649,6 +1676,15 @@
1649
  padding: 0;
1650
  }
1651
 
 
 
 
 
 
 
 
 
 
1652
  /* -------------------------------------------------------------------------
1653
  * Button
1654
  * ------------------------------------------------------------------------- */
@@ -1664,6 +1700,15 @@
1664
  background-color: transparent;
1665
  }
1666
 
 
 
 
 
 
 
 
 
 
1667
  /* -----------------------------------------------------------------------------
1668
  *
1669
  * Layout: Global Content Container
@@ -1816,6 +1861,15 @@
1816
 
1817
  /* Buttons */
1818
 
 
 
 
 
 
 
 
 
 
1819
  /* -----------------------------------------------------------------------------
1820
  *
1821
  * Button: Border
@@ -1875,6 +1929,23 @@
1875
  color: #D5D5D5
1876
  }
1877
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1878
  /* -----------------------------------------------------------------------------
1879
  *
1880
  * Button: Icon
@@ -2004,6 +2075,23 @@
2004
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23D5D5D5'/%3E%3C/svg%3E");
2005
  }
2006
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2007
  /* -----------------------------------------------------------------------------
2008
  *
2009
  * Button: Solid
@@ -2054,6 +2142,16 @@
2054
  background-color: rgba(51,74,255, 0.07);
2055
  }
2056
 
 
 
 
 
 
 
 
 
 
 
2057
  /* -----------------------------------------------------------------------------
2058
  *
2059
  * Component: Image
@@ -2146,6 +2244,16 @@
2146
  line-height: 1.62
2147
  }
2148
 
 
 
 
 
 
 
 
 
 
 
2149
  .tribe-common .tribe-common-h1 {
2150
  font-size: 42px;
2151
  line-height: 1.38
423
  * Anchor - Thin
424
  * ----------------------------------------------------------------------------- */
425
 
426
+ /* -----------------------------------------------------------------------------
427
+ * Anchor - Thin
428
+ * ----------------------------------------------------------------------------- */
429
+
430
  /* -----------------------------------------------------------------------------
431
  * Button - Global
432
  * ----------------------------------------------------------------------------- */
1303
  * Body 1 for --viewport-medium
1304
  * ------------------------------------------------------------------------- */
1305
 
1306
+ /* -------------------------------------------------------------------------
1307
+ * Body 2 for --viewport-medium
1308
+ * ------------------------------------------------------------------------- */
1309
+
1310
+ /* -------------------------------------------------------------------------
1311
+ * Body 3 for --viewport-medium
1312
+ * ------------------------------------------------------------------------- */
1313
+
1314
  .tribe-common {
1315
 
1316
  /* -------------------------------------------------------------------------
1360
  color: #334AFF;
1361
  }
1362
 
1363
+ .tribe-common .tribe-common-cta--thin-alt {
1364
+ border-bottom: 1px solid #334AFF;
1365
+ color: #141827;
1366
+ transition: color 0.2s ease;
1367
+ }
1368
+
1369
+ .tribe-common .tribe-common-cta--thin-alt:active,
1370
+ .tribe-common .tribe-common-cta--thin-alt:focus,
1371
+ .tribe-common .tribe-common-cta--thin-alt:hover {
1372
+ border-bottom: 1px solid #334AFF;
1373
+ color: #334AFF;
1374
+ }
1375
+
1376
  /* -------------------------------------------------------------------------
1377
  * Theme Overrides - Twenty Seventeen
1378
  * ------------------------------------------------------------------------- */
1379
 
1380
  .tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:hover,
1381
+ .tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:focus,
1382
+ .tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:hover,
1383
+ .tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:focus {
1384
  color: #334AFF;
1385
  }
1386
 
1676
  padding: 0;
1677
  }
1678
 
1679
+ .tribe-common {
1680
+
1681
+ /* -------------------------------------------------------------------------
1682
+ *
1683
+ * Button: Theme Overrides
1684
+ *
1685
+ * ------------------------------------------------------------------------- */
1686
+ }
1687
+
1688
  /* -------------------------------------------------------------------------
1689
  * Button
1690
  * ------------------------------------------------------------------------- */
1700
  background-color: transparent;
1701
  }
1702
 
1703
+ /* -------------------------------------------------------------------------
1704
+ * Theme Overrides - Twenty Seventeen
1705
+ * ------------------------------------------------------------------------- */
1706
+
1707
+ .tribe-theme-twentyseventeen .tribe-common button:hover,
1708
+ .tribe-theme-twentyseventeen .tribe-common button:focus {
1709
+ background-color: transparent;
1710
+ }
1711
+
1712
  /* -----------------------------------------------------------------------------
1713
  *
1714
  * Layout: Global Content Container
1861
 
1862
  /* Buttons */
1863
 
1864
+ .tribe-common {
1865
+
1866
+ /* -------------------------------------------------------------------------
1867
+ *
1868
+ * Button: Border - Theme Overrides
1869
+ *
1870
+ * ------------------------------------------------------------------------- */
1871
+ }
1872
+
1873
  /* -----------------------------------------------------------------------------
1874
  *
1875
  * Button: Border
1929
  color: #D5D5D5
1930
  }
1931
 
1932
+ /* -------------------------------------------------------------------------
1933
+ * Theme Overrides - Twenty Seventeen
1934
+ * ------------------------------------------------------------------------- */
1935
+
1936
+ .tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border:hover {
1937
+ background-color: #FFFFFF;
1938
+ }
1939
+
1940
+ .tribe-common {
1941
+
1942
+ /* -------------------------------------------------------------------------
1943
+ *
1944
+ * Button: Icon Border - Theme Overrides
1945
+ *
1946
+ * ------------------------------------------------------------------------- */
1947
+ }
1948
+
1949
  /* -----------------------------------------------------------------------------
1950
  *
1951
  * Button: Icon
2075
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23D5D5D5'/%3E%3C/svg%3E");
2076
  }
2077
 
2078
+ /* -------------------------------------------------------------------------
2079
+ * Theme Overrides - Twenty Seventeen
2080
+ * ------------------------------------------------------------------------- */
2081
+
2082
+ .tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-icon--border:hover {
2083
+ background-color: #FFFFFF;
2084
+ }
2085
+
2086
+ .tribe-common {
2087
+
2088
+ /* -------------------------------------------------------------------------
2089
+ *
2090
+ * Button: Solid - Theme Overrides
2091
+ *
2092
+ * ------------------------------------------------------------------------- */
2093
+ }
2094
+
2095
  /* -----------------------------------------------------------------------------
2096
  *
2097
  * Button: Solid
2142
  background-color: rgba(51,74,255, 0.07);
2143
  }
2144
 
2145
+ /* -------------------------------------------------------------------------
2146
+ * Theme Overrides - Twenty Seventeen
2147
+ * ------------------------------------------------------------------------- */
2148
+
2149
+ .tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:hover,
2150
+ .tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:focus {
2151
+ background-color: rgba(51,74,255, 0.8);
2152
+ color: #FFFFFF;
2153
+ }
2154
+
2155
  /* -----------------------------------------------------------------------------
2156
  *
2157
  * Component: Image
2244
  line-height: 1.62
2245
  }
2246
 
2247
+ .tribe-common .tribe-common-b2--min-medium {
2248
+ font-size: 14px;
2249
+ line-height: 1.62
2250
+ }
2251
+
2252
+ .tribe-common .tribe-common-b3--min-medium {
2253
+ font-size: 12px;
2254
+ line-height: 1.38
2255
+ }
2256
+
2257
  .tribe-common .tribe-common-h1 {
2258
  font-size: 42px;
2259
  line-height: 1.38
common/src/resources/css/common.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-common figure{line-height:0}.tribe-common figcaption{line-height:normal}.tribe-common a{background-color:transparent;-webkit-text-decoration-skip:objects}.tribe-common abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.tribe-common code,.tribe-common kbd,.tribe-common pre,.tribe-common samp{font-family:monospace;font-size:1em}.tribe-common b,.tribe-common strong{font-weight:inherit;font-weight:bolder}.tribe-common dfn{font-style:italic}.tribe-common mark{background-color:#ff0;color:#000}.tribe-common small{font-size:80%}.tribe-common sub,.tribe-common sup{font-size:75%;line-height:0}.tribe-common hr{border:0;height:0}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=email],.tribe-common input[type=password],.tribe-common input[type=reset],.tribe-common input[type=search],.tribe-common input[type=submit],.tribe-common input[type=text],.tribe-common input[type=url],.tribe-common textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}.tribe-common button,.tribe-common input,.tribe-common optgroup,.tribe-common select,.tribe-common textarea{color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:antialiased}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{outline:0;border-radius:0}.tribe-common select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.tribe-common optgroup{font-weight:700}.tribe-common ol,.tribe-common ul{list-style:none}.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common p{font-weight:400;text-rendering:optimizeLegibility}.tribe-common .tribe-common-form-control-checkbox,.tribe-common .tribe-common-form-control-radio{line-height:0}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;color:#727272;cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border:1px solid #141827;cursor:pointer;display:inline-block;height:20px;margin:0;position:relative;vertical-align:middle;width:20px}.tribe-common .tribe-common-form-control-checkbox__input:active,.tribe-common .tribe-common-form-control-checkbox__input:focus,.tribe-common .tribe-common-form-control-checkbox__input:hover,.tribe-common .tribe-common-form-control-radio__input:active,.tribe-common .tribe-common-form-control-radio__input:focus,.tribe-common .tribe-common-form-control-radio__input:hover{border:1px solid #141827}.tribe-common .tribe-common-form-control-checkbox__input:checked,.tribe-common .tribe-common-form-control-radio__input:checked{background-color:#141827}.tribe-common .tribe-common-form-control-checkbox__input:checked:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='9' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.6.1L3.9 6.8 1.4 4.3c-.1-.1-.3-.1-.4 0l-.8.8c-.1.1-.1.3 0 .4l3.4 3.4c.2.1.4.1.5 0l7.7-7.7c.1-.1.1-.3 0-.4L11 .1c-.1-.1-.3-.1-.4 0z' fill='%23FFF'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;height:9px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:12px}.tribe-common .tribe-common-form-control-radio__input{border-radius:50%}.tribe-common .tribe-common-form-control-radio__input:checked:before{background-color:#fff;border-radius:50%;content:"";display:block;height:8px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:8px}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__input{display:inline-block}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-radio__label{font-weight:400;font-size:14px}.tribe-common .tribe-common-form-control-checkbox-radio-group>*{margin-bottom:15px}.tribe-common .tribe-common-form-control-checkbox-radio-group>:last-child{margin-bottom:0}.tribe-common .tribe-common-form-control-slider{line-height:0}.tribe-common .tribe-common-form-control-slider__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;cursor:pointer;display:inline-block;margin:0;padding:0;width:120px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-runnable-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-moz-range-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-ms-track{background-color:transparent;border-color:transparent;border-width:5px 0;color:transparent;height:10px}.tribe-common .tribe-common-form-control-slider__input::-ms-fill-lower,.tribe-common .tribe-common-form-control-slider__input::-ms-fill-upper{background-color:#334aff;border-radius:10px}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;-webkit-appearance:none;appearance:none}.tribe-common .tribe-common-form-control-slider__input::-moz-range-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px}.tribe-common .tribe-common-form-control-slider__input::-ms-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;box-shadow:none;margin-top:-1px}.tribe-common .tribe-common-form-control-slider__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#727272;cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider--vertical .tribe-common-form-control-slider__label{display:block;margin:0 0 6px}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-slider__label{font-weight:400;font-size:12px}.tribe-common .tribe-common-form-control-text__label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400;border:0;border-bottom:1px solid #d5d5d5;height:auto;padding:12px 28px 12px 0;width:100%}.tribe-common .tribe-common-form-control-text__input::-webkit-input-placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input:-ms-input-placeholder,.tribe-common .tribe-common-form-control-text__input::-ms-input-placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input::placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;outline:0}.tribe-theme-twentyseventeen .tribe-common .tribe-common-form-control-text__input{color:#141827}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400;border:0;border-bottom:1px solid #d5d5d5;padding:12px 28px 12px 0;width:100%}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;box-shadow:none}.tribe-common .tribe-common-form-control-toggle{line-height:0}.tribe-common .tribe-common-form-control-toggle__input{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#d5d5d5;cursor:pointer;display:inline-block;vertical-align:middle;width:40px}.tribe-common .tribe-common-form-control-toggle__input:after{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;content:"";left:0;position:absolute;top:-5px;transition:transform .2s ease}.tribe-common .tribe-common-form-control-toggle__input:checked{background-color:#334aff}.tribe-common .tribe-common-form-control-toggle__input:checked:after{transform:translateX(20px)}.tribe-common .tribe-common-form-control-toggle__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#727272;cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-toggle--vertical .tribe-common-form-control-toggle__label{display:block;margin:0 0 6px}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__input{display:inline-block;margin:5px 0}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__label{font-weight:400;font-size:12px}.tribe-common .tribe-common-g-col{min-width:0;width:100%}.tribe-common .tribe-common-g-row{display:flex;flex-wrap:wrap}.tribe-common .tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px}.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:21px;padding-right:21px}.tribe-common a{cursor:pointer}.tribe-common a,.tribe-common a:active,.tribe-common a:focus,.tribe-common a:hover,.tribe-common a:visited{color:#141827;outline:0;text-decoration:none}.tribe-theme-twentyseventeen .tribe-common a:focus,.tribe-theme-twentyseventeen .tribe-common a:hover{box-shadow:none;color:#141827}.tribe-theme-twentynineteen .entry .tribe-common a{text-decoration:none}.tribe-common .tribe-common-anchor{border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor:active,.tribe-common .tribe-common-anchor:focus,.tribe-common .tribe-common-anchor:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-anchor-alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-alt:active,.tribe-common .tribe-common-anchor-alt:focus,.tribe-common .tribe-common-anchor-alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-anchor-thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor-thin:active,.tribe-common .tribe-common-anchor-thin:focus,.tribe-common .tribe-common-anchor-thin:hover{border-bottom:1px solid #141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:hover{color:#334aff}.tribe-common .tribe-common-b1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.62}.tribe-common .tribe-common-b1--bold{font-weight:700}.tribe-common .tribe-common-b2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.38}.tribe-common .tribe-common-b2--bold{font-weight:700}.tribe-common .tribe-common-b3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5}.tribe-common .tribe-common-b3--bold{font-weight:700}.tribe-common .tribe-common-cta{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;font-weight:700;border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta:active,.tribe-common .tribe-common-cta:focus,.tribe-common .tribe-common-cta:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-cta--alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--alt:active,.tribe-common .tribe-common-cta--alt:focus,.tribe-common .tribe-common-cta--alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:hover{color:#334aff}.tribe-common .tribe-common-h1{font-size:28px}.tribe-common .tribe-common-h1,.tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.42}.tribe-common .tribe-common-h2{font-size:24px}.tribe-common .tribe-common-h3{font-size:22px;line-height:1.5}.tribe-common .tribe-common-h3,.tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-common .tribe-common-h4{font-size:20px;line-height:1.42}.tribe-common .tribe-common-h5{font-size:18px}.tribe-common .tribe-common-h5,.tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-common .tribe-common-h6{font-size:16px}.tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h7,.tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-common .tribe-common-h--alt{font-weight:400}.tribe-theme-avada #main .tribe-common .tribe-common-h1{font-size:28px}.tribe-theme-avada #main .tribe-common .tribe-common-h1,.tribe-theme-avada #main .tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h2{font-size:24px}.tribe-theme-avada #main .tribe-common .tribe-common-h3{font-size:22px;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h3,.tribe-theme-avada #main .tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-theme-avada #main .tribe-common .tribe-common-h4{font-size:20px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h5{font-size:18px}.tribe-theme-avada #main .tribe-common .tribe-common-h5,.tribe-theme-avada #main .tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h6{font-size:16px}.tribe-theme-avada #main .tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7,.tribe-theme-avada #main .tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-theme-avada #main .tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h--alt{font-weight:400}.tribe-theme-divi #left-area .tribe-common ul,.tribe-theme-divi .entry-content .tribe-common ul,body.et-pb-preview.tribe-theme-divi #main-content .container .tribe-common ul{list-style-type:none;padding:0}.tribe-common button{border:none;padding:0}.tribe-common button,.tribe-common button:focus,.tribe-common button:hover{background-color:transparent}.tribe-common .tribe-common-l-container{max-width:1260px;margin-left:auto;margin-right:auto;padding-left:19.5px;padding-right:19.5px;width:100%}.tribe-common .tribe-common-svgicon{background-repeat:no-repeat;background-size:contain}.tribe-common .tribe-common-svgicon--day{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zM14.18 14.53v1.747c0 .482.39.874.873.874H16.8a.873.873 0 0 0 .873-.874V14.53a.873.873 0 0 0-.873-.873h-1.747a.873.873 0 0 0-.873.873z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--list{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='18' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23141827'%3E%3Cpath d='M19.883 3.272c.342 0 .622-.21.622-.467v-.464c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.464c0 .257.28.467.622.467h12.756zm-18.045.935a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5zM19.883 9.98c.342 0 .622-.21.622-.466v-.465c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.465c0 .256.28.466.622.466h12.756zm-18.045.936a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5zM19.883 16.689c.342 0 .622-.21.622-.467v-.465c0-.256-.28-.466-.622-.466H7.127c-.342 0-.622.21-.622.466v.465c0 .257.28.467.622.467h12.756zm-18.045.935a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--map{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827'%3E%3Cpath stroke-linejoin='round' d='M13.921 11.632H17.5l3.588 8.421H1l3.488-8.421h4.016'/%3E%3Cpath d='M11.32 15.506c.2-.248 4.93-6.108 4.93-9.04 0-3.015-2.305-5.468-5.138-5.468-2.833 0-5.138 2.453-5.138 5.467 0 2.933 4.729 8.793 4.93 9.041a.268.268 0 0 0 .208.101c.08 0 .155-.037.207-.101zm-4.797-9.04c0-2.693 2.058-4.883 4.589-4.883 2.53 0 4.588 2.19 4.588 4.882 0 2.387-3.667 7.22-4.588 8.397-.922-1.177-4.589-6.009-4.589-8.397z' stroke-width='.4' fill='%23141827' fill-rule='nonzero'/%3E%3Cpath d='M12.85 6.477c0-1.007-.78-1.826-1.738-1.826-.96 0-1.74.819-1.74 1.826 0 1.007.78 1.826 1.74 1.826.959 0 1.739-.82 1.739-1.826zm-3.15 0c0-.817.633-1.482 1.412-1.482.778 0 1.41.665 1.41 1.482s-.632 1.482-1.41 1.482c-.779 0-1.412-.665-1.412-1.482z' stroke-width='.7' fill='%23000' fill-rule='nonzero'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--month{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='22' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.637 1.063v19.879c0 .276.189.5.422.5h20.037c.232 0 .421-.224.421-.5V1.062c0-.275-.189-.5-.421-.5H1.059c-.233 0-.422.225-.422.5zM1.787 2H20.34v2.685H1.787V2zm0 4H20.34v14H1.787V6zM8 8.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-8 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-12 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm0 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--photo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='17' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23141827'%3E%3Cpath d='M19.348.11H.634a.509.509 0 0 0-.52.508v15.017c0 .284.23.508.52.508h18.714a.51.51 0 0 0 .52-.508V.618a.509.509 0 0 0-.52-.508zm-.54 1.035v10.837l-2.87-3.084c-.583-.61-1.664-.61-2.246 0l-1.393 1.481-4.034-4.525a1.625 1.625 0 0 0-1.227-.528 1.6 1.6 0 0 0-1.206.548l-4.657 5.175V1.145h17.632zM1.174 15.108v-2.496l5.448-6.089a.529.529 0 0 1 .415-.182c.146 0 .333.06.437.182l4.429 4.972c.104.102.25.183.395.183.166.02.291-.06.395-.162l1.788-1.908c.167-.183.5-.183.686 0l3.66 3.917v1.603H1.175v-.02z'/%3E%3Cpath d='M14.19 5.757c1.044 0 1.91-.872 1.91-1.968s-.846-1.969-1.91-1.969c-1.062 0-1.909.873-1.909 1.969s.866 1.968 1.91 1.968zm0-2.902c.493 0 .907.427.907.934 0 .507-.414.933-.906.933-.492 0-.906-.426-.906-.933 0-.507.414-.934.906-.934z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--week{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zm6.25 6.537v1.006c0 .278.224.503.502.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H7.908a.503.503 0 0 0-.503.502zm4.022 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H11.93a.503.503 0 0 0-.503.502zm4.023 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502h-1.006a.503.503 0 0 0-.503.502zm-12.069 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H3.885a.503.503 0 0 0-.503.502z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23334AFF'/%3E%3C/svg%3E");height:10px;width:8px}.tribe-common .tribe-common-svgicon--recurring{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E");height:10px;width:10px}.tribe-common .tribe-common-svgicon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--filters{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-theme-enfold .tribe-common th{letter-spacing:0;text-transform:none}.tribe-common .tribe-common-a11y-hidden{display:none!important;visibility:hidden}.tribe-common .tribe-common-a11y-visual-hide,.tribe-common .tribe-common-a11y-visual-show{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;text-align:center;transition:color .2s ease,border-color .2s ease;color:#727272;padding:14px 20px;width:100%}.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:active{border-color:#141827}.tribe-common .tribe-common-c-btn-border:active,.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{color:#141827}.tribe-common .tribe-common-c-btn-border:disabled,.tribe-common a.tribe-common-c-btn-border:disabled{color:#d5d5d5}.tribe-common .tribe-common-c-btn-icon{border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto}.tribe-common .tribe-common-c-btn-icon:before{background-repeat:no-repeat;background-size:contain;content:"";display:block}.tribe-common .tribe-common-c-btn-icon--border{background-color:#fff;border:1px solid #d5d5d5;align-items:center;display:inline-flex;height:56px;justify-content:center;transition:none;width:56px}.tribe-common .tribe-common-c-btn-icon--border:focus,.tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon--border:active{border-color:#141827}.tribe-common .tribe-common-c-btn-icon--caret-left:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-left:active:before,.tribe-common .tribe-common-c-btn-icon--caret-left:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-left:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-left:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-right:active:before,.tribe-common .tribe-common-c-btn-icon--caret-right:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-right:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E");height:20px;width:24px}.tribe-common .tribe-common-c-btn-icon--filters:active:before,.tribe-common .tribe-common-c-btn-icon--filters:focus:before,.tribe-common .tribe-common-c-btn-icon--filters:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23D5D5D5' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");height:20px;width:20px}.tribe-common .tribe-common-c-btn-icon--search:active:before,.tribe-common .tribe-common-c-btn-icon--search:focus:before,.tribe-common .tribe-common-c-btn-icon--search:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;border-radius:4px;color:#fff;text-align:center;transition:background-color .2s ease;background-color:#334aff;padding:11px 20px;width:100%}.tribe-common .tribe-common-c-btn:focus,.tribe-common .tribe-common-c-btn:hover,.tribe-common a.tribe-common-c-btn:focus,.tribe-common a.tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8)}.tribe-common .tribe-common-c-btn:active,.tribe-common a.tribe-common-c-btn:active{background-color:rgba(51,74,255,.9)}.tribe-common .tribe-common-c-btn:disabled,.tribe-common a.tribe-common-c-btn:disabled{background-color:rgba(51,74,255,.07)}.tribe-common .tribe-common-c-image{display:block;height:auto;margin-left:auto;margin-right:auto;width:100%}.tribe-common .tribe-common-c-image--bg{position:relative}.tribe-common .tribe-common-c-image__bg{background:50% no-repeat;background-size:cover;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}@media (min-width:768px){#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input,.tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;border:0;padding:20px 20px 20px 40px}.tribe-common .tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-common .tribe-common-b1{font-size:16px;line-height:1.62}.tribe-common .tribe-common-b2{font-size:14px;line-height:1.62}.tribe-common .tribe-common-b3{font-size:12px;line-height:1.38}.tribe-common .tribe-common-b1--min-medium{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-common .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-common .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-common .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-common .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-common .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-common .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-common .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-common .tribe-common-l-container{padding-left:42px;padding-right:42px}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{padding:6px 15px;width:auto}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{width:auto}}
1
+ .tribe-common figure{line-height:0}.tribe-common figcaption{line-height:normal}.tribe-common a{background-color:transparent;-webkit-text-decoration-skip:objects}.tribe-common abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.tribe-common code,.tribe-common kbd,.tribe-common pre,.tribe-common samp{font-family:monospace;font-size:1em}.tribe-common b,.tribe-common strong{font-weight:inherit;font-weight:bolder}.tribe-common dfn{font-style:italic}.tribe-common mark{background-color:#ff0;color:#000}.tribe-common small{font-size:80%}.tribe-common sub,.tribe-common sup{font-size:75%;line-height:0}.tribe-common hr{border:0;height:0}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=email],.tribe-common input[type=password],.tribe-common input[type=reset],.tribe-common input[type=search],.tribe-common input[type=submit],.tribe-common input[type=text],.tribe-common input[type=url],.tribe-common textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}.tribe-common button,.tribe-common input,.tribe-common optgroup,.tribe-common select,.tribe-common textarea{color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:antialiased}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{outline:0;border-radius:0}.tribe-common select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.tribe-common optgroup{font-weight:700}.tribe-common ol,.tribe-common ul{list-style:none}.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common p{font-weight:400;text-rendering:optimizeLegibility}.tribe-common .tribe-common-form-control-checkbox,.tribe-common .tribe-common-form-control-radio{line-height:0}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;color:#727272;cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border:1px solid #141827;cursor:pointer;display:inline-block;height:20px;margin:0;position:relative;vertical-align:middle;width:20px}.tribe-common .tribe-common-form-control-checkbox__input:active,.tribe-common .tribe-common-form-control-checkbox__input:focus,.tribe-common .tribe-common-form-control-checkbox__input:hover,.tribe-common .tribe-common-form-control-radio__input:active,.tribe-common .tribe-common-form-control-radio__input:focus,.tribe-common .tribe-common-form-control-radio__input:hover{border:1px solid #141827}.tribe-common .tribe-common-form-control-checkbox__input:checked,.tribe-common .tribe-common-form-control-radio__input:checked{background-color:#141827}.tribe-common .tribe-common-form-control-checkbox__input:checked:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='9' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.6.1L3.9 6.8 1.4 4.3c-.1-.1-.3-.1-.4 0l-.8.8c-.1.1-.1.3 0 .4l3.4 3.4c.2.1.4.1.5 0l7.7-7.7c.1-.1.1-.3 0-.4L11 .1c-.1-.1-.3-.1-.4 0z' fill='%23FFF'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;height:9px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:12px}.tribe-common .tribe-common-form-control-radio__input{border-radius:50%}.tribe-common .tribe-common-form-control-radio__input:checked:before{background-color:#fff;border-radius:50%;content:"";display:block;height:8px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:8px}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__input{display:inline-block}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-radio__label{font-weight:400;font-size:14px}.tribe-common .tribe-common-form-control-checkbox-radio-group>*{margin-bottom:15px}.tribe-common .tribe-common-form-control-checkbox-radio-group>:last-child{margin-bottom:0}.tribe-common .tribe-common-form-control-slider{line-height:0}.tribe-common .tribe-common-form-control-slider__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;cursor:pointer;display:inline-block;margin:0;padding:0;width:120px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-runnable-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-moz-range-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-ms-track{background-color:transparent;border-color:transparent;border-width:5px 0;color:transparent;height:10px}.tribe-common .tribe-common-form-control-slider__input::-ms-fill-lower,.tribe-common .tribe-common-form-control-slider__input::-ms-fill-upper{background-color:#334aff;border-radius:10px}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;-webkit-appearance:none;appearance:none}.tribe-common .tribe-common-form-control-slider__input::-moz-range-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px}.tribe-common .tribe-common-form-control-slider__input::-ms-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;box-shadow:none;margin-top:-1px}.tribe-common .tribe-common-form-control-slider__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#727272;cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider--vertical .tribe-common-form-control-slider__label{display:block;margin:0 0 6px}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-slider__label{font-weight:400;font-size:12px}.tribe-common .tribe-common-form-control-text__label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400;border:0;border-bottom:1px solid #d5d5d5;height:auto;padding:12px 28px 12px 0;width:100%}.tribe-common .tribe-common-form-control-text__input::-webkit-input-placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input:-ms-input-placeholder,.tribe-common .tribe-common-form-control-text__input::-ms-input-placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input::placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;outline:0}.tribe-theme-twentyseventeen .tribe-common .tribe-common-form-control-text__input{color:#141827}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400;border:0;border-bottom:1px solid #d5d5d5;padding:12px 28px 12px 0;width:100%}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;box-shadow:none}.tribe-common .tribe-common-form-control-toggle{line-height:0}.tribe-common .tribe-common-form-control-toggle__input{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#d5d5d5;cursor:pointer;display:inline-block;vertical-align:middle;width:40px}.tribe-common .tribe-common-form-control-toggle__input:after{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;content:"";left:0;position:absolute;top:-5px;transition:transform .2s ease}.tribe-common .tribe-common-form-control-toggle__input:checked{background-color:#334aff}.tribe-common .tribe-common-form-control-toggle__input:checked:after{transform:translateX(20px)}.tribe-common .tribe-common-form-control-toggle__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#727272;cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-toggle--vertical .tribe-common-form-control-toggle__label{display:block;margin:0 0 6px}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__input{display:inline-block;margin:5px 0}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__label{font-weight:400;font-size:12px}.tribe-common .tribe-common-g-col{min-width:0;width:100%}.tribe-common .tribe-common-g-row{display:flex;flex-wrap:wrap}.tribe-common .tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px}.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:21px;padding-right:21px}.tribe-common a{cursor:pointer}.tribe-common a,.tribe-common a:active,.tribe-common a:focus,.tribe-common a:hover,.tribe-common a:visited{color:#141827;outline:0;text-decoration:none}.tribe-theme-twentyseventeen .tribe-common a:focus,.tribe-theme-twentyseventeen .tribe-common a:hover{box-shadow:none;color:#141827}.tribe-theme-twentynineteen .entry .tribe-common a{text-decoration:none}.tribe-common .tribe-common-anchor{border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor:active,.tribe-common .tribe-common-anchor:focus,.tribe-common .tribe-common-anchor:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-anchor-alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-alt:active,.tribe-common .tribe-common-anchor-alt:focus,.tribe-common .tribe-common-anchor-alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-anchor-thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor-thin:active,.tribe-common .tribe-common-anchor-thin:focus,.tribe-common .tribe-common-anchor-thin:hover{border-bottom:1px solid #141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:hover{color:#334aff}.tribe-common .tribe-common-b1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.62}.tribe-common .tribe-common-b1--bold{font-weight:700}.tribe-common .tribe-common-b2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.38}.tribe-common .tribe-common-b2--bold{font-weight:700}.tribe-common .tribe-common-b3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5}.tribe-common .tribe-common-b3--bold{font-weight:700}.tribe-common .tribe-common-cta{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;font-weight:700;border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta:active,.tribe-common .tribe-common-cta:focus,.tribe-common .tribe-common-cta:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-cta--alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--alt:active,.tribe-common .tribe-common-cta--alt:focus,.tribe-common .tribe-common-cta--alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-cta--thin-alt{border-bottom:1px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--thin-alt:active,.tribe-common .tribe-common-cta--thin-alt:focus,.tribe-common .tribe-common-cta--thin-alt:hover{border-bottom:1px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:hover,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:hover{color:#334aff}.tribe-common .tribe-common-h1{font-size:28px}.tribe-common .tribe-common-h1,.tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.42}.tribe-common .tribe-common-h2{font-size:24px}.tribe-common .tribe-common-h3{font-size:22px;line-height:1.5}.tribe-common .tribe-common-h3,.tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-common .tribe-common-h4{font-size:20px;line-height:1.42}.tribe-common .tribe-common-h5{font-size:18px}.tribe-common .tribe-common-h5,.tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-common .tribe-common-h6{font-size:16px}.tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h7,.tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-common .tribe-common-h--alt{font-weight:400}.tribe-theme-avada #main .tribe-common .tribe-common-h1{font-size:28px}.tribe-theme-avada #main .tribe-common .tribe-common-h1,.tribe-theme-avada #main .tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h2{font-size:24px}.tribe-theme-avada #main .tribe-common .tribe-common-h3{font-size:22px;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h3,.tribe-theme-avada #main .tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-theme-avada #main .tribe-common .tribe-common-h4{font-size:20px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h5{font-size:18px}.tribe-theme-avada #main .tribe-common .tribe-common-h5,.tribe-theme-avada #main .tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h6{font-size:16px}.tribe-theme-avada #main .tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7,.tribe-theme-avada #main .tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-theme-avada #main .tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h--alt{font-weight:400}.tribe-theme-divi #left-area .tribe-common ul,.tribe-theme-divi .entry-content .tribe-common ul,body.et-pb-preview.tribe-theme-divi #main-content .container .tribe-common ul{list-style-type:none;padding:0}.tribe-common button{border:none;padding:0}.tribe-common button,.tribe-common button:focus,.tribe-common button:hover,.tribe-theme-twentyseventeen .tribe-common button:focus,.tribe-theme-twentyseventeen .tribe-common button:hover{background-color:transparent}.tribe-common .tribe-common-l-container{max-width:1260px;margin-left:auto;margin-right:auto;padding-left:19.5px;padding-right:19.5px;width:100%}.tribe-common .tribe-common-svgicon{background-repeat:no-repeat;background-size:contain}.tribe-common .tribe-common-svgicon--day{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zM14.18 14.53v1.747c0 .482.39.874.873.874H16.8a.873.873 0 0 0 .873-.874V14.53a.873.873 0 0 0-.873-.873h-1.747a.873.873 0 0 0-.873.873z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--list{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='18' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23141827'%3E%3Cpath d='M19.883 3.272c.342 0 .622-.21.622-.467v-.464c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.464c0 .257.28.467.622.467h12.756zm-18.045.935a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5zM19.883 9.98c.342 0 .622-.21.622-.466v-.465c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.465c0 .256.28.466.622.466h12.756zm-18.045.936a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5zM19.883 16.689c.342 0 .622-.21.622-.467v-.465c0-.256-.28-.466-.622-.466H7.127c-.342 0-.622.21-.622.466v.465c0 .257.28.467.622.467h12.756zm-18.045.935a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--map{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827'%3E%3Cpath stroke-linejoin='round' d='M13.921 11.632H17.5l3.588 8.421H1l3.488-8.421h4.016'/%3E%3Cpath d='M11.32 15.506c.2-.248 4.93-6.108 4.93-9.04 0-3.015-2.305-5.468-5.138-5.468-2.833 0-5.138 2.453-5.138 5.467 0 2.933 4.729 8.793 4.93 9.041a.268.268 0 0 0 .208.101c.08 0 .155-.037.207-.101zm-4.797-9.04c0-2.693 2.058-4.883 4.589-4.883 2.53 0 4.588 2.19 4.588 4.882 0 2.387-3.667 7.22-4.588 8.397-.922-1.177-4.589-6.009-4.589-8.397z' stroke-width='.4' fill='%23141827' fill-rule='nonzero'/%3E%3Cpath d='M12.85 6.477c0-1.007-.78-1.826-1.738-1.826-.96 0-1.74.819-1.74 1.826 0 1.007.78 1.826 1.74 1.826.959 0 1.739-.82 1.739-1.826zm-3.15 0c0-.817.633-1.482 1.412-1.482.778 0 1.41.665 1.41 1.482s-.632 1.482-1.41 1.482c-.779 0-1.412-.665-1.412-1.482z' stroke-width='.7' fill='%23000' fill-rule='nonzero'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--month{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='22' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.637 1.063v19.879c0 .276.189.5.422.5h20.037c.232 0 .421-.224.421-.5V1.062c0-.275-.189-.5-.421-.5H1.059c-.233 0-.422.225-.422.5zM1.787 2H20.34v2.685H1.787V2zm0 4H20.34v14H1.787V6zM8 8.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-8 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-12 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm0 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--photo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='17' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23141827'%3E%3Cpath d='M19.348.11H.634a.509.509 0 0 0-.52.508v15.017c0 .284.23.508.52.508h18.714a.51.51 0 0 0 .52-.508V.618a.509.509 0 0 0-.52-.508zm-.54 1.035v10.837l-2.87-3.084c-.583-.61-1.664-.61-2.246 0l-1.393 1.481-4.034-4.525a1.625 1.625 0 0 0-1.227-.528 1.6 1.6 0 0 0-1.206.548l-4.657 5.175V1.145h17.632zM1.174 15.108v-2.496l5.448-6.089a.529.529 0 0 1 .415-.182c.146 0 .333.06.437.182l4.429 4.972c.104.102.25.183.395.183.166.02.291-.06.395-.162l1.788-1.908c.167-.183.5-.183.686 0l3.66 3.917v1.603H1.175v-.02z'/%3E%3Cpath d='M14.19 5.757c1.044 0 1.91-.872 1.91-1.968s-.846-1.969-1.91-1.969c-1.062 0-1.909.873-1.909 1.969s.866 1.968 1.91 1.968zm0-2.902c.493 0 .907.427.907.934 0 .507-.414.933-.906.933-.492 0-.906-.426-.906-.933 0-.507.414-.934.906-.934z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--week{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zm6.25 6.537v1.006c0 .278.224.503.502.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H7.908a.503.503 0 0 0-.503.502zm4.022 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H11.93a.503.503 0 0 0-.503.502zm4.023 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502h-1.006a.503.503 0 0 0-.503.502zm-12.069 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H3.885a.503.503 0 0 0-.503.502z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23334AFF'/%3E%3C/svg%3E");height:10px;width:8px}.tribe-common .tribe-common-svgicon--recurring{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E");height:10px;width:10px}.tribe-common .tribe-common-svgicon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--filters{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-theme-enfold .tribe-common th{letter-spacing:0;text-transform:none}.tribe-common .tribe-common-a11y-hidden{display:none!important;visibility:hidden}.tribe-common .tribe-common-a11y-visual-hide,.tribe-common .tribe-common-a11y-visual-show{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;text-align:center;transition:color .2s ease,border-color .2s ease;color:#727272;padding:14px 20px;width:100%}.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:active{border-color:#141827}.tribe-common .tribe-common-c-btn-border:active,.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{color:#141827}.tribe-common .tribe-common-c-btn-border:disabled,.tribe-common a.tribe-common-c-btn-border:disabled{color:#d5d5d5}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon{border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto}.tribe-common .tribe-common-c-btn-icon:before{background-repeat:no-repeat;background-size:contain;content:"";display:block}.tribe-common .tribe-common-c-btn-icon--border{background-color:#fff;border:1px solid #d5d5d5;align-items:center;display:inline-flex;height:56px;justify-content:center;transition:none;width:56px}.tribe-common .tribe-common-c-btn-icon--border:focus,.tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon--border:active{border-color:#141827}.tribe-common .tribe-common-c-btn-icon--caret-left:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-left:active:before,.tribe-common .tribe-common-c-btn-icon--caret-left:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-left:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-left:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-right:active:before,.tribe-common .tribe-common-c-btn-icon--caret-right:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-right:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E");height:20px;width:24px}.tribe-common .tribe-common-c-btn-icon--filters:active:before,.tribe-common .tribe-common-c-btn-icon--filters:focus:before,.tribe-common .tribe-common-c-btn-icon--filters:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23D5D5D5' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");height:20px;width:20px}.tribe-common .tribe-common-c-btn-icon--search:active:before,.tribe-common .tribe-common-c-btn-icon--search:focus:before,.tribe-common .tribe-common-c-btn-icon--search:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;border-radius:4px;color:#fff;text-align:center;transition:background-color .2s ease;background-color:#334aff;padding:11px 20px;width:100%}.tribe-common .tribe-common-c-btn:focus,.tribe-common .tribe-common-c-btn:hover,.tribe-common a.tribe-common-c-btn:focus,.tribe-common a.tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8)}.tribe-common .tribe-common-c-btn:active,.tribe-common a.tribe-common-c-btn:active{background-color:rgba(51,74,255,.9)}.tribe-common .tribe-common-c-btn:disabled,.tribe-common a.tribe-common-c-btn:disabled{background-color:rgba(51,74,255,.07)}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-common .tribe-common-c-image{display:block;height:auto;margin-left:auto;margin-right:auto;width:100%}.tribe-common .tribe-common-c-image--bg{position:relative}.tribe-common .tribe-common-c-image__bg{background:50% no-repeat;background-size:cover;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}@media (min-width:768px){#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input,.tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;border:0;padding:20px 20px 20px 40px}.tribe-common .tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-common .tribe-common-b1{font-size:16px;line-height:1.62}.tribe-common .tribe-common-b2{font-size:14px;line-height:1.62}.tribe-common .tribe-common-b3{font-size:12px;line-height:1.38}.tribe-common .tribe-common-b1--min-medium{font-size:16px;line-height:1.62}.tribe-common .tribe-common-b2--min-medium{font-size:14px;line-height:1.62}.tribe-common .tribe-common-b3--min-medium{font-size:12px;line-height:1.38}.tribe-common .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-common .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-common .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-common .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-common .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-common .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-common .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-common .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-common .tribe-common-l-container{padding-left:42px;padding-right:42px}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{padding:6px 15px;width:auto}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{width:auto}}
common/src/resources/postcss/base/_buttons.pcss CHANGED
@@ -13,4 +13,25 @@
13
  background-color: transparent;
14
  }
15
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  }
13
  background-color: transparent;
14
  }
15
  }
16
+
17
+ /* -------------------------------------------------------------------------
18
+ *
19
+ * Button: Theme Overrides
20
+ *
21
+ * ------------------------------------------------------------------------- */
22
+
23
+ /* -------------------------------------------------------------------------
24
+ * Theme Overrides - Twenty Seventeen
25
+ * ------------------------------------------------------------------------- */
26
+
27
+ .tribe-theme-twentyseventeen & {
28
+
29
+ button {
30
+
31
+ &:hover,
32
+ &:focus {
33
+ background-color: transparent;
34
+ }
35
+ }
36
+ }
37
  }
common/src/resources/postcss/base/typography/_body.pcss CHANGED
@@ -65,4 +65,24 @@
65
  @mixin desktop-body-1-sup;
66
  }
67
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  }
65
  @mixin desktop-body-1-sup;
66
  }
67
  }
68
+
69
+ /* -------------------------------------------------------------------------
70
+ * Body 2 for --viewport-medium
71
+ * ------------------------------------------------------------------------- */
72
+
73
+ .tribe-common-b2--min-medium {
74
+ @media (--viewport-medium) {
75
+ @mixin desktop-body-2-sup;
76
+ }
77
+ }
78
+
79
+ /* -------------------------------------------------------------------------
80
+ * Body 3 for --viewport-medium
81
+ * ------------------------------------------------------------------------- */
82
+
83
+ .tribe-common-b3--min-medium {
84
+ @media (--viewport-medium) {
85
+ @mixin desktop-body-3-sup;
86
+ }
87
+ }
88
  }
common/src/resources/postcss/base/typography/_ctas.pcss CHANGED
@@ -18,6 +18,10 @@
18
  @mixin anchor-alt;
19
  }
20
 
 
 
 
 
21
  /* -------------------------------------------------------------------------
22
  *
23
  * CTA: Theme Overrides
@@ -30,7 +34,8 @@
30
 
31
  .tribe-theme-twentyseventeen & {
32
 
33
- .tribe-common-cta--alt {
 
34
 
35
  &:hover,
36
  &:focus {
18
  @mixin anchor-alt;
19
  }
20
 
21
+ .tribe-common-cta--thin-alt {
22
+ @mixin anchor-thin-alt;
23
+ }
24
+
25
  /* -------------------------------------------------------------------------
26
  *
27
  * CTA: Theme Overrides
34
 
35
  .tribe-theme-twentyseventeen & {
36
 
37
+ .tribe-common-cta--alt,
38
+ .tribe-common-cta--thin-alt {
39
 
40
  &:hover,
41
  &:focus {
common/src/resources/postcss/components/buttons/_border.pcss CHANGED
@@ -32,4 +32,24 @@
32
  color: var(--color-text-disabled)
33
  }
34
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  }
32
  color: var(--color-text-disabled)
33
  }
34
  }
35
+
36
+ /* -------------------------------------------------------------------------
37
+ *
38
+ * Button: Border - Theme Overrides
39
+ *
40
+ * ------------------------------------------------------------------------- */
41
+
42
+ /* -------------------------------------------------------------------------
43
+ * Theme Overrides - Twenty Seventeen
44
+ * ------------------------------------------------------------------------- */
45
+
46
+ .tribe-theme-twentyseventeen & {
47
+
48
+ .tribe-common-c-btn-border {
49
+
50
+ &:hover {
51
+ background-color: var(--color-background);
52
+ }
53
+ }
54
+ }
55
  }
common/src/resources/postcss/components/buttons/_icon.pcss CHANGED
@@ -149,4 +149,24 @@
149
  }
150
  }
151
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152
  }
149
  }
150
  }
151
  }
152
+
153
+ /* -------------------------------------------------------------------------
154
+ *
155
+ * Button: Icon Border - Theme Overrides
156
+ *
157
+ * ------------------------------------------------------------------------- */
158
+
159
+ /* -------------------------------------------------------------------------
160
+ * Theme Overrides - Twenty Seventeen
161
+ * ------------------------------------------------------------------------- */
162
+
163
+ .tribe-theme-twentyseventeen & {
164
+
165
+ .tribe-common-c-btn-icon--border {
166
+
167
+ &:hover {
168
+ background-color: var(--color-background);
169
+ }
170
+ }
171
+ }
172
  }
common/src/resources/postcss/components/buttons/_solid.pcss CHANGED
@@ -34,4 +34,26 @@
34
  background-color: var(--color-accent-primary-background);
35
  }
36
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  }
34
  background-color: var(--color-accent-primary-background);
35
  }
36
  }
37
+
38
+ /* -------------------------------------------------------------------------
39
+ *
40
+ * Button: Solid - Theme Overrides
41
+ *
42
+ * ------------------------------------------------------------------------- */
43
+
44
+ /* -------------------------------------------------------------------------
45
+ * Theme Overrides - Twenty Seventeen
46
+ * ------------------------------------------------------------------------- */
47
+
48
+ .tribe-theme-twentyseventeen & {
49
+
50
+ .tribe-common-c-btn {
51
+
52
+ &:hover,
53
+ &:focus {
54
+ background-color: var(--color-accent-primary-hover);
55
+ color: var(--color-background);
56
+ }
57
+ }
58
+ }
59
  }
common/src/resources/postcss/utilities/README.md CHANGED
@@ -1,36 +1,63 @@
1
- A set of common postcss utilities.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  ## Installation
4
- You probably will need to install this package in a custom paths, say `src/resources/postcss/utilities`; if that's the case then add this to the plugin/project `composer.json` file:
5
-
6
- ```json
7
- "repositories": [
8
- {
9
- "name": "moderntribe/tribe-common-styles",
10
- "type": "github",
11
- "url": "https://github.com/moderntribe/tribe-common-styles",
12
- "no-api": true
13
- }
14
- ],
15
- "extra": {
16
- "installer-paths": {
17
- "src/resources/postcss/utilities": [
18
- "moderntribe/tribe-common-styles"
19
- ]
20
- }
21
- }
22
- ```
23
- To simply install the package in your project use:
24
 
25
- ```bash
26
- composer require --dev moderntribe/tribe-common-styles
 
 
 
 
27
  ```
28
 
29
- ## Source installation
30
- If you need to work on **this** package while working on your project you will want to clone the full Git repository, just follow the instructions above and, in place of the command above, use:
31
 
32
  ```bash
33
- composer require --dev moderntribe/tribe-common-styles --prefer-source
34
  ```
35
-
36
- Remember to ignore the package installation folder to avoid committing a dirty repository!
1
+ # Tribe Common Styles
2
+
3
+ ## What is this repository?
4
+
5
+ This repository is a set of common PostCSS utilities. It includes variables, icons, and mixins to help follow Modern Tribe products design system. They are consumed by Modern Tribe plugins PostCSS files.
6
+
7
+ ## Why do we need this?
8
+
9
+ Modern Tribe has a design system for its plugins. Defining a set of variables and style groupings helps maintain consistency and ease of maintenance throughout all the plugins.
10
+
11
+ For example, if the primary text color was to change due to a design update, doing a search and replace through all the PostCSS files could be time-consuming and error-prone. Instead, changing it in one place changes the color for all styles consuming the variable.
12
+
13
+ ## Repository Structure
14
+
15
+ The repository structure starts at the root level file `_all.pcss` importing all the repository styles. Variables, icons, and mixins are defined within their respective folders.
16
+
17
+ ### Variables
18
+
19
+ Variables are any *reusable* property values named specifically for their use case. They are found in the `/variables` folder. Though some variables may hold the same value (e.g. `--border-radius-default: 4px;` and `--spacer-0: 4px`), their use cases are very different and should not be used interchangeably.
20
+
21
+ SVGs are different from the other variables partial files. They are found in `/variables/_svgs.pcss` and are compiled using the [PostCSS Inline SVG](https://github.com/TrySound/postcss-inline-svg) plugin.
22
+
23
+ ### Icons
24
+
25
+ Icons are SVG icons included in the design system and are found in the `/icons` folder. They are consumed by the SVG variables partial file `/variables/_svg.pcss`.
26
+
27
+ ### Mixins
28
+
29
+ Mixins are groupings of *reusable* styles and are found in the `/mixins` folder. These reusable style groupings are often defined by the design system. Mixins are compiled using the [PostCSS Mixins](https://github.com/postcss/postcss-mixins) plugin.
30
+
31
+ ## Making Changes
32
+
33
+ Making changes to this repository should be done with care. As these utilities are the most upstream in Modern Tribe products PostCSS files, modifications to these files can have a cascading effect downstream.
34
+
35
+ When making any changes, whether they are additions, alterations, or deletions, **consistency** is key. Follow naming conventions and groupings so that viewing and editing the files are simple.
36
+
37
+ ### Additions
38
+
39
+ Additions are generally safe, as long as the variable names do not conflict with existing variables. Confirm that the variables or mixins you are adding are reusable and a consistent part of the design system before adding.
40
+
41
+ ### Alterations
42
+
43
+ Alterations should be done carefully, as they will affect all downstream styles using the variable or mixin being altered. Multiple plugins use these styles and should be cross-checked before making the change.
44
+
45
+ ### Deletions
46
+
47
+ Deletions should also be done carefully, for the same reasons as **Alterations** above. Removing a variable or mixin that is still being used will create broken styles and/or build failures.
48
 
49
  ## Installation
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
 
51
+ You will need to include this package as a submodule to your plugin/project. To install this in in a custom path, in this case `src/resources/postcss/utilities`, add the following to your `.gitmodules` file:
52
+
53
+ ```
54
+ [submodule "src/resources/postcss/utilities"]
55
+ path = src/resources/postcss/utilities
56
+ url = git@github.com:moderntribe/tribe-common-styles.git
57
  ```
58
 
59
+ To simply install the package in your project use:
 
60
 
61
  ```bash
62
+ git submodule update --recursive --init
63
  ```
 
 
common/src/resources/postcss/utilities/mixins/_typography.pcss CHANGED
@@ -280,3 +280,20 @@
280
  border-bottom: 1px solid var(--color-text-primary);
281
  }
282
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  border-bottom: 1px solid var(--color-text-primary);
281
  }
282
  }
283
+
284
+ /* -----------------------------------------------------------------------------
285
+ * Anchor - Thin
286
+ * ----------------------------------------------------------------------------- */
287
+
288
+ @define-mixin anchor-thin-alt {
289
+ border-bottom: 1px solid var(--color-accent-primary);
290
+ color: var(--color-text-primary);
291
+ transition: var(--transition-color);
292
+
293
+ &:active,
294
+ &:focus,
295
+ &:hover {
296
+ border-bottom: 1px solid var(--color-accent-primary);
297
+ color: var(--color-accent-primary);
298
+ }
299
+ }
common/src/resources/postcss/utilities/variables/_box-shadows.pcss CHANGED
@@ -5,5 +5,6 @@
5
 
6
  --box-shadow-default: 0 2px 5px 0 var(--color-box-shadow);
7
  --box-shadow-tooltip: 0 2px 12px 0 var(--color-box-shadow);
 
8
  }
9
 
5
 
6
  --box-shadow-default: 0 2px 5px 0 var(--color-box-shadow);
7
  --box-shadow-tooltip: 0 2px 12px 0 var(--color-box-shadow);
8
+ --box-shadow-card: 0 1px 6px 2px var(--color-box-shadow);
9
  }
10
 
common/src/resources/postcss/utilities/variables/_colors.pcss CHANGED
@@ -29,6 +29,8 @@
29
  --color-accent-primary-multiday-hover: rgba(var(--color-accent-primary), 0.34);
30
  --color-accent-primary-week-event: rgba(var(--color-accent-primary), 0.1);
31
  --color-accent-primary-week-event-hover: rgba(var(--color-accent-primary), 0.2);
 
 
32
  --color-accent-secondary: #141827;
33
  --color-accent-secondary-hover: rgba(var(--color-accent-secondary), 0.8);
34
  --color-accent-secondary-active: rgba(var(--color-accent-secondary), 0.9);
@@ -40,6 +42,7 @@
40
 
41
  --color-border-default: #D5D5D5;
42
  --color-border-secondary: #E4E4E4;
 
43
  --color-border-active: #141827;
44
  --color-background: #FFFFFF;
45
  --color-background-transparent: rgba(var(--color-background), 0.6);
29
  --color-accent-primary-multiday-hover: rgba(var(--color-accent-primary), 0.34);
30
  --color-accent-primary-week-event: rgba(var(--color-accent-primary), 0.1);
31
  --color-accent-primary-week-event-hover: rgba(var(--color-accent-primary), 0.2);
32
+ --color-accent-primary-week-event-featured: rgba(var(--color-accent-primary), 0.04);
33
+ --color-accent-primary-week-event-featured-hover: rgba(var(--color-accent-primary), 0.14);
34
  --color-accent-secondary: #141827;
35
  --color-accent-secondary-hover: rgba(var(--color-accent-secondary), 0.8);
36
  --color-accent-secondary-active: rgba(var(--color-accent-secondary), 0.9);
42
 
43
  --color-border-default: #D5D5D5;
44
  --color-border-secondary: #E4E4E4;
45
+ --color-border-hover: #727272;
46
  --color-border-active: #141827;
47
  --color-background: #FFFFFF;
48
  --color-background-transparent: rgba(var(--color-background), 0.6);
common/src/resources/postcss/utilities/variables/_grids.pcss CHANGED
@@ -30,7 +30,7 @@
30
  /* -----------------------------------------------------------------------------
31
  * Grid Width - Relative
32
  * ----------------------------------------------------------------------------- */
33
-
34
  --grid-width-1-of-2: 50%;
35
  --grid-width-1-of-3: 33.333%;
36
  --grid-width-1-of-4: 25%;
30
  /* -----------------------------------------------------------------------------
31
  * Grid Width - Relative
32
  * ----------------------------------------------------------------------------- */
33
+
34
  --grid-width-1-of-2: 50%;
35
  --grid-width-1-of-3: 33.333%;
36
  --grid-width-1-of-4: 25%;
common/src/resources/postcss/utilities/variables/_svgs.pcss CHANGED
@@ -2,6 +2,20 @@
2
  * SVG - Arrow Right
3
  * ----------------------------------------------------------------------------- */
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  @svg-load arrow-right-white url('../icons/arrow-right.svg') {
6
 
7
  path {
@@ -139,6 +153,13 @@
139
  }
140
  }
141
 
 
 
 
 
 
 
 
142
  @svg-load featured-white url('../icons/featured-event.svg') {
143
 
144
  path {
2
  * SVG - Arrow Right
3
  * ----------------------------------------------------------------------------- */
4
 
5
+ @svg-load arrow-right-active url('../icons/arrow-right.svg') {
6
+
7
+ path {
8
+ fill: var(--color-icon-active);
9
+ }
10
+ }
11
+
12
+ @svg-load arrow-right-secondary url('../icons/arrow-right.svg') {
13
+
14
+ path {
15
+ fill: var(--color-icon-secondary);
16
+ }
17
+ }
18
+
19
  @svg-load arrow-right-white url('../icons/arrow-right.svg') {
20
 
21
  path {
153
  }
154
  }
155
 
156
+ @svg-load featured-active url('../icons/featured-event.svg') {
157
+
158
+ path {
159
+ fill: var(--color-icon-active);
160
+ }
161
+ }
162
+
163
  @svg-load featured-white url('../icons/featured-event.svg') {
164
 
165
  path {
common/src/resources/postcss/utilities/variables/_z-index.pcss CHANGED
@@ -5,8 +5,12 @@
5
 
6
  --z-index-spinner-container: 100;
7
  --z-index-views-selector: 30;
 
8
  --z-index-events-bar-button: 20;
9
  --z-index-search: 10;
 
10
  --z-index-week-event-hover: 5;
11
  --z-index-map-event-hover: 5;
 
 
12
  }
5
 
6
  --z-index-spinner-container: 100;
7
  --z-index-views-selector: 30;
8
+ --z-index-dropdown: 30;
9
  --z-index-events-bar-button: 20;
10
  --z-index-search: 10;
11
+ --z-index-scroller: 7;
12
  --z-index-week-event-hover: 5;
13
  --z-index-map-event-hover: 5;
14
+ --z-index-map-event-hover-actions: 6;
15
+ --z-index-multiday-event: 5;
16
  }
common/vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit7463cc922209bc9bad4bfd31ce1c00bf::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitf211722f7d1cce246a2f7c04a769c000::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 ComposerAutoloaderInit78446093aa9b3c42347fe2d2552fc164::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInitbf75faf0b506d9c5f1fa174f3392425c::getLoader();
common/vendor/composer/autoload_classmap.php CHANGED
@@ -118,6 +118,8 @@ return array(
118
  'Tribe\\Log\\Canonical_Formatter' => $baseDir . '/src/Tribe/Log/Canonical_Formatter.php',
119
  'Tribe\\Log\\Monolog_Logger' => $baseDir . '/src/Tribe/Log/Monolog_Logger.php',
120
  'Tribe\\Log\\Service_Provider' => $baseDir . '/src/Tribe/Log/Service_Provider.php',
 
 
121
  'Tribe\\PUE\\Update_Prevention' => $baseDir . '/src/Tribe/PUE/Update_Prevention.php',
122
  'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
123
  'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
118
  'Tribe\\Log\\Canonical_Formatter' => $baseDir . '/src/Tribe/Log/Canonical_Formatter.php',
119
  'Tribe\\Log\\Monolog_Logger' => $baseDir . '/src/Tribe/Log/Monolog_Logger.php',
120
  'Tribe\\Log\\Service_Provider' => $baseDir . '/src/Tribe/Log/Service_Provider.php',
121
+ 'Tribe\\Models\\Post_Types\\Base' => $baseDir . '/src/Tribe/Models/Post_Types/Base.php',
122
+ 'Tribe\\Models\\Post_Types\\Nothing' => $baseDir . '/src/Tribe/Models/Post_Types/Nothing.php',
123
  'Tribe\\PUE\\Update_Prevention' => $baseDir . '/src/Tribe/PUE/Update_Prevention.php',
124
  'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
125
  'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
common/vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit7463cc922209bc9bad4bfd31ce1c00bf
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit7463cc922209bc9bad4bfd31ce1c00bf
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit7463cc922209bc9bad4bfd31ce1c00bf', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit7463cc922209bc9bad4bfd31ce1c00bf', '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\ComposerStaticInit7463cc922209bc9bad4bfd31ce1c00bf::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 ComposerAutoloaderInitf211722f7d1cce246a2f7c04a769c000
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInitf211722f7d1cce246a2f7c04a769c000', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitf211722f7d1cce246a2f7c04a769c000', '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\ComposerStaticInitf211722f7d1cce246a2f7c04a769c000::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 ComposerAutoloaderInit78446093aa9b3c42347fe2d2552fc164 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit78446093aa9b3c42347fe2d2552fc164 {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit78446093aa9b3c42347fe2d2552fc164', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit78446093aa9b3c42347fe2d2552fc164', '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 ComposerAutoloaderInitbf75faf0b506d9c5f1fa174f3392425c {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInitbf75faf0b506d9c5f1fa174f3392425c', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitbf75faf0b506d9c5f1fa174f3392425c', '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 ComposerStaticInit7463cc922209bc9bad4bfd31ce1c00bf
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
@@ -174,6 +174,8 @@ class ComposerStaticInit7463cc922209bc9bad4bfd31ce1c00bf
174
  'Tribe\\Log\\Canonical_Formatter' => __DIR__ . '/../..' . '/src/Tribe/Log/Canonical_Formatter.php',
175
  'Tribe\\Log\\Monolog_Logger' => __DIR__ . '/../..' . '/src/Tribe/Log/Monolog_Logger.php',
176
  'Tribe\\Log\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Log/Service_Provider.php',
 
 
177
  'Tribe\\PUE\\Update_Prevention' => __DIR__ . '/../..' . '/src/Tribe/PUE/Update_Prevention.php',
178
  'Tribe\\Service_Providers\\PUE' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/PUE.php',
179
  'Tribe\\Traits\\Cache_User' => __DIR__ . '/../..' . '/src/Tribe/Traits/Cache_User.php',
@@ -196,10 +198,10 @@ class ComposerStaticInit7463cc922209bc9bad4bfd31ce1c00bf
196
  public static function getInitializer(ClassLoader $loader)
197
  {
198
  return \Closure::bind(function () use ($loader) {
199
- $loader->prefixLengthsPsr4 = ComposerStaticInit7463cc922209bc9bad4bfd31ce1c00bf::$prefixLengthsPsr4;
200
- $loader->prefixDirsPsr4 = ComposerStaticInit7463cc922209bc9bad4bfd31ce1c00bf::$prefixDirsPsr4;
201
- $loader->prefixesPsr0 = ComposerStaticInit7463cc922209bc9bad4bfd31ce1c00bf::$prefixesPsr0;
202
- $loader->classMap = ComposerStaticInit7463cc922209bc9bad4bfd31ce1c00bf::$classMap;
203
 
204
  }, null, ClassLoader::class);
205
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitf211722f7d1cce246a2f7c04a769c000
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
174
  'Tribe\\Log\\Canonical_Formatter' => __DIR__ . '/../..' . '/src/Tribe/Log/Canonical_Formatter.php',
175
  'Tribe\\Log\\Monolog_Logger' => __DIR__ . '/../..' . '/src/Tribe/Log/Monolog_Logger.php',
176
  'Tribe\\Log\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Log/Service_Provider.php',
177
+ 'Tribe\\Models\\Post_Types\\Base' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Base.php',
178
+ 'Tribe\\Models\\Post_Types\\Nothing' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Nothing.php',
179
  'Tribe\\PUE\\Update_Prevention' => __DIR__ . '/../..' . '/src/Tribe/PUE/Update_Prevention.php',
180
  'Tribe\\Service_Providers\\PUE' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/PUE.php',
181
  'Tribe\\Traits\\Cache_User' => __DIR__ . '/../..' . '/src/Tribe/Traits/Cache_User.php',
198
  public static function getInitializer(ClassLoader $loader)
199
  {
200
  return \Closure::bind(function () use ($loader) {
201
+ $loader->prefixLengthsPsr4 = ComposerStaticInitf211722f7d1cce246a2f7c04a769c000::$prefixLengthsPsr4;
202
+ $loader->prefixDirsPsr4 = ComposerStaticInitf211722f7d1cce246a2f7c04a769c000::$prefixDirsPsr4;
203
+ $loader->prefixesPsr0 = ComposerStaticInitf211722f7d1cce246a2f7c04a769c000::$prefixesPsr0;
204
+ $loader->classMap = ComposerStaticInitf211722f7d1cce246a2f7c04a769c000::$classMap;
205
 
206
  }, null, ClassLoader::class);
207
  }
common/vendor/composer/installed.json CHANGED
@@ -49,17 +49,17 @@
49
  },
50
  {
51
  "name": "lucatume/di52",
52
- "version": "2.0.10",
53
- "version_normalized": "2.0.10.0",
54
  "source": {
55
  "type": "git",
56
  "url": "https://github.com/lucatume/di52.git",
57
- "reference": "1db42c08914ecc6c7d9ba86eeeb465f4eee7858c"
58
  },
59
  "dist": {
60
  "type": "zip",
61
- "url": "https://api.github.com/repos/lucatume/di52/zipball/1db42c08914ecc6c7d9ba86eeeb465f4eee7858c",
62
- "reference": "1db42c08914ecc6c7d9ba86eeeb465f4eee7858c",
63
  "shasum": ""
64
  },
65
  "require": {
@@ -70,7 +70,7 @@
70
  "phpunit/phpunit-mock-objects-php52": "dev-1.1.0-php52",
71
  "phpunit/phpunit-php52": "dev-3.6.12-php52"
72
  },
73
- "time": "2018-10-29T06:23:41+00:00",
74
  "type": "library",
75
  "installation-source": "dist",
76
  "autoload": {
49
  },
50
  {
51
  "name": "lucatume/di52",
52
+ "version": "2.0.11",
53
+ "version_normalized": "2.0.11.0",
54
  "source": {
55
  "type": "git",
56
  "url": "https://github.com/lucatume/di52.git",
57
+ "reference": "1dfc848d87564fa7b8cfcec2c03842f0bd58fdd6"
58
  },
59
  "dist": {
60
  "type": "zip",
61
+ "url": "https://api.github.com/repos/lucatume/di52/zipball/1dfc848d87564fa7b8cfcec2c03842f0bd58fdd6",
62
+ "reference": "1dfc848d87564fa7b8cfcec2c03842f0bd58fdd6",
63
  "shasum": ""
64
  },
65
  "require": {
70
  "phpunit/phpunit-mock-objects-php52": "dev-1.1.0-php52",
71
  "phpunit/phpunit-php52": "dev-3.6.12-php52"
72
  },
73
+ "time": "2019-09-26T07:30:57+00:00",
74
  "type": "library",
75
  "installation-source": "dist",
76
  "autoload": {
common/vendor/lucatume/di52/src/tad/DI52/Container.php CHANGED
@@ -313,6 +313,10 @@ class tad_DI52_Container implements ArrayAccess {
313
  try {
314
  $instance = $this->build($classOrInterface);
315
  } catch (Exception $e) {
 
 
 
 
316
  throw new RuntimeException("'{$classOrInterface}' is not a bound alias or an existing class.");
317
  }
318
  } else {
@@ -786,7 +790,7 @@ class tad_DI52_Container implements ArrayAccess {
786
 
787
  if (null === $class) {
788
  if (!$parameter->isDefaultValueAvailable()) {
789
- throw new RuntimeException("parameter '{$parameter->name}' of '{$this->resolving}::__construct' does not have a default value.");
790
  }
791
  return $parameter->getDefaultValue();
792
  }
@@ -795,7 +799,7 @@ class tad_DI52_Container implements ArrayAccess {
795
 
796
  if (!$this->isBound($parameterClass) && !$parameter->getClass()->isInstantiable()) {
797
  if (!$parameter->isDefaultValueAvailable()) {
798
- throw new RuntimeException("parameter '{$parameter->name}' of '{$this->resolving}::__construct' does not have a default value.");
799
  }
800
  return $parameter->getDefaultValue();
801
  }
313
  try {
314
  $instance = $this->build($classOrInterface);
315
  } catch (Exception $e) {
316
+ if ( $e instanceof ReflectionException ) {
317
+ throw $e;
318
+ }
319
+
320
  throw new RuntimeException("'{$classOrInterface}' is not a bound alias or an existing class.");
321
  }
322
  } else {
790
 
791
  if (null === $class) {
792
  if (!$parameter->isDefaultValueAvailable()) {
793
+ throw new ReflectionException("parameter '{$parameter->name}' of '{$this->resolving}::__construct' does not have a default value.");
794
  }
795
  return $parameter->getDefaultValue();
796
  }
799
 
800
  if (!$this->isBound($parameterClass) && !$parameter->getClass()->isInstantiable()) {
801
  if (!$parameter->isDefaultValueAvailable()) {
802
+ throw new ReflectionException("parameter '{$parameter->name}' of '{$this->resolving}::__construct' does not have a default value.");
803
  }
804
  return $parameter->getDefaultValue();
805
  }
event-tickets.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Event Tickets
4
  Plugin URI: http://m.tri.be/1acb
5
  Description: Event Tickets allows you to sell basic tickets and collect RSVPs from any post, page, or event.
6
- Version: 4.10.8
7
  Author: Modern Tribe, Inc.
8
  Author URI: http://m.tri.be/28
9
  License: GPLv2 or later
@@ -40,6 +40,9 @@ define( 'EVENT_TICKETS_MAIN_PLUGIN_FILE', __FILE__ );
40
  // Load the required php min version functions
41
  require_once dirname( EVENT_TICKETS_MAIN_PLUGIN_FILE ) . '/src/functions/php-min-version.php';
42
 
 
 
 
43
  /**
44
  * Verifies if we need to warn the user about min PHP version and bail to avoid fatals
45
  */
3
  Plugin Name: Event Tickets
4
  Plugin URI: http://m.tri.be/1acb
5
  Description: Event Tickets allows you to sell basic tickets and collect RSVPs from any post, page, or event.
6
+ Version: 4.10.9
7
  Author: Modern Tribe, Inc.
8
  Author URI: http://m.tri.be/28
9
  License: GPLv2 or later
40
  // Load the required php min version functions
41
  require_once dirname( EVENT_TICKETS_MAIN_PLUGIN_FILE ) . '/src/functions/php-min-version.php';
42
 
43
+ // Load the Composer autoload file.
44
+ require_once dirname( EVENT_TICKETS_MAIN_PLUGIN_FILE ) . '/vendor/autoload.php';
45
+
46
  /**
47
  * Verifies if we need to warn the user about min PHP version and bail to avoid fatals
48
  */
lang/event-tickets-el.mo CHANGED
Binary file
lang/event-tickets-ru_RU.mo CHANGED
Binary file
lang/event-tickets.pot CHANGED
@@ -2,19 +2,19 @@
2
  # This file is distributed under the same license as the Event Tickets package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Event Tickets 4.10.8\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/event-tickets\n"
7
- "POT-Creation-Date: 2019-09-08 14:46:38+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: 2019-09-08 14:46\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
15
- #. #-#-#-#-# event-tickets.pot (Event Tickets 4.10.8) #-#-#-#-#
16
  #. Plugin Name of the plugin/theme
17
- #: event-tickets.php:59 src/Tribe/Main.php:644 src/Tribe/Privacy.php:32
18
  msgid "Event Tickets"
19
  msgstr ""
20
 
@@ -36,7 +36,7 @@ msgid "Attendees"
36
  msgstr ""
37
 
38
  #: src/Tribe/Admin/Move_Ticket_Types.php:28
39
- msgid "Move Ticket Types"
40
  msgstr ""
41
 
42
  #: src/Tribe/Admin/Move_Ticket_Types.php:72
@@ -44,32 +44,31 @@ msgstr ""
44
  msgid "All supported types"
45
  msgstr ""
46
 
47
- #: src/Tribe/Admin/Move_Ticket_Types.php:103
48
  msgid ""
49
- "Ticket type could not be moved: the ticket type or destination post was "
50
- "invalid."
51
  msgstr ""
52
 
53
- #: src/Tribe/Admin/Move_Ticket_Types.php:109
54
- msgid "Ticket type could not be moved: unexpected failure during reassignment."
55
  msgstr ""
56
 
57
- #: src/Tribe/Admin/Move_Ticket_Types.php:115
58
  msgid ""
59
- "Ticket type %1$s for %2$s was successfully moved to %3$s. All previously "
60
- "sold tickets of this type have been transferred to %3$s. Please adjust "
61
- "capacity and stock manually as needed. %1$s ticket holders have received an "
62
- "email notifying them of the change. You may now close this window!"
63
  msgstr ""
64
 
65
- #: src/Tribe/Admin/Move_Ticket_Types.php:205
66
  msgid ""
67
- "Ticket type was moved to <a href=\"%1$s\" target=\"_blank\">%2$s</a> from <a "
68
- "href=\"%3$s\" target=\"_blank\">%4$s</a>"
69
  msgstr ""
70
 
71
- #: src/Tribe/Admin/Move_Ticket_Types.php:305
72
- #: src/Tribe/Admin/Move_Tickets.php:738
73
  msgid "Changes to your tickets from %s"
74
  msgstr ""
75
 
@@ -104,29 +103,28 @@ msgctxt "attendee screen bulk actions"
104
  msgid "Move"
105
  msgstr ""
106
 
107
- #: src/Tribe/Admin/Move_Tickets.php:438
108
  msgid ""
109
- "Tickets could not be moved: valid ticket IDs or a destination ID were not "
110
  "provided."
111
  msgstr ""
112
 
113
- #: src/Tribe/Admin/Move_Tickets.php:446
114
  msgid ""
115
- "Tickets could not be moved: there was an unexpected failure during "
116
- "reassignment."
117
  msgstr ""
118
 
119
- #: src/Tribe/Admin/Move_Tickets.php:454
120
  msgctxt "moved tickets success message fragment"
121
  msgid "assigned to %s"
122
  msgstr ""
123
 
124
- #: src/Tribe/Admin/Move_Tickets.php:461
125
  msgctxt "moved tickets success message fragment"
126
  msgid "moved to %s and"
127
  msgstr ""
128
 
129
- #: src/Tribe/Admin/Move_Tickets.php:468
130
  msgid ""
131
  "%1$d attendee for %2$s was successfully %3$s. By default, we adjust capacity "
132
  "and stock, however, we recommend reviewing each as needed to ensure numbers "
@@ -140,11 +138,11 @@ msgid_plural ""
140
  msgstr[0] ""
141
  msgstr[1] ""
142
 
143
- #: src/Tribe/Admin/Move_Tickets.php:613
144
  msgid "This ticket was moved to %1$s %2$s from %3$s %4$s"
145
  msgstr ""
146
 
147
- #: src/Tribe/Admin/Move_Tickets.php:800
148
  msgid "This ticket was moved to %1$s from %2$s"
149
  msgstr ""
150
 
@@ -169,12 +167,6 @@ msgstr ""
169
  msgid "No history available"
170
  msgstr ""
171
 
172
- #: src/Tribe/Admin/Ticket_Settings.php:22
173
- #: src/Tribe/Commerce/PayPal/Main.php:435 src/Tribe/Metabox.php:53
174
- #: src/admin-views/editor/list-table.php:30
175
- msgid "Tickets"
176
- msgstr ""
177
-
178
  #: src/Tribe/Admin/Views/Ticketed.php:47
179
  msgid "Ticketed"
180
  msgstr ""
@@ -183,29 +175,29 @@ msgstr ""
183
  msgid "Unticketed"
184
  msgstr ""
185
 
186
- #: src/Tribe/Assets.php:53 src/views/tickets/tpp-success.php:95
187
- msgid "Ticket header image"
188
  msgstr ""
189
 
190
- #: src/Tribe/Assets.php:54
191
- msgid "Set as ticket header"
192
  msgstr ""
193
 
194
- #: src/Tribe/Assets.php:112
195
  msgid "Are you sure you want to delete this ticket? This cannot be undone."
196
  msgstr ""
197
 
198
- #: src/Tribe/Assets.php:118
199
  msgid ""
200
  "It looks like you have modified your shared capacity setting but have not "
201
  "saved or updated the post."
202
  msgstr ""
203
 
204
- #: src/Tribe/Assets.php:125 src/Tribe/Metabox.php:559
205
  msgid "Please enter in without thousand separators and currency symbols."
206
  msgstr ""
207
 
208
- #: src/Tribe/Assets.php:193
209
  msgid ""
210
  "There is unsaved attendee information. Are you sure you want to continue?"
211
  msgstr ""
@@ -215,7 +207,7 @@ msgctxt "attendee summary"
215
  msgid "Deleted Attendees:"
216
  msgstr ""
217
 
218
- #: src/Tribe/Attendee_Registration/Template.php:375
219
  msgid "Attendee Registration"
220
  msgstr ""
221
 
@@ -291,7 +283,7 @@ msgstr ""
291
 
292
  #: src/Tribe/Attendees.php:501
293
  msgctxt "attendee export"
294
- msgid "Ticket #"
295
  msgstr ""
296
 
297
  #: src/Tribe/Attendees.php:502
@@ -304,8 +296,8 @@ msgctxt "attendee export"
304
  msgid "Customer Email Address"
305
  msgstr ""
306
 
307
- #: src/Tribe/Attendees.php:532 src/admin-views/tribe-options-tickets.php:236
308
- #: src/admin-views/tribe-options-tickets.php:248
309
  msgid "Yes"
310
  msgstr ""
311
 
@@ -349,11 +341,6 @@ msgstr ""
349
  msgid "Number of attendees per page:"
350
  msgstr ""
351
 
352
- #: src/Tribe/Attendees_Table.php:116
353
- msgctxt "attendee table"
354
- msgid "Ticket"
355
- msgstr ""
356
-
357
  #: src/Tribe/Attendees_Table.php:117
358
  msgctxt "attendee table"
359
  msgid "Primary Information"
@@ -419,7 +406,7 @@ msgstr ""
419
  #: src/Tribe/Commerce/PayPal/Orders/Table.php:100 src/Tribe/Privacy.php:164
420
  #: src/Tribe/Privacy.php:445 src/Tribe/Privacy.php:541
421
  #: src/admin-views/admin-welcome-message.php:62
422
- #: src/views/blocks/rsvp/form/email.php:32 src/views/tickets/rsvp.php:168
423
  msgid "Email"
424
  msgstr ""
425
 
@@ -440,34 +427,42 @@ msgid "No matching attendees found."
440
  msgstr ""
441
 
442
  #: src/Tribe/Attendees_Table.php:979
 
443
  msgid "Search by Purchaser Name"
444
  msgstr ""
445
 
446
  #: src/Tribe/Attendees_Table.php:980
 
447
  msgid "Search by Purchaser Email"
448
  msgstr ""
449
 
450
  #: src/Tribe/Attendees_Table.php:981
 
451
  msgid "Search by User ID"
452
  msgstr ""
453
 
454
  #: src/Tribe/Attendees_Table.php:982
 
455
  msgid "Search by Order Status"
456
  msgstr ""
457
 
458
  #: src/Tribe/Attendees_Table.php:983
 
459
  msgid "Search by Order ID"
460
  msgstr ""
461
 
462
  #: src/Tribe/Attendees_Table.php:984
 
463
  msgid "Search by Security Code"
464
  msgstr ""
465
 
466
  #: src/Tribe/Attendees_Table.php:985
467
- msgid "Search by Ticket ID"
 
468
  msgstr ""
469
 
470
  #: src/Tribe/Attendees_Table.php:986
 
471
  msgid "Search by Product ID"
472
  msgstr ""
473
 
@@ -476,55 +471,45 @@ msgid "Event Name or ID or Slug"
476
  msgstr ""
477
 
478
  #: src/Tribe/CSV_Importer/Column_Names.php:35
479
- msgid "Ticket Name"
480
  msgstr ""
481
 
482
  #: src/Tribe/CSV_Importer/Column_Names.php:36
483
- msgid "Ticket Description"
484
  msgstr ""
485
 
486
  #: src/Tribe/CSV_Importer/Column_Names.php:37
487
- msgid "Ticket Show Description"
488
  msgstr ""
489
 
490
  #: src/Tribe/CSV_Importer/Column_Names.php:38
491
- msgid "Ticket Start Sale Date"
492
  msgstr ""
493
 
494
  #: src/Tribe/CSV_Importer/Column_Names.php:39
495
- msgid "Ticket Start Sale Time"
496
  msgstr ""
497
 
498
  #: src/Tribe/CSV_Importer/Column_Names.php:40
499
- msgid "Ticket End Sale Date"
500
  msgstr ""
501
 
502
  #: src/Tribe/CSV_Importer/Column_Names.php:41
503
- msgid "Ticket End Sale Time"
504
  msgstr ""
505
 
506
  #: src/Tribe/CSV_Importer/Column_Names.php:42
507
- msgid "Ticket Stock"
508
  msgstr ""
509
 
510
  #: src/Tribe/CSV_Importer/Column_Names.php:43
511
- msgid "Ticket Capacity"
512
  msgstr ""
513
 
514
  #: src/Tribe/CSV_Importer/RSVP_Importer.php:250
515
  msgid "Recurring event tickets are not supported, event %s."
516
  msgstr ""
517
 
518
- #: src/Tribe/CSV_Importer/Rows.php:35
519
- msgctxt "import type"
520
- msgid "RSVPs"
521
- msgstr ""
522
-
523
- #: src/Tribe/CSV_Importer/Rows.php:49
524
- msgctxt "post type label"
525
- msgid "RSVPs"
526
- msgstr ""
527
-
528
  #: src/Tribe/Commerce/Currency.php:189
529
  msgid "Australian Dollar (AUD)"
530
  msgstr ""
@@ -625,17 +610,18 @@ msgstr ""
625
  msgid "U.S. Dollar (USD)"
626
  msgstr ""
627
 
628
- #: src/Tribe/Commerce/PayPal/Attendance_Totals.php:76
 
629
  msgctxt "attendee summary"
630
- msgid "Total Tickets:"
631
  msgstr ""
632
 
633
- #: src/Tribe/Commerce/PayPal/Attendance_Totals.php:77
634
  msgctxt "attendee summary"
635
  msgid "Complete:"
636
  msgstr ""
637
 
638
- #: src/Tribe/Commerce/PayPal/Attendance_Totals.php:78
639
  msgctxt "attendee summary"
640
  msgid "Cancelled:"
641
  msgstr ""
@@ -644,47 +630,46 @@ msgstr ""
644
  msgid "pending"
645
  msgstr ""
646
 
647
- #: src/Tribe/Commerce/PayPal/Errors.php:23
648
  msgid "There was an error"
649
  msgstr ""
650
 
651
- #: src/Tribe/Commerce/PayPal/Errors.php:24
652
  msgid "Attendee email and/or full name is missing"
653
  msgstr ""
654
 
655
- #: src/Tribe/Commerce/PayPal/Errors.php:25
656
  msgid ""
657
- "Trying to oversell a ticket but the current oversell policy does not allow it"
658
  msgstr ""
659
 
660
- #: src/Tribe/Commerce/PayPal/Errors.php:26
661
- msgid "Ticket quantity is 0"
662
  msgstr ""
663
 
664
- #: src/Tribe/Commerce/PayPal/Errors.php:29
665
  msgid ""
666
- "In order to purchase tickets, you must enter your name and a valid email "
667
- "address."
668
  msgstr ""
669
 
670
- #: src/Tribe/Commerce/PayPal/Errors.php:30
671
- msgid "You can't add more tickets than the total remaining tickets."
672
  msgstr ""
673
 
674
- #: src/Tribe/Commerce/PayPal/Errors.php:31
675
- msgid "You should add at least one ticket."
676
  msgstr ""
677
 
678
- #: src/Tribe/Commerce/PayPal/Errors.php:34
679
  msgid ""
680
  "Your order is currently processing. Once completed, you'll receive your "
681
- "ticket(s) in an email."
682
  msgstr ""
683
 
684
- #: src/Tribe/Commerce/PayPal/Frontend/Tickets_Form.php:76
685
  msgid ""
686
- "Your PayPal Ticket has been received! Check your email for your PayPal "
687
- "Ticket confirmation."
688
  msgstr ""
689
 
690
  #: src/Tribe/Commerce/PayPal/Handler/IPN.php:143
@@ -721,6 +706,10 @@ msgctxt "Attendee number"
721
  msgid "Attendee %1$s"
722
  msgstr ""
723
 
 
 
 
 
724
  #: src/Tribe/Commerce/PayPal/Main.php:437
725
  msgid "Tribe Commerce Tickets"
726
  msgstr ""
@@ -733,7 +722,7 @@ msgstr ""
733
  msgid "Orders"
734
  msgstr ""
735
 
736
- #: src/Tribe/Commerce/PayPal/Main.php:1153 src/Tribe/RSVP.php:730
737
  msgid "Your tickets from %s"
738
  msgstr ""
739
 
@@ -745,31 +734,31 @@ msgstr ""
745
  msgid "Report"
746
  msgstr ""
747
 
748
- #: src/Tribe/Commerce/PayPal/Main.php:1884 src/Tribe/RSVP.php:1698
749
  msgid "Return to the %1$sAttendees Report%2$s."
750
  msgstr ""
751
 
752
- #: src/Tribe/Commerce/PayPal/Main.php:1891 src/Tribe/RSVP.php:1705
753
  msgid "Post updated. %1$s"
754
  msgstr ""
755
 
756
- #: src/Tribe/Commerce/PayPal/Main.php:1895 src/Tribe/RSVP.php:1709
757
  msgid "Post published. %1$s"
758
  msgstr ""
759
 
760
- #: src/Tribe/Commerce/PayPal/Main.php:1898 src/Tribe/RSVP.php:1712
761
  msgid "Post submitted."
762
  msgstr ""
763
 
764
- #: src/Tribe/Commerce/PayPal/Main.php:1899 src/Tribe/RSVP.php:1713
765
  msgid "Post scheduled."
766
  msgstr ""
767
 
768
- #: src/Tribe/Commerce/PayPal/Main.php:1900 src/Tribe/RSVP.php:1714
769
  msgid "Post draft updated."
770
  msgstr ""
771
 
772
- #: src/Tribe/Commerce/PayPal/Main.php:2589 src/Tribe/RSVP.php:1370
773
  msgid "(deleted)"
774
  msgstr ""
775
 
@@ -818,7 +807,7 @@ msgid "Order"
818
  msgstr ""
819
 
820
  #: src/Tribe/Commerce/PayPal/Orders/Table.php:99
821
- #: src/views/tickets/email.php:406
822
  msgid "Purchaser"
823
  msgstr ""
824
 
@@ -851,37 +840,36 @@ msgstr ""
851
  msgid "No matching orders found."
852
  msgstr ""
853
 
854
- #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:110
855
  msgid "An event"
856
  msgstr ""
857
 
858
- #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:122
859
  msgid "in your PayPal account"
860
  msgstr ""
861
 
862
- #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:124
863
  msgid ""
864
- "%1$s is oversold: there are more tickets sold than the available capacity. "
865
- "This can occur when the PayPal transaction is not completed immediately, "
866
- "delaying the decrease in ticket availability. Order %2$s includes %3$s "
867
- "ticket(s). There are only %4$s ticket(s) left. Ticket emails have not yet "
868
- "been sent for this order. Choose how to process this order from the options "
869
- "below."
870
  msgstr ""
871
 
872
- #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:217
873
  msgid ""
874
  "Create attendee records and send emails for all tickets in this order "
875
  "(overselling the event)."
876
  msgstr ""
877
 
878
- #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:224
879
  msgid ""
880
  "Delete all attendees for this order and do not email tickets. You may also "
881
  "want to refund the order %1$sin your PayPal account%2$s."
882
  msgstr ""
883
 
884
- #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:242
885
  msgid "Process order"
886
  msgstr ""
887
 
@@ -936,136 +924,137 @@ msgid "The ticket post ID"
936
  msgstr ""
937
 
938
  #: src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php:56
939
- #: src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php:228
940
  msgid "Invalid nonce"
941
  msgstr ""
942
 
943
  #: src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php:66
944
- #: src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php:242
945
- #: src/Tribe/Metabox.php:271 src/Tribe/Metabox.php:317
946
- #: src/Tribe/Metabox.php:355 src/Tribe/Metabox.php:392
947
  msgid "Commerce Module invalid"
948
  msgstr ""
949
 
950
- #: src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php:273
951
- msgid "Ticket was not able to be updated"
952
  msgstr ""
953
 
954
  #: src/Tribe/Editor.php:209
955
  msgid "Tickets Blocks"
956
  msgstr ""
957
 
958
- #: src/Tribe/JSON_LD/Order.php:132 src/Tribe/RSVP.php:1033
959
  #: src/admin-views/editor/column-body-price.php:18
960
  msgid "Free"
961
  msgstr ""
962
 
963
- #: src/Tribe/Main.php:401
 
 
 
 
 
964
  msgid ""
965
  "When The Events Calendar and Event Tickets are both activated, The Events "
966
  "Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
967
  msgstr ""
968
 
969
- #: src/Tribe/Main.php:464
970
  msgid ""
971
  "Sorry, Event Tickets requires WordPress %s or higher. Please upgrade your "
972
  "WordPress install."
973
  msgstr ""
974
 
975
- #: src/Tribe/Main.php:468
976
  msgid ""
977
  "Sorry, Event Tickets requires PHP %s or higher. Talk to your Web host about "
978
  "moving you to a newer version of PHP."
979
  msgstr ""
980
 
981
- #: src/Tribe/Main.php:576
982
  msgid "Support for Event Tickets"
983
  msgstr ""
984
 
985
- #: src/Tribe/Main.php:578
986
  msgid "Settings overview"
987
  msgstr ""
988
 
989
- #: src/Tribe/Main.php:579
990
  msgid "Features overview"
991
  msgstr ""
992
 
993
- #: src/Tribe/Main.php:580
994
  msgid "Troubleshooting common problems"
995
  msgstr ""
996
 
997
- #: src/Tribe/Main.php:581
998
  msgid "Customizing Event Tickets"
999
  msgstr ""
1000
 
1001
- #: src/Tribe/Main.php:598 src/admin-views/admin-welcome-message.php:34
1002
  msgid "New User Primer"
1003
  msgstr ""
1004
 
1005
- #: src/Tribe/Main.php:600
 
1006
  msgid ""
1007
- "We are committed to helping you sell tickets for your event. Check out our "
1008
- "handy %s to get started."
1009
  msgstr ""
1010
 
1011
- #: src/Tribe/Main.php:617
1012
  msgid "open-source forum on WordPress.org"
1013
  msgstr ""
1014
 
1015
- #: src/Tribe/Main.php:618
1016
  msgid ""
1017
  "If you have tried the above steps and are still having trouble, you can post "
1018
  "a new thread to our %s. Our support staff monitors these forums once a week "
1019
  "and would be happy to assist you there."
1020
  msgstr ""
1021
 
1022
- #: src/Tribe/Main.php:620
1023
  msgid "premium support on our website"
1024
  msgstr ""
1025
 
1026
- #: src/Tribe/Main.php:621 src/admin-views/tribe-options-tickets.php:151
1027
- msgid "Events Tickets Plus"
1028
  msgstr ""
1029
 
1030
- #: src/Tribe/Main.php:622
1031
  msgid ""
1032
  "Looking for more immediate support? We offer %1$s with the purchase of any "
1033
  "of our premium plugins (like %2$s). Pick up a license and you can post there "
1034
  "directly and expect a response within 24-48 hours during weekdays."
1035
  msgstr ""
1036
 
1037
- #: src/Tribe/Main.php:624 src/Tribe/Main.php:629
1038
  msgid "post a thread"
1039
  msgstr ""
1040
 
1041
- #: src/Tribe/Main.php:625
1042
  msgid ""
1043
- "Already have Events Tickets Plus? You can %s in our premium support forums. "
1044
  "Our support team monitors the forums and will respond to your thread within "
1045
  "24-48 hours (during the week)."
1046
  msgstr ""
1047
 
1048
- #: src/Tribe/Main.php:630
1049
  msgid ""
1050
  "If you have a valid license for one of our paid plugins, you can %s in our "
1051
  "premium support forums. Our support team monitors the forums and will "
1052
  "respond to your thread within 24-48 hours (during the week)."
1053
  msgstr ""
1054
 
1055
- #: src/Tribe/Main.php:731
1056
  msgid "Welcome to Event Tickets!"
1057
  msgstr ""
1058
 
1059
- #: src/Tribe/Main.php:869
1060
  msgid "Buy"
1061
  msgstr ""
1062
 
1063
- #: src/Tribe/Main.php:869
1064
- msgctxt "button text"
1065
- msgid "RSVP"
1066
- msgstr ""
1067
-
1068
- #: src/Tribe/Main.php:948
1069
  msgid ""
1070
  "When Event Tickets and Event Tickets Plus are both activated, Event Tickets "
1071
  "Plus must be running version %1$s or greater. Please %2$smanually update now"
@@ -1076,13 +1065,13 @@ msgstr ""
1076
  msgid "Invalid Post ID"
1077
  msgstr ""
1078
 
1079
- #: src/Tribe/Metabox.php:188 src/Tribe/Metabox.php:249
1080
- #: src/Tribe/Metabox.php:301
1081
  msgid "Invalid parent Post"
1082
  msgstr ""
1083
 
1084
  #: src/Tribe/Metabox.php:198
1085
- msgid "Failed to Add the Ticket, Refresh the Page to try again."
1086
  msgstr ""
1087
 
1088
  #: src/Tribe/Metabox.php:202
@@ -1090,22 +1079,22 @@ msgid "Commerce Provider invalid"
1090
  msgstr ""
1091
 
1092
  #: src/Tribe/Metabox.php:220
1093
- msgid "Failed to Add the Ticket"
1094
  msgstr ""
1095
 
1096
- #: src/Tribe/Metabox.php:255 src/Tribe/Metabox.php:307
1097
- msgid "Invalid Ticket"
1098
  msgstr ""
1099
 
1100
- #: src/Tribe/Metabox.php:265
1101
- msgid "Failed to Edit the Ticket, Refresh the Page to try again."
1102
  msgstr ""
1103
 
1104
- #: src/Tribe/Metabox.php:311
1105
- msgid "Failed to Delete the Ticket, Refresh the Page to try again."
1106
  msgstr ""
1107
 
1108
- #: src/Tribe/Metabox.php:349 src/Tribe/Metabox.php:386
1109
  msgid "The attendee ID is missing from the request parameters."
1110
  msgstr ""
1111
 
@@ -1130,7 +1119,7 @@ msgid "RSVP Title"
1130
  msgstr ""
1131
 
1132
  #: src/Tribe/Privacy.php:159 src/Tribe/Privacy.php:440
1133
- #: src/views/blocks/rsvp/form/name.php:31 src/views/tickets/rsvp.php:160
1134
  msgid "Full Name"
1135
  msgstr ""
1136
 
@@ -1168,7 +1157,7 @@ msgstr ""
1168
  msgid "Order Number"
1169
  msgstr ""
1170
 
1171
- #: src/Tribe/Privacy.php:524 src/views/tickets/tpp-success.php:134
1172
  msgid "Order Total"
1173
  msgstr ""
1174
 
@@ -1254,7 +1243,7 @@ msgstr ""
1254
  #: src/Tribe/REST/V1/Documentation/Attendee_Definition_Provider.php:105
1255
  msgid ""
1256
  "If the attendee is for an RSVP ticket, this will be set to true if he/she is "
1257
- "Going”, false otherwise"
1258
  msgstr ""
1259
 
1260
  #: src/Tribe/REST/V1/Documentation/Attendee_Definition_Provider.php:112
@@ -1262,23 +1251,23 @@ msgid "The attendee information; requires ET+"
1262
  msgstr ""
1263
 
1264
  #: src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php:20
1265
- msgid "The ticket available capacity percentage"
1266
  msgstr ""
1267
 
1268
  #: src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php:24
1269
- msgid "The ticket max capacity"
1270
  msgstr ""
1271
 
1272
  #: src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php:28
1273
- msgid "The ticket current available capacity"
1274
  msgstr ""
1275
 
1276
  #: src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php:32
1277
- msgid "The ticket sale count"
1278
  msgstr ""
1279
 
1280
  #: src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php:36
1281
- msgid "The ticket pending count"
1282
  msgstr ""
1283
 
1284
  #: src/Tribe/REST/V1/Documentation/Checkin_Details_Definition_Provider.php:20
@@ -1286,7 +1275,7 @@ msgid "The time the attendee checked in"
1286
  msgstr ""
1287
 
1288
  #: src/Tribe/REST/V1/Documentation/Checkin_Details_Definition_Provider.php:27
1289
- msgid "The check-in source for the attendee; e.g. kiosk or site"
1290
  msgstr ""
1291
 
1292
  #: src/Tribe/REST/V1/Documentation/Checkin_Details_Definition_Provider.php:31
@@ -1328,11 +1317,11 @@ msgid "The payment date"
1328
  msgstr ""
1329
 
1330
  #: src/Tribe/REST/V1/Documentation/RSVP_Report_Definition_Provider.php:20
1331
- msgid "How many attendees are Going"
1332
  msgstr ""
1333
 
1334
  #: src/Tribe/REST/V1/Documentation/RSVP_Report_Definition_Provider.php:24
1335
- msgid "How many attendees are Not going"
1336
  msgstr ""
1337
 
1338
  #: src/Tribe/REST/V1/Documentation/Ticket_Definition_Provider.php:20
@@ -1831,11 +1820,6 @@ msgstr ""
1831
  msgid "An error happened while building the response: "
1832
  msgstr ""
1833
 
1834
- #: src/Tribe/RSVP/Attendance_Totals.php:41
1835
- msgctxt "attendee summary"
1836
- msgid "Total RSVPs:"
1837
- msgstr ""
1838
-
1839
  #: src/Tribe/RSVP/Attendance_Totals.php:42
1840
  msgctxt "attendee summary"
1841
  msgid "Going:"
@@ -1846,11 +1830,6 @@ msgctxt "attendee summary"
1846
  msgid "Not Going:"
1847
  msgstr ""
1848
 
1849
- #: src/Tribe/RSVP.php:168
1850
- msgctxt "ticket provider"
1851
- msgid "RSVP"
1852
- msgstr ""
1853
-
1854
  #: src/Tribe/RSVP.php:336
1855
  msgid "RSVP Tickets"
1856
  msgstr ""
@@ -1859,21 +1838,25 @@ msgstr ""
1859
  msgid "RSVP Ticket"
1860
  msgstr ""
1861
 
1862
- #: src/Tribe/RSVP.php:818
 
 
 
 
1863
  msgid "You confirmed you will not be attending %s"
1864
  msgstr ""
1865
 
1866
- #: src/Tribe/RSVP.php:1131 src/views/blocks/rsvp/messages/success.php:21
1867
  msgid ""
1868
- "Your RSVP has been received! Check your email for your RSVP confirmation."
1869
  msgstr ""
1870
 
1871
- #: src/Tribe/RSVP.php:1137
1872
- msgid "You can't RSVP more than the total remaining tickets."
1873
  msgstr ""
1874
 
1875
- #: src/Tribe/RSVP.php:1142
1876
- msgid "In order to RSVP, you must enter your name and a valid email address."
1877
  msgstr ""
1878
 
1879
  #: src/Tribe/Status/Abstract_Commerce.php:168
@@ -1920,52 +1903,47 @@ msgstr ""
1920
  msgid "Capacity"
1921
  msgstr ""
1922
 
1923
- #: src/Tribe/Tickets.php:405
1924
- msgid "Delete RSVP"
1925
- msgstr ""
1926
-
1927
- #: src/Tribe/Tickets.php:405
1928
- msgid "Delete Ticket"
1929
- msgstr ""
1930
-
1931
- #: src/Tribe/Tickets.php:480
1932
- msgid "Move RSVP"
1933
  msgstr ""
1934
 
1935
- #: src/Tribe/Tickets.php:480
1936
- msgid "Move Ticket"
1937
  msgstr ""
1938
 
1939
- #: src/Tribe/Tickets.php:1539
1940
- msgid "Shared capacity with other tickets"
 
1941
  msgstr ""
1942
 
1943
- #: src/Tribe/Tickets.php:1540
1944
- msgid "Set capacity for this ticket only"
 
1945
  msgstr ""
1946
 
1947
- #: src/Tribe/Tickets.php:2183
1948
- msgid "Tickets are not available as this %s has passed."
1949
  msgstr ""
1950
 
1951
- #: src/Tribe/Tickets.php:2219
1952
- msgid "Tickets will be available on "
1953
  msgstr ""
1954
 
1955
- #: src/Tribe/Tickets.php:2225
1956
  msgid " at "
1957
  msgstr ""
1958
 
1959
- #: src/Tribe/Tickets.php:2228 src/views/blocks/tickets/content-inactive.php:18
1960
- msgid "Tickets are not yet available"
1961
  msgstr ""
1962
 
1963
- #: src/Tribe/Tickets.php:2231
1964
- msgid "Tickets are no longer available."
1965
  msgstr ""
1966
 
1967
- #: src/Tribe/Tickets.php:2233
1968
- msgid "There are no tickets available at this time."
1969
  msgstr ""
1970
 
1971
  #: src/Tribe/Tickets_Handler.php:84
@@ -1975,27 +1953,41 @@ msgstr ""
1975
  msgid "Unlimited"
1976
  msgstr ""
1977
 
1978
- #: src/Tribe/Tickets_View.php:803 src/views/blocks/attendees/view-link.php:42
1979
- msgctxt "Singular and plural texts for RSVP(s)"
1980
- msgid "RSVP"
1981
- msgid_plural "RSVPs"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1982
  msgstr[0] ""
1983
  msgstr[1] ""
1984
 
1985
- #: src/Tribe/Tickets_View.php:807 src/views/blocks/attendees/view-link.php:46
1986
- msgctxt "Singular and plural texts for Ticket(s)"
1987
- msgid "Ticket"
1988
- msgid_plural "Tickets"
1989
  msgstr[0] ""
1990
  msgstr[1] ""
1991
 
1992
- #: src/Tribe/Tickets_View.php:815 src/views/blocks/attendees/view-link.php:55
1993
- #: src/views/tickets/view-link.php:53
1994
- msgid " and "
1995
  msgstr ""
1996
 
1997
- #: src/Tribe/Tickets_View.php:874
1998
- msgid "This RSVP is no longer active."
 
1999
  msgstr ""
2000
 
2001
  #: src/admin-views/admin-welcome-message.php:7
@@ -2172,11 +2164,6 @@ msgstr ""
2172
  msgid "Price:"
2173
  msgstr ""
2174
 
2175
- #: src/admin-views/editor/column-body-price.php:16
2176
- #: src/views/blocks/rsvp/icon.php:21
2177
- msgid "RSVP"
2178
- msgstr ""
2179
-
2180
  #: src/admin-views/editor/column-head-price.php:1
2181
  #: src/views/registration/summary/tickets-header.php:19
2182
  msgid "Price"
@@ -2222,7 +2209,7 @@ msgid "at"
2222
  msgstr ""
2223
 
2224
  #: src/admin-views/editor/fieldset/advanced.php:95
2225
- msgid "Ticket start date"
2226
  msgstr ""
2227
 
2228
  #: src/admin-views/editor/fieldset/advanced.php:97
@@ -2231,8 +2218,7 @@ msgid "HH:MM"
2231
  msgstr ""
2232
 
2233
  #: src/admin-views/editor/fieldset/advanced.php:98
2234
- msgid ""
2235
- "If you do not set a start sale date, tickets will be available immediately."
2236
  msgstr ""
2237
 
2238
  #: src/admin-views/editor/fieldset/advanced.php:102
@@ -2241,17 +2227,17 @@ msgid "End sale:"
2241
  msgstr ""
2242
 
2243
  #: src/admin-views/editor/fieldset/advanced.php:124
2244
- msgid "Ticket end date"
2245
  msgstr ""
2246
 
2247
  #: src/admin-views/editor/fieldset/advanced.php:130
2248
  msgid ""
2249
- "If you do not set an end sale date, tickets will be available until the "
2250
- "event begins."
2251
  msgstr ""
2252
 
2253
  #: src/admin-views/editor/fieldset/advanced.php:132
2254
- msgid "If you do not set an end sale date, tickets sales will never end."
2255
  msgstr ""
2256
 
2257
  #: src/admin-views/editor/fieldset/history.php:27
@@ -2263,11 +2249,13 @@ msgid "Ti"
2263
  msgstr ""
2264
 
2265
  #: src/admin-views/editor/fieldset/price.php:7
2266
- msgid "Ticket Price must be greater than zero."
 
2267
  msgstr ""
2268
 
2269
  #: src/admin-views/editor/fieldset/price.php:21
2270
- msgid "Leave blank for free tickets"
 
2271
  msgstr ""
2272
 
2273
  #: src/admin-views/editor/fieldset/price.php:99
@@ -2308,7 +2296,8 @@ msgid ""
2308
  msgstr ""
2309
 
2310
  #: src/admin-views/editor/list-row.php:43
2311
- msgid "Ticket Type:"
 
2312
  msgstr ""
2313
 
2314
  #: src/admin-views/editor/list-row.php:91
@@ -2321,8 +2310,9 @@ msgstr ""
2321
  msgid "Available:"
2322
  msgstr ""
2323
 
2324
- #: src/admin-views/editor/list-row.php:107
2325
- msgid "( Ticket ID: %d )"
 
2326
  msgstr ""
2327
 
2328
  #: src/admin-views/editor/list-table.php:40
@@ -2346,15 +2336,18 @@ msgid "View Attendees"
2346
  msgstr ""
2347
 
2348
  #: src/admin-views/editor/panel/list.php:66
2349
- msgid "New ticket"
 
2350
  msgstr ""
2351
 
2352
  #: src/admin-views/editor/panel/list.php:72
2353
- msgid "Add a new RSVP"
 
2354
  msgstr ""
2355
 
2356
  #: src/admin-views/editor/panel/list.php:74
2357
- msgid "New RSVP"
 
2358
  msgstr ""
2359
 
2360
  #: src/admin-views/editor/panel/list.php:79
@@ -2362,52 +2355,49 @@ msgid "Settings"
2362
  msgstr ""
2363
 
2364
  #: src/admin-views/editor/panel/settings.php:14
2365
- #: src/admin-views/tribe-options-tickets.php:64
2366
- msgid "Ticket Settings"
2367
  msgstr ""
2368
 
2369
- #: src/admin-views/editor/panel/settings.php:41
2370
- msgid "Ticket header image:"
 
2371
  msgstr ""
2372
 
2373
- #: src/admin-views/editor/panel/settings.php:43
 
2374
  msgid ""
2375
- "Select an image from your Media Library to display on emailed tickets. For "
2376
- "best results, use a .jpg, .png, or .gif at least 1160px wide."
2377
  msgstr ""
2378
 
2379
- #: src/admin-views/editor/panel/settings.php:51 src/admin-views/meta-box.php:46
2380
  msgid "Select an Image"
2381
  msgstr ""
2382
 
2383
- #: src/admin-views/editor/panel/settings.php:67 src/admin-views/meta-box.php:54
2384
  msgid "Remove"
2385
  msgstr ""
2386
 
2387
- #: src/admin-views/editor/panel/settings.php:80
2388
  msgid "Save settings"
2389
  msgstr ""
2390
 
2391
- #: src/admin-views/editor/panel/settings.php:81
2392
- #: src/admin-views/editor/panel/ticket.php:199 src/admin-views/meta-box.php:240
2393
  msgid "Cancel"
2394
  msgstr ""
2395
 
2396
- #: src/admin-views/editor/panel/ticket.php:53 src/admin-views/meta-box.php:112
2397
- #: src/admin-views/meta-box.php:122
2398
- msgid "Add new ticket"
2399
- msgstr ""
2400
-
2401
- #: src/admin-views/editor/panel/ticket.php:61 src/admin-views/meta-box.php:123
2402
- msgid "Edit ticket"
2403
- msgstr ""
2404
-
2405
  #: src/admin-views/editor/panel/ticket.php:75
2406
- msgid "Add new RSVP"
 
2407
  msgstr ""
2408
 
 
2409
  #: src/admin-views/editor/panel/ticket.php:83
2410
- msgid "Edit RSVP"
 
2411
  msgstr ""
2412
 
2413
  #: src/admin-views/editor/panel/ticket.php:88
@@ -2415,23 +2405,27 @@ msgid "Type:"
2415
  msgstr ""
2416
 
2417
  #: src/admin-views/editor/panel/ticket.php:97
2418
- msgid "Ticket Type is a required field."
 
2419
  msgstr ""
2420
 
2421
- #: src/admin-views/editor/panel/ticket.php:99
2422
- msgid "Ticket type name shows on the front end and emailed tickets"
 
2423
  msgstr ""
2424
 
2425
- #: src/admin-views/editor/panel/ticket.php:102 src/admin-views/meta-box.php:128
2426
  msgid "Sell using:"
2427
  msgstr ""
2428
 
2429
- #: src/admin-views/editor/panel/ticket.php:181
2430
- msgid "Save ticket"
 
2431
  msgstr ""
2432
 
2433
- #: src/admin-views/editor/panel/ticket.php:190
2434
- msgid "Save RSVP"
 
2435
  msgstr ""
2436
 
2437
  #: src/admin-views/legacy-ticket-fields.php:19
@@ -2461,13 +2455,15 @@ msgid "Move"
2461
  msgstr ""
2462
 
2463
  #: src/admin-views/meta-box.php:31
 
2464
  msgid ""
2465
  "This event was created using Community Events. Are you sure you want to sell "
2466
- "tickets for it?"
2467
  msgstr ""
2468
 
2469
  #: src/admin-views/meta-box.php:42
2470
- msgid "Upload image for the ticket header."
 
2471
  msgstr ""
2472
 
2473
  #: src/admin-views/meta-box.php:43
@@ -2491,12 +2487,27 @@ msgid_plural "(%s sold)"
2491
  msgstr[0] ""
2492
  msgstr[1] ""
2493
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2494
  #: src/admin-views/meta-box.php:145
2495
- msgid "Ticket Name:"
 
2496
  msgstr ""
2497
 
2498
  #: src/admin-views/meta-box.php:152
2499
- msgid "Ticket Description:"
 
2500
  msgstr ""
2501
 
2502
  #: src/admin-views/meta-box.php:215
@@ -2510,7 +2521,8 @@ msgid ""
2510
  msgstr ""
2511
 
2512
  #: src/admin-views/meta-box.php:239
2513
- msgid "Save this ticket"
 
2514
  msgstr ""
2515
 
2516
  #: src/admin-views/move-tickets.php:19
@@ -2592,135 +2604,135 @@ msgid ""
2592
  "statuses:"
2593
  msgstr ""
2594
 
2595
- #: src/admin-views/privacy.php:14
2596
  msgid "Hello,"
2597
  msgstr ""
2598
 
2599
- #: src/admin-views/privacy.php:15
2600
  msgid ""
2601
  "This information serves as a guide on what sections need to be modified due "
2602
  "to usage of Event Tickets and its Add-ons."
2603
  msgstr ""
2604
 
2605
- #: src/admin-views/privacy.php:16
2606
  msgid ""
2607
  "You should include the information below in the correct sections of you "
2608
  "privacy policy."
2609
  msgstr ""
2610
 
2611
- #: src/admin-views/privacy.php:17
2612
  msgid "Disclaimer:"
2613
  msgstr ""
2614
 
2615
- #: src/admin-views/privacy.php:17
2616
  msgid ""
2617
  "This information is only for guidance and not to be considered as legal "
2618
  "advice."
2619
  msgstr ""
2620
 
2621
- #: src/admin-views/privacy.php:19
2622
  msgid "What personal data we collect and why we collect it"
2623
  msgstr ""
2624
 
2625
- #: src/admin-views/privacy.php:21
2626
  msgid "Event, Attendee, and Ticket Purchaser Information"
2627
  msgstr ""
2628
 
2629
- #: src/admin-views/privacy.php:23
2630
  msgid ""
2631
  "Through the usage of Event Tickets, Event Tickets Plus, and Community "
2632
  "Tickets, information may be collected and stored within your website’s "
2633
  "database."
2634
  msgstr ""
2635
 
2636
- #: src/admin-views/privacy.php:24 src/admin-views/privacy.php:40
2637
  msgid "Suggested text:"
2638
  msgstr ""
2639
 
2640
- #: src/admin-views/privacy.php:25
2641
  msgid ""
2642
- "If you create, submit, import, save, or publish event ticket information, as "
2643
- "well as RSVP or purchase tickets to events, such information is retained in "
2644
- "the local database:"
2645
  msgstr ""
2646
 
2647
- #: src/admin-views/privacy.php:28
2648
- msgid "Attendees information (RSVPs and Tickets): name and email address"
2649
  msgstr ""
2650
 
2651
- #: src/admin-views/privacy.php:29
2652
  msgid ""
2653
- "Ticket information (RSVPs and Tickets): name, email address, and ticket "
2654
- "number/SKU (via check-in page)"
2655
  msgstr ""
2656
 
2657
- #: src/admin-views/privacy.php:30
2658
- msgid "Ticket purchaser information: name and email address"
2659
  msgstr ""
2660
 
2661
- #: src/admin-views/privacy.php:31
2662
  msgid ""
2663
- "Ticket purchaser billing address, which is collected through the use of "
2664
  "WooCommerce, Easy Digital Downloads, or PayPal"
2665
  msgstr ""
2666
 
2667
- #: src/admin-views/privacy.php:34
2668
  msgid ""
2669
  "Please note: The website owner can collect nearly any Attendee Information "
2670
- "requested from ticket buyers by creating a custom registration form."
2671
  msgstr ""
2672
 
2673
- #: src/admin-views/privacy.php:36
2674
  msgid "API Keys"
2675
  msgstr ""
2676
 
2677
- #: src/admin-views/privacy.php:38
2678
  msgid ""
2679
- "Events Tickets suite offers the use of third-party API keys. The primary "
2680
  "functions are to enhance the features we've built in, some of which use "
2681
  "Google Maps and PayPal. These API keys are not supplied by Modern Tribe."
2682
  msgstr ""
2683
 
2684
- #: src/admin-views/privacy.php:42
2685
  msgid "We make use of certain API keys, in order to provide specific features."
2686
  msgstr ""
2687
 
2688
- #: src/admin-views/privacy.php:44
2689
  msgid ""
2690
  "These API keys may include the following third party services: Google Maps "
2691
  "and PayPal."
2692
  msgstr ""
2693
 
2694
- #: src/admin-views/privacy.php:46
2695
  msgid "How Long You Retain this Data"
2696
  msgstr ""
2697
 
2698
- #: src/admin-views/privacy.php:48
2699
  msgid ""
2700
  "All information (data) is retained in the local database indefinitely, "
2701
  "unless otherwise deleted."
2702
  msgstr ""
2703
 
2704
- #: src/admin-views/privacy.php:50
2705
  msgid ""
2706
  "Certain data may be exported or removed upon users request via the existing "
2707
- "Exporter or Eraser. Please note, however, that several edge cases exist in "
2708
- "which we are unable to perfect the gathering and export of all data for your "
2709
- "end users. We suggest running a search in your local database, as well as "
2710
- "within the WordPress Dashboard, in order to identify all data collected and "
2711
- "stored for your specific user requests."
2712
  msgstr ""
2713
 
2714
- #: src/admin-views/privacy.php:52
2715
  msgid "Where We Send Your Data"
2716
  msgstr ""
2717
 
2718
- #: src/admin-views/privacy.php:54
2719
  msgid ""
2720
  "Modern Tribe does not send any user data outside of your website by default."
2721
  msgstr ""
2722
 
2723
- #: src/admin-views/privacy.php:56
2724
  msgid ""
2725
  "If you have extended our plugin(s) to send data to a third-party service "
2726
  "such as Eventbrite, Google Maps, or PayPal, user information may be passed "
@@ -2733,7 +2745,8 @@ msgid "Leave blank for unlimited"
2733
  msgstr ""
2734
 
2735
  #: src/admin-views/ticket-type-history.php:10
2736
- msgid "Ticket history:"
 
2737
  msgstr ""
2738
 
2739
  #: src/admin-views/ticket-type-history.php:14
@@ -2773,237 +2786,253 @@ msgstr ""
2773
  msgid "Total Tickets Ordered"
2774
  msgstr ""
2775
 
2776
- #: src/admin-views/tribe-options-tickets.php:53
2777
- msgid "Require users to log in before they RSVP"
 
 
 
 
 
 
2778
  msgstr ""
2779
 
2780
- #: src/admin-views/tribe-options-tickets.php:54
2781
- msgid "Require users to log in before they purchase tickets"
 
2782
  msgstr ""
2783
 
2784
- #: src/admin-views/tribe-options-tickets.php:68
2785
- msgid "Post types that can have tickets"
 
2786
  msgstr ""
2787
 
2788
- #: src/admin-views/tribe-options-tickets.php:84
2789
  msgid "Below the event details [default]"
2790
  msgstr ""
2791
 
2792
- #: src/admin-views/tribe-options-tickets.php:85
2793
  msgid "Above the event details"
2794
  msgstr ""
2795
 
2796
- #: src/admin-views/tribe-options-tickets.php:86
2797
  msgid "Below the event description"
2798
  msgstr ""
2799
 
2800
- #: src/admin-views/tribe-options-tickets.php:87
2801
  msgid "Above the event description"
2802
  msgstr ""
2803
 
2804
- #: src/admin-views/tribe-options-tickets.php:92
2805
- msgid "Location of RSVP form"
 
 
2806
  msgstr ""
2807
 
2808
- #: src/admin-views/tribe-options-tickets.php:93
2809
- #: src/admin-views/tribe-options-tickets.php:103
2810
  msgid "This setting only impacts events made with the classic editor."
2811
  msgstr ""
2812
 
2813
- #: src/admin-views/tribe-options-tickets.php:102
2814
- msgid "Location of Tickets form"
2815
- msgstr ""
2816
-
2817
- #: src/admin-views/tribe-options-tickets.php:112
2818
- msgid "Display # tickets left threshold"
2819
  msgstr ""
2820
 
2821
- #: src/admin-views/tribe-options-tickets.php:113
 
2822
  msgid ""
2823
- "If this number is less than the number of tickets left for sale on your "
2824
- "event, this will prevent the \"# of tickets left\" text from showing on your "
2825
- "website. You can leave this blank if you would like to always show the text."
2826
  msgstr ""
2827
 
2828
- #: src/admin-views/tribe-options-tickets.php:124
2829
  msgid "Login Requirements"
2830
  msgstr ""
2831
 
2832
- #: src/admin-views/tribe-options-tickets.php:129
 
2833
  msgid ""
2834
- "You can require that users log into your site before they are able to RSVP "
2835
- "(or buy tickets). Please review your WordPress Membership option (via the "
2836
- "General Settings admin screen) before adjusting this setting."
2837
  msgstr ""
2838
 
2839
- #: src/admin-views/tribe-options-tickets.php:144
2840
  msgid "Tribe Commerce"
2841
  msgstr ""
2842
 
2843
- #: src/admin-views/tribe-options-tickets.php:156
2844
  msgid "Check it out!"
2845
  msgstr ""
2846
 
2847
- #: src/admin-views/tribe-options-tickets.php:160
 
2848
  msgid ""
2849
  "Tribe Commerce is a light implementation of a commerce gateway using PayPal "
2850
  "and simplified stock handling. If you need more advanced features, take a "
2851
  "look at %1$s. In addition to integrating with your favorite ecommerce "
2852
  "provider, Event Tickets Plus includes options to collect custom information "
2853
- "for attendees, check users in via QR codes, and share stock between tickets. "
2854
- "%2$s"
2855
  msgstr ""
2856
 
2857
- #: src/admin-views/tribe-options-tickets.php:174
2858
  msgid "Enable Tribe Commerce "
2859
  msgstr ""
2860
 
2861
- #: src/admin-views/tribe-options-tickets.php:175
2862
  msgid "Check this box if you wish to turn on Tribe Commerce functionality"
2863
  msgstr ""
2864
 
2865
- #: src/admin-views/tribe-options-tickets.php:202
2866
  msgid "these instructions"
2867
  msgstr ""
2868
 
2869
- #: src/admin-views/tribe-options-tickets.php:204
 
2870
  msgid ""
2871
- "In order to use Tribe Commerce to sell tickets, you must configure your "
2872
- "PayPal account to communicate with your WordPress site. If you need help "
2873
- "getting set up, follow %s"
2874
  msgstr ""
2875
 
2876
- #: src/admin-views/tribe-options-tickets.php:210
2877
  msgid ""
2878
  "Have you entered this site's address in the Notification URL field in IPN "
2879
  "Settings?"
2880
  msgstr ""
2881
 
2882
- #: src/admin-views/tribe-options-tickets.php:212
2883
  msgid "Your site address is: %s"
2884
  msgstr ""
2885
 
2886
- #: src/admin-views/tribe-options-tickets.php:220
2887
  msgid "Configure PayPal:"
2888
  msgstr ""
2889
 
2890
- #: src/admin-views/tribe-options-tickets.php:226
2891
  msgid "PayPal email to receive payments:"
2892
  msgstr ""
2893
 
2894
- #: src/admin-views/tribe-options-tickets.php:234
2895
  msgid ""
2896
  "Have you enabled instant payment notifications (IPN) in your PayPal "
2897
  "account's Selling Tools?"
2898
  msgstr ""
2899
 
2900
- #: src/admin-views/tribe-options-tickets.php:237
2901
- #: src/admin-views/tribe-options-tickets.php:249
2902
  msgid "No"
2903
  msgstr ""
2904
 
2905
- #: src/admin-views/tribe-options-tickets.php:260
2906
  msgid "PayPal configuration status:"
2907
  msgstr ""
2908
 
2909
- #: src/admin-views/tribe-options-tickets.php:263
2910
  msgid ""
2911
  "For help creating and configuring your account, call PayPal at "
2912
  "1-844-720-4038 (USA)"
2913
  msgstr ""
2914
 
2915
- #: src/admin-views/tribe-options-tickets.php:272
2916
  msgid "PayPal Sandbox"
2917
  msgstr ""
2918
 
2919
- #: src/admin-views/tribe-options-tickets.php:273
2920
  msgid "Enables PayPal Sandbox mode for testing."
2921
  msgstr ""
2922
 
2923
- #: src/admin-views/tribe-options-tickets.php:279
2924
  msgid "Currency Code"
2925
  msgstr ""
2926
 
2927
- #: src/admin-views/tribe-options-tickets.php:280
2928
  msgid "The currency that will be used for Tribe Commerce transactions."
2929
  msgstr ""
2930
 
2931
- #: src/admin-views/tribe-options-tickets.php:287
2932
  msgid "Stock Handling"
2933
  msgstr ""
2934
 
2935
- #: src/admin-views/tribe-options-tickets.php:288
 
2936
  msgid ""
2937
- "When a customer purchases a ticket, PayPal might flag the order as Pending. "
2938
- "The order will be Complete once payment is confirmed by PayPal."
2939
  msgstr ""
2940
 
2941
- #: src/admin-views/tribe-options-tickets.php:292
2942
  msgid "Decrease available ticket stock as soon as a Pending order is created."
2943
  msgstr ""
2944
 
2945
- #: src/admin-views/tribe-options-tickets.php:293
2946
  msgid ""
2947
  "Only decrease available ticket stock if an order is confirmed as Completed "
2948
  "by PayPal."
2949
  msgstr ""
2950
 
2951
- #: src/admin-views/tribe-options-tickets.php:299
2952
  msgid "Success page"
2953
  msgstr ""
2954
 
2955
- #: src/admin-views/tribe-options-tickets.php:302
2956
  msgid ""
2957
  "After a successful PayPal order users will be redirected to this page; use "
2958
  "the %s shortcode to display the order confirmation to the user in the page "
2959
  "content."
2960
  msgstr ""
2961
 
2962
- #: src/admin-views/tribe-options-tickets.php:313
2963
  msgid "Confirmation email sender address"
2964
  msgstr ""
2965
 
2966
- #: src/admin-views/tribe-options-tickets.php:314
 
2967
  msgid ""
2968
- "Email address PayPal tickets customers will receive confirmation from. Leave "
2969
  "empty to use the default WordPress site email address."
2970
  msgstr ""
2971
 
2972
- #: src/admin-views/tribe-options-tickets.php:322
2973
  msgid "Confirmation email sender name"
2974
  msgstr ""
2975
 
2976
- #: src/admin-views/tribe-options-tickets.php:323
 
2977
  msgid ""
2978
- "Sender name of the confirmation email sent to customers when confirming a "
2979
- "ticket purchase."
2980
  msgstr ""
2981
 
2982
- #: src/admin-views/tribe-options-tickets.php:331
2983
  msgid "Confirmation email subject"
2984
  msgstr ""
2985
 
2986
- #: src/admin-views/tribe-options-tickets.php:332
 
2987
  msgid ""
2988
- "Subject of the confirmation email sent to customers when confirming a ticket "
2989
  "purchase."
2990
  msgstr ""
2991
 
2992
- #: src/admin-views/tribe-options-tickets.php:334
2993
- msgid "You have tickets!"
 
2994
  msgstr ""
2995
 
2996
- #: src/admin-views/tribe-options-tickets.php:346
2997
  msgid ""
2998
  "You can see and manage your IPN Notifications history from the IPN "
2999
  "Notifications settings area (%s)."
3000
  msgstr ""
3001
 
3002
- #: src/admin-views/tribe-options-tickets.php:356
3003
  msgid "IPN Notify URL"
3004
  msgstr ""
3005
 
3006
- #: src/admin-views/tribe-options-tickets.php:358
3007
  msgid ""
3008
  "Override the default IPN notify URL with this value. This value must be the "
3009
  "same set in PayPal IPN Notifications settings area (%s)."
@@ -3037,90 +3066,131 @@ msgid ""
3037
  "latest version of PHP."
3038
  msgstr ""
3039
 
3040
- #: src/template-tags/tickets.php:210
3041
- msgctxt "list view stock sold out"
3042
- msgid "Sold out"
3043
- msgstr ""
3044
-
3045
- #: src/template-tags/tickets.php:243
3046
- msgid "%s spot left"
3047
- msgid_plural "%s spots left"
3048
- msgstr[0] ""
3049
- msgstr[1] ""
3050
-
3051
- #: src/template-tags/tickets.php:245
3052
- msgid "%s ticket left"
3053
- msgid_plural "%s tickets left"
3054
- msgstr[0] ""
3055
- msgstr[1] ""
3056
-
3057
- #: src/template-tags/tickets.php:257
3058
  msgctxt "list view rsvp now ticket button"
3059
- msgid "RSVP Now!"
3060
  msgstr ""
3061
 
3062
- #: src/template-tags/tickets.php:260
3063
  msgctxt "list view buy now ticket button"
3064
  msgid "Buy Now!"
3065
  msgstr ""
3066
 
3067
- #: src/template-tags/tickets.php:446
3068
  msgid "issued"
3069
  msgstr ""
3070
 
3071
- #: src/template-tags/tickets.php:448
3072
- msgctxt "separate going and remain RSVPs"
3073
- msgid "RSVP'd Going"
3074
  msgstr ""
3075
 
3076
- #: src/template-tags/tickets.php:453
3077
  msgctxt "unlimited remaining stock message"
3078
  msgid "%1$s available"
3079
  msgstr ""
3080
 
3081
- #: src/template-tags/tickets.php:455
3082
  msgctxt "ticket shared capacity message (remaining stock)"
3083
  msgid "%1$d available of shared capacity"
3084
  msgstr ""
3085
 
3086
- #: src/template-tags/tickets.php:458
3087
  msgctxt "ticket stock message (remaining stock)"
3088
  msgid "%1$d available"
3089
  msgstr ""
3090
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3091
  #: src/views/blocks/attendees/description.php:25
3092
  msgid "One person is attending %2$s"
3093
  msgid_plural "%d people are attending %s"
3094
  msgstr[0] ""
3095
  msgstr[1] ""
3096
 
3097
- #: src/views/blocks/attendees/view-link.php:42
 
 
 
 
 
3098
  #: src/views/blocks/attendees/view-link.php:46
3099
- msgid "%d %s"
3100
- msgid_plural "%d %s"
3101
- msgstr[0] ""
3102
- msgstr[1] ""
3103
 
3104
- #: src/views/blocks/attendees/view-link.php:55
3105
- #: src/views/tickets/view-link.php:53
3106
- msgid "You have %s for this %s."
 
3107
  msgstr ""
3108
 
3109
- #: src/views/blocks/attendees/view-link.php:60
3110
- #: src/views/tickets/view-link.php:54
 
 
 
 
 
 
 
 
 
 
3111
  msgid "View your %s"
3112
  msgstr ""
3113
 
3114
- #: src/views/blocks/rsvp/content-inactive.php:18
3115
- msgid "RSVPs are no longer available"
 
3116
  msgstr ""
3117
 
3118
- #: src/views/blocks/rsvp/content-inactive.php:18
3119
- msgid "RSVPs are not yet available"
 
3120
  msgstr ""
3121
 
3122
  #: src/views/blocks/rsvp/details/availability.php:23
3123
- #: src/views/tickets/rsvp.php:103 src/views/tickets/tpp.php:108
3124
  msgid "Out of stock!"
3125
  msgstr ""
3126
 
@@ -3128,28 +3198,32 @@ msgstr ""
3128
  msgid "remaining"
3129
  msgstr ""
3130
 
3131
- #: src/views/blocks/rsvp/form/error.php:20
3132
- msgid "Please fill in the RSVP confirmation name and email fields."
3133
  msgstr ""
3134
 
3135
  #: src/views/blocks/rsvp/form/opt-out.php:39
3136
  msgid "Don't show my information on public attendee lists"
3137
  msgstr ""
3138
 
3139
- #: src/views/blocks/rsvp/form/quantity.php:18
3140
- msgid "RSVPs"
3141
- msgstr ""
3142
-
3143
- #: src/views/blocks/rsvp/form/submit-button.php:25
3144
- msgid "Submit RSVP"
3145
  msgstr ""
3146
 
3147
  #: src/views/blocks/rsvp/form/submit-login.php:25
3148
  msgid "Log in to RSVP"
3149
  msgstr ""
3150
 
3151
- #: src/views/blocks/rsvp/status/full.php:18
3152
- msgid "RSVP Full"
 
 
 
 
 
 
 
3153
  msgstr ""
3154
 
3155
  #: src/views/blocks/rsvp/status/going.php:25
@@ -3164,6 +3238,10 @@ msgstr ""
3164
  msgid "Tickets are no longer available"
3165
  msgstr ""
3166
 
 
 
 
 
3167
  #: src/views/blocks/tickets/quantity-add.php:24
3168
  msgid "+"
3169
  msgstr ""
@@ -3191,8 +3269,8 @@ msgstr ""
3191
  msgid "1"
3192
  msgstr ""
3193
 
3194
- #: src/views/blocks/tickets/registration/summary/title.php:21
3195
- msgid "Ticket Registration"
3196
  msgstr ""
3197
 
3198
  #: src/views/blocks/tickets/submit-button.php:23
@@ -3259,11 +3337,11 @@ msgstr ""
3259
  msgid "Find events to attend on %1$s"
3260
  msgstr ""
3261
 
3262
- #: src/views/registration/content.php:58
3263
  msgid "Save and Checkout"
3264
  msgstr ""
3265
 
3266
- #: src/views/registration/content.php:60
3267
  msgid "Save Attendee Info"
3268
  msgstr ""
3269
 
@@ -3285,7 +3363,7 @@ msgstr ""
3285
 
3286
  #: src/views/tickets/email-non-attendance.php:39
3287
  #: src/views/tickets/email-ticket-type-moved.php:25
3288
- #: src/views/tickets/email-tickets-moved.php:26 src/views/tickets/email.php:27
3289
  msgid "Your tickets"
3290
  msgstr ""
3291
 
@@ -3328,106 +3406,96 @@ msgid_plural ""
3328
  msgstr[0] ""
3329
  msgstr[1] ""
3330
 
3331
- #: src/views/tickets/email.php:398
3332
  msgid "Ticket #"
3333
  msgstr ""
3334
 
3335
- #: src/views/tickets/email.php:402
3336
- msgid "Ticket Type"
 
3337
  msgstr ""
3338
 
3339
- #: src/views/tickets/email.php:410
3340
  msgid "Security Code"
3341
  msgstr ""
3342
 
3343
- #: src/views/tickets/orders-pp-tickets.php:32
3344
- msgid "My Tickets for This %s"
 
3345
  msgstr ""
3346
 
3347
- #: src/views/tickets/orders-pp-tickets.php:41
3348
  msgid "Purchased by %1$s (%2$s)"
3349
  msgstr ""
3350
 
3351
- #: src/views/tickets/orders-pp-tickets.php:47
3352
- #: src/views/tickets/orders-rsvp.php:44
3353
  msgid " on %s"
3354
  msgstr ""
3355
 
3356
- #: src/views/tickets/orders-pp-tickets.php:66
3357
- #: src/views/tickets/orders-rsvp.php:63
3358
  msgid "Attendee %d"
3359
  msgstr ""
3360
 
3361
- #: src/views/tickets/orders-pp-tickets.php:71
3362
  msgctxt "order status label"
3363
  msgid "Payment status: "
3364
  msgstr ""
3365
 
3366
- #: src/views/tickets/orders-pp-tickets.php:76
3367
- #: src/views/tickets/orders-rsvp.php:87
3368
  msgid "Type: "
3369
  msgstr ""
3370
 
3371
- #: src/views/tickets/orders-rsvp.php:29
3372
- msgid "My RSVPs for This %s"
3373
- msgstr ""
3374
-
3375
- #: src/views/tickets/orders-rsvp.php:38
3376
  msgid "Reserved by %1$s (%2$s)"
3377
  msgstr ""
3378
 
3379
- #: src/views/tickets/orders-rsvp.php:68
3380
  msgctxt "order status label"
3381
  msgid "RSVP: "
3382
  msgstr ""
3383
 
3384
- #: src/views/tickets/orders.php:34
3385
- msgid "You don't have tickets for this event"
 
3386
  msgstr ""
3387
 
3388
- #: src/views/tickets/orders.php:43
3389
  msgid "View %s"
3390
  msgstr ""
3391
 
3392
- #: src/views/tickets/orders.php:89
3393
  msgid "Update %s"
3394
  msgstr ""
3395
 
3396
- #: src/views/tickets/rsvp.php:32
3397
- msgctxt "form heading"
3398
- msgid "RSVP"
3399
- msgstr ""
3400
-
3401
- #: src/views/tickets/rsvp.php:51
3402
  msgid "Please fill in the RSVP quantity, confirmation name, and email fields."
3403
  msgstr ""
3404
 
3405
- #: src/views/tickets/rsvp.php:98 src/views/tickets/tpp.php:103
3406
  msgid "%1$s available"
3407
  msgstr ""
3408
 
3409
- #: src/views/tickets/rsvp.php:130
3410
  msgid "Send RSVP confirmation to:"
3411
  msgstr ""
3412
 
3413
- #: src/views/tickets/rsvp.php:177
3414
- msgctxt "order status label"
3415
- msgid "RSVP"
3416
- msgstr ""
3417
-
3418
- #: src/views/tickets/rsvp.php:205
3419
  msgid "Don't list me on the public attendee list"
3420
  msgstr ""
3421
 
3422
- #: src/views/tickets/rsvp.php:217
3423
  msgid "Login to RSVP"
3424
  msgstr ""
3425
 
3426
- #: src/views/tickets/rsvp.php:227
3427
- msgid "Confirm RSVP"
 
3428
  msgstr ""
3429
 
3430
- #: src/views/tickets/rsvp.php:236 src/views/tickets/tpp.php:164
3431
  msgid ""
3432
  "You must have JavaScript activated to purchase tickets. Please enable "
3433
  "JavaScript in your browser."
@@ -3437,80 +3505,62 @@ msgstr ""
3437
  msgid "Return to Cart"
3438
  msgstr ""
3439
 
3440
- #: src/views/tickets/tpp-success.php:42
3441
  msgid "No order confirmation is available because no purchase was made."
3442
  msgstr ""
3443
 
3444
- #: src/views/tickets/tpp-success.php:48
3445
  msgid ""
3446
  "Whoops! It looks like there was a problem with your order. Please contact "
3447
  "the site owner for assistance."
3448
  msgstr ""
3449
 
3450
- #: src/views/tickets/tpp-success.php:56
3451
  msgid ""
3452
  "Your order (#%s) is currently processing. Once completed, you'll receive "
3453
  "your ticket(s) in an email."
3454
  msgstr ""
3455
 
3456
- #: src/views/tickets/tpp-success.php:65
3457
  msgid ""
3458
  "Thank you for your purchase! You will receive your receipt and tickets via "
3459
  "email."
3460
  msgstr ""
3461
 
3462
- #: src/views/tickets/tpp-success.php:68
3463
  msgid "Purchaser Name"
3464
  msgstr ""
3465
 
3466
- #: src/views/tickets/tpp-success.php:71
3467
  msgid "Purchaser Email"
3468
  msgstr ""
3469
 
3470
- #: src/views/tickets/tpp-success.php:77
3471
- msgctxt "Success page tickets table header"
3472
- msgid "Ticket"
3473
- msgstr ""
3474
-
3475
- #: src/views/tickets/tpp-success.php:78
3476
  msgctxt "Success page tickets table header"
3477
  msgid "Price"
3478
  msgstr ""
3479
 
3480
- #: src/views/tickets/tpp-success.php:79
3481
  msgctxt "Success page tickets table header"
3482
  msgid "Quantity"
3483
  msgstr ""
3484
 
3485
- #: src/views/tickets/tpp-success.php:80
3486
  msgctxt "Success page tickets table header"
3487
  msgid "Subtotal"
3488
  msgstr ""
3489
 
3490
- #: src/views/tickets/tpp.php:42
3491
- msgctxt "form heading"
3492
- msgid "Tickets"
3493
- msgstr ""
3494
-
3495
- #: src/views/tickets/tpp.php:60
3496
  msgid "Please fill in the ticket confirmation name and email fields."
3497
  msgstr ""
3498
 
3499
- #: src/views/tickets/tpp.php:122
3500
  msgid "Buy now"
3501
  msgstr ""
3502
 
3503
- #: src/views/tickets/view-link.php:44
3504
- msgid "%d RSVP"
3505
- msgid_plural "%d RSVPs"
3506
- msgstr[0] ""
3507
- msgstr[1] ""
3508
-
3509
- #: src/views/tickets/view-link.php:48
3510
- msgid "%d Ticket"
3511
- msgid_plural "%d Tickets"
3512
- msgstr[0] ""
3513
- msgstr[1] ""
3514
 
3515
  #. Plugin URI of the plugin/theme
3516
  msgid "http://m.tri.be/1acb"
2
  # This file is distributed under the same license as the Event Tickets package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Event Tickets 4.10.9\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/event-tickets\n"
7
+ "POT-Creation-Date: 2019-09-30 14:56:11+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: 2019-09-30 14:56\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
15
+ #. #-#-#-#-# event-tickets.pot (Event Tickets 4.10.9) #-#-#-#-#
16
  #. Plugin Name of the plugin/theme
17
+ #: event-tickets.php:62 src/Tribe/Main.php:649 src/Tribe/Privacy.php:32
18
  msgid "Event Tickets"
19
  msgstr ""
20
 
36
  msgstr ""
37
 
38
  #: src/Tribe/Admin/Move_Ticket_Types.php:28
39
+ msgid "Move %s Types"
40
  msgstr ""
41
 
42
  #: src/Tribe/Admin/Move_Ticket_Types.php:72
44
  msgid "All supported types"
45
  msgstr ""
46
 
47
+ #: src/Tribe/Admin/Move_Ticket_Types.php:106
48
  msgid ""
49
+ "%1$s type could not be moved: the %2$s type or destination post was invalid."
 
50
  msgstr ""
51
 
52
+ #: src/Tribe/Admin/Move_Ticket_Types.php:115
53
+ msgid "%s type could not be moved: unexpected failure during reassignment."
54
  msgstr ""
55
 
56
+ #: src/Tribe/Admin/Move_Ticket_Types.php:121
57
  msgid ""
58
+ "%1$s type %2$s for %3$s was successfully moved to %4$s. All previously sold "
59
+ "%5$s of this type have been transferred to %4$s. Please adjust capacity and "
60
+ "stock manually as needed. %2$s %6$s holders have received an email notifying "
61
+ "them of the change. You may now close this window!"
62
  msgstr ""
63
 
64
+ #: src/Tribe/Admin/Move_Ticket_Types.php:216
65
  msgid ""
66
+ "%1$s type was moved to <a href=\"%2$s\" target=\"_blank\">%3$s</a> from <a "
67
+ "href=\"%4$s\" target=\"_blank\">%5$s</a>"
68
  msgstr ""
69
 
70
+ #: src/Tribe/Admin/Move_Ticket_Types.php:317
71
+ #: src/Tribe/Admin/Move_Tickets.php:746
72
  msgid "Changes to your tickets from %s"
73
  msgstr ""
74
 
103
  msgid "Move"
104
  msgstr ""
105
 
106
+ #: src/Tribe/Admin/Move_Tickets.php:441
107
  msgid ""
108
+ "%1$s could not be moved: valid %2$s IDs or a destination ID were not "
109
  "provided."
110
  msgstr ""
111
 
112
+ #: src/Tribe/Admin/Move_Tickets.php:453
113
  msgid ""
114
+ "%s could not be moved: there was an unexpected failure during reassignment."
 
115
  msgstr ""
116
 
117
+ #: src/Tribe/Admin/Move_Tickets.php:462
118
  msgctxt "moved tickets success message fragment"
119
  msgid "assigned to %s"
120
  msgstr ""
121
 
122
+ #: src/Tribe/Admin/Move_Tickets.php:469
123
  msgctxt "moved tickets success message fragment"
124
  msgid "moved to %s and"
125
  msgstr ""
126
 
127
+ #: src/Tribe/Admin/Move_Tickets.php:476
128
  msgid ""
129
  "%1$d attendee for %2$s was successfully %3$s. By default, we adjust capacity "
130
  "and stock, however, we recommend reviewing each as needed to ensure numbers "
138
  msgstr[0] ""
139
  msgstr[1] ""
140
 
141
+ #: src/Tribe/Admin/Move_Tickets.php:621
142
  msgid "This ticket was moved to %1$s %2$s from %3$s %4$s"
143
  msgstr ""
144
 
145
+ #: src/Tribe/Admin/Move_Tickets.php:808
146
  msgid "This ticket was moved to %1$s from %2$s"
147
  msgstr ""
148
 
167
  msgid "No history available"
168
  msgstr ""
169
 
 
 
 
 
 
 
170
  #: src/Tribe/Admin/Views/Ticketed.php:47
171
  msgid "Ticketed"
172
  msgstr ""
175
  msgid "Unticketed"
176
  msgstr ""
177
 
178
+ #: src/Tribe/Assets.php:54 src/views/tickets/tpp-success.php:99
179
+ msgid "%s header image"
180
  msgstr ""
181
 
182
+ #: src/Tribe/Assets.php:55
183
+ msgid "Set as %s header"
184
  msgstr ""
185
 
186
+ #: src/Tribe/Assets.php:113
187
  msgid "Are you sure you want to delete this ticket? This cannot be undone."
188
  msgstr ""
189
 
190
+ #: src/Tribe/Assets.php:119
191
  msgid ""
192
  "It looks like you have modified your shared capacity setting but have not "
193
  "saved or updated the post."
194
  msgstr ""
195
 
196
+ #: src/Tribe/Assets.php:126 src/Tribe/Metabox.php:557
197
  msgid "Please enter in without thousand separators and currency symbols."
198
  msgstr ""
199
 
200
+ #: src/Tribe/Assets.php:194
201
  msgid ""
202
  "There is unsaved attendee information. Are you sure you want to continue?"
203
  msgstr ""
207
  msgid "Deleted Attendees:"
208
  msgstr ""
209
 
210
+ #: src/Tribe/Attendee_Registration/Template.php:378
211
  msgid "Attendee Registration"
212
  msgstr ""
213
 
283
 
284
  #: src/Tribe/Attendees.php:501
285
  msgctxt "attendee export"
286
+ msgid "%s ID"
287
  msgstr ""
288
 
289
  #: src/Tribe/Attendees.php:502
296
  msgid "Customer Email Address"
297
  msgstr ""
298
 
299
+ #: src/Tribe/Attendees.php:532 src/admin-views/tribe-options-tickets.php:241
300
+ #: src/admin-views/tribe-options-tickets.php:253
301
  msgid "Yes"
302
  msgstr ""
303
 
341
  msgid "Number of attendees per page:"
342
  msgstr ""
343
 
 
 
 
 
 
344
  #: src/Tribe/Attendees_Table.php:117
345
  msgctxt "attendee table"
346
  msgid "Primary Information"
406
  #: src/Tribe/Commerce/PayPal/Orders/Table.php:100 src/Tribe/Privacy.php:164
407
  #: src/Tribe/Privacy.php:445 src/Tribe/Privacy.php:541
408
  #: src/admin-views/admin-welcome-message.php:62
409
+ #: src/views/blocks/rsvp/form/email.php:32 src/views/tickets/rsvp.php:173
410
  msgid "Email"
411
  msgstr ""
412
 
427
  msgstr ""
428
 
429
  #: src/Tribe/Attendees_Table.php:979
430
+ msgctxt "Attendees Table search options"
431
  msgid "Search by Purchaser Name"
432
  msgstr ""
433
 
434
  #: src/Tribe/Attendees_Table.php:980
435
+ msgctxt "Attendees Table search options"
436
  msgid "Search by Purchaser Email"
437
  msgstr ""
438
 
439
  #: src/Tribe/Attendees_Table.php:981
440
+ msgctxt "Attendees Table search options"
441
  msgid "Search by User ID"
442
  msgstr ""
443
 
444
  #: src/Tribe/Attendees_Table.php:982
445
+ msgctxt "Attendees Table search options"
446
  msgid "Search by Order Status"
447
  msgstr ""
448
 
449
  #: src/Tribe/Attendees_Table.php:983
450
+ msgctxt "Attendees Table search options"
451
  msgid "Search by Order ID"
452
  msgstr ""
453
 
454
  #: src/Tribe/Attendees_Table.php:984
455
+ msgctxt "Attendees Table search options"
456
  msgid "Search by Security Code"
457
  msgstr ""
458
 
459
  #: src/Tribe/Attendees_Table.php:985
460
+ msgctxt "Attendees Table search options"
461
+ msgid "Search by %s ID"
462
  msgstr ""
463
 
464
  #: src/Tribe/Attendees_Table.php:986
465
+ msgctxt "Attendees Table search options"
466
  msgid "Search by Product ID"
467
  msgstr ""
468
 
471
  msgstr ""
472
 
473
  #: src/Tribe/CSV_Importer/Column_Names.php:35
474
+ msgid "%s Name"
475
  msgstr ""
476
 
477
  #: src/Tribe/CSV_Importer/Column_Names.php:36
478
+ msgid "%s Description"
479
  msgstr ""
480
 
481
  #: src/Tribe/CSV_Importer/Column_Names.php:37
482
+ msgid "%s Show Description"
483
  msgstr ""
484
 
485
  #: src/Tribe/CSV_Importer/Column_Names.php:38
486
+ msgid "%s Start Sale Date"
487
  msgstr ""
488
 
489
  #: src/Tribe/CSV_Importer/Column_Names.php:39
490
+ msgid "%s Start Sale Time"
491
  msgstr ""
492
 
493
  #: src/Tribe/CSV_Importer/Column_Names.php:40
494
+ msgid "%s End Sale Date"
495
  msgstr ""
496
 
497
  #: src/Tribe/CSV_Importer/Column_Names.php:41
498
+ msgid "%s End Sale Time"
499
  msgstr ""
500
 
501
  #: src/Tribe/CSV_Importer/Column_Names.php:42
502
+ msgid "%s Stock"
503
  msgstr ""
504
 
505
  #: src/Tribe/CSV_Importer/Column_Names.php:43
506
+ msgid "%s Capacity"
507
  msgstr ""
508
 
509
  #: src/Tribe/CSV_Importer/RSVP_Importer.php:250
510
  msgid "Recurring event tickets are not supported, event %s."
511
  msgstr ""
512
 
 
 
 
 
 
 
 
 
 
 
513
  #: src/Tribe/Commerce/Currency.php:189
514
  msgid "Australian Dollar (AUD)"
515
  msgstr ""
610
  msgid "U.S. Dollar (USD)"
611
  msgstr ""
612
 
613
+ #: src/Tribe/Commerce/PayPal/Attendance_Totals.php:77
614
+ #: src/Tribe/RSVP/Attendance_Totals.php:41
615
  msgctxt "attendee summary"
616
+ msgid "Total %s:"
617
  msgstr ""
618
 
619
+ #: src/Tribe/Commerce/PayPal/Attendance_Totals.php:78
620
  msgctxt "attendee summary"
621
  msgid "Complete:"
622
  msgstr ""
623
 
624
+ #: src/Tribe/Commerce/PayPal/Attendance_Totals.php:79
625
  msgctxt "attendee summary"
626
  msgid "Cancelled:"
627
  msgstr ""
630
  msgid "pending"
631
  msgstr ""
632
 
633
+ #: src/Tribe/Commerce/PayPal/Errors.php:24
634
  msgid "There was an error"
635
  msgstr ""
636
 
637
+ #: src/Tribe/Commerce/PayPal/Errors.php:25
638
  msgid "Attendee email and/or full name is missing"
639
  msgstr ""
640
 
641
+ #: src/Tribe/Commerce/PayPal/Errors.php:26
642
  msgid ""
643
+ "Trying to oversell a %s but the current oversell policy does not allow it"
644
  msgstr ""
645
 
646
+ #: src/Tribe/Commerce/PayPal/Errors.php:27
647
+ msgid "%s quantity is 0"
648
  msgstr ""
649
 
650
+ #: src/Tribe/Commerce/PayPal/Errors.php:30
651
  msgid ""
652
+ "In order to purchase %s, you must enter your name and a valid email address."
 
653
  msgstr ""
654
 
655
+ #: src/Tribe/Commerce/PayPal/Errors.php:31
656
+ msgid "You can't add more %1$s than the total remaining %1$s."
657
  msgstr ""
658
 
659
+ #: src/Tribe/Commerce/PayPal/Errors.php:32
660
+ msgid "You should add at least one %s."
661
  msgstr ""
662
 
663
+ #: src/Tribe/Commerce/PayPal/Errors.php:35
664
  msgid ""
665
  "Your order is currently processing. Once completed, you'll receive your "
666
+ "%s(s) in an email."
667
  msgstr ""
668
 
669
+ #: src/Tribe/Commerce/PayPal/Frontend/Tickets_Form.php:77
670
  msgid ""
671
+ "Your PayPal %1$s has been received! Check your email for your PayPal %1$s "
672
+ "confirmation."
673
  msgstr ""
674
 
675
  #: src/Tribe/Commerce/PayPal/Handler/IPN.php:143
706
  msgid "Attendee %1$s"
707
  msgstr ""
708
 
709
+ #: src/Tribe/Commerce/PayPal/Main.php:435
710
+ msgid "Tickets"
711
+ msgstr ""
712
+
713
  #: src/Tribe/Commerce/PayPal/Main.php:437
714
  msgid "Tribe Commerce Tickets"
715
  msgstr ""
722
  msgid "Orders"
723
  msgstr ""
724
 
725
+ #: src/Tribe/Commerce/PayPal/Main.php:1153
726
  msgid "Your tickets from %s"
727
  msgstr ""
728
 
734
  msgid "Report"
735
  msgstr ""
736
 
737
+ #: src/Tribe/Commerce/PayPal/Main.php:1884 src/Tribe/RSVP.php:1707
738
  msgid "Return to the %1$sAttendees Report%2$s."
739
  msgstr ""
740
 
741
+ #: src/Tribe/Commerce/PayPal/Main.php:1891 src/Tribe/RSVP.php:1714
742
  msgid "Post updated. %1$s"
743
  msgstr ""
744
 
745
+ #: src/Tribe/Commerce/PayPal/Main.php:1895 src/Tribe/RSVP.php:1718
746
  msgid "Post published. %1$s"
747
  msgstr ""
748
 
749
+ #: src/Tribe/Commerce/PayPal/Main.php:1898 src/Tribe/RSVP.php:1721
750
  msgid "Post submitted."
751
  msgstr ""
752
 
753
+ #: src/Tribe/Commerce/PayPal/Main.php:1899 src/Tribe/RSVP.php:1722
754
  msgid "Post scheduled."
755
  msgstr ""
756
 
757
+ #: src/Tribe/Commerce/PayPal/Main.php:1900 src/Tribe/RSVP.php:1723
758
  msgid "Post draft updated."
759
  msgstr ""
760
 
761
+ #: src/Tribe/Commerce/PayPal/Main.php:2589 src/Tribe/RSVP.php:1379
762
  msgid "(deleted)"
763
  msgstr ""
764
 
807
  msgstr ""
808
 
809
  #: src/Tribe/Commerce/PayPal/Orders/Table.php:99
810
+ #: src/views/tickets/email.php:414
811
  msgid "Purchaser"
812
  msgstr ""
813
 
840
  msgid "No matching orders found."
841
  msgstr ""
842
 
843
+ #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:111
844
  msgid "An event"
845
  msgstr ""
846
 
847
+ #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:123
848
  msgid "in your PayPal account"
849
  msgstr ""
850
 
851
+ #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:125
852
  msgid ""
853
+ "%1$s is oversold: there are more %2$s sold than the available capacity. This "
854
+ "can occur when the PayPal transaction is not completed immediately, delaying "
855
+ "the decrease in %3$s availability. Order %4$s includes %5$s %3$s(s). There "
856
+ "are only %6$s %3$s(s) left. %7$s emails have not yet been sent for this "
857
+ "order. Choose how to process this order from the options below."
 
858
  msgstr ""
859
 
860
+ #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:221
861
  msgid ""
862
  "Create attendee records and send emails for all tickets in this order "
863
  "(overselling the event)."
864
  msgstr ""
865
 
866
+ #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:228
867
  msgid ""
868
  "Delete all attendees for this order and do not email tickets. You may also "
869
  "want to refund the order %1$sin your PayPal account%2$s."
870
  msgstr ""
871
 
872
+ #: src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php:246
873
  msgid "Process order"
874
  msgstr ""
875
 
924
  msgstr ""
925
 
926
  #: src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php:56
927
+ #: src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php:229
928
  msgid "Invalid nonce"
929
  msgstr ""
930
 
931
  #: src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php:66
932
+ #: src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php:243
933
+ #: src/Tribe/Metabox.php:269 src/Tribe/Metabox.php:315
934
+ #: src/Tribe/Metabox.php:353 src/Tribe/Metabox.php:390
935
  msgid "Commerce Module invalid"
936
  msgstr ""
937
 
938
+ #: src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php:274
939
+ msgid "%s was not able to be updated"
940
  msgstr ""
941
 
942
  #: src/Tribe/Editor.php:209
943
  msgid "Tickets Blocks"
944
  msgstr ""
945
 
946
+ #: src/Tribe/JSON_LD/Order.php:132 src/Tribe/RSVP.php:1038
947
  #: src/admin-views/editor/column-body-price.php:18
948
  msgid "Free"
949
  msgstr ""
950
 
951
+ #: src/Tribe/Main.php:141
952
+ msgctxt "provider_plugin_name"
953
+ msgid "Tickets"
954
+ msgstr ""
955
+
956
+ #: src/Tribe/Main.php:406
957
  msgid ""
958
  "When The Events Calendar and Event Tickets are both activated, The Events "
959
  "Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
960
  msgstr ""
961
 
962
+ #: src/Tribe/Main.php:469
963
  msgid ""
964
  "Sorry, Event Tickets requires WordPress %s or higher. Please upgrade your "
965
  "WordPress install."
966
  msgstr ""
967
 
968
+ #: src/Tribe/Main.php:473
969
  msgid ""
970
  "Sorry, Event Tickets requires PHP %s or higher. Talk to your Web host about "
971
  "moving you to a newer version of PHP."
972
  msgstr ""
973
 
974
+ #: src/Tribe/Main.php:581
975
  msgid "Support for Event Tickets"
976
  msgstr ""
977
 
978
+ #: src/Tribe/Main.php:583
979
  msgid "Settings overview"
980
  msgstr ""
981
 
982
+ #: src/Tribe/Main.php:584
983
  msgid "Features overview"
984
  msgstr ""
985
 
986
+ #: src/Tribe/Main.php:585
987
  msgid "Troubleshooting common problems"
988
  msgstr ""
989
 
990
+ #: src/Tribe/Main.php:586
991
  msgid "Customizing Event Tickets"
992
  msgstr ""
993
 
994
+ #: src/Tribe/Main.php:603 src/admin-views/admin-welcome-message.php:34
995
  msgid "New User Primer"
996
  msgstr ""
997
 
998
+ #: src/Tribe/Main.php:605
999
+ msgctxt "help feature box section"
1000
  msgid ""
1001
+ "We are committed to helping you sell %1$s for your event. Check out our "
1002
+ "handy %2$s to get started."
1003
  msgstr ""
1004
 
1005
+ #: src/Tribe/Main.php:622
1006
  msgid "open-source forum on WordPress.org"
1007
  msgstr ""
1008
 
1009
+ #: src/Tribe/Main.php:623
1010
  msgid ""
1011
  "If you have tried the above steps and are still having trouble, you can post "
1012
  "a new thread to our %s. Our support staff monitors these forums once a week "
1013
  "and would be happy to assist you there."
1014
  msgstr ""
1015
 
1016
+ #: src/Tribe/Main.php:625
1017
  msgid "premium support on our website"
1018
  msgstr ""
1019
 
1020
+ #: src/Tribe/Main.php:626 src/admin-views/tribe-options-tickets.php:158
1021
+ msgid "Event Tickets Plus"
1022
  msgstr ""
1023
 
1024
+ #: src/Tribe/Main.php:627
1025
  msgid ""
1026
  "Looking for more immediate support? We offer %1$s with the purchase of any "
1027
  "of our premium plugins (like %2$s). Pick up a license and you can post there "
1028
  "directly and expect a response within 24-48 hours during weekdays."
1029
  msgstr ""
1030
 
1031
+ #: src/Tribe/Main.php:629 src/Tribe/Main.php:634
1032
  msgid "post a thread"
1033
  msgstr ""
1034
 
1035
+ #: src/Tribe/Main.php:630
1036
  msgid ""
1037
+ "Already have Event Tickets Plus? You can %s in our premium support forums. "
1038
  "Our support team monitors the forums and will respond to your thread within "
1039
  "24-48 hours (during the week)."
1040
  msgstr ""
1041
 
1042
+ #: src/Tribe/Main.php:635
1043
  msgid ""
1044
  "If you have a valid license for one of our paid plugins, you can %s in our "
1045
  "premium support forums. Our support team monitors the forums and will "
1046
  "respond to your thread within 24-48 hours (during the week)."
1047
  msgstr ""
1048
 
1049
+ #: src/Tribe/Main.php:736
1050
  msgid "Welcome to Event Tickets!"
1051
  msgstr ""
1052
 
1053
+ #: src/Tribe/Main.php:874
1054
  msgid "Buy"
1055
  msgstr ""
1056
 
1057
+ #: src/Tribe/Main.php:953
 
 
 
 
 
1058
  msgid ""
1059
  "When Event Tickets and Event Tickets Plus are both activated, Event Tickets "
1060
  "Plus must be running version %1$s or greater. Please %2$smanually update now"
1065
  msgid "Invalid Post ID"
1066
  msgstr ""
1067
 
1068
+ #: src/Tribe/Metabox.php:188 src/Tribe/Metabox.php:247
1069
+ #: src/Tribe/Metabox.php:299
1070
  msgid "Invalid parent Post"
1071
  msgstr ""
1072
 
1073
  #: src/Tribe/Metabox.php:198
1074
+ msgid "Failed to add the %s. Refresh the page to try again."
1075
  msgstr ""
1076
 
1077
  #: src/Tribe/Metabox.php:202
1079
  msgstr ""
1080
 
1081
  #: src/Tribe/Metabox.php:220
1082
+ msgid "Failed to add the %s"
1083
  msgstr ""
1084
 
1085
+ #: src/Tribe/Metabox.php:253 src/Tribe/Metabox.php:305
1086
+ msgid "Invalid %s"
1087
  msgstr ""
1088
 
1089
+ #: src/Tribe/Metabox.php:263
1090
+ msgid "Failed to edit the %s. Refresh the page to try again."
1091
  msgstr ""
1092
 
1093
+ #: src/Tribe/Metabox.php:309
1094
+ msgid "Failed to delete the %s. Refresh the page to try again."
1095
  msgstr ""
1096
 
1097
+ #: src/Tribe/Metabox.php:347 src/Tribe/Metabox.php:384
1098
  msgid "The attendee ID is missing from the request parameters."
1099
  msgstr ""
1100
 
1119
  msgstr ""
1120
 
1121
  #: src/Tribe/Privacy.php:159 src/Tribe/Privacy.php:440
1122
+ #: src/views/blocks/rsvp/form/name.php:31 src/views/tickets/rsvp.php:165
1123
  msgid "Full Name"
1124
  msgstr ""
1125
 
1157
  msgid "Order Number"
1158
  msgstr ""
1159
 
1160
+ #: src/Tribe/Privacy.php:524 src/views/tickets/tpp-success.php:138
1161
  msgid "Order Total"
1162
  msgstr ""
1163
 
1243
  #: src/Tribe/REST/V1/Documentation/Attendee_Definition_Provider.php:105
1244
  msgid ""
1245
  "If the attendee is for an RSVP ticket, this will be set to true if he/she is "
1246
+ "\"Going\", false otherwise"
1247
  msgstr ""
1248
 
1249
  #: src/Tribe/REST/V1/Documentation/Attendee_Definition_Provider.php:112
1251
  msgstr ""
1252
 
1253
  #: src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php:20
1254
+ msgid "The %s available capacity percentage"
1255
  msgstr ""
1256
 
1257
  #: src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php:24
1258
+ msgid "The %s max capacity"
1259
  msgstr ""
1260
 
1261
  #: src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php:28
1262
+ msgid "The %s current available capacity"
1263
  msgstr ""
1264
 
1265
  #: src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php:32
1266
+ msgid "The %s sale count"
1267
  msgstr ""
1268
 
1269
  #: src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php:36
1270
+ msgid "The %s pending count"
1271
  msgstr ""
1272
 
1273
  #: src/Tribe/REST/V1/Documentation/Checkin_Details_Definition_Provider.php:20
1275
  msgstr ""
1276
 
1277
  #: src/Tribe/REST/V1/Documentation/Checkin_Details_Definition_Provider.php:27
1278
+ msgid "The check-in source for the attendee; e.g. \"kiosk\" or \"site\""
1279
  msgstr ""
1280
 
1281
  #: src/Tribe/REST/V1/Documentation/Checkin_Details_Definition_Provider.php:31
1317
  msgstr ""
1318
 
1319
  #: src/Tribe/REST/V1/Documentation/RSVP_Report_Definition_Provider.php:20
1320
+ msgid "How many attendees are \"Going\""
1321
  msgstr ""
1322
 
1323
  #: src/Tribe/REST/V1/Documentation/RSVP_Report_Definition_Provider.php:24
1324
+ msgid "How many attendees are \"Not going\""
1325
  msgstr ""
1326
 
1327
  #: src/Tribe/REST/V1/Documentation/Ticket_Definition_Provider.php:20
1820
  msgid "An error happened while building the response: "
1821
  msgstr ""
1822
 
 
 
 
 
 
1823
  #: src/Tribe/RSVP/Attendance_Totals.php:42
1824
  msgctxt "attendee summary"
1825
  msgid "Going:"
1830
  msgid "Not Going:"
1831
  msgstr ""
1832
 
 
 
 
 
 
1833
  #: src/Tribe/RSVP.php:336
1834
  msgid "RSVP Tickets"
1835
  msgstr ""
1838
  msgid "RSVP Ticket"
1839
  msgstr ""
1840
 
1841
+ #: src/Tribe/RSVP.php:732
1842
+ msgid "Your %1$s from %2$s"
1843
+ msgstr ""
1844
+
1845
+ #: src/Tribe/RSVP.php:823
1846
  msgid "You confirmed you will not be attending %s"
1847
  msgstr ""
1848
 
1849
+ #: src/Tribe/RSVP.php:1136
1850
  msgid ""
1851
+ "Your %1$s has been received! Check your email for your %1$s confirmation."
1852
  msgstr ""
1853
 
1854
+ #: src/Tribe/RSVP.php:1143
1855
+ msgid "You can't %1$s more than the total remaining %2$s."
1856
  msgstr ""
1857
 
1858
+ #: src/Tribe/RSVP.php:1151
1859
+ msgid "In order to %s, you must enter your name and a valid email address."
1860
  msgstr ""
1861
 
1862
  #: src/Tribe/Status/Abstract_Commerce.php:168
1903
  msgid "Capacity"
1904
  msgstr ""
1905
 
1906
+ #: src/Tribe/Tickets.php:406
1907
+ msgctxt "delete link"
1908
+ msgid "Delete %s"
 
 
 
 
 
 
 
1909
  msgstr ""
1910
 
1911
+ #: src/Tribe/Tickets.php:488
1912
+ msgid "Move %s"
1913
  msgstr ""
1914
 
1915
+ #: src/Tribe/Tickets.php:1548
1916
+ msgctxt "global stock mode option"
1917
+ msgid "Shared capacity with other %s"
1918
  msgstr ""
1919
 
1920
+ #: src/Tribe/Tickets.php:1549
1921
+ msgctxt "global stock mode option (individual)"
1922
+ msgid "Set capacity for this %s only"
1923
  msgstr ""
1924
 
1925
+ #: src/Tribe/Tickets.php:2197
1926
+ msgid "%s are not available as this %s has passed."
1927
  msgstr ""
1928
 
1929
+ #: src/Tribe/Tickets.php:2233
1930
+ msgid "%s will be available on "
1931
  msgstr ""
1932
 
1933
+ #: src/Tribe/Tickets.php:2239
1934
  msgid " at "
1935
  msgstr ""
1936
 
1937
+ #: src/Tribe/Tickets.php:2242
1938
+ msgid "%s are not yet available"
1939
  msgstr ""
1940
 
1941
+ #: src/Tribe/Tickets.php:2245
1942
+ msgid "%s are no longer available."
1943
  msgstr ""
1944
 
1945
+ #: src/Tribe/Tickets.php:2247
1946
+ msgid "There are no %s available at this time."
1947
  msgstr ""
1948
 
1949
  #: src/Tribe/Tickets_Handler.php:84
1953
  msgid "Unlimited"
1954
  msgstr ""
1955
 
1956
+ #: src/Tribe/Tickets_View.php:820 src/views/blocks/attendees/view-link.php:61
1957
+ #: src/views/tickets/view-link.php:58
1958
+ msgctxt "separator if there are both RSVPs and Tickets"
1959
+ msgid " and "
1960
+ msgstr ""
1961
+
1962
+ #: src/Tribe/Tickets_View.php:881
1963
+ msgid "This %s is no longer active."
1964
+ msgstr ""
1965
+
1966
+ #: src/Tribe/Views/V2/Models/Tickets.php:138 src/template-tags/tickets.php:215
1967
+ msgctxt "list view stock sold out"
1968
+ msgid "Sold out"
1969
+ msgstr ""
1970
+
1971
+ #: src/Tribe/Views/V2/Models/Tickets.php:170 src/template-tags/tickets.php:248
1972
+ msgid "%s spot left"
1973
+ msgid_plural "%s spots left"
1974
  msgstr[0] ""
1975
  msgstr[1] ""
1976
 
1977
+ #: src/Tribe/Views/V2/Models/Tickets.php:172 src/template-tags/tickets.php:250
1978
+ msgid "%s ticket left"
1979
+ msgid_plural "%s tickets left"
 
1980
  msgstr[0] ""
1981
  msgstr[1] ""
1982
 
1983
+ #: src/Tribe/Views/V2/Models/Tickets.php:182
1984
+ msgctxt "list view rsvp now ticket button"
1985
+ msgid "%s Now"
1986
  msgstr ""
1987
 
1988
+ #: src/Tribe/Views/V2/Models/Tickets.php:185
1989
+ msgctxt "list view buy now ticket button"
1990
+ msgid "Get %s"
1991
  msgstr ""
1992
 
1993
  #: src/admin-views/admin-welcome-message.php:7
2164
  msgid "Price:"
2165
  msgstr ""
2166
 
 
 
 
 
 
2167
  #: src/admin-views/editor/column-head-price.php:1
2168
  #: src/views/registration/summary/tickets-header.php:19
2169
  msgid "Price"
2209
  msgstr ""
2210
 
2211
  #: src/admin-views/editor/fieldset/advanced.php:95
2212
+ msgid "%s start date"
2213
  msgstr ""
2214
 
2215
  #: src/admin-views/editor/fieldset/advanced.php:97
2218
  msgstr ""
2219
 
2220
  #: src/admin-views/editor/fieldset/advanced.php:98
2221
+ msgid "If you do not set a start sale date, %s will be available immediately."
 
2222
  msgstr ""
2223
 
2224
  #: src/admin-views/editor/fieldset/advanced.php:102
2227
  msgstr ""
2228
 
2229
  #: src/admin-views/editor/fieldset/advanced.php:124
2230
+ msgid "%s end date"
2231
  msgstr ""
2232
 
2233
  #: src/admin-views/editor/fieldset/advanced.php:130
2234
  msgid ""
2235
+ "If you do not set an end sale date, %s will be available until the event "
2236
+ "begins."
2237
  msgstr ""
2238
 
2239
  #: src/admin-views/editor/fieldset/advanced.php:132
2240
+ msgid "If you do not set an end sale date, %s will be available forever."
2241
  msgstr ""
2242
 
2243
  #: src/admin-views/editor/fieldset/history.php:27
2249
  msgstr ""
2250
 
2251
  #: src/admin-views/editor/fieldset/price.php:7
2252
+ msgctxt "ticket price validation error"
2253
+ msgid "%s price must be greater than zero."
2254
  msgstr ""
2255
 
2256
  #: src/admin-views/editor/fieldset/price.php:21
2257
+ msgctxt "price description"
2258
+ msgid "Leave blank for free %s"
2259
  msgstr ""
2260
 
2261
  #: src/admin-views/editor/fieldset/price.php:99
2296
  msgstr ""
2297
 
2298
  #: src/admin-views/editor/list-row.php:43
2299
+ msgctxt "ticket type label"
2300
+ msgid "%s Type:"
2301
  msgstr ""
2302
 
2303
  #: src/admin-views/editor/list-row.php:91
2310
  msgid "Available:"
2311
  msgstr ""
2312
 
2313
+ #: src/admin-views/editor/list-row.php:108
2314
+ msgctxt "ticket ID title attribute"
2315
+ msgid "%s ID: %d"
2316
  msgstr ""
2317
 
2318
  #: src/admin-views/editor/list-table.php:40
2336
  msgstr ""
2337
 
2338
  #: src/admin-views/editor/panel/list.php:66
2339
+ msgctxt "admin editor panel list button label"
2340
+ msgid "New %s"
2341
  msgstr ""
2342
 
2343
  #: src/admin-views/editor/panel/list.php:72
2344
+ msgctxt "RSVP form toggle button label"
2345
+ msgid "Add a new %s"
2346
  msgstr ""
2347
 
2348
  #: src/admin-views/editor/panel/list.php:74
2349
+ msgctxt "RSVP form toggle button text"
2350
+ msgid "New %s"
2351
  msgstr ""
2352
 
2353
  #: src/admin-views/editor/panel/list.php:79
2355
  msgstr ""
2356
 
2357
  #: src/admin-views/editor/panel/settings.php:14
2358
+ msgctxt "meta box ticket form heading"
2359
+ msgid "%s Settings"
2360
  msgstr ""
2361
 
2362
+ #: src/admin-views/editor/panel/settings.php:42
2363
+ msgctxt "ticket image upload label"
2364
+ msgid "%s header image:"
2365
  msgstr ""
2366
 
2367
+ #: src/admin-views/editor/panel/settings.php:44
2368
+ msgctxt "ticket image upload label description"
2369
  msgid ""
2370
+ "Select an image from your Media Library to display on emailed %s. For best "
2371
+ "results, use a .jpg, .png, or .gif at least 1160px wide."
2372
  msgstr ""
2373
 
2374
+ #: src/admin-views/editor/panel/settings.php:52 src/admin-views/meta-box.php:46
2375
  msgid "Select an Image"
2376
  msgstr ""
2377
 
2378
+ #: src/admin-views/editor/panel/settings.php:68 src/admin-views/meta-box.php:54
2379
  msgid "Remove"
2380
  msgstr ""
2381
 
2382
+ #: src/admin-views/editor/panel/settings.php:81
2383
  msgid "Save settings"
2384
  msgstr ""
2385
 
2386
+ #: src/admin-views/editor/panel/settings.php:82
2387
+ #: src/admin-views/editor/panel/ticket.php:203 src/admin-views/meta-box.php:240
2388
  msgid "Cancel"
2389
  msgstr ""
2390
 
2391
+ #: src/admin-views/editor/panel/ticket.php:53
 
 
 
 
 
 
 
 
2392
  #: src/admin-views/editor/panel/ticket.php:75
2393
+ msgctxt "admin add new ticket panel heading"
2394
+ msgid "Add new %s"
2395
  msgstr ""
2396
 
2397
+ #: src/admin-views/editor/panel/ticket.php:61
2398
  #: src/admin-views/editor/panel/ticket.php:83
2399
+ msgctxt "admin edit ticket panel heading"
2400
+ msgid "Edit %s"
2401
  msgstr ""
2402
 
2403
  #: src/admin-views/editor/panel/ticket.php:88
2405
  msgstr ""
2406
 
2407
  #: src/admin-views/editor/panel/ticket.php:97
2408
+ msgctxt "admin edit ticket panel error"
2409
+ msgid "%s type is a required field"
2410
  msgstr ""
2411
 
2412
+ #: src/admin-views/editor/panel/ticket.php:100
2413
+ msgctxt "admin edit ticket panel note"
2414
+ msgid "%1$s type name shows on the front end and emailed %2$s"
2415
  msgstr ""
2416
 
2417
+ #: src/admin-views/editor/panel/ticket.php:106 src/admin-views/meta-box.php:128
2418
  msgid "Sell using:"
2419
  msgstr ""
2420
 
2421
+ #: src/admin-views/editor/panel/ticket.php:185
2422
+ msgctxt "meta box ticket form button text"
2423
+ msgid "Save %s"
2424
  msgstr ""
2425
 
2426
+ #: src/admin-views/editor/panel/ticket.php:194
2427
+ msgctxt "RSVP form save value"
2428
+ msgid "Save %s"
2429
  msgstr ""
2430
 
2431
  #: src/admin-views/legacy-ticket-fields.php:19
2455
  msgstr ""
2456
 
2457
  #: src/admin-views/meta-box.php:31
2458
+ msgctxt "meta box ticket form CE warning"
2459
  msgid ""
2460
  "This event was created using Community Events. Are you sure you want to sell "
2461
+ "%s for it?"
2462
  msgstr ""
2463
 
2464
  #: src/admin-views/meta-box.php:42
2465
+ msgctxt "meta box ticket form image"
2466
+ msgid "Upload image for the %s header."
2467
  msgstr ""
2468
 
2469
  #: src/admin-views/meta-box.php:43
2487
  msgstr[0] ""
2488
  msgstr[1] ""
2489
 
2490
+ #: src/admin-views/meta-box.php:112
2491
+ msgctxt "meta box ticket form toggle"
2492
+ msgid "Add new %s"
2493
+ msgstr ""
2494
+
2495
+ #: src/admin-views/meta-box.php:122
2496
+ msgid "Add new ticket"
2497
+ msgstr ""
2498
+
2499
+ #: src/admin-views/meta-box.php:123
2500
+ msgid "Edit ticket"
2501
+ msgstr ""
2502
+
2503
  #: src/admin-views/meta-box.php:145
2504
+ msgctxt "meta box ticket form"
2505
+ msgid "%s Name:"
2506
  msgstr ""
2507
 
2508
  #: src/admin-views/meta-box.php:152
2509
+ msgctxt "meta box ticket form"
2510
+ msgid "%s Description:"
2511
  msgstr ""
2512
 
2513
  #: src/admin-views/meta-box.php:215
2521
  msgstr ""
2522
 
2523
  #: src/admin-views/meta-box.php:239
2524
+ msgctxt "meta box form save button"
2525
+ msgid "Save this %s"
2526
  msgstr ""
2527
 
2528
  #: src/admin-views/move-tickets.php:19
2604
  "statuses:"
2605
  msgstr ""
2606
 
2607
+ #: src/admin-views/privacy.php:16
2608
  msgid "Hello,"
2609
  msgstr ""
2610
 
2611
+ #: src/admin-views/privacy.php:17
2612
  msgid ""
2613
  "This information serves as a guide on what sections need to be modified due "
2614
  "to usage of Event Tickets and its Add-ons."
2615
  msgstr ""
2616
 
2617
+ #: src/admin-views/privacy.php:18
2618
  msgid ""
2619
  "You should include the information below in the correct sections of you "
2620
  "privacy policy."
2621
  msgstr ""
2622
 
2623
+ #: src/admin-views/privacy.php:19
2624
  msgid "Disclaimer:"
2625
  msgstr ""
2626
 
2627
+ #: src/admin-views/privacy.php:19
2628
  msgid ""
2629
  "This information is only for guidance and not to be considered as legal "
2630
  "advice."
2631
  msgstr ""
2632
 
2633
+ #: src/admin-views/privacy.php:21
2634
  msgid "What personal data we collect and why we collect it"
2635
  msgstr ""
2636
 
2637
+ #: src/admin-views/privacy.php:23
2638
  msgid "Event, Attendee, and Ticket Purchaser Information"
2639
  msgstr ""
2640
 
2641
+ #: src/admin-views/privacy.php:25
2642
  msgid ""
2643
  "Through the usage of Event Tickets, Event Tickets Plus, and Community "
2644
  "Tickets, information may be collected and stored within your website’s "
2645
  "database."
2646
  msgstr ""
2647
 
2648
+ #: src/admin-views/privacy.php:26 src/admin-views/privacy.php:63
2649
  msgid "Suggested text:"
2650
  msgstr ""
2651
 
2652
+ #: src/admin-views/privacy.php:29
2653
  msgid ""
2654
+ "If you create, submit, import, save, or publish event %1$s information, as "
2655
+ "well as obtain %2$s or purchase %3$s to events, such information is retained "
2656
+ "in the local database:"
2657
  msgstr ""
2658
 
2659
+ #: src/admin-views/privacy.php:39
2660
+ msgid "Attendees information (%1$s and %2$s): name and email address"
2661
  msgstr ""
2662
 
2663
+ #: src/admin-views/privacy.php:46
2664
  msgid ""
2665
+ "%1$s information (%2$s and %3$s): name, email address, and %4$s number/SKU "
2666
+ "(via check-in page)"
2667
  msgstr ""
2668
 
2669
+ #: src/admin-views/privacy.php:53
2670
+ msgid "%s purchaser information: name and email address"
2671
  msgstr ""
2672
 
2673
+ #: src/admin-views/privacy.php:54
2674
  msgid ""
2675
+ "%s purchaser billing address, which is collected through the use of "
2676
  "WooCommerce, Easy Digital Downloads, or PayPal"
2677
  msgstr ""
2678
 
2679
+ #: src/admin-views/privacy.php:57
2680
  msgid ""
2681
  "Please note: The website owner can collect nearly any Attendee Information "
2682
+ "requested from %s buyers by creating a custom registration form."
2683
  msgstr ""
2684
 
2685
+ #: src/admin-views/privacy.php:59
2686
  msgid "API Keys"
2687
  msgstr ""
2688
 
2689
+ #: src/admin-views/privacy.php:61
2690
  msgid ""
2691
+ "Event Tickets suite offers the use of third-party API keys. The primary "
2692
  "functions are to enhance the features we've built in, some of which use "
2693
  "Google Maps and PayPal. These API keys are not supplied by Modern Tribe."
2694
  msgstr ""
2695
 
2696
+ #: src/admin-views/privacy.php:65
2697
  msgid "We make use of certain API keys, in order to provide specific features."
2698
  msgstr ""
2699
 
2700
+ #: src/admin-views/privacy.php:67
2701
  msgid ""
2702
  "These API keys may include the following third party services: Google Maps "
2703
  "and PayPal."
2704
  msgstr ""
2705
 
2706
+ #: src/admin-views/privacy.php:69
2707
  msgid "How Long You Retain this Data"
2708
  msgstr ""
2709
 
2710
+ #: src/admin-views/privacy.php:71
2711
  msgid ""
2712
  "All information (data) is retained in the local database indefinitely, "
2713
  "unless otherwise deleted."
2714
  msgstr ""
2715
 
2716
+ #: src/admin-views/privacy.php:73
2717
  msgid ""
2718
  "Certain data may be exported or removed upon users request via the existing "
2719
+ "Exporter or Eraser. Please note, however, that several \"edge cases\" exist "
2720
+ "in which we are unable to perfect the gathering and export of all data for "
2721
+ "your end users. We suggest running a search in your local database, as well "
2722
+ "as within the WordPress Dashboard, in order to identify all data collected "
2723
+ "and stored for your specific user requests."
2724
  msgstr ""
2725
 
2726
+ #: src/admin-views/privacy.php:75
2727
  msgid "Where We Send Your Data"
2728
  msgstr ""
2729
 
2730
+ #: src/admin-views/privacy.php:77
2731
  msgid ""
2732
  "Modern Tribe does not send any user data outside of your website by default."
2733
  msgstr ""
2734
 
2735
+ #: src/admin-views/privacy.php:79
2736
  msgid ""
2737
  "If you have extended our plugin(s) to send data to a third-party service "
2738
  "such as Eventbrite, Google Maps, or PayPal, user information may be passed "
2745
  msgstr ""
2746
 
2747
  #: src/admin-views/ticket-type-history.php:10
2748
+ msgctxt "ticket type history"
2749
+ msgid "%s history:"
2750
  msgstr ""
2751
 
2752
  #: src/admin-views/ticket-type-history.php:14
2786
  msgid "Total Tickets Ordered"
2787
  msgstr ""
2788
 
2789
+ #: src/admin-views/tribe-options-tickets.php:55
2790
+ msgctxt "login requirement setting"
2791
+ msgid "Require users to log in before they %s"
2792
+ msgstr ""
2793
+
2794
+ #: src/admin-views/tribe-options-tickets.php:56
2795
+ msgctxt "login requirement setting"
2796
+ msgid "Require users to log in before they purchase %s"
2797
  msgstr ""
2798
 
2799
+ #: src/admin-views/tribe-options-tickets.php:67
2800
+ msgctxt "tickets fields settings title"
2801
+ msgid "%s Settings"
2802
  msgstr ""
2803
 
2804
+ #: src/admin-views/tribe-options-tickets.php:71
2805
+ msgctxt "tickets fields settings enabled post types"
2806
+ msgid "Post types that can have %s"
2807
  msgstr ""
2808
 
2809
+ #: src/admin-views/tribe-options-tickets.php:86
2810
  msgid "Below the event details [default]"
2811
  msgstr ""
2812
 
2813
+ #: src/admin-views/tribe-options-tickets.php:87
2814
  msgid "Above the event details"
2815
  msgstr ""
2816
 
2817
+ #: src/admin-views/tribe-options-tickets.php:88
2818
  msgid "Below the event description"
2819
  msgstr ""
2820
 
2821
+ #: src/admin-views/tribe-options-tickets.php:89
2822
  msgid "Above the event description"
2823
  msgstr ""
2824
 
2825
+ #: src/admin-views/tribe-options-tickets.php:94
2826
+ #: src/admin-views/tribe-options-tickets.php:104
2827
+ msgctxt "form location setting"
2828
+ msgid "Location of %s form"
2829
  msgstr ""
2830
 
2831
+ #: src/admin-views/tribe-options-tickets.php:95
2832
+ #: src/admin-views/tribe-options-tickets.php:105
2833
  msgid "This setting only impacts events made with the classic editor."
2834
  msgstr ""
2835
 
2836
+ #: src/admin-views/tribe-options-tickets.php:114
2837
+ msgctxt "tickets remaining threshold label"
2838
+ msgid "Display # %s left threshold"
 
 
 
2839
  msgstr ""
2840
 
2841
+ #: src/admin-views/tribe-options-tickets.php:115
2842
+ msgctxt "tickets remaining threshold tooltip"
2843
  msgid ""
2844
+ "If this number is less than the number of %1$s left for sale on your event, "
2845
+ "this will prevent the \"# of %1$s left\" text from showing on your website. "
2846
+ "You can leave this blank if you would like to always show the text."
2847
  msgstr ""
2848
 
2849
+ #: src/admin-views/tribe-options-tickets.php:126
2850
  msgid "Login Requirements"
2851
  msgstr ""
2852
 
2853
+ #: src/admin-views/tribe-options-tickets.php:131
2854
+ msgctxt "ticket authentication requirements"
2855
  msgid ""
2856
+ "You can require that users log into your site before they are able to %1$s "
2857
+ "(or buy %2$s). Please review your WordPress Membership option (via the "
2858
+ "%3$sGeneral Settings admin screen%4$s) before adjusting this setting."
2859
  msgstr ""
2860
 
2861
+ #: src/admin-views/tribe-options-tickets.php:152
2862
  msgid "Tribe Commerce"
2863
  msgstr ""
2864
 
2865
+ #: src/admin-views/tribe-options-tickets.php:163
2866
  msgid "Check it out!"
2867
  msgstr ""
2868
 
2869
+ #: src/admin-views/tribe-options-tickets.php:167
2870
+ msgctxt "about Tribe Commerce"
2871
  msgid ""
2872
  "Tribe Commerce is a light implementation of a commerce gateway using PayPal "
2873
  "and simplified stock handling. If you need more advanced features, take a "
2874
  "look at %1$s. In addition to integrating with your favorite ecommerce "
2875
  "provider, Event Tickets Plus includes options to collect custom information "
2876
+ "for attendees, check users in via QR codes, and share stock between %2$s. "
2877
+ "%3$s"
2878
  msgstr ""
2879
 
2880
+ #: src/admin-views/tribe-options-tickets.php:182
2881
  msgid "Enable Tribe Commerce "
2882
  msgstr ""
2883
 
2884
+ #: src/admin-views/tribe-options-tickets.php:183
2885
  msgid "Check this box if you wish to turn on Tribe Commerce functionality"
2886
  msgstr ""
2887
 
2888
+ #: src/admin-views/tribe-options-tickets.php:210
2889
  msgid "these instructions"
2890
  msgstr ""
2891
 
2892
+ #: src/admin-views/tribe-options-tickets.php:211
2893
+ msgctxt "tickets fields settings PayPal setup"
2894
  msgid ""
2895
+ "In order to use Tribe Commerce to sell %1$s, you must configure your PayPal "
2896
+ "account to communicate with your WordPress site. If you need help getting "
2897
+ "set up, follow %2$s"
2898
  msgstr ""
2899
 
2900
+ #: src/admin-views/tribe-options-tickets.php:215
2901
  msgid ""
2902
  "Have you entered this site's address in the Notification URL field in IPN "
2903
  "Settings?"
2904
  msgstr ""
2905
 
2906
+ #: src/admin-views/tribe-options-tickets.php:217
2907
  msgid "Your site address is: %s"
2908
  msgstr ""
2909
 
2910
+ #: src/admin-views/tribe-options-tickets.php:225
2911
  msgid "Configure PayPal:"
2912
  msgstr ""
2913
 
2914
+ #: src/admin-views/tribe-options-tickets.php:231
2915
  msgid "PayPal email to receive payments:"
2916
  msgstr ""
2917
 
2918
+ #: src/admin-views/tribe-options-tickets.php:239
2919
  msgid ""
2920
  "Have you enabled instant payment notifications (IPN) in your PayPal "
2921
  "account's Selling Tools?"
2922
  msgstr ""
2923
 
2924
+ #: src/admin-views/tribe-options-tickets.php:242
2925
+ #: src/admin-views/tribe-options-tickets.php:254
2926
  msgid "No"
2927
  msgstr ""
2928
 
2929
+ #: src/admin-views/tribe-options-tickets.php:265
2930
  msgid "PayPal configuration status:"
2931
  msgstr ""
2932
 
2933
+ #: src/admin-views/tribe-options-tickets.php:268
2934
  msgid ""
2935
  "For help creating and configuring your account, call PayPal at "
2936
  "1-844-720-4038 (USA)"
2937
  msgstr ""
2938
 
2939
+ #: src/admin-views/tribe-options-tickets.php:277
2940
  msgid "PayPal Sandbox"
2941
  msgstr ""
2942
 
2943
+ #: src/admin-views/tribe-options-tickets.php:278
2944
  msgid "Enables PayPal Sandbox mode for testing."
2945
  msgstr ""
2946
 
2947
+ #: src/admin-views/tribe-options-tickets.php:284
2948
  msgid "Currency Code"
2949
  msgstr ""
2950
 
2951
+ #: src/admin-views/tribe-options-tickets.php:285
2952
  msgid "The currency that will be used for Tribe Commerce transactions."
2953
  msgstr ""
2954
 
2955
+ #: src/admin-views/tribe-options-tickets.php:292
2956
  msgid "Stock Handling"
2957
  msgstr ""
2958
 
2959
+ #: src/admin-views/tribe-options-tickets.php:293
2960
+ msgctxt "tickets fields settings paypal stock handling"
2961
  msgid ""
2962
+ "When a customer purchases a %s, PayPal might flag the order as Pending. The "
2963
+ "order will be Complete once payment is confirmed by PayPal."
2964
  msgstr ""
2965
 
2966
+ #: src/admin-views/tribe-options-tickets.php:297
2967
  msgid "Decrease available ticket stock as soon as a Pending order is created."
2968
  msgstr ""
2969
 
2970
+ #: src/admin-views/tribe-options-tickets.php:298
2971
  msgid ""
2972
  "Only decrease available ticket stock if an order is confirmed as Completed "
2973
  "by PayPal."
2974
  msgstr ""
2975
 
2976
+ #: src/admin-views/tribe-options-tickets.php:304
2977
  msgid "Success page"
2978
  msgstr ""
2979
 
2980
+ #: src/admin-views/tribe-options-tickets.php:307
2981
  msgid ""
2982
  "After a successful PayPal order users will be redirected to this page; use "
2983
  "the %s shortcode to display the order confirmation to the user in the page "
2984
  "content."
2985
  msgstr ""
2986
 
2987
+ #: src/admin-views/tribe-options-tickets.php:318
2988
  msgid "Confirmation email sender address"
2989
  msgstr ""
2990
 
2991
+ #: src/admin-views/tribe-options-tickets.php:319
2992
+ msgctxt "tickets fields settings paypal confirmation email"
2993
  msgid ""
2994
+ "Email address PayPal %s customers will receive confirmation from. Leave "
2995
  "empty to use the default WordPress site email address."
2996
  msgstr ""
2997
 
2998
+ #: src/admin-views/tribe-options-tickets.php:327
2999
  msgid "Confirmation email sender name"
3000
  msgstr ""
3001
 
3002
+ #: src/admin-views/tribe-options-tickets.php:328
3003
+ msgctxt "tickets fields settings paypal email sender"
3004
  msgid ""
3005
+ "Sender name of the confirmation email sent to customers when confirming a %s "
3006
+ "purchase."
3007
  msgstr ""
3008
 
3009
+ #: src/admin-views/tribe-options-tickets.php:336
3010
  msgid "Confirmation email subject"
3011
  msgstr ""
3012
 
3013
+ #: src/admin-views/tribe-options-tickets.php:337
3014
+ msgctxt "tickets fields settings paypal email subject"
3015
  msgid ""
3016
+ "Subject of the confirmation email sent to customers when confirming a %s "
3017
  "purchase."
3018
  msgstr ""
3019
 
3020
+ #: src/admin-views/tribe-options-tickets.php:339
3021
+ msgctxt "tickets fields settings paypal email subject"
3022
+ msgid "You have %s!"
3023
  msgstr ""
3024
 
3025
+ #: src/admin-views/tribe-options-tickets.php:351
3026
  msgid ""
3027
  "You can see and manage your IPN Notifications history from the IPN "
3028
  "Notifications settings area (%s)."
3029
  msgstr ""
3030
 
3031
+ #: src/admin-views/tribe-options-tickets.php:361
3032
  msgid "IPN Notify URL"
3033
  msgstr ""
3034
 
3035
+ #: src/admin-views/tribe-options-tickets.php:363
3036
  msgid ""
3037
  "Override the default IPN notify URL with this value. This value must be the "
3038
  "same set in PayPal IPN Notifications settings area (%s)."
3066
  "latest version of PHP."
3067
  msgstr ""
3068
 
3069
+ #: src/template-tags/tickets.php:262
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3070
  msgctxt "list view rsvp now ticket button"
3071
+ msgid "%s Now!"
3072
  msgstr ""
3073
 
3074
+ #: src/template-tags/tickets.php:265
3075
  msgctxt "list view buy now ticket button"
3076
  msgid "Buy Now!"
3077
  msgstr ""
3078
 
3079
+ #: src/template-tags/tickets.php:459
3080
  msgid "issued"
3081
  msgstr ""
3082
 
3083
+ #: src/template-tags/tickets.php:461
3084
+ msgctxt "RSVPs going"
3085
+ msgid "%s'd going"
3086
  msgstr ""
3087
 
3088
+ #: src/template-tags/tickets.php:466
3089
  msgctxt "unlimited remaining stock message"
3090
  msgid "%1$s available"
3091
  msgstr ""
3092
 
3093
+ #: src/template-tags/tickets.php:468
3094
  msgctxt "ticket shared capacity message (remaining stock)"
3095
  msgid "%1$d available of shared capacity"
3096
  msgstr ""
3097
 
3098
+ #: src/template-tags/tickets.php:471
3099
  msgctxt "ticket stock message (remaining stock)"
3100
  msgid "%1$d available"
3101
  msgstr ""
3102
 
3103
+ #: src/template-tags/tickets.php:1099
3104
+ msgctxt "singular label for RSVP"
3105
+ msgid "RSVP"
3106
+ msgstr ""
3107
+
3108
+ #: src/template-tags/tickets.php:1123
3109
+ msgctxt "lowercase singular label for RSVP"
3110
+ msgid "rsvp"
3111
+ msgstr ""
3112
+
3113
+ #: src/template-tags/tickets.php:1147
3114
+ msgctxt "plural label for RSVPs"
3115
+ msgid "RSVPs"
3116
+ msgstr ""
3117
+
3118
+ #: src/template-tags/tickets.php:1171
3119
+ msgctxt "lowercase plural label for RSVPs"
3120
+ msgid "rsvps"
3121
+ msgstr ""
3122
+
3123
+ #: src/template-tags/tickets.php:1195
3124
+ msgctxt "singular label for Ticket"
3125
+ msgid "Ticket"
3126
+ msgstr ""
3127
+
3128
+ #: src/template-tags/tickets.php:1219
3129
+ msgctxt "lowercase singular label for Ticket"
3130
+ msgid "ticket"
3131
+ msgstr ""
3132
+
3133
+ #: src/template-tags/tickets.php:1243
3134
+ msgctxt "plural label for Tickets"
3135
+ msgid "Tickets"
3136
+ msgstr ""
3137
+
3138
+ #: src/template-tags/tickets.php:1267
3139
+ msgctxt "lowercase plural label for Tickets"
3140
+ msgid "tickets"
3141
+ msgstr ""
3142
+
3143
  #: src/views/blocks/attendees/description.php:25
3144
  msgid "One person is attending %2$s"
3145
  msgid_plural "%d people are attending %s"
3146
  msgstr[0] ""
3147
  msgstr[1] ""
3148
 
3149
+ #: src/views/blocks/attendees/view-link.php:44
3150
+ #: src/views/tickets/view-link.php:43
3151
+ msgctxt "RSVP count singular"
3152
+ msgid "%1d %2s"
3153
+ msgstr ""
3154
+
3155
  #: src/views/blocks/attendees/view-link.php:46
3156
+ #: src/views/tickets/view-link.php:45
3157
+ msgctxt "RSVP count plural"
3158
+ msgid "%1d %2s"
3159
+ msgstr ""
3160
 
3161
+ #: src/views/blocks/attendees/view-link.php:50
3162
+ #: src/views/tickets/view-link.php:49
3163
+ msgctxt "Ticket count singular"
3164
+ msgid "%1d %2s"
3165
  msgstr ""
3166
 
3167
+ #: src/views/blocks/attendees/view-link.php:52
3168
+ #: src/views/tickets/view-link.php:51
3169
+ msgctxt "Ticket count plural"
3170
+ msgid "%1d %2s"
3171
+ msgstr ""
3172
+
3173
+ #: src/views/blocks/attendees/view-link.php:61
3174
+ msgid "You have %1s for this %2s."
3175
+ msgstr ""
3176
+
3177
+ #: src/views/blocks/attendees/view-link.php:66
3178
+ #: src/views/tickets/view-link.php:61
3179
  msgid "View your %s"
3180
  msgstr ""
3181
 
3182
+ #: src/views/blocks/rsvp/content-inactive.php:20
3183
+ msgctxt "RSVP block inactive content in the past"
3184
+ msgid "%s are no longer available"
3185
  msgstr ""
3186
 
3187
+ #: src/views/blocks/rsvp/content-inactive.php:21
3188
+ msgctxt "RSVP block inactive content"
3189
+ msgid "%s are not yet available"
3190
  msgstr ""
3191
 
3192
  #: src/views/blocks/rsvp/details/availability.php:23
3193
+ #: src/views/tickets/rsvp.php:108 src/views/tickets/tpp.php:112
3194
  msgid "Out of stock!"
3195
  msgstr ""
3196
 
3198
  msgid "remaining"
3199
  msgstr ""
3200
 
3201
+ #: src/views/blocks/rsvp/form/error.php:21
3202
+ msgid "Please fill in the %s confirmation name and email fields."
3203
  msgstr ""
3204
 
3205
  #: src/views/blocks/rsvp/form/opt-out.php:39
3206
  msgid "Don't show my information on public attendee lists"
3207
  msgstr ""
3208
 
3209
+ #: src/views/blocks/rsvp/form/submit-button.php:26
3210
+ msgctxt "blocks rsvp form submit button"
3211
+ msgid "Submit %s"
 
 
 
3212
  msgstr ""
3213
 
3214
  #: src/views/blocks/rsvp/form/submit-login.php:25
3215
  msgid "Log in to RSVP"
3216
  msgstr ""
3217
 
3218
+ #: src/views/blocks/rsvp/messages/success.php:22
3219
+ msgctxt "blocks rsvp messages success"
3220
+ msgid ""
3221
+ "Your %1$s has been received! Check your email for your %1$s confirmation."
3222
+ msgstr ""
3223
+
3224
+ #: src/views/blocks/rsvp/status/full.php:19
3225
+ msgctxt "blocks rsvp status full"
3226
+ msgid "%s Full"
3227
  msgstr ""
3228
 
3229
  #: src/views/blocks/rsvp/status/going.php:25
3238
  msgid "Tickets are no longer available"
3239
  msgstr ""
3240
 
3241
+ #: src/views/blocks/tickets/content-inactive.php:18
3242
+ msgid "Tickets are not yet available"
3243
+ msgstr ""
3244
+
3245
  #: src/views/blocks/tickets/quantity-add.php:24
3246
  msgid "+"
3247
  msgstr ""
3269
  msgid "1"
3270
  msgstr ""
3271
 
3272
+ #: src/views/blocks/tickets/registration/summary/title.php:22
3273
+ msgid "%s Registration"
3274
  msgstr ""
3275
 
3276
  #: src/views/blocks/tickets/submit-button.php:23
3337
  msgid "Find events to attend on %1$s"
3338
  msgstr ""
3339
 
3340
+ #: src/views/registration/content.php:77
3341
  msgid "Save and Checkout"
3342
  msgstr ""
3343
 
3344
+ #: src/views/registration/content.php:79
3345
  msgid "Save Attendee Info"
3346
  msgstr ""
3347
 
3363
 
3364
  #: src/views/tickets/email-non-attendance.php:39
3365
  #: src/views/tickets/email-ticket-type-moved.php:25
3366
+ #: src/views/tickets/email-tickets-moved.php:26 src/views/tickets/email.php:35
3367
  msgid "Your tickets"
3368
  msgstr ""
3369
 
3406
  msgstr[0] ""
3407
  msgstr[1] ""
3408
 
3409
+ #: src/views/tickets/email.php:406
3410
  msgid "Ticket #"
3411
  msgstr ""
3412
 
3413
+ #: src/views/tickets/email.php:410
3414
+ msgctxt "ticket type email heading"
3415
+ msgid "%s Type"
3416
  msgstr ""
3417
 
3418
+ #: src/views/tickets/email.php:418
3419
  msgid "Security Code"
3420
  msgstr ""
3421
 
3422
+ #: src/views/tickets/orders-pp-tickets.php:35
3423
+ #: src/views/tickets/orders-rsvp.php:32
3424
+ msgid "My %1$s for this %2$s"
3425
  msgstr ""
3426
 
3427
+ #: src/views/tickets/orders-pp-tickets.php:47
3428
  msgid "Purchased by %1$s (%2$s)"
3429
  msgstr ""
3430
 
3431
+ #: src/views/tickets/orders-pp-tickets.php:53
3432
+ #: src/views/tickets/orders-rsvp.php:47
3433
  msgid " on %s"
3434
  msgstr ""
3435
 
3436
+ #: src/views/tickets/orders-pp-tickets.php:72
3437
+ #: src/views/tickets/orders-rsvp.php:66
3438
  msgid "Attendee %d"
3439
  msgstr ""
3440
 
3441
+ #: src/views/tickets/orders-pp-tickets.php:77
3442
  msgctxt "order status label"
3443
  msgid "Payment status: "
3444
  msgstr ""
3445
 
3446
+ #: src/views/tickets/orders-pp-tickets.php:82
3447
+ #: src/views/tickets/orders-rsvp.php:90
3448
  msgid "Type: "
3449
  msgstr ""
3450
 
3451
+ #: src/views/tickets/orders-rsvp.php:41
 
 
 
 
3452
  msgid "Reserved by %1$s (%2$s)"
3453
  msgstr ""
3454
 
3455
+ #: src/views/tickets/orders-rsvp.php:71
3456
  msgctxt "order status label"
3457
  msgid "RSVP: "
3458
  msgstr ""
3459
 
3460
+ #: src/views/tickets/orders.php:35
3461
+ msgctxt "notice if user does not have tickets"
3462
+ msgid "You don't have %s for this event"
3463
  msgstr ""
3464
 
3465
+ #: src/views/tickets/orders.php:44
3466
  msgid "View %s"
3467
  msgstr ""
3468
 
3469
+ #: src/views/tickets/orders.php:90
3470
  msgid "Update %s"
3471
  msgstr ""
3472
 
3473
+ #: src/views/tickets/rsvp.php:53
 
 
 
 
 
3474
  msgid "Please fill in the RSVP quantity, confirmation name, and email fields."
3475
  msgstr ""
3476
 
3477
+ #: src/views/tickets/rsvp.php:103 src/views/tickets/tpp.php:107
3478
  msgid "%1$s available"
3479
  msgstr ""
3480
 
3481
+ #: src/views/tickets/rsvp.php:135
3482
  msgid "Send RSVP confirmation to:"
3483
  msgstr ""
3484
 
3485
+ #: src/views/tickets/rsvp.php:210
 
 
 
 
 
3486
  msgid "Don't list me on the public attendee list"
3487
  msgstr ""
3488
 
3489
+ #: src/views/tickets/rsvp.php:222
3490
  msgid "Login to RSVP"
3491
  msgstr ""
3492
 
3493
+ #: src/views/tickets/rsvp.php:232
3494
+ msgctxt "tickets process button text"
3495
+ msgid "Confirm %s"
3496
  msgstr ""
3497
 
3498
+ #: src/views/tickets/rsvp.php:241 src/views/tickets/tpp.php:168
3499
  msgid ""
3500
  "You must have JavaScript activated to purchase tickets. Please enable "
3501
  "JavaScript in your browser."
3505
  msgid "Return to Cart"
3506
  msgstr ""
3507
 
3508
+ #: src/views/tickets/tpp-success.php:46
3509
  msgid "No order confirmation is available because no purchase was made."
3510
  msgstr ""
3511
 
3512
+ #: src/views/tickets/tpp-success.php:52
3513
  msgid ""
3514
  "Whoops! It looks like there was a problem with your order. Please contact "
3515
  "the site owner for assistance."
3516
  msgstr ""
3517
 
3518
+ #: src/views/tickets/tpp-success.php:60
3519
  msgid ""
3520
  "Your order (#%s) is currently processing. Once completed, you'll receive "
3521
  "your ticket(s) in an email."
3522
  msgstr ""
3523
 
3524
+ #: src/views/tickets/tpp-success.php:69
3525
  msgid ""
3526
  "Thank you for your purchase! You will receive your receipt and tickets via "
3527
  "email."
3528
  msgstr ""
3529
 
3530
+ #: src/views/tickets/tpp-success.php:72
3531
  msgid "Purchaser Name"
3532
  msgstr ""
3533
 
3534
+ #: src/views/tickets/tpp-success.php:75
3535
  msgid "Purchaser Email"
3536
  msgstr ""
3537
 
3538
+ #: src/views/tickets/tpp-success.php:82
 
 
 
 
 
3539
  msgctxt "Success page tickets table header"
3540
  msgid "Price"
3541
  msgstr ""
3542
 
3543
+ #: src/views/tickets/tpp-success.php:83
3544
  msgctxt "Success page tickets table header"
3545
  msgid "Quantity"
3546
  msgstr ""
3547
 
3548
+ #: src/views/tickets/tpp-success.php:84
3549
  msgctxt "Success page tickets table header"
3550
  msgid "Subtotal"
3551
  msgstr ""
3552
 
3553
+ #: src/views/tickets/tpp.php:61
 
 
 
 
 
3554
  msgid "Please fill in the ticket confirmation name and email fields."
3555
  msgstr ""
3556
 
3557
+ #: src/views/tickets/tpp.php:126
3558
  msgid "Buy now"
3559
  msgstr ""
3560
 
3561
+ #: src/views/tickets/view-link.php:57
3562
+ msgid "You have %1$s for this %2$s."
3563
+ msgstr ""
 
 
 
 
 
 
 
 
3564
 
3565
  #. Plugin URI of the plugin/theme
3566
  msgid "http://m.tri.be/1acb"
readme.txt CHANGED
@@ -4,7 +4,7 @@ Contributors: ModernTribe, brianjessee, camwynsp, paulkim, sc0ttkclark, aguseo,
4
  Tags: RSVP, events, tickets, event management, calendar, ticket sales, community, registration, api, dates, date, posts, workshop, conference, meeting, seminar, concert, summit, ticket integration, event ticketing
5
  Requires at least: 4.7
6
  Tested up to: 5.2
7
- Stable tag: 4.10.8
8
  Requires PHP: 5.6
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -117,6 +117,21 @@ Currently, the following add-ons are available for Event Tickets:
117
 
118
  == Changelog ==
119
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  = [4.10.8] 2019-09-16 =
121
 
122
  * Tweak - Renamed `src/views/tickets/orders-link.php` to `src/views/tickets/view-link.php` and renamed `src/views/blocks/attendees/order-links.php` to `src/views/blocks/attendees/view-link.php` for improved and consistent naming between Classic and Block Editor templates [130955]
4
  Tags: RSVP, events, tickets, event management, calendar, ticket sales, community, registration, api, dates, date, posts, workshop, conference, meeting, seminar, concert, summit, ticket integration, event ticketing
5
  Requires at least: 4.7
6
  Tested up to: 5.2
7
+ Stable tag: 4.10.9
8
  Requires PHP: 5.6
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
117
 
118
  == Changelog ==
119
 
120
+ = [4.10.9] 2019-10-01 =
121
+
122
+ * Feature - New functions to easily rename ticket types and ensure consistent wording: `tribe_get_rsvp_label_singular()`, `tribe_get_rsvp_label_singular_lowercase()`, `tribe_get_rsvp_label_plural()`, `tribe_get_rsvp_label_plural_lowercase()`, `tribe_get_ticket_label_singular()`, `tribe_get_ticket_label_singular_lowercase()`, `tribe_get_ticket_label_plural()`, and `tribe_get_ticket_label_plural_lowercase()` [130897]
123
+ * Tweak - Allow Admin and Editor users to see Attendees in REST API responses by default [128298]
124
+ * Tweak - Notify Promoter if an event with tickets is deleted [134113]
125
+ * Tweak - Added filters: `tribe_display_tickets_left_threshold`, `tribe_events_tickets_views_v2_is_enabled`, `tribe_get_rsvp_label_singular`, `tribe_get_rsvp_label_singular_lowercase`, `tribe_get_rsvp_label_plural`, `tribe_get_rsvp_label_plural_lowercase`, `tribe_get_ticket_label_singular`, `tribe_get_ticket_label_singular_lowercase`, `tribe_get_ticket_label_plural`, `tribe_get_ticket_label_plural_lowercase`, `tribe_tickets_filter_showing_tickets_on_attendee_registration`
126
+ * Tweak - Changed views: `blocks/attendees/view-link`, `blocks/rsvp/content-inactive`, `blocks/rsvp/form/error`, `blocks/rsvp/form/quantity`, `blocks/rsvp/form/submit-button`, `blocks/rsvp/icon`, `blocks/rsvp/messages/success`, `blocks/rsvp/status/full`, `blocks/tickets/registration/summary/title`, `registration/content`, `tickets/email`, `tickets/orders-pp-tickets`, `tickets/orders-rsvp`, `tickets/orders`, `tickets/rsvp`, `tickets/tpp-success`, `tickets/tpp`, `tickets/view-link`, `v2/day/event/cost`, `v2/list/event/cost`, `v2/map/event-cards/event-card/event/actions/cost`, `v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/cost`, `v2/month/mobile-events/mobile-day/mobile-event/cost`, `v2/photo/event/cost`, `v2/week/grid-body/events-day/event/tooltip/cost`, `v2/week/mobile-events/day/event/cost`
127
+ * Fix - The attendee link in the ticket and RSVP block so it shows after the creation of a ticket or RSVP. [128521]
128
+ * Fix - Prevent conflict with Genesis Framework where content or the excerpt does not show in the post archives [125496]
129
+ * Fix - Prevent tickets that do not have attendee meta from showing on the attendee registration page [125021]
130
+ * Fix - Prevent multiple clicks on `Confirm RSVP` from submitting entries [132961]
131
+ * Fix - Make 'Not going' available to translate in RSVP dropdown [134358]
132
+ * Fix - Update how we intercept the singular event template when The Events Calendar is active, on events created using the Block editor so that you can view 'My Tickets' correctly [134583]
133
+ * Language: 101 new strings added, 158 updated, 48 fuzzied, and 104 obsoleted
134
+
135
  = [4.10.8] 2019-09-16 =
136
 
137
  * Tweak - Renamed `src/views/tickets/orders-link.php` to `src/views/tickets/view-link.php` and renamed `src/views/blocks/attendees/order-links.php` to `src/views/blocks/attendees/view-link.php` for improved and consistent naming between Classic and Block Editor templates [130955]
src/Tribe/Admin/Move_Ticket_Types.php CHANGED
@@ -25,7 +25,7 @@ class Tribe__Tickets__Admin__Move_Ticket_Types extends Tribe__Tickets__Admin__Mo
25
  }
26
 
27
  return array_merge( $vars, array(
28
- 'title' => __( 'Move Ticket Types', 'event-tickets' ),
29
  'mode' => 'ticket_type_only',
30
  ) );
31
  }
@@ -81,6 +81,8 @@ class Tribe__Tickets__Admin__Move_Ticket_Types extends Tribe__Tickets__Admin__Mo
81
 
82
  /**
83
  * Listens out for ajax requests to move a ticket type to a new post.
 
 
84
  */
85
  public function move_ticket_type_requests() {
86
  $args = wp_parse_args( $_POST, array(
@@ -100,22 +102,29 @@ class Tribe__Tickets__Admin__Move_Ticket_Types extends Tribe__Tickets__Admin__Mo
100
 
101
  if ( ! $ticket_type_id || ! $destination_id ) {
102
  wp_send_json_error( array(
103
- 'message' => __( 'Ticket type could not be moved: the ticket type or destination post was invalid.', 'event-tickets' )
 
 
 
 
104
  ) );
105
  }
106
 
107
  if ( ! $this->move_ticket_type( $ticket_type_id, $destination_id ) ) {
108
  wp_send_json_error( array(
109
- 'message' => __( 'Ticket type could not be moved: unexpected failure during reassignment.', 'event-tickets' )
110
  ) );
111
  }
112
 
113
  wp_send_json_success( array(
114
  'message' => sprintf(
115
- '<p>' . __( 'Ticket type %1$s for %2$s was successfully moved to %3$s. All previously sold tickets of this type have been transferred to %3$s. Please adjust capacity and stock manually as needed. %1$s ticket holders have received an email notifying them of the change. You may now close this window!', 'event-tickets' ) . '</p>',
116
- '<a href="' . esc_url( get_admin_url( null, '/post.php?post=' . $ticket_type_id . '&action=edit' ) ) . '" target="_blank">' . get_the_title( $ticket_type_id ) . '</a>',
117
- '<a href="' . esc_url( get_admin_url( null, '/post.php?post=' . $src_post_id . '&action=edit' ) ) . '" target="_blank">' . get_the_title( $src_post_id ) . '</a>',
118
- '<a href="' . esc_url( get_admin_url( null, '/post.php?post=' . $destination_id . '&action=edit' ) ) . '" target="_blank">' . get_the_title( $destination_id ) . '</a>'
 
 
 
119
  ),
120
  'remove_ticket_type' => $ticket_type_id,
121
  ) );
@@ -131,6 +140,8 @@ class Tribe__Tickets__Admin__Move_Ticket_Types extends Tribe__Tickets__Admin__Mo
131
  * Moving the ticket type, rather than recreating it, can be useful when ticket orders
132
  * have already been placed.
133
  *
 
 
134
  * @param int $ticket_type_id
135
  * @param int $destination_post_id
136
  * @param int $instigator_id (optional) the user who initiated or requested the change
@@ -202,10 +213,11 @@ class Tribe__Tickets__Admin__Move_Ticket_Types extends Tribe__Tickets__Admin__Mo
202
  $provider->clear_attendees_cache( $destination_post_id );
203
 
204
  $history_message = sprintf(
205
- __( 'Ticket type was moved to <a href="%1$s" target="_blank">%2$s</a> from <a href="%3$s" target="_blank">%4$s</a>', 'event-tickets' ),
206
- get_permalink( $destination_post_id ),
207
- get_the_title( $destination_post_id ),
208
- get_permalink( $src_post_id ),
 
209
  get_the_title( $src_post_id )
210
  );
211
 
25
  }
26
 
27
  return array_merge( $vars, array(
28
+ 'title' => esc_html( sprintf( __( 'Move %s Types', 'event-tickets' ), tribe_get_ticket_label_singular( 'move_ticket_type_title' ) ) ),
29
  'mode' => 'ticket_type_only',
30
  ) );
31
  }
81
 
82
  /**
83
  * Listens out for ajax requests to move a ticket type to a new post.
84
+ *
85
+ * @since 4.10.9 Use customizable ticket name functions.
86
  */
87
  public function move_ticket_type_requests() {
88
  $args = wp_parse_args( $_POST, array(
102
 
103
  if ( ! $ticket_type_id || ! $destination_id ) {
104
  wp_send_json_error( array(
105
+ 'message' => esc_html( sprintf(
106
+ __( '%1$s type could not be moved: the %2$s type or destination post was invalid.', 'event-tickets' ),
107
+ tribe_get_ticket_label_singular( 'move_ticket_type_error' ),
108
+ tribe_get_ticket_label_singular_lowercase( 'move_ticket_type_error' )
109
+ ) )
110
  ) );
111
  }
112
 
113
  if ( ! $this->move_ticket_type( $ticket_type_id, $destination_id ) ) {
114
  wp_send_json_error( array(
115
+ 'message' => esc_html( sprintf( __( '%s type could not be moved: unexpected failure during reassignment.', 'event-tickets' ), tribe_get_ticket_label_singular( 'move_ticket_type_error' ) ) )
116
  ) );
117
  }
118
 
119
  wp_send_json_success( array(
120
  'message' => sprintf(
121
+ '<p>' . esc_html__( '%1$s type %2$s for %3$s was successfully moved to %4$s. All previously sold %5$s of this type have been transferred to %4$s. Please adjust capacity and stock manually as needed. %2$s %6$s holders have received an email notifying them of the change. You may now close this window!', 'event-tickets' ) . '</p>',
122
+ esc_html( tribe_get_ticket_label_singular( 'move_ticket_type_success' ) ),
123
+ '<a href="' . esc_url( get_admin_url( null, '/post.php?post=' . $ticket_type_id . '&action=edit' ) ) . '" target="_blank">' . esc_html( get_the_title( $ticket_type_id ) ) . '</a>',
124
+ '<a href="' . esc_url( get_admin_url( null, '/post.php?post=' . $src_post_id . '&action=edit' ) ) . '" target="_blank">' . esc_html( get_the_title( $src_post_id ) ) . '</a>',
125
+ '<a href="' . esc_url( get_admin_url( null, '/post.php?post=' . $destination_id . '&action=edit' ) ) . '" target="_blank">' . esc_html( get_the_title( $destination_id ) ) . '</a>',
126
+ esc_html( tribe_get_ticket_label_plural_lowercase( 'move_ticket_type_success' ) ),
127
+ esc_html( tribe_get_ticket_label_singular_lowercase( 'move_ticket_type_success' ) )
128
  ),
129
  'remove_ticket_type' => $ticket_type_id,
130
  ) );
140
  * Moving the ticket type, rather than recreating it, can be useful when ticket orders
141
  * have already been placed.
142
  *
143
+ * @since 4.10.9 Use customizable ticket name functions.
144
+ *
145
  * @param int $ticket_type_id
146
  * @param int $destination_post_id
147
  * @param int $instigator_id (optional) the user who initiated or requested the change
213
  $provider->clear_attendees_cache( $destination_post_id );
214
 
215
  $history_message = sprintf(
216
+ __( '%1$s type was moved to <a href="%2$s" target="_blank">%3$s</a> from <a href="%4$s" target="_blank">%5$s</a>', 'event-tickets' ),
217
+ esc_html( tribe_get_ticket_label_singular( 'move_ticket_type_history_message' ) ),
218
+ esc_url( get_permalink( $destination_post_id ) ),
219
+ esc_html( get_the_title( $destination_post_id ) ),
220
+ esc_url( get_permalink( $src_post_id ) ),
221
  get_the_title( $src_post_id )
222
  );
223
 
src/Tribe/Admin/Move_Tickets.php CHANGED
@@ -413,8 +413,9 @@ class Tribe__Tickets__Admin__Move_Tickets {
413
  }
414
 
415
  /**
416
- * Listens for and handles requests to reassign tickets from one ticket type
417
- * to another.
 
418
  */
419
  public function move_tickets_request() {
420
  if ( ! wp_verify_nonce( $_POST['check'], 'move_tickets' ) ) {
@@ -435,7 +436,13 @@ class Tribe__Tickets__Admin__Move_Tickets {
435
 
436
  if ( ! $ticket_ids || ! $target_type_id ) {
437
  wp_send_json_error( array(
438
- 'message' => __( 'Tickets could not be moved: valid ticket IDs or a destination ID were not provided.', 'event-tickets' ),
 
 
 
 
 
 
439
  ) );
440
  }
441
 
@@ -443,7 +450,8 @@ class Tribe__Tickets__Admin__Move_Tickets {
443
 
444
  if ( ! $moved_tickets ) {
445
  wp_send_json_error( array(
446
- 'message' => __( 'Tickets could not be moved: there was an unexpected failure during reassignment.', 'event-tickets' ),
 
447
  ) );
448
  }
449
 
413
  }
414
 
415
  /**
416
+ * Listens for and handles requests to reassign tickets from one ticket type to another.
417
+ *
418
+ * @since 4.10.9 Use customizable ticket name functions.
419
  */
420
  public function move_tickets_request() {
421
  if ( ! wp_verify_nonce( $_POST['check'], 'move_tickets' ) ) {
436
 
437
  if ( ! $ticket_ids || ! $target_type_id ) {
438
  wp_send_json_error( array(
439
+ 'message' => esc_html(
440
+ sprintf(
441
+ __( '%1$s could not be moved: valid %2$s IDs or a destination ID were not provided.', 'event-tickets' ),
442
+ tribe_get_ticket_label_plural( 'move_tickets_request_error' ),
443
+ tribe_get_ticket_label_singular( 'move_tickets_request_error' )
444
+ )
445
+ )
446
  ) );
447
  }
448
 
450
 
451
  if ( ! $moved_tickets ) {
452
  wp_send_json_error( array(
453
+ 'message' => esc_html( sprintf( __( '%s could not be moved: there was an unexpected failure during reassignment.', 'event-tickets' ), tribe_get_ticket_label_plural( 'move_tickets_request_error' )
454
+ ) )
455
  ) );
456
  }
457
 
src/Tribe/Admin/Ticket_Settings.php CHANGED
@@ -14,12 +14,12 @@ class Tribe__Tickets__Admin__Ticket_Settings {
14
  /**
15
  * Loads the ticket settings from an admin-view file and returns them as an array.
16
  *
17
- * @return array
18
  */
19
  public function settings_ui() {
20
  $settings = $this->get_settings_array();
21
 
22
- new Tribe__Settings_Tab( 'event-tickets', __( 'Tickets', 'event-tickets' ), $settings );
23
  }
24
 
25
  /**
14
  /**
15
  * Loads the ticket settings from an admin-view file and returns them as an array.
16
  *
17
+ * @since 4.10.9 Use customizable ticket name functions.
18
  */
19
  public function settings_ui() {
20
  $settings = $this->get_settings_array();
21
 
22
+ new Tribe__Settings_Tab( 'event-tickets', tribe_get_ticket_label_plural( 'settings_tab' ), $settings );
23
  }
24
 
25
  /**
src/Tribe/Admin/Views/Ticketed.php CHANGED
@@ -29,7 +29,7 @@ class Tribe__Tickets__Admin__Views__Ticketed {
29
  *
30
  * @return array
31
  */
32
- public function filter_edit_link( array $views = array() ) {
33
  /** @var Tribe__Tickets__Cache__Cache_Interface $cache */
34
  $cache = tribe( 'tickets.cache' );
35
 
@@ -37,27 +37,27 @@ class Tribe__Tickets__Admin__Views__Ticketed {
37
 
38
  $ticketed_query_var = Tribe__Tickets__Query::$has_tickets;
39
 
40
- $ticketed_args = array(
41
  'post_type' => $this->post_type,
42
  $ticketed_query_var => '1',
43
  'post_status' => 'any',
44
  'paged' => 1,
45
- );
46
  $ticketed_url = add_query_arg( $ticketed_args );
47
  $ticketed_label = __( 'Ticketed', 'event-tickets' );
48
- $ticketed_count = count( $cache->posts_with_ticket_types( array( $this->post_type ), true ) );
49
 
50
  $views['tickets-ticketed'] = sprintf( '<a href="%s">%s</a> (%d)', $ticketed_url, $ticketed_label, $ticketed_count );
51
 
52
- $unticketed_args = array(
53
  'post_type' => $this->post_type,
54
  $ticketed_query_var => '0',
55
  'post_status' => 'any',
56
  'paged' => 1,
57
- );
58
  $unticketed_url = add_query_arg( $unticketed_args );
59
  $unticketed_label = __( 'Unticketed', 'event-tickets' );
60
- $unticketed_count = count( $cache->posts_without_ticket_types( array( $this->post_type ), true ) );
61
 
62
  $views['tickets-unticketed'] = sprintf( '<a href="%s">%s</a> (%d)', $unticketed_url, $unticketed_label,
63
  $unticketed_count );
@@ -66,4 +66,4 @@ class Tribe__Tickets__Admin__Views__Ticketed {
66
 
67
  return $views;
68
  }
69
- }
29
  *
30
  * @return array
31
  */
32
+ public function filter_edit_link( array $views = [] ) {
33
  /** @var Tribe__Tickets__Cache__Cache_Interface $cache */
34
  $cache = tribe( 'tickets.cache' );
35
 
37
 
38
  $ticketed_query_var = Tribe__Tickets__Query::$has_tickets;
39
 
40
+ $ticketed_args = [
41
  'post_type' => $this->post_type,
42
  $ticketed_query_var => '1',
43
  'post_status' => 'any',
44
  'paged' => 1,
45
+ ];
46
  $ticketed_url = add_query_arg( $ticketed_args );
47
  $ticketed_label = __( 'Ticketed', 'event-tickets' );
48
+ $ticketed_count = count( $cache->posts_with_ticket_types( [ $this->post_type ], true ) );
49
 
50
  $views['tickets-ticketed'] = sprintf( '<a href="%s">%s</a> (%d)', $ticketed_url, $ticketed_label, $ticketed_count );
51
 
52
+ $unticketed_args = [
53
  'post_type' => $this->post_type,
54
  $ticketed_query_var => '0',
55
  'post_status' => 'any',
56
  'paged' => 1,
57
+ ];
58
  $unticketed_url = add_query_arg( $unticketed_args );
59
  $unticketed_label = __( 'Unticketed', 'event-tickets' );
60
+ $unticketed_count = count( $cache->posts_without_ticket_types( [ $this->post_type ], true ) );
61
 
62
  $views['tickets-unticketed'] = sprintf( '<a href="%s">%s</a> (%d)', $unticketed_url, $unticketed_label,
63
  $unticketed_count );
66
 
67
  return $views;
68
  }
69
+ }
src/Tribe/Assets.php CHANGED
@@ -42,16 +42,17 @@ class Tribe__Tickets__Assets {
42
  }
43
 
44
  /**
45
- * Enqueue scripts for admin views
46
  *
47
  * @since 4.6
 
48
  */
49
  public function admin_enqueue_scripts() {
50
  // Set up some data for our localize scripts
51
 
52
  $upload_header_data = array(
53
- 'title' => esc_html__( 'Ticket header image', 'event-tickets' ),
54
- 'button' => esc_html__( 'Set as ticket header', 'event-tickets' ),
55
  );
56
 
57
  $nonces = array(
42
  }
43
 
44
  /**
45
+ * Enqueue scripts for admin views.
46
  *
47
  * @since 4.6
48
+ * @since 4.10.9 Use customizable ticket name functions.
49
  */
50
  public function admin_enqueue_scripts() {
51
  // Set up some data for our localize scripts
52
 
53
  $upload_header_data = array(
54
+ 'title' => esc_html( sprintf( __( '%s header image', 'event-tickets' ), tribe_get_ticket_label_singular( 'header_image_title' ) ) ),
55
+ 'button' => esc_html( sprintf( __( 'Set as %s header', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'header_button' ) ) ),
56
  );
57
 
58
  $nonces = array(
src/Tribe/Attendee_Registration/Main.php CHANGED
@@ -161,4 +161,35 @@ class Tribe__Tickets__Attendee_Registration__Main {
161
 
162
  return get_page_by_path( $slug );
163
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  }
161
 
162
  return get_page_by_path( $slug );
163
  }
164
+
165
+ /**
166
+ * Check if any Ticket "Products" has Attendee Registration Enabled.
167
+ *
168
+ * @since 4.10.9
169
+ *
170
+ * @param array $tickets An array of tickets to check if registration is enabled.
171
+ *
172
+ * @return bool Return true if any of the ticket products has attendee registration enabled.
173
+ */
174
+ public function has_attendee_registration_enabled_in_array_of_tickets( $tickets ) {
175
+
176
+ if ( ! is_array( $tickets ) ) {
177
+ return false;
178
+ }
179
+
180
+ foreach ( $tickets as $ticket ) {
181
+
182
+ if ( ! isset( $ticket['id'] ) ) {
183
+ continue;
184
+ }
185
+
186
+ if ( tribe( 'tickets.data_api' )->ticket_has_meta_fields( $ticket['id'] ) ) {
187
+ return true;
188
+ }
189
+ }
190
+
191
+ return false;
192
+
193
+ }
194
+
195
  }
src/Tribe/Attendee_Registration/Template.php CHANGED
@@ -304,17 +304,20 @@ class Tribe__Tickets__Attendee_Registration__Template extends Tribe__Templates {
304
  /**
305
  * Hooks into the genesis excerpt filter and forces it "off" on the AR page
306
  *
 
 
307
  * @param string|null $unused_null Unused variable
308
  * @param string $setting
309
  *
310
- * @return string|null
311
  */
312
  public function override_genesis_limit( $unused_null, $setting ) {
313
  // Bail if we're not on the attendee info page
314
  if ( ! $this->is_on_ar_page() ) {
315
- return $setting;
316
  }
317
 
 
318
  return '';
319
  }
320
 
304
  /**
305
  * Hooks into the genesis excerpt filter and forces it "off" on the AR page
306
  *
307
+ * @since 4.10.9 - Return null if not on ar page and true if on ar page.
308
+ *
309
  * @param string|null $unused_null Unused variable
310
  * @param string $setting
311
  *
312
+ * @return null|string
313
  */
314
  public function override_genesis_limit( $unused_null, $setting ) {
315
  // Bail if we're not on the attendee info page
316
  if ( ! $this->is_on_ar_page() ) {
317
+ return null;
318
  }
319
 
320
+ // Return empty string on AR to get no content.
321
  return '';
322
  }
323
 
src/Tribe/Attendees.php CHANGED
@@ -498,7 +498,7 @@ class Tribe__Tickets__Attendees {
498
  // Add additional expected columns
499
  $export_columns['order_id'] = esc_html_x( 'Order ID', 'attendee export', 'event-tickets' );
500
  $export_columns['order_status_label'] = esc_html_x( 'Order Status', 'attendee export', 'event-tickets' );
501
- $export_columns['attendee_id'] = esc_html_x( 'Ticket #', 'attendee export', 'event-tickets' );
502
  $export_columns['purchaser_name'] = esc_html_x( 'Customer Name', 'attendee export', 'event-tickets' );
503
  $export_columns['purchaser_email'] = esc_html_x( 'Customer Email Address', 'attendee export', 'event-tickets' );
504
 
498
  // Add additional expected columns
499
  $export_columns['order_id'] = esc_html_x( 'Order ID', 'attendee export', 'event-tickets' );
500
  $export_columns['order_status_label'] = esc_html_x( 'Order Status', 'attendee export', 'event-tickets' );
501
+ $export_columns['attendee_id'] = esc_html( sprintf( _x( '%s ID', 'attendee export', 'event-tickets' ), tribe_get_ticket_label_singular( 'attendee_export_ticket_id' ) ) );
502
  $export_columns['purchaser_name'] = esc_html_x( 'Customer Name', 'attendee export', 'event-tickets' );
503
  $export_columns['purchaser_email'] = esc_html_x( 'Customer Email Address', 'attendee export', 'event-tickets' );
504
 
src/Tribe/Attendees_Table.php CHANGED
@@ -113,7 +113,7 @@ class Tribe__Tickets__Attendees_Table extends WP_List_Table {
113
  public function get_table_columns() {
114
  $columns = [
115
  'cb' => '<input type="checkbox" />',
116
- 'ticket' => esc_html_x( 'Ticket', 'attendee table', 'event-tickets' ),
117
  'primary_info' => esc_html_x( 'Primary Information', 'attendee table', 'event-tickets' ),
118
  'security' => esc_html_x( 'Security Code', 'attendee table', 'event-tickets' ),
119
  'status' => esc_html_x( 'Status', 'attendee table', 'event-tickets' ),
@@ -976,14 +976,14 @@ class Tribe__Tickets__Attendees_Table extends WP_List_Table {
976
  */
977
  private function get_search_options() {
978
  return [
979
- 'purchaser_name' => __( 'Search by Purchaser Name', 'event-tickets' ),
980
- 'purchaser_email' => __( 'Search by Purchaser Email', 'event-tickets' ),
981
- 'user' => __( 'Search by User ID', 'event-tickets' ),
982
- 'order_status' => __( 'Search by Order Status', 'event-tickets' ),
983
- 'order' => __( 'Search by Order ID', 'event-tickets' ),
984
- 'security_code' => __( 'Search by Security Code', 'event-tickets' ),
985
- 'ID' => __( 'Search by Ticket ID', 'event-tickets' ),
986
- 'product_id' => __( 'Search by Product ID', 'event-tickets' ),
987
  ];
988
  }
989
 
@@ -1049,4 +1049,4 @@ class Tribe__Tickets__Attendees_Table extends WP_List_Table {
1049
 
1050
  echo $search_box;
1051
  }
1052
- }
113
  public function get_table_columns() {
114
  $columns = [
115
  'cb' => '<input type="checkbox" />',
116
+ 'ticket' => esc_html( tribe_get_ticket_label_singular( 'attendee_table_column' ) ),
117
  'primary_info' => esc_html_x( 'Primary Information', 'attendee table', 'event-tickets' ),
118
  'security' => esc_html_x( 'Security Code', 'attendee table', 'event-tickets' ),
119
  'status' => esc_html_x( 'Status', 'attendee table', 'event-tickets' ),
976
  */
977
  private function get_search_options() {
978
  return [
979
+ 'purchaser_name' => esc_html_x( 'Search by Purchaser Name', 'Attendees Table search options', 'event-tickets' ),
980
+ 'purchaser_email' => esc_html_x( 'Search by Purchaser Email', 'Attendees Table search options', 'event-tickets' ),
981
+ 'user' => esc_html_x( 'Search by User ID', 'Attendees Table search options', 'event-tickets' ),
982
+ 'order_status' => esc_html_x( 'Search by Order Status', 'Attendees Table search options', 'event-tickets' ),
983
+ 'order' => esc_html_x( 'Search by Order ID', 'Attendees Table search options', 'event-tickets' ),
984
+ 'security_code' => esc_html_x( 'Search by Security Code', 'Attendees Table search options', 'event-tickets' ),
985
+ 'ID' => esc_html( sprintf( _x( 'Search by %s ID', 'Attendees Table search options', 'event-tickets' ), tribe_get_ticket_label_singular( 'attendees_table_search_box_ticket_id' ) ) ),
986
+ 'product_id' => esc_html_x( 'Search by Product ID', 'Attendees Table search options', 'event-tickets' ),
987
  ];
988
  }
989
 
1049
 
1050
  echo $search_box;
1051
  }
1052
+ }
src/Tribe/CSV_Importer/Column_Names.php CHANGED
@@ -31,16 +31,16 @@ class Tribe__Tickets__CSV_Importer__Column_Names {
31
  public function filter_rsvp_column_names( array $column_names ) {
32
  $column_names = array_merge( $column_names,
33
  array(
34
- 'event_name' => esc_html__( 'Event Name or ID or Slug', 'event-tickets' ),
35
- 'ticket_name' => esc_html__( 'Ticket Name', 'event-tickets' ),
36
- 'ticket_description' => esc_html__( 'Ticket Description', 'event-tickets' ),
37
- 'ticket_show_description' => esc_html__( 'Ticket Show Description', 'event-tickets-plus' ),
38
- 'ticket_start_sale_date' => esc_html__( 'Ticket Start Sale Date', 'event-tickets' ),
39
- 'ticket_start_sale_time' => esc_html__( 'Ticket Start Sale Time', 'event-tickets' ),
40
- 'ticket_end_sale_date' => esc_html__( 'Ticket End Sale Date', 'event-tickets' ),
41
- 'ticket_end_sale_time' => esc_html__( 'Ticket End Sale Time', 'event-tickets' ),
42
- 'ticket_stock' => esc_html__( 'Ticket Stock', 'event-tickets' ),
43
- 'ticket_capacity' => esc_html__( 'Ticket Capacity', 'event-tickets' ),
44
  ) );
45
 
46
  return $column_names;
31
  public function filter_rsvp_column_names( array $column_names ) {
32
  $column_names = array_merge( $column_names,
33
  array(
34
+ 'event_name' => esc_html__( 'Event Name or ID or Slug', 'event-tickets' ),
35
+ 'ticket_name' => esc_html( sprintf( __( '%s Name', 'event-tickets' ), tribe_get_ticket_label_singular( 'rsvp_column_name_name' ) ) ),
36
+ 'ticket_description' => esc_html( sprintf( __( '%s Description', 'event-tickets' ), tribe_get_ticket_label_singular( 'rsvp_column_name_description' ) ) ),
37
+ 'ticket_show_description' => esc_html( sprintf( __( '%s Show Description', 'event-tickets-plus' ), tribe_get_ticket_label_singular( 'rsvp_column_name_show_description' ) ) ),
38
+ 'ticket_start_sale_date' => esc_html( sprintf( __( '%s Start Sale Date', 'event-tickets' ), tribe_get_ticket_label_singular( 'rsvp_column_name_start_sale_date' ) ) ),
39
+ 'ticket_start_sale_time' => esc_html( sprintf( __( '%s Start Sale Time', 'event-tickets' ), tribe_get_ticket_label_singular( 'rsvp_column_name_start_sale_time' ) ) ),
40
+ 'ticket_end_sale_date' => esc_html( sprintf( __( '%s End Sale Date', 'event-tickets' ), tribe_get_ticket_label_singular( 'rsvp_column_name_end_sale_date' ) ) ),
41
+ 'ticket_end_sale_time' => esc_html( sprintf( __( '%s End Sale Time', 'event-tickets' ), tribe_get_ticket_label_singular( 'rsvp_column_name_end_sale_time' ) ) ),
42
+ 'ticket_stock' => esc_html( sprintf( __( '%s Stock', 'event-tickets' ), tribe_get_ticket_label_singular( 'rsvp_column_name_stock' ) ) ),
43
+ 'ticket_capacity' => esc_html( sprintf( __( '%s Capacity', 'event-tickets' ), tribe_get_ticket_label_singular( 'rsvp_column_name_capacity' ) ) ),
44
  ) );
45
 
46
  return $column_names;
src/Tribe/CSV_Importer/Rows.php CHANGED
@@ -32,7 +32,7 @@ class Tribe__Tickets__CSV_Importer__Rows {
32
  * @return array
33
  */
34
  public function filter_import_options_rows( array $import_options ) {
35
- $import_options['rsvp'] = esc_html_x( 'RSVPs', 'import type', 'event-tickets' );
36
 
37
  return $import_options;
38
  }
@@ -46,7 +46,7 @@ class Tribe__Tickets__CSV_Importer__Rows {
46
  */
47
  public function filter_csv_post_types( array $post_types ) {
48
  $post_type = get_post_type_object( Tribe__Tickets__RSVP::get_instance()->ticket_object );
49
- $post_type->labels->name = _x( 'RSVPs', 'post type label', 'event-tickets' );
50
  $post_types[] = $post_type;
51
  return $post_types;
52
  }
32
  * @return array
33
  */
34
  public function filter_import_options_rows( array $import_options ) {
35
+ $import_options['rsvp'] = esc_html( tribe_get_rsvp_label_plural( 'import_type' ) );
36
 
37
  return $import_options;
38
  }
46
  */
47
  public function filter_csv_post_types( array $post_types ) {
48
  $post_type = get_post_type_object( Tribe__Tickets__RSVP::get_instance()->ticket_object );
49
+ $post_type->labels->name = esc_html( tribe_get_rsvp_label_plural( 'post_type_label' ) );
50
  $post_types[] = $post_type;
51
  return $post_types;
52
  }
src/Tribe/Commerce/PayPal/Attendance_Totals.php CHANGED
@@ -70,10 +70,11 @@ class Tribe__Tickets__Commerce__PayPal__Attendance_Totals extends Tribe__Tickets
70
  * Prints an HTML (unordered) list of attendance totals.
71
  *
72
  * @since 4.7
 
73
  */
74
  public function print_totals() {
75
  $args = [
76
- 'total_sold_label' => _x( 'Total Tickets:', 'attendee summary', 'event-tickets' ),
77
  'total_complete_label' => _x( 'Complete:', 'attendee summary', 'event-tickets' ),
78
  'total_cancelled_label' => _x( 'Cancelled:', 'attendee summary', 'event-tickets' ),
79
  'total_sold' => $this->get_total_sold(),
70
  * Prints an HTML (unordered) list of attendance totals.
71
  *
72
  * @since 4.7
73
+ * @since 4.10.9 Use customizable ticket name functions.
74
  */
75
  public function print_totals() {
76
  $args = [
77
+ 'total_sold_label' => esc_html( sprintf( _x( 'Total %s:', 'attendee summary', 'event-tickets' ), tribe_get_ticket_label_plural( 'total_sold_label' ) ) ),
78
  'total_complete_label' => _x( 'Complete:', 'attendee summary', 'event-tickets' ),
79
  'total_cancelled_label' => _x( 'Cancelled:', 'attendee summary', 'event-tickets' ),
80
  'total_sold' => $this->get_total_sold(),
src/Tribe/Commerce/PayPal/Errors.php CHANGED
@@ -13,6 +13,7 @@ class Tribe__Tickets__Commerce__PayPal__Errors {
13
  * Casts a numeric error code related to PayPal tickets to a localized string.
14
  *
15
  * @since 4.7
 
16
  *
17
  * @param string|int $error_code
18
  *
@@ -22,16 +23,16 @@ class Tribe__Tickets__Commerce__PayPal__Errors {
22
  $map = array(
23
  '-1' => __( 'There was an error', 'event-tickets' ),
24
  '1' => __( 'Attendee email and/or full name is missing', 'event-tickets' ),
25
- '2' => __( 'Trying to oversell a ticket but the current oversell policy does not allow it', 'event-tickets' ),
26
- '3' => __( 'Ticket quantity is 0', 'event-tickets' ),
27
 
28
  // a numeric namespace reserved for front-end errors
29
- '101' => __( 'In order to purchase tickets, you must enter your name and a valid email address.', 'event-tickets' ),
30
- '102' => __( 'You can\'t add more tickets than the total remaining tickets.', 'event-tickets' ),
31
- '103' => __( 'You should add at least one ticket.', 'event-tickets' ),
32
 
33
  // a numeric namespace reserved for front-end messages
34
- '201' => __( "Your order is currently processing. Once completed, you'll receive your ticket(s) in an email.", 'event-tickets' ),
35
  );
36
 
37
  /**
13
  * Casts a numeric error code related to PayPal tickets to a localized string.
14
  *
15
  * @since 4.7
16
+ * @since 4.10.9 Use customizable ticket name functions.
17
  *
18
  * @param string|int $error_code
19
  *
23
  $map = array(
24
  '-1' => __( 'There was an error', 'event-tickets' ),
25
  '1' => __( 'Attendee email and/or full name is missing', 'event-tickets' ),
26
+ '2' => esc_html( sprintf( __( 'Trying to oversell a %s but the current oversell policy does not allow it', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'paypal_error_oversell_policy' ) ) ),
27
+ '3' => esc_html( sprintf( __( '%s quantity is 0', 'event-tickets' ), tribe_get_ticket_label_singular( 'paypal_error_zero_quantity' ) ) ),
28
 
29
  // a numeric namespace reserved for front-end errors
30
+ '101' => esc_html( sprintf( __( 'In order to purchase %s, you must enter your name and a valid email address.', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'paypal_error_missing_name_or_email' ) ) ),
31
+ '102' => esc_html( sprintf( __( 'You can\'t add more %1$s than the total remaining %1$s.', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'paypal_error_added_too_many' ) ) ),
32
+ '103' => esc_html( sprintf( __( 'You should add at least one %s.', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'paypal_error_zero_added' ) ) ),
33
 
34
  // a numeric namespace reserved for front-end messages
35
+ '201' => esc_html( sprintf( __( "Your order is currently processing. Once completed, you'll receive your %s(s) in an email.", 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'paypal_error_order_processing' ) ) ),
36
  );
37
 
38
  /**
src/Tribe/Commerce/PayPal/Frontend/Tickets_Form.php CHANGED
@@ -34,6 +34,7 @@ class Tribe__Tickets__Commerce__PayPal__Frontend__Tickets_Form {
34
  * Modifies the passed content to inject the front-end tickets form.
35
  *
36
  * @since 4.7
 
37
  *
38
  * @return void The method will echo in the context of a buffered output.
39
  *
@@ -73,7 +74,7 @@ class Tribe__Tickets__Commerce__PayPal__Frontend__Tickets_Form {
73
  $ticket_sent = empty( $_GET['tpp_sent'] ) ? false : true;
74
 
75
  if ( $ticket_sent ) {
76
- $this->main->add_message( __( 'Your PayPal Ticket has been received! Check your email for your PayPal Ticket confirmation.', 'event-tickets' ), 'success' );
77
  }
78
 
79
  $ticket_error = empty( $_GET['tpp_error'] ) ? false : (int) $_GET['tpp_error'];
34
  * Modifies the passed content to inject the front-end tickets form.
35
  *
36
  * @since 4.7
37
+ * @since 4.10.9 Use customizable ticket name functions.
38
  *
39
  * @return void The method will echo in the context of a buffered output.
40
  *
74
  $ticket_sent = empty( $_GET['tpp_sent'] ) ? false : true;
75
 
76
  if ( $ticket_sent ) {
77
+ $this->main->add_message( esc_html( sprintf( __( 'Your PayPal %1$s has been received! Check your email for your PayPal %1$s confirmation.', 'event-tickets' ), tribe_get_ticket_label_singular( 'ticket_sent' ) ) ), 'success' );
78
  }
79
 
80
  $ticket_error = empty( $_GET['tpp_error'] ) ? false : (int) $_GET['tpp_error'];
src/Tribe/Commerce/PayPal/Main.php CHANGED
@@ -178,7 +178,7 @@ class Tribe__Tickets__Commerce__PayPal__Main extends Tribe__Tickets__Tickets {
178
  $main = Tribe__Tickets__Main::instance();
179
 
180
  /* Set up some parent's vars */
181
- $this->plugin_name = _x( 'Tribe Commerce', 'ticket provider', 'event-tickets' );
182
  $this->plugin_path = $main->plugin_path;
183
  $this->plugin_url = $main->plugin_url;
184
 
178
  $main = Tribe__Tickets__Main::instance();
179
 
180
  /* Set up some parent's vars */
181
+ $this->plugin_name = esc_html_x( 'Tribe Commerce', 'ticket provider', 'event-tickets' );
182
  $this->plugin_path = $main->plugin_path;
183
  $this->plugin_url = $main->plugin_url;
184
 
src/Tribe/Commerce/PayPal/Oversell/Admin_Notice_Decorator.php CHANGED
@@ -95,6 +95,7 @@ class Tribe__Tickets__Commerce__PayPal__Oversell__Admin_Notice_Decorator impleme
95
  * Returns the notice header HTML.
96
  *
97
  * @since 4.7
 
98
  *
99
  * @param int $qty
100
  * @param int $inventory
@@ -121,8 +122,8 @@ class Tribe__Tickets__Commerce__PayPal__Oversell__Admin_Notice_Decorator impleme
121
  $links = tribe( 'tickets.commerce.paypal.links' );
122
  $order_paypal_link = $links->order_link( 'tag', $this->get_order_id(), __( 'in your PayPal account', 'event-tickets' ) );
123
 
124
- $message = esc_html__(
125
- '%1$s is oversold: there are more tickets sold than the available capacity. This can occur when the PayPal transaction is not completed immediately, delaying the decrease in ticket availability. Order %2$s includes %3$s ticket(s). There are only %4$s ticket(s) left. Ticket emails have not yet been sent for this order. Choose how to process this order from the options below.',
126
  'event-tickets'
127
  );
128
 
@@ -132,11 +133,14 @@ class Tribe__Tickets__Commerce__PayPal__Oversell__Admin_Notice_Decorator impleme
132
  return sprintf(
133
  '<p class="tribe-tickets-paypal-oversell-header">%s</p>',
134
  sprintf(
135
- $message,
136
- $post_title,
 
 
137
  esc_html( $this->get_order_id() ),
138
  "<strong>{$qty}</strong>",
139
- "<strong>{$inventory}</strong>"
 
140
  )
141
  );
142
  }
95
  * Returns the notice header HTML.
96
  *
97
  * @since 4.7
98
+ * @since 4.10.9 Use customizable ticket name functions.
99
  *
100
  * @param int $qty
101
  * @param int $inventory
122
  $links = tribe( 'tickets.commerce.paypal.links' );
123
  $order_paypal_link = $links->order_link( 'tag', $this->get_order_id(), __( 'in your PayPal account', 'event-tickets' ) );
124
 
125
+ $message = __(
126
+ '%1$s is oversold: there are more %2$s sold than the available capacity. This can occur when the PayPal transaction is not completed immediately, delaying the decrease in %3$s availability. Order %4$s includes %5$s %3$s(s). There are only %6$s %3$s(s) left. %7$s emails have not yet been sent for this order. Choose how to process this order from the options below.',
127
  'event-tickets'
128
  );
129
 
133
  return sprintf(
134
  '<p class="tribe-tickets-paypal-oversell-header">%s</p>',
135
  sprintf(
136
+ esc_html( $message ),
137
+ esc_html( $post_title ),
138
+ esc_html( tribe_get_ticket_label_plural_lowercase( 'oversold_message' ) ),
139
+ esc_html( tribe_get_ticket_label_singular_lowercase( 'oversold_message' ) ),
140
  esc_html( $this->get_order_id() ),
141
  "<strong>{$qty}</strong>",
142
+ "<strong>{$inventory}</strong>",
143
+ esc_html( tribe_get_ticket_label_singular( 'oversold_message' ) )
144
  )
145
  );
146
  }
src/Tribe/Editor/REST/V1/Endpoints/Single_Ticket.php CHANGED
@@ -203,6 +203,7 @@ class Tribe__Tickets__Editor__REST__V1__Endpoints__Single_ticket
203
  * Add ticket callback executed to update / add a new ticket.
204
  *
205
  * @since 4.9
 
206
  *
207
  * @param WP_REST_Request $request
208
  * @param $nonce_action
@@ -270,7 +271,7 @@ class Tribe__Tickets__Editor__REST__V1__Endpoints__Single_ticket
270
  if ( ! $ticket ) {
271
  return new WP_Error(
272
  'not_acceptable',
273
- __( 'Ticket was not able to be updated', 'event-tickets' ),
274
  array( 'status' => 406 )
275
  );
276
  }
203
  * Add ticket callback executed to update / add a new ticket.
204
  *
205
  * @since 4.9
206
+ * @since 4.10.9 Use customizable ticket name functions.
207
  *
208
  * @param WP_REST_Request $request
209
  * @param $nonce_action
271
  if ( ! $ticket ) {
272
  return new WP_Error(
273
  'not_acceptable',
274
+ esc_html( sprintf( __( '%s was not able to be updated', 'event-tickets' ), tribe_get_ticket_label_singular( 'rest_add_ticket_error' ) ) ),
275
  array( 'status' => 406 )
276
  );
277
  }
src/Tribe/Main.php CHANGED
@@ -4,7 +4,7 @@ class Tribe__Tickets__Main {
4
  /**
5
  * Current version of this plugin
6
  */
7
- const VERSION = '4.10.8';
8
 
9
  /**
10
  * Min required The Events Calendar version
@@ -138,7 +138,7 @@ class Tribe__Tickets__Main {
138
  */
139
  protected function __construct() {
140
  /* Set up some parent's vars */
141
- $this->plugin_name = 'Tickets';
142
  $this->plugin_slug = 'tickets';
143
  $this->plugin_path = trailingslashit( EVENT_TICKETS_DIR );
144
  $this->plugin_dir = trailingslashit( basename( $this->plugin_path ) );
@@ -153,10 +153,10 @@ class Tribe__Tickets__Main {
153
 
154
  $this->maybe_set_common_lib_info();
155
 
156
- add_action( 'plugins_loaded', array( $this, 'maybe_bail_if_old_tec_is_present' ), -1 );
157
- add_action( 'plugins_loaded', array( $this, 'maybe_bail_if_invalid_wp_or_php' ), -1 );
158
- add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ), 0 );
159
- register_activation_hook( EVENT_TICKETS_MAIN_PLUGIN_FILE, array( $this, 'on_activation' ) );
160
  }
161
 
162
  /**
@@ -178,7 +178,7 @@ class Tribe__Tickets__Main {
178
 
179
  // if there isn't a tribe-common version, bail
180
  if ( ! preg_match( $this->common_version_regex, $common_version, $matches ) ) {
181
- add_action( 'admin_head', array( $this, 'missing_common_libs' ) );
182
 
183
  return;
184
  }
@@ -193,10 +193,10 @@ class Tribe__Tickets__Main {
193
  empty( $GLOBALS['tribe-common-info'] )
194
  || version_compare( $GLOBALS['tribe-common-info']['version'], $common_version, '<' )
195
  ) {
196
- $GLOBALS['tribe-common-info'] = array(
197
  'dir' => "{$this->plugin_path}common/src/Tribe",
198
  'version' => $common_version,
199
- );
200
  }
201
  }
202
 
@@ -266,8 +266,8 @@ class Tribe__Tickets__Main {
266
  return;
267
  }
268
 
269
- add_action( 'admin_notices', array( $this, 'not_supported_error' ) );
270
- add_action( 'network_admin_notices', array( $this, 'not_supported_error' ) );
271
 
272
  // if we get in here, we need to reset the global common to TEC's version so that we don't cause a fatal
273
  $this->reset_common_lib_info_back_to_tec();
@@ -296,7 +296,7 @@ class Tribe__Tickets__Main {
296
  // Start Up Common
297
  Tribe__Main::instance();
298
 
299
- add_action( 'tribe_common_loaded', array( $this, 'bootstrap' ), 0 );
300
  }
301
 
302
  /**
@@ -343,7 +343,7 @@ class Tribe__Tickets__Main {
343
  tribe_singleton( 'tickets.main', $this );
344
 
345
  tribe_singleton( 'tickets.rsvp', new Tribe__Tickets__RSVP );
346
- tribe_singleton( 'tickets.commerce.currency', 'Tribe__Tickets__Commerce__Currency', array( 'hook' ) );
347
  tribe_singleton( 'tickets.commerce.paypal', new Tribe__Tickets__Commerce__PayPal__Main );
348
  tribe_singleton( 'tickets.redirections', 'Tribe__Tickets__Redirections' );
349
 
@@ -362,7 +362,12 @@ class Tribe__Tickets__Main {
362
  tribe_register_provider( 'Tribe__Tickets__Editor__Provider' );
363
 
364
  // Privacy
365
- tribe_singleton( 'tickets.privacy', 'Tribe__Tickets__Privacy', array( 'hook' ) );
 
 
 
 
 
366
  }
367
 
368
  /**
@@ -390,10 +395,10 @@ class Tribe__Tickets__Main {
390
 
391
  $upgrade_path = wp_nonce_url(
392
  add_query_arg(
393
- array(
394
  'action' => 'upgrade-plugin',
395
  'plugin' => $plugin_short_path,
396
- ), get_admin_url() . 'update.php'
397
  ), 'upgrade-plugin_' . $plugin_short_path
398
  );
399
 
@@ -476,7 +481,7 @@ class Tribe__Tickets__Main {
476
  if ( version_compare( Tribe__Settings_Manager::get_option( 'latest_event_tickets_version' ), self::VERSION, '<' ) ) {
477
  $previous_versions = Tribe__Settings_Manager::get_option( 'previous_event_tickets_versions' )
478
  ? Tribe__Settings_Manager::get_option( 'previous_event_tickets_versions' )
479
- : array();
480
 
481
  $previous_versions[] = Tribe__Settings_Manager::get_option( 'latest_event_tickets_version' )
482
  ? Tribe__Settings_Manager::get_option( 'latest_event_tickets_version' )
@@ -509,38 +514,38 @@ class Tribe__Tickets__Main {
509
  * set up hooks for this class
510
  */
511
  public function hooks() {
512
- add_action( 'init', array( $this, 'init' ) );
513
 
514
  // connect upgrade script
515
- add_action( 'init', array( $this, 'run_updates' ), 0, 0 );
516
 
517
- add_filter( 'tribe_post_types', array( $this, 'inject_post_types' ) );
518
 
519
  // Setup Help Tab texting
520
- add_action( 'tribe_help_pre_get_sections', array( $this, 'add_help_section_support_content' ) );
521
- add_action( 'tribe_help_pre_get_sections', array( $this, 'add_help_section_featured_content' ) );
522
- add_action( 'tribe_help_pre_get_sections', array( $this, 'add_help_section_extra_content' ) );
523
- add_filter( 'tribe_support_registered_template_systems', array( $this, 'add_template_updates_check' ) );
524
- add_action( 'tribe_tickets_plugin_loaded', array( 'Tribe__Support', 'getInstance' ) );
525
 
526
  // Setup Front End Display
527
  add_action( 'tribe_events_inside_cost', 'tribe_tickets_buy_button', 10, 0 );
528
 
529
  // Hook to oembeds
530
- add_action( 'tribe_events_embed_after_the_cost_value', array( $this, 'inject_buy_button_into_oembed' ) );
531
- add_action( 'embed_head', array( $this, 'embed_head' ) );
532
 
533
  // Attendee screen enhancements
534
- add_action( 'tribe_events_tickets_attendees_event_details_top', array( $this, 'setup_attendance_totals' ), 20 );
535
 
536
  // CSV Import options
537
  if ( class_exists( 'Tribe__Events__Main' ) ) {
538
- add_filter( 'tribe_events_import_options_rows', array( Tribe__Tickets__CSV_Importer__Rows::instance(), 'filter_import_options_rows' ) );
539
- add_filter( 'tribe_aggregator_csv_post_types', array( Tribe__Tickets__CSV_Importer__Rows::instance(), 'filter_csv_post_types' ) );
540
- add_filter( 'tribe_aggregator_csv_column_mapping', array( Tribe__Tickets__CSV_Importer__Column_Names::instance(), 'filter_rsvp_column_mapping' ) );
541
- add_filter( 'tribe_event_import_rsvp_tickets_column_names', array( Tribe__Tickets__CSV_Importer__Column_Names::instance(), 'filter_rsvp_column_names' ) );
542
- add_filter( 'tribe_events_import_rsvp_tickets_importer', array( 'Tribe__Tickets__CSV_Importer__RSVP_Importer', 'instance' ), 10, 2 );
543
- add_action( 'tribe_tickets_ticket_deleted', array( 'Tribe__Tickets__Attendance', 'delete_attendees_caches' ) );
544
 
545
  /**
546
  * Hooking to "rsvp" to fetch an importer to fetch Column names is deprecated
@@ -551,8 +556,8 @@ class Tribe__Tickets__Main {
551
  *
552
  * @todo remove these two hooks when the old CSV interface is retired, maybe 5.0?
553
  */
554
- add_filter( 'tribe_events_import_rsvp_importer', array( 'Tribe__Tickets__CSV_Importer__RSVP_Importer', 'instance' ), 10, 2 );
555
- add_filter( 'tribe_event_import_rsvp_column_names', array( Tribe__Tickets__CSV_Importer__Column_Names::instance(), 'filter_rsvp_column_names' ) );
556
  }
557
 
558
  // Load our assets
@@ -574,12 +579,12 @@ class Tribe__Tickets__Main {
574
  */
575
  public function add_help_section_support_content( $help ) {
576
  $help->add_section_content( 'support', '<strong>' . esc_html__( 'Support for Event Tickets', 'event-tickets' ) . '</strong>', 20 );
577
- $help->add_section_content( 'support', array(
578
  '<strong><a href="http://m.tri.be/18ne" target="_blank">' . esc_html__( 'Settings overview', 'event-tickets' ) . '</a></strong>',
579
  '<strong><a href="http://m.tri.be/18nf" target="_blank">' . esc_html__( 'Features overview', 'event-tickets' ) . '</a></strong>',
580
  '<strong><a href="http://m.tri.be/18jb" target="_blank">' . esc_html__( 'Troubleshooting common problems', 'event-tickets' ) . '</a></strong>',
581
  '<strong><a href="http://m.tri.be/18ng" target="_blank">' . esc_html__( 'Customizing Event Tickets', 'event-tickets' ) . '</a></strong>',
582
- ), 20 );
583
  }
584
 
585
  /**
@@ -597,7 +602,7 @@ class Tribe__Tickets__Main {
597
 
598
  $link = '<a href="http://m.tri.be/18nd" target="_blank">' . esc_html__( 'New User Primer', 'event-tickets' ) . '</a>';
599
 
600
- $help->add_section_content( 'feature-box', sprintf( __( 'We are committed to helping you sell tickets for your event. Check out our handy %s to get started.', 'event-tickets' ), $link ), 20 );
601
  }
602
 
603
  /**
@@ -608,7 +613,7 @@ class Tribe__Tickets__Main {
608
  * @return void
609
  */
610
  public function add_help_section_extra_content( $help ) {
611
- if ( ! $help->is_active( array( 'events-calendar-pro', 'event-tickets-plus' ) ) && $help->is_active( 'the-events-calendar' ) ) {
612
  // We just skip because it's treated on TEC
613
  return;
614
  } elseif ( ! $help->is_active( 'the-events-calendar' ) ) {
@@ -618,11 +623,11 @@ class Tribe__Tickets__Main {
618
  $help->add_section_content( 'extra-help', sprintf( __( 'If you have tried the above steps and are still having trouble, you can post a new thread to our %s. Our support staff monitors these forums once a week and would be happy to assist you there.', 'event-tickets' ), $link ), 20 );
619
 
620
  $link_forum = '<a href="http://m.tri.be/4w/" target="_blank">' . esc_html__( 'premium support on our website', 'event-tickets' ) . '</a>';
621
- $link_plus = '<a href="http://m.tri.be/18ni" target="_blank">' . esc_html__( 'Events Tickets Plus', 'event-tickets' ) . '</a>';
622
  $help->add_section_content( 'extra-help', sprintf( __( 'Looking for more immediate support? We offer %1$s with the purchase of any of our premium plugins (like %2$s). Pick up a license and you can post there directly and expect a response within 24-48 hours during weekdays.', 'event-tickets' ), $link_forum, $link_plus ), 20 );
623
 
624
  $link = '<a href="http://m.tri.be/4w/" target="_blank">' . esc_html__( 'post a thread', 'event-tickets' ) . '</a>';
625
- $help->add_section_content( 'extra-help', sprintf( __( 'Already have Events Tickets Plus? You can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week).', 'event-tickets' ), $link ), 20 );
626
 
627
  } else {
628
 
@@ -641,11 +646,11 @@ class Tribe__Tickets__Main {
641
  * @return array
642
  */
643
  public function add_template_updates_check( $plugins ) {
644
- $plugins[ __( 'Event Tickets', 'event-tickets' ) ] = array(
645
  self::VERSION,
646
  $this->plugin_path . 'src/views/tickets',
647
  trailingslashit( get_stylesheet_directory() ) . 'tribe-events/tickets',
648
- );
649
 
650
  return $plugins;
651
  }
@@ -722,7 +727,7 @@ class Tribe__Tickets__Main {
722
  */
723
  public function activation_page() {
724
  if ( empty( $this->activation_page ) ) {
725
- $this->activation_page = new Tribe__Admin__Activation_Page( array(
726
  'slug' => 'event-tickets',
727
  'version' => self::VERSION,
728
  'activation_transient' => '_tribe_tickets_activation_redirect',
@@ -730,7 +735,7 @@ class Tribe__Tickets__Main {
730
  'version_history_slug' => 'previous_event_tickets_versions',
731
  'welcome_page_title' => esc_html__( 'Welcome to Event Tickets!', 'event-tickets' ),
732
  'welcome_page_template' => $this->plugin_path . 'src/admin-views/admin-welcome-message.php',
733
- ) );
734
  }
735
 
736
  return $this->activation_page;
@@ -805,11 +810,11 @@ class Tribe__Tickets__Main {
805
  * Returns the supported post types for tickets
806
  */
807
  public function post_types() {
808
- $options = (array) get_option( Tribe__Main::OPTIONNAME, array() );
809
 
810
  // if the ticket-enabled-post-types index has never been set, default it to tribe_events
811
  if ( ! array_key_exists( 'ticket-enabled-post-types', $options ) ) {
812
- $defaults = array( 'tribe_events' );
813
  $options['ticket-enabled-post-types'] = $defaults;
814
  tribe_update_option( 'ticket-enabled-post-types', $defaults );
815
  }
@@ -834,7 +839,7 @@ class Tribe__Tickets__Main {
834
  }
835
 
836
  /**
837
- * Injects a buy/RSVP button into oembeds for events when necessary
838
  */
839
  public function inject_buy_button_into_oembed() {
840
  $event_id = get_the_ID();
@@ -866,7 +871,7 @@ class Tribe__Tickets__Main {
866
  return;
867
  }
868
 
869
- $button_text = $has_non_rsvp ? __( 'Buy', 'event-tickets' ) : _x( 'RSVP', 'button text', 'event-tickets' );
870
  /**
871
  * Filters the text that appears in the buy/rsvp button on event oembeds
872
  *
@@ -976,9 +981,9 @@ class Tribe__Tickets__Main {
976
  * @since 4.10.6
977
  */
978
  public function register_plugin_autoload_paths() {
979
- $prefixes = array(
980
  'Tribe__Tickets__' => $this->plugin_path . 'src/Tribe',
981
- );
982
 
983
  $this->get_autoloader_instance()->register_prefixes( $prefixes );
984
  }
4
  /**
5
  * Current version of this plugin
6
  */
7
+ const VERSION = '4.10.9';
8
 
9
  /**
10
  * Min required The Events Calendar version
138
  */
139
  protected function __construct() {
140
  /* Set up some parent's vars */
141
+ $this->plugin_name = esc_html_x( 'Tickets', 'provider_plugin_name', 'event-tickets' );
142
  $this->plugin_slug = 'tickets';
143
  $this->plugin_path = trailingslashit( EVENT_TICKETS_DIR );
144
  $this->plugin_dir = trailingslashit( basename( $this->plugin_path ) );
153
 
154
  $this->maybe_set_common_lib_info();
155
 
156
+ add_action( 'plugins_loaded', [ $this, 'maybe_bail_if_old_tec_is_present' ], -1 );
157
+ add_action( 'plugins_loaded', [ $this, 'maybe_bail_if_invalid_wp_or_php' ], -1 );
158
+ add_action( 'plugins_loaded', [ $this, 'plugins_loaded' ], 0 );
159
+ register_activation_hook( EVENT_TICKETS_MAIN_PLUGIN_FILE, [ $this, 'on_activation' ] );
160
  }
161
 
162
  /**
178
 
179
  // if there isn't a tribe-common version, bail
180
  if ( ! preg_match( $this->common_version_regex, $common_version, $matches ) ) {
181
+ add_action( 'admin_head', [ $this, 'missing_common_libs' ] );
182
 
183
  return;
184
  }
193
  empty( $GLOBALS['tribe-common-info'] )
194
  || version_compare( $GLOBALS['tribe-common-info']['version'], $common_version, '<' )
195
  ) {
196
+ $GLOBALS['tribe-common-info'] = [
197
  'dir' => "{$this->plugin_path}common/src/Tribe",
198
  'version' => $common_version,
199
+ ];
200
  }
201
  }
202
 
266
  return;
267
  }
268
 
269
+ add_action( 'admin_notices', [ $this, 'not_supported_error' ] );
270
+ add_action( 'network_admin_notices', [ $this, 'not_supported_error' ] );
271
 
272
  // if we get in here, we need to reset the global common to TEC's version so that we don't cause a fatal
273
  $this->reset_common_lib_info_back_to_tec();
296
  // Start Up Common
297
  Tribe__Main::instance();
298
 
299
+ add_action( 'tribe_common_loaded', [ $this, 'bootstrap' ], 0 );
300
  }
301
 
302
  /**
343
  tribe_singleton( 'tickets.main', $this );
344
 
345
  tribe_singleton( 'tickets.rsvp', new Tribe__Tickets__RSVP );
346
+ tribe_singleton( 'tickets.commerce.currency', 'Tribe__Tickets__Commerce__Currency', [ 'hook' ] );
347
  tribe_singleton( 'tickets.commerce.paypal', new Tribe__Tickets__Commerce__PayPal__Main );
348
  tribe_singleton( 'tickets.redirections', 'Tribe__Tickets__Redirections' );
349
 
362
  tribe_register_provider( 'Tribe__Tickets__Editor__Provider' );
363
 
364
  // Privacy
365
+ tribe_singleton( 'tickets.privacy', 'Tribe__Tickets__Privacy', [ 'hook' ] );
366
+
367
+ // Views V2
368
+ if ( class_exists( 'Tribe__Events__Main' ) ) {
369
+ tribe_register_provider( Tribe\Events\Tickets\Views\V2\Service_Provider::class );
370
+ }
371
  }
372
 
373
  /**
395
 
396
  $upgrade_path = wp_nonce_url(
397
  add_query_arg(
398
+ [
399
  'action' => 'upgrade-plugin',
400
  'plugin' => $plugin_short_path,
401
+ ], get_admin_url() . 'update.php'
402
  ), 'upgrade-plugin_' . $plugin_short_path
403
  );
404
 
481
  if ( version_compare( Tribe__Settings_Manager::get_option( 'latest_event_tickets_version' ), self::VERSION, '<' ) ) {
482
  $previous_versions = Tribe__Settings_Manager::get_option( 'previous_event_tickets_versions' )
483
  ? Tribe__Settings_Manager::get_option( 'previous_event_tickets_versions' )
484
+ : [];
485
 
486
  $previous_versions[] = Tribe__Settings_Manager::get_option( 'latest_event_tickets_version' )
487
  ? Tribe__Settings_Manager::get_option( 'latest_event_tickets_version' )
514
  * set up hooks for this class
515
  */
516
  public function hooks() {
517
+ add_action( 'init', [ $this, 'init' ] );
518
 
519
  // connect upgrade script
520
+ add_action( 'init', [ $this, 'run_updates' ], 0, 0 );
521
 
522
+ add_filter( 'tribe_post_types', [ $this, 'inject_post_types' ] );
523
 
524
  // Setup Help Tab texting
525
+ add_action( 'tribe_help_pre_get_sections', [ $this, 'add_help_section_support_content' ] );
526
+ add_action( 'tribe_help_pre_get_sections', [ $this, 'add_help_section_featured_content' ] );
527
+ add_action( 'tribe_help_pre_get_sections', [ $this, 'add_help_section_extra_content' ] );
528
+ add_filter( 'tribe_support_registered_template_systems', [ $this, 'add_template_updates_check' ] );
529
+ add_action( 'tribe_tickets_plugin_loaded', [ 'Tribe__Support', 'getInstance' ] );
530
 
531
  // Setup Front End Display
532
  add_action( 'tribe_events_inside_cost', 'tribe_tickets_buy_button', 10, 0 );
533
 
534
  // Hook to oembeds
535
+ add_action( 'tribe_events_embed_after_the_cost_value', [ $this, 'inject_buy_button_into_oembed' ] );
536
+ add_action( 'embed_head', [ $this, 'embed_head' ] );
537
 
538
  // Attendee screen enhancements
539
+ add_action( 'tribe_events_tickets_attendees_event_details_top', [ $this, 'setup_attendance_totals' ], 20 );
540
 
541
  // CSV Import options
542
  if ( class_exists( 'Tribe__Events__Main' ) ) {
543
+ add_filter( 'tribe_events_import_options_rows', [ Tribe__Tickets__CSV_Importer__Rows::instance(), 'filter_import_options_rows' ] );
544
+ add_filter( 'tribe_aggregator_csv_post_types', [ Tribe__Tickets__CSV_Importer__Rows::instance(), 'filter_csv_post_types' ] );
545
+ add_filter( 'tribe_aggregator_csv_column_mapping', [ Tribe__Tickets__CSV_Importer__Column_Names::instance(), 'filter_rsvp_column_mapping' ] );
546
+ add_filter( 'tribe_event_import_rsvp_tickets_column_names', [ Tribe__Tickets__CSV_Importer__Column_Names::instance(), 'filter_rsvp_column_names' ] );
547
+ add_filter( 'tribe_events_import_rsvp_tickets_importer', [ 'Tribe__Tickets__CSV_Importer__RSVP_Importer', 'instance' ], 10, 2 );
548
+ add_action( 'tribe_tickets_ticket_deleted', [ 'Tribe__Tickets__Attendance', 'delete_attendees_caches' ] );
549
 
550
  /**
551
  * Hooking to "rsvp" to fetch an importer to fetch Column names is deprecated
556
  *
557
  * @todo remove these two hooks when the old CSV interface is retired, maybe 5.0?
558
  */
559
+ add_filter( 'tribe_events_import_rsvp_importer', [ 'Tribe__Tickets__CSV_Importer__RSVP_Importer', 'instance' ], 10, 2 );
560
+ add_filter( 'tribe_event_import_rsvp_column_names', [ Tribe__Tickets__CSV_Importer__Column_Names::instance(), 'filter_rsvp_column_names' ] );
561
  }
562
 
563
  // Load our assets
579
  */
580
  public function add_help_section_support_content( $help ) {
581
  $help->add_section_content( 'support', '<strong>' . esc_html__( 'Support for Event Tickets', 'event-tickets' ) . '</strong>', 20 );
582
+ $help->add_section_content( 'support', [
583
  '<strong><a href="http://m.tri.be/18ne" target="_blank">' . esc_html__( 'Settings overview', 'event-tickets' ) . '</a></strong>',
584
  '<strong><a href="http://m.tri.be/18nf" target="_blank">' . esc_html__( 'Features overview', 'event-tickets' ) . '</a></strong>',
585
  '<strong><a href="http://m.tri.be/18jb" target="_blank">' . esc_html__( 'Troubleshooting common problems', 'event-tickets' ) . '</a></strong>',
586
  '<strong><a href="http://m.tri.be/18ng" target="_blank">' . esc_html__( 'Customizing Event Tickets', 'event-tickets' ) . '</a></strong>',
587
+ ], 20 );
588
  }
589
 
590
  /**
602
 
603
  $link = '<a href="http://m.tri.be/18nd" target="_blank">' . esc_html__( 'New User Primer', 'event-tickets' ) . '</a>';
604
 
605
+ $help->add_section_content( 'feature-box', sprintf( _x( 'We are committed to helping you sell %1$s for your event. Check out our handy %2$s to get started.', 'help feature box section', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'help_feature_box_section' ), $link ), 20 );
606
  }
607
 
608
  /**
613
  * @return void
614
  */
615
  public function add_help_section_extra_content( $help ) {
616
+ if ( ! $help->is_active( [ 'events-calendar-pro', 'event-tickets-plus' ] ) && $help->is_active( 'the-events-calendar' ) ) {
617
  // We just skip because it's treated on TEC
618
  return;
619
  } elseif ( ! $help->is_active( 'the-events-calendar' ) ) {
623
  $help->add_section_content( 'extra-help', sprintf( __( 'If you have tried the above steps and are still having trouble, you can post a new thread to our %s. Our support staff monitors these forums once a week and would be happy to assist you there.', 'event-tickets' ), $link ), 20 );
624
 
625
  $link_forum = '<a href="http://m.tri.be/4w/" target="_blank">' . esc_html__( 'premium support on our website', 'event-tickets' ) . '</a>';
626
+ $link_plus = '<a href="http://m.tri.be/18ni" target="_blank">' . esc_html__( 'Event Tickets Plus', 'event-tickets' ) . '</a>';
627
  $help->add_section_content( 'extra-help', sprintf( __( 'Looking for more immediate support? We offer %1$s with the purchase of any of our premium plugins (like %2$s). Pick up a license and you can post there directly and expect a response within 24-48 hours during weekdays.', 'event-tickets' ), $link_forum, $link_plus ), 20 );
628
 
629
  $link = '<a href="http://m.tri.be/4w/" target="_blank">' . esc_html__( 'post a thread', 'event-tickets' ) . '</a>';
630
+ $help->add_section_content( 'extra-help', sprintf( __( 'Already have Event Tickets Plus? You can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week).', 'event-tickets' ), $link ), 20 );
631
 
632
  } else {
633
 
646
  * @return array
647
  */
648
  public function add_template_updates_check( $plugins ) {
649
+ $plugins[ __( 'Event Tickets', 'event-tickets' ) ] = [
650
  self::VERSION,
651
  $this->plugin_path . 'src/views/tickets',
652
  trailingslashit( get_stylesheet_directory() ) . 'tribe-events/tickets',
653
+ ];
654
 
655
  return $plugins;
656
  }
727
  */
728
  public function activation_page() {
729
  if ( empty( $this->activation_page ) ) {
730
+ $this->activation_page = new Tribe__Admin__Activation_Page( [
731
  'slug' => 'event-tickets',
732
  'version' => self::VERSION,
733
  'activation_transient' => '_tribe_tickets_activation_redirect',
735
  'version_history_slug' => 'previous_event_tickets_versions',
736
  'welcome_page_title' => esc_html__( 'Welcome to Event Tickets!', 'event-tickets' ),
737
  'welcome_page_template' => $this->plugin_path . 'src/admin-views/admin-welcome-message.php',
738
+ ] );
739
  }
740
 
741
  return $this->activation_page;
810
  * Returns the supported post types for tickets
811
  */
812
  public function post_types() {
813
+ $options = (array) get_option( Tribe__Main::OPTIONNAME, [] );
814
 
815
  // if the ticket-enabled-post-types index has never been set, default it to tribe_events
816
  if ( ! array_key_exists( 'ticket-enabled-post-types', $options ) ) {
817
+ $defaults = [ 'tribe_events' ];
818
  $options['ticket-enabled-post-types'] = $defaults;
819
  tribe_update_option( 'ticket-enabled-post-types', $defaults );
820
  }
839
  }
840
 
841
  /**
842
+ * Injects a buy/RSVP button into oEmbeds for events when necessary
843
  */
844
  public function inject_buy_button_into_oembed() {
845
  $event_id = get_the_ID();
871
  return;
872
  }
873
 
874
+ $button_text = $has_non_rsvp ? __( 'Buy', 'event-tickets' ) : tribe_get_rsvp_label_singular( 'button_text' );
875
  /**
876
  * Filters the text that appears in the buy/rsvp button on event oembeds
877
  *
981
  * @since 4.10.6
982
  */
983
  public function register_plugin_autoload_paths() {
984
+ $prefixes = [
985
  'Tribe__Tickets__' => $this->plugin_path . 'src/Tribe',
986
+ ];
987
 
988
  $this->get_autoloader_instance()->register_prefixes( $prefixes );
989
  }
src/Tribe/Metabox.php CHANGED
@@ -50,7 +50,7 @@ class Tribe__Tickets__Metabox {
50
 
51
  add_meta_box(
52
  'tribetickets',
53
- esc_html__( 'Tickets', 'event-tickets' ),
54
  array( $this, 'render' ),
55
  $post_type,
56
  'normal',
@@ -176,10 +176,10 @@ class Tribe__Tickets__Metabox {
176
  }
177
 
178
  /**
179
- * Sanitizes the data for the new/edit ticket ajax call,
180
- * and calls the child save_ticket function.
181
  *
182
- * @since 4.6.2
 
183
  */
184
  public function ajax_ticket_add() {
185
  $post_id = absint( tribe_get_request_var( 'post_id', 0 ) );
@@ -195,7 +195,7 @@ class Tribe__Tickets__Metabox {
195
  $data = wp_parse_args( tribe_get_request_var( array( 'data' ), array() ), array() );
196
 
197
  if ( ! $this->has_permission( $post_id, $_POST, 'add_ticket_nonce' ) ) {
198
- wp_send_json_error( esc_html__( 'Failed to Add the Ticket, Refresh the Page to try again.', 'event-tickets' ) );
199
  }
200
 
201
  if ( ! isset( $data['ticket_provider'] ) || ! $this->module_is_valid( $data['ticket_provider'] ) ) {
@@ -217,7 +217,7 @@ class Tribe__Tickets__Metabox {
217
  */
218
  do_action( 'tribe_tickets_ticket_added', $post_id );
219
  } else {
220
- wp_send_json_error( esc_html__( 'Failed to Add the Ticket', 'event-tickets' ) );
221
  }
222
 
223
  $return = $this->get_panels( $post_id );
@@ -235,12 +235,10 @@ class Tribe__Tickets__Metabox {
235
  }
236
 
237
  /**
238
- * Returns the data from a single ticket to populate
239
- * the edit form.
240
- *
241
- * @since 4.6.2
242
  *
243
- * @return array $return array of ticket data
 
244
  */
245
  public function ajax_ticket_edit() {
246
  $post_id = absint( tribe_get_request_var( 'post_id', 0 ) );
@@ -252,7 +250,7 @@ class Tribe__Tickets__Metabox {
252
  $ticket_id = absint( tribe_get_request_var( 'ticket_id', 0 ) );
253
 
254
  if ( ! $ticket_id ) {
255
- wp_send_json_error( esc_html__( 'Invalid Ticket', 'event-tickets' ) );
256
  }
257
 
258
  /**
@@ -262,7 +260,7 @@ class Tribe__Tickets__Metabox {
262
  $data = wp_parse_args( tribe_get_request_var( array( 'data' ), array() ), array() );
263
 
264
  if ( ! $this->has_permission( $post_id, $_POST, 'edit_ticket_nonce' ) ) {
265
- wp_send_json_error( esc_html__( 'Failed to Edit the Ticket, Refresh the Page to try again.', 'event-tickets' ) );
266
  }
267
 
268
  $provider = tribe_tickets_get_ticket_provider( $ticket_id );
@@ -304,11 +302,11 @@ class Tribe__Tickets__Metabox {
304
  $ticket_id = absint( tribe_get_request_var( 'ticket_id', 0 ) );
305
 
306
  if ( ! $ticket_id ) {
307
- wp_send_json_error( esc_html__( 'Invalid Ticket', 'event-tickets' ) );
308
  }
309
 
310
  if ( ! $this->has_permission( $post_id, $_POST, 'remove_ticket_nonce' ) ) {
311
- wp_send_json_error( esc_html__( 'Failed to Delete the Ticket, Refresh the Page to try again.', 'event-tickets' ) );
312
  }
313
 
314
  $provider = tribe_tickets_get_ticket_provider( $ticket_id );
@@ -459,9 +457,9 @@ class Tribe__Tickets__Metabox {
459
  *
460
  * @since 4.6.2
461
  *
462
- * @param WP_Post $post
463
- * @param array $data
464
- * @param string $nonce_action
465
  *
466
  * @return boolean
467
  */
50
 
51
  add_meta_box(
52
  'tribetickets',
53
+ esc_html( tribe_get_ticket_label_plural( 'meta_box_title' ) ),
54
  array( $this, 'render' ),
55
  $post_type,
56
  'normal',
176
  }
177
 
178
  /**
179
+ * Sanitizes the data for the new/edit ticket ajax call, and calls the child save_ticket function.
 
180
  *
181
+ * @since 4.6.2
182
+ * @since 4.10.9 Use customizable ticket name functions.
183
  */
184
  public function ajax_ticket_add() {
185
  $post_id = absint( tribe_get_request_var( 'post_id', 0 ) );
195
  $data = wp_parse_args( tribe_get_request_var( array( 'data' ), array() ), array() );
196
 
197
  if ( ! $this->has_permission( $post_id, $_POST, 'add_ticket_nonce' ) ) {
198
+ wp_send_json_error( esc_html( sprintf( __( 'Failed to add the %s. Refresh the page to try again.', 'event-tickets' ), tribe_get_ticket_label_singular( 'ajax_ticket_add_error' ) ) ) );
199
  }
200
 
201
  if ( ! isset( $data['ticket_provider'] ) || ! $this->module_is_valid( $data['ticket_provider'] ) ) {
217
  */
218
  do_action( 'tribe_tickets_ticket_added', $post_id );
219
  } else {
220
+ wp_send_json_error( esc_html( sprintf( __( 'Failed to add the %s', 'event-tickets' ), tribe_get_ticket_label_singular( 'ajax_ticket_add_error' ) ) ) );
221
  }
222
 
223
  $return = $this->get_panels( $post_id );
235
  }
236
 
237
  /**
238
+ * Returns the data from a single ticket to populate the edit form.
 
 
 
239
  *
240
+ * @since 4.6.2
241
+ * @since 4.10.9 Use customizable ticket name functions.
242
  */
243
  public function ajax_ticket_edit() {
244
  $post_id = absint( tribe_get_request_var( 'post_id', 0 ) );
250
  $ticket_id = absint( tribe_get_request_var( 'ticket_id', 0 ) );
251
 
252
  if ( ! $ticket_id ) {
253
+ wp_send_json_error( esc_html( sprintf( __( 'Invalid %s', 'event-tickets' ), tribe_get_ticket_label_singular( 'ajax_ticket_edit_error' ) ) ) );
254
  }
255
 
256
  /**
260
  $data = wp_parse_args( tribe_get_request_var( array( 'data' ), array() ), array() );
261
 
262
  if ( ! $this->has_permission( $post_id, $_POST, 'edit_ticket_nonce' ) ) {
263
+ wp_send_json_error( esc_html( sprintf( __( 'Failed to edit the %s. Refresh the page to try again.', 'event-tickets' ), tribe_get_ticket_label_singular( 'ajax_ticket_edit_error' ) ) ) );
264
  }
265
 
266
  $provider = tribe_tickets_get_ticket_provider( $ticket_id );
302
  $ticket_id = absint( tribe_get_request_var( 'ticket_id', 0 ) );
303
 
304
  if ( ! $ticket_id ) {
305
+ wp_send_json_error( esc_html( sprintf( __( 'Invalid %s', 'event-tickets' ), tribe_get_ticket_label_singular( 'ajax_ticket_delete_error' ) ) ) );
306
  }
307
 
308
  if ( ! $this->has_permission( $post_id, $_POST, 'remove_ticket_nonce' ) ) {
309
+ wp_send_json_error( esc_html( sprintf( __( 'Failed to delete the %s. Refresh the page to try again.', 'event-tickets' ), tribe_get_ticket_label_singular( 'ajax_ticket_delete_error' ) ) ) );
310
  }
311
 
312
  $provider = tribe_tickets_get_ticket_provider( $ticket_id );
457
  *
458
  * @since 4.6.2
459
  *
460
+ * @param WP_Post|int $post
461
+ * @param array $data
462
+ * @param string $nonce_action
463
  *
464
  * @return boolean
465
  */
src/Tribe/Plugin_Register.php CHANGED
@@ -5,7 +5,7 @@
5
  */
6
  class Tribe__Tickets__Plugin_Register extends Tribe__Abstract_Plugin_Register {
7
 
8
- protected $main_class = 'Tribe__Tickets__Main';
9
  protected $dependencies = array(
10
  'addon-dependencies' => array(
11
  'Tribe__Tickets_Plus__Main' => '4.10.6-dev',
5
  */
6
  class Tribe__Tickets__Plugin_Register extends Tribe__Abstract_Plugin_Register {
7
 
8
+ protected $main_class = 'Tribe__Tickets__Main';
9
  protected $dependencies = array(
10
  'addon-dependencies' => array(
11
  'Tribe__Tickets_Plus__Main' => '4.10.6-dev',
src/Tribe/Promoter/Observer.php CHANGED
@@ -9,6 +9,15 @@
9
  */
10
  class Tribe__Tickets__Promoter__Observer {
11
 
 
 
 
 
 
 
 
 
 
12
  /**
13
  * Hooks on which this observer notifies promoter.
14
  *
@@ -22,6 +31,13 @@ class Tribe__Tickets__Promoter__Observer {
22
  return;
23
  }
24
 
 
 
 
 
 
 
 
25
  $this->registered_types();
26
 
27
  // Listen for changes on RSVP as Gutenberg Uses the post_type API to update RSVP's
@@ -61,23 +77,34 @@ class Tribe__Tickets__Promoter__Observer {
61
  }
62
 
63
  /**
64
- * Attach support to the registered types, right now only has support for events, in order
65
- * to attach a hook to `save_post_tribe_events` only attaches the action
66
- * if the post has support for tickets or if the support has been enabled for this type.
 
67
  *
68
  * @since 4.10.1.1
69
  */
70
  public function registered_types() {
71
- $event_type = class_exists( 'Tribe__Events__Main' ) ? Tribe__Events__Main::POSTTYPE : 'tribe_events';
72
- $post_types = (array) tribe_get_option( 'ticket-enabled-post-types', [] );
73
-
74
- $events_support_tickets = in_array( $event_type, $post_types, true );
75
 
76
- if ( ! $events_support_tickets ) {
77
  return;
78
  }
79
 
80
- add_action( 'save_post_' . $event_type, [ $this, 'notify' ], 10, 1 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  }
82
 
83
  /**
@@ -110,6 +137,19 @@ class Tribe__Tickets__Promoter__Observer {
110
  }
111
  }
112
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  /**
114
  * Function used to notify the promoter endpoint of a new change on an event.
115
  *
9
  */
10
  class Tribe__Tickets__Promoter__Observer {
11
 
12
+ /**
13
+ * Holding the reference to the event post type
14
+ *
15
+ * @since 4.10.9
16
+ *
17
+ * @var string
18
+ */
19
+ protected $event_type = 'tribe_events';
20
+
21
  /**
22
  * Hooks on which this observer notifies promoter.
23
  *
31
  return;
32
  }
33
 
34
+ /**
35
+ * In case the class for TEC is defined we use the value defined there
36
+ */
37
+ if ( class_exists( 'Tribe__Events__Main' ) ) {
38
+ $this->event_type = Tribe__Events__Main::POSTTYPE;
39
+ }
40
+
41
  $this->registered_types();
42
 
43
  // Listen for changes on RSVP as Gutenberg Uses the post_type API to update RSVP's
77
  }
78
 
79
  /**
80
+ * Attach hooks only if events has support for tickets, to the following actions:
81
+ *
82
+ * - `save_post_tribe_events`
83
+ * - `delete_post`
84
  *
85
  * @since 4.10.1.1
86
  */
87
  public function registered_types() {
 
 
 
 
88
 
89
+ if ( ! $this->event_support_tickets() ) {
90
  return;
91
  }
92
 
93
+ add_action( 'save_post_' . $this->event_type, [ $this, 'notify' ], 10, 1 );
94
+ add_action( 'delete_post', [ $this, 'delete_post' ], 10, 1 );
95
+ }
96
+
97
+ /**
98
+ * Check if the Event post type has support for tickets
99
+ *
100
+ * @since 4.10.9
101
+ *
102
+ * @return bool
103
+ */
104
+ private function event_support_tickets() {
105
+ $post_types = (array) tribe_get_option( 'ticket-enabled-post-types', [] );
106
+
107
+ return in_array( $this->event_type, $post_types, true );
108
  }
109
 
110
  /**
137
  }
138
  }
139
 
140
+ /**
141
+ * Notify the connector of changes when the event was deleted
142
+ *
143
+ * @since 4.10.9
144
+ *
145
+ * @param $post_id
146
+ */
147
+ public function delete_post( $post_id ) {
148
+ if ( $this->event_type === get_post_type( $post_id ) ) {
149
+ $this->notify( $post_id );
150
+ }
151
+ }
152
+
153
  /**
154
  * Function used to notify the promoter endpoint of a new change on an event.
155
  *
src/Tribe/REST/V1/Documentation/Attendee_Definition_Provider.php CHANGED
@@ -102,7 +102,7 @@ class Tribe__Tickets__REST__V1__Documentation__Attendee_Definition_Provider
102
  ),
103
  'rsvp_going' => array(
104
  'type' => 'boolean',
105
- 'description' => __( 'If the attendee is for an RSVP ticket, this will be set to true if he/she is Going”, false otherwise', 'event-tickets' ),
106
  ),
107
  'payment' => array(
108
  '$ref' => '#/components/schemas/PaymentDetails',
102
  ),
103
  'rsvp_going' => array(
104
  'type' => 'boolean',
105
+ 'description' => __( 'If the attendee is for an RSVP ticket, this will be set to true if he/she is "Going", false otherwise', 'event-tickets' ),
106
  ),
107
  'payment' => array(
108
  '$ref' => '#/components/schemas/PaymentDetails',
src/Tribe/REST/V1/Documentation/Capacity_Details_Definition_Provider.php CHANGED
@@ -12,31 +12,31 @@ class Tribe__Tickets__REST__V1__Documentation__Capacity_Details_Definition_Provi
12
  * {@inheritdoc}
13
  */
14
  public function get_documentation() {
15
- $documentation = array(
16
  'type' => 'object',
17
- 'properties' => array(
18
- 'available_percentabe' => array(
19
  'type' => 'integer',
20
- 'description' => __( 'The ticket available capacity percentage', 'event-tickets' ),
21
- ),
22
- 'max' => array(
23
  'type' => 'integer',
24
- 'description' => __( 'The ticket max capacity', 'event-tickets' ),
25
- ),
26
- 'available' => array(
27
  'type' => 'integer',
28
- 'description' => __( 'The ticket current available capacity', 'event-tickets' ),
29
- ),
30
- 'sold' => array(
31
  'type' => 'integer',
32
- 'description' => __( 'The ticket sale count', 'event-tickets' ),
33
- ),
34
- 'pending' => array(
35
  'type' => 'integer',
36
- 'description' => __( 'The ticket pending count', 'event-tickets' ),
37
- ),
38
- ),
39
- );
40
 
41
  /**
42
  * Filters the Swagger documentation generated for capacity details in the Event Tickets REST API.
12
  * {@inheritdoc}
13
  */
14
  public function get_documentation() {
15
+ $documentation = [
16
  'type' => 'object',
17
+ 'properties' => [
18
+ 'available_percentage' => [
19
  'type' => 'integer',
20
+ 'description' => esc_html( sprintf( __( 'The %s available capacity percentage', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'capacity_details_documentation_available_percentage' ) ) ),
21
+ ],
22
+ 'max' => [
23
  'type' => 'integer',
24
+ 'description' => esc_html( sprintf( __( 'The %s max capacity', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'capacity_details_documentation_max' ) ) ),
25
+ ],
26
+ 'available' => [
27
  'type' => 'integer',
28
+ 'description' => esc_html( sprintf( __( 'The %s current available capacity', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'capacity_details_documentation_available' ) ) ),
29
+ ],
30
+ 'sold' => [
31
  'type' => 'integer',
32
+ 'description' => esc_html( sprintf( __( 'The %s sale count', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'capacity_details_documentation_sold' ) ) ),
33
+ ],
34
+ 'pending' => [
35
  'type' => 'integer',
36
+ 'description' => esc_html( sprintf( __( 'The %s pending count', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'capacity_details_documentation_pending' ) ) ),
37
+ ],
38
+ ],
39
+ ];
40
 
41
  /**
42
  * Filters the Swagger documentation generated for capacity details in the Event Tickets REST API.
src/Tribe/REST/V1/Documentation/Checkin_Details_Definition_Provider.php CHANGED
@@ -24,7 +24,7 @@ class Tribe__Tickets__REST__V1__Documentation__Checkin_Details_Definition_Provid
24
  ),
25
  'source' => array(
26
  'type' => 'string',
27
- 'description' => __( 'The check-in source for the attendee; e.g. kiosk or site', 'event-tickets' ),
28
  ),
29
  'author' => array(
30
  'type' => 'string',
24
  ),
25
  'source' => array(
26
  'type' => 'string',
27
+ 'description' => __( 'The check-in source for the attendee; e.g. "kiosk" or "site"', 'event-tickets' ),
28
  ),
29
  'author' => array(
30
  'type' => 'string',
src/Tribe/REST/V1/Documentation/RSVP_Report_Definition_Provider.php CHANGED
@@ -17,11 +17,11 @@ class Tribe__Tickets__REST__V1__Documentation__RSVP_Report_Definition_Provider
17
  'properties' => array(
18
  'rsvp_going' => array(
19
  'type' => 'integer',
20
- 'description' => __( 'How many attendees are Going', 'event-tickets' ),
21
  ),
22
  'rsvp_not_going' => array(
23
  'type' => 'integer',
24
- 'description' => __( 'How many attendees are Not going', 'event-tickets' ),
25
  ),
26
  ),
27
  );
17
  'properties' => array(
18
  'rsvp_going' => array(
19
  'type' => 'integer',
20
+ 'description' => __( 'How many attendees are "Going"', 'event-tickets' ),
21
  ),
22
  'rsvp_not_going' => array(
23
  'type' => 'integer',
24
+ 'description' => __( 'How many attendees are "Not going"', 'event-tickets' ),
25
  ),
26
  ),
27
  );
src/Tribe/REST/V1/Post_Repository.php CHANGED
@@ -654,10 +654,11 @@ class Tribe__Tickets__REST__V1__Post_Repository
654
  *
655
  * @since 4.10.2
656
  *
657
- * @param bool $always_show_attendees_data Whether to always show attendees data.
658
- * @param array $data Ticket REST data.
 
659
  */
660
- $always_show_attendees_data = apply_filters( 'tribe_tickets_rest_api_always_show_attendee_data', false, $data );
661
 
662
  // Check if we have an event or attendees block/shortcode.
663
  if ( ! $always_show_attendees_data ) {
@@ -668,7 +669,10 @@ class Tribe__Tickets__REST__V1__Post_Repository
668
 
669
  // Return if event is not showing attendees.
670
  if (
671
- ( ! function_exists( 'has_block' ) || ! has_block( 'tribe/attendees', $event ) )
 
 
 
672
  && ! has_shortcode( $event->post_content, 'tribe_attendees_list' )
673
  // In case has_shortcode does not work.
674
  && false === strpos( $event->post_content, '[tribe_attendees_list]' )
654
  *
655
  * @since 4.10.2
656
  *
657
+ * @param bool $always_show_attendees_data Whether to always show attendees data. By default, Admin and Editor
658
+ * can see this information.
659
+ * @param array $data Ticket REST data.
660
  */
661
+ $always_show_attendees_data = apply_filters( 'tribe_tickets_rest_api_always_show_attendee_data', current_user_can( 'read_private_posts' ), $data );
662
 
663
  // Check if we have an event or attendees block/shortcode.
664
  if ( ! $always_show_attendees_data ) {
669
 
670
  // Return if event is not showing attendees.
671
  if (
672
+ (
673
+ ! function_exists( 'has_block' )
674
+ || ! has_block( 'tribe/attendees', $event )
675
+ )
676
  && ! has_shortcode( $event->post_content, 'tribe_attendees_list' )
677
  // In case has_shortcode does not work.
678
  && false === strpos( $event->post_content, '[tribe_attendees_list]' )
src/Tribe/REST/V1/Ticket_Repository.php CHANGED
@@ -32,7 +32,7 @@ class Tribe__Tickets__REST__V1__Ticket_Repository
32
  $this->decorated->set_query_builder( $this );
33
  $this->decorated->set_default_args( array_merge(
34
  $this->decorated->get_default_args(),
35
- array( 'order' => 'ASC', 'orderby' => array( 'id', 'title' ) )
36
  ) );
37
  }
38
 
@@ -100,7 +100,7 @@ class Tribe__Tickets__REST__V1__Ticket_Repository
100
  ON {$wpdb->posts}.ID != related_event.ID" );
101
  $this->decorated->join_clause( "JOIN {$wpdb->postmeta} related_event_meta
102
  ON {$wpdb->posts}.ID = related_event_meta.post_id" );
103
- $keys = array();
104
  foreach ( $this->decorated->ticket_to_event_keys() as $key ) {
105
  $keys[] = $wpdb->prepare( '%s', $key );
106
  }
@@ -110,4 +110,4 @@ class Tribe__Tickets__REST__V1__Ticket_Repository
110
 
111
  $this->decorated->set_query_builder( null );
112
  }
113
- }
32
  $this->decorated->set_query_builder( $this );
33
  $this->decorated->set_default_args( array_merge(
34
  $this->decorated->get_default_args(),
35
+ [ 'order' => 'ASC', 'orderby' => [ 'id', 'title' ] ]
36
  ) );
37
  }
38
 
100
  ON {$wpdb->posts}.ID != related_event.ID" );
101
  $this->decorated->join_clause( "JOIN {$wpdb->postmeta} related_event_meta
102
  ON {$wpdb->posts}.ID = related_event_meta.post_id" );
103
+ $keys = [];
104
  foreach ( $this->decorated->ticket_to_event_keys() as $key ) {
105
  $keys[] = $wpdb->prepare( '%s', $key );
106
  }
110
 
111
  $this->decorated->set_query_builder( null );
112
  }
113
+ }
src/Tribe/RSVP.php CHANGED
@@ -165,7 +165,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
165
  $main = Tribe__Tickets__Main::instance();
166
  $this->tickets_view = Tribe__Tickets__Tickets_View::instance();
167
  /* Set up parent vars */
168
- $this->plugin_name = $this->pluginName = _x( 'RSVP', 'ticket provider', 'event-tickets' );
169
  $this->plugin_path = $this->pluginPath = $main->plugin_path;
170
  $this->plugin_url = $this->pluginUrl = $main->plugin_url;
171
 
@@ -721,13 +721,18 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
721
  * Filters the RSVP tickets email subject
722
  *
723
  * @since 4.5.2 added new parameters $event_id and $order_id
 
724
  *
725
  * @param string
726
- * @param int $event_id
727
- * @param int $order_id
728
  */
729
- $subject = apply_filters( 'tribe_rsvp_email_subject',
730
- sprintf( __( 'Your tickets from %s', 'event-tickets' ), stripslashes_deep( html_entity_decode( get_bloginfo( 'name' ), ENT_QUOTES ) ) ),
 
 
 
 
731
  $event_id,
732
  $order_id
733
  );
@@ -1128,24 +1133,28 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1128
  $rsvp_error = empty( $_GET['rsvp_error'] ) ? false : intval( $_GET['rsvp_error'] );
1129
 
1130
  if ( $rsvp_sent ) {
1131
- $this->add_message( __( 'Your RSVP has been received! Check your email for your RSVP confirmation.', 'event-tickets' ), 'success' );
1132
  }
1133
 
1134
  if ( $rsvp_error ) {
1135
  switch ( $rsvp_error ) {
1136
  case 2:
1137
- $this->add_message( __( 'You can\'t RSVP more than the total remaining tickets.', 'event-tickets' ), 'error' );
 
 
 
 
1138
  break;
1139
 
1140
  case 1:
1141
  default:
1142
- $this->add_message( __( 'In order to RSVP, you must enter your name and a valid email address.', 'event-tickets' ), 'error' );
1143
  break;
1144
  }
1145
  }
1146
 
1147
  /**
1148
- * Allow for the addition of content (namely the "Who's Attening?" list) above the ticket form.
1149
  *
1150
  * @since 4.5.5
1151
  */
@@ -1423,7 +1432,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1423
  }
1424
 
1425
  /**
1426
- * Retreive only order related information
1427
  * Important: On RSVP the order is the Attendee Object
1428
  *
1429
  * order_id
@@ -1436,8 +1445,8 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1436
  * @return array
1437
  */
1438
  public function get_order_data( $order_id ) {
1439
- $name = get_post_meta( $order_id, $this->full_name, true );
1440
- $email = get_post_meta( $order_id, $this->email, true );
1441
 
1442
  $data = array(
1443
  'order_id' => $order_id,
165
  $main = Tribe__Tickets__Main::instance();
166
  $this->tickets_view = Tribe__Tickets__Tickets_View::instance();
167
  /* Set up parent vars */
168
+ $this->plugin_name = $this->pluginName = esc_html( tribe_get_rsvp_label_plural( 'provider_plugin_name' ) );
169
  $this->plugin_path = $this->pluginPath = $main->plugin_path;
170
  $this->plugin_url = $this->pluginUrl = $main->plugin_url;
171
 
721
  * Filters the RSVP tickets email subject
722
  *
723
  * @since 4.5.2 added new parameters $event_id and $order_id
724
+ * @since 4.10.9 Use customizable ticket name functions.
725
  *
726
  * @param string
727
+ * @param int $event_id
728
+ * @param int $order_id
729
  */
730
+ $subject = apply_filters( 'tribe_rsvp_email_subject',
731
+ esc_html( sprintf(
732
+ __( 'Your %1$s from %2$s', 'event-tickets' ),
733
+ tribe_get_ticket_label_plural_lowercase( 'tribe_rsvp_email_subject' ),
734
+ stripslashes_deep( html_entity_decode( get_bloginfo( 'name' ), ENT_QUOTES ) )
735
+ ) ),
736
  $event_id,
737
  $order_id
738
  );
1133
  $rsvp_error = empty( $_GET['rsvp_error'] ) ? false : intval( $_GET['rsvp_error'] );
1134
 
1135
  if ( $rsvp_sent ) {
1136
+ $this->add_message( esc_html( sprintf( __( 'Your %1$s has been received! Check your email for your %1$s confirmation.', 'event-tickets' ), tribe_get_rsvp_label_singular( basename( __FILE__ ) ) ) ), 'success' );
1137
  }
1138
 
1139
  if ( $rsvp_error ) {
1140
  switch ( $rsvp_error ) {
1141
  case 2:
1142
+ $this->add_message( esc_html( sprintf(
1143
+ __( 'You can\'t %1$s more than the total remaining %2$s.', 'event-tickets' ),
1144
+ tribe_get_rsvp_label_singular( 'verb' ),
1145
+ tribe_get_ticket_label_plural_lowercase( 'rsvp_error_attempt_too_many' )
1146
+ ) ), 'error' );
1147
  break;
1148
 
1149
  case 1:
1150
  default:
1151
+ $this->add_message( esc_html( sprintf( __( 'In order to %s, you must enter your name and a valid email address.', 'event-tickets' ), tribe_get_rsvp_label_singular( 'verb' ) ) ), 'error' );
1152
  break;
1153
  }
1154
  }
1155
 
1156
  /**
1157
+ * Allow for the addition of content (namely the "Who's Attending?" list) above the ticket form.
1158
  *
1159
  * @since 4.5.5
1160
  */
1432
  }
1433
 
1434
  /**
1435
+ * Retrieve only order related information
1436
  * Important: On RSVP the order is the Attendee Object
1437
  *
1438
  * order_id
1445
  * @return array
1446
  */
1447
  public function get_order_data( $order_id ) {
1448
+ $name = get_post_meta( $order_id, $this->full_name, true );
1449
+ $email = get_post_meta( $order_id, $this->email, true );
1450
 
1451
  $data = array(
1452
  'order_id' => $order_id,
src/Tribe/RSVP/Attendance_Totals.php CHANGED
@@ -38,7 +38,7 @@ class Tribe__Tickets__RSVP__Attendance_Totals extends Tribe__Tickets__Abstract_A
38
  public function print_totals() {
39
  //Note this now uses the `attendees-totals-list` template, so the array values don't quite logically line up
40
  $args = [
41
- 'total_sold_label' => _x( 'Total RSVPs:', 'attendee summary', 'event-tickets' ),
42
  'total_complete_label' => _x( 'Going:', 'attendee summary', 'event-tickets' ),
43
  'total_cancelled_label' => _x( 'Not Going:', 'attendee summary', 'event-tickets' ),
44
  'total_sold' => $this->get_total_rsvps(),
38
  public function print_totals() {
39
  //Note this now uses the `attendees-totals-list` template, so the array values don't quite logically line up
40
  $args = [
41
+ 'total_sold_label' => esc_html( sprintf( _x( 'Total %s:', 'attendee summary', 'event-tickets' ), tribe_get_rsvp_label_plural( 'total_sold_label' ) ) ),
42
  'total_complete_label' => _x( 'Going:', 'attendee summary', 'event-tickets' ),
43
  'total_cancelled_label' => _x( 'Not Going:', 'attendee summary', 'event-tickets' ),
44
  'total_sold' => $this->get_total_rsvps(),
src/Tribe/RSVP/Status/Not_Going.php CHANGED
@@ -10,10 +10,10 @@
10
  class Tribe__Tickets__RSVP__Status__Not_Going extends Tribe__Tickets__Status__Abstract {
11
 
12
  //Cancelled by an admin or the customer – no further action required (Cancelling an order does not affect stock quantity by default)
13
- public $name = 'Not Going';
14
  public $provider_name = 'no';
15
  public $post_type = 'tribe_rsvp_attendees';
16
 
17
  public $count_not_going = true;
18
 
19
- }
10
  class Tribe__Tickets__RSVP__Status__Not_Going extends Tribe__Tickets__Status__Abstract {
11
 
12
  //Cancelled by an admin or the customer – no further action required (Cancelling an order does not affect stock quantity by default)
13
+ public $name = 'Not going';
14
  public $provider_name = 'no';
15
  public $post_type = 'tribe_rsvp_attendees';
16
 
17
  public $count_not_going = true;
18
 
19
+ }
src/Tribe/Tickets.php CHANGED
@@ -395,14 +395,19 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
395
  * @since 4.6
396
  *
397
  * @param object $ticket Ticket object
398
- * @return string HTMl link
 
399
  */
400
  public function get_ticket_delete_link( $ticket = null ) {
401
  if ( empty( $ticket ) ) {
402
- return;
403
  }
404
 
405
- $button_text = ( 'Tribe__Tickets__RSVP' === $ticket->provider_class ) ? __( 'Delete RSVP', 'event-tickets' ) : __( 'Delete Ticket', 'event-tickets' ) ;
 
 
 
 
406
 
407
  /**
408
  * Allows for the filtering and testing if a user can delete tickets
@@ -411,6 +416,7 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
411
  *
412
  * @param bool true
413
  * @param int ticket post ID
 
414
  * @return string HTML link | void HTML link
415
  */
416
  if ( apply_filters( 'tribe_tickets_current_user_can_delete_ticket', true, $ticket->ID, $ticket->provider_class ) ) {
@@ -439,24 +445,25 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
439
  *
440
  * @since 4.6
441
  *
442
- * @param int $post_id ID of parent "event" post
443
- * @param object $ticket Ticket object
 
444
  * @return string HTML link | void HTML link
445
  */
446
  public function get_ticket_move_url( $post_id, $ticket = null ) {
447
  if ( empty( $ticket ) || empty( $post_id ) ) {
448
- return;
449
  }
450
 
451
  $post_url = get_edit_post_link( $post_id, 'admin' );
452
 
453
  $move_type_url = add_query_arg(
454
- array(
455
  'dialog' => Tribe__Tickets__Main::instance()->move_ticket_types()->dialog_name(),
456
  'ticket_type_id' => $ticket->ID,
457
  'check' => wp_create_nonce( 'move_tickets' ),
458
  'TB_iframe' => 'true',
459
- ),
460
  $post_url
461
  );
462
 
@@ -468,27 +475,30 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
468
  *
469
  * @since 4.6
470
  *
471
- * @param int $post_id ID of parent "event" post
472
- * @param object $ticket Ticket object
 
473
  * @return string HTML link | void HTML link
474
  */
475
  public function get_ticket_move_link( $post_id, $ticket = null ) {
476
  if ( empty( $ticket ) ) {
477
- return;
478
  }
479
 
480
- $button_text = ( 'Tribe__Tickets__RSVP' === $ticket->provider_class ) ? __( 'Move RSVP', 'event-tickets' ) : __( 'Move Ticket', 'event-tickets' ) ;
 
 
481
 
482
  $move_url = $this->get_ticket_move_url( $post_id, $ticket );
483
 
484
  if ( empty( $move_url ) ) {
485
- return;
486
  }
487
 
488
  // Make sure Thickbox is available regardless of which admin page we're on.
489
  add_thickbox();
490
 
491
- $move_link = sprintf( '<a href="%1$s" class="thickbox tribe-ticket-move-link">' . esc_html( $button_text ) . '</a>', $move_url );
492
 
493
  return $move_link;
494
  }
@@ -1527,18 +1537,17 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
1527
  }
1528
 
1529
  /**
1530
- * Returns an array of standard stock mode options that can be
1531
- * reused by implementations.
1532
  *
1533
  * Format is: ['identifier' => 'Localized name', ... ]
1534
  *
1535
  * @return array
1536
  */
1537
  protected function global_stock_mode_options() {
1538
- return array(
1539
- Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE => __( 'Shared capacity with other tickets', 'event-tickets' ),
1540
- Tribe__Tickets__Global_Stock::OWN_STOCK_MODE => __( 'Set capacity for this ticket only', 'event-tickets' ),
1541
- );
1542
  }
1543
 
1544
  /**
@@ -1584,19 +1593,19 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
1584
  * This order is important so that tickets overwrite RSVP on
1585
  * the Buy Now Button on the front-end
1586
  */
1587
- $types['rsvp'] = array(
1588
  'count' => 0,
1589
  'stock' => 0,
1590
  'unlimited' => 0,
1591
  'available' => 0,
1592
- );
1593
- $types['tickets'] = array(
1594
  'count' => 0, // count of ticket types currently for sale
1595
  'stock' => 0, // current stock of tickets available for sale
1596
  'global' => 0, // global stock ticket
1597
  'unlimited' => 0, // unlimited stock tickets
1598
  'available' => 0, // are tickets available for sale right now
1599
- );
1600
 
1601
  foreach ( $tickets as $ticket ) {
1602
  // If a ticket is not current for sale do not count it
@@ -1699,10 +1708,10 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
1699
  * Takes any global stock data and makes it available via a wp_localize_script() call.
1700
  */
1701
  public static function enqueue_frontend_stock_data() {
1702
- $data = array(
1703
  'tickets' => [],
1704
  'events' => [],
1705
- );
1706
 
1707
  foreach ( self::$frontend_ticket_data as $ticket ) {
1708
  $post = $ticket->get_event();
@@ -1725,9 +1734,9 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
1725
  $ticket_data['stock'] = $ticket->available();
1726
  }
1727
 
1728
- $data['events'][ $post_id ] = array(
1729
  'stock' => $global_stock->get_stock_level(),
1730
- );
1731
 
1732
  $data['tickets'][ $ticket->ID ] = $ticket_data;
1733
  }
@@ -2169,6 +2178,7 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
2169
  * Returns a tickets unavailable message based on the availability slug of a collection of tickets
2170
  *
2171
  * @since 4.2
 
2172
  *
2173
  * @param array $tickets Collection of tickets
2174
  * @return string
@@ -2178,9 +2188,13 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
2178
  $message = null;
2179
  $post_type = get_post_type();
2180
 
2181
- if ( 'tribe_events' == $post_type && function_exists( 'tribe_is_past_event' ) && tribe_is_past_event() ) {
 
 
 
 
2182
  $events_label_singular_lowercase = tribe_get_event_label_singular_lowercase();
2183
- $message = sprintf( esc_html__( 'Tickets are not available as this %s has passed.', 'event-tickets' ), $events_label_singular_lowercase );
2184
  } elseif ( 'availability-future' === $availability_slug ) {
2185
  /**
2186
  * Allows inclusion of ticket start sale date in unavailability message
@@ -2216,7 +2230,7 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
2216
  $date_format = tribe_get_date_format( true );
2217
  $start_sale_date = Tribe__Date_Utils::reformat( $start_sale_date, $date_format );
2218
 
2219
- $message = __( 'Tickets will be available on ', 'event-tickets' );
2220
  $message .= $start_sale_date;
2221
 
2222
  if ( $display_time ) {
@@ -2225,12 +2239,12 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
2225
  $message .= __( ' at ', 'event_tickets' ) . $start_sale_time;
2226
  }
2227
  } else {
2228
- $message = __( 'Tickets are not yet available', 'event-tickets' );
2229
  }
2230
  } elseif ( 'availability-past' === $availability_slug ) {
2231
- $message = __( 'Tickets are no longer available.', 'event-tickets' );
2232
  } elseif ( 'availability-mixed' === $availability_slug ) {
2233
- $message = __( 'There are no tickets available at this time.', 'event-tickets' );
2234
  }
2235
 
2236
  /**
395
  * @since 4.6
396
  *
397
  * @param object $ticket Ticket object
398
+ *
399
+ * @return string HTML link
400
  */
401
  public function get_ticket_delete_link( $ticket = null ) {
402
  if ( empty( $ticket ) ) {
403
+ return '';
404
  }
405
 
406
+ $delete_text = _x( 'Delete %s', 'delete link', 'event-tickets' );
407
+
408
+ $button_text = ( 'Tribe__Tickets__RSVP' === $ticket->provider_class )
409
+ ? sprintf( $delete_text, tribe_get_rsvp_label_singular( 'delete_link' ) )
410
+ : sprintf( $delete_text, tribe_get_ticket_label_singular( 'delete_link' ) );
411
 
412
  /**
413
  * Allows for the filtering and testing if a user can delete tickets
416
  *
417
  * @param bool true
418
  * @param int ticket post ID
419
+ *
420
  * @return string HTML link | void HTML link
421
  */
422
  if ( apply_filters( 'tribe_tickets_current_user_can_delete_ticket', true, $ticket->ID, $ticket->provider_class ) ) {
445
  *
446
  * @since 4.6
447
  *
448
+ * @param int $post_id ID of parent "event" post
449
+ * @param object $ticket Ticket object
450
+ *
451
  * @return string HTML link | void HTML link
452
  */
453
  public function get_ticket_move_url( $post_id, $ticket = null ) {
454
  if ( empty( $ticket ) || empty( $post_id ) ) {
455
+ return '';
456
  }
457
 
458
  $post_url = get_edit_post_link( $post_id, 'admin' );
459
 
460
  $move_type_url = add_query_arg(
461
+ [
462
  'dialog' => Tribe__Tickets__Main::instance()->move_ticket_types()->dialog_name(),
463
  'ticket_type_id' => $ticket->ID,
464
  'check' => wp_create_nonce( 'move_tickets' ),
465
  'TB_iframe' => 'true',
466
+ ],
467
  $post_url
468
  );
469
 
475
  *
476
  * @since 4.6
477
  *
478
+ * @param int $post_id ID of parent "event" post
479
+ * @param object $ticket Ticket object
480
+ *
481
  * @return string HTML link | void HTML link
482
  */
483
  public function get_ticket_move_link( $post_id, $ticket = null ) {
484
  if ( empty( $ticket ) ) {
485
+ return '';
486
  }
487
 
488
+ $move_text = __( 'Move %s', 'event-tickets' );
489
+
490
+ $button_text = ( 'Tribe__Tickets__RSVP' === $ticket->provider_class ) ? sprintf( $move_text, tribe_get_rsvp_label_singular( 'move_ticket_button_text' ) ) : sprintf( $move_text, tribe_get_ticket_label_singular( 'move_ticket_button_text' ) ) ;
491
 
492
  $move_url = $this->get_ticket_move_url( $post_id, $ticket );
493
 
494
  if ( empty( $move_url ) ) {
495
+ return '';
496
  }
497
 
498
  // Make sure Thickbox is available regardless of which admin page we're on.
499
  add_thickbox();
500
 
501
+ $move_link = sprintf( '<a href="%1$s" class="thickbox tribe-ticket-move-link">%2$s</a>', $move_url, esc_html( $button_text ) );
502
 
503
  return $move_link;
504
  }
1537
  }
1538
 
1539
  /**
1540
+ * Returns an array of standard stock mode options that can be reused by implementations.
 
1541
  *
1542
  * Format is: ['identifier' => 'Localized name', ... ]
1543
  *
1544
  * @return array
1545
  */
1546
  protected function global_stock_mode_options() {
1547
+ return [
1548
+ Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE => sprintf( _x( 'Shared capacity with other %s', 'global stock mode option', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'global_stock_mode_options' ) ),
1549
+ Tribe__Tickets__Global_Stock::OWN_STOCK_MODE => sprintf( _x( 'Set capacity for this %s only', 'global stock mode option (individual)', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'global_stock_mode_options_individual' ) )
1550
+ ];
1551
  }
1552
 
1553
  /**
1593
  * This order is important so that tickets overwrite RSVP on
1594
  * the Buy Now Button on the front-end
1595
  */
1596
+ $types['rsvp'] = [
1597
  'count' => 0,
1598
  'stock' => 0,
1599
  'unlimited' => 0,
1600
  'available' => 0,
1601
+ ];
1602
+ $types['tickets'] = [
1603
  'count' => 0, // count of ticket types currently for sale
1604
  'stock' => 0, // current stock of tickets available for sale
1605
  'global' => 0, // global stock ticket
1606
  'unlimited' => 0, // unlimited stock tickets
1607
  'available' => 0, // are tickets available for sale right now
1608
+ ];
1609
 
1610
  foreach ( $tickets as $ticket ) {
1611
  // If a ticket is not current for sale do not count it
1708
  * Takes any global stock data and makes it available via a wp_localize_script() call.
1709
  */
1710
  public static function enqueue_frontend_stock_data() {
1711
+ $data = [
1712
  'tickets' => [],
1713
  'events' => [],
1714
+ ];
1715
 
1716
  foreach ( self::$frontend_ticket_data as $ticket ) {
1717
  $post = $ticket->get_event();
1734
  $ticket_data['stock'] = $ticket->available();
1735
  }
1736
 
1737
+ $data['events'][ $post_id ] = [
1738
  'stock' => $global_stock->get_stock_level(),
1739
+ ];
1740
 
1741
  $data['tickets'][ $ticket->ID ] = $ticket_data;
1742
  }
2178
  * Returns a tickets unavailable message based on the availability slug of a collection of tickets
2179
  *
2180
  * @since 4.2
2181
+ * @since 4.10.9 Use customizable ticket name functions.
2182
  *
2183
  * @param array $tickets Collection of tickets
2184
  * @return string
2188
  $message = null;
2189
  $post_type = get_post_type();
2190
 
2191
+ if (
2192
+ 'tribe_events' == $post_type
2193
+ && function_exists( 'tribe_is_past_event' )
2194
+ && tribe_is_past_event()
2195
+ ) {
2196
  $events_label_singular_lowercase = tribe_get_event_label_singular_lowercase();
2197
+ $message = esc_html( sprintf( __( '%s are not available as this %s has passed.', 'event-tickets' ), tribe_get_ticket_label_plural( 'unavailable_past_tribe_events' ), $events_label_singular_lowercase ) );
2198
  } elseif ( 'availability-future' === $availability_slug ) {
2199
  /**
2200
  * Allows inclusion of ticket start sale date in unavailability message
2230
  $date_format = tribe_get_date_format( true );
2231
  $start_sale_date = Tribe__Date_Utils::reformat( $start_sale_date, $date_format );
2232
 
2233
+ $message = esc_html( sprintf( __( '%s will be available on ', 'event-tickets' ), tribe_get_ticket_label_plural( 'unavailable_future_display_date' ) ) );
2234
  $message .= $start_sale_date;
2235
 
2236
  if ( $display_time ) {
2239
  $message .= __( ' at ', 'event_tickets' ) . $start_sale_time;
2240
  }
2241
  } else {
2242
+ $message = esc_html( sprintf( __( '%s are not yet available', 'event-tickets' ), tribe_get_ticket_label_plural( 'unavailable_future_without_date' ) ) );
2243
  }
2244
  } elseif ( 'availability-past' === $availability_slug ) {
2245
+ $message = esc_html( sprintf( __( '%s are no longer available.', 'event-tickets' ), tribe_get_ticket_label_plural( 'unavailable_past' ) ) );
2246
  } elseif ( 'availability-mixed' === $availability_slug ) {
2247
+ $message = esc_html( sprintf( __( 'There are no %s available at this time.', 'event-tickets' ), tribe_get_ticket_label_plural( 'unavailable_mixed' ) ) );
2248
  }
2249
 
2250
  /**
src/Tribe/Tickets_View.php CHANGED
@@ -50,7 +50,7 @@ class Tribe__Tickets__Tickets_View {
50
 
51
  // Intercept Template file for Tickets
52
  add_action( 'tribe_events_pre_get_posts', array( $myself, 'modify_ticket_display_query' ) );
53
- add_filter( 'tribe_events_template', array( $myself, 'intercept_template' ), 20, 2 );
54
 
55
  // We will inject on the Priority 4, to be happen before RSVP
56
  add_action( 'tribe_events_single_event_after_the_meta', array( $myself, 'inject_link_template' ), 4 );
@@ -289,7 +289,7 @@ class Tribe__Tickets__Tickets_View {
289
  }
290
 
291
  // Now fetch the display and check it
292
- if ( 'tickets' !== get_query_var( 'eventDisplay', false ) ) {
293
  return;
294
  }
295
 
@@ -373,10 +373,15 @@ class Tribe__Tickets__Tickets_View {
373
  // Prevents firing more then it needs too outside of the loop
374
  $in_the_loop = isset( $GLOBALS['wp_query']->in_the_loop ) && $GLOBALS['wp_query']->in_the_loop;
375
 
376
- // Prevents Weird
 
 
377
  if (
378
- ! $this->is_edit_page()
379
- || ! $in_the_loop
 
 
 
380
  ) {
381
  return $content;
382
  }
@@ -414,13 +419,13 @@ class Tribe__Tickets__Tickets_View {
414
  }
415
 
416
  /**
417
- * We need to intercept the template loading and load the correct file
418
  *
419
- * @param string $old_file Non important variable with the previous path
420
- * @param string $template Which template we are dealing with
421
- * @return string The correct File path for the tickets endpoint
422
  */
423
- public function intercept_template( $old_file, $template ) {
424
  global $wp_query;
425
 
426
  /**
@@ -440,12 +445,8 @@ class Tribe__Tickets__Tickets_View {
440
 
441
  // Now fetch the display and check it
442
  $display = get_query_var( 'eventDisplay', false );
443
- if ( 'tickets' !== $display ) {
444
- return $old_file;
445
- }
446
 
447
- // If for some reason it's not `single-event.php` we don't care either
448
- if ( 'single-event.php' !== $template ) {
449
  return $old_file;
450
  }
451
 
@@ -799,12 +800,16 @@ class Tribe__Tickets__Tickets_View {
799
 
800
  $ticket_count = $this->count_ticket_attendees( $event_id, $user_id );
801
 
802
- if ( ! empty( $rsvp_count ) ) {
803
- $descriptions[] = _nx( 'RSVP', 'RSVPs', $rsvp_count, 'Singular and plural texts for RSVP(s)', 'event-tickets' );
 
 
804
  }
805
 
806
- if ( ! empty( $ticket_count ) ) {
807
- $descriptions[] = _nx( 'Ticket', 'Tickets', $ticket_count, 'Singular and plural texts for Ticket(s)', 'event-tickets' );
 
 
808
  }
809
 
810
  // Just return false if array is empty
@@ -812,7 +817,7 @@ class Tribe__Tickets__Tickets_View {
812
  return '';
813
  }
814
 
815
- return implode( esc_html__( ' and ', 'event-tickets' ), $descriptions );
816
  }
817
 
818
  /**
@@ -862,16 +867,18 @@ class Tribe__Tickets__Tickets_View {
862
  }
863
 
864
  /**
865
- * Gets a HTML Attribute for input/select/textarea to be disabled
866
  *
867
- * @param int $event_id The Event/Post ID (optional)
868
- * @param int $ticket_id The Ticket/RSVP ID (optional)
869
- * @return boolean
 
870
  */
871
  public function get_restriction_attr( $event_id = null, $ticket_id = null ) {
872
  $is_disabled = '';
 
873
  if ( $this->is_rsvp_restricted( $event_id, $ticket_id ) ) {
874
- $is_disabled = 'disabled title="' . esc_attr__( 'This RSVP is no longer active.', 'event-tickets' ) . '"';
875
  }
876
 
877
  return $is_disabled;
50
 
51
  // Intercept Template file for Tickets
52
  add_action( 'tribe_events_pre_get_posts', array( $myself, 'modify_ticket_display_query' ) );
53
+ add_filter( 'tribe_events_template_single-event.php', array( $myself, 'intercept_template' ), 20, 2 );
54
 
55
  // We will inject on the Priority 4, to be happen before RSVP
56
  add_action( 'tribe_events_single_event_after_the_meta', array( $myself, 'inject_link_template' ), 4 );
289
  }
290
 
291
  // Now fetch the display and check it
292
+ if ( 'tickets' !== get_query_var( 'eventDisplay', false ) && ! $this->is_edit_page() ) {
293
  return;
294
  }
295
 
373
  // Prevents firing more then it needs too outside of the loop
374
  $in_the_loop = isset( $GLOBALS['wp_query']->in_the_loop ) && $GLOBALS['wp_query']->in_the_loop;
375
 
376
+ // Now fetch the display and check it
377
+ $display = get_query_var( 'eventDisplay', false );
378
+
379
  if (
380
+ ! $in_the_loop
381
+ || (
382
+ 'tickets' !== $display
383
+ && ! $this->is_edit_page()
384
+ )
385
  ) {
386
  return $content;
387
  }
419
  }
420
 
421
  /**
422
+ * We need to intercept the template loading and load the correct file.
423
  *
424
+ * @param string $old_file Non important variable with the previous path.
425
+ *
426
+ * @return string The correct File path for the tickets endpoint.
427
  */
428
+ public function intercept_template( $old_file ) {
429
  global $wp_query;
430
 
431
  /**
445
 
446
  // Now fetch the display and check it
447
  $display = get_query_var( 'eventDisplay', false );
 
 
 
448
 
449
+ if ( 'tickets' !== $display && ! $this->is_edit_page() ) {
 
450
  return $old_file;
451
  }
452
 
800
 
801
  $ticket_count = $this->count_ticket_attendees( $event_id, $user_id );
802
 
803
+ if ( 1 === $rsvp_count ) {
804
+ $descriptions[] = tribe_get_rsvp_label_singular( 'tickets_view_description' );
805
+ } elseif ( 1 < $rsvp_count ) {
806
+ $descriptions[] = tribe_get_rsvp_label_plural( 'tickets_view_description' );
807
  }
808
 
809
+ if ( 1 === $ticket_count ) {
810
+ $descriptions[] = tribe_get_ticket_label_singular( 'tickets_view_description' );
811
+ } elseif ( 1 < $ticket_count ) {
812
+ $descriptions[] = tribe_get_ticket_label_plural( 'tickets_view_description' );
813
  }
814
 
815
  // Just return false if array is empty
817
  return '';
818
  }
819
 
820
+ return esc_html( implode( _x( ' and ', 'separator if there are both RSVPs and Tickets', 'event-tickets' ), $descriptions ) );
821
  }
822
 
823
  /**
867
  }
868
 
869
  /**
870
+ * Gets a HTML Attribute for input/select/textarea to be disabled.
871
  *
872
+ * @param int $event_id The Event/Post ID (optional).
873
+ * @param int $ticket_id The Ticket/RSVP ID (optional).
874
+ *
875
+ * @return bool
876
  */
877
  public function get_restriction_attr( $event_id = null, $ticket_id = null ) {
878
  $is_disabled = '';
879
+
880
  if ( $this->is_rsvp_restricted( $event_id, $ticket_id ) ) {
881
+ $is_disabled = 'disabled title="' . esc_attr( sprintf( __( 'This %s is no longer active.', 'event-tickets' ), tribe_get_rsvp_label_singular( 'rsvp_restricted_title_text' ) ) ) . '"';
882
  }
883
 
884
  return $is_disabled;
src/Tribe/Views/V2/Hooks.php ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Handles hooking all the actions and filters used by the module.
4
+ *
5
+ * To remove a filter:
6
+ * remove_filter( 'some_filter', [ tribe( Tribe\Events\Tickets\Views\V2\Hooks::class ), 'some_filtering_method' ] );
7
+ * remove_filter( 'some_filter', [ tribe( 'tickets.views.v2.hooks' ), 'some_filtering_method' ] );
8
+ *
9
+ * To remove an action:
10
+ * remove_action( 'some_action', [ tribe( Tribe\Events\Tickets\Views\V2\Hooks::class ), 'some_method' ] );
11
+ * remove_action( 'some_action', [ tribe( 'tickets.views.v2.hooks' ), 'some_method' ] );
12
+ *
13
+ * @since 4.10.9
14
+ *
15
+ * @package Tribe\Events\Tickets\Views\V2
16
+ */
17
+
18
+ namespace Tribe\Events\Tickets\Views\V2;
19
+
20
+ use Tribe\Events\Tickets\Views\V2\Models\Tickets;
21
+
22
+ /**
23
+ * Class Hooks.
24
+ *
25
+ * @since 4.10.9
26
+ *
27
+ * @package Tribe\Events\Tickets\Views\V2
28
+ */
29
+ class Hooks extends \tad_DI52_ServiceProvider {
30
+ /**
31
+ * Binds and sets up implementations.
32
+ *
33
+ * @since 4.10.9
34
+ */
35
+ public function register() {
36
+ $this->add_actions();
37
+ $this->add_filters();
38
+ }
39
+
40
+ /**
41
+ * Filters the list of folders TEC will look up to find templates to add the ones defined by Tickets.
42
+ *
43
+ * @since 4.10.9
44
+ *
45
+ * @param array $folders The current list of folders that will be searched template files.
46
+ *
47
+ * @return array The filtered list of folders that will be searched for the templates.
48
+ */
49
+ public function filter_template_path_list( array $folders = [] ) {
50
+ $folders[] = [
51
+ 'id' => 'event-tickets',
52
+ 'priority' => 17,
53
+ 'path' => \Tribe__Tickets__Main::instance()->plugin_path . 'src/views/v2',
54
+ ];
55
+
56
+ return $folders;
57
+ }
58
+
59
+ /**
60
+ * Add tickets data to the event object.
61
+ *
62
+ * @since 4.10.9
63
+ *
64
+ * @param array $props An associative array of all the properties that will be set on the "decorated" post
65
+ * object.
66
+ * @param \WP_Post $post The post object handled by the class.
67
+ *
68
+ * @return array The model properties. This value might be cached.
69
+ */
70
+ public function add_tickets_data( $props, $event ) {
71
+ $props['tickets'] = new Tickets( $event->ID );
72
+
73
+ return $props;
74
+ }
75
+
76
+ /**
77
+ * Adds the actions required by each Tickets Views v2 component.
78
+ *
79
+ * @since 4.10.9
80
+ */
81
+ protected function add_actions() {
82
+ // silence is golden
83
+ }
84
+
85
+ /**
86
+ * Adds the filters required by each Tickets Views v2 component.
87
+ *
88
+ * @since 4.10.9
89
+ */
90
+ protected function add_filters() {
91
+ add_filter( 'tribe_template_path_list', [ $this, 'filter_template_path_list' ] );
92
+ add_filter( 'tribe_post_type_events_properties', [ $this, 'add_tickets_data' ], 20, 2 );
93
+ }
94
+ }
src/Tribe/Views/V2/Models/Tickets.php ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Tickets abstraction objece, used to add tickets-related properties to the event object crated by the
4
+ * `trib_get_event` function.
5
+ *
6
+ * @since TBD
7
+ *
8
+ * @package Tribe\Events\Tickets\Views\V2\Models
9
+ */
10
+
11
+ namespace Tribe\Events\Tickets\Views\V2\Models;
12
+
13
+
14
+ use Tribe\Utils\Lazy_Events;
15
+
16
+ /**
17
+ * Class Tickets
18
+ *
19
+ * @since TBD
20
+ *
21
+ * @package Tribe\Events\Tickets\Views\V2\Models
22
+ */
23
+ class Tickets implements \ArrayAccess, \Serializable{
24
+ use Lazy_Events;
25
+
26
+ /**
27
+ * The post ID this tickets model is for.
28
+ *
29
+ * @since 4.10.9
30
+ *
31
+ * @var int
32
+ */
33
+ protected $post_id;
34
+
35
+ /**
36
+ * The tickets data.
37
+ *
38
+ * @since 4.10.9
39
+ *
40
+ * @var array
41
+ */
42
+ protected $data;
43
+
44
+ /**
45
+ * A flag property indicating whether tickets for the post exists or not.
46
+ *
47
+ * @since 4.10.9
48
+ *
49
+ * @var bool
50
+ */
51
+ protected $exists;
52
+
53
+ /**
54
+ * An array of all the tickets for this event.
55
+ *
56
+ * @since 4.10.9
57
+ *
58
+ * @var array
59
+ */
60
+ protected $all_tickets;
61
+
62
+ /**
63
+ * Tickets constructor.
64
+ *
65
+ * @param int $post_id The post ID.
66
+ */
67
+ public function __construct( $post_id ) {
68
+ $this->post_id = $post_id;
69
+ }
70
+
71
+ /**
72
+ * {@inheritDoc}
73
+ */
74
+ public function __get( $property ) {
75
+ if ( 'exist' === $property ) {
76
+ return $this->exist();
77
+ }
78
+
79
+ return $this->offsetGet( $property );
80
+ }
81
+
82
+ /**
83
+ * {@inheritDoc}
84
+ */
85
+ public function __set( $property, $value ) {
86
+ throw new \InvalidArgumentException( "The `Tickets::{$property}` property cannot be set." );
87
+ }
88
+
89
+ /**
90
+ * {@inheritDoc}
91
+ */
92
+ public function __isset( $property ) {
93
+ return $this->offsetExists( $property );
94
+ }
95
+
96
+ /**
97
+ * Returns the data about the event tickets, if any.
98
+ *
99
+ * @since 4.10.9
100
+ *
101
+ * @return array An array of objects containing the post thumbnail data.
102
+ */
103
+ public function fetch_data() {
104
+ if ( ! $this->exist() ) {
105
+ return [];
106
+ }
107
+
108
+ if ( null !== $this->data ) {
109
+ return $this->data;
110
+ }
111
+
112
+ if ( ! tribe_events_has_tickets_on_sale( $this->post_id ) ) {
113
+ return [];
114
+ }
115
+
116
+ // Get an array for ticket and rsvp counts.
117
+ $types = \Tribe__Tickets__Tickets::get_ticket_counts( $this->post_id );
118
+
119
+ // If no rsvp or tickets return.
120
+ if ( ! $types ) {
121
+ return [];
122
+ }
123
+
124
+ $html = [];
125
+ $parts = [];
126
+ $stock_html = '';
127
+ $link_label = '';
128
+ $link_anchor = '';
129
+
130
+ // If we have tickets or RSVP, but everything is Sold Out then display the Sold Out message.
131
+ foreach ( $types as $type => $data ) {
132
+
133
+ if ( ! $data['count'] ) {
134
+ continue;
135
+ }
136
+
137
+ if ( ! $data['available'] ) {
138
+ $parts[ $type . '_stock' ] = esc_html_x( 'Sold out', 'list view stock sold out', 'event-tickets' );
139
+
140
+ // Only re-apply if we don't have a stock yet
141
+ if ( empty( $html['stock'] ) ) {
142
+ $html['stock'] = $parts[ $type . '_stock' ];
143
+ }
144
+ } else {
145
+ $stock = $data['stock'];
146
+ if ( $data['unlimited'] || ! $data['stock'] ) {
147
+ // If unlimited tickets, tickets with no stock and rsvp, or no tickets and rsvp unlimited - hide the remaining count.
148
+ $stock = false;
149
+ }
150
+
151
+ if ( $stock ) {
152
+ $threshold = \Tribe__Settings_Manager::get_option( 'ticket-display-tickets-left-threshold', 0 );
153
+
154
+ /**
155
+ * Overwrites the threshold to display "# tickets left".
156
+ *
157
+ * @param int $threshold Stock threshold to trigger display of "# tickets left"
158
+ * @param array $data Ticket data.
159
+ * @param int $event_id Event ID.
160
+ *
161
+ * @since 4.10.1
162
+ */
163
+ $threshold = absint( apply_filters( 'tribe_display_tickets_left_threshold', $threshold, $data, $this->post_id ) );
164
+
165
+ if ( ! $threshold || $stock <= $threshold ) {
166
+
167
+ $number = number_format_i18n( $stock );
168
+
169
+ if ( 'rsvp' === $type ) {
170
+ $text = _n( '%s spot left', '%s spots left', $stock, 'event-tickets' );
171
+ } else {
172
+ $text = _n( '%s ticket left', '%s tickets left', $stock, 'event-tickets' );
173
+ }
174
+
175
+ $stock_html = esc_html( sprintf( $text, $number ) );
176
+ }
177
+ }
178
+
179
+ $parts[ $type . '_stock' ] = $html['stock'] = $stock_html;
180
+
181
+ if ( 'rsvp' === $type ) {
182
+ $link_label = esc_html( sprintf( _x( '%s Now', 'list view rsvp now ticket button', 'event-tickets' ), tribe_get_rsvp_label_singular( 'list_view_rsvp_now_button' ) ) );
183
+ $link_anchor = '#rsvp-now';
184
+ } else {
185
+ $link_label = esc_html( sprintf( _x( 'Get %s', 'list view buy now ticket button', 'event-tickets' ), tribe_get_ticket_label_plural( 'list_view_buy_now_button' ) ) );
186
+ $link_anchor = '#buy-tickets';
187
+ }
188
+
189
+ }
190
+ }
191
+
192
+ $this->data['link'] = (object) [
193
+ 'anchor' => get_permalink( $this->post_id ) . $link_anchor,
194
+ 'label' => $link_label,
195
+ ];
196
+
197
+ $this->data['stock'] = (object) [
198
+ 'available' => $stock_html,
199
+ ];
200
+
201
+ return $this->data;
202
+ }
203
+
204
+ /**
205
+ * {@inheritDoc}
206
+ */
207
+ public function offsetExists( $offset ) {
208
+ $this->data = $this->fetch_data();
209
+
210
+ return isset( $this->data[ $offset ] );
211
+ }
212
+
213
+ /**
214
+ * {@inheritDoc}
215
+ */
216
+ public function offsetGet( $offset ) {
217
+ $this->data = $this->fetch_data();
218
+
219
+ return isset( $this->data[ $offset ] )
220
+ ? $this->data[ $offset ]
221
+ : null;
222
+ }
223
+
224
+ /**
225
+ * {@inheritDoc}
226
+ */
227
+ public function offsetSet( $offset, $value ) {
228
+ $this->data = $this->fetch_data();
229
+
230
+ $this->data[ $offset ] = $value;
231
+ }
232
+
233
+ /**
234
+ * {@inheritDoc}
235
+ */
236
+ public function offsetUnset( $offset ) {
237
+ $this->data = $this->fetch_data();
238
+
239
+ unset( $this->data[ $offset ] );
240
+ }
241
+
242
+ /**
243
+ * Returns an array representation of the event tickets data.
244
+ *
245
+ * @since 4.10.9
246
+ *
247
+ *
248
+ * @return array An array representation of the event tickets data.
249
+ */
250
+ public function to_array() {
251
+ $this->data = $this->fetch_data();
252
+
253
+ return json_decode( json_encode( $this->data ), true );
254
+ }
255
+
256
+ /**
257
+ * {@inheritDoc}
258
+ */
259
+ public function serialize() {
260
+ $data = $this->fetch_data();
261
+ $data['post_id'] = $this->post_id;
262
+
263
+ return serialize( $data );
264
+ }
265
+
266
+ /**
267
+ * {@inheritDoc}
268
+ */
269
+ public function unserialize( $serialized ) {
270
+ $data = unserialize( $serialized );
271
+ $this->post_id = $data['post_id'];
272
+ unset( $data['post_id'] );
273
+ $this->data = $data;
274
+ }
275
+
276
+ /**
277
+ * Returns whether an event has tickets at all or not.
278
+ *
279
+ * @since 4.10.9
280
+ *
281
+ * @return bool Whether an event has tickets at all or not.
282
+ */
283
+ public function exist() {
284
+ if ( null !== $this->exists ) {
285
+ return $this->exists;
286
+ }
287
+
288
+ $this->all_tickets = \Tribe__Tickets__Tickets::get_all_event_tickets( $this->post_id );
289
+
290
+ $this->exists = ! empty( $this->all_tickets );
291
+
292
+ return $this->exists;
293
+ }
294
+ }
src/Tribe/Views/V2/Service_Provider.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Tribe\Events\Tickets\Views\V2;
3
+
4
+ /**
5
+ * The main service provider for Event Tickets support and additions to the Views V2 functions.
6
+ *
7
+ * @since TBD
8
+ * @package Tribe\Events\Tickets\Views\V2
9
+ */
10
+ class Service_Provider extends \tad_DI52_ServiceProvider {
11
+
12
+ /**
13
+ * Binds and sets up implementations.
14
+ *
15
+ * @since 4.10.9
16
+ */
17
+ public function register() {
18
+
19
+ require_once tribe( 'tickets.main' )->plugin_path . 'src/functions/views/provider.php';
20
+
21
+ if ( ! tribe_events_tickets_views_v2_is_enabled() ) {
22
+ return;
23
+ }
24
+
25
+ $this->register_hooks();
26
+
27
+ // Register the SP on the container
28
+ $this->container->singleton( 'tickets.views.v2.provider', $this );
29
+ $this->container->singleton( static::class, $this );
30
+ }
31
+
32
+ /**
33
+ * Registers the provider handling all the 1st level filters and actions for Views v2.
34
+ *
35
+ * @since 4.10.9
36
+ */
37
+ protected function register_hooks() {
38
+ $hooks = new Hooks( $this->container );
39
+ $hooks->register();
40
+
41
+ // Allow Hooks to be removed, by having the them registred to the container
42
+ $this->container->singleton( Hooks::class, $hooks );
43
+ $this->container->singleton( 'tickets.views.v2.hooks', $hooks );
44
+ }
45
+
46
+
47
+ }
src/admin-views/editor/column-body-price.php CHANGED
@@ -13,7 +13,7 @@ if ( method_exists( $provider_obj, 'get_price_value' ) ) {
13
  echo $provider_obj->get_price_html( $ticket->ID );
14
  } else {
15
  if ( 'Tribe__Tickets__RSVP' === $ticket->provider_class ) {
16
- esc_html_e( 'RSVP', 'event-tickets' );
17
  } else {
18
  esc_html_e( 'Free', 'event-tickets' );
19
  }
13
  echo $provider_obj->get_price_html( $ticket->ID );
14
  } else {
15
  if ( 'Tribe__Tickets__RSVP' === $ticket->provider_class ) {
16
+ echo esc_html( tribe_get_rsvp_label_singular( basename( __FILE__ ) ) );
17
  } else {
18
  esc_html_e( 'Free', 'event-tickets' );
19
  }
src/admin-views/editor/fieldset/advanced.php CHANGED
@@ -92,10 +92,10 @@ $start_date_errors = array(
92
  data-step="<?php echo esc_attr( $timepicker_step ); ?>"
93
  data-round="<?php echo esc_attr( $timepicker_round ); ?>"
94
  value="<?php echo esc_attr( $ticket ? $ticket->start_time : null ); ?>"
95
- aria-label="<?php esc_html_e( 'Ticket start date', 'event-tickets' ); ?>"
96
  />
97
  <span class="helper-text hide-if-js"><?php esc_html_e( 'HH:MM', 'event-tickets' ) ?></span>
98
- <span class="dashicons dashicons-editor-help" title="<?php esc_attr_e( 'If you do not set a start sale date, tickets will be available immediately.', 'event-tickets' ); ?>"></span>
99
  </div>
100
  </div>
101
  <div class="input_block">
@@ -121,15 +121,15 @@ $start_date_errors = array(
121
  data-step="<?php echo esc_attr( $timepicker_step ); ?>"
122
  data-round="<?php echo esc_attr( $timepicker_round ); ?>"
123
  value="<?php echo esc_attr( $ticket ? $ticket->end_time : null ); ?>"
124
- aria-label="<?php esc_html_e( 'Ticket end date', 'event-tickets' ); ?>"
125
  />
126
  <span class="helper-text hide-if-js"><?php esc_html_e( 'HH:MM', 'event-tickets' ) ?></span>
127
  <span
128
  class="dashicons dashicons-editor-help"
129
  <?php if ( class_exists( 'Tribe__Events__Main' ) && Tribe__Events__Main::POSTTYPE === get_post_type( $post_id ) ) : ?>
130
- title="<?php esc_attr_e( 'If you do not set an end sale date, tickets will be available until the event begins.', 'event-tickets' ); ?>"
131
  <?php else : ?>
132
- title="<?php esc_attr_e( 'If you do not set an end sale date, tickets sales will never end.', 'event-tickets' ); ?>"
133
  <?php endif; ?>
134
  ></span>
135
  </div>
92
  data-step="<?php echo esc_attr( $timepicker_step ); ?>"
93
  data-round="<?php echo esc_attr( $timepicker_round ); ?>"
94
  value="<?php echo esc_attr( $ticket ? $ticket->start_time : null ); ?>"
95
+ aria-label="<?php echo esc_html( sprintf( __( '%s start date', 'event-tickets' ), tribe_get_ticket_label_singular( 'input_start_time_aria_label' ) ) ); ?>"
96
  />
97
  <span class="helper-text hide-if-js"><?php esc_html_e( 'HH:MM', 'event-tickets' ) ?></span>
98
+ <span class="dashicons dashicons-editor-help" title="<?php echo esc_html( sprintf( __( 'If you do not set a start sale date, %s will be available immediately.', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'input_start_time_help_text_title' ) ) ); ?>"></span>
99
  </div>
100
  </div>
101
  <div class="input_block">
121
  data-step="<?php echo esc_attr( $timepicker_step ); ?>"
122
  data-round="<?php echo esc_attr( $timepicker_round ); ?>"
123
  value="<?php echo esc_attr( $ticket ? $ticket->end_time : null ); ?>"
124
+ aria-label="<?php echo esc_html( sprintf( __( '%s end date', 'event-tickets' ), tribe_get_ticket_label_singular( 'input_end_time_aria_label' ) ) ); ?>"
125
  />
126
  <span class="helper-text hide-if-js"><?php esc_html_e( 'HH:MM', 'event-tickets' ) ?></span>
127
  <span
128
  class="dashicons dashicons-editor-help"
129
  <?php if ( class_exists( 'Tribe__Events__Main' ) && Tribe__Events__Main::POSTTYPE === get_post_type( $post_id ) ) : ?>
130
+ title="<?php echo esc_html( sprintf( __( 'If you do not set an end sale date, %s will be available until the event begins.', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'input_end_time_help_text_title' ) ) ); ?>"
131
  <?php else : ?>
132
+ title="<?php echo esc_html( sprintf( __( 'If you do not set an end sale date, %s will be available forever.', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'input_end_time_help_text_title' ) ) ); ?>"
133
  <?php endif; ?>
134
  ></span>
135
  </div>
src/admin-views/editor/fieldset/price.php CHANGED
@@ -3,9 +3,9 @@
3
  if ( ! isset( $post_id ) ) {
4
  $post_id = get_the_ID();
5
  }
6
- $validation_attrs = array(
7
- 'data-validation-error="' . esc_attr__( 'Ticket Price must be greater than zero.', 'event-tickets' ) . '"'
8
- );
9
 
10
  if ( ! isset( $ticket_id ) ) {
11
  $provider = null;
@@ -18,7 +18,7 @@ if ( ! isset( $ticket_id ) ) {
18
  $provider = tribe_tickets_get_ticket_provider( $ticket_id );
19
  $is_paypal_ticket = $provider instanceof Tribe__Tickets__Commerce__PayPal__Main;
20
 
21
- $description_string = __( 'Leave blank for free tickets', 'event-tickets' );
22
  $description_string = esc_html( apply_filters( 'tribe_tickets_price_description', $description_string, $ticket_id ) );
23
  $price_description = $is_paypal_ticket ? '' : $description_string;
24
 
@@ -29,11 +29,11 @@ if ( ! isset( $ticket_id ) ) {
29
  }
30
 
31
  /**
32
- * Filters whether we shold disable the ticket - separate from tribe-dependency.
33
  *
34
  * @since 4.10.8
35
  *
36
- * @param boolean $$disabled The boolean value tested againt
37
  * @param WP_Post|int $ticket_id The current ticket object or its ID
38
  */
39
  $disabled = apply_filters( 'tribe_tickets_price_disabled', false, $ticket_id );
@@ -118,4 +118,4 @@ if ( ! isset( $ticket_id ) ) {
118
  <p class="description ticket_form_right"><?php echo $sale_price_desc; ?></p>
119
  </div>
120
  <?php endif; ?>
121
- </div>
3
  if ( ! isset( $post_id ) ) {
4
  $post_id = get_the_ID();
5
  }
6
+ $validation_attrs = [
7
+ 'data-validation-error="' . esc_attr( sprintf( _x( '%s price must be greater than zero.', 'ticket price validation error', 'event-tickets' ), tribe_get_ticket_label_singular( 'ticket_price_validation_error' ) ) ) . '"'
8
+ ];
9
 
10
  if ( ! isset( $ticket_id ) ) {
11
  $provider = null;
18
  $provider = tribe_tickets_get_ticket_provider( $ticket_id );
19
  $is_paypal_ticket = $provider instanceof Tribe__Tickets__Commerce__PayPal__Main;
20
 
21
+ $description_string = sprintf( _x( 'Leave blank for free %s', 'price description', 'event-tickets' ), tribe_get_ticket_label_singular( 'price_description' ) );
22
  $description_string = esc_html( apply_filters( 'tribe_tickets_price_description', $description_string, $ticket_id ) );
23
  $price_description = $is_paypal_ticket ? '' : $description_string;
24
 
29
  }
30
 
31
  /**
32
+ * Filters whether we should disable the ticket - separate from tribe-dependency.
33
  *
34
  * @since 4.10.8
35
  *
36
+ * @param boolean $disabled The boolean value tested against
37
  * @param WP_Post|int $ticket_id The current ticket object or its ID
38
  */
39
  $disabled = apply_filters( 'tribe_tickets_price_disabled', false, $ticket_id );
118
  <p class="description ticket_form_right"><?php echo $sale_price_desc; ?></p>
119
  </div>
120
  <?php endif; ?>
121
+ </div>
src/admin-views/editor/list-row.php CHANGED
@@ -40,7 +40,7 @@ if (
40
 
41
  ?>
42
  <tr class="<?php echo esc_attr( $provider ); ?> is-expanded" data-ticket-order-id="order_<?php echo esc_attr( $ticket->ID ); ?>" data-ticket-type-id="<?php echo esc_attr( $ticket->ID ); ?>">
43
- <td class="column-primary ticket_name <?php echo esc_attr( $provider ); ?>" data-label="<?php esc_html_e( 'Ticket Type:', 'event-tickets' ); ?>">
44
  <span class="dashicons dashicons-screenoptions tribe-handle"></span>
45
  <input
46
  type="hidden"
@@ -104,7 +104,11 @@ if (
104
  "<button data-provider='%s' data-ticket-id='%s' title='%s' class='ticket_edit_button'><span class='ticket_edit_text'>%s</span></a>",
105
  esc_attr( $ticket->provider_class ),
106
  esc_attr( $ticket->ID ),
107
- esc_attr( sprintf( __( '( Ticket ID: %d )', 'tribe-tickets' ), $ticket->ID ) ),
 
 
 
 
108
  esc_html( $ticket->name )
109
  );
110
  ?>
40
 
41
  ?>
42
  <tr class="<?php echo esc_attr( $provider ); ?> is-expanded" data-ticket-order-id="order_<?php echo esc_attr( $ticket->ID ); ?>" data-ticket-type-id="<?php echo esc_attr( $ticket->ID ); ?>">
43
+ <td class="column-primary ticket_name <?php echo esc_attr( $provider ); ?>" data-label="<?php echo esc_attr( sprintf( _x( '%s Type:', 'ticket type label', 'event-tickets' ), tribe_get_ticket_label_singular( 'ticket_type_label' ) ) ); ?>">
44
  <span class="dashicons dashicons-screenoptions tribe-handle"></span>
45
  <input
46
  type="hidden"
104
  "<button data-provider='%s' data-ticket-id='%s' title='%s' class='ticket_edit_button'><span class='ticket_edit_text'>%s</span></a>",
105
  esc_attr( $ticket->provider_class ),
106
  esc_attr( $ticket->ID ),
107
+ esc_attr( sprintf(
108
+ _x( '%s ID: %d', 'ticket ID title attribute', 'event-tickets' ),
109
+ tribe_get_ticket_label_singular( 'ticket_id_title_attribute' ),
110
+ $ticket->ID
111
+ ) ),
112
  esc_html( $ticket->name )
113
  );
114
  ?>
src/admin-views/editor/list-table.php CHANGED
@@ -27,7 +27,7 @@ $modules = Tribe__Tickets__Tickets::modules();
27
  <table id="tribe_ticket_list_table" class="tribe-tickets-editor-table eventtable ticket_list eventForm widefat fixed">
28
  <thead>
29
  <tr class="table-header">
30
- <th class="ticket_name column-primary"><?php esc_html_e( 'Tickets', 'event-tickets' ); ?></th>
31
  <?php
32
  /**
33
  * Allows for the insertion of additional columns into the ticket table header
@@ -78,4 +78,4 @@ $modules = Tribe__Tickets__Tickets::modules();
78
 
79
  <?php if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) : ?>
80
  </div>
81
- <?php endif;
27
  <table id="tribe_ticket_list_table" class="tribe-tickets-editor-table eventtable ticket_list eventForm widefat fixed">
28
  <thead>
29
  <tr class="table-header">
30
+ <th class="ticket_name column-primary"><?php echo esc_html( tribe_get_ticket_label_plural( basename( __FILE__ ) ) ); ?></th>
31
  <?php
32
  /**
33
  * Allows for the insertion of additional columns into the ticket table header
78
 
79
  <?php if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) : ?>
80
  </div>
81
+ <?php endif;
src/admin-views/editor/panel/list.php CHANGED
@@ -63,15 +63,15 @@ $add_new_ticket_label = count( $ticket_providing_modules ) > 0
63
  aria-label="<?php echo $add_new_ticket_label ?>"
64
  "<?php echo disabled( count( $ticket_providing_modules ) === 0 ) ?>"
65
  >
66
- <?php esc_html_e( 'New ticket', 'event-tickets' ); ?>
67
  </button>
68
 
69
  <button
70
  id="rsvp_form_toggle"
71
  class="button-secondary ticket_form_toggle tribe-button-icon tribe-button-icon-plus"
72
- aria-label="<?php esc_attr_e( 'Add a new RSVP', 'event-tickets' ); ?>"
73
  >
74
- <?php esc_html_e( 'New RSVP', 'event-tickets' ); ?>
75
  </button>
76
 
77
 
@@ -102,4 +102,4 @@ $add_new_ticket_label = count( $ticket_providing_modules ) > 0
102
  do_action( 'tribe_events_tickets_after_new_ticket_panel', $post_id );
103
  ?>
104
 
105
- </div>
63
  aria-label="<?php echo $add_new_ticket_label ?>"
64
  "<?php echo disabled( count( $ticket_providing_modules ) === 0 ) ?>"
65
  >
66
+ <?php echo esc_html( sprintf( _x( 'New %s', 'admin editor panel list button label', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'admin_editor_panel_list_button_label' ) ) ); ?>
67
  </button>
68
 
69
  <button
70
  id="rsvp_form_toggle"
71
  class="button-secondary ticket_form_toggle tribe-button-icon tribe-button-icon-plus"
72
+ aria-label="<?php echo esc_attr( sprintf( _x( 'Add a new %s', 'RSVP form toggle button label', 'event-tickets' ), tribe_get_rsvp_label_singular( 'rsvp_form_toggle_button_label' ) ) ); ?>"
73
  >
74
+ <?php echo esc_html( sprintf( _x( 'New %s', 'RSVP form toggle button text', 'event-tickets' ), tribe_get_rsvp_label_singular( 'rsvp_form_toggle_button_text' ) ) ); ?>
75
  </button>
76
 
77
 
102
  do_action( 'tribe_events_tickets_after_new_ticket_panel', $post_id );
103
  ?>
104
 
105
+ </div>
src/admin-views/editor/panel/settings.php CHANGED
@@ -11,7 +11,7 @@ if ( ! empty( $header_id ) ) {
11
  ?>
12
 
13
  <div id="tribe_panel_settings" class="ticket_panel panel_settings" aria-hidden="true" >
14
- <h4><?php esc_html_e( 'Ticket Settings', 'event-tickets' ); ?></h4>
15
 
16
  <section class="settings_main">
17
  <?php
@@ -19,6 +19,7 @@ if ( ! empty( $header_id ) ) {
19
  * Allows for the insertion of additional elements into the ticket settings admin panel above the ticket table
20
  *
21
  * @param int Post ID
 
22
  * @since 4.6
23
  */
24
  do_action( 'tribe_events_tickets_settings_content_before', $post_id );
@@ -38,9 +39,9 @@ if ( ! empty( $header_id ) ) {
38
  <section id="tribe-tickets-image">
39
  <div class="tribe-tickets-image-upload">
40
  <div class="input_block">
41
- <span class="ticket_form_label tribe-strong-label"><?php esc_html_e( 'Ticket header image:', 'event-tickets' ); ?></span>
42
  <p class="description">
43
- <?php esc_html_e( 'Select an image from your Media Library to display on emailed tickets. For best results, use a .jpg, .png, or .gif at least 1160px wide.', 'event-tickets' ); ?>
44
  </p>
45
  </div>
46
  <input
11
  ?>
12
 
13
  <div id="tribe_panel_settings" class="ticket_panel panel_settings" aria-hidden="true" >
14
+ <h4><?php echo esc_html( sprintf( _x( '%s Settings', 'meta box ticket form heading', 'event-tickets' ), tribe_get_ticket_label_singular( 'meta_box_ticket_form_heading' ) ) ); ?></h4>
15
 
16
  <section class="settings_main">
17
  <?php
19
  * Allows for the insertion of additional elements into the ticket settings admin panel above the ticket table
20
  *
21
  * @param int Post ID
22
+ *
23
  * @since 4.6
24
  */
25
  do_action( 'tribe_events_tickets_settings_content_before', $post_id );
39
  <section id="tribe-tickets-image">
40
  <div class="tribe-tickets-image-upload">
41
  <div class="input_block">
42
+ <span class="ticket_form_label tribe-strong-label"><?php echo esc_html( sprintf( _x( '%s header image:', 'ticket image upload label', 'event-tickets' ), tribe_get_ticket_label_singular( 'ticket_image_upload_label' ) ) ); ?></span>
43
  <p class="description">
44
+ <?php echo esc_html( sprintf( _x( 'Select an image from your Media Library to display on emailed %s. For best results, use a .jpg, .png, or .gif at least 1160px wide.', 'ticket image upload label description', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'ticket_image_upload_label_description' ) ) ); ?>
45
  </p>
46
  </div>
47
  <input
src/admin-views/editor/panel/ticket.php CHANGED
@@ -50,7 +50,7 @@ $default_provider = Tribe__Tickets__Tickets::get_event_ticket_provider( $post_id
50
  data-depends="#ticket_id"
51
  data-condition-is-empty
52
  >
53
- <?php esc_html_e( 'Add new ticket', 'event-tickets' ); ?>
54
  </h4>
55
  <h4
56
  id="ticket_title_edit"
@@ -58,7 +58,7 @@ $default_provider = Tribe__Tickets__Tickets::get_event_ticket_provider( $post_id
58
  data-depends="#ticket_id"
59
  data-condition-is-not-empty
60
  >
61
- <?php esc_html_e( 'Edit ticket', 'event-tickets' ); ?>
62
  </h4>
63
  </div>
64
  <div
@@ -72,7 +72,7 @@ $default_provider = Tribe__Tickets__Tickets::get_event_ticket_provider( $post_id
72
  data-depends="#ticket_id"
73
  data-condition-is-empty
74
  >
75
- <?php esc_html_e( 'Add new RSVP', 'event-tickets' ); ?>
76
  </h4>
77
  <h4
78
  id="rsvp_title_edit"
@@ -80,7 +80,7 @@ $default_provider = Tribe__Tickets__Tickets::get_event_ticket_provider( $post_id
80
  data-depends="#ticket_id"
81
  data-condition-is-not-empty
82
  >
83
- <?php esc_html_e( 'Edit RSVP', 'event-tickets' ); ?>
84
  </h4>
85
  </div>
86
  <section id="ticket_form_main" class="main">
@@ -94,9 +94,13 @@ $default_provider = Tribe__Tickets__Tickets::get_event_ticket_provider( $post_id
94
  size='25'
95
  value="<?php echo esc_attr( $ticket ? $ticket->name : null ); ?>"
96
  data-validation-is-required
97
- data-validation-error="<?php esc_attr_e( 'Ticket Type is a required field.', 'event-tickets' ); ?>"
98
  />
99
- <span class="tribe_soft_note ticket_form_right"><?php esc_html_e( 'Ticket type name shows on the front end and emailed tickets', 'event-tickets' ); ?></span>
 
 
 
 
100
  </div>
101
  <fieldset id="tribe_ticket_provider_wrapper" class="input_block" aria-hidden="true" >
102
  <legend class="ticket_form_label"><?php esc_html_e( 'Sell using:', 'event-tickets' ); ?></legend>
@@ -137,9 +141,9 @@ $default_provider = Tribe__Tickets__Tickets::get_event_ticket_provider( $post_id
137
  </section>
138
 
139
  <div class="accordion">
140
- <?php tribe( 'tickets.admin.views' )->template( 'editor/fieldset/advanced', array( 'post_id' => $post_id, 'ticket_id' => $ticket_id ) ); ?>
141
 
142
- <?php tribe( 'tickets.admin.views' )->template( 'editor/fieldset/history', array( 'post_id' => $post_id, 'ticket_id' => $ticket_id ) ); ?>
143
 
144
  <?php
145
  /**
@@ -178,7 +182,7 @@ $default_provider = Tribe__Tickets__Tickets::get_event_ticket_provider( $post_id
178
  id="ticket_form_save"
179
  class="button-primary tribe-dependent tribe-validation-submit"
180
  name="ticket_form_save"
181
- value="<?php esc_attr_e( 'Save ticket', 'event-tickets' ); ?>"
182
  data-depends="#Tribe__Tickets__RSVP_radio"
183
  data-condition-is-not-checked
184
  />
@@ -187,7 +191,7 @@ $default_provider = Tribe__Tickets__Tickets::get_event_ticket_provider( $post_id
187
  id="rsvp_form_save"
188
  class="button-primary tribe-dependent tribe-validation-submit"
189
  name="ticket_form_save"
190
- value="<?php esc_attr_e( 'Save RSVP', 'event-tickets' ); ?>"
191
  data-depends="#Tribe__Tickets__RSVP_radio"
192
  data-condition-is-checked
193
  />
50
  data-depends="#ticket_id"
51
  data-condition-is-empty
52
  >
53
+ <?php echo esc_html( sprintf( _x( 'Add new %s', 'admin add new ticket panel heading', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'admin_add_new_ticket_panel_heading' ) ) ); ?>
54
  </h4>
55
  <h4
56
  id="ticket_title_edit"
58
  data-depends="#ticket_id"
59
  data-condition-is-not-empty
60
  >
61
+ <?php echo esc_html( sprintf( _x( 'Edit %s', 'admin edit ticket panel heading', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'admin_edit_ticket_panel_heading' ) ) ); ?>
62
  </h4>
63
  </div>
64
  <div
72
  data-depends="#ticket_id"
73
  data-condition-is-empty
74
  >
75
+ <?php echo esc_html( sprintf( _x( 'Add new %s', 'admin add new ticket panel heading', 'event-tickets' ), tribe_get_rsvp_label_singular( 'admin_add_new_ticket_panel_heading' ) ) ); ?>
76
  </h4>
77
  <h4
78
  id="rsvp_title_edit"
80
  data-depends="#ticket_id"
81
  data-condition-is-not-empty
82
  >
83
+ <?php echo esc_html( sprintf( _x( 'Edit %s', 'admin edit ticket panel heading', 'event-tickets' ), tribe_get_rsvp_label_singular( 'admin_edit_ticket_panel_heading' ) ) ); ?>
84
  </h4>
85
  </div>
86
  <section id="ticket_form_main" class="main">
94
  size='25'
95
  value="<?php echo esc_attr( $ticket ? $ticket->name : null ); ?>"
96
  data-validation-is-required
97
+ data-validation-error="<?php echo esc_attr( sprintf( _x( '%s type is a required field', 'admin edit ticket panel error', 'event-tickets' ), tribe_get_rsvp_label_singular( 'admin_edit_ticket_panel_error' ) ) ); ?>"
98
  />
99
+ <span class="tribe_soft_note ticket_form_right"><?php echo esc_html( sprintf(
100
+ _x( '%1$s type name shows on the front end and emailed %2$s', 'admin edit ticket panel note', 'event-tickets' ),
101
+ tribe_get_rsvp_label_singular( 'admin_edit_ticket_panel_note' ),
102
+ tribe_get_ticket_label_plural_lowercase( 'admin_edit_ticket_panel_note' )
103
+ ) ); ?></span>
104
  </div>
105
  <fieldset id="tribe_ticket_provider_wrapper" class="input_block" aria-hidden="true" >
106
  <legend class="ticket_form_label"><?php esc_html_e( 'Sell using:', 'event-tickets' ); ?></legend>
141
  </section>
142
 
143
  <div class="accordion">
144
+ <?php tribe( 'tickets.admin.views' )->template( 'editor/fieldset/advanced', [ 'post_id' => $post_id, 'ticket_id' => $ticket_id ] ); ?>
145
 
146
+ <?php tribe( 'tickets.admin.views' )->template( 'editor/fieldset/history', [ 'post_id' => $post_id, 'ticket_id' => $ticket_id ] ); ?>
147
 
148
  <?php
149
  /**
182
  id="ticket_form_save"
183
  class="button-primary tribe-dependent tribe-validation-submit"
184
  name="ticket_form_save"
185
+ value="<?php echo esc_attr( sprintf( _x( 'Save %s', 'meta box ticket form button text', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'meta_box_ticket_form_button_text' ) ) ); ?>"
186
  data-depends="#Tribe__Tickets__RSVP_radio"
187
  data-condition-is-not-checked
188
  />
191
  id="rsvp_form_save"
192
  class="button-primary tribe-dependent tribe-validation-submit"
193
  name="ticket_form_save"
194
+ value="<?php echo esc_attr( sprintf( _x( 'Save %s', 'RSVP form save value', 'event-tickets' ), tribe_get_rsvp_label_singular( 'form_save_value' ) ) ); ?>"
195
  data-depends="#Tribe__Tickets__RSVP_radio"
196
  data-condition-is-checked
197
  />
src/admin-views/meta-box.php CHANGED
@@ -28,7 +28,7 @@ $modules = Tribe__Tickets__Tickets::modules();
28
  ?>
29
  <tr>
30
  <td colspan="2" class="tribe_sectionheader updated">
31
- <p class="error-message"><?php esc_html_e( 'This event was created using Community Events. Are you sure you want to sell tickets for it?', 'event-tickets' ); ?></p>
32
  </td>
33
  </tr>
34
  <?php
@@ -39,7 +39,7 @@ $modules = Tribe__Tickets__Tickets::modules();
39
  <table class="eventtable ticket_list eventForm">
40
  <tr class="tribe-tickets-image-upload">
41
  <td>
42
- <?php esc_html_e( 'Upload image for the ticket header.', 'event-tickets' ); ?>
43
  <p class="description"><?php esc_html_e( 'The maximum image size in the email will be 580px wide by any height, and then scaled for mobile. If you would like "retina" support use an image sized to 1160px wide.', 'event-tickets' ); ?></p>
44
  </td>
45
  <td>
@@ -95,7 +95,7 @@ $modules = Tribe__Tickets__Tickets::modules();
95
  /**
96
  * Fired to allow for the insertion of additional content into the ticket admin form before the tickets listing
97
  *
98
- * @param Post ID
99
  */
100
  do_action( 'tribe_events_tickets_metabox_pre', get_the_ID() ); ?>
101
 
@@ -109,7 +109,7 @@ $modules = Tribe__Tickets__Tickets::modules();
109
  <tr>
110
  <td colspan="2" class="tribe_sectionheader">
111
  <a href="#" class="button-secondary"
112
- id="ticket_form_toggle"><?php esc_html_e( 'Add new ticket', 'event-tickets' ); ?></a>
113
  </td>
114
  </tr>
115
  <tr id="ticket_form" class="ticket_form">
@@ -142,14 +142,14 @@ $modules = Tribe__Tickets__Tickets::modules();
142
  </td>
143
  </tr>
144
  <tr class="ticket">
145
- <td><label for="ticket_name"><?php esc_html_e( 'Ticket Name:', 'event-tickets' ); ?></label></td>
146
  <td>
147
  <input type='text' id='ticket_name' name='ticket_name' class="ticket_field" size='25' value='' />
148
  </td>
149
  </tr>
150
  <tr class="ticket">
151
  <td><label
152
- for="ticket_description"><?php esc_html_e( 'Ticket Description:', 'event-tickets' ); ?></label>
153
  </td>
154
  <td>
155
  <textarea rows="5" cols="40" name="ticket_description" class="ticket_field"
@@ -227,7 +227,7 @@ $modules = Tribe__Tickets__Tickets::modules();
227
  /**
228
  * Fired to allow for the insertion of additional content into the ticket admin form
229
  *
230
- * @var Post ID
231
  * @var null Ticket ID
232
  */
233
  do_action( 'tribe_events_tickets_metabox_advanced', get_the_ID(), null ); ?>
@@ -236,11 +236,11 @@ $modules = Tribe__Tickets__Tickets::modules();
236
  <td></td>
237
  <td>
238
  <input type="hidden" name="ticket_id" id="ticket_id" class="ticket_field" value="" />
239
- <input type="button" id="ticket_form_save" name="ticket_form_save" value="<?php esc_attr_e( 'Save this ticket', 'event-tickets' ); ?>" class="button-primary" />
240
  <input type="button" id="ticket_form_cancel" name="ticket_form_cancel" value="<?php esc_attr_e( 'Cancel', 'event-tickets' ); ?>" class="button-secondary" />
241
  </td>
242
  </tr>
243
  </table>
244
  </td>
245
  </tr>
246
- </table>
28
  ?>
29
  <tr>
30
  <td colspan="2" class="tribe_sectionheader updated">
31
+ <p class="error-message"><?php echo esc_html( sprintf( _x( 'This event was created using Community Events. Are you sure you want to sell %s for it?', 'meta box ticket form CE warning', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'meta_box_ticket_form_ce_warning' ) ) ); ?></p>
32
  </td>
33
  </tr>
34
  <?php
39
  <table class="eventtable ticket_list eventForm">
40
  <tr class="tribe-tickets-image-upload">
41
  <td>
42
+ <?php echo esc_html( sprintf( _x( 'Upload image for the %s header.', 'meta box ticket form image', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'meta_box_ticket_form_image' ) ) ); ?>
43
  <p class="description"><?php esc_html_e( 'The maximum image size in the email will be 580px wide by any height, and then scaled for mobile. If you would like "retina" support use an image sized to 1160px wide.', 'event-tickets' ); ?></p>
44
  </td>
45
  <td>
95
  /**
96
  * Fired to allow for the insertion of additional content into the ticket admin form before the tickets listing
97
  *
98
+ * @param int Post ID
99
  */
100
  do_action( 'tribe_events_tickets_metabox_pre', get_the_ID() ); ?>
101
 
109
  <tr>
110
  <td colspan="2" class="tribe_sectionheader">
111
  <a href="#" class="button-secondary"
112
+ id="ticket_form_toggle"><?php echo esc_html( sprintf( _x( 'Add new %s', 'meta box ticket form toggle', 'event-tickets' ), tribe_get_ticket_label_singular( 'meta_box_ticket_form_toggle' ) ) ); ?></a>
113
  </td>
114
  </tr>
115
  <tr id="ticket_form" class="ticket_form">
142
  </td>
143
  </tr>
144
  <tr class="ticket">
145
+ <td><label for="ticket_name"><?php echo esc_html( sprintf( _x( '%s Name:', 'meta box ticket form', 'event-tickets' ), tribe_get_ticket_label_singular( 'meta_box_ticket_form' ) ) ); ?></label></td>
146
  <td>
147
  <input type='text' id='ticket_name' name='ticket_name' class="ticket_field" size='25' value='' />
148
  </td>
149
  </tr>
150
  <tr class="ticket">
151
  <td><label
152
+ for="ticket_description"><?php echo esc_html( sprintf( _x( '%s Description:', 'meta box ticket form', 'event-tickets' ), tribe_get_ticket_label_singular( 'meta_box_ticket_form' ) ) ); ?></label>
153
  </td>
154
  <td>
155
  <textarea rows="5" cols="40" name="ticket_description" class="ticket_field"
227
  /**
228
  * Fired to allow for the insertion of additional content into the ticket admin form
229
  *
230
+ * @var int Post ID
231
  * @var null Ticket ID
232
  */
233
  do_action( 'tribe_events_tickets_metabox_advanced', get_the_ID(), null ); ?>
236
  <td></td>
237
  <td>
238
  <input type="hidden" name="ticket_id" id="ticket_id" class="ticket_field" value="" />
239
+ <input type="button" id="ticket_form_save" name="ticket_form_save" value="<?php echo esc_attr( sprintf( _x( 'Save this %s', 'meta box form save button', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'meta_box_form_save_button' ) ) ); ?>" class="button-primary" />
240
  <input type="button" id="ticket_form_cancel" name="ticket_form_cancel" value="<?php esc_attr_e( 'Cancel', 'event-tickets' ); ?>" class="button-secondary" />
241
  </td>
242
  </tr>
243
  </table>
244
  </td>
245
  </tr>
246
+ </table>
src/admin-views/privacy.php CHANGED
@@ -1,6 +1,8 @@
1
  <?php
2
  /**
3
  * Event Tickets Privacy
 
 
4
  */
5
 
6
  // Don't load directly
@@ -22,20 +24,41 @@ if ( ! defined( 'ABSPATH' ) ) {
22
 
23
  <p class="privacy-policy-tutorial"><?php esc_html_e( 'Through the usage of Event Tickets, Event Tickets Plus, and Community Tickets, information may be collected and stored within your website’s database.', 'event-tickets' ); ?></p>
24
  <p class="privacy-policy-tutorial"><strong><?php esc_html_e( 'Suggested text:', 'event-tickets' ); ?></strong></p>
25
- <p><?php esc_html_e( 'If you create, submit, import, save, or publish event ticket information, as well as RSVP or purchase tickets to events, such information is retained in the local database:', 'event-tickets' ); ?></p>
 
 
 
 
 
 
 
26
 
27
  <ol>
28
- <li><?php esc_html_e( 'Attendees information (RSVPs and Tickets): name and email address', 'event-tickets' ); ?></li>
29
- <li><?php esc_html_e( 'Ticket information (RSVPs and Tickets): name, email address, and ticket number/SKU (via check-in page)', 'event-tickets' ); ?></li>
30
- <li><?php esc_html_e( 'Ticket purchaser information: name and email address', 'event-tickets' ); ?></li>
31
- <li><?php esc_html_e( 'Ticket purchaser billing address, which is collected through the use of WooCommerce, Easy Digital Downloads, or PayPal', 'event-tickets' ); ?></li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  </ol>
33
 
34
- <p><?php esc_html_e( 'Please note: The website owner can collect nearly any Attendee Information requested from ticket buyers by creating a custom registration form.', 'event-tickets' ); ?></p>
35
 
36
  <h3><?php esc_html_e( 'API Keys', 'event-tickets' ); ?></h3>
37
 
38
- <p class="privacy-policy-tutorial"><?php esc_html_e( 'Events Tickets suite offers the use of third-party API keys. The primary functions are to enhance the features we\'ve built in, some of which use Google Maps and PayPal. These API keys are not supplied by Modern Tribe.', 'event-tickets' ); ?></p>
39
 
40
  <p class="privacy-policy-tutorial"><strong><?php esc_html_e( 'Suggested text:', 'event-tickets' ); ?></strong></p>
41
 
@@ -47,7 +70,7 @@ if ( ! defined( 'ABSPATH' ) ) {
47
 
48
  <p class="privacy-policy-tutorial"><?php esc_html_e( 'All information (data) is retained in the local database indefinitely, unless otherwise deleted.', 'event-tickets' ); ?></p>
49
 
50
- <p class="privacy-policy-tutorial"><?php esc_html_e( 'Certain data may be exported or removed upon users request via the existing Exporter or Eraser. Please note, however, that several edge cases exist in which we are unable to perfect the gathering and export of all data for your end users. We suggest running a search in your local database, as well as within the WordPress Dashboard, in order to identify all data collected and stored for your specific user requests.', 'event-tickets' ); ?></p>
51
 
52
  <h3 class="privacy-policy-tutorial"><?php esc_html_e( 'Where We Send Your Data', 'event-tickets' ); ?></h3>
53
 
@@ -55,4 +78,4 @@ if ( ! defined( 'ABSPATH' ) ) {
55
 
56
  <p class="privacy-policy-tutorial"><?php esc_html_e( 'If you have extended our plugin(s) to send data to a third-party service such as Eventbrite, Google Maps, or PayPal, user information may be passed to these external services. These services may be located abroad.', 'event-tickets' ); ?></p>
57
 
58
- </div>
1
  <?php
2
  /**
3
  * Event Tickets Privacy
4
+ *
5
+ * @since 4.10.9 Use customizable ticket name functions.
6
  */
7
 
8
  // Don't load directly
24
 
25
  <p class="privacy-policy-tutorial"><?php esc_html_e( 'Through the usage of Event Tickets, Event Tickets Plus, and Community Tickets, information may be collected and stored within your website’s database.', 'event-tickets' ); ?></p>
26
  <p class="privacy-policy-tutorial"><strong><?php esc_html_e( 'Suggested text:', 'event-tickets' ); ?></strong></p>
27
+ <p><?php echo esc_html(
28
+ sprintf(
29
+ __( 'If you create, submit, import, save, or publish event %1$s information, as well as obtain %2$s or purchase %3$s to events, such information is retained in the local database:', 'event-tickets' ),
30
+ tribe_get_ticket_label_singular_lowercase( basename( __FILE__ ) ),
31
+ tribe_get_rsvp_label_plural( basename( __FILE__ ) ),
32
+ tribe_get_ticket_label_plural_lowercase( basename( __FILE__ ) )
33
+ )
34
+ ); ?></p>
35
 
36
  <ol>
37
+ <li><?php echo esc_html(
38
+ sprintf(
39
+ __( 'Attendees information (%1$s and %2$s): name and email address', 'event-tickets' ),
40
+ tribe_get_rsvp_label_plural( basename( __FILE__ ) ),
41
+ tribe_get_ticket_label_plural( basename( __FILE__ ) )
42
+ )
43
+ ); ?></li>
44
+ <li><?php echo esc_html(
45
+ sprintf(
46
+ __( '%1$s information (%2$s and %3$s): name, email address, and %4$s number/SKU (via check-in page)', 'event-tickets' ),
47
+ tribe_get_ticket_label_singular( basename( __FILE__ ) ),
48
+ tribe_get_rsvp_label_plural( basename( __FILE__ ) ),
49
+ tribe_get_ticket_label_plural( basename( __FILE__ ) ),
50
+ tribe_get_ticket_label_singular_lowercase( basename( __FILE__ ) )
51
+ )
52
+ ); ?></li>
53
+ <li><?php echo esc_html( sprintf( __( '%s purchaser information: name and email address', 'event-tickets' ), tribe_get_ticket_label_singular( basename( __FILE__ ) ) ) ); ?></li>
54
+ <li><?php echo esc_html( sprintf( __( '%s purchaser billing address, which is collected through the use of WooCommerce, Easy Digital Downloads, or PayPal', 'event-tickets' ), tribe_get_ticket_label_singular( basename( __FILE__ ) ) ) ); ?></li>
55
  </ol>
56
 
57
+ <p><?php echo esc_html( sprintf( __( 'Please note: The website owner can collect nearly any Attendee Information requested from %s buyers by creating a custom registration form.', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( basename( __FILE__ ) ) ) ); ?></p>
58
 
59
  <h3><?php esc_html_e( 'API Keys', 'event-tickets' ); ?></h3>
60
 
61
+ <p class="privacy-policy-tutorial"><?php esc_html_e( 'Event Tickets suite offers the use of third-party API keys. The primary functions are to enhance the features we\'ve built in, some of which use Google Maps and PayPal. These API keys are not supplied by Modern Tribe.', 'event-tickets' ); ?></p>
62
 
63
  <p class="privacy-policy-tutorial"><strong><?php esc_html_e( 'Suggested text:', 'event-tickets' ); ?></strong></p>
64
 
70
 
71
  <p class="privacy-policy-tutorial"><?php esc_html_e( 'All information (data) is retained in the local database indefinitely, unless otherwise deleted.', 'event-tickets' ); ?></p>
72
 
73
+ <p class="privacy-policy-tutorial"><?php esc_html_e( 'Certain data may be exported or removed upon users request via the existing Exporter or Eraser. Please note, however, that several "edge cases" exist in which we are unable to perfect the gathering and export of all data for your end users. We suggest running a search in your local database, as well as within the WordPress Dashboard, in order to identify all data collected and stored for your specific user requests.', 'event-tickets' ); ?></p>
74
 
75
  <h3 class="privacy-policy-tutorial"><?php esc_html_e( 'Where We Send Your Data', 'event-tickets' ); ?></h3>
76
 
78
 
79
  <p class="privacy-policy-tutorial"><?php esc_html_e( 'If you have extended our plugin(s) to send data to a third-party service such as Eventbrite, Google Maps, or PayPal, user information may be passed to these external services. These services may be located abroad.', 'event-tickets' ); ?></p>
80
 
81
+ </div>
src/admin-views/ticket-type-history.php CHANGED
@@ -7,7 +7,7 @@ $entry_list = $history->get_entries();
7
  if ( ! empty( $entry_list ) ) : ?>
8
  <div class="input_block ticket_advanced ticket_advanced_<?php echo esc_attr( $provider ); ?> history">
9
 
10
- <label for="ticket_history" class="ticket_form_label ticket_form_left"> <?php esc_html_e( 'Ticket history:', 'event-tickets' ) ?> </label>
11
 
12
  <div class="ticket_form_right">
13
  <a href="#" class="toggle-history">
7
  if ( ! empty( $entry_list ) ) : ?>
8
  <div class="input_block ticket_advanced ticket_advanced_<?php echo esc_attr( $provider ); ?> history">
9
 
10
+ <label for="ticket_history" class="ticket_form_label ticket_form_left"> <?php echo esc_html( sprintf( _x( '%s history:', 'ticket type history', 'event-tickets' ), tribe_get_ticket_label_singular( 'ticket_type_history' ) ) ); ?> </label>
11
 
12
  <div class="ticket_form_right">
13
  <a href="#" class="toggle-history">
src/admin-views/tribe-options-tickets.php CHANGED
@@ -5,14 +5,16 @@
5
  *
6
  * @since 4.7
7
  * @since 4.10.2 Update tooltip text for Confirmation email sender address and allow it to be saved as empty
8
- * @version 4.10.2
 
 
9
  */
10
- $post_types_to_ignore = apply_filters( 'tribe_tickets_settings_post_type_ignore_list', array(
11
  'attachment',
12
- ) );
13
 
14
- $all_post_type_objects = get_post_types( array( 'public' => true ), 'objects' );
15
- $all_post_types = array();
16
 
17
  foreach ( $all_post_type_objects as $post_type => $post_type_object ) {
18
  $should_ignore = false;
@@ -33,7 +35,7 @@ foreach ( $all_post_type_objects as $post_type => $post_type_object ) {
33
 
34
  $all_post_types = apply_filters( 'tribe_tickets_settings_post_types', $all_post_types );
35
 
36
- $options = get_option( Tribe__Main::OPTIONNAME, array() );
37
 
38
 
39
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
@@ -49,106 +51,111 @@ $is_tickets_plus_available = array_key_exists( $tickets_plus_plugin, $available_
49
  *
50
  * @param array $ticket_systems
51
  */
52
- $ticket_addons = apply_filters( 'tribe_tickets_settings_systems_supporting_login_requirements', array(
53
- 'event-tickets_rsvp' => __( 'Require users to log in before they RSVP', 'event-tickets' ),
54
- 'event-tickets_all' => __( 'Require users to log in before they purchase tickets', 'event-tickets' ),
55
- ) );
 
56
 
57
- $tickets_fields = array(
58
- 'tribe-form-content-start' => array(
59
  'type' => 'html',
60
  'html' => '<div class="tribe-settings-form-wrap">',
61
- ),
62
- 'tickets-title' => array(
63
  'type' => 'html',
64
- 'html' => '<h3>' . esc_html__( 'Ticket Settings', 'event-tickets' ) . '</h3>',
65
- ),
66
- 'ticket-enabled-post-types' => array(
67
  'type' => 'checkbox_list',
68
- 'label' => esc_html__( 'Post types that can have tickets', 'event-tickets' ),
69
- // only set the default to tribe_events if the ticket-endabled-post-types index has never been saved
70
  'default' => array_key_exists( 'ticket-enabled-post-types', $options ) ? false : 'tribe_events',
71
  'options' => $all_post_types,
72
  'can_be_empty' => true,
73
  'validation_type' => 'options_multi',
74
- ),
75
- );
76
-
77
 
78
  /**
79
  * If The Events Calendar is active let's add an option to control the position
80
  * of the ticket forms in the events view.
81
  */
82
  if ( class_exists( 'Tribe__Events__Main' ) ) {
83
- $ticket_form_location_options = array(
84
  'tribe_events_single_event_after_the_meta' => __( 'Below the event details [default]', 'event-tickets' ),
85
  'tribe_events_single_event_before_the_meta' => __( 'Above the event details', 'event-tickets' ),
86
  'tribe_events_single_event_after_the_content' => __( 'Below the event description', 'event-tickets' ),
87
  'tribe_events_single_event_before_the_content' => __( 'Above the event description', 'event-tickets' ),
88
- );
89
 
90
- $tickets_fields['ticket-rsvp-form-location'] = array(
91
  'type' => 'dropdown',
92
- 'label' => esc_html__( 'Location of RSVP form', 'event-tickets' ),
93
  'tooltip' => esc_html__( 'This setting only impacts events made with the classic editor.', 'event-tickets' ),
94
  'options' => $ticket_form_location_options,
95
  'validation_type' => 'options',
96
  'parent_option' => Tribe__Events__Main::OPTIONNAME,
97
  'default' => reset( $ticket_form_location_options ),
98
- );
99
 
100
- $tickets_fields['ticket-commerce-form-location'] = array(
101
  'type' => 'dropdown',
102
- 'label' => esc_html__( 'Location of Tickets form', 'event-tickets' ),
103
  'tooltip' => esc_html__( 'This setting only impacts events made with the classic editor.', 'event-tickets' ),
104
  'options' => $ticket_form_location_options,
105
  'validation_type' => 'options',
106
  'parent_option' => Tribe__Events__Main::OPTIONNAME,
107
  'default' => reset( $ticket_form_location_options ),
108
- );
109
 
110
- $tickets_fields['ticket-display-tickets-left-threshold'] = array(
111
  'type' => 'text',
112
- 'label' => esc_html__( 'Display # tickets left threshold', 'event-tickets' ),
113
- 'tooltip' => esc_html__( 'If this number is less than the number of tickets left for sale on your event, this will prevent the "# of tickets left" text from showing on your website. You can leave this blank if you would like to always show the text.', 'event-tickets' ),
114
  'validation_type' => 'int',
115
  'size' => 'small',
116
  'can_be_empty' => true,
117
  'parent_option' => Tribe__Events__Main::OPTIONNAME,
118
- );
119
  }
120
 
121
- $tickets_fields = array_merge( $tickets_fields, array(
122
- 'ticket-authentication-requirements-heading' => array(
123
  'type' => 'html',
124
  'html' => '<h3>' . __( 'Login Requirements', 'event-tickets' ) . '</h3>',
125
- ),
126
- 'ticket-authentication-requirements-advice' => array(
127
  'type' => 'html',
128
- 'html' => '<p>'
129
- . sprintf( __( 'You can require that users log into your site before they are able to RSVP (or buy tickets). Please review your WordPress Membership option (via the General Settings admin screen) before adjusting this setting.',
130
- 'event-tickets' ), '<a href="' . esc_url( get_admin_url( null, 'options-general.php' ) ) . '" target="_blank">', '</a>' )
131
- . '</p>',
132
- ),
133
- 'ticket-authentication-requirements' => array(
 
 
 
 
 
 
134
  'type' => 'checkbox_list',
135
  'options' => $ticket_addons,
136
  'validation_type' => 'options_multi',
137
  'can_be_empty' => true,
138
- ),
139
- )
140
  );
141
 
142
- $tickets_fields['ticket-paypal-heading'] = array(
143
  'type' => 'html',
144
  'html' => '<h3>' . __( 'Tribe Commerce', 'event-tickets' ) . '</h3>',
145
- );
146
-
147
 
148
  if ( ! $is_tickets_plus_available ) {
149
  $plus_link = sprintf(
150
  '<a href="http://m.tri.be/19zl" target="_blank">%s</a>',
151
- __( 'Events Tickets Plus', 'tribe-common' )
152
  );
153
 
154
  $plus_link_2 = sprintf(
@@ -157,36 +164,37 @@ if ( ! $is_tickets_plus_available ) {
157
  );
158
 
159
  $plus_message = sprintf(
160
- __( 'Tribe Commerce is a light implementation of a commerce gateway using PayPal and simplified stock handling. If you need more advanced features, take a look at %1$s. In addition to integrating with your favorite ecommerce provider, Event Tickets Plus includes options to collect custom information for attendees, check users in via QR codes, and share stock between tickets. %2$s', 'event-tickets' ),
161
  $plus_link,
 
162
  $plus_link_2
163
  );
164
 
165
- $tickets_fields['ticket-paypal-et-plus-header'] = array(
166
  'type' => 'html',
167
  'html' => '<p>' . $plus_message . '</p>',
168
- );
169
  }
170
 
171
  //@todo clicking this should hide/show the settings
172
- $tickets_fields['ticket-paypal-enable'] = array(
173
  'type' => 'checkbox_bool',
174
  'label' => esc_html__( 'Enable Tribe Commerce ', 'event-tickets' ),
175
  'tooltip' => esc_html__( 'Check this box if you wish to turn on Tribe Commerce functionality', 'event-tickets' ),
176
  'size' => 'medium',
177
  'default' => false,
178
  'validation_type' => 'boolean',
179
- 'attributes' => array( 'id' => 'ticket-paypal-enable-input' ),
180
- );
181
 
182
- $pages = get_pages( array( 'post_status' => 'publish', 'posts_per_page' => -1 ) );
183
 
184
  if ( ! empty( $pages ) ) {
185
  $pages = array_combine( wp_list_pluck( $pages, 'ID' ), wp_list_pluck( $pages, 'post_title' ) );
186
  }
187
 
188
  // add an empty entry at the start
189
- $pages = array( 0 => '' ) + $pages;
190
  $default_page = reset( $pages );
191
 
192
  $tpp_success_shortcode = 'tribe-tpp-success';
@@ -200,10 +208,7 @@ $paypal_setup_kb_url = class_exists( 'Tribe__Tickets_Plus__Main' )
200
  ? 'http://m.tri.be/19yk'
201
  : 'http://m.tri.be/19yj';
202
  $paypal_setup_kb_link = '<a href="' . esc_url( $paypal_setup_kb_url ) . '" target="_blank">' . esc_html__( 'these instructions', 'event-tickets' ) . '</a>';
203
- $paypal_setup_note = sprintf(
204
- esc_html__( 'In order to use Tribe Commerce to sell tickets, you must configure your PayPal account to communicate with your WordPress site. If you need help getting set up, follow %s', 'event-tickets' ),
205
- $paypal_setup_kb_link
206
- );
207
 
208
  $ipn_setup_line = sprintf(
209
  '<span class="clear">%s</span><span class="clear">%s</span>',
@@ -214,46 +219,46 @@ $ipn_setup_line = sprintf(
214
  )
215
  );
216
 
217
- $paypal_fields = array(
218
- 'ticket-paypal-configure' => array(
219
  'type' => 'wrapped_html',
220
  'label' => esc_html__( 'Configure PayPal:', 'event-tickets' ),
221
  'html' => '<p>' . $paypal_setup_note . '</p>',
222
  'validation_type' => 'html',
223
- ),
224
- 'ticket-paypal-email' => array(
225
  'type' => 'email',
226
  'label' => esc_html__( 'PayPal email to receive payments:', 'event-tickets' ),
227
  'size' => 'large',
228
  'default' => '',
229
  'validation_type' => 'email',
230
  'class' => 'indent light-bordered checkmark checkmark-right checkmark-hide ipn-required',
231
- ),
232
- 'ticket-paypal-ipn-enabled' => array(
233
  'type' => 'radio',
234
  'label' => esc_html__( "Have you enabled instant payment notifications (IPN) in your PayPal account's Selling Tools?", 'event-tickets' ),
235
- 'options' => array(
236
  'yes' => __( 'Yes', 'event-tickets' ),
237
  'no' => __( 'No', 'event-tic->valuekets' ),
238
- ),
239
  'size' => 'large',
240
  'default' => 'no',
241
  'validation_type' => 'options',
242
  'class' => 'indent light-bordered checkmark checkmark-right checkmark-hide ipn-required',
243
- ),
244
- 'ticket-paypal-ipn-address-set' => array(
245
  'type' => 'radio',
246
  'label' => $ipn_setup_line,
247
- 'options' => array(
248
  'yes' => __( 'Yes', 'event-tickets' ),
249
  'no' => __( 'No', 'event-tickets' ),
250
- ),
251
  'size' => 'large',
252
  'default' => 'no',
253
  'validation_type' => 'options',
254
  'class' => 'indent light-bordered checkmark checkmark-right checkmark-hide ipn-required',
255
- ),
256
- 'ticket-paypal-ipn-config-status' => array(
257
  'type' => 'wrapped_html',
258
  'html' => sprintf(
259
  '<strong>%1$s <span id="paypal-ipn-config-status" data-status="%2$s">%3$s</span></strong><p class="description"><i>%4$s</i></p>',
@@ -266,35 +271,35 @@ $paypal_fields = array(
266
  'default' => 'no',
267
  'validation_type' => 'html',
268
  'class' => 'indent light-bordered',
269
- ),
270
- 'ticket-paypal-sandbox' => array(
271
  'type' => 'checkbox_bool',
272
  'label' => esc_html__( 'PayPal Sandbox', 'event-tickets' ),
273
  'tooltip' => esc_html__( 'Enables PayPal Sandbox mode for testing.', 'event-tickets' ),
274
  'default' => false,
275
  'validation_type' => 'boolean',
276
- ),
277
- 'ticket-commerce-currency-code' => array(
278
  'type' => 'dropdown',
279
  'label' => esc_html__( 'Currency Code', 'event-tickets' ),
280
  'tooltip' => esc_html__( 'The currency that will be used for Tribe Commerce transactions.', 'event-tickets' ),
281
  'default' => 'USD',
282
  'validation_type' => 'options',
283
  'options' => $paypal_currency_code_options,
284
- ),
285
- 'ticket-paypal-stock-handling' => array(
286
  'type' => 'radio',
287
  'label' => esc_html__( 'Stock Handling', 'event-tickets' ),
288
- 'tooltip' => esc_html__( 'When a customer purchases a ticket, PayPal might flag the order as Pending. The order will be Complete once payment is confirmed by PayPal.', 'event-tickets' ),
289
  'default' => 'on-pending',
290
  'validation_type' => 'options',
291
- 'options' => array(
292
  'on-pending' => esc_html__( 'Decrease available ticket stock as soon as a Pending order is created.', 'event-tickets' ),
293
  'on-complete' => esc_html__( 'Only decrease available ticket stock if an order is confirmed as Completed by PayPal.', 'event-tickets' ),
294
- ),
295
  'tooltip_first' => true,
296
- ),
297
- 'ticket-paypal-success-page' => array(
298
  'type' => 'dropdown',
299
  'label' => esc_html__( 'Success page', 'event-tickets' ),
300
  'tooltip' => esc_html(
@@ -307,39 +312,39 @@ $paypal_fields = array(
307
  'validation_type' => 'options',
308
  'options' => $pages,
309
  'required' => true,
310
- ),
311
- 'ticket-paypal-confirmation-email-sender-email' => array(
312
  'type' => 'email',
313
  'label' => esc_html__( 'Confirmation email sender address', 'event-tickets' ),
314
- 'tooltip' => esc_html__( 'Email address PayPal tickets customers will receive confirmation from. Leave empty to use the default WordPress site email address.', 'event-tickets' ),
315
  'size' => 'medium',
316
  'default' => $current_user->user_email,
317
  'validation_type' => 'email',
318
  'can_be_empty' => true,
319
- ),
320
- 'ticket-paypal-confirmation-email-sender-name' => array(
321
  'type' => 'text',
322
  'label' => esc_html__( 'Confirmation email sender name', 'event-tickets' ),
323
- 'tooltip' => esc_html__( 'Sender name of the confirmation email sent to customers when confirming a ticket purchase.', 'event-tickets' ),
324
  'size' => 'medium',
325
  'default' => $current_user->user_nicename,
326
  'validation_callback' => 'is_string',
327
  'validation_type' => 'textarea',
328
- ),
329
- 'ticket-paypal-confirmation-email-subject' => array(
330
  'type' => 'text',
331
  'label' => esc_html__( 'Confirmation email subject', 'event-tickets' ),
332
- 'tooltip' => esc_html__( 'Subject of the confirmation email sent to customers when confirming a ticket purchase.', 'event-tickets' ),
333
  'size' => 'large',
334
- 'default' => esc_html__( 'You have tickets!', 'event-tickets' ),
335
  'validation_callback' => 'is_string',
336
  'validation_type' => 'textarea',
337
- ),
338
- );
339
 
340
  if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
341
  $ipn_fields = [
342
- 'ticket-paypal-notify-history' => array(
343
  'type' => 'wrapped_html',
344
  'html' => '<p>' .
345
  sprintf(
@@ -350,8 +355,8 @@ if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
350
  'size' => 'medium',
351
  'validation_type' => 'html',
352
  'class' => 'indent light-bordered',
353
- ),
354
- 'ticket-paypal-notify-url' => array(
355
  'type' => 'text',
356
  'label' => esc_html__( 'IPN Notify URL', 'event-tickets' ),
357
  'tooltip' => sprintf(
@@ -360,21 +365,21 @@ if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
360
  ),
361
  'default' => home_url(),
362
  'validation_type' => 'html',
363
- ),
364
  ];
365
 
366
  $paypal_fields = Tribe__Main::array_insert_after_key( 'ticket-paypal-ipn-config-status', $paypal_fields, $ipn_fields );
367
  }
368
 
369
  foreach ( $paypal_fields as $key => &$commerce_field ) {
370
- $field_classes = (array) Tribe__Utils__Array::get( $commerce_field, 'class', array() );
371
  array_push( $field_classes, 'tribe-dependent' );
372
  $commerce_field['class'] = implode( ' ', $field_classes );
373
- $existing_field_attributes = Tribe__Utils__Array::get( $commerce_field, 'fieldset_attributes', array() );
374
- $additional_attributes = array(
375
  'data-depends' => '#ticket-paypal-enable-input',
376
  'data-condition-is-checked' => '',
377
- );
378
  if ( 'checkbox_bool' === $commerce_field['type'] ) {
379
  $additional_attributes['data-dependency-dont-disable'] = '1';
380
  }
@@ -389,12 +394,13 @@ $tickets_fields = array_merge(
389
  $paypal_fields
390
  );
391
 
392
- $tickets_fields = array_merge( $tickets_fields, array(
393
- 'tribe-form-content-end' => array(
394
  'type' => 'html',
395
  'html' => '</div>',
396
- ),
397
- ) );
 
398
 
399
  /**
400
  * Filters the fields to be registered in the Events > Settings > Tickets tab.
@@ -408,7 +414,7 @@ $tickets_fields = array_merge( $tickets_fields, array(
408
  */
409
  $tickets_fields = apply_filters( 'tribe_tickets_settings_tab_fields', $tickets_fields );
410
 
411
- $tickets_tab = array(
412
  'priority' => 20,
413
  'fields' => $tickets_fields,
414
- );
5
  *
6
  * @since 4.7
7
  * @since 4.10.2 Update tooltip text for Confirmation email sender address and allow it to be saved as empty
8
+ * @since 4.10.9 Use function for text.
9
+ *
10
+ * @version TBD
11
  */
12
+ $post_types_to_ignore = apply_filters( 'tribe_tickets_settings_post_type_ignore_list', [
13
  'attachment',
14
+ ] );
15
 
16
+ $all_post_type_objects = get_post_types( [ 'public' => true ], 'objects' );
17
+ $all_post_types = [];
18
 
19
  foreach ( $all_post_type_objects as $post_type => $post_type_object ) {
20
  $should_ignore = false;
35
 
36
  $all_post_types = apply_filters( 'tribe_tickets_settings_post_types', $all_post_types );
37
 
38
+ $options = get_option( Tribe__Main::OPTIONNAME, [] );
39
 
40
 
41
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
51
  *
52
  * @param array $ticket_systems
53
  */
54
+ $ticket_addons = apply_filters( 'tribe_tickets_settings_systems_supporting_login_requirements', [
55
+ 'event-tickets_rsvp' => sprintf( _x( 'Require users to log in before they %s', 'login requirement setting', 'event-tickets' ), tribe_get_rsvp_label_singular( 'require_login_to_rsvp_setting' ) ),
56
+ 'event-tickets_all' => sprintf( _x( 'Require users to log in before they purchase %s', 'login requirement setting', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'require_login_to_purchase_setting' ) ),
57
+ ]
58
+ );
59
 
60
+ $tickets_fields = [
61
+ 'tribe-form-content-start' => [
62
  'type' => 'html',
63
  'html' => '<div class="tribe-settings-form-wrap">',
64
+ ],
65
+ 'tickets-title' => [
66
  'type' => 'html',
67
+ 'html' => '<h3>' . esc_html( sprintf( _x( '%s Settings', 'tickets fields settings title', 'event-tickets' ), tribe_get_ticket_label_singular( 'tickets_fields_settings_title' ) ) ) . '</h3>',
68
+ ],
69
+ 'ticket-enabled-post-types' => [
70
  'type' => 'checkbox_list',
71
+ 'label' => esc_html( sprintf( _x( 'Post types that can have %s', 'tickets fields settings enabled post types', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'tickets_fields_settings_enabled_post_types' ) ) ),
72
+ // only set the default to tribe_events if the ticket-enabled-post-types index has never been saved
73
  'default' => array_key_exists( 'ticket-enabled-post-types', $options ) ? false : 'tribe_events',
74
  'options' => $all_post_types,
75
  'can_be_empty' => true,
76
  'validation_type' => 'options_multi',
77
+ ],
78
+ ];
 
79
 
80
  /**
81
  * If The Events Calendar is active let's add an option to control the position
82
  * of the ticket forms in the events view.
83
  */
84
  if ( class_exists( 'Tribe__Events__Main' ) ) {
85
+ $ticket_form_location_options = [
86
  'tribe_events_single_event_after_the_meta' => __( 'Below the event details [default]', 'event-tickets' ),
87
  'tribe_events_single_event_before_the_meta' => __( 'Above the event details', 'event-tickets' ),
88
  'tribe_events_single_event_after_the_content' => __( 'Below the event description', 'event-tickets' ),
89
  'tribe_events_single_event_before_the_content' => __( 'Above the event description', 'event-tickets' ),
90
+ ];
91
 
92
+ $tickets_fields['ticket-rsvp-form-location'] = [
93
  'type' => 'dropdown',
94
+ 'label' => esc_html( sprintf( _x( 'Location of %s form', 'form location setting', 'event-tickets' ), tribe_get_rsvp_label_singular( 'form_location_setting' ) ) ),
95
  'tooltip' => esc_html__( 'This setting only impacts events made with the classic editor.', 'event-tickets' ),
96
  'options' => $ticket_form_location_options,
97
  'validation_type' => 'options',
98
  'parent_option' => Tribe__Events__Main::OPTIONNAME,
99
  'default' => reset( $ticket_form_location_options ),
100
+ ];
101
 
102
+ $tickets_fields['ticket-commerce-form-location'] = [
103
  'type' => 'dropdown',
104
+ 'label' => esc_html( sprintf( _x( 'Location of %s form', 'form location setting', 'event-tickets' ), tribe_get_ticket_label_plural( 'form_location_setting' ) ) ),
105
  'tooltip' => esc_html__( 'This setting only impacts events made with the classic editor.', 'event-tickets' ),
106
  'options' => $ticket_form_location_options,
107
  'validation_type' => 'options',
108
  'parent_option' => Tribe__Events__Main::OPTIONNAME,
109
  'default' => reset( $ticket_form_location_options ),
110
+ ];
111
 
112
+ $tickets_fields['ticket-display-tickets-left-threshold'] = [
113
  'type' => 'text',
114
+ 'label' => esc_html( sprintf( _x( 'Display # %s left threshold', 'tickets remaining threshold label', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'remaining_threshold_setting_label' ) ) ),
115
+ 'tooltip' => esc_html( sprintf( _x( 'If this number is less than the number of %1$s left for sale on your event, this will prevent the "# of %1$s left" text from showing on your website. You can leave this blank if you would like to always show the text.', 'tickets remaining threshold tooltip', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'remaining_threshold_setting_tooltip' ) ) ),
116
  'validation_type' => 'int',
117
  'size' => 'small',
118
  'can_be_empty' => true,
119
  'parent_option' => Tribe__Events__Main::OPTIONNAME,
120
+ ];
121
  }
122
 
123
+ $tickets_fields = array_merge( $tickets_fields, [
124
+ 'ticket-authentication-requirements-heading' => [
125
  'type' => 'html',
126
  'html' => '<h3>' . __( 'Login Requirements', 'event-tickets' ) . '</h3>',
127
+ ],
128
+ 'ticket-authentication-requirements-advice' => [
129
  'type' => 'html',
130
+ 'html' => '<p>' . sprintf(
131
+ _x( 'You can require that users log into your site before they are able to %1$s (or buy %2$s). Please review your WordPress Membership option (via the %3$sGeneral Settings admin screen%4$s) before adjusting this setting.',
132
+ 'ticket authentication requirements',
133
+ 'event-tickets'
134
+ ),
135
+ tribe_get_rsvp_label_singular( 'authentication_requirements_advice' ),
136
+ tribe_get_ticket_label_plural_lowercase( 'authentication_requirements_advice' ),
137
+ '<a href="' . esc_url( get_admin_url( null, 'options-general.php' ) ) . '" target="_blank">',
138
+ '</a>'
139
+ ) . '</p>',
140
+ ],
141
+ 'ticket-authentication-requirements' => [
142
  'type' => 'checkbox_list',
143
  'options' => $ticket_addons,
144
  'validation_type' => 'options_multi',
145
  'can_be_empty' => true,
146
+ ],
147
+ ]
148
  );
149
 
150
+ $tickets_fields['ticket-paypal-heading'] = [
151
  'type' => 'html',
152
  'html' => '<h3>' . __( 'Tribe Commerce', 'event-tickets' ) . '</h3>',
153
+ ];
 
154
 
155
  if ( ! $is_tickets_plus_available ) {
156
  $plus_link = sprintf(
157
  '<a href="http://m.tri.be/19zl" target="_blank">%s</a>',
158
+ __( 'Event Tickets Plus', 'tribe-common' )
159
  );
160
 
161
  $plus_link_2 = sprintf(
164
  );
165
 
166
  $plus_message = sprintf(
167
+ _x( 'Tribe Commerce is a light implementation of a commerce gateway using PayPal and simplified stock handling. If you need more advanced features, take a look at %1$s. In addition to integrating with your favorite ecommerce provider, Event Tickets Plus includes options to collect custom information for attendees, check users in via QR codes, and share stock between %2$s. %3$s', 'about Tribe Commerce', 'event-tickets' ),
168
  $plus_link,
169
+ tribe_get_ticket_label_singular_lowercase( 'tickets_fields_settings_about_tribe_commerce' ),
170
  $plus_link_2
171
  );
172
 
173
+ $tickets_fields['ticket-paypal-et-plus-header'] = [
174
  'type' => 'html',
175
  'html' => '<p>' . $plus_message . '</p>',
176
+ ];
177
  }
178
 
179
  //@todo clicking this should hide/show the settings
180
+ $tickets_fields['ticket-paypal-enable'] = [
181
  'type' => 'checkbox_bool',
182
  'label' => esc_html__( 'Enable Tribe Commerce ', 'event-tickets' ),
183
  'tooltip' => esc_html__( 'Check this box if you wish to turn on Tribe Commerce functionality', 'event-tickets' ),
184
  'size' => 'medium',
185
  'default' => false,
186
  'validation_type' => 'boolean',
187
+ 'attributes' => [ 'id' => 'ticket-paypal-enable-input' ],
188
+ ];
189
 
190
+ $pages = get_pages( [ 'post_status' => 'publish', 'posts_per_page' => -1 ] );
191
 
192
  if ( ! empty( $pages ) ) {
193
  $pages = array_combine( wp_list_pluck( $pages, 'ID' ), wp_list_pluck( $pages, 'post_title' ) );
194
  }
195
 
196
  // add an empty entry at the start
197
+ $pages = [ 0 => '' ] + $pages;
198
  $default_page = reset( $pages );
199
 
200
  $tpp_success_shortcode = 'tribe-tpp-success';
208
  ? 'http://m.tri.be/19yk'
209
  : 'http://m.tri.be/19yj';
210
  $paypal_setup_kb_link = '<a href="' . esc_url( $paypal_setup_kb_url ) . '" target="_blank">' . esc_html__( 'these instructions', 'event-tickets' ) . '</a>';
211
+ $paypal_setup_note = sprintf( esc_html_x( 'In order to use Tribe Commerce to sell %1$s, you must configure your PayPal account to communicate with your WordPress site. If you need help getting set up, follow %2$s', 'tickets fields settings PayPal setup', 'event-tickets' ), esc_html( tribe_get_ticket_label_singular_lowercase( 'tickets_fields_settings_paypal_setup' ) ), $paypal_setup_kb_link );
 
 
 
212
 
213
  $ipn_setup_line = sprintf(
214
  '<span class="clear">%s</span><span class="clear">%s</span>',
219
  )
220
  );
221
 
222
+ $paypal_fields = [
223
+ 'ticket-paypal-configure' => [
224
  'type' => 'wrapped_html',
225
  'label' => esc_html__( 'Configure PayPal:', 'event-tickets' ),
226
  'html' => '<p>' . $paypal_setup_note . '</p>',
227
  'validation_type' => 'html',
228
+ ],
229
+ 'ticket-paypal-email' => [
230
  'type' => 'email',
231
  'label' => esc_html__( 'PayPal email to receive payments:', 'event-tickets' ),
232
  'size' => 'large',
233
  'default' => '',
234
  'validation_type' => 'email',
235
  'class' => 'indent light-bordered checkmark checkmark-right checkmark-hide ipn-required',
236
+ ],
237
+ 'ticket-paypal-ipn-enabled' => [
238
  'type' => 'radio',
239
  'label' => esc_html__( "Have you enabled instant payment notifications (IPN) in your PayPal account's Selling Tools?", 'event-tickets' ),
240
+ 'options' => [
241
  'yes' => __( 'Yes', 'event-tickets' ),
242
  'no' => __( 'No', 'event-tic->valuekets' ),
243
+ ],
244
  'size' => 'large',
245
  'default' => 'no',
246
  'validation_type' => 'options',
247
  'class' => 'indent light-bordered checkmark checkmark-right checkmark-hide ipn-required',
248
+ ],
249
+ 'ticket-paypal-ipn-address-set' => [
250
  'type' => 'radio',
251
  'label' => $ipn_setup_line,
252
+ 'options' => [
253
  'yes' => __( 'Yes', 'event-tickets' ),
254
  'no' => __( 'No', 'event-tickets' ),
255
+ ],
256
  'size' => 'large',
257
  'default' => 'no',
258
  'validation_type' => 'options',
259
  'class' => 'indent light-bordered checkmark checkmark-right checkmark-hide ipn-required',
260
+ ],
261
+ 'ticket-paypal-ipn-config-status' => [
262
  'type' => 'wrapped_html',
263
  'html' => sprintf(
264
  '<strong>%1$s <span id="paypal-ipn-config-status" data-status="%2$s">%3$s</span></strong><p class="description"><i>%4$s</i></p>',
271
  'default' => 'no',
272
  'validation_type' => 'html',
273
  'class' => 'indent light-bordered',
274
+ ],
275
+ 'ticket-paypal-sandbox' => [
276
  'type' => 'checkbox_bool',
277
  'label' => esc_html__( 'PayPal Sandbox', 'event-tickets' ),
278
  'tooltip' => esc_html__( 'Enables PayPal Sandbox mode for testing.', 'event-tickets' ),
279
  'default' => false,
280
  'validation_type' => 'boolean',
281
+ ],
282
+ 'ticket-commerce-currency-code' => [
283
  'type' => 'dropdown',
284
  'label' => esc_html__( 'Currency Code', 'event-tickets' ),
285
  'tooltip' => esc_html__( 'The currency that will be used for Tribe Commerce transactions.', 'event-tickets' ),
286
  'default' => 'USD',
287
  'validation_type' => 'options',
288
  'options' => $paypal_currency_code_options,
289
+ ],
290
+ 'ticket-paypal-stock-handling' => [
291
  'type' => 'radio',
292
  'label' => esc_html__( 'Stock Handling', 'event-tickets' ),
293
+ 'tooltip' => esc_html( sprintf( _x( 'When a customer purchases a %s, PayPal might flag the order as Pending. The order will be Complete once payment is confirmed by PayPal.', 'tickets fields settings paypal stock handling', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'tickets_fields_settings_paypal_stock_handling' ) ) ),
294
  'default' => 'on-pending',
295
  'validation_type' => 'options',
296
+ 'options' => [
297
  'on-pending' => esc_html__( 'Decrease available ticket stock as soon as a Pending order is created.', 'event-tickets' ),
298
  'on-complete' => esc_html__( 'Only decrease available ticket stock if an order is confirmed as Completed by PayPal.', 'event-tickets' ),
299
+ ],
300
  'tooltip_first' => true,
301
+ ],
302
+ 'ticket-paypal-success-page' => [
303
  'type' => 'dropdown',
304
  'label' => esc_html__( 'Success page', 'event-tickets' ),
305
  'tooltip' => esc_html(
312
  'validation_type' => 'options',
313
  'options' => $pages,
314
  'required' => true,
315
+ ],
316
+ 'ticket-paypal-confirmation-email-sender-email' => [
317
  'type' => 'email',
318
  'label' => esc_html__( 'Confirmation email sender address', 'event-tickets' ),
319
+ 'tooltip' => esc_html( sprintf( _x( 'Email address PayPal %s customers will receive confirmation from. Leave empty to use the default WordPress site email address.', 'tickets fields settings paypal confirmation email', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'tickets_fields_settings_paypal_confirmation_email' ) ) ),
320
  'size' => 'medium',
321
  'default' => $current_user->user_email,
322
  'validation_type' => 'email',
323
  'can_be_empty' => true,
324
+ ],
325
+ 'ticket-paypal-confirmation-email-sender-name' => [
326
  'type' => 'text',
327
  'label' => esc_html__( 'Confirmation email sender name', 'event-tickets' ),
328
+ 'tooltip' => esc_html( sprintf( _x( 'Sender name of the confirmation email sent to customers when confirming a %s purchase.', 'tickets fields settings paypal email sender', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'tickets_fields_settings_paypal_email_sender' ) ) ),
329
  'size' => 'medium',
330
  'default' => $current_user->user_nicename,
331
  'validation_callback' => 'is_string',
332
  'validation_type' => 'textarea',
333
+ ],
334
+ 'ticket-paypal-confirmation-email-subject' => [
335
  'type' => 'text',
336
  'label' => esc_html__( 'Confirmation email subject', 'event-tickets' ),
337
+ 'tooltip' => esc_html( sprintf( _x( 'Subject of the confirmation email sent to customers when confirming a %s purchase.', 'tickets fields settings paypal email subject', 'event-tickets' ), tribe_get_ticket_label_singular_lowercase( 'tickets_fields_settings_paypal_email_subject' ) ) ),
338
  'size' => 'large',
339
+ 'default' => esc_html( sprintf( _x( 'You have %s!', 'tickets fields settings paypal email subject', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'tickets_fields_settings_paypal_email_subject' ) ) ),
340
  'validation_callback' => 'is_string',
341
  'validation_type' => 'textarea',
342
+ ],
343
+ ];
344
 
345
  if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
346
  $ipn_fields = [
347
+ 'ticket-paypal-notify-history' => [
348
  'type' => 'wrapped_html',
349
  'html' => '<p>' .
350
  sprintf(
355
  'size' => 'medium',
356
  'validation_type' => 'html',
357
  'class' => 'indent light-bordered',
358
+ ],
359
+ 'ticket-paypal-notify-url' => [
360
  'type' => 'text',
361
  'label' => esc_html__( 'IPN Notify URL', 'event-tickets' ),
362
  'tooltip' => sprintf(
365
  ),
366
  'default' => home_url(),
367
  'validation_type' => 'html',
368
+ ],
369
  ];
370
 
371
  $paypal_fields = Tribe__Main::array_insert_after_key( 'ticket-paypal-ipn-config-status', $paypal_fields, $ipn_fields );
372
  }
373
 
374
  foreach ( $paypal_fields as $key => &$commerce_field ) {
375
+ $field_classes = (array) Tribe__Utils__Array::get( $commerce_field, 'class', [] );
376
  array_push( $field_classes, 'tribe-dependent' );
377
  $commerce_field['class'] = implode( ' ', $field_classes );
378
+ $existing_field_attributes = Tribe__Utils__Array::get( $commerce_field, 'fieldset_attributes', [] );
379
+ $additional_attributes = [
380
  'data-depends' => '#ticket-paypal-enable-input',
381
  'data-condition-is-checked' => '',
382
+ ];
383
  if ( 'checkbox_bool' === $commerce_field['type'] ) {
384
  $additional_attributes['data-dependency-dont-disable'] = '1';
385
  }
394
  $paypal_fields
395
  );
396
 
397
+ $tickets_fields = array_merge( $tickets_fields, [
398
+ 'tribe-form-content-end' => [
399
  'type' => 'html',
400
  'html' => '</div>',
401
+ ],
402
+ ]
403
+ );
404
 
405
  /**
406
  * Filters the fields to be registered in the Events > Settings > Tickets tab.
414
  */
415
  $tickets_fields = apply_filters( 'tribe_tickets_settings_tab_fields', $tickets_fields );
416
 
417
+ $tickets_tab = [
418
  'priority' => 20,
419
  'fields' => $tickets_fields,
420
+ ];
src/functions/views/provider.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // @todo: Discuss with @be @bordoni how we should approach the duplication here.
3
+ /**
4
+ * Checks whether v2 of the Views is enabled or not.
5
+ *
6
+ * In order the function will check the `TRIBE_EVENTS_V2_VIEWS` constant,
7
+ * the `TRIBE_EVENTS_V2_VIEWS` environment variable.
8
+ *
9
+ * @since 4.10.9
10
+ *
11
+ * @return bool Whether v2 of the Views are enabled or not.
12
+ */
13
+ function tribe_events_tickets_views_v2_is_enabled() {
14
+ $enabled = false;
15
+
16
+ if ( defined( 'TRIBE_EVENTS_V2_VIEWS' ) ) {
17
+ $enabled = (bool) TRIBE_EVENTS_V2_VIEWS;
18
+ }
19
+
20
+ $env_var = getenv( 'TRIBE_EVENTS_V2_VIEWS' );
21
+ if ( false !== $env_var ) {
22
+ $enabled = (bool) $env_var;
23
+ }
24
+
25
+ /**
26
+ * Allows filtering of the Events Views V2 provider, doing so will render
27
+ * the methods and classes no longer load-able so keep that in mind.
28
+ *
29
+ * @since 4.10.9
30
+ *
31
+ * @param boolean $enabled Determining if V2 Views is enabled.
32
+ */
33
+ return apply_filters( 'tribe_events_tickets_views_v2_is_enabled', $enabled );
34
+ }
src/modules/blocks/rsvp/action-dashboard/template.js CHANGED
@@ -53,13 +53,14 @@ class RSVPActionDashboard extends PureComponent {
53
 
54
  getActions = () => {
55
  const {
 
56
  hasTicketsPlus,
57
  hasRecurrenceRules,
58
  isLoading,
59
  } = this.props;
60
 
61
  const actions = [ <SettingsActionButton /> ];
62
- if ( hasTicketsPlus ) {
63
  actions.push( <AttendeesActionButton /> );
64
  }
65
  if ( hasRecurrenceRules ) {
53
 
54
  getActions = () => {
55
  const {
56
+ created,
57
  hasTicketsPlus,
58
  hasRecurrenceRules,
59
  isLoading,
60
  } = this.props;
61
 
62
  const actions = [ <SettingsActionButton /> ];
63
+ if ( created ) {
64
  actions.push( <AttendeesActionButton /> );
65
  }
66
  if ( hasRecurrenceRules ) {
src/modules/blocks/tickets/action-dashboard/template.js CHANGED
@@ -52,9 +52,9 @@ class TicketsDashboardAction extends PureComponent {
52
 
53
  const actions = [ <SettingsActionButton /> ];
54
  if ( hasCreatedTickets ) {
55
- if ( hasTicketsPlus ) {
56
- actions.push( <AttendeesActionButton /> );
57
- }
58
  if ( hasOrdersPage ) {
59
  actions.push( <OrdersActionButton /> );
60
  }
52
 
53
  const actions = [ <SettingsActionButton /> ];
54
  if ( hasCreatedTickets ) {
55
+
56
+ actions.push( <AttendeesActionButton /> );
57
+
58
  if ( hasOrdersPage ) {
59
  actions.push( <OrdersActionButton /> );
60
  }
src/resources/js/app/blocks.js CHANGED
@@ -42714,13 +42714,14 @@ var template_RSVPActionDashboard = function (_PureComponent) {
42714
 
42715
  _this.getActions = function () {
42716
  var _this$props = _this.props,
 
42717
  hasTicketsPlus = _this$props.hasTicketsPlus,
42718
  hasRecurrenceRules = _this$props.hasRecurrenceRules,
42719
  isLoading = _this$props.isLoading;
42720
 
42721
 
42722
  var actions = [wp.element.createElement(settings_action_button_container, null)];
42723
- if (hasTicketsPlus) {
42724
  actions.push(wp.element.createElement(attendees_action_button_container, null));
42725
  }
42726
  if (hasRecurrenceRules) {
@@ -43891,9 +43892,9 @@ var template_TicketsDashboardAction = function (_PureComponent) {
43891
 
43892
  var actions = [wp.element.createElement(settings_container, null)];
43893
  if (hasCreatedTickets) {
43894
- if (hasTicketsPlus) {
43895
- actions.push(wp.element.createElement(attendees_container, null));
43896
- }
43897
  if (hasOrdersPage) {
43898
  actions.push(wp.element.createElement(orders_container, null));
43899
  }
42714
 
42715
  _this.getActions = function () {
42716
  var _this$props = _this.props,
42717
+ created = _this$props.created,
42718
  hasTicketsPlus = _this$props.hasTicketsPlus,
42719
  hasRecurrenceRules = _this$props.hasRecurrenceRules,
42720
  isLoading = _this$props.isLoading;
42721
 
42722
 
42723
  var actions = [wp.element.createElement(settings_action_button_container, null)];
42724
+ if (created) {
42725
  actions.push(wp.element.createElement(attendees_action_button_container, null));
42726
  }
42727
  if (hasRecurrenceRules) {
43892
 
43893
  var actions = [wp.element.createElement(settings_container, null)];
43894
  if (hasCreatedTickets) {
43895
+
43896
+ actions.push(wp.element.createElement(attendees_container, null));
43897
+
43898
  if (hasOrdersPage) {
43899
  actions.push(wp.element.createElement(orders_container, null));
43900
  }
src/resources/js/app/blocks.min.js CHANGED
@@ -17,4 +17,4 @@ var tribe="object"==typeof tribe?tribe:{};tribe.tickets=tribe.tickets||{},tribe.
17
  *
18
  * This source code is licensed under the MIT license found in the
19
  * LICENSE file in the root directory of this source tree.
20
- */Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&Symbol.for,a=r?Symbol.for("react.element"):60103,i=r?Symbol.for("react.portal"):60106,s=r?Symbol.for("react.fragment"):60107,o=r?Symbol.for("react.strict_mode"):60108,c=r?Symbol.for("react.profiler"):60114,u=r?Symbol.for("react.provider"):60109,d=r?Symbol.for("react.context"):60110,_=r?Symbol.for("react.async_mode"):60111,l=r?Symbol.for("react.concurrent_mode"):60111,m=r?Symbol.for("react.forward_ref"):60112,p=r?Symbol.for("react.suspense"):60113,f=r?Symbol.for("react.memo"):60115,T=r?Symbol.for("react.lazy"):60116;function h(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case a:switch(e=e.type){case _:case l:case s:case c:case o:case p:return e;default:switch(e=e&&e.$$typeof){case d:case m:case u:return e;default:return t}}case T:case f:case i:return t}}}function y(e){return h(e)===l}t.typeOf=h,t.AsyncMode=_,t.ConcurrentMode=l,t.ContextConsumer=d,t.ContextProvider=u,t.Element=a,t.ForwardRef=m,t.Fragment=s,t.Lazy=T,t.Memo=f,t.Portal=i,t.Profiler=c,t.StrictMode=o,t.Suspense=p,t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===s||e===l||e===c||e===o||e===p||"object"==typeof e&&null!==e&&(e.$$typeof===T||e.$$typeof===f||e.$$typeof===u||e.$$typeof===d||e.$$typeof===m)},t.isAsyncMode=function(e){return y(e)||h(e)===_},t.isConcurrentMode=y,t.isContextConsumer=function(e){return h(e)===d},t.isContextProvider=function(e){return h(e)===u},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===a},t.isForwardRef=function(e){return h(e)===m},t.isFragment=function(e){return h(e)===s},t.isLazy=function(e){return h(e)===T},t.isMemo=function(e){return h(e)===f},t.isPortal=function(e){return h(e)===i},t.isProfiler=function(e){return h(e)===c},t.isStrictMode=function(e){return h(e)===o},t.isSuspense=function(e){return h(e)===p}},function(e,t,n){},function(e,t,n){},function(e,t){var n,r,a=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function o(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(e){r=s}}();var c,u=[],d=!1,_=-1;function l(){d&&c&&(d=!1,c.length?u=c.concat(u):_=-1,u.length&&m())}function m(){if(!d){var e=o(l);d=!0;for(var t=u.length;t;){for(c=u,u=[];++_<t;)c&&c[_].run();_=-1,t=u.length}c=null,d=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===s||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function f(){}a.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new p(e,t)),1!==u.length||d||o(m)},p.prototype.run=function(){this.fun.apply(null,this.array)},a.title="browser",a.browser=!0,a.env={},a.argv=[],a.version="",a.versions={},a.on=f,a.addListener=f,a.once=f,a.off=f,a.removeListener=f,a.removeAllListeners=f,a.emit=f,a.prependListener=f,a.prependOnceListener=f,a.listeners=function(e){return[]},a.binding=function(e){throw new Error("process.binding is not supported")},a.cwd=function(){return"/"},a.chdir=function(e){throw new Error("process.chdir is not supported")},a.umask=function(){return 0}},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";n.r(t);var r=n(111),a=n(324),i=n(15),s=n(30);function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}var c=n(13),u=n(1),d=n.n(u),_=d.a.shape({trySubscribe:d.a.func.isRequired,tryUnsubscribe:d.a.func.isRequired,notifyNestedSubs:d.a.func.isRequired,isSubscribed:d.a.func.isRequired}),l=d.a.shape({subscribe:d.a.func.isRequired,dispatch:d.a.func.isRequired,getState:d.a.func.isRequired});!function(e){var t;void 0===e&&(e="store");var n=e+"Subscription",r=function(t){o(a,t);var r=a.prototype;function a(n,r){var a;return(a=t.call(this,n,r)||this)[e]=n.store,a}return r.getChildContext=function(){var t;return(t={})[e]=this[e],t[n]=null,t},r.render=function(){return c.Children.only(this.props.children)},a}(c.Component);r.propTypes={store:l.isRequired,children:d.a.element.isRequired},r.childContextTypes=((t={})[e]=l.isRequired,t[n]=_,t)}();function m(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(){return(p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function f(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}var T=n(489),h=n.n(T),y=n(325),b=n.n(y),M=n(488),S=null,E={notify:function(){}};var g=function(){function e(e,t,n){this.store=e,this.parentSub=t,this.onStateChange=n,this.unsubscribe=null,this.listeners=E}var t=e.prototype;return t.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},t.notifyNestedSubs=function(){this.listeners.notify()},t.isSubscribed=function(){return Boolean(this.unsubscribe)},t.trySubscribe=function(){var e,t;this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.onStateChange):this.store.subscribe(this.onStateChange),this.listeners=(e=[],t=[],{clear:function(){t=S,e=S},notify:function(){for(var n=e=t,r=0;r<n.length;r++)n[r]()},get:function(){return t},subscribe:function(n){var r=!0;return t===e&&(t=e.slice()),t.push(n),function(){r&&e!==S&&(r=!1,t===e&&(t=e.slice()),t.splice(t.indexOf(n),1))}}}))},t.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=E)},e}(),v=0,k={};function D(){}function L(e,t){var n,r;void 0===t&&(t={});var a=t,i=a.getDisplayName,s=void 0===i?function(e){return"ConnectAdvanced("+e+")"}:i,u=a.methodName,d=void 0===u?"connectAdvanced":u,T=a.renderCountProp,y=void 0===T?void 0:T,S=a.shouldHandleStateChanges,E=void 0===S||S,L=a.storeKey,O=void 0===L?"store":L,Y=a.withRef,w=void 0!==Y&&Y,j=f(a,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef"]),I=O+"Subscription",P=v++,C=((n={})[O]=l,n[I]=_,n),x=((r={})[I]=_,r);return function(t){b()(Object(M.isValidElementType)(t),"You must pass a component to the function returned by "+d+". Instead received "+JSON.stringify(t));var n=t.displayName||t.name||"Component",r=s(n),a=p({},j,{getDisplayName:s,methodName:d,renderCountProp:y,shouldHandleStateChanges:E,storeKey:O,withRef:w,displayName:r,wrappedComponentName:n,WrappedComponent:t}),i=function(n){function i(e,t){var a;return(a=n.call(this,e,t)||this).version=P,a.state={},a.renderCount=0,a.store=e[O]||t[O],a.propsMode=Boolean(e[O]),a.setWrappedInstance=a.setWrappedInstance.bind(m(m(a))),b()(a.store,'Could not find "'+O+'" in either the context or props of "'+r+'". Either wrap the root component in a <Provider>, or explicitly pass "'+O+'" as a prop to "'+r+'".'),a.initSelector(),a.initSubscription(),a}o(i,n);var s=i.prototype;return s.getChildContext=function(){var e,t=this.propsMode?null:this.subscription;return(e={})[I]=t||this.context[I],e},s.componentDidMount=function(){E&&(this.subscription.trySubscribe(),this.selector.run(this.props),this.selector.shouldComponentUpdate&&this.forceUpdate())},s.componentWillReceiveProps=function(e){this.selector.run(e)},s.shouldComponentUpdate=function(){return this.selector.shouldComponentUpdate},s.componentWillUnmount=function(){this.subscription&&this.subscription.tryUnsubscribe(),this.subscription=null,this.notifyNestedSubs=D,this.store=null,this.selector.run=D,this.selector.shouldComponentUpdate=!1},s.getWrappedInstance=function(){return b()(w,"To access the wrapped instance, you need to specify { withRef: true } in the options argument of the "+d+"() call."),this.wrappedInstance},s.setWrappedInstance=function(e){this.wrappedInstance=e},s.initSelector=function(){var t=e(this.store.dispatch,a);this.selector=function(e,t){var n={run:function(r){try{var a=e(t.getState(),r);(a!==n.props||n.error)&&(n.shouldComponentUpdate=!0,n.props=a,n.error=null)}catch(e){n.shouldComponentUpdate=!0,n.error=e}}};return n}(t,this.store),this.selector.run(this.props)},s.initSubscription=function(){if(E){var e=(this.propsMode?this.props:this.context)[I];this.subscription=new g(this.store,e,this.onStateChange.bind(this)),this.notifyNestedSubs=this.subscription.notifyNestedSubs.bind(this.subscription)}},s.onStateChange=function(){this.selector.run(this.props),this.selector.shouldComponentUpdate?(this.componentDidUpdate=this.notifyNestedSubsOnComponentDidUpdate,this.setState(k)):this.notifyNestedSubs()},s.notifyNestedSubsOnComponentDidUpdate=function(){this.componentDidUpdate=void 0,this.notifyNestedSubs()},s.isSubscribed=function(){return Boolean(this.subscription)&&this.subscription.isSubscribed()},s.addExtraProps=function(e){if(!(w||y||this.propsMode&&this.subscription))return e;var t=p({},e);return w&&(t.ref=this.setWrappedInstance),y&&(t[y]=this.renderCount++),this.propsMode&&this.subscription&&(t[I]=this.subscription),t},s.render=function(){var e=this.selector;if(e.shouldComponentUpdate=!1,e.error)throw e.error;return Object(c.createElement)(t,this.addExtraProps(e.props))},i}(c.Component);return i.WrappedComponent=t,i.displayName=r,i.childContextTypes=x,i.contextTypes=C,i.propTypes=C,h()(i,t)}}var O=Object.prototype.hasOwnProperty;function Y(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function w(e,t){if(Y(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var a=0;a<n.length;a++)if(!O.call(t,n[a])||!Y(e[n[a]],t[n[a]]))return!1;return!0}var j=n(16);function I(e){return function(t,n){var r=e(t,n);function a(){return r}return a.dependsOnOwnProps=!1,a}}function P(e){return null!==e.dependsOnOwnProps&&void 0!==e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function C(e,t){return function(t,n){n.displayName;var r=function(e,t){return r.dependsOnOwnProps?r.mapToProps(e,t):r.mapToProps(e)};return r.dependsOnOwnProps=!0,r.mapToProps=function(t,n){r.mapToProps=e,r.dependsOnOwnProps=P(e);var a=r(t,n);return"function"==typeof a&&(r.mapToProps=a,r.dependsOnOwnProps=P(a),a=r(t,n)),a},r}}var x=[function(e){return"function"==typeof e?C(e):void 0},function(e){return e?void 0:I(function(e){return{dispatch:e}})},function(e){return e&&"object"==typeof e?I(function(t){return Object(j.a)(e,t)}):void 0}];var R=[function(e){return"function"==typeof e?C(e):void 0},function(e){return e?void 0:I(function(){return{}})}];function A(e,t,n){return p({},n,e,t)}var H=[function(e){return"function"==typeof e?function(e){return function(t,n){n.displayName;var r,a=n.pure,i=n.areMergedPropsEqual,s=!1;return function(t,n,o){var c=e(t,n,o);return s?a&&i(c,r)||(r=c):(s=!0,r=c),r}}}(e):void 0},function(e){return e?void 0:function(){return A}}];function N(e,t,n,r){return function(a,i){return n(e(a,i),t(r,i),i)}}function V(e,t,n,r,a){var i,s,o,c,u,d=a.areStatesEqual,_=a.areOwnPropsEqual,l=a.areStatePropsEqual,m=!1;function p(a,m){var p,f,T=!_(m,s),h=!d(a,i);return i=a,s=m,T&&h?(o=e(i,s),t.dependsOnOwnProps&&(c=t(r,s)),u=n(o,c,s)):T?(e.dependsOnOwnProps&&(o=e(i,s)),t.dependsOnOwnProps&&(c=t(r,s)),u=n(o,c,s)):h?(p=e(i,s),f=!l(p,o),o=p,f&&(u=n(o,c,s)),u):u}return function(a,d){return m?p(a,d):(o=e(i=a,s=d),c=t(r,s),u=n(o,c,s),m=!0,u)}}function F(e,t){var n=t.initMapStateToProps,r=t.initMapDispatchToProps,a=t.initMergeProps,i=f(t,["initMapStateToProps","initMapDispatchToProps","initMergeProps"]),s=n(e,i),o=r(e,i),c=a(e,i);return(i.pure?V:N)(s,o,c,e,i)}function K(e,t,n){for(var r=t.length-1;r>=0;r--){var a=t[r](e);if(a)return a}return function(t,r){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+r.wrappedComponentName+".")}}function W(e,t){return e===t}var U,z,G,B,q,J,$,Z,Q,X,ee,te,ne=(G=(z=void 0===U?{}:U).connectHOC,B=void 0===G?L:G,q=z.mapStateToPropsFactories,J=void 0===q?R:q,$=z.mapDispatchToPropsFactories,Z=void 0===$?x:$,Q=z.mergePropsFactories,X=void 0===Q?H:Q,ee=z.selectorFactory,te=void 0===ee?F:ee,function(e,t,n,r){void 0===r&&(r={});var a=r,i=a.pure,s=void 0===i||i,o=a.areStatesEqual,c=void 0===o?W:o,u=a.areOwnPropsEqual,d=void 0===u?w:u,_=a.areStatePropsEqual,l=void 0===_?w:_,m=a.areMergedPropsEqual,T=void 0===m?w:m,h=f(a,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),y=K(e,J,"mapStateToProps"),b=K(t,Z,"mapDispatchToProps"),M=K(n,X,"mergeProps");return B(te,p({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:y,initMapDispatchToProps:b,initMergeProps:M,pure:s,areStatesEqual:c,areOwnPropsEqual:d,areStatePropsEqual:l,areMergedPropsEqual:T},h))}),re=n(4),ae=n.n(re),ie=n(20),se=n(35),oe=n.n(se),ce=n(36),ue=n.n(ce),de=n(33),_e=n.n(de),le=n(37),me=n.n(le),pe=n(22),fe=n.n(pe),Te=n(26),he=n(24),ye=n(109),be=n(86),Me=n.n(be),Se=n(21),Ee=(n(492),function(e){var t=e.goingCount,n=e.notGoingCount,r=e.showNotGoing;return wp.element.createElement("div",{className:"tribe-editor__rsvp-container-header__counters"},wp.element.createElement(Se.Counter,{className:"tribe-editor__rsvp-container-header__going-counter",count:t,label:Object(i.__)("Going","event-tickets")}),r&&wp.element.createElement(Se.Counter,{className:"tribe-editor__rsvp-container-header__not-going-counter",count:n,label:Object(i.__)("Not going","event-tickets")}))});Ee.propTypes={goingCount:d.a.number,notGoingCount:d.a.number,showNotGoing:d.a.bool};var ge=Ee,ve=n(12),ke=n(18),De=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{goingCount:ve.d.getRSVPGoingCount(e),notGoingCount:ve.d.getRSVPNotGoingCount(e),showNotGoing:ve.d.getRSVPNotGoingResponses(e)}}))(ge),Le=n(62),Oe=(n(493),wp.element.createElement(Se.Tooltip,{labelClassName:"tribe-editor__ticket__container-header-clipboard-tooltip",label:wp.element.createElement(Le.Clipboard,null),text:Object(i.__)("This ticket has Attendee Information Fields configured.","event-tickets")})),Ye=function(e){var t,n,r,a,s=e.description,o=e.hasAttendeeInfoFields,u=e.isCreated,d=e.isDisabled,_=e.isSelected,l=e.onTempDescriptionChange,m=e.onTempTitleChange,p=e.tempDescription,f=e.tempTitle,T=e.title,h=e.available;return wp.element.createElement(c.Fragment,null,wp.element.createElement("div",{className:"tribe-editor__rsvp-container-header__header-details"},function(e,t,n,r,a,s){return n?wp.element.createElement("div",{className:"tribe-editor__rsvp-container-header__title-input-wrapper"},wp.element.createElement(Me.a,{className:"tribe-editor__rsvp-container-header__title-input",value:a,placeholder:Object(i.__)("RSVP Title","event-tickets"),onChange:r,disabled:t}),e&&Oe):wp.element.createElement("h2",{className:"tribe-editor__rsvp-container-header__title"},s)}(o,d,_,m,f,T),function(e,t,n,r,a){return t?wp.element.createElement(Me.a,{className:"tribe-editor__rsvp-container-header__description-input",value:r,placeholder:Object(i.__)("description","event-tickets"),onChange:n,disabled:e}):a&&wp.element.createElement("span",{className:"tribe-editor__rsvp-container-header__description"},a)}(d,_,l,p,s),u&&(t=h,n=Object(i.__)("%d available","event-tickets"),r=n,a=wp.element.createElement("span",{className:"tribe-editor__rsvp-container-header__capacity-label-fallback"},Object(i.__)("Unlimited","event-tickets")),wp.element.createElement(he.NumericLabel,{className:"tribe-editor__rsvp-container-header__capacity-label",count:t,includeZero:!0,singular:n,plural:r,fallback:a}))),wp.element.createElement(De,null))};Ye.propTypes={available:d.a.number,description:d.a.string,hasAttendeeInfoFields:d.a.bool,isCreated:d.a.bool,isDisabled:d.a.bool.isRequired,isSelected:d.a.bool.isRequired,onTempDescriptionChange:d.a.func,onTempTitleChange:d.a.func,tempDescription:d.a.string,tempTitle:d.a.string,title:d.a.string};var we=Ye,je=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)},Ie=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{available:ve.d.getRSVPAvailable(e),description:ve.d.getRSVPDescription(e),hasAttendeeInfoFields:ve.d.getRSVPHasAttendeeInfoFields(e),isCreated:ve.d.getRSVPCreated(e),isDisabled:je(e),tempDescription:ve.d.getRSVPTempDescription(e),tempTitle:ve.d.getRSVPTempTitle(e),title:ve.d.getRSVPTitle(e)}},function(e){return{onTempDescriptionChange:function(t){e(ve.a.setRSVPTempDescription(t.target.value)),e(ve.a.setRSVPHasChanges(!0))},onTempTitleChange:function(t){e(ve.a.setRSVPTempTitle(t.target.value)),e(ve.a.setRSVPHasChanges(!0))}}}))(we),Pe=n(72),Ce=n.n(Pe),xe=(n(495),wp.element.createElement(Te.Dashicon,{className:"tribe-editor__rsvp-duration__duration-tooltip-label",icon:"info-outline"})),Re=function(e){var t=e.tooltipDisabled;return wp.element.createElement(he.LabelWithTooltip,{className:"tribe-editor__rsvp-duration__duration-label",label:Object(i.__)("Duration","event-tickets"),tooltipDisabled:t,tooltipLabel:xe,tooltipText:Object(i.__)("By default, sales will begin as soon as you save the ticket and end when the event begins","event-tickets")})},Ae=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)},He=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isDisabled:Ae(e)}}))(Re),Ne=n(9),Ve=n.n(Ne),Fe=n(38),Ke=n.n(Fe),We=(n(496),function(e){return wp.element.createElement(he.DateTimeRangePicker,Ve()({className:"tribe-editor__rsvp-duration__duration-picker"},e))});We.propTypes={fromDate:d.a.instanceOf(Date),fromDateInput:d.a.string,fromDateDisabled:d.a.bool,fromTime:d.a.string,fromTimeDisabled:d.a.bool,onFromDateChange:d.a.func,onFromTimePickerBlur:d.a.func,onFromTimePickerChange:d.a.func,onFromTimePickerClick:d.a.func,onToDateChange:d.a.func,onToTimePickerBlur:d.a.func,onToTimePickerChange:d.a.func,onToTimePickerClick:d.a.func,toDate:d.a.instanceOf(Date),toDateInput:d.a.string,toDateDisabled:d.a.bool,toTime:d.a.string,toTimeDisabled:d.a.bool};var Ue=We,ze=n(3),Ge=function(e){return function(t,n,r){var a={date:t,dayPickerInput:r};e(ve.a.handleRSVPStartDate(a))}},Be=function(e){return function(t){return e(ve.a.setRSVPTempStartTimeInput(t.target.value))}},qe=function(e){return function(t,n){e(ve.a.handleRSVPStartTime(t)),n()}},Je=function(e){return function(t,n,r){var a={date:t,dayPickerInput:r};e(ve.a.handleRSVPEndDate(a))}},$e=function(e){return function(t){return e(ve.a.setRSVPTempEndTimeInput(t.target.value))}},Ze=function(e){return function(t,n){e(ve.a.handleRSVPEndTime(t)),n()}},Qe=function(e,t){return function(n){var r=ze.moment.toMoment(n.target.value,ze.moment.TIME_FORMAT,!1);if(!r.isValid()){var a=ve.d.getRSVPStartTimeInput(e);r=ze.moment.toMoment(a,ze.moment.TIME_FORMAT,!1)}var i=ze.moment.totalSeconds(r);t(ve.a.handleRSVPStartTime(i))}},Xe=function(e,t){return function(n){var r=ze.moment.toMoment(n.target.value,ze.moment.TIME_FORMAT,!1);if(!r.isValid()){var a=ve.d.getRSVPEndTimeInput(e);r=ze.moment.toMoment(a,ze.moment.TIME_FORMAT,!1)}var i=ze.moment.totalSeconds(r);t(ve.a.handleRSVPEndTime(i))}},et=Object(j.c)(Object(ke.withStore)(),ne(function(e){var t=ze.globals.tecDateSettings().datepickerFormat?ze.moment.toFormat(ze.globals.tecDateSettings().datepickerFormat):"LL",n=ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e),r=ve.d.getRSVPTempStartDateMoment(e),a=ve.d.getRSVPTempEndDateMoment(e),i=r&&r.toDate(),s=a&&a.toDate();return{fromDate:i,fromDateInput:ve.d.getRSVPTempStartDateInput(e),fromDateDisabled:n,fromDateFormat:t,fromTime:ve.d.getRSVPTempStartTimeInput(e),fromTimeDisabled:n,toDate:s,toDateInput:ve.d.getRSVPTempEndDateInput(e),toDateDisabled:n,toDateFormat:t,toTime:ve.d.getRSVPTempEndTimeInput(e),toTimeDisabled:n,state:e}},function(e){return{onFromDateChange:Ge(e),onFromTimePickerChange:Be(e),onFromTimePickerClick:qe(e),onToDateChange:Je(e),onToTimePickerChange:$e(e),onToTimePickerClick:Ze(e),dispatch:e}},function(e,t,n){var r=e.state,a=Ke()(e,["state"]),i=t.dispatch,s=Ke()(t,["dispatch"]);return Ve()({},n,a,s,{onFromTimePickerBlur:Qe(r,i),onToTimePickerBlur:Xe(r,i)})}))(Ue),tt=(n(497),function(e){var t=e.hasDurationError;return wp.element.createElement("div",{className:"tribe-editor__rsvp-duration"},wp.element.createElement(He,null),wp.element.createElement(et,null),t&&wp.element.createElement("span",{className:"tribe-editor__rsvp-duration__error"},Object(i.__)("There is an error with the selected sales duration. Please fix the issue before saving.","event-tickets")))}),nt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{hasDurationError:ve.d.getRSVPHasDurationError(e)}}))(tt),rt=(n(498),function(e){var t=e.moveRSVP,n=e.removeRSVP,r=e.isDisabled;return wp.element.createElement("div",{className:"tribe-editor__rsvp__content-row--move-delete"},wp.element.createElement(Se.Button,{type:"button",onClick:t,disabled:r},Object(i.__)("Move RSVP","event-tickets")),wp.element.createElement(Se.Button,{type:"button",onClick:n,disabled:r},Object(i.__)("Remove RSVP","event-tickets")))});rt.propTypes={moveRSVP:d.a.func.isRequired,removeRSVP:d.a.func.isRequired,isDisabled:d.a.bool.isRequired};var at=rt,it=n(68),st=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{created:ve.d.getRSVPCreated(e),rsvpId:ve.d.getRSVPId(e),isDisabled:ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)}},function(e,t){return{moveRSVP:function(n){return e(Object(it.c)(n,t.clientId))},dispatch:e}},function(e,t,n){var r=t.dispatch,a=Ke()(t,["dispatch"]);return Ve()({},n,e,a,{removeRSVP:function(){window.confirm(Object(i.__)("Are you sure you want to delete this RSVP? It cannot be undone.","event-tickets"))&&(r(ve.a.deleteRSVP()),e.created&&e.rsvpId&&r(ve.e.deleteRSVP(e.rsvpId)),Object(ie.dispatch)("core/editor").removeBlocks([n.clientId]))},moveRSVP:function(){return t.moveRSVP(e.rsvpId)}})}))(at),ot=(n(499),function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.getContent=function(){return wp.element.createElement(c.Fragment,null,wp.element.createElement(nt,null),n.props.hasBeenCreated&&wp.element.createElement(st,{clientId:n.props.clientId}))},n.getHeader=function(){return wp.element.createElement(c.Fragment,null,wp.element.createElement(Te.Dashicon,{className:"tribe-editor__rsvp__advanced-options-header-icon",icon:"arrow-down"}),wp.element.createElement("span",{className:"tribe-editor__rsvp__advanced-options-header-text"},Object(i.__)("Advanced Options","event-tickets")))},n.getRows=function(){return[{accordionId:n.accordionId,content:n.getContent(),contentClassName:"tribe-editor__rsvp__advanced-options-content",header:n.getHeader(),headerAttrs:{disabled:n.props.isDisabled},headerClassName:"tribe-editor__rsvp__advanced-options-header"}]},n.accordionId=Ce()(),n}return me()(t,e),ue()(t,[{key:"render",value:function(){return wp.element.createElement(Se.Accordion,{className:"tribe-editor__rsvp__advanced-options",rows:this.getRows()})}}]),t}(c.PureComponent));ot.propTypes={isDisabled:d.a.bool.isRequired,hasBeenCreated:d.a.bool,clientId:d.a.string};var ct=ot,ut=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)},dt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isDisabled:ut(e),hasBeenCreated:ve.d.getRSVPCreated(e)}}))(ct),_t=(n(500),Object(i.__)("+ Add","event-tickets")),lt=Object(i.__)("Edit","event-tickets"),mt=function(e){var t=e.attendeeRegistrationURL,n=e.hasAttendeeInfoFields,r=e.isCreated,a=e.isDisabled,s=e.isModalOpen,o=e.onClick,c=e.onClose,u=e.onIframeLoad,d=n?lt:_t;return wp.element.createElement(he.AttendeesRegistration,{helperText:Object(i.__)("Save your RSVP to enable attendee information fields","event-tickets"),iframeURL:t,isDisabled:a,isModalOpen:s,label:Object(i.__)("Attendee Information","event-tickets"),linkText:d,modalTitle:Object(i.__)("Attendee Information","event-tickets"),onClick:o,onClose:c,onIframeLoad:u,showHelperText:!r})};mt.propTypes={attendeeRegistrationURL:d.a.string.isRequired,hasAttendeeInfoFields:d.a.bool.isRequired,isCreated:d.a.bool.isRequired,isDisabled:d.a.bool.isRequired,isModalOpen:d.a.bool.isRequired,onClick:d.a.func.isRequired,onClose:d.a.func.isRequired,onIframeLoad:d.a.func.isRequired};var pt=mt,ft=function(e){return ze.globals.adminUrl()+"edit.php?post_type="+Object(ie.select)("core/editor").getCurrentPostType()+"&page=attendee-registration&ticket_id="+ve.d.getRSVPId(e)+"&tribe_events_modal=1"},Tt=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)||!ve.d.getRSVPCreated(e)},ht=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{attendeeRegistrationURL:ft(e),hasAttendeeInfoFields:ve.d.getRSVPHasAttendeeInfoFields(e),isCreated:ve.d.getRSVPCreated(e),isDisabled:Tt(e),isModalOpen:ve.d.getRSVPIsModalOpen(e)}},function(e,t){return{onClick:function(){e(ve.a.setRSVPIsModalOpen(!0))},onClose:function(){e(ve.a.setRSVPIsModalOpen(!1))},onIframeLoad:function(t){var n=t.contentWindow,r=function(){t.nextSibling.classList.add("tribe-editor__attendee-registration__modal-overlay--show")},a=n.document.querySelector("#event-tickets-attendee-information");a.addEventListener("submit",r);var i=function(){n.removeEventListener("unload",s),a.removeEventListener("submit",r)},s=function(){i();var t=n.document.querySelector("#tribe-tickets-attendee-sortables"),r=Boolean(t.firstElementChild);e(ve.a.setRSVPHasAttendeeInfoFields(r)),e(ve.a.setRSVPIsModalOpen(!1))};n.addEventListener("unload",s);var o=n.document.querySelector(".tribe-intro > a");o&&o.setAttribute("target","_blank")}}}))(pt),yt=(n(501),function(){return wp.element.createElement("div",{className:"tribe-editor__rsvp-container-content__labels"},wp.element.createElement("span",{className:"tribe-editor__rsvp-container-content__capacity-label"},Object(i.__)("RSVP Capacity","event-tickets")),wp.element.createElement("span",{className:"tribe-editor__rsvp-container-content__capacity-label-help"},Object(i.__)("Leave blank if unlimited","event-tickets")))}),bt=function(e){var t=e.capacityId,n=e.isDisabled,r=e.notGoingId,a=e.onTempCapacityChange,s=e.onTempNotGoingResponsesChange,o=e.tempCapacity,c=e.tempNotGoingResponses;return wp.element.createElement("div",{className:"tribe-editor__rsvp-container-content__options"},wp.element.createElement(Se.NumberInput,{className:"tribe-editor__rsvp-container-content__capacity-input",disabled:n,id:t,min:0,onChange:a,value:o}),wp.element.createElement(Se.Checkbox,{checked:c,className:"tribe-editor__rsvp-container-content__not-going-responses",disabled:n,id:r,label:Object(i.__)('Enable "Not Going" responses',"event-tickets"),onChange:s}))};bt.propTypes={capacityId:d.a.string.isRequired,isDisabled:d.a.bool.isRequired,notGoingId:d.a.string.isRequired,onTempCapacityChange:d.a.func.isRequired,onTempNotGoingResponsesChange:d.a.func.isRequired,tempCapacity:d.a.string.isRequired,tempNotGoingResponses:d.a.bool.isRequired};var Mt=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.capacityId=Ce()(),n.notGoingId=Ce()(),n}return me()(t,e),ue()(t,[{key:"render",value:function(){var e=this.props,t=e.isDisabled,n=e.onTempCapacityChange,r=e.onTempNotGoingResponsesChange,a=e.tempCapacity,i=e.tempNotGoingResponses,s=e.clientId,o={capacityId:this.capacityId,isDisabled:t,notGoingId:this.notGoingId,onTempCapacityChange:n,onTempNotGoingResponsesChange:r,tempCapacity:a,tempNotGoingResponses:i};return wp.element.createElement(c.Fragment,null,wp.element.createElement(yt,null),wp.element.createElement(bt,o),wp.element.createElement(dt,{clientId:s}),this.props.hasTicketsPlus&&wp.element.createElement(ht,null))}}]),t}(c.PureComponent);Mt.propTypes={clientId:d.a.string,hasTicketsPlus:d.a.bool,onTempCapacityChange:d.a.func,onTempNotGoingResponsesChange:d.a.func,tempCapacity:d.a.string,tempNotGoingResponses:d.a.bool};var St=Mt,Et=n(31),gt=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)},vt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),isDisabled:gt(e),tempCapacity:ve.d.getRSVPTempCapacity(e),tempNotGoingResponses:ve.d.getRSVPTempNotGoingResponses(e)}},function(e){return{onTempCapacityChange:function(t){e(ve.a.setRSVPTempCapacity(t.target.value)),e(ve.a.setRSVPHasChanges(!0))},onTempNotGoingResponsesChange:function(t){e(ve.a.setRSVPTempNotGoingResponses(t.target.checked)),e(ve.a.setRSVPHasChanges(!0))}}}))(St),kt=(n(502),function(e){var t=e.isDisabled;return wp.element.createElement(c.Fragment,null,t?wp.element.createElement(s.RSVPInactive,null):wp.element.createElement(s.RSVPActive,null),wp.element.createElement("span",{className:"tribe-editor__rsvp-container__icon-label"},Object(i.__)("RSVP","event-tickets")))});kt.propTypes={isDisabled:d.a.bool.isRequired};var Dt=function(e){var t=e.isDisabled,n=e.isSelected,r=e.clientId;return wp.element.createElement(he.ContainerPanel,{className:fe()("tribe-editor__rsvp-container",{"tribe-editor__rsvp-container--disabled":t}),layout:ye.a.rsvp,icon:wp.element.createElement(kt,{isDisabled:t}),header:wp.element.createElement(Ie,{isSelected:n}),content:wp.element.createElement(vt,{clientId:r})})};Dt.propTypes={isDisabled:d.a.bool.isRequired,isSelected:d.a.bool.isRequired,clientId:d.a.string.isRequired};var Lt=Dt,Ot=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)},Yt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isDisabled:Ot(e)}}))(Lt),wt=function(e){var t=e.href,n=e.isDisabled;return wp.element.createElement(he.ActionButton,{asLink:!0,className:"tribe-editor__rsvp__action-button tribe-editor__rsvp__action-button--attendees",disabled:n,href:t,icon:wp.element.createElement(s.Attendees,null),target:"_blank"},Object(i.__)("Attendees","event-tickets"))};wt.propTypes={href:d.a.string,isDisabled:d.a.bool};var jt=wt,It=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{href:ze.globals.adminUrl()+"edit.php?post_type="+Object(ie.select)("core/editor").getCurrentPostType()+"&page=tickets-attendees&event_id="+Object(ie.select)("core/editor").getCurrentPostId(),isDisabled:ve.d.getRSVPIsLoading(e)}}))(jt),Pt=n(53),Ct=function(e){var t=e.isDisabled,n=e.onClick;return wp.element.createElement(he.ActionButton,{className:"tribe-editor__rsvp__action-button tribe-editor__rsvp__action-button--settings",disabled:t,icon:wp.element.createElement(Le.Cog,null),onClick:n},Object(i.__)("Settings","event-tickets"))};Ct.defaultProps={onClick:n.n(Pt).a},Ct.propTypes={isDisabled:d.a.bool,onClick:d.a.func};var xt=Ct,Rt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isDisabled:ve.d.getRSVPIsLoading(e)}},function(e){return{onClick:function(){return e(ve.a.setRSVPSettingsOpen(!0))}}}))(xt),At=(n(503),function(e){return e?Object(i.__)("Update RSVP","event-tickets"):Object(i.__)("Create RSVP","event-tickets")}),Ht=Object(i.__)("Cancel","event-tickets"),Nt=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.onWarningClick=function(){n.setState({isWarningOpen:!n.state.isWarningOpen})},n.getActions=function(){var e=n.props,t=e.hasTicketsPlus,r=e.hasRecurrenceRules,a=e.isLoading,s=[wp.element.createElement(Rt,null)];if(t&&s.push(wp.element.createElement(It,null)),r){var o=n.state.isWarningOpen?"no":"info-outline",c=n.state.isWarningOpen?Object(i.__)("Hide Warning","event-tickets"):Object(i.__)("Warning","event-tickets");s.push(wp.element.createElement(he.WarningButton,{icon:o,onClick:n.onWarningClick,isDisabled:a},c))}return s},n.state={isWarningOpen:!1},n}return me()(t,e),ue()(t,[{key:"render",value:function(){var e=this.props,t=e.created,n=e.isCancelDisabled,r=e.isConfirmDisabled,a=e.onCancelClick,s=e.onConfirmClick,o=e.showCancel;return wp.element.createElement(c.Fragment,null,wp.element.createElement(he.ActionDashboard,{className:"tribe-editor__rsvp__action-dashboard",actions:this.getActions(),cancelLabel:Ht,confirmLabel:At(t),isCancelDisabled:n,isConfirmDisabled:r,onCancelClick:a,onConfirmClick:s,showCancel:o}),this.state.isWarningOpen&&wp.element.createElement("div",{className:"tribe-editor__rsvp__warning"},Object(i.__)("This is a recurring event. If you add tickets they will only show up on the next upcoming event in the recurrence pattern. The same ticket form will appear across all events in the series. Please configure your events accordingly.","event-tickets")))}}]),t}(c.PureComponent);Nt.propTypes={created:d.a.bool.isRequired,hasTicketsPlus:d.a.bool.isRequired,hasRecurrenceRules:d.a.bool.isRequired,isCancelDisabled:d.a.bool.isRequired,isConfirmDisabled:d.a.bool.isRequired,isLoading:d.a.bool.isRequired,onCancelClick:d.a.func.isRequired,onConfirmClick:d.a.func.isRequired,showCancel:d.a.bool.isRequired};var Vt=Nt,Ft=function(e){var t=!1;try{t=window.tribe[Et.plugins.constants.EVENTS_PRO_PLUGIN].data.blocks.recurring.selectors.hasRules(e)}catch(e){}return t},Kt=function(e){return!ve.d.getRSVPTempTitle(e)||!ve.d.getRSVPHasChanges(e)||ve.d.getRSVPIsLoading(e)||ve.d.getRSVPHasDurationError(e)},Wt=function(e,t){return function(){t(ve.a.setRSVPTempDetails({tempTitle:ve.d.getRSVPTitle(e),tempDescription:ve.d.getRSVPDescription(e),tempCapacity:ve.d.getRSVPCapacity(e),tempNotGoingResponses:ve.d.getRSVPNotGoingResponses(e),tempStartDate:ve.d.getRSVPStartDate(e),tempStartDateInput:ve.d.getRSVPStartDateInput(e),tempStartDateMoment:ve.d.getRSVPStartDateMoment(e),tempEndDate:ve.d.getRSVPEndDate(e),tempEndDateInput:ve.d.getRSVPEndDateInput(e),tempEndDateMoment:ve.d.getRSVPEndDateMoment(e),tempStartTime:ve.d.getRSVPStartTime(e),tempEndTime:ve.d.getRSVPEndTime(e),tempStartTimeInput:ve.d.getRSVPStartTimeInput(e),tempEndTimeInput:ve.d.getRSVPEndTimeInput(e)})),t(ve.a.setRSVPHasChanges(!1)),Object(ie.dispatch)("core/editor").clearSelectedBlock()}},Ut=function(e,t){return function(){var n={title:ve.d.getRSVPTempTitle(e),description:ve.d.getRSVPTempDescription(e),capacity:ve.d.getRSVPTempCapacity(e),notGoingResponses:ve.d.getRSVPTempNotGoingResponses(e),startDate:ve.d.getRSVPTempStartDate(e),startDateInput:ve.d.getRSVPTempStartDateInput(e),startDateMoment:ve.d.getRSVPTempStartDateMoment(e),endDate:ve.d.getRSVPTempEndDate(e),endDateInput:ve.d.getRSVPTempEndDateInput(e),endDateMoment:ve.d.getRSVPTempEndDateMoment(e),startTime:ve.d.getRSVPTempStartTime(e),endTime:ve.d.getRSVPTempEndTime(e),startTimeInput:ve.d.getRSVPTempStartTimeInput(e),endTimeInput:ve.d.getRSVPTempEndTimeInput(e)};ve.d.getRSVPCreated(e)?t(ve.e.updateRSVP(Ve()({},n,{id:ve.d.getRSVPId(e)}))):t(ve.e.createRSVP(Ve()({},n,{postId:Object(ie.select)("core/editor").getCurrentPostId()})))}},zt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{created:ve.d.getRSVPCreated(e),hasRecurrenceRules:Ft(e),hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),isCancelDisabled:ve.d.getRSVPIsLoading(e),isConfirmDisabled:Kt(e),isLoading:ve.d.getRSVPIsLoading(e),showCancel:ve.d.getRSVPCreated(e),state:e}},null,function(e,t,n){var r=e.state,a=Ke()(e,["state"]),i=t.dispatch;return Ve()({},n,a,{onCancelClick:Wt(r,i),onConfirmClick:Ut(r,i)})}))(Vt),Gt=(n(504),function(e){var t=e.image,n=e.isSettingsLoading,r=e.onRemove,a=e.onSelect,s={title:Object(i.__)("Ticket Header Image","event-tickets"),description:Object(i.__)("Select an image from your Media Library to display on emailed tickets and RSVPs. For best results, use a .jpg, .png, or .gif at least 1160px wide.","event-tickets"),className:"tribe-editor__rsvp__image-upload",buttonDisabled:n,buttonLabel:Object(i.__)("Upload Image","event-tickets"),image:t,onRemove:r,onSelect:a,removeButtonDisabled:n};return wp.element.createElement(Se.ImageUpload,s)});Gt.propTypes={image:d.a.shape({alt:d.a.string.isRequired,id:d.a.number.isRequired,src:d.a.string.isRequired}).isRequired,isSettingsLoading:d.a.bool.isRequired,onRemove:d.a.func.isRequired,onSelect:d.a.func.isRequired};var Bt=Gt,qt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{image:{id:ve.d.getRSVPHeaderImageId(e),alt:ve.d.getRSVPHeaderImageAlt(e),src:ve.d.getRSVPHeaderImageSrc(e)},isSettingsLoading:ve.d.getRSVPIsSettingsLoading(e)}},function(e){return{onRemove:function(){return e(ve.a.deleteRSVPHeaderImage())},onSelect:function(t){return e(ve.a.updateRSVPHeaderImage(t))}}}))(Bt),Jt=(n(505),function(e){var t=e.isSettingsLoading,n=e.onCloseClick;return wp.element.createElement(he.SettingsDashboard,{className:fe()("tribe-editor__rsvp__settings-dashboard",{"tribe-editor__rsvp__settings-dashboard--loading":t}),closeButtonDisabled:t,content:wp.element.createElement(c.Fragment,null,wp.element.createElement(qt,null),t&&wp.element.createElement(Te.Spinner,null)),onCloseClick:n})});Jt.propTypes={isSettingsLoading:d.a.bool.isRequired,onCloseClick:d.a.func.isRequired};var $t=Jt,Zt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isSettingsLoading:ve.d.getRSVPIsSettingsLoading(e)}},function(e){return{onCloseClick:function(){return e(ve.a.setRSVPSettingsOpen(!1))}}}))($t),Qt=function(e){var t=e.isSelected,n=e.isSettingsOpen;return t?n?wp.element.createElement(Zt,null):wp.element.createElement(zt,null):null};Qt.propTypes={isSelected:d.a.bool.isRequired,isSettingsOpen:d.a.bool.isRequired};var Xt=Qt,en=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isSettingsOpen:ve.d.getRSVPSettingsOpen(e)}}))(Xt),tn=n(95),nn={className:"tribe-editor__rsvp__inactive-block",icon:wp.element.createElement(s.RSVPInactive,null),layout:tn.a.rsvp},rn=function(e){var t=e.created;return nn.title=t?Object(i.__)("RSVP is not currently active","event-tickets"):Object(i.__)("There is no RSVP configured","event-tickets"),nn.description=t?Object(i.__)("Edit this block to change RSVP settings.","event-tickets"):Object(i.__)("Edit this block to create an RSVP form.","event-tickets"),wp.element.createElement(tn.b,nn)};rn.propTypes={created:d.a.bool.isRequired};var an=rn,sn=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{created:ve.d.getRSVPCreated(e)}}))(an),on=n(28),cn=n(19),un=(n(506),function(e){function t(){var e,n,r,a;oe()(this,t);for(var s=arguments.length,o=Array(s),c=0;c<s;c++)o[c]=arguments[c];return n=r=_e()(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),r.renderPostTypes=function(){return r.props.isFetchingPosts?wp.element.createElement(Te.Spinner,null):r.props.postOptions.length?wp.element.createElement(Te.MenuGroup,null,wp.element.createElement(Te.MenuItemsChoice,{choices:r.props.postOptions,value:r.props.postValue,onSelect:r.props.onPostSelect})):wp.element.createElement(Te.Notice,{isDismissible:!1,status:"warning"},Object(i.__)("No posts found","event-tickets"))},a=n,_e()(r,a)}return me()(t,e),ue()(t,[{key:"componentDidMount",value:function(){this.props.initialize()}},{key:"render",value:function(){return wp.element.createElement(Te.Modal,{title:this.props.title,onRequestClose:this.props.hideModal,className:"tribe-editor__tickets__move-modal"},wp.element.createElement("label",{htmlFor:"post_type"},Object(i.__)("You can optionally focus on a specific post type:","event-tickets")),wp.element.createElement(Se.Select,{id:"post_type",options:this.props.postTypeOptions,onChange:this.props.onPostTypeChange,value:this.props.postTypeOptionValue}),wp.element.createElement("label",{htmlFor:"search"},Object(i.__)("You can also enter keywords to help find the target event by title or description","event-tickets")),wp.element.createElement(Se.Input,{id:"search",type:"text",onChange:this.props.onSearchChange,value:this.props.search}),wp.element.createElement("label",null,Object(i.__)("Select the post you wish to move the ticket type to:","event-tickets")),this.renderPostTypes(),wp.element.createElement("footer",null,wp.element.createElement(Te.Button,{isLarge:!0,isPrimary:!0,isBusy:this.props.isModalSubmitting,disabled:!this.props.hasSelectedPost||this.props.isFetchingPosts,onClick:this.props.onSubmit},Object(i.__)("Finish!","event-tickets"))))}}]),t}(c.PureComponent));un.propTypes={hasSelectedPost:d.a.bool.isRequired,hideModal:d.a.func.isRequired,initialize:d.a.func.isRequired,isFetchingPosts:d.a.bool.isRequired,isModalSubmitting:d.a.bool.isRequired,onPostSelect:d.a.func.isRequired,onPostTypeChange:d.a.func.isRequired,onSearchChange:d.a.func.isRequired,onSubmit:d.a.func.isRequired,postOptions:d.a.arrayOf(d.a.object),postTypeOptions:d.a.arrayOf(d.a.object),postTypeOptionValue:d.a.object,postValue:d.a.string.isRequired,search:d.a.string.isRequired,title:d.a.string.isRequired},un.defaultProps={title:Object(i.__)("Move Ticket Types","event-tickets")};var dn=un,_n=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{hasSelectedPost:on.i(e),isFetchingPosts:on.k(e),isFetchingPostTypes:on.j(e),isModalSubmitting:on.m(e),postOptions:on.f(e),postTypeOptions:on.h(e),postTypeOptionValue:on.g(e),postValue:on.d(e),search:on.c(e)}},function(e,t){return{initialize:function(){return e({type:cn.h})},hideModal:function(){return e(Object(it.a)())},onSearchChange:function(t){return e(Object(it.b)({search_terms:t.target.value}))},onPostTypeChange:function(t){return e(Object(it.b)({post_type:t.value}))},onPostSelect:function(t){return e(Object(it.b)({target_post_id:t}))},onSubmit:function(){return e({type:cn.o})}}}))(dn),ln=(n(507),function(e){function t(){return oe()(this,t),_e()(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return me()(t,e),ue()(t,[{key:"componentDidMount",value:function(){!this.props.rsvpId&&this.props.initializeRSVP()}},{key:"render",value:function(){var e=this.props,t=e.created,n=e.isInactive,r=e.isLoading,a=e.isSelected,i=e.clientId,s=e.isModalShowing;return wp.element.createElement(c.Fragment,null,!a&&(t&&n||!t)?wp.element.createElement(sn,null):wp.element.createElement("div",{className:fe()("tribe-editor__rsvp",{"tribe-editor__rsvp--selected":a},{"tribe-editor__rsvp--loading":r})},wp.element.createElement(Yt,{isSelected:a,clientId:i}),wp.element.createElement(en,{isSelected:a}),r&&wp.element.createElement(Te.Spinner,null)),s&&wp.element.createElement(_n,null))}}]),t}(c.PureComponent));ln.propTypes={clientId:d.a.string.isRequired,created:d.a.bool.isRequired,initializeRSVP:d.a.func.isRequired,isInactive:d.a.bool.isRequired,isLoading:d.a.bool.isRequired,isModalShowing:d.a.bool.isRequired,isSelected:d.a.bool.isRequired,rsvpId:d.a.number.isRequired};var mn=ln,pn=function(e){var t=ve.d.getRSVPStartDateMoment(e),n=ve.d.getRSVPStartTimeNoSeconds(e),r=ve.d.getRSVPEndDateMoment(e),a=ve.d.getRSVPEndTimeNoSeconds(e);if(!t||!r)return!1;var i=ze.moment.setTimeInSeconds(t.clone(),ze.time.toSeconds(n,ze.time.TIME_FORMAT_HH_MM)),s=ze.moment.setTimeInSeconds(r.clone(),ze.time.toSeconds(a,ze.time.TIME_FORMAT_HH_MM)),o=ae()();return!(o.isAfter(i)&&o.isBefore(s))},fn=function(e,t){return function(){var n=Object(ie.select)("core/editor").getCurrentPostId();e(ve.e.getRSVP(n));var r=t.attributes,a=void 0===r?{}:r;parseInt(a.headerImageId,10)&&e(ve.a.fetchRSVPHeaderImage(a.headerImageId)),a.goingCount&&e(ve.a.setRSVPGoingCount(parseInt(a.goingCount,10))),a.notGoingCount&&e(ve.a.setRSVPNotGoingCount(parseInt(a.notGoingCount,10)))}},Tn=Object(j.c)(Object(ke.withStore)(),ne(function(e){var t=ve.d.getRSVPId(e);return{created:ve.d.getRSVPCreated(e),isInactive:pn(e),isLoading:ve.d.getRSVPIsLoading(e),isModalShowing:Object(on.l)(e)&&Object(on.e)(e)===t,rsvpId:t}},function(e,t){return{initializeRSVP:function(){return e(ve.a.initializeRSVP())},onBlockRemoved:function(){return e(ve.a.deleteRSVP())},setInitialState:fn(e,t)}}),Object(ke.withSaveData)())(mn),hn=n(8),yn={id:"rsvp",title:Object(i.__)("RSVP","event-tickets"),description:Object(i.__)("Find out who is planning to attend!","event-tickets"),icon:wp.element.createElement(s.RSVP,null),category:"tribe-tickets",keywords:["event","events-gutenberg","tribe"],supports:{html:!1,multiple:!1},attributes:{goingCount:{type:"integer",source:"meta",meta:hn.g},notGoingCount:{type:"integer",source:"meta",meta:hn.j},headerImageId:{type:"integer",source:"meta",meta:hn.i}},edit:Tn,save:function(){return null}},bn=n(96),Mn=function(e){var t=e.onClick;return wp.element.createElement(he.ActionButton,{icon:wp.element.createElement(Le.Cog,null),onClick:t},Object(i.__)("Settings","event-tickets"))};Mn.propTypes={onClick:d.a.func};var Sn=Mn,En=n(6),gn=Object(j.c)(Object(ke.withStore)(),ne(null,function(e){return{onClick:function(){return e(En.a.openSettings())}}}))(Sn),vn=function(e){var t=e.href;return t?wp.element.createElement(he.ActionButton,{asLink:!0,href:t,icon:wp.element.createElement(s.Orders,null),target:"_blank"},Object(i.__)("Orders","event-tickets")):null};vn.propTypes={href:d.a.string.isRequired};var kn=vn,Dn=Object(j.c)(Object(ke.withStore)(),ne(function(e){var t=ze.globals.adminUrl(),n=Object(ie.select)("core/editor").getCurrentPostType(),r=Object(ie.select)("core/editor").getCurrentPostId(),a=En.f.getTicketsProvider(e),i=En.b.TICKET_ORDERS_PAGE_SLUG[a];return{href:i?t+"edit.php?post_type="+n+"&page="+i+"&event_id="+r:""}}))(kn),Ln=function(e){var t=e.href;return e.canCreateTickets&&wp.element.createElement(he.ActionButton,{asLink:!0,href:t,icon:wp.element.createElement(s.Attendees,null),target:"_blank"},Object(i.__)("Attendees","event-tickets"))};Ln.propTypes={href:d.a.string.isRequired,canCreateTickets:d.a.bool};var On=Ln,Yn=Object(j.c)(Object(ke.withStore)(),ne(function(){return{href:ze.globals.adminUrl()+"edit.php?post_type="+Object(ie.select)("core/editor").getCurrentPostType()+"&page=tickets-attendees&event_id="+Object(ie.select)("core/editor").getCurrentPostId(),canCreateTickets:En.f.canCreateTickets()}}))(On),wn=(n(508),Object(i.__)("Add Tickets","event-tickets")),jn=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.onWarningClick=function(){n.setState({isWarningOpen:!n.state.isWarningOpen})},n.getActions=function(){var e=n.props,t=e.hasCreatedTickets,r=e.hasOrdersPage,a=e.hasRecurrenceRules,s=e.hasTicketsPlus,o=[wp.element.createElement(gn,null)];if(t&&(s&&o.push(wp.element.createElement(Yn,null)),r&&o.push(wp.element.createElement(Dn,null))),a){var c=n.state.isWarningOpen?"no":"info-outline",u=n.state.isWarningOpen?Object(i.__)("Hide Warning","event-tickets"):Object(i.__)("Warning","event-tickets");o.push(wp.element.createElement(he.WarningButton,{icon:c,onClick:n.onWarningClick},u))}return o},n.state={isWarningOpen:!1},n}return me()(t,e),ue()(t,[{key:"render",value:function(){var e=this.props.onConfirmClick;return wp.element.createElement(c.Fragment,null,wp.element.createElement(he.ActionDashboard,{className:"tribe-editor__tickets__action-dashboard",actions:this.getActions(),confirmLabel:wn,onConfirmClick:e,showCancel:!1}),this.state.isWarningOpen&&wp.element.createElement("div",{className:"tribe-editor__tickets__warning"},Object(i.__)("This is a recurring event. If you add tickets they will only show up on the next upcoming event in the recurrence pattern. The same ticket form will appear across all events in the series. Please configure your events accordingly.","event-tickets")))}}]),t}(c.PureComponent);jn.propTypes={hasCreatedTickets:d.a.bool,hasOrdersPage:d.a.bool,hasRecurrenceRules:d.a.bool,hasTicketsPlus:d.a.bool,onConfirmClick:d.a.func};var In=jn,Pn=function(e){var t=!1;try{t=window.tribe[Et.plugins.constants.EVENTS_PRO_PLUGIN].data.blocks.recurring.selectors.hasRules(e)}catch(e){}return t},Cn=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){var n=En.f.getTicketsProvider(e),a=En.b.TICKET_ORDERS_PAGE_SLUG[n];return{hasCreatedTickets:En.f.hasCreatedTickets(e),hasOrdersPage:Boolean(a),hasRecurrenceRules:Pn(e),hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),onConfirmClick:function(){var e=t.clientId,n=Object(ie.select)("core/editor").getBlockCount,a=Object(ie.dispatch)("core/editor").insertBlock,i=n(e);a(Object(r.createBlock)("tribe/tickets-item",{}),i,e)}}}))(In),xn=(n(509),function(e){var t=e.label,n=e.items,r=e.right;return wp.element.createElement("div",{className:"tribe-editor__tickets__capacity-row"},wp.element.createElement("span",{className:"tribe-editor__tickets__capacity-row-left"},t&&wp.element.createElement("span",{className:"tribe-editor__tickets__capacity-row-label"},t),n&&wp.element.createElement("span",{className:"tribe-editor__tickets__capacity-row-items"},n)),wp.element.createElement("span",{className:"tribe-editor__tickets__capacity-row-right"},r))});xn.propTypes={label:d.a.string,items:d.a.string,right:d.a.node},xn.defaultProps={label:"",items:"",right:""};var Rn=xn,An=(n(510),function(e){var t=e.isSettingsLoading,n=e.independentCapacity,r=e.sharedCapacity,a=e.independentAndSharedCapacity,s=e.independentTicketItems,o=e.sharedTicketItems,c=e.onSharedCapacityChange,u=wp.element.createElement(Se.NumberInput,{onChange:c,value:r,disabled:t,min:0});return wp.element.createElement("div",{className:"tribe-editor__tickets__capacity-table"},wp.element.createElement("h3",{className:"tribe-editor__tickets__capacity-table-title"},Object(i.__)("Capacity","event-tickets")),wp.element.createElement(Rn,{label:Object(i.__)("Shared capacity","event-tickets"),items:o,right:u}),wp.element.createElement(Rn,{label:Object(i.__)("Independent capacity","event-tickets"),items:s,right:n}),wp.element.createElement(Rn,{label:Object(i.__)("Total Capacity","event-tickets"),right:a}))});An.propTypes={isSettingsLoading:d.a.bool,independentCapacity:d.a.number,sharedCapacity:d.a.string,independentAndSharedCapacity:d.a.number,independentTicketItems:d.a.string,sharedTicketItems:d.a.string,onSharedCapacityChange:d.a.func};var Hn=An,Nn=function(e){var t=e.filter(function(e){return e.details.title}).map(function(e){return e.details.title}).join(", ");return t?" ("+t+") ":""},Vn=function(e){var t=En.f.getIndependentTickets(e);return Nn(t)},Fn=function(e){var t=En.f.getSharedTickets(e);return Nn(t)},Kn=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isSettingsLoading:En.f.getTicketsIsSettingsLoading(e),independentCapacity:En.f.getIndependentTicketsCapacity(e),sharedCapacity:En.f.getTicketsSharedCapacity(e),independentAndSharedCapacity:En.f.getIndependentAndSharedTicketsCapacity(e),independentTicketItems:Vn(e),sharedTicketItems:Fn(e)}},function(e){return{onSharedCapacityChange:function(t){e(En.a.setTicketsSharedCapacity(t.target.value)),e(En.a.setTicketsTempSharedCapacity(t.target.value))}}}))(Hn),Wn=(n(511),function(e){var t=e.image,n=e.isSettingsLoading,r=e.onRemove,a=e.onSelect,s={title:Object(i.__)("Ticket Header Image","event-tickets"),description:Object(i.__)("Select an image from your Media Library to display on emailed tickets and RSVPs. For best results, use a .jpg, .png, or .gif at least 1160px wide.","event-tickets"),className:"tribe-editor__rsvp__image-upload",buttonDisabled:n,buttonLabel:Object(i.__)("Upload Image","event-tickets"),image:t,onRemove:r,onSelect:a,removeButtonDisabled:n};return wp.element.createElement(Se.ImageUpload,s)});Wn.propTypes={image:d.a.shape({alt:d.a.string.isRequired,id:d.a.number.isRequired,src:d.a.string.isRequired}).isRequired,isSettingsLoading:d.a.bool.isRequired,onRemove:d.a.func.isRequired,onSelect:d.a.func.isRequired};var Un=Wn,zn=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{image:{id:En.f.getTicketsHeaderImageId(e),alt:En.f.getTicketsHeaderImageAlt(e),src:En.f.getTicketsHeaderImageSrc(e)},isSettingsLoading:En.f.getTicketsIsSettingsLoading(e)}},function(e){return{onSelect:function(t){return e(En.a.updateTicketsHeaderImage(t))},onRemove:function(){return e(En.a.deleteTicketsHeaderImage())}}}))(Un),Gn=(n(512),function(e){var t=e.hasTicketsPlus,n=e.isSettingsLoading,r=e.onCloseClick;return wp.element.createElement(he.SettingsDashboard,{className:fe()("tribe-editor__tickets__settings-dashboard",{"tribe-editor__tickets__settings-dashboard--loading":n}),closeButtonDisabled:n,content:wp.element.createElement(c.Fragment,null,t&&wp.element.createElement(Kn,null),wp.element.createElement(zn,null),n&&wp.element.createElement(Te.Spinner,null)),onCloseClick:r})});Gn.propTypes={hasTicketsPlus:d.a.bool,isSettingsLoading:d.a.bool.isRequired,onCloseClick:d.a.func.isRequired};var Bn=Gn,qn=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),isSettingsLoading:En.f.getTicketsIsSettingsLoading(e)}},function(e){return{onCloseClick:function(){return e(En.a.closeSettings())}}}))(Bn),Jn=function(e){var t=e.clientId,n=e.isSelected,r=e.isSettingsOpen;return n?r?wp.element.createElement(qn,null):wp.element.createElement(Cn,{clientId:t}):null};Jn.propTypes={clientId:d.a.string,isSelected:d.a.bool,isSettingsOpen:d.a.bool};var $n=Jn,Zn=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isSettingsOpen:En.f.getTicketsIsSettingsOpen(e)}}))($n),Qn=(n(513),function(e){var t=e.available,n=e.total,r=wp.element.createElement(he.NumericLabel,{className:fe()("tribe-editor__tickets__availability-label","tribe-editor__tickets__availability-label--available","tribe-tooltip"),count:t,singular:Object(i.__)("%d ticket available","event-tickets"),plural:Object(i.__)("%d tickets available","event-tickets")}),a=wp.element.createElement(he.NumericLabel,{className:fe()("tribe-editor__tickets__availability-label","tribe-editor__tickets__availability-label--total"),count:n,singular:Object(i.__)("%d total ticket","event-tickets"),plural:Object(i.__)("%d total tickets","event-tickets")});return wp.element.createElement("div",{className:"tribe-editor__tickets__availability"},wp.element.createElement("span",{class:"tribe-tooltip",title:Object(i.__)("Ticket availability is based on the lowest number of inventory, stock, and capacity.","event-tickets")},r,wp.element.createElement("span",{className:"dashicons dashicons-info"})),a)});Qn.propTypes={available:d.a.number,total:d.a.number};var Xn=Qn,er=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{total:En.f.getIndependentAndSharedTicketsCapacity(e),available:En.f.getIndependentAndSharedTicketsAvailable(e)}}))(Xn),tr=(n(514),function(){return wp.element.createElement("div",{className:"tribe-editor__tickets__overlay"})}),nr=function(e){var t=e.allTicketsPast,n=e.canCreateTickets,r=e.hasCreatedTickets,a=e.hasOverlay,o=e.showAvailability,c=e.showInactiveBlock,u={title:"",description:""};n?r?u.title=t?Object(i.__)("Tickets are no longer available","event-tickets"):Object(i.__)("Tickets are not yet available","event-tickets"):(u.title=Object(i.__)("There are no tickets yet","event-tickets"),u.description=Object(i.__)("Edit this block to create your first ticket.","event-tickets")):(u.title=Object(i.__)("There is no ecommerce available","event-tickets"),u.description=Object(i.__)("To create tickets, you'll need to enable an ecommerce solution.","event-tickets"));var d=fe()({"tribe-editor__tickets__inner-blocks":!0,"tribe-editor__tickets__inner-blocks--show":!c});return wp.element.createElement("div",{className:"tribe-editor__tickets__container"},wp.element.createElement("div",{className:d},wp.element.createElement(bn.InnerBlocks,{allowedBlocks:["tribe/tickets-item"]})),c&&wp.element.createElement(he.InactiveBlock,{layout:tn.a.ticket,title:u.title,description:u.description,icon:wp.element.createElement(s.TicketInactive,null)}),o&&wp.element.createElement(er,null),a&&wp.element.createElement(tr,null))};nr.propTypes={allTicketsPast:d.a.bool,canCreateTickets:d.a.bool,hasCreatedTickets:d.a.bool,hasOverlay:d.a.bool,showAvailability:d.a.bool,showInactiveBlock:d.a.bool};var rr=nr,ar=function(e,t){return En.f.getTicketsIsSettingsOpen(e)||!En.f.hasATicketSelected(e)&&!t.isSelected},ir=function(e,t){var n=t.isSelected&&!En.f.hasTickets(e),r=!(t.isSelected||En.f.hasATicketSelected(e)||En.f.hasCreatedTickets(e)&&En.f.hasTicketOnSale(e));return n||r},sr=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{allTicketsPast:En.f.allTicketsPast(e),canCreateTickets:En.f.canCreateTickets(),hasCreatedTickets:En.f.hasCreatedTickets(e),hasOverlay:ar(e,t),showAvailability:t.isSelected&&En.f.hasCreatedTickets(e),showInactiveBlock:ir(e,t)}}))(rr),or=(n(515),Object(i.__)("It looks like you have multiple ecommerce plugins active. We recommend running only one at a time. However, if you need to run multiple, please select which one to use to sell tickets for this event. ","event-tickets")),cr=Object(i.__)("Note: adjusting this setting will only impact new tickets. Existing tickets will not change. We highly recommend that all tickets for one event use the same ecommerce plugin","event-tickets"),ur=function(e){var t=e.provider,n=e.onProviderChange,r=Ke()(e,["provider","onProviderChange"]);return wp.element.createElement("div",{className:"tribe-editor__tickets-control-container"},wp.element.createElement("input",Ve()({className:"tribe-editor__tickets-control__input tribe-editor__tickets-control__input--radio",type:"radio",id:t.class,name:t.class,onChange:n},r)),wp.element.createElement("label",{className:"tribe-editor__tickets-control__label",htmlFor:t.class},t.name))},dr=function(e){var t=e.hasMultipleProviders,n=e.providers,r=e.selectedProvider,a=e.onProviderChange;return t&&wp.element.createElement(bn.InspectorControls,{key:"inspector"},wp.element.createElement(Te.PanelBody,{title:Object(i.__)("Tickets Settings","event-tickets")},wp.element.createElement(Te.PanelRow,null,wp.element.createElement("fieldset",{className:"tribe-editor__tickets-controls-provider"},wp.element.createElement("legend",null,Object(i.__)("Sell tickets using","event-tickets")),wp.element.createElement("p",null,or,wp.element.createElement("em",null,cr)),n.map(function(e,t){return wp.element.createElement(ur,{key:"provider-option-"+(t+1),provider:e,onProviderChange:a,checked:r===e.class})})))))};dr.propTypes={hasMultipleProviders:d.a.bool,providers:d.a.arrayOf(d.a.shape({name:d.a.string,class:d.a.string})),selectedProvider:d.a.string,onProviderChange:d.a.func};var _r=dr,lr=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{hasMultipleProviders:En.f.hasMultipleTicketProviders(),providers:En.f.getTicketProviders(),selectedProvider:En.f.getTicketsProvider(e)}},function(e){return{onProviderChange:function(t){return e(En.a.setTicketsProvider(t.target.name))}}}),Object(ke.withSaveData)())(_r),mr=(n(516),function(e){function t(){return oe()(this,t),_e()(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return me()(t,e),ue()(t,[{key:"componentDidMount",value:function(){this.props.onBlockUpdate(this.props.isSelected)}},{key:"componentDidUpdate",value:function(e){e.isSelected!==this.props.isSelected&&this.props.onBlockUpdate(this.props.isSelected)}},{key:"render",value:function(){var e=this.props,t=e.isSelected,n=e.canCreateTickets,r=e.isSettingsOpen,a=e.clientId;return wp.element.createElement("div",{className:fe()("tribe-editor__tickets",{"tribe-editor__tickets--selected":t},{"tribe-editor__tickets--settings-open":r})},wp.element.createElement(sr,{isSelected:t}),n&&wp.element.createElement(Zn,{isSelected:t,clientId:a}),wp.element.createElement(lr,null))}}]),t}(c.PureComponent));mr.propTypes={canCreateTickets:d.a.bool,clientId:d.a.string,hasProviders:d.a.bool,header:d.a.string,isSelected:d.a.bool,isSettingsOpen:d.a.bool,onBlockUpdate:d.a.func};var pr=mr,fr=Object(j.c)(Object(ke.withStore)(),ne(function(e){var t=En.f.getTicketsHeaderImageId(e);return{header:t?""+t:"",hasProviders:En.f.hasTicketProviders(),isSettingsOpen:En.f.getTicketsIsSettingsOpen(e),provider:En.f.getTicketsProvider(e),sharedCapacity:En.f.getTicketsSharedCapacity(e),canCreateTickets:En.f.canCreateTickets()}},function(e){return{setInitialState:function(t){e(En.a.setTicketsInitialState(t))},onBlockUpdate:function(t){e(En.a.setTicketsIsSelected(t))},onBlockRemoved:function(){e(En.a.resetTicketsBlock())}}}),Object(ke.withSaveData)())(pr),Tr={id:"tickets",title:Object(i.__)("Tickets","event-tickets"),description:Object(i.__)("Sell tickets and register attendees.","event-tickets"),icon:wp.element.createElement(s.Tickets,null),category:"tribe-tickets",keywords:["event","events-gutenberg","tribe"],supports:{html:!1,multiple:!1},attributes:{sharedCapacity:{type:"string",source:"meta",meta:hn.d},header:{type:"string",source:"meta",meta:hn.i},provider:{type:"string",source:"meta",meta:hn.e},tickets:{type:"array",source:"meta",meta:hn.c}},edit:fr,save:function(){return wp.element.createElement("div",null,wp.element.createElement(bn.InnerBlocks.Content,null))}},hr=(n(517),n(518),function(e){var t=e.hasAttendeeInfoFields,n=e.isDisabled,r=e.isSelected,a=e.onTempTitleChange,s=e.tempTitle,o=e.title,u=t&&wp.element.createElement(Se.Tooltip,{labelClassName:"tribe-editor__ticket__container-header-clipboard-tooltip",label:wp.element.createElement(Le.Clipboard,null),text:Object(i.__)("This ticket has Attendee Information Fields configured.","event-tickets")});return wp.element.createElement("div",{className:"tribe-editor__ticket__container-header-title"},r?wp.element.createElement(c.Fragment,null,wp.element.createElement(Me.a,{className:"tribe-editor__ticket__container-header-title-input",value:s,placeholder:Object(i.__)("Ticket Type *","event-tickets"),onChange:a,disabled:n,required:!0}),u):wp.element.createElement(c.Fragment,null,wp.element.createElement("h3",{className:"tribe-editor__ticket__container-header-title-label"},o),u,wp.element.createElement(Le.Pencil,null)))});hr.propTypes={hasAttendeeInfoFields:d.a.bool,isDisabled:d.a.bool,isSelected:d.a.bool,onTempTitleChange:d.a.func,tempTitle:d.a.string,title:d.a.string};var yr=hr,br=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{hasAttendeeInfoFields:En.f.getTicketHasAttendeeInfoFields(e,t),isDisabled:En.f.isTicketDisabled(e,t),tempTitle:En.f.getTicketTempTitle(e,t),title:En.f.getTicketTitle(e,t)}},function(e,t){return{onTempTitleChange:function(n){var r=t.clientId;e(En.a.setTicketTempTitle(r,n.target.value)),e(En.a.setTicketHasChanges(r,!0))}}}))(yr),Mr=(n(519),function(e){var t=e.isDisabled,n=e.isSelected,r=e.onTempDescriptionChange,a=e.tempDescription,s=e.description;return n?wp.element.createElement(Me.a,{className:"tribe-editor__ticket__container-header-description-input",value:a,placeholder:Object(i.__)("Description","event-tickets"),onChange:r,disabled:t}):wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-description"},s)});Mr.propTypes={isDisabled:d.a.bool,isSelected:d.a.bool,onTempDescriptionChange:d.a.func,tempDescription:d.a.string,description:d.a.string};var Sr=Mr,Er=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),tempDescription:En.f.getTicketTempDescription(e,t),description:En.f.getTicketDescription(e,t)}},function(e,t){return{onTempDescriptionChange:function(n){var r=t.clientId;e(En.a.setTicketTempDescription(r,n.target.value)),e(En.a.setTicketHasChanges(r,!0))}}}))(Sr),gr=n(23),vr=(n(520),function(e){var t=e.isDisabled,n=e.currencyPosition,r=e.currencySymbol,a=e.onTempPriceChange,s=e.tempPrice;return wp.element.createElement(c.Fragment,null,n===gr.PREFIX&&wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-price-currency"},r),wp.element.createElement(Me.a,{className:"tribe-editor__ticket__container-header-price-input",value:s,placeholder:Object(i.__)("0","event-tickets"),onChange:a,disabled:t,type:"number",min:"0"}),n===gr.SUFFIX&&wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-price-currency"},r))});vr.propTypes={isDisabled:d.a.bool,currencyPosition:d.a.oneOf(gr.PRICE_POSITIONS),currencySymbol:d.a.string,onTempPriceChange:d.a.func,tempPrice:d.a.string};var kr=function(e){var t=e.currencyPosition,n=e.currencySymbol,r=e.price;return wp.element.createElement(c.Fragment,null,t===gr.PREFIX&&wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-price-currency"},n),wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-price-value"},r),t===gr.SUFFIX&&wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-price-currency"},n))};kr.propTypes={currencyPosition:d.a.oneOf(gr.PRICE_POSITIONS),currencySymbol:d.a.string,price:d.a.string};var Dr=function(e){var t=e.isDisabled,n=e.isSelected,r=e.currencyPosition,a=e.currencySymbol,i=e.onTempPriceChange,s=e.tempPrice,o=e.price;return wp.element.createElement("div",{className:"tribe-editor__ticket__container-header-price"},n?wp.element.createElement(vr,{currencyPosition:r,currencySymbol:a,onTempPriceChange:i,tempPrice:s,isDisabled:t}):wp.element.createElement(kr,{currencyPosition:r,currencySymbol:a,price:o}))};Dr.propTypes={isDisabled:d.a.bool,isSelected:d.a.bool,currencyPosition:d.a.oneOf(gr.PRICE_POSITIONS),currencySymbol:d.a.string,onTempPriceChange:d.a.func,tempPrice:d.a.string,price:d.a.string};var Lr=Dr,Or=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),currencyPosition:En.f.getTicketCurrencyPosition(e,t),currencySymbol:En.f.getTicketCurrencySymbol(e,t),tempPrice:En.f.getTicketTempPrice(e,t),price:En.f.getTicketPrice(e,t)||"0"}},function(e,t){return{onTempPriceChange:function(n){var r=t.clientId;e(En.a.setTicketTempPrice(r,n.target.value)),e(En.a.setTicketHasChanges(r,!0))}}}))(Lr),Yr=(n(521),function(e){var t=e.children,n=e.className,r=e.value,a=e.total;if(0===r||0===a)return null;var i=void 0;try{i=ze.number.percentage(r,a)}catch(e){i=0}var s={width:Math.max(0,Math.min(100,i)).toFixed(2)+"%"};return wp.element.createElement("span",{className:fe()("tribe-editor__quantity-bar__bar",n),style:s},t)});Yr.propTypes={children:d.a.node,className:d.a.oneOfType([d.a.string,d.a.arrayOf(d.a.string),ze.TribePropTypes.nullType]),value:d.a.number,total:d.a.number},Yr.defaultProps={className:null,value:0,total:0};var wr=Yr,jr=function(e){var t=e.sharedSold,n=e.sold,r=e.capacity,a=e.total,s=e.isDisabled;return wp.element.createElement("div",{className:"tribe-editor__quantity-bar"},!s&&wp.element.createElement(c.Fragment,null,wp.element.createElement(wr,{className:"tribe-editor__quantity-bar__bar--shared-sold",value:t,total:a}),wp.element.createElement(wr,{className:"tribe-editor__quantity-bar__bar--sold",value:n,total:a}),!!r&&!(r===a)&&wp.element.createElement(wr,{className:"tribe-editor__quantity-bar__bar--capacity",value:r,total:a},wp.element.createElement("span",{className:"tribe-editor__quantity-bar__bar-label"},Object(i.__)("cap","event-tickets")))))};jr.propTypes={sharedSold:d.a.number,capacity:d.a.number,sold:d.a.number,total:d.a.number,isDisabled:d.a.bool},jr.defaultProps={sharedSold:0,capacity:0,sold:0,total:0,isDisabled:!1};var Ir=jr,Pr=(n(522),function(e){var t=e.isDisabled,n=e.isSelected,r=e.isShared,a=e.isUnlimited,s=e.sold,o=e.capacity,c=e.sharedSold,u=e.sharedCapacity,d=r?u:o;return!n&&wp.element.createElement("div",{className:"tribe-editor__ticket__container-header-quantity tribe-tooltip",title:Object(i.__)("This pertains to Orders that have been marked Completed.","event-tickets")},wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-quantity-label"},a?Object(i.sprintf)(Object(i.__)("%d sold","event-tickets"),s):Object(i.sprintf)(Object(i.__)("%d of %d sold","event-tickets"),s,d),wp.element.createElement("span",{class:"dashicons dashicons-info"})),a?wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-quantity-unlimited"},Object(i.__)("unlimited","event-tickets")):wp.element.createElement(Ir,{sold:s,sharedSold:c,capacity:o,total:d,isDisabled:t}))});Pr.propTypes={isDisabled:d.a.bool,isSelected:d.a.bool,isShared:d.a.bool,isUnlimited:d.a.bool,sold:d.a.number,capacity:d.a.number,sharedSold:d.a.number,sharedCapacity:d.a.number},Pr.defaultProps={sold:0,sharedCapacity:0,capacity:0};var Cr=Pr,xr=function(e,t){return t?En.f.getSharedTicketsSold(e):0},Rr=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){var n=En.f.isSharedTicket(e,t);return{isDisabled:En.f.isTicketDisabled(e,t),isShared:n,isUnlimited:En.f.isUnlimitedTicket(e,t),sold:En.f.getTicketSold(e,t),capacity:En.f.getTicketCapacityInt(e,t),sharedSold:xr(e,n),sharedCapacity:En.f.getTicketsSharedCapacityInt(e)}}))(Cr),Ar=(n(523),function(e){var t=e.clientId,n=e.isSelected;return wp.element.createElement(c.Fragment,null,wp.element.createElement("div",{className:"tribe-editor__ticket__container-header-details"},wp.element.createElement(br,{clientId:t,isSelected:n}),wp.element.createElement(Er,{clientId:t,isSelected:n})),wp.element.createElement(Or,{clientId:t,isSelected:n}),wp.element.createElement(Rr,{clientId:t,isSelected:n}))});Ar.propTypes={clientId:d.a.string,isSelected:d.a.bool};var Hr=Ar,Nr=n(87),Vr=n.n(Nr),Fr=n(112),Kr=n.n(Fr),Wr=n(490),Ur=(n(524),En.b.INDEPENDENT),zr=En.b.SHARED,Gr=En.b.TICKET_TYPES,Br=En.d.CAPACITY_TYPE_OPTIONS,qr=function(e){var t=e.className,n=e.id,r=e.label,a=Ke()(e,["className","id","label"]);return wp.element.createElement(Se.LabeledItem,{className:fe()("tribe-editor__labeled-number-input",t),forId:n,label:r,isLabel:!0},wp.element.createElement(Se.NumberInput,a))};qr.propTypes={className:d.a.string,id:d.a.string,label:d.a.string};var Jr=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.getInputs=function(){var e=n.props,t=e.isDisabled,r=e.sharedCapacity,a=e.tempCapacityType,s=e.tempCapacity,o=e.tempSharedCapacity,c=e.onTempCapacityChange,u=e.onTempSharedCapacityChange,d=[];if(a===Gr[zr]&&""===r&&d.push(wp.element.createElement(qr,{key:"shared-capacity",className:fe()("tribe-editor__ticket__capacity-input-row","tribe-editor__ticket__capacity-input-row--shared-capacity"),id:n.ids.sharedCapacity,label:Object(i.__)("Set shared capacity:","event-tickets"),value:o,onChange:u,disabled:t,min:0,required:!0})),Kr()([Gr[zr],Gr[Ur]],a)){var _={},l=a===Gr[zr]?zr:Ur;if(a===Gr[zr]&&(r||o)){var m=r||o;_.max=parseInt(m,10)||0}a===Gr[Ur]&&(_.required=!0),_.label=a===Gr[zr]?Object(i.__)("(optional) Limit sales of this ticket to:","event-tickets"):Object(i.__)("Number of tickets available","event-tickets"),d.push(wp.element.createElement(qr,Ve()({key:"capacity",className:fe()("tribe-editor__ticket__capacity-input-row","tribe-editor__ticket__capacity-input-row--capacity","tribe-editor__ticket__capacity-input-row--capacity-"+l),id:n.ids.capacity,value:s,onChange:c,disabled:t,min:0},_)))}return d},n.getCapacityForm=function(){var e=n.props,t=e.isDisabled,r=e.tempCapacityTypeOption,a=e.onTempCapacityTypeChange;return wp.element.createElement(c.Fragment,null,wp.element.createElement(Se.Select,{id:n.ids.select,className:"tribe-editor__ticket__capacity-type-select",backspaceRemovesValue:!1,value:r,isSearchable:!1,isDisabled:t,options:Br,onChange:a}),n.getInputs())},n.getNoPlusCapacityForm=function(){var e=n.props,t=e.isDisabled,r=e.tempCapacity,a=e.onTempCapacityNoPlusChange;return wp.element.createElement(c.Fragment,null,wp.element.createElement(Se.NumberInput,{className:"tribe-editor__ticket__capacity-input",id:n.ids.capacity,value:r,onChange:a,disabled:t,min:0}),wp.element.createElement("span",{className:"tribe-editor__ticket__capacity-input-helper-text"},Object(i.__)("Leave blank for unlimited","event-tickets")))},n.ids={select:Ce()("capacity-type-"),capacity:Ce()("capacity-"),sharedCapacity:Ce()("shared-capacity-")},n}return me()(t,e),ue()(t,[{key:"render",value:function(){var e=this.props.hasTicketsPlus;return wp.element.createElement("div",{className:fe()("tribe-editor__ticket__capacity","tribe-editor__ticket__content-row","tribe-editor__ticket__content-row--capacity")},wp.element.createElement(he.LabelWithTooltip,{className:"tribe-editor__ticket__capacity-label-with-tooltip",forId:e?this.ids.select:this.ids.capacity,isLabel:!0,label:Object(i.__)("Ticket Capacity","event-tickets"),tooltipText:Object(i.__)("Ticket capacity will only be used by attendees buying this ticket type","event-tickets"),tooltipLabel:wp.element.createElement(Te.Dashicon,{className:"tribe-editor__ticket__tooltip-label",icon:"info-outline"})}),wp.element.createElement("div",{className:"tribe-editor__ticket__capacity-form"},e?this.getCapacityForm():this.getNoPlusCapacityForm()))}}]),t}(c.PureComponent);Jr.propTypes={hasTicketsPlus:d.a.bool,isDisabled:d.a.bool,sharedCapacity:d.a.string,tempCapacity:d.a.string,tempCapacityType:d.a.string,tempCapacityTypeOption:Wr.ReactSelectOption,tempSharedCapacity:d.a.string,onTempCapacityChange:d.a.func,onTempCapacityNoPlusChange:d.a.func,onTempCapacityTypeChange:d.a.func,onTempSharedCapacityChange:d.a.func};var $r=Jr,Zr=En.b.UNLIMITED,Qr=En.b.INDEPENDENT,Xr=En.b.TICKET_TYPES,ea=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),isDisabled:En.f.isTicketDisabled(e,t),sharedCapacity:En.f.getTicketsSharedCapacity(e),tempCapacity:En.f.getTicketTempCapacity(e,t),tempCapacityType:En.f.getTicketTempCapacityType(e,t),tempCapacityTypeOption:En.f.getTicketTempCapacityTypeOption(e,t),tempSharedCapacity:En.f.getTicketsTempSharedCapacity(e)}},function(e,t){var n=t.clientId;return{onTempCapacityChange:function(t){e(En.a.setTicketTempCapacity(n,t.target.value)),e(En.a.setTicketHasChanges(n,!0))},onTempCapacityNoPlusChange:function(t){var r=t.target.value,a=""===Vr()(r)?Xr[Zr]:Xr[Qr];e(En.a.setTicketTempCapacityType(n,a)),e(En.a.setTicketTempCapacity(n,r)),e(En.a.setTicketHasChanges(n,!0))},onTempCapacityTypeChange:function(t){e(En.a.setTicketTempCapacityType(n,t.value)),e(En.a.setTicketHasChanges(n,!0))},onTempSharedCapacityChange:function(t){e(En.a.setTicketsTempSharedCapacity(t.target.value)),e(En.a.setTicketHasChanges(n,!0))}}}))($r),ta=(n(525),n(526),function(e){var t=e.hasDurationError,n=Ke()(e,["hasDurationError"]);return wp.element.createElement("div",{className:fe()("tribe-editor__ticket__duration","tribe-editor__ticket__content-row","tribe-editor__ticket__content-row--duration")},wp.element.createElement(he.LabelWithTooltip,{className:"tribe-editor__ticket__duration-label-with-tooltip",label:Object(i.__)("Sale Duration","event-tickets"),tooltipText:Object(i.__)("If you do not set a start sale date, tickets will be available immediately.","event-tickets"),tooltipLabel:wp.element.createElement(Te.Dashicon,{className:"tribe-editor__ticket__tooltip-label",icon:"info-outline"})}),wp.element.createElement(he.DateTimeRangePicker,Ve()({className:"tribe-editor__ticket__duration-picker"},n)),t&&wp.element.createElement("span",{className:"tribe-editor__ticket__duration-error"},Object(i.__)("There is an error with the selected sales duration. Please fix the issue before saving.","event-tickets")))});ta.propTypes={fromDate:d.a.instanceOf(Date),fromDateInput:d.a.string,fromDateDisabled:d.a.bool,fromTime:d.a.string,fromTimeDisabled:d.a.bool,hasDurationError:d.a.bool,onFromDateChange:d.a.func,onFromTimePickerBlur:d.a.func,onFromTimePickerChange:d.a.func,onFromTimePickerClick:d.a.func,onToDateChange:d.a.func,onToTimePickerBlur:d.a.func,onToTimePickerChange:d.a.func,onToTimePickerClick:d.a.func,toDate:d.a.instanceOf(Date),toDateInput:d.a.string,toDateDisabled:d.a.bool,toTime:d.a.string,toTimeDisabled:d.a.bool};var na=ta,ra=function(e,t){return function(n,r,a){e(En.a.handleTicketStartDate(t.clientId,n,a))}},aa=function(e,t){return function(n){e(En.a.setTicketTempStartTimeInput(t.clientId,n.target.value))}},ia=function(e,t){return function(n,r){e(En.a.handleTicketStartTime(t.clientId,n)),r()}},sa=function(e,t){return function(n,r,a){e(En.a.handleTicketEndDate(t.clientId,n,a))}},oa=function(e,t){return function(n){e(En.a.setTicketTempEndTimeInput(t.clientId,n.target.value))}},ca=function(e,t){return function(n,r){e(En.a.handleTicketEndTime(t.clientId,n)),r()}},ua=function(e,t,n){return function(r){var a=ze.moment.toMoment(r.target.value,ze.moment.TIME_FORMAT,!1);if(!a.isValid()){var i=En.f.getTicketStartTimeInput(e,n);a=ze.moment.toMoment(i,ze.moment.TIME_FORMAT,!1)}var s=ze.moment.totalSeconds(a);t(En.a.handleTicketStartTime(n.clientId,s))}},da=function(e,t,n){return function(r){var a=ze.moment.toMoment(r.target.value,ze.moment.TIME_FORMAT,!1);if(!a.isValid()){var i=En.f.getTicketEndTimeInput(e,n);a=ze.moment.toMoment(i,ze.moment.TIME_FORMAT,!1)}var s=ze.moment.totalSeconds(a);t(En.a.handleTicketEndTime(n.clientId,s))}},_a=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){var n=ze.globals.tecDateSettings().datepickerFormat?ze.moment.toFormat(ze.globals.tecDateSettings().datepickerFormat):"LL",r=En.f.isTicketDisabled(e,t),a=En.f.getTicketTempStartDateMoment(e,t),i=En.f.getTicketTempEndDateMoment(e,t),s=a&&a.toDate(),o=i&&i.toDate();return{fromDate:s,fromDateInput:En.f.getTicketTempStartDateInput(e,t),fromDateDisabled:r,fromDateFormat:n,fromTime:En.f.getTicketTempStartTimeInput(e,t),fromTimeDisabled:r,hasDurationError:En.f.getTicketHasDurationError(e,t),toDate:o,toDateInput:En.f.getTicketTempEndDateInput(e,t),toDateDisabled:r,toDateFormat:n,toTime:En.f.getTicketTempEndTimeInput(e,t),toTimeDisabled:r,state:e}},function(e,t){return{onFromDateChange:ra(e,t),onFromTimePickerChange:aa(e,t),onFromTimePickerClick:ia(e,t),onToDateChange:sa(e,t),onToTimePickerChange:oa(e,t),onToTimePickerClick:ca(e,t),dispatch:e}},function(e,t,n){var r=e.state,a=Ke()(e,["state"]),i=t.dispatch,s=Ke()(t,["dispatch"]);return Ve()({},n,a,s,{onFromTimePickerBlur:ua(r,i,n),onToTimePickerBlur:da(r,i,n)})}))(na),la=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.id=Ce()("ticket-sku"),n}return me()(t,e),ue()(t,[{key:"render",value:function(){var e=this.props,t=e.sku,n=e.isDisabled,r=e.onChange;return wp.element.createElement("div",{className:fe()("tribe-editor__ticket__sku","tribe-editor__ticket__content-row","tribe-editor__ticket__content-row--sku")},wp.element.createElement(he.LabelWithTooltip,{className:"tribe-editor__ticket__sku-label-with-tooltip",forId:this.id,isLabel:!0,label:Object(i.__)("Ticket SKU","event-tickets"),tooltipText:Object(i.__)("A unique identifying code for each ticket type you're selling","event-tickets"),tooltipLabel:wp.element.createElement(Te.Dashicon,{className:"tribe-editor__ticket__tooltip-label",icon:"info-outline"})}),wp.element.createElement(Se.Input,{className:"tribe-editor__ticket__sku-input",id:this.id,type:"text",value:t,onChange:r,disabled:n}))}}]),t}(c.PureComponent);la.propTypes={isDisabled:d.a.bool,onChange:d.a.func.isRequired,sku:d.a.string};var ma=la,pa=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),sku:En.f.getTicketTempSku(e,t)}},function(e,t){return{onChange:function(n){var r=t.clientId;e(En.a.setTicketTempSku(r,n.target.value)),e(En.a.setTicketHasChanges(r,!0))}}}))(ma),fa=n(262),Ta=n.n(fa),ha=(n(527),En.b.EDD),ya=En.b.WOO,ba=En.b.PROVIDER_TYPES,Ma=["edit-ticket","report"],Sa=function(e){var t=e.editTicketLink,n=e.isDisabled,r=e.provider,a=e.reportLink,s=e.showEcommerceOptions,o=function(e){var s=fe()("tribe-editor__ticket__ecommerce-options-link","tribe-editor__ticket__ecommerce-options-link--"+e),o="report"===e?a:t,c="report"===e?Object(i.__)("View Sales Report","event-tickets"):function(e){var t="";return e===ha?t=Object(i.__)("Edit Ticket in Easy Digital Downloads","event-tickets"):e===ya&&(t=Object(i.__)("Edit Ticket in WooCommerce","event-tickets")),t}(r);return n?wp.element.createElement("span",{className:s},c):wp.element.createElement(Se.Link,{className:s,href:o,target:"_blank"},c)};return s&&wp.element.createElement(Se.LabeledItem,{className:fe()("tribe-editor__ticket__ecommerce-options","tribe-editor__ticket__content-row","tribe-editor__ticket__content-row--ecommerce-options"),label:Object(i.__)("Ecommerce","event-tickets")},wp.element.createElement("div",{className:"tribe-editor__ticket__ecommerce-options-links"},Ma.map(function(e){return wp.element.createElement("span",{key:e,className:"tribe-editor__ticket__ecommerce-options-link-wrapper"},o(e))})))};Sa.propTypes={editTicketLink:d.a.string,isDisabled:d.a.bool,provider:d.a.oneOf([].concat(Ta()(ba),[""])),reportLink:d.a.string,showEcommerceOptions:d.a.bool};var Ea=Sa,ga=En.b.EDD,va=En.b.WOO,ka=function(e){return Kr()([ga,va],e)},Da=function(e,t,n){var r="";ka(n)&&(r=ze.globals.adminUrl()+"post.php?post="+En.f.getTicketId(e,t)+"&action=edit");return r},La=function(e,t,n){var r="";if(ka(n)){var a=ze.globals.adminUrl(),i=En.f.getTicketId(e,t),s="";n===ga?s="edit.php?page=edd-reports&view=sales&post_type=download&tab=logs&download="+i:n===va&&(s="admin.php?page=wc-reports&tab=orders&report=sales_by_product&product_ids="+i),r=""+a+s}return r},Oa=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){var n=En.f.getTicketProvider(e,t);return{isDisabled:En.f.isTicketDisabled(e,t),provider:n,editTicketLink:Da(e,t,n),reportLink:La(e,t,n),showEcommerceOptions:ka(n)}}))(Ea),Ya=(n(528),function(e){var t=e.moveTicket,n=e.removeTicket,r=e.isDisabled;return wp.element.createElement("div",{className:"tribe-editor__ticket__content-row--move-delete"},wp.element.createElement(Se.Button,{type:"button",onClick:t,disabled:r},Object(i.__)("Move Ticket","event-tickets")),wp.element.createElement(Se.Button,{type:"button",onClick:n,disabled:r},Object(i.__)("Remove Ticket","event-tickets")))});Ya.propTypes={moveTicket:d.a.func.isRequired,removeTicket:d.a.func.isRequired,isDisabled:d.a.bool.isRequired};var wa=Ya,ja=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),ticketId:En.f.getTicketId(e,t)}},function(e,t){return{removeTicket:function(){e(En.a.deleteTicket(t.clientId))},moveTicket:function(n){return e(Object(it.c)(n,t.clientId))}}},function(e,t,n){return Ve()({},e,t,n,{moveTicket:function(){return t.moveTicket(e.ticketId)}})}))(wa),Ia=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.getHeader=function(){return wp.element.createElement(c.Fragment,null,wp.element.createElement(Te.Dashicon,{className:"tribe-editor__ticket__advanced-options-header-icon",icon:"arrow-down"}),wp.element.createElement("span",{className:"tribe-editor__ticket__advanced-options-header-text"},Object(i.__)("Advanced Options","event-tickets")))},n.getContent=function(){return wp.element.createElement(c.Fragment,null,wp.element.createElement(_a,{clientId:n.props.clientId}),wp.element.createElement(pa,{clientId:n.props.clientId}),wp.element.createElement(Oa,{clientId:n.props.clientId}),n.props.hasBeenCreated&&wp.element.createElement(ja,{clientId:n.props.clientId}))},n.getRows=function(){return[{accordionId:n.accordionId,content:n.getContent(),contentClassName:"tribe-editor__ticket__advanced-options-content",header:n.getHeader(),headerAttrs:{disabled:n.props.isDisabled},headerClassName:"tribe-editor__ticket__advanced-options-header"}]},n.accordionId=Ce()(),n}return me()(t,e),ue()(t,[{key:"render",value:function(){return wp.element.createElement(Se.Accordion,{className:"tribe-editor__ticket__advanced-options",rows:this.getRows()})}}]),t}(c.Component);Ia.propTypes={clientId:d.a.string.isRequired,isDisabled:d.a.bool,hasBeenCreated:d.a.bool};var Pa=Ia,Ca=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),hasBeenCreated:En.f.getTicketHasBeenCreated(e,t)}}))(Pa),xa=(n(529),Object(i.__)("+ Add","event-tickets")),Ra=Object(i.__)("Edit","event-tickets"),Aa=function(e){var t=e.attendeeRegistrationURL,n=e.hasAttendeeInfoFields,r=e.isCreated,a=e.isDisabled,s=e.isModalOpen,o=e.onClick,c=e.onClose,u=e.onIframeLoad,d=n?Ra:xa;return wp.element.createElement(he.AttendeesRegistration,{helperText:Object(i.__)("Save your ticket to enable attendee information fields","event-tickets"),iframeURL:t,isDisabled:a,isModalOpen:s,label:Object(i.__)("Attendee Information","event-tickets"),linkText:d,modalTitle:Object(i.__)("Attendee Information","event-tickets"),onClick:o,onClose:c,onIframeLoad:u,showHelperText:!r})};Aa.propTypes={attendeeRegistrationURL:d.a.string.isRequired,hasAttendeeInfoFields:d.a.bool.isRequired,isCreated:d.a.bool.isRequired,isDisabled:d.a.bool.isRequired,isModalOpen:d.a.bool.isRequired,onClick:d.a.func.isRequired,onClose:d.a.func.isRequired,onIframeLoad:d.a.func.isRequired};var Ha=Aa,Na=function(e,t){return ze.globals.adminUrl()+"edit.php?post_type="+Object(ie.select)("core/editor").getCurrentPostType()+"&page=attendee-registration&ticket_id="+En.f.getTicketId(e,t)+"&tribe_events_modal=1"},Va=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){var n=En.f.getTicketHasBeenCreated(e,t);return{attendeeRegistrationURL:Na(e,t),hasAttendeeInfoFields:En.f.getTicketHasAttendeeInfoFields(e,t),isCreated:n,isDisabled:En.f.isTicketDisabled(e,t)||!n,isModalOpen:En.f.getTicketIsModalOpen(e,t)}},function(e,t){return{onClick:function(){e(En.a.setTicketIsModalOpen(t.clientId,!0))},onClose:function(){e(En.a.setTicketIsModalOpen(t.clientId,!1))},onIframeLoad:function(n){var r=n.contentWindow,a=function(){n.nextSibling.classList.add("tribe-editor__attendee-registration__modal-overlay--show")},i=r.document.querySelector("#event-tickets-attendee-information");i.addEventListener("submit",a);var s=function(){r.removeEventListener("unload",o),i.removeEventListener("submit",a)},o=function(){s();var n=r.document.querySelector("#tribe-tickets-attendee-sortables"),a=Boolean(n.firstElementChild);e(En.a.setTicketHasAttendeeInfoFields(t.clientId,a)),e(En.a.setTicketIsModalOpen(t.clientId,!1))};r.addEventListener("unload",o);var c=r.document.querySelector(".tribe-intro > a");c&&c.setAttribute("target","_blank")}}}))(Ha),Fa=(n(530),function(e){var t=e.clientId,n=e.hasTicketsPlus;return wp.element.createElement(c.Fragment,null,wp.element.createElement(ea,{clientId:t}),wp.element.createElement(Ca,{clientId:t}),n&&wp.element.createElement(Va,{clientId:t}))});Fa.propTypes={clientId:d.a.string.isRequired,hasTicketsPlus:d.a.bool};var Ka=Fa,Wa=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS)}}))(Ka),Ua=function(e){return e.isDisabled?wp.element.createElement(s.ClockInactive,null):wp.element.createElement(s.ClockActive,null)},za=function(e){return e.isDisabled?wp.element.createElement(s.TicketInactive,null):wp.element.createElement(s.TicketActive,null)},Ga=function(e){var t=e.isDisabled,n=e.isFuture,r=e.isPast;return n||r?wp.element.createElement(Ua,{isDisabled:t}):wp.element.createElement(za,{isDisabled:t})};Ga.propTypes={isDisabled:d.a.bool.isRequired,isFuture:d.a.bool,isPast:d.a.bool};var Ba=function(e){var t=e.clientId,n=e.isDisabled,r=e.isFuture,a=e.isPast,i=e.isSelected;return wp.element.createElement(he.ContainerPanel,{className:"tribe-editor__ticket__container",layout:ye.a.ticket,icon:wp.element.createElement(Ga,{isDisabled:n,isFuture:r,isPast:a}),header:wp.element.createElement(Hr,{clientId:t,isSelected:i}),content:wp.element.createElement(Wa,{clientId:t})})};Ba.propTypes={clientId:d.a.string.isRequired,isDisabled:d.a.bool,isFuture:d.a.bool,isPast:d.a.bool,isSelected:d.a.bool};var qa=Ba,Ja=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),isFuture:En.f.isTicketFuture(e,t),isPast:En.f.isTicketPast(e,t)}}))(qa),$a=(n(531),function(e){return e?Object(i.__)("Update Ticket","event-tickets"):Object(i.__)("Create Ticket","event-tickets")}),Za=Object(i.__)("Cancel","event-tickets"),Qa=function(e){var t=e.hasBeenCreated,n=e.isCancelDisabled,r=e.isConfirmDisabled,a=e.onCancelClick,i=e.onConfirmClick;return wp.element.createElement(he.ActionDashboard,{className:"tribe-editor__ticket__dashboard",cancelLabel:Za,confirmLabel:$a(t),isCancelDisabled:n,isConfirmDisabled:r,onCancelClick:a,onConfirmClick:i})};Qa.propTypes={hasBeenCreated:d.a.bool,isCancelDisabled:d.a.bool,isConfirmDisabled:d.a.bool,onCancelClick:d.a.func,onConfirmClick:d.a.func};var Xa=Qa,ei=function(e,t){return!En.f.isTicketValid(e,t)||!En.f.getTicketHasChanges(e,t)||En.f.isTicketDisabled(e,t)||En.f.getTicketHasDurationError(e,t)},ti=function(e,t,n){return function(){En.f.getTicketHasBeenCreated(e,n)?(t(En.a.setTicketTempDetails(n.clientId,{title:En.f.getTicketTitle(e,n),description:En.f.getTicketDescription(e,n),price:En.f.getTicketPrice(e,n),sku:En.f.getTicketSku(e,n),startDate:En.f.getTicketStartDate(e,n),startDateInput:En.f.getTicketStartDateInput(e,n),startDateMoment:En.f.getTicketStartDateMoment(e,n),endDate:En.f.getTicketEndDate(e,n),endDateInput:En.f.getTicketEndDateInput(e,n),endDateMoment:En.f.getTicketEndDateMoment(e,n),startTime:En.f.getTicketStartTime(e,n),endTime:En.f.getTicketEndTime(e,n),startTimeInput:En.f.getTicketStartTimeInput(e,n),endTimeInput:En.f.getTicketEndTimeInput(e,n),capacityType:En.f.getTicketCapacityType(e,n),capacity:En.f.getTicketCapacity(e,n)})),t(En.a.setTicketsTempSharedCapacity(En.f.getTicketsSharedCapacity(e))),t(En.a.setTicketHasChanges(n.clientId,!1))):(t(En.a.removeTicketBlock(n.clientId)),Object(ie.dispatch)("core/editor").removeBlocks(n.clientId)),Object(ie.dispatch)("core/editor").clearSelectedBlock()}},ni=function(e,t,n){return function(){return En.f.getTicketHasBeenCreated(e,n)?t(En.a.updateTicket(n.clientId)):t(En.a.createNewTicket(n.clientId))}},ri=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{hasBeenCreated:En.f.getTicketHasBeenCreated(e,t),isCancelDisabled:En.f.isTicketDisabled(e,t),isConfirmDisabled:ei(e,t),state:e}},null,function(e,t,n){var r=e.state,a=Ke()(e,["state"]),i=t.dispatch;return Ve()({},n,a,{onCancelClick:ti(r,i,n),onConfirmClick:ni(r,i,n)})}))(Xa),ai=function(e){function t(){return oe()(this,t),_e()(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return me()(t,e),ue()(t,[{key:"componentDidMount",value:function(){this.props.onBlockUpdate(this.props.isSelected)}},{key:"componentDidUpdate",value:function(e){e.isSelected!==this.props.isSelected&&this.props.onBlockUpdate(this.props.isSelected)}},{key:"render",value:function(){var e=this.props,t=e.clientId,n=e.hasTicketsPlus,r=e.isDisabled,a=e.isLoading,i=e.isSelected,s=e.isModalShowing;return e.showTicket?wp.element.createElement(c.Fragment,null,wp.element.createElement("article",{className:fe()("tribe-editor__ticket",{"tribe-editor__ticket--disabled":r},{"tribe-editor__ticket--selected":i},{"tribe-editor__ticket--has-tickets-plus":n})},wp.element.createElement(Ja,{clientId:t,isSelected:i}),wp.element.createElement(ri,{clientId:t,isSelected:i}),a&&wp.element.createElement(Te.Spinner,null)),s&&wp.element.createElement(_n,null)):null}}]),t}(c.PureComponent);ai.propTypes={clientId:d.a.string.isRequired,hasTicketsPlus:d.a.bool,isDisabled:d.a.bool,isLoading:d.a.bool,isModalShowing:d.a.bool,isSelected:d.a.bool,onBlockUpdate:d.a.func,removeTicketBlock:d.a.func,showTicket:d.a.bool};var ii=ai,si=function(e,t){return En.f.getTicketsIsSelected(e)||En.f.hasATicketSelected(e)||En.f.isTicketOnSale(e,t)},oi=Object(j.c)(Object(ke.withStore)({isolated:!0}),ne(function(e,t){return{hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),hasBeenCreated:En.f.getTicketHasBeenCreated(e,t),isDisabled:En.f.isTicketDisabled(e,t),isLoading:En.f.getTicketIsLoading(e,t),isModalShowing:Object(on.l)(e),modalTicketId:Object(on.e)(e),showTicket:si(e,t),ticketId:En.f.getTicketId(e,t)}},function(e,t){var n=t.clientId;return{onBlockUpdate:function(t){return e(En.a.setTicketIsSelected(n,t))},setInitialState:function(t){e(En.a.registerTicketBlock(n)),e(En.a.setTicketInitialState(t))}}},function(e,t,n){return Ve()({},e,t,n,{isModalShowing:e.isModalShowing&&e.modalTicketId===e.ticketId})}),Object(ke.withSaveData)())(ii),ci={id:"tickets-item",title:Object(i.__)("Event Ticket","event-tickets"),description:Object(i.__)("A single configured ticket type.","event-tickets"),icon:wp.element.createElement(s.Tickets,null),category:"tribe-tickets",keywords:["event","event-tickets","tribe"],parent:["tribe/tickets"],supports:{html:!1},attributes:{hasBeenCreated:{type:"boolean",default:!1},ticketId:{type:"integer",default:0}},edit:oi,save:function(){return wp.element.createElement("div",null,wp.element.createElement(bn.InnerBlocks.Content,null))}},ui=n(54),di=n(110),_i=(n(532),Object(i.__)("Who's Attending?","event-tickets")),li=Object(i.__)("(X) people are attending this event","event-tickets"),mi=function(){return wp.element.createElement("div",{className:"tribe-editor__event-attendees__gravatars"},wp.element.createElement(s.AttendeesGravatar,null),wp.element.createElement(s.AttendeesGravatar,null),wp.element.createElement(s.AttendeesGravatar,null),wp.element.createElement(s.AttendeesGravatar,null),wp.element.createElement(s.AttendeesGravatar,null))},pi=function(){return wp.element.createElement("div",{className:"tribe-editor__event-attendees__subtitle"},wp.element.createElement("p",null,li))},fi=function(e){var t=e.isSelected,n=e.title,r=e.displayTitle,a=e.displaySubtitle,i=t||n?function(e){var t=e.isSelected,n=e.isEmpty,r=e.title,a=e.setTitle,i=fe()({"tribe-editor__event-attendees__title":!0,"tribe-editor__event-attendees__title--selected":t}),s=fe()({"tribe-editor__event-attendees__title-text":!0,"tribe-editor__event-attendees__title-text--empty":n&&t});return wp.element.createElement("div",{key:"tribe-events-attendees-label",className:i},wp.element.createElement(Me.a,{id:"tribe-events-attendees-link",className:s,value:r,placeholder:_i,onChange:a}))}(e):wp.element.createElement("span",{className:fe()(["tribe-editor__event-attendees__title","tribe-editor__event-attendees__title--placeholder"])},_i);return wp.element.createElement("div",{className:"tribe-editor__block tribe-editor__event-attendees"},r?i:"",a?wp.element.createElement(pi,null):"",wp.element.createElement(mi,null))},Ti=function(e){var t=e.isSelected,n=e.displayTitle,r=e.displaySubtitle,a=e.onSetDisplayTitleChange,s=e.onSetDisplaySubtitleChange;return t&&wp.element.createElement(bn.InspectorControls,{key:"inspector"},wp.element.createElement(Te.PanelBody,{title:Object(i.__)("Attendees Settings","event-tickets")},wp.element.createElement(Te.ToggleControl,{label:Object(i.__)("Display Title","event-tickets"),checked:n,onChange:a}),wp.element.createElement(Te.ToggleControl,{label:Object(i.__)("Display Subtitle","event-tickets"),checked:r,onChange:s})))},hi=function(e){return wp.element.createElement(c.Fragment,null,wp.element.createElement(fi,e),wp.element.createElement(Ti,e))};hi.propTypes={setTitle:d.a.func,title:d.a.string,isSelected:d.a.bool,isEmpty:d.a.bool,displayTitle:d.a.bool,displaySubtitle:d.a.bool,onSetDisplaySubtitleChange:d.a.func,onSetDisplayTitleChange:d.a.func};var yi=hi,bi=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{title:di.c(e),displayTitle:di.b(e),displaySubtitle:di.a(e)}},function(e){return{setInitialState:function(t){return e(ui.c(t))},setTitle:function(t){return e(ui.d(t.target.value))},onSetDisplayTitleChange:function(t){return e(ui.b(t))},onSetDisplaySubtitleChange:function(t){return e(ui.a(t))}}}),Object(ke.withSaveData)())(yi),Mi=[yn,Tr,ci,{id:"attendees",title:Object(i.__)("Attendee List","event-tickets"),description:Object(i.__)("Show the gravatars of people coming to this event.","event-tickets"),icon:wp.element.createElement(s.Attendees,null),category:"tribe-tickets",keywords:["event","events-gutenberg","tribe"],supports:{html:!1},attributes:{title:{type:"html",default:Object(i.__)("Who's Attending?","event-tickets")},displayTitle:{type:"boolean",default:!0},displaySubtitle:{type:"boolean",default:!0}},edit:bi,save:function(){return null}}];Mi.forEach(function(e){return Object(r.registerBlockType)("tribe/"+e.id,e)}),Object(a.initStore)();t.default=Mi}]);
17
  *
18
  * This source code is licensed under the MIT license found in the
19
  * LICENSE file in the root directory of this source tree.
20
+ */Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&Symbol.for,a=r?Symbol.for("react.element"):60103,i=r?Symbol.for("react.portal"):60106,s=r?Symbol.for("react.fragment"):60107,o=r?Symbol.for("react.strict_mode"):60108,c=r?Symbol.for("react.profiler"):60114,u=r?Symbol.for("react.provider"):60109,d=r?Symbol.for("react.context"):60110,_=r?Symbol.for("react.async_mode"):60111,l=r?Symbol.for("react.concurrent_mode"):60111,m=r?Symbol.for("react.forward_ref"):60112,p=r?Symbol.for("react.suspense"):60113,f=r?Symbol.for("react.memo"):60115,T=r?Symbol.for("react.lazy"):60116;function h(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case a:switch(e=e.type){case _:case l:case s:case c:case o:case p:return e;default:switch(e=e&&e.$$typeof){case d:case m:case u:return e;default:return t}}case T:case f:case i:return t}}}function y(e){return h(e)===l}t.typeOf=h,t.AsyncMode=_,t.ConcurrentMode=l,t.ContextConsumer=d,t.ContextProvider=u,t.Element=a,t.ForwardRef=m,t.Fragment=s,t.Lazy=T,t.Memo=f,t.Portal=i,t.Profiler=c,t.StrictMode=o,t.Suspense=p,t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===s||e===l||e===c||e===o||e===p||"object"==typeof e&&null!==e&&(e.$$typeof===T||e.$$typeof===f||e.$$typeof===u||e.$$typeof===d||e.$$typeof===m)},t.isAsyncMode=function(e){return y(e)||h(e)===_},t.isConcurrentMode=y,t.isContextConsumer=function(e){return h(e)===d},t.isContextProvider=function(e){return h(e)===u},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===a},t.isForwardRef=function(e){return h(e)===m},t.isFragment=function(e){return h(e)===s},t.isLazy=function(e){return h(e)===T},t.isMemo=function(e){return h(e)===f},t.isPortal=function(e){return h(e)===i},t.isProfiler=function(e){return h(e)===c},t.isStrictMode=function(e){return h(e)===o},t.isSuspense=function(e){return h(e)===p}},function(e,t,n){},function(e,t,n){},function(e,t){var n,r,a=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function o(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(e){r=s}}();var c,u=[],d=!1,_=-1;function l(){d&&c&&(d=!1,c.length?u=c.concat(u):_=-1,u.length&&m())}function m(){if(!d){var e=o(l);d=!0;for(var t=u.length;t;){for(c=u,u=[];++_<t;)c&&c[_].run();_=-1,t=u.length}c=null,d=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===s||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function f(){}a.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new p(e,t)),1!==u.length||d||o(m)},p.prototype.run=function(){this.fun.apply(null,this.array)},a.title="browser",a.browser=!0,a.env={},a.argv=[],a.version="",a.versions={},a.on=f,a.addListener=f,a.once=f,a.off=f,a.removeListener=f,a.removeAllListeners=f,a.emit=f,a.prependListener=f,a.prependOnceListener=f,a.listeners=function(e){return[]},a.binding=function(e){throw new Error("process.binding is not supported")},a.cwd=function(){return"/"},a.chdir=function(e){throw new Error("process.chdir is not supported")},a.umask=function(){return 0}},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";n.r(t);var r=n(111),a=n(324),i=n(15),s=n(30);function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}var c=n(13),u=n(1),d=n.n(u),_=d.a.shape({trySubscribe:d.a.func.isRequired,tryUnsubscribe:d.a.func.isRequired,notifyNestedSubs:d.a.func.isRequired,isSubscribed:d.a.func.isRequired}),l=d.a.shape({subscribe:d.a.func.isRequired,dispatch:d.a.func.isRequired,getState:d.a.func.isRequired});!function(e){var t;void 0===e&&(e="store");var n=e+"Subscription",r=function(t){o(a,t);var r=a.prototype;function a(n,r){var a;return(a=t.call(this,n,r)||this)[e]=n.store,a}return r.getChildContext=function(){var t;return(t={})[e]=this[e],t[n]=null,t},r.render=function(){return c.Children.only(this.props.children)},a}(c.Component);r.propTypes={store:l.isRequired,children:d.a.element.isRequired},r.childContextTypes=((t={})[e]=l.isRequired,t[n]=_,t)}();function m(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function p(){return(p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function f(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}var T=n(489),h=n.n(T),y=n(325),b=n.n(y),M=n(488),S=null,E={notify:function(){}};var g=function(){function e(e,t,n){this.store=e,this.parentSub=t,this.onStateChange=n,this.unsubscribe=null,this.listeners=E}var t=e.prototype;return t.addNestedSub=function(e){return this.trySubscribe(),this.listeners.subscribe(e)},t.notifyNestedSubs=function(){this.listeners.notify()},t.isSubscribed=function(){return Boolean(this.unsubscribe)},t.trySubscribe=function(){var e,t;this.unsubscribe||(this.unsubscribe=this.parentSub?this.parentSub.addNestedSub(this.onStateChange):this.store.subscribe(this.onStateChange),this.listeners=(e=[],t=[],{clear:function(){t=S,e=S},notify:function(){for(var n=e=t,r=0;r<n.length;r++)n[r]()},get:function(){return t},subscribe:function(n){var r=!0;return t===e&&(t=e.slice()),t.push(n),function(){r&&e!==S&&(r=!1,t===e&&(t=e.slice()),t.splice(t.indexOf(n),1))}}}))},t.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null,this.listeners.clear(),this.listeners=E)},e}(),v=0,k={};function D(){}function L(e,t){var n,r;void 0===t&&(t={});var a=t,i=a.getDisplayName,s=void 0===i?function(e){return"ConnectAdvanced("+e+")"}:i,u=a.methodName,d=void 0===u?"connectAdvanced":u,T=a.renderCountProp,y=void 0===T?void 0:T,S=a.shouldHandleStateChanges,E=void 0===S||S,L=a.storeKey,O=void 0===L?"store":L,Y=a.withRef,w=void 0!==Y&&Y,j=f(a,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef"]),I=O+"Subscription",P=v++,C=((n={})[O]=l,n[I]=_,n),x=((r={})[I]=_,r);return function(t){b()(Object(M.isValidElementType)(t),"You must pass a component to the function returned by "+d+". Instead received "+JSON.stringify(t));var n=t.displayName||t.name||"Component",r=s(n),a=p({},j,{getDisplayName:s,methodName:d,renderCountProp:y,shouldHandleStateChanges:E,storeKey:O,withRef:w,displayName:r,wrappedComponentName:n,WrappedComponent:t}),i=function(n){function i(e,t){var a;return(a=n.call(this,e,t)||this).version=P,a.state={},a.renderCount=0,a.store=e[O]||t[O],a.propsMode=Boolean(e[O]),a.setWrappedInstance=a.setWrappedInstance.bind(m(m(a))),b()(a.store,'Could not find "'+O+'" in either the context or props of "'+r+'". Either wrap the root component in a <Provider>, or explicitly pass "'+O+'" as a prop to "'+r+'".'),a.initSelector(),a.initSubscription(),a}o(i,n);var s=i.prototype;return s.getChildContext=function(){var e,t=this.propsMode?null:this.subscription;return(e={})[I]=t||this.context[I],e},s.componentDidMount=function(){E&&(this.subscription.trySubscribe(),this.selector.run(this.props),this.selector.shouldComponentUpdate&&this.forceUpdate())},s.componentWillReceiveProps=function(e){this.selector.run(e)},s.shouldComponentUpdate=function(){return this.selector.shouldComponentUpdate},s.componentWillUnmount=function(){this.subscription&&this.subscription.tryUnsubscribe(),this.subscription=null,this.notifyNestedSubs=D,this.store=null,this.selector.run=D,this.selector.shouldComponentUpdate=!1},s.getWrappedInstance=function(){return b()(w,"To access the wrapped instance, you need to specify { withRef: true } in the options argument of the "+d+"() call."),this.wrappedInstance},s.setWrappedInstance=function(e){this.wrappedInstance=e},s.initSelector=function(){var t=e(this.store.dispatch,a);this.selector=function(e,t){var n={run:function(r){try{var a=e(t.getState(),r);(a!==n.props||n.error)&&(n.shouldComponentUpdate=!0,n.props=a,n.error=null)}catch(e){n.shouldComponentUpdate=!0,n.error=e}}};return n}(t,this.store),this.selector.run(this.props)},s.initSubscription=function(){if(E){var e=(this.propsMode?this.props:this.context)[I];this.subscription=new g(this.store,e,this.onStateChange.bind(this)),this.notifyNestedSubs=this.subscription.notifyNestedSubs.bind(this.subscription)}},s.onStateChange=function(){this.selector.run(this.props),this.selector.shouldComponentUpdate?(this.componentDidUpdate=this.notifyNestedSubsOnComponentDidUpdate,this.setState(k)):this.notifyNestedSubs()},s.notifyNestedSubsOnComponentDidUpdate=function(){this.componentDidUpdate=void 0,this.notifyNestedSubs()},s.isSubscribed=function(){return Boolean(this.subscription)&&this.subscription.isSubscribed()},s.addExtraProps=function(e){if(!(w||y||this.propsMode&&this.subscription))return e;var t=p({},e);return w&&(t.ref=this.setWrappedInstance),y&&(t[y]=this.renderCount++),this.propsMode&&this.subscription&&(t[I]=this.subscription),t},s.render=function(){var e=this.selector;if(e.shouldComponentUpdate=!1,e.error)throw e.error;return Object(c.createElement)(t,this.addExtraProps(e.props))},i}(c.Component);return i.WrappedComponent=t,i.displayName=r,i.childContextTypes=x,i.contextTypes=C,i.propTypes=C,h()(i,t)}}var O=Object.prototype.hasOwnProperty;function Y(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function w(e,t){if(Y(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(var a=0;a<n.length;a++)if(!O.call(t,n[a])||!Y(e[n[a]],t[n[a]]))return!1;return!0}var j=n(16);function I(e){return function(t,n){var r=e(t,n);function a(){return r}return a.dependsOnOwnProps=!1,a}}function P(e){return null!==e.dependsOnOwnProps&&void 0!==e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function C(e,t){return function(t,n){n.displayName;var r=function(e,t){return r.dependsOnOwnProps?r.mapToProps(e,t):r.mapToProps(e)};return r.dependsOnOwnProps=!0,r.mapToProps=function(t,n){r.mapToProps=e,r.dependsOnOwnProps=P(e);var a=r(t,n);return"function"==typeof a&&(r.mapToProps=a,r.dependsOnOwnProps=P(a),a=r(t,n)),a},r}}var x=[function(e){return"function"==typeof e?C(e):void 0},function(e){return e?void 0:I(function(e){return{dispatch:e}})},function(e){return e&&"object"==typeof e?I(function(t){return Object(j.a)(e,t)}):void 0}];var R=[function(e){return"function"==typeof e?C(e):void 0},function(e){return e?void 0:I(function(){return{}})}];function A(e,t,n){return p({},n,e,t)}var H=[function(e){return"function"==typeof e?function(e){return function(t,n){n.displayName;var r,a=n.pure,i=n.areMergedPropsEqual,s=!1;return function(t,n,o){var c=e(t,n,o);return s?a&&i(c,r)||(r=c):(s=!0,r=c),r}}}(e):void 0},function(e){return e?void 0:function(){return A}}];function N(e,t,n,r){return function(a,i){return n(e(a,i),t(r,i),i)}}function V(e,t,n,r,a){var i,s,o,c,u,d=a.areStatesEqual,_=a.areOwnPropsEqual,l=a.areStatePropsEqual,m=!1;function p(a,m){var p,f,T=!_(m,s),h=!d(a,i);return i=a,s=m,T&&h?(o=e(i,s),t.dependsOnOwnProps&&(c=t(r,s)),u=n(o,c,s)):T?(e.dependsOnOwnProps&&(o=e(i,s)),t.dependsOnOwnProps&&(c=t(r,s)),u=n(o,c,s)):h?(p=e(i,s),f=!l(p,o),o=p,f&&(u=n(o,c,s)),u):u}return function(a,d){return m?p(a,d):(o=e(i=a,s=d),c=t(r,s),u=n(o,c,s),m=!0,u)}}function F(e,t){var n=t.initMapStateToProps,r=t.initMapDispatchToProps,a=t.initMergeProps,i=f(t,["initMapStateToProps","initMapDispatchToProps","initMergeProps"]),s=n(e,i),o=r(e,i),c=a(e,i);return(i.pure?V:N)(s,o,c,e,i)}function K(e,t,n){for(var r=t.length-1;r>=0;r--){var a=t[r](e);if(a)return a}return function(t,r){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+r.wrappedComponentName+".")}}function W(e,t){return e===t}var U,z,G,B,q,J,$,Z,Q,X,ee,te,ne=(G=(z=void 0===U?{}:U).connectHOC,B=void 0===G?L:G,q=z.mapStateToPropsFactories,J=void 0===q?R:q,$=z.mapDispatchToPropsFactories,Z=void 0===$?x:$,Q=z.mergePropsFactories,X=void 0===Q?H:Q,ee=z.selectorFactory,te=void 0===ee?F:ee,function(e,t,n,r){void 0===r&&(r={});var a=r,i=a.pure,s=void 0===i||i,o=a.areStatesEqual,c=void 0===o?W:o,u=a.areOwnPropsEqual,d=void 0===u?w:u,_=a.areStatePropsEqual,l=void 0===_?w:_,m=a.areMergedPropsEqual,T=void 0===m?w:m,h=f(a,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),y=K(e,J,"mapStateToProps"),b=K(t,Z,"mapDispatchToProps"),M=K(n,X,"mergeProps");return B(te,p({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:y,initMapDispatchToProps:b,initMergeProps:M,pure:s,areStatesEqual:c,areOwnPropsEqual:d,areStatePropsEqual:l,areMergedPropsEqual:T},h))}),re=n(4),ae=n.n(re),ie=n(20),se=n(35),oe=n.n(se),ce=n(36),ue=n.n(ce),de=n(33),_e=n.n(de),le=n(37),me=n.n(le),pe=n(22),fe=n.n(pe),Te=n(26),he=n(24),ye=n(109),be=n(86),Me=n.n(be),Se=n(21),Ee=(n(492),function(e){var t=e.goingCount,n=e.notGoingCount,r=e.showNotGoing;return wp.element.createElement("div",{className:"tribe-editor__rsvp-container-header__counters"},wp.element.createElement(Se.Counter,{className:"tribe-editor__rsvp-container-header__going-counter",count:t,label:Object(i.__)("Going","event-tickets")}),r&&wp.element.createElement(Se.Counter,{className:"tribe-editor__rsvp-container-header__not-going-counter",count:n,label:Object(i.__)("Not going","event-tickets")}))});Ee.propTypes={goingCount:d.a.number,notGoingCount:d.a.number,showNotGoing:d.a.bool};var ge=Ee,ve=n(12),ke=n(18),De=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{goingCount:ve.d.getRSVPGoingCount(e),notGoingCount:ve.d.getRSVPNotGoingCount(e),showNotGoing:ve.d.getRSVPNotGoingResponses(e)}}))(ge),Le=n(62),Oe=(n(493),wp.element.createElement(Se.Tooltip,{labelClassName:"tribe-editor__ticket__container-header-clipboard-tooltip",label:wp.element.createElement(Le.Clipboard,null),text:Object(i.__)("This ticket has Attendee Information Fields configured.","event-tickets")})),Ye=function(e){var t,n,r,a,s=e.description,o=e.hasAttendeeInfoFields,u=e.isCreated,d=e.isDisabled,_=e.isSelected,l=e.onTempDescriptionChange,m=e.onTempTitleChange,p=e.tempDescription,f=e.tempTitle,T=e.title,h=e.available;return wp.element.createElement(c.Fragment,null,wp.element.createElement("div",{className:"tribe-editor__rsvp-container-header__header-details"},function(e,t,n,r,a,s){return n?wp.element.createElement("div",{className:"tribe-editor__rsvp-container-header__title-input-wrapper"},wp.element.createElement(Me.a,{className:"tribe-editor__rsvp-container-header__title-input",value:a,placeholder:Object(i.__)("RSVP Title","event-tickets"),onChange:r,disabled:t}),e&&Oe):wp.element.createElement("h2",{className:"tribe-editor__rsvp-container-header__title"},s)}(o,d,_,m,f,T),function(e,t,n,r,a){return t?wp.element.createElement(Me.a,{className:"tribe-editor__rsvp-container-header__description-input",value:r,placeholder:Object(i.__)("description","event-tickets"),onChange:n,disabled:e}):a&&wp.element.createElement("span",{className:"tribe-editor__rsvp-container-header__description"},a)}(d,_,l,p,s),u&&(t=h,n=Object(i.__)("%d available","event-tickets"),r=n,a=wp.element.createElement("span",{className:"tribe-editor__rsvp-container-header__capacity-label-fallback"},Object(i.__)("Unlimited","event-tickets")),wp.element.createElement(he.NumericLabel,{className:"tribe-editor__rsvp-container-header__capacity-label",count:t,includeZero:!0,singular:n,plural:r,fallback:a}))),wp.element.createElement(De,null))};Ye.propTypes={available:d.a.number,description:d.a.string,hasAttendeeInfoFields:d.a.bool,isCreated:d.a.bool,isDisabled:d.a.bool.isRequired,isSelected:d.a.bool.isRequired,onTempDescriptionChange:d.a.func,onTempTitleChange:d.a.func,tempDescription:d.a.string,tempTitle:d.a.string,title:d.a.string};var we=Ye,je=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)},Ie=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{available:ve.d.getRSVPAvailable(e),description:ve.d.getRSVPDescription(e),hasAttendeeInfoFields:ve.d.getRSVPHasAttendeeInfoFields(e),isCreated:ve.d.getRSVPCreated(e),isDisabled:je(e),tempDescription:ve.d.getRSVPTempDescription(e),tempTitle:ve.d.getRSVPTempTitle(e),title:ve.d.getRSVPTitle(e)}},function(e){return{onTempDescriptionChange:function(t){e(ve.a.setRSVPTempDescription(t.target.value)),e(ve.a.setRSVPHasChanges(!0))},onTempTitleChange:function(t){e(ve.a.setRSVPTempTitle(t.target.value)),e(ve.a.setRSVPHasChanges(!0))}}}))(we),Pe=n(72),Ce=n.n(Pe),xe=(n(495),wp.element.createElement(Te.Dashicon,{className:"tribe-editor__rsvp-duration__duration-tooltip-label",icon:"info-outline"})),Re=function(e){var t=e.tooltipDisabled;return wp.element.createElement(he.LabelWithTooltip,{className:"tribe-editor__rsvp-duration__duration-label",label:Object(i.__)("Duration","event-tickets"),tooltipDisabled:t,tooltipLabel:xe,tooltipText:Object(i.__)("By default, sales will begin as soon as you save the ticket and end when the event begins","event-tickets")})},Ae=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)},He=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isDisabled:Ae(e)}}))(Re),Ne=n(9),Ve=n.n(Ne),Fe=n(38),Ke=n.n(Fe),We=(n(496),function(e){return wp.element.createElement(he.DateTimeRangePicker,Ve()({className:"tribe-editor__rsvp-duration__duration-picker"},e))});We.propTypes={fromDate:d.a.instanceOf(Date),fromDateInput:d.a.string,fromDateDisabled:d.a.bool,fromTime:d.a.string,fromTimeDisabled:d.a.bool,onFromDateChange:d.a.func,onFromTimePickerBlur:d.a.func,onFromTimePickerChange:d.a.func,onFromTimePickerClick:d.a.func,onToDateChange:d.a.func,onToTimePickerBlur:d.a.func,onToTimePickerChange:d.a.func,onToTimePickerClick:d.a.func,toDate:d.a.instanceOf(Date),toDateInput:d.a.string,toDateDisabled:d.a.bool,toTime:d.a.string,toTimeDisabled:d.a.bool};var Ue=We,ze=n(3),Ge=function(e){return function(t,n,r){var a={date:t,dayPickerInput:r};e(ve.a.handleRSVPStartDate(a))}},Be=function(e){return function(t){return e(ve.a.setRSVPTempStartTimeInput(t.target.value))}},qe=function(e){return function(t,n){e(ve.a.handleRSVPStartTime(t)),n()}},Je=function(e){return function(t,n,r){var a={date:t,dayPickerInput:r};e(ve.a.handleRSVPEndDate(a))}},$e=function(e){return function(t){return e(ve.a.setRSVPTempEndTimeInput(t.target.value))}},Ze=function(e){return function(t,n){e(ve.a.handleRSVPEndTime(t)),n()}},Qe=function(e,t){return function(n){var r=ze.moment.toMoment(n.target.value,ze.moment.TIME_FORMAT,!1);if(!r.isValid()){var a=ve.d.getRSVPStartTimeInput(e);r=ze.moment.toMoment(a,ze.moment.TIME_FORMAT,!1)}var i=ze.moment.totalSeconds(r);t(ve.a.handleRSVPStartTime(i))}},Xe=function(e,t){return function(n){var r=ze.moment.toMoment(n.target.value,ze.moment.TIME_FORMAT,!1);if(!r.isValid()){var a=ve.d.getRSVPEndTimeInput(e);r=ze.moment.toMoment(a,ze.moment.TIME_FORMAT,!1)}var i=ze.moment.totalSeconds(r);t(ve.a.handleRSVPEndTime(i))}},et=Object(j.c)(Object(ke.withStore)(),ne(function(e){var t=ze.globals.tecDateSettings().datepickerFormat?ze.moment.toFormat(ze.globals.tecDateSettings().datepickerFormat):"LL",n=ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e),r=ve.d.getRSVPTempStartDateMoment(e),a=ve.d.getRSVPTempEndDateMoment(e),i=r&&r.toDate(),s=a&&a.toDate();return{fromDate:i,fromDateInput:ve.d.getRSVPTempStartDateInput(e),fromDateDisabled:n,fromDateFormat:t,fromTime:ve.d.getRSVPTempStartTimeInput(e),fromTimeDisabled:n,toDate:s,toDateInput:ve.d.getRSVPTempEndDateInput(e),toDateDisabled:n,toDateFormat:t,toTime:ve.d.getRSVPTempEndTimeInput(e),toTimeDisabled:n,state:e}},function(e){return{onFromDateChange:Ge(e),onFromTimePickerChange:Be(e),onFromTimePickerClick:qe(e),onToDateChange:Je(e),onToTimePickerChange:$e(e),onToTimePickerClick:Ze(e),dispatch:e}},function(e,t,n){var r=e.state,a=Ke()(e,["state"]),i=t.dispatch,s=Ke()(t,["dispatch"]);return Ve()({},n,a,s,{onFromTimePickerBlur:Qe(r,i),onToTimePickerBlur:Xe(r,i)})}))(Ue),tt=(n(497),function(e){var t=e.hasDurationError;return wp.element.createElement("div",{className:"tribe-editor__rsvp-duration"},wp.element.createElement(He,null),wp.element.createElement(et,null),t&&wp.element.createElement("span",{className:"tribe-editor__rsvp-duration__error"},Object(i.__)("There is an error with the selected sales duration. Please fix the issue before saving.","event-tickets")))}),nt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{hasDurationError:ve.d.getRSVPHasDurationError(e)}}))(tt),rt=(n(498),function(e){var t=e.moveRSVP,n=e.removeRSVP,r=e.isDisabled;return wp.element.createElement("div",{className:"tribe-editor__rsvp__content-row--move-delete"},wp.element.createElement(Se.Button,{type:"button",onClick:t,disabled:r},Object(i.__)("Move RSVP","event-tickets")),wp.element.createElement(Se.Button,{type:"button",onClick:n,disabled:r},Object(i.__)("Remove RSVP","event-tickets")))});rt.propTypes={moveRSVP:d.a.func.isRequired,removeRSVP:d.a.func.isRequired,isDisabled:d.a.bool.isRequired};var at=rt,it=n(68),st=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{created:ve.d.getRSVPCreated(e),rsvpId:ve.d.getRSVPId(e),isDisabled:ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)}},function(e,t){return{moveRSVP:function(n){return e(Object(it.c)(n,t.clientId))},dispatch:e}},function(e,t,n){var r=t.dispatch,a=Ke()(t,["dispatch"]);return Ve()({},n,e,a,{removeRSVP:function(){window.confirm(Object(i.__)("Are you sure you want to delete this RSVP? It cannot be undone.","event-tickets"))&&(r(ve.a.deleteRSVP()),e.created&&e.rsvpId&&r(ve.e.deleteRSVP(e.rsvpId)),Object(ie.dispatch)("core/editor").removeBlocks([n.clientId]))},moveRSVP:function(){return t.moveRSVP(e.rsvpId)}})}))(at),ot=(n(499),function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.getContent=function(){return wp.element.createElement(c.Fragment,null,wp.element.createElement(nt,null),n.props.hasBeenCreated&&wp.element.createElement(st,{clientId:n.props.clientId}))},n.getHeader=function(){return wp.element.createElement(c.Fragment,null,wp.element.createElement(Te.Dashicon,{className:"tribe-editor__rsvp__advanced-options-header-icon",icon:"arrow-down"}),wp.element.createElement("span",{className:"tribe-editor__rsvp__advanced-options-header-text"},Object(i.__)("Advanced Options","event-tickets")))},n.getRows=function(){return[{accordionId:n.accordionId,content:n.getContent(),contentClassName:"tribe-editor__rsvp__advanced-options-content",header:n.getHeader(),headerAttrs:{disabled:n.props.isDisabled},headerClassName:"tribe-editor__rsvp__advanced-options-header"}]},n.accordionId=Ce()(),n}return me()(t,e),ue()(t,[{key:"render",value:function(){return wp.element.createElement(Se.Accordion,{className:"tribe-editor__rsvp__advanced-options",rows:this.getRows()})}}]),t}(c.PureComponent));ot.propTypes={isDisabled:d.a.bool.isRequired,hasBeenCreated:d.a.bool,clientId:d.a.string};var ct=ot,ut=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)},dt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isDisabled:ut(e),hasBeenCreated:ve.d.getRSVPCreated(e)}}))(ct),_t=(n(500),Object(i.__)("+ Add","event-tickets")),lt=Object(i.__)("Edit","event-tickets"),mt=function(e){var t=e.attendeeRegistrationURL,n=e.hasAttendeeInfoFields,r=e.isCreated,a=e.isDisabled,s=e.isModalOpen,o=e.onClick,c=e.onClose,u=e.onIframeLoad,d=n?lt:_t;return wp.element.createElement(he.AttendeesRegistration,{helperText:Object(i.__)("Save your RSVP to enable attendee information fields","event-tickets"),iframeURL:t,isDisabled:a,isModalOpen:s,label:Object(i.__)("Attendee Information","event-tickets"),linkText:d,modalTitle:Object(i.__)("Attendee Information","event-tickets"),onClick:o,onClose:c,onIframeLoad:u,showHelperText:!r})};mt.propTypes={attendeeRegistrationURL:d.a.string.isRequired,hasAttendeeInfoFields:d.a.bool.isRequired,isCreated:d.a.bool.isRequired,isDisabled:d.a.bool.isRequired,isModalOpen:d.a.bool.isRequired,onClick:d.a.func.isRequired,onClose:d.a.func.isRequired,onIframeLoad:d.a.func.isRequired};var pt=mt,ft=function(e){return ze.globals.adminUrl()+"edit.php?post_type="+Object(ie.select)("core/editor").getCurrentPostType()+"&page=attendee-registration&ticket_id="+ve.d.getRSVPId(e)+"&tribe_events_modal=1"},Tt=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)||!ve.d.getRSVPCreated(e)},ht=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{attendeeRegistrationURL:ft(e),hasAttendeeInfoFields:ve.d.getRSVPHasAttendeeInfoFields(e),isCreated:ve.d.getRSVPCreated(e),isDisabled:Tt(e),isModalOpen:ve.d.getRSVPIsModalOpen(e)}},function(e,t){return{onClick:function(){e(ve.a.setRSVPIsModalOpen(!0))},onClose:function(){e(ve.a.setRSVPIsModalOpen(!1))},onIframeLoad:function(t){var n=t.contentWindow,r=function(){t.nextSibling.classList.add("tribe-editor__attendee-registration__modal-overlay--show")},a=n.document.querySelector("#event-tickets-attendee-information");a.addEventListener("submit",r);var i=function(){n.removeEventListener("unload",s),a.removeEventListener("submit",r)},s=function(){i();var t=n.document.querySelector("#tribe-tickets-attendee-sortables"),r=Boolean(t.firstElementChild);e(ve.a.setRSVPHasAttendeeInfoFields(r)),e(ve.a.setRSVPIsModalOpen(!1))};n.addEventListener("unload",s);var o=n.document.querySelector(".tribe-intro > a");o&&o.setAttribute("target","_blank")}}}))(pt),yt=(n(501),function(){return wp.element.createElement("div",{className:"tribe-editor__rsvp-container-content__labels"},wp.element.createElement("span",{className:"tribe-editor__rsvp-container-content__capacity-label"},Object(i.__)("RSVP Capacity","event-tickets")),wp.element.createElement("span",{className:"tribe-editor__rsvp-container-content__capacity-label-help"},Object(i.__)("Leave blank if unlimited","event-tickets")))}),bt=function(e){var t=e.capacityId,n=e.isDisabled,r=e.notGoingId,a=e.onTempCapacityChange,s=e.onTempNotGoingResponsesChange,o=e.tempCapacity,c=e.tempNotGoingResponses;return wp.element.createElement("div",{className:"tribe-editor__rsvp-container-content__options"},wp.element.createElement(Se.NumberInput,{className:"tribe-editor__rsvp-container-content__capacity-input",disabled:n,id:t,min:0,onChange:a,value:o}),wp.element.createElement(Se.Checkbox,{checked:c,className:"tribe-editor__rsvp-container-content__not-going-responses",disabled:n,id:r,label:Object(i.__)('Enable "Not Going" responses',"event-tickets"),onChange:s}))};bt.propTypes={capacityId:d.a.string.isRequired,isDisabled:d.a.bool.isRequired,notGoingId:d.a.string.isRequired,onTempCapacityChange:d.a.func.isRequired,onTempNotGoingResponsesChange:d.a.func.isRequired,tempCapacity:d.a.string.isRequired,tempNotGoingResponses:d.a.bool.isRequired};var Mt=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.capacityId=Ce()(),n.notGoingId=Ce()(),n}return me()(t,e),ue()(t,[{key:"render",value:function(){var e=this.props,t=e.isDisabled,n=e.onTempCapacityChange,r=e.onTempNotGoingResponsesChange,a=e.tempCapacity,i=e.tempNotGoingResponses,s=e.clientId,o={capacityId:this.capacityId,isDisabled:t,notGoingId:this.notGoingId,onTempCapacityChange:n,onTempNotGoingResponsesChange:r,tempCapacity:a,tempNotGoingResponses:i};return wp.element.createElement(c.Fragment,null,wp.element.createElement(yt,null),wp.element.createElement(bt,o),wp.element.createElement(dt,{clientId:s}),this.props.hasTicketsPlus&&wp.element.createElement(ht,null))}}]),t}(c.PureComponent);Mt.propTypes={clientId:d.a.string,hasTicketsPlus:d.a.bool,onTempCapacityChange:d.a.func,onTempNotGoingResponsesChange:d.a.func,tempCapacity:d.a.string,tempNotGoingResponses:d.a.bool};var St=Mt,Et=n(31),gt=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)},vt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),isDisabled:gt(e),tempCapacity:ve.d.getRSVPTempCapacity(e),tempNotGoingResponses:ve.d.getRSVPTempNotGoingResponses(e)}},function(e){return{onTempCapacityChange:function(t){e(ve.a.setRSVPTempCapacity(t.target.value)),e(ve.a.setRSVPHasChanges(!0))},onTempNotGoingResponsesChange:function(t){e(ve.a.setRSVPTempNotGoingResponses(t.target.checked)),e(ve.a.setRSVPHasChanges(!0))}}}))(St),kt=(n(502),function(e){var t=e.isDisabled;return wp.element.createElement(c.Fragment,null,t?wp.element.createElement(s.RSVPInactive,null):wp.element.createElement(s.RSVPActive,null),wp.element.createElement("span",{className:"tribe-editor__rsvp-container__icon-label"},Object(i.__)("RSVP","event-tickets")))});kt.propTypes={isDisabled:d.a.bool.isRequired};var Dt=function(e){var t=e.isDisabled,n=e.isSelected,r=e.clientId;return wp.element.createElement(he.ContainerPanel,{className:fe()("tribe-editor__rsvp-container",{"tribe-editor__rsvp-container--disabled":t}),layout:ye.a.rsvp,icon:wp.element.createElement(kt,{isDisabled:t}),header:wp.element.createElement(Ie,{isSelected:n}),content:wp.element.createElement(vt,{clientId:r})})};Dt.propTypes={isDisabled:d.a.bool.isRequired,isSelected:d.a.bool.isRequired,clientId:d.a.string.isRequired};var Lt=Dt,Ot=function(e){return ve.d.getRSVPIsLoading(e)||ve.d.getRSVPSettingsOpen(e)},Yt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isDisabled:Ot(e)}}))(Lt),wt=function(e){var t=e.href,n=e.isDisabled;return wp.element.createElement(he.ActionButton,{asLink:!0,className:"tribe-editor__rsvp__action-button tribe-editor__rsvp__action-button--attendees",disabled:n,href:t,icon:wp.element.createElement(s.Attendees,null),target:"_blank"},Object(i.__)("Attendees","event-tickets"))};wt.propTypes={href:d.a.string,isDisabled:d.a.bool};var jt=wt,It=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{href:ze.globals.adminUrl()+"edit.php?post_type="+Object(ie.select)("core/editor").getCurrentPostType()+"&page=tickets-attendees&event_id="+Object(ie.select)("core/editor").getCurrentPostId(),isDisabled:ve.d.getRSVPIsLoading(e)}}))(jt),Pt=n(53),Ct=function(e){var t=e.isDisabled,n=e.onClick;return wp.element.createElement(he.ActionButton,{className:"tribe-editor__rsvp__action-button tribe-editor__rsvp__action-button--settings",disabled:t,icon:wp.element.createElement(Le.Cog,null),onClick:n},Object(i.__)("Settings","event-tickets"))};Ct.defaultProps={onClick:n.n(Pt).a},Ct.propTypes={isDisabled:d.a.bool,onClick:d.a.func};var xt=Ct,Rt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isDisabled:ve.d.getRSVPIsLoading(e)}},function(e){return{onClick:function(){return e(ve.a.setRSVPSettingsOpen(!0))}}}))(xt),At=(n(503),function(e){return e?Object(i.__)("Update RSVP","event-tickets"):Object(i.__)("Create RSVP","event-tickets")}),Ht=Object(i.__)("Cancel","event-tickets"),Nt=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.onWarningClick=function(){n.setState({isWarningOpen:!n.state.isWarningOpen})},n.getActions=function(){var e=n.props,t=e.created,r=(e.hasTicketsPlus,e.hasRecurrenceRules),a=e.isLoading,s=[wp.element.createElement(Rt,null)];if(t&&s.push(wp.element.createElement(It,null)),r){var o=n.state.isWarningOpen?"no":"info-outline",c=n.state.isWarningOpen?Object(i.__)("Hide Warning","event-tickets"):Object(i.__)("Warning","event-tickets");s.push(wp.element.createElement(he.WarningButton,{icon:o,onClick:n.onWarningClick,isDisabled:a},c))}return s},n.state={isWarningOpen:!1},n}return me()(t,e),ue()(t,[{key:"render",value:function(){var e=this.props,t=e.created,n=e.isCancelDisabled,r=e.isConfirmDisabled,a=e.onCancelClick,s=e.onConfirmClick,o=e.showCancel;return wp.element.createElement(c.Fragment,null,wp.element.createElement(he.ActionDashboard,{className:"tribe-editor__rsvp__action-dashboard",actions:this.getActions(),cancelLabel:Ht,confirmLabel:At(t),isCancelDisabled:n,isConfirmDisabled:r,onCancelClick:a,onConfirmClick:s,showCancel:o}),this.state.isWarningOpen&&wp.element.createElement("div",{className:"tribe-editor__rsvp__warning"},Object(i.__)("This is a recurring event. If you add tickets they will only show up on the next upcoming event in the recurrence pattern. The same ticket form will appear across all events in the series. Please configure your events accordingly.","event-tickets")))}}]),t}(c.PureComponent);Nt.propTypes={created:d.a.bool.isRequired,hasTicketsPlus:d.a.bool.isRequired,hasRecurrenceRules:d.a.bool.isRequired,isCancelDisabled:d.a.bool.isRequired,isConfirmDisabled:d.a.bool.isRequired,isLoading:d.a.bool.isRequired,onCancelClick:d.a.func.isRequired,onConfirmClick:d.a.func.isRequired,showCancel:d.a.bool.isRequired};var Vt=Nt,Ft=function(e){var t=!1;try{t=window.tribe[Et.plugins.constants.EVENTS_PRO_PLUGIN].data.blocks.recurring.selectors.hasRules(e)}catch(e){}return t},Kt=function(e){return!ve.d.getRSVPTempTitle(e)||!ve.d.getRSVPHasChanges(e)||ve.d.getRSVPIsLoading(e)||ve.d.getRSVPHasDurationError(e)},Wt=function(e,t){return function(){t(ve.a.setRSVPTempDetails({tempTitle:ve.d.getRSVPTitle(e),tempDescription:ve.d.getRSVPDescription(e),tempCapacity:ve.d.getRSVPCapacity(e),tempNotGoingResponses:ve.d.getRSVPNotGoingResponses(e),tempStartDate:ve.d.getRSVPStartDate(e),tempStartDateInput:ve.d.getRSVPStartDateInput(e),tempStartDateMoment:ve.d.getRSVPStartDateMoment(e),tempEndDate:ve.d.getRSVPEndDate(e),tempEndDateInput:ve.d.getRSVPEndDateInput(e),tempEndDateMoment:ve.d.getRSVPEndDateMoment(e),tempStartTime:ve.d.getRSVPStartTime(e),tempEndTime:ve.d.getRSVPEndTime(e),tempStartTimeInput:ve.d.getRSVPStartTimeInput(e),tempEndTimeInput:ve.d.getRSVPEndTimeInput(e)})),t(ve.a.setRSVPHasChanges(!1)),Object(ie.dispatch)("core/editor").clearSelectedBlock()}},Ut=function(e,t){return function(){var n={title:ve.d.getRSVPTempTitle(e),description:ve.d.getRSVPTempDescription(e),capacity:ve.d.getRSVPTempCapacity(e),notGoingResponses:ve.d.getRSVPTempNotGoingResponses(e),startDate:ve.d.getRSVPTempStartDate(e),startDateInput:ve.d.getRSVPTempStartDateInput(e),startDateMoment:ve.d.getRSVPTempStartDateMoment(e),endDate:ve.d.getRSVPTempEndDate(e),endDateInput:ve.d.getRSVPTempEndDateInput(e),endDateMoment:ve.d.getRSVPTempEndDateMoment(e),startTime:ve.d.getRSVPTempStartTime(e),endTime:ve.d.getRSVPTempEndTime(e),startTimeInput:ve.d.getRSVPTempStartTimeInput(e),endTimeInput:ve.d.getRSVPTempEndTimeInput(e)};ve.d.getRSVPCreated(e)?t(ve.e.updateRSVP(Ve()({},n,{id:ve.d.getRSVPId(e)}))):t(ve.e.createRSVP(Ve()({},n,{postId:Object(ie.select)("core/editor").getCurrentPostId()})))}},zt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{created:ve.d.getRSVPCreated(e),hasRecurrenceRules:Ft(e),hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),isCancelDisabled:ve.d.getRSVPIsLoading(e),isConfirmDisabled:Kt(e),isLoading:ve.d.getRSVPIsLoading(e),showCancel:ve.d.getRSVPCreated(e),state:e}},null,function(e,t,n){var r=e.state,a=Ke()(e,["state"]),i=t.dispatch;return Ve()({},n,a,{onCancelClick:Wt(r,i),onConfirmClick:Ut(r,i)})}))(Vt),Gt=(n(504),function(e){var t=e.image,n=e.isSettingsLoading,r=e.onRemove,a=e.onSelect,s={title:Object(i.__)("Ticket Header Image","event-tickets"),description:Object(i.__)("Select an image from your Media Library to display on emailed tickets and RSVPs. For best results, use a .jpg, .png, or .gif at least 1160px wide.","event-tickets"),className:"tribe-editor__rsvp__image-upload",buttonDisabled:n,buttonLabel:Object(i.__)("Upload Image","event-tickets"),image:t,onRemove:r,onSelect:a,removeButtonDisabled:n};return wp.element.createElement(Se.ImageUpload,s)});Gt.propTypes={image:d.a.shape({alt:d.a.string.isRequired,id:d.a.number.isRequired,src:d.a.string.isRequired}).isRequired,isSettingsLoading:d.a.bool.isRequired,onRemove:d.a.func.isRequired,onSelect:d.a.func.isRequired};var Bt=Gt,qt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{image:{id:ve.d.getRSVPHeaderImageId(e),alt:ve.d.getRSVPHeaderImageAlt(e),src:ve.d.getRSVPHeaderImageSrc(e)},isSettingsLoading:ve.d.getRSVPIsSettingsLoading(e)}},function(e){return{onRemove:function(){return e(ve.a.deleteRSVPHeaderImage())},onSelect:function(t){return e(ve.a.updateRSVPHeaderImage(t))}}}))(Bt),Jt=(n(505),function(e){var t=e.isSettingsLoading,n=e.onCloseClick;return wp.element.createElement(he.SettingsDashboard,{className:fe()("tribe-editor__rsvp__settings-dashboard",{"tribe-editor__rsvp__settings-dashboard--loading":t}),closeButtonDisabled:t,content:wp.element.createElement(c.Fragment,null,wp.element.createElement(qt,null),t&&wp.element.createElement(Te.Spinner,null)),onCloseClick:n})});Jt.propTypes={isSettingsLoading:d.a.bool.isRequired,onCloseClick:d.a.func.isRequired};var $t=Jt,Zt=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isSettingsLoading:ve.d.getRSVPIsSettingsLoading(e)}},function(e){return{onCloseClick:function(){return e(ve.a.setRSVPSettingsOpen(!1))}}}))($t),Qt=function(e){var t=e.isSelected,n=e.isSettingsOpen;return t?n?wp.element.createElement(Zt,null):wp.element.createElement(zt,null):null};Qt.propTypes={isSelected:d.a.bool.isRequired,isSettingsOpen:d.a.bool.isRequired};var Xt=Qt,en=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isSettingsOpen:ve.d.getRSVPSettingsOpen(e)}}))(Xt),tn=n(95),nn={className:"tribe-editor__rsvp__inactive-block",icon:wp.element.createElement(s.RSVPInactive,null),layout:tn.a.rsvp},rn=function(e){var t=e.created;return nn.title=t?Object(i.__)("RSVP is not currently active","event-tickets"):Object(i.__)("There is no RSVP configured","event-tickets"),nn.description=t?Object(i.__)("Edit this block to change RSVP settings.","event-tickets"):Object(i.__)("Edit this block to create an RSVP form.","event-tickets"),wp.element.createElement(tn.b,nn)};rn.propTypes={created:d.a.bool.isRequired};var an=rn,sn=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{created:ve.d.getRSVPCreated(e)}}))(an),on=n(28),cn=n(19),un=(n(506),function(e){function t(){var e,n,r,a;oe()(this,t);for(var s=arguments.length,o=Array(s),c=0;c<s;c++)o[c]=arguments[c];return n=r=_e()(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(o))),r.renderPostTypes=function(){return r.props.isFetchingPosts?wp.element.createElement(Te.Spinner,null):r.props.postOptions.length?wp.element.createElement(Te.MenuGroup,null,wp.element.createElement(Te.MenuItemsChoice,{choices:r.props.postOptions,value:r.props.postValue,onSelect:r.props.onPostSelect})):wp.element.createElement(Te.Notice,{isDismissible:!1,status:"warning"},Object(i.__)("No posts found","event-tickets"))},a=n,_e()(r,a)}return me()(t,e),ue()(t,[{key:"componentDidMount",value:function(){this.props.initialize()}},{key:"render",value:function(){return wp.element.createElement(Te.Modal,{title:this.props.title,onRequestClose:this.props.hideModal,className:"tribe-editor__tickets__move-modal"},wp.element.createElement("label",{htmlFor:"post_type"},Object(i.__)("You can optionally focus on a specific post type:","event-tickets")),wp.element.createElement(Se.Select,{id:"post_type",options:this.props.postTypeOptions,onChange:this.props.onPostTypeChange,value:this.props.postTypeOptionValue}),wp.element.createElement("label",{htmlFor:"search"},Object(i.__)("You can also enter keywords to help find the target event by title or description","event-tickets")),wp.element.createElement(Se.Input,{id:"search",type:"text",onChange:this.props.onSearchChange,value:this.props.search}),wp.element.createElement("label",null,Object(i.__)("Select the post you wish to move the ticket type to:","event-tickets")),this.renderPostTypes(),wp.element.createElement("footer",null,wp.element.createElement(Te.Button,{isLarge:!0,isPrimary:!0,isBusy:this.props.isModalSubmitting,disabled:!this.props.hasSelectedPost||this.props.isFetchingPosts,onClick:this.props.onSubmit},Object(i.__)("Finish!","event-tickets"))))}}]),t}(c.PureComponent));un.propTypes={hasSelectedPost:d.a.bool.isRequired,hideModal:d.a.func.isRequired,initialize:d.a.func.isRequired,isFetchingPosts:d.a.bool.isRequired,isModalSubmitting:d.a.bool.isRequired,onPostSelect:d.a.func.isRequired,onPostTypeChange:d.a.func.isRequired,onSearchChange:d.a.func.isRequired,onSubmit:d.a.func.isRequired,postOptions:d.a.arrayOf(d.a.object),postTypeOptions:d.a.arrayOf(d.a.object),postTypeOptionValue:d.a.object,postValue:d.a.string.isRequired,search:d.a.string.isRequired,title:d.a.string.isRequired},un.defaultProps={title:Object(i.__)("Move Ticket Types","event-tickets")};var dn=un,_n=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{hasSelectedPost:on.i(e),isFetchingPosts:on.k(e),isFetchingPostTypes:on.j(e),isModalSubmitting:on.m(e),postOptions:on.f(e),postTypeOptions:on.h(e),postTypeOptionValue:on.g(e),postValue:on.d(e),search:on.c(e)}},function(e,t){return{initialize:function(){return e({type:cn.h})},hideModal:function(){return e(Object(it.a)())},onSearchChange:function(t){return e(Object(it.b)({search_terms:t.target.value}))},onPostTypeChange:function(t){return e(Object(it.b)({post_type:t.value}))},onPostSelect:function(t){return e(Object(it.b)({target_post_id:t}))},onSubmit:function(){return e({type:cn.o})}}}))(dn),ln=(n(507),function(e){function t(){return oe()(this,t),_e()(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return me()(t,e),ue()(t,[{key:"componentDidMount",value:function(){!this.props.rsvpId&&this.props.initializeRSVP()}},{key:"render",value:function(){var e=this.props,t=e.created,n=e.isInactive,r=e.isLoading,a=e.isSelected,i=e.clientId,s=e.isModalShowing;return wp.element.createElement(c.Fragment,null,!a&&(t&&n||!t)?wp.element.createElement(sn,null):wp.element.createElement("div",{className:fe()("tribe-editor__rsvp",{"tribe-editor__rsvp--selected":a},{"tribe-editor__rsvp--loading":r})},wp.element.createElement(Yt,{isSelected:a,clientId:i}),wp.element.createElement(en,{isSelected:a}),r&&wp.element.createElement(Te.Spinner,null)),s&&wp.element.createElement(_n,null))}}]),t}(c.PureComponent));ln.propTypes={clientId:d.a.string.isRequired,created:d.a.bool.isRequired,initializeRSVP:d.a.func.isRequired,isInactive:d.a.bool.isRequired,isLoading:d.a.bool.isRequired,isModalShowing:d.a.bool.isRequired,isSelected:d.a.bool.isRequired,rsvpId:d.a.number.isRequired};var mn=ln,pn=function(e){var t=ve.d.getRSVPStartDateMoment(e),n=ve.d.getRSVPStartTimeNoSeconds(e),r=ve.d.getRSVPEndDateMoment(e),a=ve.d.getRSVPEndTimeNoSeconds(e);if(!t||!r)return!1;var i=ze.moment.setTimeInSeconds(t.clone(),ze.time.toSeconds(n,ze.time.TIME_FORMAT_HH_MM)),s=ze.moment.setTimeInSeconds(r.clone(),ze.time.toSeconds(a,ze.time.TIME_FORMAT_HH_MM)),o=ae()();return!(o.isAfter(i)&&o.isBefore(s))},fn=function(e,t){return function(){var n=Object(ie.select)("core/editor").getCurrentPostId();e(ve.e.getRSVP(n));var r=t.attributes,a=void 0===r?{}:r;parseInt(a.headerImageId,10)&&e(ve.a.fetchRSVPHeaderImage(a.headerImageId)),a.goingCount&&e(ve.a.setRSVPGoingCount(parseInt(a.goingCount,10))),a.notGoingCount&&e(ve.a.setRSVPNotGoingCount(parseInt(a.notGoingCount,10)))}},Tn=Object(j.c)(Object(ke.withStore)(),ne(function(e){var t=ve.d.getRSVPId(e);return{created:ve.d.getRSVPCreated(e),isInactive:pn(e),isLoading:ve.d.getRSVPIsLoading(e),isModalShowing:Object(on.l)(e)&&Object(on.e)(e)===t,rsvpId:t}},function(e,t){return{initializeRSVP:function(){return e(ve.a.initializeRSVP())},onBlockRemoved:function(){return e(ve.a.deleteRSVP())},setInitialState:fn(e,t)}}),Object(ke.withSaveData)())(mn),hn=n(8),yn={id:"rsvp",title:Object(i.__)("RSVP","event-tickets"),description:Object(i.__)("Find out who is planning to attend!","event-tickets"),icon:wp.element.createElement(s.RSVP,null),category:"tribe-tickets",keywords:["event","events-gutenberg","tribe"],supports:{html:!1,multiple:!1},attributes:{goingCount:{type:"integer",source:"meta",meta:hn.g},notGoingCount:{type:"integer",source:"meta",meta:hn.j},headerImageId:{type:"integer",source:"meta",meta:hn.i}},edit:Tn,save:function(){return null}},bn=n(96),Mn=function(e){var t=e.onClick;return wp.element.createElement(he.ActionButton,{icon:wp.element.createElement(Le.Cog,null),onClick:t},Object(i.__)("Settings","event-tickets"))};Mn.propTypes={onClick:d.a.func};var Sn=Mn,En=n(6),gn=Object(j.c)(Object(ke.withStore)(),ne(null,function(e){return{onClick:function(){return e(En.a.openSettings())}}}))(Sn),vn=function(e){var t=e.href;return t?wp.element.createElement(he.ActionButton,{asLink:!0,href:t,icon:wp.element.createElement(s.Orders,null),target:"_blank"},Object(i.__)("Orders","event-tickets")):null};vn.propTypes={href:d.a.string.isRequired};var kn=vn,Dn=Object(j.c)(Object(ke.withStore)(),ne(function(e){var t=ze.globals.adminUrl(),n=Object(ie.select)("core/editor").getCurrentPostType(),r=Object(ie.select)("core/editor").getCurrentPostId(),a=En.f.getTicketsProvider(e),i=En.b.TICKET_ORDERS_PAGE_SLUG[a];return{href:i?t+"edit.php?post_type="+n+"&page="+i+"&event_id="+r:""}}))(kn),Ln=function(e){var t=e.href;return e.canCreateTickets&&wp.element.createElement(he.ActionButton,{asLink:!0,href:t,icon:wp.element.createElement(s.Attendees,null),target:"_blank"},Object(i.__)("Attendees","event-tickets"))};Ln.propTypes={href:d.a.string.isRequired,canCreateTickets:d.a.bool};var On=Ln,Yn=Object(j.c)(Object(ke.withStore)(),ne(function(){return{href:ze.globals.adminUrl()+"edit.php?post_type="+Object(ie.select)("core/editor").getCurrentPostType()+"&page=tickets-attendees&event_id="+Object(ie.select)("core/editor").getCurrentPostId(),canCreateTickets:En.f.canCreateTickets()}}))(On),wn=(n(508),Object(i.__)("Add Tickets","event-tickets")),jn=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.onWarningClick=function(){n.setState({isWarningOpen:!n.state.isWarningOpen})},n.getActions=function(){var e=n.props,t=e.hasCreatedTickets,r=e.hasOrdersPage,a=e.hasRecurrenceRules,s=(e.hasTicketsPlus,[wp.element.createElement(gn,null)]);if(t&&(s.push(wp.element.createElement(Yn,null)),r&&s.push(wp.element.createElement(Dn,null))),a){var o=n.state.isWarningOpen?"no":"info-outline",c=n.state.isWarningOpen?Object(i.__)("Hide Warning","event-tickets"):Object(i.__)("Warning","event-tickets");s.push(wp.element.createElement(he.WarningButton,{icon:o,onClick:n.onWarningClick},c))}return s},n.state={isWarningOpen:!1},n}return me()(t,e),ue()(t,[{key:"render",value:function(){var e=this.props.onConfirmClick;return wp.element.createElement(c.Fragment,null,wp.element.createElement(he.ActionDashboard,{className:"tribe-editor__tickets__action-dashboard",actions:this.getActions(),confirmLabel:wn,onConfirmClick:e,showCancel:!1}),this.state.isWarningOpen&&wp.element.createElement("div",{className:"tribe-editor__tickets__warning"},Object(i.__)("This is a recurring event. If you add tickets they will only show up on the next upcoming event in the recurrence pattern. The same ticket form will appear across all events in the series. Please configure your events accordingly.","event-tickets")))}}]),t}(c.PureComponent);jn.propTypes={hasCreatedTickets:d.a.bool,hasOrdersPage:d.a.bool,hasRecurrenceRules:d.a.bool,hasTicketsPlus:d.a.bool,onConfirmClick:d.a.func};var In=jn,Pn=function(e){var t=!1;try{t=window.tribe[Et.plugins.constants.EVENTS_PRO_PLUGIN].data.blocks.recurring.selectors.hasRules(e)}catch(e){}return t},Cn=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){var n=En.f.getTicketsProvider(e),a=En.b.TICKET_ORDERS_PAGE_SLUG[n];return{hasCreatedTickets:En.f.hasCreatedTickets(e),hasOrdersPage:Boolean(a),hasRecurrenceRules:Pn(e),hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),onConfirmClick:function(){var e=t.clientId,n=Object(ie.select)("core/editor").getBlockCount,a=Object(ie.dispatch)("core/editor").insertBlock,i=n(e);a(Object(r.createBlock)("tribe/tickets-item",{}),i,e)}}}))(In),xn=(n(509),function(e){var t=e.label,n=e.items,r=e.right;return wp.element.createElement("div",{className:"tribe-editor__tickets__capacity-row"},wp.element.createElement("span",{className:"tribe-editor__tickets__capacity-row-left"},t&&wp.element.createElement("span",{className:"tribe-editor__tickets__capacity-row-label"},t),n&&wp.element.createElement("span",{className:"tribe-editor__tickets__capacity-row-items"},n)),wp.element.createElement("span",{className:"tribe-editor__tickets__capacity-row-right"},r))});xn.propTypes={label:d.a.string,items:d.a.string,right:d.a.node},xn.defaultProps={label:"",items:"",right:""};var Rn=xn,An=(n(510),function(e){var t=e.isSettingsLoading,n=e.independentCapacity,r=e.sharedCapacity,a=e.independentAndSharedCapacity,s=e.independentTicketItems,o=e.sharedTicketItems,c=e.onSharedCapacityChange,u=wp.element.createElement(Se.NumberInput,{onChange:c,value:r,disabled:t,min:0});return wp.element.createElement("div",{className:"tribe-editor__tickets__capacity-table"},wp.element.createElement("h3",{className:"tribe-editor__tickets__capacity-table-title"},Object(i.__)("Capacity","event-tickets")),wp.element.createElement(Rn,{label:Object(i.__)("Shared capacity","event-tickets"),items:o,right:u}),wp.element.createElement(Rn,{label:Object(i.__)("Independent capacity","event-tickets"),items:s,right:n}),wp.element.createElement(Rn,{label:Object(i.__)("Total Capacity","event-tickets"),right:a}))});An.propTypes={isSettingsLoading:d.a.bool,independentCapacity:d.a.number,sharedCapacity:d.a.string,independentAndSharedCapacity:d.a.number,independentTicketItems:d.a.string,sharedTicketItems:d.a.string,onSharedCapacityChange:d.a.func};var Hn=An,Nn=function(e){var t=e.filter(function(e){return e.details.title}).map(function(e){return e.details.title}).join(", ");return t?" ("+t+") ":""},Vn=function(e){var t=En.f.getIndependentTickets(e);return Nn(t)},Fn=function(e){var t=En.f.getSharedTickets(e);return Nn(t)},Kn=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isSettingsLoading:En.f.getTicketsIsSettingsLoading(e),independentCapacity:En.f.getIndependentTicketsCapacity(e),sharedCapacity:En.f.getTicketsSharedCapacity(e),independentAndSharedCapacity:En.f.getIndependentAndSharedTicketsCapacity(e),independentTicketItems:Vn(e),sharedTicketItems:Fn(e)}},function(e){return{onSharedCapacityChange:function(t){e(En.a.setTicketsSharedCapacity(t.target.value)),e(En.a.setTicketsTempSharedCapacity(t.target.value))}}}))(Hn),Wn=(n(511),function(e){var t=e.image,n=e.isSettingsLoading,r=e.onRemove,a=e.onSelect,s={title:Object(i.__)("Ticket Header Image","event-tickets"),description:Object(i.__)("Select an image from your Media Library to display on emailed tickets and RSVPs. For best results, use a .jpg, .png, or .gif at least 1160px wide.","event-tickets"),className:"tribe-editor__rsvp__image-upload",buttonDisabled:n,buttonLabel:Object(i.__)("Upload Image","event-tickets"),image:t,onRemove:r,onSelect:a,removeButtonDisabled:n};return wp.element.createElement(Se.ImageUpload,s)});Wn.propTypes={image:d.a.shape({alt:d.a.string.isRequired,id:d.a.number.isRequired,src:d.a.string.isRequired}).isRequired,isSettingsLoading:d.a.bool.isRequired,onRemove:d.a.func.isRequired,onSelect:d.a.func.isRequired};var Un=Wn,zn=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{image:{id:En.f.getTicketsHeaderImageId(e),alt:En.f.getTicketsHeaderImageAlt(e),src:En.f.getTicketsHeaderImageSrc(e)},isSettingsLoading:En.f.getTicketsIsSettingsLoading(e)}},function(e){return{onSelect:function(t){return e(En.a.updateTicketsHeaderImage(t))},onRemove:function(){return e(En.a.deleteTicketsHeaderImage())}}}))(Un),Gn=(n(512),function(e){var t=e.hasTicketsPlus,n=e.isSettingsLoading,r=e.onCloseClick;return wp.element.createElement(he.SettingsDashboard,{className:fe()("tribe-editor__tickets__settings-dashboard",{"tribe-editor__tickets__settings-dashboard--loading":n}),closeButtonDisabled:n,content:wp.element.createElement(c.Fragment,null,t&&wp.element.createElement(Kn,null),wp.element.createElement(zn,null),n&&wp.element.createElement(Te.Spinner,null)),onCloseClick:r})});Gn.propTypes={hasTicketsPlus:d.a.bool,isSettingsLoading:d.a.bool.isRequired,onCloseClick:d.a.func.isRequired};var Bn=Gn,qn=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),isSettingsLoading:En.f.getTicketsIsSettingsLoading(e)}},function(e){return{onCloseClick:function(){return e(En.a.closeSettings())}}}))(Bn),Jn=function(e){var t=e.clientId,n=e.isSelected,r=e.isSettingsOpen;return n?r?wp.element.createElement(qn,null):wp.element.createElement(Cn,{clientId:t}):null};Jn.propTypes={clientId:d.a.string,isSelected:d.a.bool,isSettingsOpen:d.a.bool};var $n=Jn,Zn=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{isSettingsOpen:En.f.getTicketsIsSettingsOpen(e)}}))($n),Qn=(n(513),function(e){var t=e.available,n=e.total,r=wp.element.createElement(he.NumericLabel,{className:fe()("tribe-editor__tickets__availability-label","tribe-editor__tickets__availability-label--available","tribe-tooltip"),count:t,singular:Object(i.__)("%d ticket available","event-tickets"),plural:Object(i.__)("%d tickets available","event-tickets")}),a=wp.element.createElement(he.NumericLabel,{className:fe()("tribe-editor__tickets__availability-label","tribe-editor__tickets__availability-label--total"),count:n,singular:Object(i.__)("%d total ticket","event-tickets"),plural:Object(i.__)("%d total tickets","event-tickets")});return wp.element.createElement("div",{className:"tribe-editor__tickets__availability"},wp.element.createElement("span",{class:"tribe-tooltip",title:Object(i.__)("Ticket availability is based on the lowest number of inventory, stock, and capacity.","event-tickets")},r,wp.element.createElement("span",{className:"dashicons dashicons-info"})),a)});Qn.propTypes={available:d.a.number,total:d.a.number};var Xn=Qn,er=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{total:En.f.getIndependentAndSharedTicketsCapacity(e),available:En.f.getIndependentAndSharedTicketsAvailable(e)}}))(Xn),tr=(n(514),function(){return wp.element.createElement("div",{className:"tribe-editor__tickets__overlay"})}),nr=function(e){var t=e.allTicketsPast,n=e.canCreateTickets,r=e.hasCreatedTickets,a=e.hasOverlay,o=e.showAvailability,c=e.showInactiveBlock,u={title:"",description:""};n?r?u.title=t?Object(i.__)("Tickets are no longer available","event-tickets"):Object(i.__)("Tickets are not yet available","event-tickets"):(u.title=Object(i.__)("There are no tickets yet","event-tickets"),u.description=Object(i.__)("Edit this block to create your first ticket.","event-tickets")):(u.title=Object(i.__)("There is no ecommerce available","event-tickets"),u.description=Object(i.__)("To create tickets, you'll need to enable an ecommerce solution.","event-tickets"));var d=fe()({"tribe-editor__tickets__inner-blocks":!0,"tribe-editor__tickets__inner-blocks--show":!c});return wp.element.createElement("div",{className:"tribe-editor__tickets__container"},wp.element.createElement("div",{className:d},wp.element.createElement(bn.InnerBlocks,{allowedBlocks:["tribe/tickets-item"]})),c&&wp.element.createElement(he.InactiveBlock,{layout:tn.a.ticket,title:u.title,description:u.description,icon:wp.element.createElement(s.TicketInactive,null)}),o&&wp.element.createElement(er,null),a&&wp.element.createElement(tr,null))};nr.propTypes={allTicketsPast:d.a.bool,canCreateTickets:d.a.bool,hasCreatedTickets:d.a.bool,hasOverlay:d.a.bool,showAvailability:d.a.bool,showInactiveBlock:d.a.bool};var rr=nr,ar=function(e,t){return En.f.getTicketsIsSettingsOpen(e)||!En.f.hasATicketSelected(e)&&!t.isSelected},ir=function(e,t){var n=t.isSelected&&!En.f.hasTickets(e),r=!(t.isSelected||En.f.hasATicketSelected(e)||En.f.hasCreatedTickets(e)&&En.f.hasTicketOnSale(e));return n||r},sr=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{allTicketsPast:En.f.allTicketsPast(e),canCreateTickets:En.f.canCreateTickets(),hasCreatedTickets:En.f.hasCreatedTickets(e),hasOverlay:ar(e,t),showAvailability:t.isSelected&&En.f.hasCreatedTickets(e),showInactiveBlock:ir(e,t)}}))(rr),or=(n(515),Object(i.__)("It looks like you have multiple ecommerce plugins active. We recommend running only one at a time. However, if you need to run multiple, please select which one to use to sell tickets for this event. ","event-tickets")),cr=Object(i.__)("Note: adjusting this setting will only impact new tickets. Existing tickets will not change. We highly recommend that all tickets for one event use the same ecommerce plugin","event-tickets"),ur=function(e){var t=e.provider,n=e.onProviderChange,r=Ke()(e,["provider","onProviderChange"]);return wp.element.createElement("div",{className:"tribe-editor__tickets-control-container"},wp.element.createElement("input",Ve()({className:"tribe-editor__tickets-control__input tribe-editor__tickets-control__input--radio",type:"radio",id:t.class,name:t.class,onChange:n},r)),wp.element.createElement("label",{className:"tribe-editor__tickets-control__label",htmlFor:t.class},t.name))},dr=function(e){var t=e.hasMultipleProviders,n=e.providers,r=e.selectedProvider,a=e.onProviderChange;return t&&wp.element.createElement(bn.InspectorControls,{key:"inspector"},wp.element.createElement(Te.PanelBody,{title:Object(i.__)("Tickets Settings","event-tickets")},wp.element.createElement(Te.PanelRow,null,wp.element.createElement("fieldset",{className:"tribe-editor__tickets-controls-provider"},wp.element.createElement("legend",null,Object(i.__)("Sell tickets using","event-tickets")),wp.element.createElement("p",null,or,wp.element.createElement("em",null,cr)),n.map(function(e,t){return wp.element.createElement(ur,{key:"provider-option-"+(t+1),provider:e,onProviderChange:a,checked:r===e.class})})))))};dr.propTypes={hasMultipleProviders:d.a.bool,providers:d.a.arrayOf(d.a.shape({name:d.a.string,class:d.a.string})),selectedProvider:d.a.string,onProviderChange:d.a.func};var _r=dr,lr=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{hasMultipleProviders:En.f.hasMultipleTicketProviders(),providers:En.f.getTicketProviders(),selectedProvider:En.f.getTicketsProvider(e)}},function(e){return{onProviderChange:function(t){return e(En.a.setTicketsProvider(t.target.name))}}}),Object(ke.withSaveData)())(_r),mr=(n(516),function(e){function t(){return oe()(this,t),_e()(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return me()(t,e),ue()(t,[{key:"componentDidMount",value:function(){this.props.onBlockUpdate(this.props.isSelected)}},{key:"componentDidUpdate",value:function(e){e.isSelected!==this.props.isSelected&&this.props.onBlockUpdate(this.props.isSelected)}},{key:"render",value:function(){var e=this.props,t=e.isSelected,n=e.canCreateTickets,r=e.isSettingsOpen,a=e.clientId;return wp.element.createElement("div",{className:fe()("tribe-editor__tickets",{"tribe-editor__tickets--selected":t},{"tribe-editor__tickets--settings-open":r})},wp.element.createElement(sr,{isSelected:t}),n&&wp.element.createElement(Zn,{isSelected:t,clientId:a}),wp.element.createElement(lr,null))}}]),t}(c.PureComponent));mr.propTypes={canCreateTickets:d.a.bool,clientId:d.a.string,hasProviders:d.a.bool,header:d.a.string,isSelected:d.a.bool,isSettingsOpen:d.a.bool,onBlockUpdate:d.a.func};var pr=mr,fr=Object(j.c)(Object(ke.withStore)(),ne(function(e){var t=En.f.getTicketsHeaderImageId(e);return{header:t?""+t:"",hasProviders:En.f.hasTicketProviders(),isSettingsOpen:En.f.getTicketsIsSettingsOpen(e),provider:En.f.getTicketsProvider(e),sharedCapacity:En.f.getTicketsSharedCapacity(e),canCreateTickets:En.f.canCreateTickets()}},function(e){return{setInitialState:function(t){e(En.a.setTicketsInitialState(t))},onBlockUpdate:function(t){e(En.a.setTicketsIsSelected(t))},onBlockRemoved:function(){e(En.a.resetTicketsBlock())}}}),Object(ke.withSaveData)())(pr),Tr={id:"tickets",title:Object(i.__)("Tickets","event-tickets"),description:Object(i.__)("Sell tickets and register attendees.","event-tickets"),icon:wp.element.createElement(s.Tickets,null),category:"tribe-tickets",keywords:["event","events-gutenberg","tribe"],supports:{html:!1,multiple:!1},attributes:{sharedCapacity:{type:"string",source:"meta",meta:hn.d},header:{type:"string",source:"meta",meta:hn.i},provider:{type:"string",source:"meta",meta:hn.e},tickets:{type:"array",source:"meta",meta:hn.c}},edit:fr,save:function(){return wp.element.createElement("div",null,wp.element.createElement(bn.InnerBlocks.Content,null))}},hr=(n(517),n(518),function(e){var t=e.hasAttendeeInfoFields,n=e.isDisabled,r=e.isSelected,a=e.onTempTitleChange,s=e.tempTitle,o=e.title,u=t&&wp.element.createElement(Se.Tooltip,{labelClassName:"tribe-editor__ticket__container-header-clipboard-tooltip",label:wp.element.createElement(Le.Clipboard,null),text:Object(i.__)("This ticket has Attendee Information Fields configured.","event-tickets")});return wp.element.createElement("div",{className:"tribe-editor__ticket__container-header-title"},r?wp.element.createElement(c.Fragment,null,wp.element.createElement(Me.a,{className:"tribe-editor__ticket__container-header-title-input",value:s,placeholder:Object(i.__)("Ticket Type *","event-tickets"),onChange:a,disabled:n,required:!0}),u):wp.element.createElement(c.Fragment,null,wp.element.createElement("h3",{className:"tribe-editor__ticket__container-header-title-label"},o),u,wp.element.createElement(Le.Pencil,null)))});hr.propTypes={hasAttendeeInfoFields:d.a.bool,isDisabled:d.a.bool,isSelected:d.a.bool,onTempTitleChange:d.a.func,tempTitle:d.a.string,title:d.a.string};var yr=hr,br=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{hasAttendeeInfoFields:En.f.getTicketHasAttendeeInfoFields(e,t),isDisabled:En.f.isTicketDisabled(e,t),tempTitle:En.f.getTicketTempTitle(e,t),title:En.f.getTicketTitle(e,t)}},function(e,t){return{onTempTitleChange:function(n){var r=t.clientId;e(En.a.setTicketTempTitle(r,n.target.value)),e(En.a.setTicketHasChanges(r,!0))}}}))(yr),Mr=(n(519),function(e){var t=e.isDisabled,n=e.isSelected,r=e.onTempDescriptionChange,a=e.tempDescription,s=e.description;return n?wp.element.createElement(Me.a,{className:"tribe-editor__ticket__container-header-description-input",value:a,placeholder:Object(i.__)("Description","event-tickets"),onChange:r,disabled:t}):wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-description"},s)});Mr.propTypes={isDisabled:d.a.bool,isSelected:d.a.bool,onTempDescriptionChange:d.a.func,tempDescription:d.a.string,description:d.a.string};var Sr=Mr,Er=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),tempDescription:En.f.getTicketTempDescription(e,t),description:En.f.getTicketDescription(e,t)}},function(e,t){return{onTempDescriptionChange:function(n){var r=t.clientId;e(En.a.setTicketTempDescription(r,n.target.value)),e(En.a.setTicketHasChanges(r,!0))}}}))(Sr),gr=n(23),vr=(n(520),function(e){var t=e.isDisabled,n=e.currencyPosition,r=e.currencySymbol,a=e.onTempPriceChange,s=e.tempPrice;return wp.element.createElement(c.Fragment,null,n===gr.PREFIX&&wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-price-currency"},r),wp.element.createElement(Me.a,{className:"tribe-editor__ticket__container-header-price-input",value:s,placeholder:Object(i.__)("0","event-tickets"),onChange:a,disabled:t,type:"number",min:"0"}),n===gr.SUFFIX&&wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-price-currency"},r))});vr.propTypes={isDisabled:d.a.bool,currencyPosition:d.a.oneOf(gr.PRICE_POSITIONS),currencySymbol:d.a.string,onTempPriceChange:d.a.func,tempPrice:d.a.string};var kr=function(e){var t=e.currencyPosition,n=e.currencySymbol,r=e.price;return wp.element.createElement(c.Fragment,null,t===gr.PREFIX&&wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-price-currency"},n),wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-price-value"},r),t===gr.SUFFIX&&wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-price-currency"},n))};kr.propTypes={currencyPosition:d.a.oneOf(gr.PRICE_POSITIONS),currencySymbol:d.a.string,price:d.a.string};var Dr=function(e){var t=e.isDisabled,n=e.isSelected,r=e.currencyPosition,a=e.currencySymbol,i=e.onTempPriceChange,s=e.tempPrice,o=e.price;return wp.element.createElement("div",{className:"tribe-editor__ticket__container-header-price"},n?wp.element.createElement(vr,{currencyPosition:r,currencySymbol:a,onTempPriceChange:i,tempPrice:s,isDisabled:t}):wp.element.createElement(kr,{currencyPosition:r,currencySymbol:a,price:o}))};Dr.propTypes={isDisabled:d.a.bool,isSelected:d.a.bool,currencyPosition:d.a.oneOf(gr.PRICE_POSITIONS),currencySymbol:d.a.string,onTempPriceChange:d.a.func,tempPrice:d.a.string,price:d.a.string};var Lr=Dr,Or=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),currencyPosition:En.f.getTicketCurrencyPosition(e,t),currencySymbol:En.f.getTicketCurrencySymbol(e,t),tempPrice:En.f.getTicketTempPrice(e,t),price:En.f.getTicketPrice(e,t)||"0"}},function(e,t){return{onTempPriceChange:function(n){var r=t.clientId;e(En.a.setTicketTempPrice(r,n.target.value)),e(En.a.setTicketHasChanges(r,!0))}}}))(Lr),Yr=(n(521),function(e){var t=e.children,n=e.className,r=e.value,a=e.total;if(0===r||0===a)return null;var i=void 0;try{i=ze.number.percentage(r,a)}catch(e){i=0}var s={width:Math.max(0,Math.min(100,i)).toFixed(2)+"%"};return wp.element.createElement("span",{className:fe()("tribe-editor__quantity-bar__bar",n),style:s},t)});Yr.propTypes={children:d.a.node,className:d.a.oneOfType([d.a.string,d.a.arrayOf(d.a.string),ze.TribePropTypes.nullType]),value:d.a.number,total:d.a.number},Yr.defaultProps={className:null,value:0,total:0};var wr=Yr,jr=function(e){var t=e.sharedSold,n=e.sold,r=e.capacity,a=e.total,s=e.isDisabled;return wp.element.createElement("div",{className:"tribe-editor__quantity-bar"},!s&&wp.element.createElement(c.Fragment,null,wp.element.createElement(wr,{className:"tribe-editor__quantity-bar__bar--shared-sold",value:t,total:a}),wp.element.createElement(wr,{className:"tribe-editor__quantity-bar__bar--sold",value:n,total:a}),!!r&&!(r===a)&&wp.element.createElement(wr,{className:"tribe-editor__quantity-bar__bar--capacity",value:r,total:a},wp.element.createElement("span",{className:"tribe-editor__quantity-bar__bar-label"},Object(i.__)("cap","event-tickets")))))};jr.propTypes={sharedSold:d.a.number,capacity:d.a.number,sold:d.a.number,total:d.a.number,isDisabled:d.a.bool},jr.defaultProps={sharedSold:0,capacity:0,sold:0,total:0,isDisabled:!1};var Ir=jr,Pr=(n(522),function(e){var t=e.isDisabled,n=e.isSelected,r=e.isShared,a=e.isUnlimited,s=e.sold,o=e.capacity,c=e.sharedSold,u=e.sharedCapacity,d=r?u:o;return!n&&wp.element.createElement("div",{className:"tribe-editor__ticket__container-header-quantity tribe-tooltip",title:Object(i.__)("This pertains to Orders that have been marked Completed.","event-tickets")},wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-quantity-label"},a?Object(i.sprintf)(Object(i.__)("%d sold","event-tickets"),s):Object(i.sprintf)(Object(i.__)("%d of %d sold","event-tickets"),s,d),wp.element.createElement("span",{class:"dashicons dashicons-info"})),a?wp.element.createElement("span",{className:"tribe-editor__ticket__container-header-quantity-unlimited"},Object(i.__)("unlimited","event-tickets")):wp.element.createElement(Ir,{sold:s,sharedSold:c,capacity:o,total:d,isDisabled:t}))});Pr.propTypes={isDisabled:d.a.bool,isSelected:d.a.bool,isShared:d.a.bool,isUnlimited:d.a.bool,sold:d.a.number,capacity:d.a.number,sharedSold:d.a.number,sharedCapacity:d.a.number},Pr.defaultProps={sold:0,sharedCapacity:0,capacity:0};var Cr=Pr,xr=function(e,t){return t?En.f.getSharedTicketsSold(e):0},Rr=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){var n=En.f.isSharedTicket(e,t);return{isDisabled:En.f.isTicketDisabled(e,t),isShared:n,isUnlimited:En.f.isUnlimitedTicket(e,t),sold:En.f.getTicketSold(e,t),capacity:En.f.getTicketCapacityInt(e,t),sharedSold:xr(e,n),sharedCapacity:En.f.getTicketsSharedCapacityInt(e)}}))(Cr),Ar=(n(523),function(e){var t=e.clientId,n=e.isSelected;return wp.element.createElement(c.Fragment,null,wp.element.createElement("div",{className:"tribe-editor__ticket__container-header-details"},wp.element.createElement(br,{clientId:t,isSelected:n}),wp.element.createElement(Er,{clientId:t,isSelected:n})),wp.element.createElement(Or,{clientId:t,isSelected:n}),wp.element.createElement(Rr,{clientId:t,isSelected:n}))});Ar.propTypes={clientId:d.a.string,isSelected:d.a.bool};var Hr=Ar,Nr=n(87),Vr=n.n(Nr),Fr=n(112),Kr=n.n(Fr),Wr=n(490),Ur=(n(524),En.b.INDEPENDENT),zr=En.b.SHARED,Gr=En.b.TICKET_TYPES,Br=En.d.CAPACITY_TYPE_OPTIONS,qr=function(e){var t=e.className,n=e.id,r=e.label,a=Ke()(e,["className","id","label"]);return wp.element.createElement(Se.LabeledItem,{className:fe()("tribe-editor__labeled-number-input",t),forId:n,label:r,isLabel:!0},wp.element.createElement(Se.NumberInput,a))};qr.propTypes={className:d.a.string,id:d.a.string,label:d.a.string};var Jr=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.getInputs=function(){var e=n.props,t=e.isDisabled,r=e.sharedCapacity,a=e.tempCapacityType,s=e.tempCapacity,o=e.tempSharedCapacity,c=e.onTempCapacityChange,u=e.onTempSharedCapacityChange,d=[];if(a===Gr[zr]&&""===r&&d.push(wp.element.createElement(qr,{key:"shared-capacity",className:fe()("tribe-editor__ticket__capacity-input-row","tribe-editor__ticket__capacity-input-row--shared-capacity"),id:n.ids.sharedCapacity,label:Object(i.__)("Set shared capacity:","event-tickets"),value:o,onChange:u,disabled:t,min:0,required:!0})),Kr()([Gr[zr],Gr[Ur]],a)){var _={},l=a===Gr[zr]?zr:Ur;if(a===Gr[zr]&&(r||o)){var m=r||o;_.max=parseInt(m,10)||0}a===Gr[Ur]&&(_.required=!0),_.label=a===Gr[zr]?Object(i.__)("(optional) Limit sales of this ticket to:","event-tickets"):Object(i.__)("Number of tickets available","event-tickets"),d.push(wp.element.createElement(qr,Ve()({key:"capacity",className:fe()("tribe-editor__ticket__capacity-input-row","tribe-editor__ticket__capacity-input-row--capacity","tribe-editor__ticket__capacity-input-row--capacity-"+l),id:n.ids.capacity,value:s,onChange:c,disabled:t,min:0},_)))}return d},n.getCapacityForm=function(){var e=n.props,t=e.isDisabled,r=e.tempCapacityTypeOption,a=e.onTempCapacityTypeChange;return wp.element.createElement(c.Fragment,null,wp.element.createElement(Se.Select,{id:n.ids.select,className:"tribe-editor__ticket__capacity-type-select",backspaceRemovesValue:!1,value:r,isSearchable:!1,isDisabled:t,options:Br,onChange:a}),n.getInputs())},n.getNoPlusCapacityForm=function(){var e=n.props,t=e.isDisabled,r=e.tempCapacity,a=e.onTempCapacityNoPlusChange;return wp.element.createElement(c.Fragment,null,wp.element.createElement(Se.NumberInput,{className:"tribe-editor__ticket__capacity-input",id:n.ids.capacity,value:r,onChange:a,disabled:t,min:0}),wp.element.createElement("span",{className:"tribe-editor__ticket__capacity-input-helper-text"},Object(i.__)("Leave blank for unlimited","event-tickets")))},n.ids={select:Ce()("capacity-type-"),capacity:Ce()("capacity-"),sharedCapacity:Ce()("shared-capacity-")},n}return me()(t,e),ue()(t,[{key:"render",value:function(){var e=this.props.hasTicketsPlus;return wp.element.createElement("div",{className:fe()("tribe-editor__ticket__capacity","tribe-editor__ticket__content-row","tribe-editor__ticket__content-row--capacity")},wp.element.createElement(he.LabelWithTooltip,{className:"tribe-editor__ticket__capacity-label-with-tooltip",forId:e?this.ids.select:this.ids.capacity,isLabel:!0,label:Object(i.__)("Ticket Capacity","event-tickets"),tooltipText:Object(i.__)("Ticket capacity will only be used by attendees buying this ticket type","event-tickets"),tooltipLabel:wp.element.createElement(Te.Dashicon,{className:"tribe-editor__ticket__tooltip-label",icon:"info-outline"})}),wp.element.createElement("div",{className:"tribe-editor__ticket__capacity-form"},e?this.getCapacityForm():this.getNoPlusCapacityForm()))}}]),t}(c.PureComponent);Jr.propTypes={hasTicketsPlus:d.a.bool,isDisabled:d.a.bool,sharedCapacity:d.a.string,tempCapacity:d.a.string,tempCapacityType:d.a.string,tempCapacityTypeOption:Wr.ReactSelectOption,tempSharedCapacity:d.a.string,onTempCapacityChange:d.a.func,onTempCapacityNoPlusChange:d.a.func,onTempCapacityTypeChange:d.a.func,onTempSharedCapacityChange:d.a.func};var $r=Jr,Zr=En.b.UNLIMITED,Qr=En.b.INDEPENDENT,Xr=En.b.TICKET_TYPES,ea=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),isDisabled:En.f.isTicketDisabled(e,t),sharedCapacity:En.f.getTicketsSharedCapacity(e),tempCapacity:En.f.getTicketTempCapacity(e,t),tempCapacityType:En.f.getTicketTempCapacityType(e,t),tempCapacityTypeOption:En.f.getTicketTempCapacityTypeOption(e,t),tempSharedCapacity:En.f.getTicketsTempSharedCapacity(e)}},function(e,t){var n=t.clientId;return{onTempCapacityChange:function(t){e(En.a.setTicketTempCapacity(n,t.target.value)),e(En.a.setTicketHasChanges(n,!0))},onTempCapacityNoPlusChange:function(t){var r=t.target.value,a=""===Vr()(r)?Xr[Zr]:Xr[Qr];e(En.a.setTicketTempCapacityType(n,a)),e(En.a.setTicketTempCapacity(n,r)),e(En.a.setTicketHasChanges(n,!0))},onTempCapacityTypeChange:function(t){e(En.a.setTicketTempCapacityType(n,t.value)),e(En.a.setTicketHasChanges(n,!0))},onTempSharedCapacityChange:function(t){e(En.a.setTicketsTempSharedCapacity(t.target.value)),e(En.a.setTicketHasChanges(n,!0))}}}))($r),ta=(n(525),n(526),function(e){var t=e.hasDurationError,n=Ke()(e,["hasDurationError"]);return wp.element.createElement("div",{className:fe()("tribe-editor__ticket__duration","tribe-editor__ticket__content-row","tribe-editor__ticket__content-row--duration")},wp.element.createElement(he.LabelWithTooltip,{className:"tribe-editor__ticket__duration-label-with-tooltip",label:Object(i.__)("Sale Duration","event-tickets"),tooltipText:Object(i.__)("If you do not set a start sale date, tickets will be available immediately.","event-tickets"),tooltipLabel:wp.element.createElement(Te.Dashicon,{className:"tribe-editor__ticket__tooltip-label",icon:"info-outline"})}),wp.element.createElement(he.DateTimeRangePicker,Ve()({className:"tribe-editor__ticket__duration-picker"},n)),t&&wp.element.createElement("span",{className:"tribe-editor__ticket__duration-error"},Object(i.__)("There is an error with the selected sales duration. Please fix the issue before saving.","event-tickets")))});ta.propTypes={fromDate:d.a.instanceOf(Date),fromDateInput:d.a.string,fromDateDisabled:d.a.bool,fromTime:d.a.string,fromTimeDisabled:d.a.bool,hasDurationError:d.a.bool,onFromDateChange:d.a.func,onFromTimePickerBlur:d.a.func,onFromTimePickerChange:d.a.func,onFromTimePickerClick:d.a.func,onToDateChange:d.a.func,onToTimePickerBlur:d.a.func,onToTimePickerChange:d.a.func,onToTimePickerClick:d.a.func,toDate:d.a.instanceOf(Date),toDateInput:d.a.string,toDateDisabled:d.a.bool,toTime:d.a.string,toTimeDisabled:d.a.bool};var na=ta,ra=function(e,t){return function(n,r,a){e(En.a.handleTicketStartDate(t.clientId,n,a))}},aa=function(e,t){return function(n){e(En.a.setTicketTempStartTimeInput(t.clientId,n.target.value))}},ia=function(e,t){return function(n,r){e(En.a.handleTicketStartTime(t.clientId,n)),r()}},sa=function(e,t){return function(n,r,a){e(En.a.handleTicketEndDate(t.clientId,n,a))}},oa=function(e,t){return function(n){e(En.a.setTicketTempEndTimeInput(t.clientId,n.target.value))}},ca=function(e,t){return function(n,r){e(En.a.handleTicketEndTime(t.clientId,n)),r()}},ua=function(e,t,n){return function(r){var a=ze.moment.toMoment(r.target.value,ze.moment.TIME_FORMAT,!1);if(!a.isValid()){var i=En.f.getTicketStartTimeInput(e,n);a=ze.moment.toMoment(i,ze.moment.TIME_FORMAT,!1)}var s=ze.moment.totalSeconds(a);t(En.a.handleTicketStartTime(n.clientId,s))}},da=function(e,t,n){return function(r){var a=ze.moment.toMoment(r.target.value,ze.moment.TIME_FORMAT,!1);if(!a.isValid()){var i=En.f.getTicketEndTimeInput(e,n);a=ze.moment.toMoment(i,ze.moment.TIME_FORMAT,!1)}var s=ze.moment.totalSeconds(a);t(En.a.handleTicketEndTime(n.clientId,s))}},_a=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){var n=ze.globals.tecDateSettings().datepickerFormat?ze.moment.toFormat(ze.globals.tecDateSettings().datepickerFormat):"LL",r=En.f.isTicketDisabled(e,t),a=En.f.getTicketTempStartDateMoment(e,t),i=En.f.getTicketTempEndDateMoment(e,t),s=a&&a.toDate(),o=i&&i.toDate();return{fromDate:s,fromDateInput:En.f.getTicketTempStartDateInput(e,t),fromDateDisabled:r,fromDateFormat:n,fromTime:En.f.getTicketTempStartTimeInput(e,t),fromTimeDisabled:r,hasDurationError:En.f.getTicketHasDurationError(e,t),toDate:o,toDateInput:En.f.getTicketTempEndDateInput(e,t),toDateDisabled:r,toDateFormat:n,toTime:En.f.getTicketTempEndTimeInput(e,t),toTimeDisabled:r,state:e}},function(e,t){return{onFromDateChange:ra(e,t),onFromTimePickerChange:aa(e,t),onFromTimePickerClick:ia(e,t),onToDateChange:sa(e,t),onToTimePickerChange:oa(e,t),onToTimePickerClick:ca(e,t),dispatch:e}},function(e,t,n){var r=e.state,a=Ke()(e,["state"]),i=t.dispatch,s=Ke()(t,["dispatch"]);return Ve()({},n,a,s,{onFromTimePickerBlur:ua(r,i,n),onToTimePickerBlur:da(r,i,n)})}))(na),la=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.id=Ce()("ticket-sku"),n}return me()(t,e),ue()(t,[{key:"render",value:function(){var e=this.props,t=e.sku,n=e.isDisabled,r=e.onChange;return wp.element.createElement("div",{className:fe()("tribe-editor__ticket__sku","tribe-editor__ticket__content-row","tribe-editor__ticket__content-row--sku")},wp.element.createElement(he.LabelWithTooltip,{className:"tribe-editor__ticket__sku-label-with-tooltip",forId:this.id,isLabel:!0,label:Object(i.__)("Ticket SKU","event-tickets"),tooltipText:Object(i.__)("A unique identifying code for each ticket type you're selling","event-tickets"),tooltipLabel:wp.element.createElement(Te.Dashicon,{className:"tribe-editor__ticket__tooltip-label",icon:"info-outline"})}),wp.element.createElement(Se.Input,{className:"tribe-editor__ticket__sku-input",id:this.id,type:"text",value:t,onChange:r,disabled:n}))}}]),t}(c.PureComponent);la.propTypes={isDisabled:d.a.bool,onChange:d.a.func.isRequired,sku:d.a.string};var ma=la,pa=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),sku:En.f.getTicketTempSku(e,t)}},function(e,t){return{onChange:function(n){var r=t.clientId;e(En.a.setTicketTempSku(r,n.target.value)),e(En.a.setTicketHasChanges(r,!0))}}}))(ma),fa=n(262),Ta=n.n(fa),ha=(n(527),En.b.EDD),ya=En.b.WOO,ba=En.b.PROVIDER_TYPES,Ma=["edit-ticket","report"],Sa=function(e){var t=e.editTicketLink,n=e.isDisabled,r=e.provider,a=e.reportLink,s=e.showEcommerceOptions,o=function(e){var s=fe()("tribe-editor__ticket__ecommerce-options-link","tribe-editor__ticket__ecommerce-options-link--"+e),o="report"===e?a:t,c="report"===e?Object(i.__)("View Sales Report","event-tickets"):function(e){var t="";return e===ha?t=Object(i.__)("Edit Ticket in Easy Digital Downloads","event-tickets"):e===ya&&(t=Object(i.__)("Edit Ticket in WooCommerce","event-tickets")),t}(r);return n?wp.element.createElement("span",{className:s},c):wp.element.createElement(Se.Link,{className:s,href:o,target:"_blank"},c)};return s&&wp.element.createElement(Se.LabeledItem,{className:fe()("tribe-editor__ticket__ecommerce-options","tribe-editor__ticket__content-row","tribe-editor__ticket__content-row--ecommerce-options"),label:Object(i.__)("Ecommerce","event-tickets")},wp.element.createElement("div",{className:"tribe-editor__ticket__ecommerce-options-links"},Ma.map(function(e){return wp.element.createElement("span",{key:e,className:"tribe-editor__ticket__ecommerce-options-link-wrapper"},o(e))})))};Sa.propTypes={editTicketLink:d.a.string,isDisabled:d.a.bool,provider:d.a.oneOf([].concat(Ta()(ba),[""])),reportLink:d.a.string,showEcommerceOptions:d.a.bool};var Ea=Sa,ga=En.b.EDD,va=En.b.WOO,ka=function(e){return Kr()([ga,va],e)},Da=function(e,t,n){var r="";ka(n)&&(r=ze.globals.adminUrl()+"post.php?post="+En.f.getTicketId(e,t)+"&action=edit");return r},La=function(e,t,n){var r="";if(ka(n)){var a=ze.globals.adminUrl(),i=En.f.getTicketId(e,t),s="";n===ga?s="edit.php?page=edd-reports&view=sales&post_type=download&tab=logs&download="+i:n===va&&(s="admin.php?page=wc-reports&tab=orders&report=sales_by_product&product_ids="+i),r=""+a+s}return r},Oa=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){var n=En.f.getTicketProvider(e,t);return{isDisabled:En.f.isTicketDisabled(e,t),provider:n,editTicketLink:Da(e,t,n),reportLink:La(e,t,n),showEcommerceOptions:ka(n)}}))(Ea),Ya=(n(528),function(e){var t=e.moveTicket,n=e.removeTicket,r=e.isDisabled;return wp.element.createElement("div",{className:"tribe-editor__ticket__content-row--move-delete"},wp.element.createElement(Se.Button,{type:"button",onClick:t,disabled:r},Object(i.__)("Move Ticket","event-tickets")),wp.element.createElement(Se.Button,{type:"button",onClick:n,disabled:r},Object(i.__)("Remove Ticket","event-tickets")))});Ya.propTypes={moveTicket:d.a.func.isRequired,removeTicket:d.a.func.isRequired,isDisabled:d.a.bool.isRequired};var wa=Ya,ja=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),ticketId:En.f.getTicketId(e,t)}},function(e,t){return{removeTicket:function(){e(En.a.deleteTicket(t.clientId))},moveTicket:function(n){return e(Object(it.c)(n,t.clientId))}}},function(e,t,n){return Ve()({},e,t,n,{moveTicket:function(){return t.moveTicket(e.ticketId)}})}))(wa),Ia=function(e){function t(e){oe()(this,t);var n=_e()(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.getHeader=function(){return wp.element.createElement(c.Fragment,null,wp.element.createElement(Te.Dashicon,{className:"tribe-editor__ticket__advanced-options-header-icon",icon:"arrow-down"}),wp.element.createElement("span",{className:"tribe-editor__ticket__advanced-options-header-text"},Object(i.__)("Advanced Options","event-tickets")))},n.getContent=function(){return wp.element.createElement(c.Fragment,null,wp.element.createElement(_a,{clientId:n.props.clientId}),wp.element.createElement(pa,{clientId:n.props.clientId}),wp.element.createElement(Oa,{clientId:n.props.clientId}),n.props.hasBeenCreated&&wp.element.createElement(ja,{clientId:n.props.clientId}))},n.getRows=function(){return[{accordionId:n.accordionId,content:n.getContent(),contentClassName:"tribe-editor__ticket__advanced-options-content",header:n.getHeader(),headerAttrs:{disabled:n.props.isDisabled},headerClassName:"tribe-editor__ticket__advanced-options-header"}]},n.accordionId=Ce()(),n}return me()(t,e),ue()(t,[{key:"render",value:function(){return wp.element.createElement(Se.Accordion,{className:"tribe-editor__ticket__advanced-options",rows:this.getRows()})}}]),t}(c.Component);Ia.propTypes={clientId:d.a.string.isRequired,isDisabled:d.a.bool,hasBeenCreated:d.a.bool};var Pa=Ia,Ca=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),hasBeenCreated:En.f.getTicketHasBeenCreated(e,t)}}))(Pa),xa=(n(529),Object(i.__)("+ Add","event-tickets")),Ra=Object(i.__)("Edit","event-tickets"),Aa=function(e){var t=e.attendeeRegistrationURL,n=e.hasAttendeeInfoFields,r=e.isCreated,a=e.isDisabled,s=e.isModalOpen,o=e.onClick,c=e.onClose,u=e.onIframeLoad,d=n?Ra:xa;return wp.element.createElement(he.AttendeesRegistration,{helperText:Object(i.__)("Save your ticket to enable attendee information fields","event-tickets"),iframeURL:t,isDisabled:a,isModalOpen:s,label:Object(i.__)("Attendee Information","event-tickets"),linkText:d,modalTitle:Object(i.__)("Attendee Information","event-tickets"),onClick:o,onClose:c,onIframeLoad:u,showHelperText:!r})};Aa.propTypes={attendeeRegistrationURL:d.a.string.isRequired,hasAttendeeInfoFields:d.a.bool.isRequired,isCreated:d.a.bool.isRequired,isDisabled:d.a.bool.isRequired,isModalOpen:d.a.bool.isRequired,onClick:d.a.func.isRequired,onClose:d.a.func.isRequired,onIframeLoad:d.a.func.isRequired};var Ha=Aa,Na=function(e,t){return ze.globals.adminUrl()+"edit.php?post_type="+Object(ie.select)("core/editor").getCurrentPostType()+"&page=attendee-registration&ticket_id="+En.f.getTicketId(e,t)+"&tribe_events_modal=1"},Va=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){var n=En.f.getTicketHasBeenCreated(e,t);return{attendeeRegistrationURL:Na(e,t),hasAttendeeInfoFields:En.f.getTicketHasAttendeeInfoFields(e,t),isCreated:n,isDisabled:En.f.isTicketDisabled(e,t)||!n,isModalOpen:En.f.getTicketIsModalOpen(e,t)}},function(e,t){return{onClick:function(){e(En.a.setTicketIsModalOpen(t.clientId,!0))},onClose:function(){e(En.a.setTicketIsModalOpen(t.clientId,!1))},onIframeLoad:function(n){var r=n.contentWindow,a=function(){n.nextSibling.classList.add("tribe-editor__attendee-registration__modal-overlay--show")},i=r.document.querySelector("#event-tickets-attendee-information");i.addEventListener("submit",a);var s=function(){r.removeEventListener("unload",o),i.removeEventListener("submit",a)},o=function(){s();var n=r.document.querySelector("#tribe-tickets-attendee-sortables"),a=Boolean(n.firstElementChild);e(En.a.setTicketHasAttendeeInfoFields(t.clientId,a)),e(En.a.setTicketIsModalOpen(t.clientId,!1))};r.addEventListener("unload",o);var c=r.document.querySelector(".tribe-intro > a");c&&c.setAttribute("target","_blank")}}}))(Ha),Fa=(n(530),function(e){var t=e.clientId,n=e.hasTicketsPlus;return wp.element.createElement(c.Fragment,null,wp.element.createElement(ea,{clientId:t}),wp.element.createElement(Ca,{clientId:t}),n&&wp.element.createElement(Va,{clientId:t}))});Fa.propTypes={clientId:d.a.string.isRequired,hasTicketsPlus:d.a.bool};var Ka=Fa,Wa=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS)}}))(Ka),Ua=function(e){return e.isDisabled?wp.element.createElement(s.ClockInactive,null):wp.element.createElement(s.ClockActive,null)},za=function(e){return e.isDisabled?wp.element.createElement(s.TicketInactive,null):wp.element.createElement(s.TicketActive,null)},Ga=function(e){var t=e.isDisabled,n=e.isFuture,r=e.isPast;return n||r?wp.element.createElement(Ua,{isDisabled:t}):wp.element.createElement(za,{isDisabled:t})};Ga.propTypes={isDisabled:d.a.bool.isRequired,isFuture:d.a.bool,isPast:d.a.bool};var Ba=function(e){var t=e.clientId,n=e.isDisabled,r=e.isFuture,a=e.isPast,i=e.isSelected;return wp.element.createElement(he.ContainerPanel,{className:"tribe-editor__ticket__container",layout:ye.a.ticket,icon:wp.element.createElement(Ga,{isDisabled:n,isFuture:r,isPast:a}),header:wp.element.createElement(Hr,{clientId:t,isSelected:i}),content:wp.element.createElement(Wa,{clientId:t})})};Ba.propTypes={clientId:d.a.string.isRequired,isDisabled:d.a.bool,isFuture:d.a.bool,isPast:d.a.bool,isSelected:d.a.bool};var qa=Ba,Ja=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{isDisabled:En.f.isTicketDisabled(e,t),isFuture:En.f.isTicketFuture(e,t),isPast:En.f.isTicketPast(e,t)}}))(qa),$a=(n(531),function(e){return e?Object(i.__)("Update Ticket","event-tickets"):Object(i.__)("Create Ticket","event-tickets")}),Za=Object(i.__)("Cancel","event-tickets"),Qa=function(e){var t=e.hasBeenCreated,n=e.isCancelDisabled,r=e.isConfirmDisabled,a=e.onCancelClick,i=e.onConfirmClick;return wp.element.createElement(he.ActionDashboard,{className:"tribe-editor__ticket__dashboard",cancelLabel:Za,confirmLabel:$a(t),isCancelDisabled:n,isConfirmDisabled:r,onCancelClick:a,onConfirmClick:i})};Qa.propTypes={hasBeenCreated:d.a.bool,isCancelDisabled:d.a.bool,isConfirmDisabled:d.a.bool,onCancelClick:d.a.func,onConfirmClick:d.a.func};var Xa=Qa,ei=function(e,t){return!En.f.isTicketValid(e,t)||!En.f.getTicketHasChanges(e,t)||En.f.isTicketDisabled(e,t)||En.f.getTicketHasDurationError(e,t)},ti=function(e,t,n){return function(){En.f.getTicketHasBeenCreated(e,n)?(t(En.a.setTicketTempDetails(n.clientId,{title:En.f.getTicketTitle(e,n),description:En.f.getTicketDescription(e,n),price:En.f.getTicketPrice(e,n),sku:En.f.getTicketSku(e,n),startDate:En.f.getTicketStartDate(e,n),startDateInput:En.f.getTicketStartDateInput(e,n),startDateMoment:En.f.getTicketStartDateMoment(e,n),endDate:En.f.getTicketEndDate(e,n),endDateInput:En.f.getTicketEndDateInput(e,n),endDateMoment:En.f.getTicketEndDateMoment(e,n),startTime:En.f.getTicketStartTime(e,n),endTime:En.f.getTicketEndTime(e,n),startTimeInput:En.f.getTicketStartTimeInput(e,n),endTimeInput:En.f.getTicketEndTimeInput(e,n),capacityType:En.f.getTicketCapacityType(e,n),capacity:En.f.getTicketCapacity(e,n)})),t(En.a.setTicketsTempSharedCapacity(En.f.getTicketsSharedCapacity(e))),t(En.a.setTicketHasChanges(n.clientId,!1))):(t(En.a.removeTicketBlock(n.clientId)),Object(ie.dispatch)("core/editor").removeBlocks(n.clientId)),Object(ie.dispatch)("core/editor").clearSelectedBlock()}},ni=function(e,t,n){return function(){return En.f.getTicketHasBeenCreated(e,n)?t(En.a.updateTicket(n.clientId)):t(En.a.createNewTicket(n.clientId))}},ri=Object(j.c)(Object(ke.withStore)(),ne(function(e,t){return{hasBeenCreated:En.f.getTicketHasBeenCreated(e,t),isCancelDisabled:En.f.isTicketDisabled(e,t),isConfirmDisabled:ei(e,t),state:e}},null,function(e,t,n){var r=e.state,a=Ke()(e,["state"]),i=t.dispatch;return Ve()({},n,a,{onCancelClick:ti(r,i,n),onConfirmClick:ni(r,i,n)})}))(Xa),ai=function(e){function t(){return oe()(this,t),_e()(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return me()(t,e),ue()(t,[{key:"componentDidMount",value:function(){this.props.onBlockUpdate(this.props.isSelected)}},{key:"componentDidUpdate",value:function(e){e.isSelected!==this.props.isSelected&&this.props.onBlockUpdate(this.props.isSelected)}},{key:"render",value:function(){var e=this.props,t=e.clientId,n=e.hasTicketsPlus,r=e.isDisabled,a=e.isLoading,i=e.isSelected,s=e.isModalShowing;return e.showTicket?wp.element.createElement(c.Fragment,null,wp.element.createElement("article",{className:fe()("tribe-editor__ticket",{"tribe-editor__ticket--disabled":r},{"tribe-editor__ticket--selected":i},{"tribe-editor__ticket--has-tickets-plus":n})},wp.element.createElement(Ja,{clientId:t,isSelected:i}),wp.element.createElement(ri,{clientId:t,isSelected:i}),a&&wp.element.createElement(Te.Spinner,null)),s&&wp.element.createElement(_n,null)):null}}]),t}(c.PureComponent);ai.propTypes={clientId:d.a.string.isRequired,hasTicketsPlus:d.a.bool,isDisabled:d.a.bool,isLoading:d.a.bool,isModalShowing:d.a.bool,isSelected:d.a.bool,onBlockUpdate:d.a.func,removeTicketBlock:d.a.func,showTicket:d.a.bool};var ii=ai,si=function(e,t){return En.f.getTicketsIsSelected(e)||En.f.hasATicketSelected(e)||En.f.isTicketOnSale(e,t)},oi=Object(j.c)(Object(ke.withStore)({isolated:!0}),ne(function(e,t){return{hasTicketsPlus:Et.plugins.selectors.hasPlugin(e)(Et.plugins.constants.TICKETS_PLUS),hasBeenCreated:En.f.getTicketHasBeenCreated(e,t),isDisabled:En.f.isTicketDisabled(e,t),isLoading:En.f.getTicketIsLoading(e,t),isModalShowing:Object(on.l)(e),modalTicketId:Object(on.e)(e),showTicket:si(e,t),ticketId:En.f.getTicketId(e,t)}},function(e,t){var n=t.clientId;return{onBlockUpdate:function(t){return e(En.a.setTicketIsSelected(n,t))},setInitialState:function(t){e(En.a.registerTicketBlock(n)),e(En.a.setTicketInitialState(t))}}},function(e,t,n){return Ve()({},e,t,n,{isModalShowing:e.isModalShowing&&e.modalTicketId===e.ticketId})}),Object(ke.withSaveData)())(ii),ci={id:"tickets-item",title:Object(i.__)("Event Ticket","event-tickets"),description:Object(i.__)("A single configured ticket type.","event-tickets"),icon:wp.element.createElement(s.Tickets,null),category:"tribe-tickets",keywords:["event","event-tickets","tribe"],parent:["tribe/tickets"],supports:{html:!1},attributes:{hasBeenCreated:{type:"boolean",default:!1},ticketId:{type:"integer",default:0}},edit:oi,save:function(){return wp.element.createElement("div",null,wp.element.createElement(bn.InnerBlocks.Content,null))}},ui=n(54),di=n(110),_i=(n(532),Object(i.__)("Who's Attending?","event-tickets")),li=Object(i.__)("(X) people are attending this event","event-tickets"),mi=function(){return wp.element.createElement("div",{className:"tribe-editor__event-attendees__gravatars"},wp.element.createElement(s.AttendeesGravatar,null),wp.element.createElement(s.AttendeesGravatar,null),wp.element.createElement(s.AttendeesGravatar,null),wp.element.createElement(s.AttendeesGravatar,null),wp.element.createElement(s.AttendeesGravatar,null))},pi=function(){return wp.element.createElement("div",{className:"tribe-editor__event-attendees__subtitle"},wp.element.createElement("p",null,li))},fi=function(e){var t=e.isSelected,n=e.title,r=e.displayTitle,a=e.displaySubtitle,i=t||n?function(e){var t=e.isSelected,n=e.isEmpty,r=e.title,a=e.setTitle,i=fe()({"tribe-editor__event-attendees__title":!0,"tribe-editor__event-attendees__title--selected":t}),s=fe()({"tribe-editor__event-attendees__title-text":!0,"tribe-editor__event-attendees__title-text--empty":n&&t});return wp.element.createElement("div",{key:"tribe-events-attendees-label",className:i},wp.element.createElement(Me.a,{id:"tribe-events-attendees-link",className:s,value:r,placeholder:_i,onChange:a}))}(e):wp.element.createElement("span",{className:fe()(["tribe-editor__event-attendees__title","tribe-editor__event-attendees__title--placeholder"])},_i);return wp.element.createElement("div",{className:"tribe-editor__block tribe-editor__event-attendees"},r?i:"",a?wp.element.createElement(pi,null):"",wp.element.createElement(mi,null))},Ti=function(e){var t=e.isSelected,n=e.displayTitle,r=e.displaySubtitle,a=e.onSetDisplayTitleChange,s=e.onSetDisplaySubtitleChange;return t&&wp.element.createElement(bn.InspectorControls,{key:"inspector"},wp.element.createElement(Te.PanelBody,{title:Object(i.__)("Attendees Settings","event-tickets")},wp.element.createElement(Te.ToggleControl,{label:Object(i.__)("Display Title","event-tickets"),checked:n,onChange:a}),wp.element.createElement(Te.ToggleControl,{label:Object(i.__)("Display Subtitle","event-tickets"),checked:r,onChange:s})))},hi=function(e){return wp.element.createElement(c.Fragment,null,wp.element.createElement(fi,e),wp.element.createElement(Ti,e))};hi.propTypes={setTitle:d.a.func,title:d.a.string,isSelected:d.a.bool,isEmpty:d.a.bool,displayTitle:d.a.bool,displaySubtitle:d.a.bool,onSetDisplaySubtitleChange:d.a.func,onSetDisplayTitleChange:d.a.func};var yi=hi,bi=Object(j.c)(Object(ke.withStore)(),ne(function(e){return{title:di.c(e),displayTitle:di.b(e),displaySubtitle:di.a(e)}},function(e){return{setInitialState:function(t){return e(ui.c(t))},setTitle:function(t){return e(ui.d(t.target.value))},onSetDisplayTitleChange:function(t){return e(ui.b(t))},onSetDisplaySubtitleChange:function(t){return e(ui.a(t))}}}),Object(ke.withSaveData)())(yi),Mi=[yn,Tr,ci,{id:"attendees",title:Object(i.__)("Attendee List","event-tickets"),description:Object(i.__)("Show the gravatars of people coming to this event.","event-tickets"),icon:wp.element.createElement(s.Attendees,null),category:"tribe-tickets",keywords:["event","events-gutenberg","tribe"],supports:{html:!1},attributes:{title:{type:"html",default:Object(i.__)("Who's Attending?","event-tickets")},displayTitle:{type:"boolean",default:!0},displaySubtitle:{type:"boolean",default:!0}},edit:bi,save:function(){return null}}];Mi.forEach(function(e){return Object(r.registerBlockType)("tribe/"+e.id,e)}),Object(a.initStore)();t.default=Mi}]);
src/resources/js/tpp.js CHANGED
@@ -50,19 +50,40 @@ var tribe_tickets_tpp = {
50
  my.quantity_changed( $( this ) );
51
  };
52
 
53
- my.event.handle_submission = function( e ) {
 
 
 
 
 
 
 
 
 
 
 
54
  if ( ! my.validate_submission() ) {
55
  e.preventDefault();
56
- var $form = $( this ).closest( 'form' );
57
 
58
  $form.addClass( 'tribe-tpp-message-display' );
59
  $form.find( '.tribe-tpp-message-confirmation-error' ).show();
60
 
61
- $( 'html, body').animate({
62
  scrollTop: $form.offset().top
63
  }, 300 );
 
64
  return false;
65
  }
 
 
 
 
 
 
 
 
 
 
66
  };
67
 
68
  $( function() {
50
  my.quantity_changed( $( this ) );
51
  };
52
 
53
+ /**
54
+ * Handle Submission of RSVP
55
+ *
56
+ * @since 4.10.9 - Prevent multiple clicks on "Confirm RSVP" from submitting.
57
+ *
58
+ * @param e The event passed to the method.
59
+ * @returns {my.event|boolean}
60
+ */
61
+ my.event.handle_submission = function ( e ) {
62
+
63
+ var $form = $( this ).closest( 'form' );
64
+
65
  if ( ! my.validate_submission() ) {
66
  e.preventDefault();
 
67
 
68
  $form.addClass( 'tribe-tpp-message-display' );
69
  $form.find( '.tribe-tpp-message-confirmation-error' ).show();
70
 
71
+ $( 'html, body' ).animate( {
72
  scrollTop: $form.offset().top
73
  }, 300 );
74
+
75
  return false;
76
  }
77
+
78
+ // Check if Form is Submitted Already.
79
+ if ( $form.data( 'submitted' ) === true ) {
80
+ e.preventDefault();
81
+ } else {
82
+ $form.data( 'submitted', true );
83
+ }
84
+
85
+ // Keep chainability.
86
+ return this;
87
  };
88
 
89
  $( function() {
src/resources/js/tpp.min.js CHANGED
@@ -1 +1 @@
1
- var tribe_tickets_tpp={num_attendees:0,event:{}};!function(t,e){"use strict";e.init=function(){this.$rsvp=t(".tribe-events-tickets-rsvp"),this.attendee_template=t(document.getElementById("tribe-tickets-tpp-tmpl")).html(),this.$rsvp.on("change",".tribe-ticket-quantity",this.event.quantity_changed),this.$rsvp.closest(".cart").on("submit",this.event.handle_submission),t(".tribe-rsvp-list").on("click",".attendee-meta-row .toggle",function(){t(this).toggleClass("on").siblings(".attendee-meta-details").slideToggle()})},e.quantity_changed=function(t){var e=t.closest(".tribe-events-tickets-tpp");parseInt(t.val(),10)?e.addClass("tribe-tickets-has-tpp"):e.removeClass("tribe-tickets-has-tpp")},e.validate_submission=function(){var e=t(document.getElementById("tribe-tickets-full-name")),i=t(document.getElementById("tribe-tickets-email"));return!(!t.trim(e.val()).length||!t.trim(i.val()).length)},e.event.quantity_changed=function(){e.quantity_changed(t(this))},e.event.handle_submission=function(i){if(!e.validate_submission()){i.preventDefault();var s=t(this).closest("form");return s.addClass("tribe-tpp-message-display"),s.find(".tribe-tpp-message-confirmation-error").show(),t("html, body").animate({scrollTop:s.offset().top},300),!1}},t(function(){e.init()})}(jQuery,tribe_tickets_tpp);
1
+ var tribe_tickets_tpp={num_attendees:0,event:{}};!function(t,e){"use strict";e.init=function(){this.$rsvp=t(".tribe-events-tickets-rsvp"),this.attendee_template=t(document.getElementById("tribe-tickets-tpp-tmpl")).html(),this.$rsvp.on("change",".tribe-ticket-quantity",this.event.quantity_changed),this.$rsvp.closest(".cart").on("submit",this.event.handle_submission),t(".tribe-rsvp-list").on("click",".attendee-meta-row .toggle",function(){t(this).toggleClass("on").siblings(".attendee-meta-details").slideToggle()})},e.quantity_changed=function(t){var e=t.closest(".tribe-events-tickets-tpp");parseInt(t.val(),10)?e.addClass("tribe-tickets-has-tpp"):e.removeClass("tribe-tickets-has-tpp")},e.validate_submission=function(){var e=t(document.getElementById("tribe-tickets-full-name")),i=t(document.getElementById("tribe-tickets-email"));return!(!t.trim(e.val()).length||!t.trim(i.val()).length)},e.event.quantity_changed=function(){e.quantity_changed(t(this))},e.event.handle_submission=function(i){var s=t(this).closest("form");return e.validate_submission()?(!0===s.data("submitted")?i.preventDefault():s.data("submitted",!0),this):(i.preventDefault(),s.addClass("tribe-tpp-message-display"),s.find(".tribe-tpp-message-confirmation-error").show(),t("html, body").animate({scrollTop:s.offset().top},300),!1)},t(function(){e.init()})}(jQuery,tribe_tickets_tpp);
src/template-tags/tickets.php CHANGED
@@ -11,6 +11,7 @@ if ( ! defined( 'ABSPATH' ) ) {
11
  }
12
 
13
  if ( ! function_exists( 'tribe_tickets_parent_post' ) ) {
 
14
  /**
15
  * Returns the current post object that can have tickets attached to it
16
  *
@@ -50,6 +51,7 @@ if ( ! function_exists( 'tribe_tickets_parent_post' ) ) {
50
  }
51
 
52
  if ( ! function_exists( 'tribe_events_has_tickets' ) ) {
 
53
  /**
54
  * Determines if any tickets exist for the current event (a specific event
55
  * may be specified, though, by passing the post ID or post object).
@@ -69,6 +71,7 @@ if ( ! function_exists( 'tribe_events_has_tickets' ) ) {
69
  }//end if
70
 
71
  if ( ! function_exists( 'tribe_events_has_soldout' ) ) {
 
72
  /**
73
  * Determines if the event has sold out of tickets.
74
  *
@@ -90,6 +93,7 @@ if ( ! function_exists( 'tribe_events_has_soldout' ) ) {
90
  }
91
 
92
  if ( ! function_exists( 'tribe_events_partially_soldout' ) ) {
 
93
  /**
94
  * Indicates if one or more of the tickets available for this event (but not
95
  * all) have sold out.
@@ -128,6 +132,7 @@ if ( ! function_exists( 'tribe_events_partially_soldout' ) ) {
128
  }//end if
129
 
130
  if ( ! function_exists( 'tribe_events_count_available_tickets' ) ) {
 
131
  /**
132
  * Counts the total number of tickets still available for sale for a
133
  * specific event.
@@ -254,16 +259,16 @@ if ( ! function_exists( 'tribe_tickets_buy_button' ) ) {
254
  $parts[ $type . '-stock' ] = $html['stock'] = $stock_html;
255
 
256
  if ( 'rsvp' === $type ) {
257
- $button_label = esc_html_x( 'RSVP Now!', 'list view rsvp now ticket button', 'event-tickets' );
258
  $button_anchor = '#rsvp-now';
259
  } else {
260
- $button_label = esc_html_x( 'Buy Now!', 'list view buy now ticket button', 'event-tickets' );
261
  $button_anchor = '#buy-tickets';
262
  }
263
 
264
  $permalink = get_the_permalink( $event_id );
265
  $query_string = parse_url( $permalink, PHP_URL_QUERY );
266
- $query_params = empty( $query_string ) ? array() : (array) explode( '&', $query_string );
267
 
268
  $button = '<form method="get" action="' . esc_url( $permalink . $button_anchor ) . '">';
269
 
@@ -278,7 +283,7 @@ if ( ! function_exists( 'tribe_tickets_buy_button' ) ) {
278
  }
279
  }
280
 
281
- $button .= '<button type="submit" name="tickets_process" class="tribe-button">' . $button_label . '</button></form>';
282
 
283
  $parts[ $type . '-button' ] = $html['button'] = $button;
284
  }
@@ -306,6 +311,7 @@ if ( ! function_exists( 'tribe_tickets_buy_button' ) ) {
306
  }
307
 
308
  if ( ! function_exists( 'tribe_tickets_has_unlimited_stock_tickets' ) ) {
 
309
  /**
310
  * Returns true if the event contains one or more tickets which are not
311
  * subject to any inventory limitations.
@@ -335,6 +341,7 @@ if ( ! function_exists( 'tribe_tickets_has_unlimited_stock_tickets' ) ) {
335
  }//end if
336
 
337
  if ( ! function_exists( 'tribe_events_product_is_ticket' ) ) {
 
338
  /**
339
  * Determines if the product object (or product ID) represents a ticket for
340
  * an event.
@@ -350,6 +357,7 @@ if ( ! function_exists( 'tribe_events_product_is_ticket' ) ) {
350
  }//end if
351
 
352
  if ( ! function_exists( 'tribe_events_get_ticket_event' ) ) {
 
353
  /**
354
  * Accepts the post object or ID for a product and, if it represents an event
355
  * ticket, returns the corresponding event object.
@@ -366,6 +374,7 @@ if ( ! function_exists( 'tribe_events_get_ticket_event' ) ) {
366
  }//end if
367
 
368
  if ( ! function_exists( 'tribe_events_ticket_is_on_sale' ) ) {
 
369
  /**
370
  * Checks if the ticket is on sale (in relation to it's start/end sale dates).
371
  *
@@ -384,6 +393,7 @@ if ( ! function_exists( 'tribe_events_ticket_is_on_sale' ) ) {
384
  }//end if
385
 
386
  if ( ! function_exists( 'tribe_events_has_tickets_on_sale' ) ) {
 
387
  /**
388
  * Checks if the event has any tickets on sale
389
  *
@@ -403,11 +413,14 @@ if ( ! function_exists( 'tribe_events_has_tickets_on_sale' ) ) {
403
  }
404
 
405
  if ( ! function_exists( 'tribe_tickets_get_ticket_stock_message' ) ) {
 
406
  /**
407
  * Gets the "tickets sold" message for a given ticket
408
  *
409
  * @param Tribe__Tickets__Ticket_Object $ticket Ticket to analyze
410
  *
 
 
411
  * @return string
412
  */
413
  function tribe_tickets_get_ticket_stock_message( Tribe__Tickets__Ticket_Object $ticket ) {
@@ -445,7 +458,7 @@ if ( ! function_exists( 'tribe_tickets_get_ticket_stock_message' ) ) {
445
 
446
  $sold_label = __( 'issued', 'event-tickets' );
447
  if ( 'Tribe__Tickets__RSVP' === $ticket->provider_class ) {
448
- $sold_label = _x( "RSVP'd Going", 'separate going and remain RSVPs', 'event-tickets' );
449
  }
450
 
451
  // Message for how many remain available
@@ -472,193 +485,202 @@ if ( ! function_exists( 'tribe_tickets_get_ticket_stock_message' ) ) {
472
  }
473
  }
474
 
475
- /**
476
- * Returns or echoes a url to a file in the Event Tickets plugin resources directory
477
- *
478
- * @category Tickets
479
- * @param string $resource the filename of the resource
480
- * @param bool $echo whether or not to echo the url
481
- * @param string $root_dir directory to hunt for resource files (src or common)
482
- *
483
- * @return string
484
- **/
485
- function tribe_tickets_resource_url( $resource, $echo = false, $root_dir = 'src' ) {
486
- $extension = pathinfo( $resource, PATHINFO_EXTENSION );
487
-
488
- if ( 'src' !== $root_dir ) {
489
- return tribe_resource_url( $resource, $echo, $root_dir );
490
- }
491
-
492
- $resources_path = $root_dir . '/resources/';
493
- switch ( $extension ) {
494
- case 'css':
495
- $resource_path = $resources_path .'css/';
496
- break;
497
- case 'js':
498
- $resource_path = $resources_path .'js/';
499
- break;
500
- case 'scss':
501
- $resource_path = $resources_path .'scss/';
502
- break;
503
- default:
504
- $resource_path = $resources_path;
505
- break;
506
- }
507
-
508
- $path = $resource_path . $resource;
509
-
510
- $url = plugins_url( Tribe__Tickets__Main::instance()->plugin_dir . $path );
511
 
512
  /**
513
- * Filter the ticket resource URL
 
 
 
 
514
  *
515
- * @var $url Resource URL
516
- * @var $resource The filename of the resource
517
  */
518
- $url = apply_filters( 'tribe_tickets_resource_url', $url, $resource );
 
519
 
520
- if ( $echo ) {
521
- echo esc_url( $url );
522
- }
523
 
524
- return $url;
525
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
526
 
527
- /**
528
- * Includes a template part, similar to the WP get template part, but looks
529
- * in the correct directories for Tribe Tickets templates
530
- *
531
- * @param string $slug The Base template name
532
- * @param null|string $name (optional) if set will try to include `{$slug}-{$name}.php` file
533
- * @param array $data (optional) array of vars to inject into the template part
534
- * @param boolean $echo (optional) Allows the user to print or return the template
535
- *
536
- * @uses Tribe__Tickets__Templates::get_template_hierarchy
537
- *
538
- * @return string|void It will depend if it's echoing or not
539
- **/
540
- function tribe_tickets_get_template_part( $slug, $name = null, array $data = null, $echo = true ) {
541
 
542
- /**
543
- * Fires an Action before echoing the Template
544
- *
545
- * @param string $slug Slug for this template
546
- * @param string $name Template name
547
- * @param array $data The Data that will be used on this template
548
- */
549
- do_action( 'tribe_tickets_pre_get_template_part', $slug, $name, $data );
550
 
551
- // Setup possible parts
552
- $templates = array();
553
- if ( isset( $name ) ) {
554
- $templates[] = $slug . '-' . $name . '.php';
555
- }
556
- $templates[] = $slug . '.php';
 
557
 
558
- /**
559
- * Allow users to filter which templates can be included
560
- *
561
- * @param string $template The Template file, which is a relative path from the Folder we are dealing with
562
- * @param string $slug Slug for this template
563
- * @param string $name Template name
564
- * @param array $data The Data that will be used on this template
565
- */
566
- $templates = apply_filters( 'tribe_tickets_get_template_part_templates', $templates, $slug, $name, $data );
567
 
568
- // Make any provided variables available in the template's symbol table
569
- if ( is_array( $data ) ) {
570
- extract( $data );
571
  }
 
572
 
573
- $html = null;
574
-
575
- // loop through templates, return first one found.
576
- foreach ( $templates as $template ) {
577
- $file = Tribe__Tickets__Templates::get_template_hierarchy( $template, array( 'disable_view_check' => true ) );
578
 
579
- /**
580
- * Allow users to filter which template will be included
581
- *
582
- * @param string $file Complete path to include the PHP File
583
- * @param string $template The Template file, which is a relative path from the Folder we are dealing with
584
- * @param string $slug Slug for this template
585
- * @param string $name Template name
586
- * @param array $data The Data that will be used on this template
587
- */
588
- $file = apply_filters( 'tribe_tickets_get_template_part_path', $file, $template, $slug, $name, $data );
 
 
 
 
589
 
590
  /**
591
- * A more Specific Filter that will include the template name
592
  *
593
- * @param string $file Complete path to include the PHP File
594
- * @param string $slug Slug for this template
595
- * @param string $name Template name
596
- * @param array $data The Data that will be used on this template
597
  */
598
- $file = apply_filters( "tribe_tickets_get_template_part_path_{$template}", $file, $slug, $name, $data );
599
 
600
- if ( ! file_exists( $file ) ) {
601
- continue;
 
 
602
  }
 
603
 
604
- ob_start();
605
  /**
606
- * Fires an Action before including the template file
607
  *
608
  * @param string $template The Template file, which is a relative path from the Folder we are dealing with
609
- * @param string $file Complete path to include the PHP File
610
  * @param string $slug Slug for this template
611
  * @param string $name Template name
612
  * @param array $data The Data that will be used on this template
613
  */
614
- do_action( 'tribe_tickets_before_get_template_part', $template, $file, $slug, $name, $data );
615
- include( $file );
616
 
617
- /**
618
- * Fires an Action After including the template file
619
- * @param string $template The Template file, which is a relative path from the Folder we are dealing with
620
- * @param string $file Complete path to include the PHP File
621
- * @param string $slug Slug for this template
622
- * @param string $name Template name
623
- * @param array $data The Data that will be used on this template
624
- */
625
- do_action( 'tribe_tickets_after_get_template_part', $template, $file, $slug, $name, $data );
626
- $html = ob_get_clean();
627
 
628
- /**
629
- * Allow users to filter the final HTML
630
- * @param string $html The final HTML
631
- * @param string $template The Template file, which is a relative path from the Folder we are dealing with
632
- * @param string $file Complete path to include the PHP File
633
- * @param string $slug Slug for this template
634
- * @param string $name Template name
635
- * @param array $data The Data that will be used on this template
636
- */
637
- $html = apply_filters( 'tribe_tickets_get_template_part_content', $html, $template, $file, $slug, $name, $data );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
638
 
639
- if ( $echo ) {
640
- echo $html;
641
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
642
 
643
- break;
644
- }
645
 
646
- /**
647
- * Files an Action after echoing/saving the html Template
648
- *
649
- * @param string $slug Slug for this template
650
- * @param string $name Template name
651
- * @param array $data The Data that will be used on this template
652
- */
653
- do_action( 'tribe_tickets_post_get_template_part', $slug, $name, $data );
654
 
655
- if ( ! $echo ) {
656
- // Return should come at the end
657
- return $html;
 
658
  }
659
  }
660
 
661
  if ( ! function_exists( 'tribe_tickets_post_type_enabled' ) ) {
 
662
  /**
663
  * Returns whether or not the provided post type allows tickets to be attached
664
  *
@@ -748,291 +770,500 @@ if ( ! function_exists( 'tribe_tickets_has_meta_fields' ) ) {
748
  }
749
  }
750
 
751
- /**
752
- * Removes all meta for a given object capacity. Object can be a ticket, or an event/post with tickets.
753
- *
754
- * Note, you can pass an event/post to this function and it will merrily change the meta values
755
- * for the event - not for the tickets!
756
- *
757
- * @since 4.6.2
758
- *
759
- * @param int|WP_Post $object WP_Post (or ID of post) We are trying to delete capacity from.
760
- *
761
- * @return int|false
762
- */
763
- function tribe_tickets_delete_capacity( $object ) {
764
 
765
- if ( ! $object instanceof WP_Post ) {
766
- $object = get_post( $object );
767
- }
 
 
 
 
 
 
 
 
 
 
768
 
769
- if ( ! $object instanceof WP_Post ) {
770
- return false;
771
- }
772
 
773
- $deleted = delete_post_meta( $object->ID, tribe( 'tickets.handler' )->key_capacity );
 
 
774
 
775
- if ( ! $deleted ) {
776
- return $deleted;
777
- }
778
 
779
- // We only apply these when we are talking about event-like posts
780
- if ( tribe_tickets_post_type_enabled( $object->post_type ) ) {
781
- $shared_cap_object = new Tribe__Tickets__Global_Stock( $object->ID );
782
- $shared_cap_object->disable();
783
 
784
- // This is mostly to make sure
785
- delete_post_meta( $object->ID, Tribe__Tickets__Global_Stock::GLOBAL_STOCK_LEVEL );
786
- delete_post_meta( $object->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_MODE );
787
- delete_post_meta( $object->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_CAP );
788
- }
789
 
790
- return $deleted;
791
- }
 
 
 
792
 
793
- /**
794
- * Updates a given Object Capacity
795
- *
796
- * Note, you can pass an event/post to this function and it will merrily change the meta values
797
- * for the event - not for the tickets!
798
- *
799
- * @since 4.6.2
800
- *
801
- * @param int|WP_Post|Tribe__Tickets__Ticket_Object $object Post We are trying to save capacity
802
- * @param int $capacty What we are trying to update the capacity to.
803
- *
804
- * @return int|false
805
- */
806
- function tribe_tickets_update_capacity( $object, $capacity ) {
807
- if ( ! is_numeric( $capacity ) ) {
808
- return false;
809
  }
 
810
 
811
- if ( ! $object instanceof WP_Post ) {
812
- $object = get_post( $object );
813
- }
814
 
815
- if ( ! $object instanceof WP_Post ) {
816
- return false;
817
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
818
 
819
- // Do the actual Updating of the Meta value
820
- return update_post_meta( $object->ID, tribe( 'tickets.handler' )->key_capacity, $capacity );
821
- }
822
 
823
- /**
824
- * Returns the capacity for a given post.
825
- *
826
- * Note while we can send a post/event we do not store capacity on events
827
- * so the return values will always be null.
828
- *
829
- * @since 4.6
830
- *
831
- * @param int|WP_Post $post Post we are trying to fetch capacity for.
832
- *
833
- * @return int|null
834
- */
835
- function tribe_tickets_get_capacity( $post ) {
836
- // When not dealing with a instance of Post try to set it up.
837
- if ( ! $post instanceof WP_Post ) {
838
- $post = get_post( $post );
839
- }
840
 
841
- // Bail when it's not a post or ID is 0
842
- if (
843
- ! $post instanceof WP_Post
844
- || empty( $post->ID )
845
- ) {
846
- return null;
847
  }
 
848
 
849
- $event_types = Tribe__Tickets__Main::instance()->post_types();
850
 
851
  /**
852
- * @var Tribe__Tickets__Tickets_Handler $handler
853
- * @var Tribe__Tickets__Version $version
 
 
 
 
 
 
 
 
854
  */
855
- $handler = tribe( 'tickets.handler' );
856
- $version = tribe( 'tickets.version' );
857
-
858
- $key = $handler->key_capacity;
859
-
860
- // When we have a legacy ticket we migrate it
861
- if (
862
- ! in_array( $post->post_type, $event_types )
863
- && $version->is_legacy( $post->ID )
864
- ) {
865
- $legacy_capacity = $handler->filter_capacity_support( null, $post->ID, $key );
866
-
867
- // Cast as integer as it might be returned as numeric string on some cases
868
- return (int) $legacy_capacity;
869
- }
870
 
871
- // Defaults to the ticket ID
872
- $post_id = $post->ID;
 
 
873
 
874
- // Return Null for when we don't have the Capacity Data
875
- if ( ! metadata_exists( 'post', $post->ID, $key ) ) {
876
- $mode = get_post_meta( $post->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_MODE, true );
 
 
 
 
877
 
878
- $shared_modes = [ Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE, Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE ];
879
 
880
- // When we are in a Ticket Post Type update where we get the value from Event
881
  if (
882
  ! in_array( $post->post_type, $event_types )
883
- && in_array( $mode, $shared_modes )
884
  ) {
885
- $event_id = tribe_tickets_get_event_ids( $post->ID );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
886
 
887
- // It will return an array of Events
888
- if ( ! empty( $event_id ) ) {
889
- $post_id = current( $event_id );
 
 
 
890
  }
891
- } else {
892
- return null;
893
  }
894
- }
895
 
896
- // Fetch the value
897
- $value = get_post_meta( $post_id, $key, true );
898
 
899
- // When dealing with an empty string we assume it's unlimited
900
- if ( '' === $value ) {
901
- $value = -1;
902
- }
903
 
904
- return (int) $value;
 
905
  }
906
 
907
- /**
908
- * Turns a Stock, Remaining, or Capacity number into a human-readable format.
909
- *
910
- * @since 4.6
911
- *
912
- * @param string|int $number Which you are trying to convert.
913
- * @param string $mode Mode this post is on.
914
- * @param bool $display Whether or not to echo.
915
- *
916
- * @return string
917
- */
918
- function tribe_tickets_get_readable_amount( $number, $mode = 'own', $display = false ) {
919
- $html = [];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
920
 
921
- $show_parens = Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE === $mode || Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE === $mode;
922
- if ( $show_parens ) {
923
- $html[] = '(';
924
  }
 
925
 
926
- if (
927
- -1 === (int) $number
928
- || Tribe__Tickets__Ticket_Object::UNLIMITED_STOCK === $number
929
- ) {
930
- /** @var Tribe__Tickets__Tickets_Handler $handler */
931
- $handler = tribe( 'tickets.handler' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
932
 
933
- $html[] = esc_html( $handler->unlimited_term );
934
- } else {
935
- $html[] = esc_html( $number );
936
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
937
 
938
- if ( $show_parens ) {
939
- $html[] = ')';
940
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
941
 
942
- $html = implode( '', $html );
 
 
 
 
 
 
 
 
943
 
944
- if ( true === $display ) {
945
- echo $html;
946
  }
 
947
 
948
- return $html;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
949
  }
950
 
951
- /**
952
- * Checks if the specified user (defaults to currently-logged-in user) belongs to any active
953
- * WooCommerce Membership plans, *and* if the specified ticket (by ticket ID) has any active
954
- * member discounts applied to it. It may not be the user's membership plan specifically, so this
955
- * template tag *may* produce some false positives.
956
- *
957
- * @since 4.7.3
958
- *
959
- * @param int $ticket_id
960
- * @param int $user_id
961
- * @return boolean
962
- */
963
- function tribe_tickets_ticket_in_wc_membership_for_user( $ticket_id, $user_id = 0 ) {
964
 
965
- if (
966
- ! function_exists( 'wc_memberships_get_user_active_memberships' ) ||
967
- ! function_exists( 'wc_memberships_product_has_member_discount' )
968
- ) {
969
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
970
  }
 
 
 
971
 
972
- $user_id = 0 ? get_current_user_id() : $user_id;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
973
 
974
- $user_is_member = wc_memberships_get_user_active_memberships( $user_id );
975
- $ticket_has_member_discount = wc_memberships_product_has_member_discount( $ticket_id );
976
 
977
- return $user_is_member && $ticket_has_member_discount;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
978
  }
979
 
980
- /**
981
- * Builds and returns the correct ticket repository.
982
- *
983
- * @since 4.8
984
- *
985
- * @param string $repository The slug of the repository to build/return.
986
- *
987
- * @return Tribe__Repository__Interface
988
- */
989
- function tribe_tickets( $repository = 'default' ) {
990
- $map = [
991
- 'default' => 'tickets.ticket-repository',
992
- 'rsvp' => 'tickets.ticket-repository.rsvp',
993
- 'tribe-commerce' => 'tickets.ticket-repository.commerce',
994
- 'restv1' => 'tickets.rest-v1.ticket-repository',
995
- ];
996
 
997
  /**
998
- * Filters the map relating ticket repository slugs to service container bindings.
999
  *
1000
- * @since 4.8
1001
  *
1002
- * @param array $map A map in the shape [ <repository_slug> => <service_name> ]
1003
- * @param string $repository The currently requested implementation.
 
1004
  */
1005
- $map = apply_filters( 'tribe_tickets_ticket_repository_map', $map, $repository );
 
 
 
 
 
 
 
 
 
 
 
1006
 
1007
- return tribe( Tribe__Utils__Array::get( $map, $repository, $map['default'] ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1008
  }
1009
 
1010
- /**
1011
- * Builds and returns the correct attendee repository.
1012
- *
1013
- * @since 4.8
1014
- *
1015
- * @param string $repository The slug of the repository to build/return.
1016
- *
1017
- * @return Tribe__Repository__Interface
1018
- */
1019
- function tribe_attendees( $repository = 'default' ) {
1020
- $map = [
1021
- 'default' => 'tickets.attendee-repository',
1022
- 'rsvp' => 'tickets.attendee-repository.rsvp',
1023
- 'tribe-commerce' => 'tickets.attendee-repository.commerce',
1024
- 'restv1' => 'tickets.rest-v1.attendee-repository',
1025
- ];
1026
 
1027
  /**
1028
- * Filters the map relating attendee repository slugs to service container bindings.
1029
  *
1030
- * @since 4.8
 
 
1031
  *
1032
- * @param array $map A map in the shape [ <repository_slug> => <service_name> ]
1033
- * @param string $repository The currently requested implementation.
1034
  */
1035
- $map = apply_filters( 'tribe_tickets_attendee_repository_map', $map, $repository );
 
 
 
 
 
 
 
 
 
 
 
 
 
1036
 
1037
- return tribe( Tribe__Utils__Array::get( $map, $repository, $map['default'] ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1038
  }
11
  }
12
 
13
  if ( ! function_exists( 'tribe_tickets_parent_post' ) ) {
14
+
15
  /**
16
  * Returns the current post object that can have tickets attached to it
17
  *
51
  }
52
 
53
  if ( ! function_exists( 'tribe_events_has_tickets' ) ) {
54
+
55
  /**
56
  * Determines if any tickets exist for the current event (a specific event
57
  * may be specified, though, by passing the post ID or post object).
71
  }//end if
72
 
73
  if ( ! function_exists( 'tribe_events_has_soldout' ) ) {
74
+
75
  /**
76
  * Determines if the event has sold out of tickets.
77
  *
93
  }
94
 
95
  if ( ! function_exists( 'tribe_events_partially_soldout' ) ) {
96
+
97
  /**
98
  * Indicates if one or more of the tickets available for this event (but not
99
  * all) have sold out.
132
  }//end if
133
 
134
  if ( ! function_exists( 'tribe_events_count_available_tickets' ) ) {
135
+
136
  /**
137
  * Counts the total number of tickets still available for sale for a
138
  * specific event.
259
  $parts[ $type . '-stock' ] = $html['stock'] = $stock_html;
260
 
261
  if ( 'rsvp' === $type ) {
262
+ $button_label = sprintf( _x( '%s Now!', 'list view rsvp now ticket button', 'event-tickets' ), tribe_get_rsvp_label_singular( 'list_view_rsvp_now_button' ) );
263
  $button_anchor = '#rsvp-now';
264
  } else {
265
+ $button_label = _x( 'Buy Now!', 'list view buy now ticket button', 'event-tickets' );
266
  $button_anchor = '#buy-tickets';
267
  }
268
 
269
  $permalink = get_the_permalink( $event_id );
270
  $query_string = parse_url( $permalink, PHP_URL_QUERY );
271
+ $query_params = empty( $query_string ) ? [] : (array) explode( '&', $query_string );
272
 
273
  $button = '<form method="get" action="' . esc_url( $permalink . $button_anchor ) . '">';
274
 
283
  }
284
  }
285
 
286
+ $button .= '<button type="submit" name="tickets_process" class="tribe-button">' . esc_html( $button_label ) . '</button></form>';
287
 
288
  $parts[ $type . '-button' ] = $html['button'] = $button;
289
  }
311
  }
312
 
313
  if ( ! function_exists( 'tribe_tickets_has_unlimited_stock_tickets' ) ) {
314
+
315
  /**
316
  * Returns true if the event contains one or more tickets which are not
317
  * subject to any inventory limitations.
341
  }//end if
342
 
343
  if ( ! function_exists( 'tribe_events_product_is_ticket' ) ) {
344
+
345
  /**
346
  * Determines if the product object (or product ID) represents a ticket for
347
  * an event.
357
  }//end if
358
 
359
  if ( ! function_exists( 'tribe_events_get_ticket_event' ) ) {
360
+
361
  /**
362
  * Accepts the post object or ID for a product and, if it represents an event
363
  * ticket, returns the corresponding event object.
374
  }//end if
375
 
376
  if ( ! function_exists( 'tribe_events_ticket_is_on_sale' ) ) {
377
+
378
  /**
379
  * Checks if the ticket is on sale (in relation to it's start/end sale dates).
380
  *
393
  }//end if
394
 
395
  if ( ! function_exists( 'tribe_events_has_tickets_on_sale' ) ) {
396
+
397
  /**
398
  * Checks if the event has any tickets on sale
399
  *
413
  }
414
 
415
  if ( ! function_exists( 'tribe_tickets_get_ticket_stock_message' ) ) {
416
+
417
  /**
418
  * Gets the "tickets sold" message for a given ticket
419
  *
420
  * @param Tribe__Tickets__Ticket_Object $ticket Ticket to analyze
421
  *
422
+ * @since 4.10.9 Use customizable ticket name functions.
423
+ *
424
  * @return string
425
  */
426
  function tribe_tickets_get_ticket_stock_message( Tribe__Tickets__Ticket_Object $ticket ) {
458
 
459
  $sold_label = __( 'issued', 'event-tickets' );
460
  if ( 'Tribe__Tickets__RSVP' === $ticket->provider_class ) {
461
+ $sold_label = sprintf( _x( "%s'd going", 'RSVPs going', 'event-tickets' ), tribe_get_rsvp_label_singular() );
462
  }
463
 
464
  // Message for how many remain available
485
  }
486
  }
487
 
488
+ if ( ! function_exists( 'tribe_tickets_resource_url' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
489
 
490
  /**
491
+ * Returns or echoes a url to a file in the Event Tickets plugin resources directory
492
+ *
493
+ * @param string $resource the filename of the resource
494
+ * @param bool $echo whether or not to echo the url
495
+ * @param string $root_dir directory to hunt for resource files (src or common)
496
  *
497
+ * @return string
498
+ * @category Tickets
499
  */
500
+ function tribe_tickets_resource_url( $resource, $echo = false, $root_dir = 'src' ) {
501
+ $extension = pathinfo( $resource, PATHINFO_EXTENSION );
502
 
503
+ if ( 'src' !== $root_dir ) {
504
+ return tribe_resource_url( $resource, $echo, $root_dir );
505
+ }
506
 
507
+ $resources_path = $root_dir . '/resources/';
508
+ switch ( $extension ) {
509
+ case 'css':
510
+ $resource_path = $resources_path . 'css/';
511
+ break;
512
+ case 'js':
513
+ $resource_path = $resources_path . 'js/';
514
+ break;
515
+ case 'scss':
516
+ $resource_path = $resources_path . 'scss/';
517
+ break;
518
+ default:
519
+ $resource_path = $resources_path;
520
+ break;
521
+ }
522
 
523
+ $path = $resource_path . $resource;
 
 
 
 
 
 
 
 
 
 
 
 
 
524
 
525
+ $url = plugins_url( Tribe__Tickets__Main::instance()->plugin_dir . $path );
 
 
 
 
 
 
 
526
 
527
+ /**
528
+ * Filter the ticket resource URL
529
+ *
530
+ * @var $url Resource URL
531
+ * @var $resource The filename of the resource
532
+ */
533
+ $url = apply_filters( 'tribe_tickets_resource_url', $url, $resource );
534
 
535
+ if ( $echo ) {
536
+ echo esc_url( $url );
537
+ }
 
 
 
 
 
 
538
 
539
+ return $url;
 
 
540
  }
541
+ }
542
 
543
+ if ( ! function_exists( 'tribe_tickets_get_template_part' ) ) {
 
 
 
 
544
 
545
+ /**
546
+ * Includes a template part, similar to the WP get template part, but looks
547
+ * in the correct directories for Tribe Tickets templates
548
+ *
549
+ * @param string $slug The Base template name
550
+ * @param null|string $name (optional) if set will try to include `{$slug}-{$name}.php` file
551
+ * @param array $data (optional) array of vars to inject into the template part
552
+ * @param boolean $echo (optional) Allows the user to print or return the template
553
+ *
554
+ * @return string|void It will depend if it's echoing or not
555
+ * @uses Tribe__Tickets__Templates::get_template_hierarchy
556
+ *
557
+ */
558
+ function tribe_tickets_get_template_part( $slug, $name = null, array $data = null, $echo = true ) {
559
 
560
  /**
561
+ * Fires an Action before echoing the Template
562
  *
563
+ * @param string $slug Slug for this template
564
+ * @param string $name Template name
565
+ * @param array $data The Data that will be used on this template
 
566
  */
567
+ do_action( 'tribe_tickets_pre_get_template_part', $slug, $name, $data );
568
 
569
+ // Setup possible parts
570
+ $templates = array();
571
+ if ( isset( $name ) ) {
572
+ $templates[] = $slug . '-' . $name . '.php';
573
  }
574
+ $templates[] = $slug . '.php';
575
 
 
576
  /**
577
+ * Allow users to filter which templates can be included
578
  *
579
  * @param string $template The Template file, which is a relative path from the Folder we are dealing with
 
580
  * @param string $slug Slug for this template
581
  * @param string $name Template name
582
  * @param array $data The Data that will be used on this template
583
  */
584
+ $templates = apply_filters( 'tribe_tickets_get_template_part_templates', $templates, $slug, $name, $data );
 
585
 
586
+ // Make any provided variables available in the template's symbol table
587
+ if ( is_array( $data ) ) {
588
+ extract( $data );
589
+ }
 
 
 
 
 
 
590
 
591
+ $html = null;
592
+
593
+ // loop through templates, return first one found.
594
+ foreach ( $templates as $template ) {
595
+ $file = Tribe__Tickets__Templates::get_template_hierarchy( $template, array( 'disable_view_check' => true ) );
596
+
597
+ /**
598
+ * Allow users to filter which template will be included
599
+ *
600
+ * @param string $file Complete path to include the PHP File
601
+ * @param string $template The Template file, which is a relative path from the Folder we are dealing with
602
+ * @param string $slug Slug for this template
603
+ * @param string $name Template name
604
+ * @param array $data The Data that will be used on this template
605
+ */
606
+ $file = apply_filters( 'tribe_tickets_get_template_part_path', $file, $template, $slug, $name, $data );
607
+
608
+ /**
609
+ * A more Specific Filter that will include the template name
610
+ *
611
+ * @param string $file Complete path to include the PHP File
612
+ * @param string $slug Slug for this template
613
+ * @param string $name Template name
614
+ * @param array $data The Data that will be used on this template
615
+ */
616
+ $file = apply_filters( "tribe_tickets_get_template_part_path_{$template}", $file, $slug, $name, $data );
617
+
618
+ if ( ! file_exists( $file ) ) {
619
+ continue;
620
+ }
621
 
622
+ ob_start();
623
+ /**
624
+ * Fires an Action before including the template file
625
+ *
626
+ * @param string $template The Template file, which is a relative path from the Folder we are dealing with
627
+ * @param string $file Complete path to include the PHP File
628
+ * @param string $slug Slug for this template
629
+ * @param string $name Template name
630
+ * @param array $data The Data that will be used on this template
631
+ */
632
+ do_action( 'tribe_tickets_before_get_template_part', $template, $file, $slug, $name, $data );
633
+ include( $file );
634
+
635
+ /**
636
+ * Fires an Action After including the template file
637
+ *
638
+ * @param string $template The Template file, which is a relative path from the Folder we are dealing with
639
+ * @param string $file Complete path to include the PHP File
640
+ * @param string $slug Slug for this template
641
+ * @param string $name Template name
642
+ * @param array $data The Data that will be used on this template
643
+ */
644
+ do_action( 'tribe_tickets_after_get_template_part', $template, $file, $slug, $name, $data );
645
+ $html = ob_get_clean();
646
+
647
+ /**
648
+ * Allow users to filter the final HTML
649
+ *
650
+ * @param string $html The final HTML
651
+ * @param string $template The Template file, which is a relative path from the Folder we are dealing with
652
+ * @param string $file Complete path to include the PHP File
653
+ * @param string $slug Slug for this template
654
+ * @param string $name Template name
655
+ * @param array $data The Data that will be used on this template
656
+ */
657
+ $html = apply_filters( 'tribe_tickets_get_template_part_content', $html, $template, $file, $slug, $name, $data );
658
+
659
+ if ( $echo ) {
660
+ echo $html;
661
+ }
662
 
663
+ break;
664
+ }
665
 
666
+ /**
667
+ * Files an Action after echoing/saving the html Template
668
+ *
669
+ * @param string $slug Slug for this template
670
+ * @param string $name Template name
671
+ * @param array $data The Data that will be used on this template
672
+ */
673
+ do_action( 'tribe_tickets_post_get_template_part', $slug, $name, $data );
674
 
675
+ if ( ! $echo ) {
676
+ // Return should come at the end
677
+ return $html;
678
+ }
679
  }
680
  }
681
 
682
  if ( ! function_exists( 'tribe_tickets_post_type_enabled' ) ) {
683
+
684
  /**
685
  * Returns whether or not the provided post type allows tickets to be attached
686
  *
770
  }
771
  }
772
 
773
+ if ( ! function_exists( 'tribe_tickets_delete_capacity' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
774
 
775
+ /**
776
+ * Removes all meta for a given object capacity. Object can be a ticket, or an event/post with tickets.
777
+ *
778
+ * Note, you can pass an event/post to this function and it will merrily change the meta values
779
+ * for the event - not for the tickets!
780
+ *
781
+ * @since 4.6.2
782
+ *
783
+ * @param int|WP_Post $object WP_Post (or ID of post) We are trying to delete capacity from.
784
+ *
785
+ * @return int|false
786
+ */
787
+ function tribe_tickets_delete_capacity( $object ) {
788
 
789
+ if ( ! $object instanceof WP_Post ) {
790
+ $object = get_post( $object );
791
+ }
792
 
793
+ if ( ! $object instanceof WP_Post ) {
794
+ return false;
795
+ }
796
 
797
+ $deleted = delete_post_meta( $object->ID, tribe( 'tickets.handler' )->key_capacity );
 
 
798
 
799
+ if ( ! $deleted ) {
800
+ return $deleted;
801
+ }
 
802
 
803
+ // We only apply these when we are talking about event-like posts
804
+ if ( tribe_tickets_post_type_enabled( $object->post_type ) ) {
805
+ $shared_cap_object = new Tribe__Tickets__Global_Stock( $object->ID );
806
+ $shared_cap_object->disable();
 
807
 
808
+ // This is mostly to make sure
809
+ delete_post_meta( $object->ID, Tribe__Tickets__Global_Stock::GLOBAL_STOCK_LEVEL );
810
+ delete_post_meta( $object->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_MODE );
811
+ delete_post_meta( $object->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_CAP );
812
+ }
813
 
814
+ return $deleted;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
815
  }
816
+ }
817
 
818
+ if ( ! function_exists( 'tribe_tickets_update_capacity' ) ) {
 
 
819
 
820
+ /**
821
+ * Updates a given Object Capacity
822
+ *
823
+ * Note, you can pass an event/post to this function and it will merrily change the meta values
824
+ * for the event - not for the tickets!
825
+ *
826
+ * @since 4.6.2
827
+ *
828
+ * @param int|WP_Post|Tribe__Tickets__Ticket_Object $object Post We are trying to save capacity
829
+ * @param int $capacty What we are trying to update the capacity to.
830
+ *
831
+ * @return int|false
832
+ */
833
+ function tribe_tickets_update_capacity( $object, $capacity ) {
834
+ if ( ! is_numeric( $capacity ) ) {
835
+ return false;
836
+ }
837
 
838
+ if ( ! $object instanceof WP_Post ) {
839
+ $object = get_post( $object );
840
+ }
841
 
842
+ if ( ! $object instanceof WP_Post ) {
843
+ return false;
844
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
845
 
846
+ // Do the actual Updating of the Meta value
847
+ return update_post_meta( $object->ID, tribe( 'tickets.handler' )->key_capacity, $capacity );
 
 
 
 
848
  }
849
+ }
850
 
851
+ if ( ! function_exists( 'tribe_tickets_get_capacity' ) ) {
852
 
853
  /**
854
+ * Returns the capacity for a given Post
855
+ *
856
+ * Note while we can send a post/event we do not store capacity on events
857
+ * so the return values will always be null.
858
+ *
859
+ * @since 4.6
860
+ *
861
+ * @param int|WP_Post $post Post we are trying to fetch capacity for.
862
+ *
863
+ * @return int|null
864
  */
865
+ function tribe_tickets_get_capacity( $post ) {
866
+ // When not dealing with a Instance of Post try to set it up
867
+ if ( ! $post instanceof WP_Post ) {
868
+ $post = get_post( $post );
869
+ }
 
 
 
 
 
 
 
 
 
 
870
 
871
+ // Bail when it's not a post or ID is 0
872
+ if ( ! $post instanceof WP_Post || 0 === $post->ID ) {
873
+ return null;
874
+ }
875
 
876
+ $event_types = Tribe__Tickets__Main::instance()->post_types();
877
+ /**
878
+ * @var Tribe__Tickets__Tickets_Handler $handler
879
+ * @var Tribe__Tickets__Version $version
880
+ */
881
+ $handler = tribe( 'tickets.handler' );
882
+ $version = tribe( 'tickets.version' );
883
 
884
+ $key = $handler->key_capacity;
885
 
886
+ // When we have a legacy ticket we migrate it
887
  if (
888
  ! in_array( $post->post_type, $event_types )
889
+ && $version->is_legacy( $post->ID )
890
  ) {
891
+ $legacy_capacity = $handler->filter_capacity_support( null, $post->ID, $key );
892
+
893
+ // Cast as integer as it might be returned as numeric string on some cases
894
+ return (int) $legacy_capacity;
895
+ }
896
+
897
+ // Defaults to the ticket ID
898
+ $post_id = $post->ID;
899
+
900
+ // Return Null for when we don't have the Capacity Data
901
+ if ( ! metadata_exists( 'post', $post->ID, $key ) ) {
902
+ $mode = get_post_meta( $post->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_MODE, true );
903
+ $shared_modes = [
904
+ Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE,
905
+ Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE,
906
+ ];
907
+
908
+ // When we are in a Ticket Post Type update where we get the value from Event
909
+ if (
910
+ ! in_array( $post->post_type, $event_types )
911
+ && in_array( $mode, $shared_modes )
912
+ ) {
913
+ $event_id = tribe_tickets_get_event_ids( $post->ID );
914
 
915
+ // It will return an array of Events
916
+ if ( ! empty( $event_id ) ) {
917
+ $post_id = current( $event_id );
918
+ }
919
+ } else {
920
+ return null;
921
  }
 
 
922
  }
 
923
 
924
+ // Fetch the value
925
+ $value = get_post_meta( $post_id, $key, true );
926
 
927
+ // When dealing with an empty string we assume it's unlimited
928
+ if ( '' === $value ) {
929
+ $value = -1;
930
+ }
931
 
932
+ return (int) $value;
933
+ }
934
  }
935
 
936
+ if ( ! function_exists( 'tribe_tickets_get_readable_amount' ) ) {
937
+
938
+ /**
939
+ * Turns a Stock, Remaining, or Capacity number into a human-readable format.
940
+ *
941
+ * @since 4.6
942
+ *
943
+ * @param string|int $number Which you are trying to convert.
944
+ * @param string $mode Mode this post is on.
945
+ * @param bool $display Whether or not to echo.
946
+ *
947
+ * @return string
948
+ */
949
+ function tribe_tickets_get_readable_amount( $number, $mode = 'own', $display = false ) {
950
+ $html = [];
951
+
952
+ $show_parens = Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE === $mode || Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE === $mode;
953
+ if ( $show_parens ) {
954
+ $html[] = '(';
955
+ }
956
+
957
+ if ( -1 === (int) $number || Tribe__Tickets__Ticket_Object::UNLIMITED_STOCK === $number ) {
958
+ /** @var Tribe__Tickets__Tickets_Handler $handler */
959
+ $handler = tribe( 'tickets.handler' );
960
+
961
+ $html[] = esc_html( $handler->unlimited_term );
962
+ } else {
963
+ $html[] = esc_html( $number );
964
+ }
965
+
966
+ if ( $show_parens ) {
967
+ $html[] = ')';
968
+ }
969
+
970
+ $html = implode( '', $html );
971
+
972
+ if ( true === $display ) {
973
+ echo $html;
974
+ }
975
 
976
+ return $html;
 
 
977
  }
978
+ }
979
 
980
+ if ( ! function_exists( 'tribe_tickets_ticket_in_wc_membership_for_user' ) ) {
981
+
982
+ /**
983
+ * Checks if the specified user (defaults to currently-logged-in user) belongs to any active
984
+ * WooCommerce Membership plans, *and* if the specified ticket (by ticket ID) has any active
985
+ * member discounts applied to it. It may not be the user's membership plan specifically, so this
986
+ * template tag *may* produce some false positives.
987
+ *
988
+ * @since 4.7.3
989
+ *
990
+ * @param int $ticket_id
991
+ * @param int $user_id
992
+ *
993
+ * @return boolean
994
+ */
995
+ function tribe_tickets_ticket_in_wc_membership_for_user( $ticket_id, $user_id = 0 ) {
996
+
997
+ if (
998
+ ! function_exists( 'wc_memberships_get_user_active_memberships' )
999
+ || ! function_exists( 'wc_memberships_product_has_member_discount' )
1000
+ ) {
1001
+ return false;
1002
+ }
1003
+
1004
+ $user_id = 0 ? get_current_user_id() : $user_id;
1005
+
1006
+ $user_is_member = wc_memberships_get_user_active_memberships( $user_id );
1007
+ $ticket_has_member_discount = wc_memberships_product_has_member_discount( $ticket_id );
1008
 
1009
+ return $user_is_member && $ticket_has_member_discount;
 
 
1010
  }
1011
+ }
1012
+
1013
+ if ( ! function_exists( 'tribe_tickets' ) ) {
1014
+
1015
+ /**
1016
+ * Builds and returns the correct ticket repository.
1017
+ *
1018
+ * @since 4.8
1019
+ *
1020
+ * @param string $repository The slug of the repository to build/return.
1021
+ *
1022
+ * @return Tribe__Repository__Interface
1023
+ */
1024
+ function tribe_tickets( $repository = 'default' ) {
1025
+ $map = [
1026
+ 'default' => 'tickets.ticket-repository',
1027
+ 'rsvp' => 'tickets.ticket-repository.rsvp',
1028
+ 'tribe-commerce' => 'tickets.ticket-repository.commerce',
1029
+ 'restv1' => 'tickets.rest-v1.ticket-repository',
1030
+ ];
1031
+
1032
+ /**
1033
+ * Filters the map relating ticket repository slugs to service container bindings.
1034
+ *
1035
+ * @since 4.8
1036
+ *
1037
+ * @param array $map A map in the shape [ <repository_slug> => <service_name> ]
1038
+ * @param string $repository The currently requested implementation.
1039
+ */
1040
+ $map = apply_filters( 'tribe_tickets_ticket_repository_map', $map, $repository );
1041
 
1042
+ return tribe( Tribe__Utils__Array::get( $map, $repository, $map['default'] ) );
 
1043
  }
1044
+ }
1045
+
1046
+ if ( ! function_exists( 'tribe_attendees' ) ) {
1047
+
1048
+ /**
1049
+ * Builds and returns the correct attendee repository.
1050
+ *
1051
+ * @since 4.8
1052
+ *
1053
+ * @param string $repository The slug of the repository to build/return.
1054
+ *
1055
+ * @return Tribe__Repository__Interface
1056
+ */
1057
+ function tribe_attendees( $repository = 'default' ) {
1058
+ $map = [
1059
+ 'default' => 'tickets.attendee-repository',
1060
+ 'rsvp' => 'tickets.attendee-repository.rsvp',
1061
+ 'tribe-commerce' => 'tickets.attendee-repository.commerce',
1062
+ 'restv1' => 'tickets.rest-v1.attendee-repository',
1063
+ ];
1064
 
1065
+ /**
1066
+ * Filters the map relating attendee repository slugs to service container bindings.
1067
+ *
1068
+ * @since 4.8
1069
+ *
1070
+ * @param array $map A map in the shape [ <repository_slug> => <service_name> ]
1071
+ * @param string $repository The currently requested implementation.
1072
+ */
1073
+ $map = apply_filters( 'tribe_tickets_attendee_repository_map', $map, $repository );
1074
 
1075
+ return tribe( Tribe__Utils__Array::get( $map, $repository, $map['default'] ) );
 
1076
  }
1077
+ }
1078
 
1079
+ if ( ! function_exists( 'tribe_get_rsvp_label_singular' ) ) {
1080
+
1081
+ /**
1082
+ * Get the singular version of the RSVP label. May also be used as a verb.
1083
+ *
1084
+ * @since 4.10.9
1085
+ *
1086
+ * @param string $context Allows passing additional context to this function's filter, e.g. 'verb' or 'template.php'.
1087
+ *
1088
+ * @return string
1089
+ */
1090
+ function tribe_get_rsvp_label_singular( $context = '' ) {
1091
+ /**
1092
+ * Allows customization of the singular version of the RSVP label.
1093
+ *
1094
+ * @since 4.10.9
1095
+ *
1096
+ * @param string $label The singular version of the RSVP label. Defaults to "RSVP".
1097
+ * @param string $context The context in which this string is filtered, e.g. 'verb' or 'template.php'.
1098
+ */
1099
+ return apply_filters( 'tribe_get_rsvp_label_singular', _x( 'RSVP', 'singular label for RSVP', 'event-tickets' ), $context );
1100
+ }
1101
  }
1102
 
1103
+ if ( ! function_exists( 'tribe_get_rsvp_label_singular_lowercase' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
1104
 
1105
+ /**
1106
+ * Get the lowercase singular version of the RSVP label. May also be used as a verb.
1107
+ *
1108
+ * @since 4.10.9
1109
+ *
1110
+ * @param string $context Allows passing additional context to this function's filter, e.g. 'verb' or 'template.php'.
1111
+ *
1112
+ * @return string
1113
+ */
1114
+ function tribe_get_rsvp_label_singular_lowercase( $context = '' ) {
1115
+ /**
1116
+ * Allows customization of the lowercase singular version of the RSVP label.
1117
+ *
1118
+ * @since 4.10.9
1119
+ *
1120
+ * @param string $label The lowercase singular version of the RSVP label. Defaults to "rsvp".
1121
+ * @param string $context The context in which this string is filtered, e.g. 'verb' or 'template.php'.
1122
+ */
1123
+ return apply_filters( 'tribe_get_rsvp_label_singular_lowercase', _x( 'rsvp', 'lowercase singular label for RSVP', 'event-tickets' ), $context );
1124
  }
1125
+ }
1126
+
1127
+ if ( ! function_exists( 'tribe_get_rsvp_label_plural' ) ) {
1128
 
1129
+ /**
1130
+ * Get the plural version of the RSVP label. May also be used as a verb.
1131
+ *
1132
+ * @since 4.10.9
1133
+ *
1134
+ * @param string $context Allows passing additional context to this function's filter, e.g. 'verb' or 'template.php'.
1135
+ *
1136
+ * @return string
1137
+ */
1138
+ function tribe_get_rsvp_label_plural( $context = '' ) {
1139
+ /**
1140
+ * Allows customization of the plural version of the RSVP label.
1141
+ *
1142
+ * @since 4.10.9
1143
+ *
1144
+ * @param string $label The plural version of the RSVP label, defaults to "RSVPs".
1145
+ * @param string $context The context in which this string is filtered, e.g. 'verb' or 'template.php'.
1146
+ */
1147
+ return apply_filters( 'tribe_get_rsvp_label_plural', _x( 'RSVPs', 'plural label for RSVPs', 'event-tickets' ), $context );
1148
+ }
1149
+ }
1150
 
1151
+ if ( ! function_exists( 'tribe_get_rsvp_label_plural_lowercase' ) ) {
 
1152
 
1153
+ /**
1154
+ * Get the lowercase plural version of the RSVP label. May also be used as a verb.
1155
+ *
1156
+ * @since 4.10.9
1157
+ *
1158
+ * @param string $context Allows passing additional context to this function's filter, e.g. 'verb' or 'template.php'.
1159
+ *
1160
+ * @return string
1161
+ */
1162
+ function tribe_get_rsvp_label_plural_lowercase( $context = '' ) {
1163
+ /**
1164
+ * Allows customization of the lowercase plural version of the RSVP label.
1165
+ *
1166
+ * @since 4.10.9
1167
+ *
1168
+ * @param string $label The lowercase plural version of the RSVP label, defaults to "rsvps".
1169
+ * @param string $context The context in which this string is filtered, e.g. 'verb' or 'template.php'.
1170
+ */
1171
+ return apply_filters( 'tribe_get_rsvp_label_plural_lowercase', _x( 'rsvps', 'lowercase plural label for RSVPs', 'event-tickets' ), $context );
1172
+ }
1173
  }
1174
 
1175
+ if ( ! function_exists( 'tribe_get_ticket_label_singular' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1176
 
1177
  /**
1178
+ * Get the singular version of the Ticket label. May also be used as a verb.
1179
  *
1180
+ * @since 4.10.9
1181
  *
1182
+ * @param string $context Allows passing additional context to this function's filter, e.g. 'verb' or 'template.php'.
1183
+ *
1184
+ * @return string
1185
  */
1186
+ function tribe_get_ticket_label_singular( $context = '' ) {
1187
+ /**
1188
+ * Allows customization of the singular version of the Ticket label.
1189
+ *
1190
+ * @since 4.10.9
1191
+ *
1192
+ * @param string $label The singular version of the Ticket label, defaults to "Ticket".
1193
+ * @param string $context The context in which this string is filtered, e.g. 'verb' or 'template.php'.
1194
+ */
1195
+ return apply_filters( 'tribe_get_ticket_label_singular', _x( 'Ticket', 'singular label for Ticket', 'event-tickets' ), $context );
1196
+ }
1197
+ }
1198
 
1199
+ if ( ! function_exists( 'tribe_get_ticket_label_singular_lowercase' ) ) {
1200
+
1201
+ /**
1202
+ * Get the lowercase singular version of the Ticket label. May also be used as a verb.
1203
+ *
1204
+ * @since 4.10.9
1205
+ *
1206
+ * @param string $context Allows passing additional context to this function's filter, e.g. 'verb' or 'template.php'.
1207
+ *
1208
+ * @return string
1209
+ */
1210
+ function tribe_get_ticket_label_singular_lowercase( $context = '' ) {
1211
+ /**
1212
+ * Allows customization of the lowercase singular version of the Ticket label.
1213
+ *
1214
+ * @since 4.10.9
1215
+ *
1216
+ * @param string $label The lowercase singular version of the Ticket label, defaults to "ticket".
1217
+ * @param string $context The context in which this string is filtered, e.g. 'verb' or 'template.php'.
1218
+ */
1219
+ return apply_filters( 'tribe_get_ticket_label_singular_lowercase', _x( 'ticket', 'lowercase singular label for Ticket', 'event-tickets' ), $context );
1220
+ }
1221
  }
1222
 
1223
+ if ( ! function_exists( 'tribe_get_ticket_label_plural' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1224
 
1225
  /**
1226
+ * Get the plural version of the Ticket label. May also be used as a verb.
1227
  *
1228
+ * @since 4.10.9
1229
+ *
1230
+ * @param string $context Allows passing additional context to this function's filter, e.g. 'verb' or 'template.php'.
1231
  *
1232
+ * @return string
 
1233
  */
1234
+ function tribe_get_ticket_label_plural( $context = '' ) {
1235
+ /**
1236
+ * Allows customization of the plural version of the Ticket label.
1237
+ *
1238
+ * @since 4.10.9
1239
+ *
1240
+ * @param string $label The plural version of the Ticket label, defaults to "Tickets".
1241
+ * @param string $context The context in which this string is filtered, e.g. 'verb' or 'template.php'.
1242
+ */
1243
+ return apply_filters( 'tribe_get_ticket_label_plural', _x( 'Tickets', 'plural label for Tickets', 'event-tickets' ), $context );
1244
+ }
1245
+ }
1246
+
1247
+ if ( ! function_exists( 'tribe_get_ticket_label_plural_lowercase' ) ) {
1248
 
1249
+ /**
1250
+ * Get the lowercase plural version of the Ticket label. May also be used as a verb.
1251
+ *
1252
+ * @since 4.10.9
1253
+ *
1254
+ * @param string $context Allows passing additional context to this function's filter, e.g. 'verb' or 'template.php'.
1255
+ *
1256
+ * @return string
1257
+ */
1258
+ function tribe_get_ticket_label_plural_lowercase( $context = '' ) {
1259
+ /**
1260
+ * Allows customization of the lowercase plural version of the Ticket label.
1261
+ *
1262
+ * @since 4.10.9
1263
+ *
1264
+ * @param string $label The lowercase plural version of the Ticket label, defaults to "tickets".
1265
+ * @param string $context The context in which this string is filtered, e.g. 'verb' or 'template.php'.
1266
+ */
1267
+ return apply_filters( 'tribe_get_ticket_label_plural_lowercase', _x( 'tickets', 'lowercase plural label for Tickets', 'event-tickets' ), $context );
1268
+ }
1269
  }
src/views/blocks/attendees/view-link.php CHANGED
@@ -7,20 +7,22 @@
7
  * the Message that Will link to the Tickets Page
8
  *
9
  * Override this template in your own theme by creating a file at:
10
- * [your-theme]/tribe/tickets/blocks/attendees/view-link.php
11
  *
12
  * See more documentation about our Blocks Editor templating system.
13
  *
14
- * @link {INSERT_ARTICLE_LINK_HERE}
15
- *
16
  * @since 4.9
17
  * @since 4.10.8 Renamed template from order-links.php to view-link.php. Updated to not use the now-deprecated
18
- * third parameter of `get_description_rsvp_ticket()` and to simplify the template's logic.
 
 
 
 
 
19
  *
20
- * @version 4.10.8
21
  */
22
 
23
-
24
  if ( ! defined( 'ABSPATH' ) ) {
25
  die( '-1' );
26
  }
@@ -34,16 +36,20 @@ $user_id = get_current_user_id();
34
  $is_event_page = class_exists( 'Tribe__Events__Main' ) && Tribe__Events__Main::POSTTYPE === $event->post_type;
35
 
36
  $events_label_singular = $post_type->labels->singular_name;
37
- $counters = array();
38
  $rsvp_count = $view->count_rsvp_attendees( $event_id, $user_id );
39
  $ticket_count = $view->count_ticket_attendees( $event_id, $user_id );
40
 
41
- if ( 0 !== $rsvp_count ) {
42
- $counters[] = sprintf( _n( '%d %s', '%d %s', $rsvp_count, 'event-tickets' ), $rsvp_count, _nx( 'RSVP', 'RSVPs', $rsvp_count, 'Singular and plural texts for RSVP(s)', 'event-tickets' ) );
 
 
43
  }
44
 
45
- if ( 0 !== $ticket_count ) {
46
- $counters[] = sprintf( _n( '%d %s', '%d %s', $ticket_count, 'event-tickets' ), $ticket_count, _nx( 'Ticket', 'Tickets', $ticket_count, 'Singular and plural texts for Ticket(s)', 'event-tickets' ) );
 
 
47
  }
48
 
49
  if ( empty( $counters ) ) {
@@ -52,7 +58,7 @@ if ( empty( $counters ) ) {
52
 
53
  $link = $view->get_tickets_page_url( $event_id, $is_event_page );
54
 
55
- $message = sprintf( esc_html__( 'You have %s for this %s.', 'event-tickets' ), implode( __( ' and ', 'event-tickets' ), $counters ), $events_label_singular );
56
  ?>
57
 
58
  <div class="tribe-link-view-attendee">
7
  * the Message that Will link to the Tickets Page
8
  *
9
  * Override this template in your own theme by creating a file at:
10
+ * [your-theme]/tribe/tickets/blocks/attendees/description.php
11
  *
12
  * See more documentation about our Blocks Editor templating system.
13
  *
 
 
14
  * @since 4.9
15
  * @since 4.10.8 Renamed template from order-links.php to view-link.php. Updated to not use the now-deprecated
16
+ * third parameter of `get_description_rsvp_ticket()` and to simplify the template's logic.
17
+ * @since 4.10.9 Uses new functions to get singular and plural texts.
18
+ *
19
+ * @link {INSERT_ARTICLE_LINK_HERE}
20
+ *
21
+ * @version 4.10.9
22
  *
23
+ * @var Tribe__Tickets__Editor__Template $this
24
  */
25
 
 
26
  if ( ! defined( 'ABSPATH' ) ) {
27
  die( '-1' );
28
  }
36
  $is_event_page = class_exists( 'Tribe__Events__Main' ) && Tribe__Events__Main::POSTTYPE === $event->post_type;
37
 
38
  $events_label_singular = $post_type->labels->singular_name;
39
+ $counters = [];
40
  $rsvp_count = $view->count_rsvp_attendees( $event_id, $user_id );
41
  $ticket_count = $view->count_ticket_attendees( $event_id, $user_id );
42
 
43
+ if ( 1 === $rsvp_count ) {
44
+ $counters[] = sprintf( _x( '%1d %2s', 'RSVP count singular', 'event-tickets' ), $rsvp_count, tribe_get_rsvp_label_singular( basename( __FILE__ ) ) );
45
+ } elseif ( 1 < $rsvp_count ) {
46
+ $counters[] = sprintf( _x( '%1d %2s', 'RSVP count plural', 'event-tickets' ), $rsvp_count, tribe_get_rsvp_label_plural( basename( __FILE__ ) ) );
47
  }
48
 
49
+ if ( 1 === $ticket_count ) {
50
+ $counters[] = sprintf( _x( '%1d %2s', 'Ticket count singular', 'event-tickets' ), $ticket_count, tribe_get_ticket_label_singular( basename( __FILE__ ) ) );
51
+ } elseif ( 1 < $ticket_count ) {
52
+ $counters[] = sprintf( _x( '%1d %2s', 'Ticket count plural', 'event-tickets' ), $ticket_count, tribe_get_ticket_label_plural( basename( __FILE__ ) ) );
53
  }
54
 
55
  if ( empty( $counters ) ) {
58
 
59
  $link = $view->get_tickets_page_url( $event_id, $is_event_page );
60
 
61
+ $message = esc_html( sprintf( __( 'You have %1s for this %2s.', 'event-tickets' ), implode( _x( ' and ', 'separator if there are both RSVPs and Tickets', 'event-tickets' ), $counters ), $events_label_singular ) );
62
  ?>
63
 
64
  <div class="tribe-link-view-attendee">
src/views/blocks/rsvp/content-inactive.php CHANGED
@@ -11,11 +11,14 @@
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9
14
- * @version 4.9.4
15
  *
 
16
  */
17
 
18
- $message = $this->get( 'all_past' ) ? __( 'RSVPs are no longer available', 'event-tickets' ) : __( 'RSVPs are not yet available', 'event-tickets' );
 
 
19
  ?>
20
  <div class="tribe-block__rsvp__content tribe-block__rsvp__content--inactive">
21
  <div class="tribe-block__rsvp__details__status">
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9
14
+ * @since 4.10.9 Use function for text.
15
  *
16
+ * @version 4.10.9
17
  */
18
 
19
+ $message = $this->get( 'all_past' )
20
+ ? sprintf( _x( '%s are no longer available', 'RSVP block inactive content in the past', 'event-tickets' ), tribe_get_rsvp_label_plural( 'block_inactive_content_past' ) )
21
+ : sprintf( _x( '%s are not yet available', 'RSVP block inactive content', 'event-tickets' ), tribe_get_rsvp_label_plural( 'block_inactive_content' ) );
22
  ?>
23
  <div class="tribe-block__rsvp__content tribe-block__rsvp__content--inactive">
24
  <div class="tribe-block__rsvp__details__status">
src/views/blocks/rsvp/form/error.php CHANGED
@@ -11,12 +11,13 @@
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
- * @version 4.9.4
15
  *
 
16
  */
17
  ?>
18
  <div class="tribe-block__rsvp__message__error">
19
 
20
- <?php esc_html_e( 'Please fill in the RSVP confirmation name and email fields.', 'event-tickets' ); ?>
21
 
22
  </div>
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
+ * @since 4.10.9 Uses new functions to get singular and plural texts.
15
  *
16
+ * @version 4.10.9
17
  */
18
  ?>
19
  <div class="tribe-block__rsvp__message__error">
20
 
21
+ <?php echo esc_html( sprintf( __( 'Please fill in the %s confirmation name and email fields.', 'event-tickets' ), tribe_get_rsvp_label_singular( basename( __FILE__ ) ) ) ); ?>
22
 
23
  </div>
src/views/blocks/rsvp/form/quantity.php CHANGED
@@ -3,7 +3,9 @@
3
  * This template renders the RSVP ticket form quantity input
4
  *
5
  * @since 4.9
6
- * @version 4.10.4
 
 
7
  */
8
  ?>
9
  <div class="tribe-block__rsvp__number-input">
@@ -15,6 +17,6 @@
15
  <?php $this->template( 'blocks/rsvp/form/quantity-plus' ); ?>
16
  </div>
17
  <span class="tribe-block__rsvp__number-input-label">
18
- <?php echo esc_html__( 'RSVPs', 'event-tickets' ); ?>
19
  </span>
20
  </div>
3
  * This template renders the RSVP ticket form quantity input
4
  *
5
  * @since 4.9
6
+ * @since 4.10.9 Uses new functions to get singular and plural texts.
7
+ *
8
+ * @version 4.10.9
9
  */
10
  ?>
11
  <div class="tribe-block__rsvp__number-input">
17
  <?php $this->template( 'blocks/rsvp/form/quantity-plus' ); ?>
18
  </div>
19
  <span class="tribe-block__rsvp__number-input-label">
20
+ <?php echo esc_html( tribe_get_rsvp_label_plural( 'number_input_label' ) ); ?>
21
  </span>
22
  </div>
src/views/blocks/rsvp/form/submit-button.php CHANGED
@@ -11,8 +11,9 @@
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
- * @version 4.9.4
15
  *
 
16
  */
17
 
18
  ?>
@@ -22,5 +23,5 @@
22
  value="1"
23
  class="tribe-block__rsvp__submit-button"
24
  >
25
- <?php esc_html_e( 'Submit RSVP', 'event-tickets' ); ?>
26
- </button>
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
+ * @since 4.10.9 Use function for submit button text.
15
  *
16
+ * @version 4.10.9
17
  */
18
 
19
  ?>
23
  value="1"
24
  class="tribe-block__rsvp__submit-button"
25
  >
26
+ <?php echo esc_html( sprintf( _x( 'Submit %s', 'blocks rsvp form submit button', 'event-tickets' ), tribe_get_rsvp_label_singular( 'blocks_rsvp_form_submit_button' ) ) ); ?>
27
+ </button>
src/views/blocks/rsvp/icon.php CHANGED
@@ -11,12 +11,13 @@
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
- * @version 4.9.4
15
  *
 
16
  */
17
 
18
  ?>
19
  <div class="tribe-block__rsvp__icon">
20
  <?php $this->template( 'blocks/rsvp/icon-svg' ); ?>
21
- <?php esc_html_e( 'RSVP', 'event-tickets' ) ?>
22
  </div>
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
+ * @since 4.10.9 Uses new functions to get singular and plural texts.
15
  *
16
+ * @version 4.10.9
17
  */
18
 
19
  ?>
20
  <div class="tribe-block__rsvp__icon">
21
  <?php $this->template( 'blocks/rsvp/icon-svg' ); ?>
22
+ <?php echo esc_html( tribe_get_rsvp_label_singular( basename( __FILE__ ) ) ); ?>
23
  </div>
src/views/blocks/rsvp/messages/success.php CHANGED
@@ -11,13 +11,14 @@
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
- * @version 4.9.4
15
  *
 
16
  */
17
 
18
  ?>
19
  <div class="tribe-block__rsvp__message__success">
20
 
21
- <?php esc_html_e( 'Your RSVP has been received! Check your email for your RSVP confirmation.', 'event-tickets' ); ?>
22
 
23
  </div>
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
+ * @since 4.10.9 Use function for text.
15
  *
16
+ * @version 4.10.9
17
  */
18
 
19
  ?>
20
  <div class="tribe-block__rsvp__message__success">
21
 
22
+ <?php echo esc_html( sprintf( _x( 'Your %1$s has been received! Check your email for your %1$s confirmation.', 'blocks rsvp messages success', 'event-tickets' ), tribe_get_rsvp_label_singular( 'blocks_rsvp_messages_success' ) ) ); ?>
23
 
24
  </div>
src/views/blocks/rsvp/status/full.php CHANGED
@@ -11,8 +11,9 @@
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
- * @version 4.9.4
15
  *
 
16
  */
17
 
18
- esc_html_e( 'RSVP Full', 'event-tickets' );
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
+ * @since 4.10.9 Use function for text.
15
  *
16
+ * @version 4.10.9
17
  */
18
 
19
+ echo esc_html( sprintf( _x( '%s Full', 'blocks rsvp status full', 'event-tickets' ), tribe_get_rsvp_label_singular( 'blocks_rsvp_status_full' ) ) );
src/views/blocks/tickets/registration/summary/title.php CHANGED
@@ -11,14 +11,15 @@
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
- * @version 4.9.4
15
  *
 
16
  */
17
 
18
  ?>
19
  <div class="tribe-block__tickets__registration__title">
20
  <header>
21
- <h2><?php esc_html_e( 'Ticket Registration', 'event-tickets' ); ?></h2>
22
  </header>
23
  </div>
24
 
11
  * @link {INSERT_ARTICLE_LINK_HERE}
12
  *
13
  * @since 4.9.3
14
+ * @since 4.10.9 Uses new functions to get singular and plural texts.
15
  *
16
+ * @version 4.10.9
17
  */
18
 
19
  ?>
20
  <div class="tribe-block__tickets__registration__title">
21
  <header>
22
+ <h2><?php echo esc_html( sprintf( __( '%s Registration', 'event-tickets' ), tribe_get_ticket_label_singular( basename( __FILE__ ) ) ) ); ?></h2>
23
  </header>
24
  </div>
25
 
src/views/registration/content.php CHANGED
@@ -7,7 +7,9 @@
7
  *
8
  * @since 4.9
9
  * @since 4.10.1 Update template paths to add the "registration/" prefix
10
- * @version 4.10.4
 
 
11
  *
12
  */
13
  // If there are no events with tickets in cart, print the empty cart template
@@ -20,8 +22,27 @@ $passed_provider = tribe_get_request_var('provider');
20
  $passed_provider_class = $this->get_form_class( $passed_provider );
21
  ?>
22
 
23
- <?php foreach ( $events as $event_id => $tickets ) : ?>
24
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  $provider_class = $passed_provider_class;
26
  $providers = array_unique( wp_list_pluck( wp_list_pluck( $tickets, 'provider'), 'attendee_object') );
27
 
7
  *
8
  * @since 4.9
9
  * @since 4.10.1 Update template paths to add the "registration/" prefix
10
+ * @since 4.10.9 Add Filter to show an event/post tickets on AR Page
11
+ *
12
+ * @version 4.10.9
13
  *
14
  */
15
  // If there are no events with tickets in cart, print the empty cart template
22
  $passed_provider_class = $this->get_form_class( $passed_provider );
23
  ?>
24
 
25
+ <?php foreach ( $events as $event_id => $tickets ) :
26
+
27
+ // Remove an event/post tickets if none have attendee registration.
28
+ $show_tickets = tribe( 'tickets.attendee_registration' )->has_attendee_registration_enabled_in_array_of_tickets( $tickets );
29
+
30
+ /**
31
+ * Filter to show an event/post tickets on Attendee Registration page regardless if they are enabled.
32
+ *
33
+ * @param boolean $show_tickets Rrue or false to show tickets for an event.
34
+ * @param array $tickets An array of ticket products.
35
+ * @param int $event_id The event/post ID.
36
+ *
37
+ * @since 4.10.9
38
+ */
39
+ $show_tickets = apply_filters( 'tribe_tickets_filter_showing_tickets_on_attendee_registration', $show_tickets, $tickets, $event_id );
40
+
41
+ if ( ! $show_tickets ) {
42
+ continue;
43
+ }
44
+
45
+
46
  $provider_class = $passed_provider_class;
47
  $providers = array_unique( wp_list_pluck( wp_list_pluck( $tickets, 'provider'), 'attendee_object') );
48
 
src/views/tickets/email.php CHANGED
@@ -15,7 +15,15 @@
15
  * 'ticket_id'
16
  * 'security_code')
17
  *
18
- * @version 4.7.6
 
 
 
 
 
 
 
 
19
  *
20
  * @var array $tickets An array of tickets in the format documented above.
21
  */
@@ -399,7 +407,7 @@
399
  <span style="color:#0a0a0e !important; font-family: 'Helvetica Neue', Helvetica, sans-serif; font-size:15px;"><?php echo $ticket['ticket_id']; ?></span>
400
  </td>
401
  <td class="ticket-details" valign="top" align="left" width="120" style="padding: 0; width:120px; margin:0 !important;">
402
- <h6 style="color:#909090 !important; margin:0 0 10px 0; font-family: 'Helvetica Neue', Helvetica, sans-serif; text-transform:uppercase; font-size:13px; font-weight:700 !important;"><?php esc_html_e( 'Ticket Type', 'event-tickets' ); ?></h6>
403
  <span style="color:#0a0a0e !important; font-family: 'Helvetica Neue', Helvetica, sans-serif; font-size:15px;"><?php echo $ticket['ticket_name']; ?></span>
404
  </td>
405
  <td class="ticket-details" valign="top" align="left" width="120" style="padding: 0 !important; width:120px; margin:0 !important;">
15
  * 'ticket_id'
16
  * 'security_code')
17
  *
18
+ * @since 4.0
19
+ * @since 4.5.11 Ability to remove display of event date.
20
+ * @since 4.7.4 Change event date to display by default.
21
+ * Display WooCommerce featured image.
22
+ * Current ticket action hook before output.
23
+ * @since 4.7.6 Ability to filter ticket image.
24
+ * @since 4.10.9 Use function for text.
25
+ *
26
+ * @version 4.10.9
27
  *
28
  * @var array $tickets An array of tickets in the format documented above.
29
  */
407
  <span style="color:#0a0a0e !important; font-family: 'Helvetica Neue', Helvetica, sans-serif; font-size:15px;"><?php echo $ticket['ticket_id']; ?></span>
408
  </td>
409
  <td class="ticket-details" valign="top" align="left" width="120" style="padding: 0; width:120px; margin:0 !important;">
410
+ <h6 style="color:#909090 !important; margin:0 0 10px 0; font-family: 'Helvetica Neue', Helvetica, sans-serif; text-transform:uppercase; font-size:13px; font-weight:700 !important;"><?php echo esc_html( sprintf( _x( '%s Type', 'ticket type email heading', 'event-tickets' ), tribe_get_ticket_label_singular( 'ticket_type_email_heading' ) ) ); ?></h6>
411
  <span style="color:#0a0a0e !important; font-family: 'Helvetica Neue', Helvetica, sans-serif; font-size:15px;"><?php echo $ticket['ticket_name']; ?></span>
412
  </td>
413
  <td class="ticket-details" valign="top" align="left" width="120" style="padding: 0 !important; width:120px; margin:0 !important;">
src/views/tickets/orders-pp-tickets.php CHANGED
@@ -6,8 +6,10 @@
6
  *
7
  * @package TribeEventsCalendar
8
  *
9
- * @version 4.7
 
10
  *
 
11
  */
12
 
13
  if ( ! defined( 'ABSPATH' ) ) {
@@ -29,7 +31,11 @@ if ( ! $view->has_ticket_attendees( $post_id, $user_id ) ) {
29
  $attendee_groups = $view->get_post_attendees_by_purchaser( $post_id, $user_id );
30
  ?>
31
  <div class="tribe-pp">
32
- <h2><?php printf( esc_html__( 'My Tickets for This %s', 'event-tickets' ), $post_type->labels->singular_name ); ?></h2>
 
 
 
 
33
  <?php foreach ( $attendee_groups as $attendee_group ) : ?>
34
  <?php
35
  $first_attendee = reset( $attendee_group );
6
  *
7
  * @package TribeEventsCalendar
8
  *
9
+ * @since 4.7
10
+ * @since 4.10.9 Uses new functions to get singular and plural texts.
11
  *
12
+ * @version 4.10.9
13
  */
14
 
15
  if ( ! defined( 'ABSPATH' ) ) {
31
  $attendee_groups = $view->get_post_attendees_by_purchaser( $post_id, $user_id );
32
  ?>
33
  <div class="tribe-pp">
34
+ <h2><?php echo esc_html( sprintf(
35
+ __( 'My %1$s for this %2$s', 'event-tickets' ),
36
+ tribe_get_ticket_label_plural( basename( __FILE__ ) ),
37
+ $post_type->labels->singular_name
38
+ ) ); ?></h2>
39
  <?php foreach ( $attendee_groups as $attendee_group ) : ?>
40
  <?php
41
  $first_attendee = reset( $attendee_group );
src/views/tickets/orders-rsvp.php CHANGED
@@ -5,8 +5,11 @@
5
  * Override this template in your own theme by creating a file at [your-theme]/tribe-events/tickets/orders-rsvp.php
6
  *
7
  * @package TribeEventsCalendar
8
- * @version 4.5.5
9
  *
 
 
 
 
10
  */
11
 
12
  if ( ! defined( 'ABSPATH' ) ) {
@@ -26,7 +29,7 @@ if ( ! $view->has_rsvp_attendees( $post_id, $user_id ) ) {
26
  $attendee_groups = $view->get_event_rsvp_attendees_by_purchaser( $post_id, $user_id );
27
  ?>
28
  <div class="tribe-rsvp">
29
- <h2><?php printf( esc_html__( 'My RSVPs for This %s', 'event-tickets' ), $post_type->labels->singular_name ); ?></h2>
30
  <?php foreach ( $attendee_groups as $attendee_group ): ?>
31
  <?php
32
  $first_attendee = reset( $attendee_group );
5
  * Override this template in your own theme by creating a file at [your-theme]/tribe-events/tickets/orders-rsvp.php
6
  *
7
  * @package TribeEventsCalendar
 
8
  *
9
+ * @since 4.2
10
+ * @since 4.10.9 Uses new functions to get singular and plural texts.
11
+ *
12
+ * @version 4.10.9
13
  */
14
 
15
  if ( ! defined( 'ABSPATH' ) ) {
29
  $attendee_groups = $view->get_event_rsvp_attendees_by_purchaser( $post_id, $user_id );
30
  ?>
31
  <div class="tribe-rsvp">
32
+ <h2><?php echo esc_html( sprintf( __( 'My %1$s for this %2$s', 'event-tickets' ), tribe_get_rsvp_label_plural( basename( __FILE__ ) ), $post_type->labels->singular_name ) ); ?></h2>
33
  <?php foreach ( $attendee_groups as $attendee_group ): ?>
34
  <?php
35
  $first_attendee = reset( $attendee_group );
src/views/tickets/orders.php CHANGED
@@ -9,8 +9,9 @@
9
  * @since 4.7.4
10
  * @since 4.10.2 Only show Update button if ticket has meta.
11
  * @since 4.10.8 Show Update button if current user has either RSVP or Ticket with meta. Do not use the now-deprecated third parameter of `get_description_rsvp_ticket()`.
 
12
  *
13
- * @version 4.10.8
14
  */
15
 
16
  if ( ! defined( 'ABSPATH' ) ) {
@@ -31,7 +32,7 @@ $tribe_my_tickets_have_meta = false;
31
  * Display a notice if the user doesn't have tickets
32
  */
33
  if ( ! $view->has_ticket_attendees( $event_id, $user_id ) && ! $view->has_rsvp_attendees( $event_id, $user_id ) ) {
34
- Tribe__Notices::set_notice( 'ticket-no-results', esc_html__( "You don't have tickets for this event", 'event-tickets' ) );
35
  }
36
 
37
  $is_event_page = class_exists( 'Tribe__Events__Main' ) && Tribe__Events__Main::POSTTYPE === $event->post_type;
9
  * @since 4.7.4
10
  * @since 4.10.2 Only show Update button if ticket has meta.
11
  * @since 4.10.8 Show Update button if current user has either RSVP or Ticket with meta. Do not use the now-deprecated third parameter of `get_description_rsvp_ticket()`.
12
+ * @since 4.10.9 Use function for text.
13
  *
14
+ * @version 4.10.9
15
  */
16
 
17
  if ( ! defined( 'ABSPATH' ) ) {
32
  * Display a notice if the user doesn't have tickets
33
  */
34
  if ( ! $view->has_ticket_attendees( $event_id, $user_id ) && ! $view->has_rsvp_attendees( $event_id, $user_id ) ) {
35
+ Tribe__Notices::set_notice( 'ticket-no-results', esc_html( sprintf( _x( "You don't have %s for this event", 'notice if user does not have tickets', 'event-tickets' ), tribe_get_ticket_label_plural_lowercase( 'notice_user_does_not_have_tickets' ) ) ) );
36
  }
37
 
38
  $is_event_page = class_exists( 'Tribe__Events__Main' ) && Tribe__Events__Main::POSTTYPE === $event->post_type;
src/views/tickets/rsvp.php CHANGED
@@ -6,12 +6,14 @@
6
  *
7
  * [your-theme]/tribe-events/tickets/rsvp.php
8
  *
 
9
  * @since 4.10.8 More similar display format to that of other ticket types, including better checking of max quantity available.
 
10
  *
11
- * @version 4.10.8
12
  *
13
  * @var Tribe__Tickets__RSVP $this
14
- * @var bool $must_login
15
  */
16
 
17
  $is_there_any_product_to_sell = false;
@@ -29,7 +31,7 @@ $messages_class = $messages ? 'tribe-rsvp-message-display' : '';
29
  enctype='multipart/form-data'
30
  >
31
  <h2 class="tribe-events-tickets-title tribe--rsvp">
32
- <?php echo esc_html_x( 'RSVP', 'form heading', 'event-tickets' ) ?>
33
  </h2>
34
 
35
 
@@ -60,7 +62,10 @@ $messages_class = $messages ? 'tribe-rsvp-message-display' : '';
60
  }
61
 
62
  // if the ticket isn't an RSVP ticket, then let's skip it
63
- if ( 'Tribe__Tickets__RSVP' !== $ticket->provider_class ) {
 
 
 
64
  continue;
65
  }
66
 
@@ -174,7 +179,7 @@ $messages_class = $messages ? 'tribe-rsvp-message-display' : '';
174
 
175
  <tr class="tribe-tickets-order_status-row">
176
  <td>
177
- <label for="tribe-tickets-order_status"><?php echo esc_html_x( 'RSVP', 'order status label', 'event-tickets' ); ?>:</label>
178
  </td>
179
  <td colspan="3">
180
  <?php Tribe__Tickets__Tickets_View::instance()->render_rsvp_selector( 'attendee[order_status]', '' ); ?>
@@ -224,7 +229,7 @@ $messages_class = $messages ? 'tribe-rsvp-message-display' : '';
224
  value="1"
225
  class="tribe-button tribe-button--rsvp"
226
  >
227
- <?php esc_html_e( 'Confirm RSVP', 'event-tickets' );?>
228
  </button>
229
  <?php endif; ?>
230
  </td>
6
  *
7
  * [your-theme]/tribe-events/tickets/rsvp.php
8
  *
9
+ * @since 4.0
10
  * @since 4.10.8 More similar display format to that of other ticket types, including better checking of max quantity available.
11
+ * @since 4.10.9 Use customizable ticket name functions.
12
  *
13
+ * @version 4.10.9
14
  *
15
  * @var Tribe__Tickets__RSVP $this
16
+ * @var bool $must_login
17
  */
18
 
19
  $is_there_any_product_to_sell = false;
31
  enctype='multipart/form-data'
32
  >
33
  <h2 class="tribe-events-tickets-title tribe--rsvp">
34
+ <?php echo esc_html( tribe_get_rsvp_label_singular( 'form_heading' ) ); ?>
35
  </h2>
36
 
37
 
62
  }
63
 
64
  // if the ticket isn't an RSVP ticket, then let's skip it
65
+ if (
66
+ ! $ticket instanceof Tribe__Tickets__Ticket_Object
67
+ || 'Tribe__Tickets__RSVP' !== $ticket->provider_class
68
+ ) {
69
  continue;
70
  }
71
 
179
 
180
  <tr class="tribe-tickets-order_status-row">
181
  <td>
182
+ <label for="tribe-tickets-order_status"><?php echo esc_html( tribe_get_rsvp_label_singular( 'order_status_label' ) ); ?>:</label>
183
  </td>
184
  <td colspan="3">
185
  <?php Tribe__Tickets__Tickets_View::instance()->render_rsvp_selector( 'attendee[order_status]', '' ); ?>
229
  value="1"
230
  class="tribe-button tribe-button--rsvp"
231
  >
232
+ <?php echo esc_html( sprintf( _x( 'Confirm %s', 'tickets process button text', 'event-tickets' ), tribe_get_rsvp_label_singular( 'tickets_process_button_text' ) ) );?>
233
  </button>
234
  <?php endif; ?>
235
  </td>
src/views/tickets/tpp-success.php CHANGED
@@ -5,7 +5,11 @@
5
  * Override this template in your own theme by creating a file at [your-theme]/tribe-events/tickets/tpp-success.php
6
  *
7
  * @package TribeEventsCalendar
8
- * @version 4.7
 
 
 
 
9
  *
10
  * @var bool $is_just_visiting Whether the current user might just have stumbled on the page or not.
11
  * @var bool $order_is_valid Whether the current order is a valid one or not.
@@ -74,10 +78,10 @@ $view = Tribe__Tickets__Tickets_View::instance();
74
  <table class="tickets">
75
  <thead>
76
  <tr>
77
- <th><?php echo esc_html_x( 'Ticket', 'Success page tickets table header', 'event-tickets' ) ?></th>
78
- <th><?php echo esc_html_x( 'Price', 'Success page tickets table header', 'event-tickets' ) ?></th>
79
- <th><?php echo esc_html_x( 'Quantity', 'Success page tickets table header', 'event-tickets' ) ?></th>
80
- <th><?php echo esc_html_x( 'Subtotal', 'Success page tickets table header', 'event-tickets' ) ?></th>
81
  </tr>
82
  </thead>
83
  <tbody>
@@ -92,7 +96,7 @@ $view = Tribe__Tickets__Tickets_View::instance();
92
  <div class="thumbnail">
93
  <?php echo get_image_tag(
94
  $ticket['header_image_id'],
95
- __( 'Ticket header image', 'event-tickets' ),
96
  get_the_title( $ticket_post_id ),
97
  'none',
98
  'thumbnail'
5
  * Override this template in your own theme by creating a file at [your-theme]/tribe-events/tickets/tpp-success.php
6
  *
7
  * @package TribeEventsCalendar
8
+ *
9
+ * @since 4.7
10
+ * @since 4.10.9 Uses new functions to get singular and plural texts.
11
+ *
12
+ * @version 4.10.9
13
  *
14
  * @var bool $is_just_visiting Whether the current user might just have stumbled on the page or not.
15
  * @var bool $order_is_valid Whether the current order is a valid one or not.
78
  <table class="tickets">
79
  <thead>
80
  <tr>
81
+ <th><?php echo esc_html( tribe_get_ticket_label_singular( basename( __FILE__ ) ) ); ?></th>
82
+ <th><?php echo esc_html_x( 'Price', 'Success page tickets table header', 'event-tickets' ); ?></th>
83
+ <th><?php echo esc_html_x( 'Quantity', 'Success page tickets table header', 'event-tickets' ); ?></th>
84
+ <th><?php echo esc_html_x( 'Subtotal', 'Success page tickets table header', 'event-tickets' ); ?></th>
85
  </tr>
86
  </thead>
87
  <tbody>
96
  <div class="thumbnail">
97
  <?php echo get_image_tag(
98
  $ticket['header_image_id'],
99
+ esc_html( sprintf( __( '%s header image', 'event-tickets' ), tribe_get_ticket_label_singular( 'header_image_alt' ) ) ),
100
  get_the_title( $ticket_post_id ),
101
  'none',
102
  'thumbnail'
src/views/tickets/tpp.php CHANGED
@@ -7,13 +7,14 @@
7
  * [your-theme]/tribe-events/tickets/tpp.php
8
  *
9
  * @since 4.5
10
- * @since 4.7 Make the ticket form more readable.
11
- * @since 4.7.6 Add support for showing description option.
12
- * @since 4.8.2 Add date_in_range() logic so past tickets do not show.
13
- * @since 4.9.3 Display login link if visitor is logged out and logging in is required to purchase.
14
  * @since 4.10.8 Removed the date_in_range() check per ticket, since it now happens upstream. Better checking of max quantity available.
 
15
  *
16
- * @version 4.10.8
17
  *
18
  * @var bool $must_login
19
  * @var bool $display_login_link
@@ -39,7 +40,7 @@ $cart_url = '';
39
  <input type="hidden" name="provider" value="Tribe__Tickets__Commerce__PayPal__Main">
40
  <input type="hidden" name="add" value="1">
41
  <h2 class="tribe-events-tickets-title tribe--tpp">
42
- <?php echo esc_html_x( 'Tickets', 'form heading', 'event-tickets' ) ?>
43
  </h2>
44
 
45
  <div class="tribe-tpp-messages">
@@ -70,7 +71,10 @@ $cart_url = '';
70
  }
71
 
72
  // if the ticket isn't a Tribe Commerce ticket, then let's skip it
73
- if ( 'Tribe__Tickets__Commerce__PayPal__Main' !== $ticket->provider_class ) {
 
 
 
74
  continue;
75
  }
76
 
7
  * [your-theme]/tribe-events/tickets/tpp.php
8
  *
9
  * @since 4.5
10
+ * @since 4.7 Make the ticket form more readable.
11
+ * @since 4.7.6 Add support for showing description option.
12
+ * @since 4.8.2 Add date_in_range() logic so past tickets do not show.
13
+ * @since 4.9.3 Display login link if visitor is logged out and logging in is required to purchase.
14
  * @since 4.10.8 Removed the date_in_range() check per ticket, since it now happens upstream. Better checking of max quantity available.
15
+ * @since TBD Use customizable ticket name functions.
16
  *
17
+ * @version 4.10.9
18
  *
19
  * @var bool $must_login
20
  * @var bool $display_login_link
40
  <input type="hidden" name="provider" value="Tribe__Tickets__Commerce__PayPal__Main">
41
  <input type="hidden" name="add" value="1">
42
  <h2 class="tribe-events-tickets-title tribe--tpp">
43
+ <?php echo esc_html( tribe_get_ticket_label_plural( basename( __FILE__ ) ) ); ?>
44
  </h2>
45
 
46
  <div class="tribe-tpp-messages">
71
  }
72
 
73
  // if the ticket isn't a Tribe Commerce ticket, then let's skip it
74
+ if (
75
+ ! $ticket instanceof Tribe__Tickets__Ticket_Object
76
+ || 'Tribe__Tickets__Commerce__PayPal__Main' !== $ticket->provider_class
77
+ ) {
78
  continue;
79
  }
80
 
src/views/tickets/view-link.php CHANGED
@@ -4,23 +4,22 @@
4
  * Included on the Events Single Page after the meta
5
  * The Message that will link to the Tickets page
6
  *
7
- * Override this template in your own theme by creating a file at [your-theme]/tribe-events/tickets/view-link.php
8
  *
9
  * @since 4.2
10
  * @since 4.10.8 Renamed template from order-links.php to view-link.php. Updated to not use the now-deprecated third
11
- * parameter of `get_description_rsvp_ticket()`
 
12
  *
13
- * @version 4.10.8
 
 
14
  */
15
 
16
  if ( ! defined( 'ABSPATH' ) ) {
17
  die( '-1' );
18
  }
19
 
20
- /**
21
- * @var Tribe__Tickets__Tickets_View $this
22
- */
23
-
24
  $view = Tribe__Tickets__Tickets_View::instance();
25
  $event_id = get_the_ID();
26
  $user_id = get_current_user_id();
@@ -40,20 +39,28 @@ $ticket_count = $view->count_ticket_attendees( $event_id, $user_id );
40
 
41
  $counters = [];
42
 
43
- if ( 0 !== $rsvp_count ) {
44
- $counters[] = sprintf( _n( '%d RSVP', '%d RSVPs', $rsvp_count, 'event-tickets' ), $rsvp_count );
 
 
45
  }
46
 
47
- if ( 0 !== $ticket_count ) {
48
- $counters[] = sprintf( _n( '%d Ticket', '%d Tickets', $ticket_count, 'event-tickets' ), $ticket_count );
 
 
49
  }
50
 
51
  $link = $view->get_tickets_page_url( $event_id, $is_event_page );
52
 
53
- $message = sprintf( esc_html__( 'You have %s for this %s.', 'event-tickets' ), implode( __( ' and ', 'event-tickets' ), $counters ), $events_label_singular );
54
- $message .= ' <a href="' . esc_url( $link ) . '">' . sprintf( esc_html__( 'View your %s', 'event-tickets' ), $this->get_description_rsvp_ticket( $event_id, $user_id ) ) . '</a>';
 
 
 
 
55
  ?>
56
 
57
  <div class="tribe-link-view-attendee">
58
  <?php echo $message; ?>
59
- </div>
4
  * Included on the Events Single Page after the meta
5
  * The Message that will link to the Tickets page
6
  *
7
+ * Override this template in your own theme by creating a file at [your-theme]/tribe-events/tickets/orders-link.php
8
  *
9
  * @since 4.2
10
  * @since 4.10.8 Renamed template from order-links.php to view-link.php. Updated to not use the now-deprecated third
11
+ * parameter of `get_description_rsvp_ticket()`.
12
+ * @since 4.10.9 Use customizable ticket name functions.
13
  *
14
+ * @version 4.10.9
15
+ *
16
+ * @var Tribe__Tickets__Tickets_View $this
17
  */
18
 
19
  if ( ! defined( 'ABSPATH' ) ) {
20
  die( '-1' );
21
  }
22
 
 
 
 
 
23
  $view = Tribe__Tickets__Tickets_View::instance();
24
  $event_id = get_the_ID();
25
  $user_id = get_current_user_id();
39
 
40
  $counters = [];
41
 
42
+ if ( 1 === $rsvp_count ) {
43
+ $counters[] = sprintf( _x( '%1d %2s', 'RSVP count singular', 'event-tickets' ), $rsvp_count, tribe_get_rsvp_label_singular( basename( __FILE__ ) ) );
44
+ } elseif ( 1 < $rsvp_count ) {
45
+ $counters[] = sprintf( _x( '%1d %2s', 'RSVP count plural', 'event-tickets' ), $rsvp_count, tribe_get_rsvp_label_plural( basename( __FILE__ ) ) );
46
  }
47
 
48
+ if ( 1 === $ticket_count ) {
49
+ $counters[] = sprintf( _x( '%1d %2s', 'Ticket count singular', 'event-tickets' ), $ticket_count, tribe_get_ticket_label_singular( basename( __FILE__ ) ) );
50
+ } elseif ( 1 < $ticket_count ) {
51
+ $counters[] = sprintf( _x( '%1d %2s', 'Ticket count plural', 'event-tickets' ), $ticket_count, tribe_get_ticket_label_plural( basename( __FILE__ ) ) );
52
  }
53
 
54
  $link = $view->get_tickets_page_url( $event_id, $is_event_page );
55
 
56
+ $message = esc_html( sprintf(
57
+ __( 'You have %1$s for this %2$s.', 'event-tickets' ),
58
+ implode( _x( ' and ', 'separator if there are both RSVPs and Tickets', 'event-tickets' ), $counters ),
59
+ $events_label_singular )
60
+ );
61
+ $message .= ' <a href="' . esc_url( $link ) . '">' . esc_html( sprintf( __( 'View your %s', 'event-tickets' ), $this->get_description_rsvp_ticket( $event_id, $user_id ) ) ) . '</a>';
62
  ?>
63
 
64
  <div class="tribe-link-view-attendee">
65
  <?php echo $message; ?>
66
+ </div>
src/views/v2/day/event/cost.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * View: Day Single Event Cost
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/event-tickets/views/v2/day/event/cost.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link {INSERT_ARTCILE_LINK_HERE}
11
+ *
12
+ * @version 4.10.9
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ *
18
+ */
19
+
20
+ if ( empty( $event->cost ) ) {
21
+ return;
22
+ }
23
+
24
+ ?>
25
+ <div class="tribe-events-c-small-cta tribe-common-b3 tribe-events-calendar-list__event-cost">
26
+ <?php if ( ! empty( $event->tickets->exist ) ) : ?>
27
+ <a
28
+ href="<?php echo esc_url( $event->tickets->link->anchor ); ?>"
29
+ class="tribe-events-c-small-cta__link tribe-common-cta tribe-common-cta--thin-alt"
30
+ >
31
+ <?php echo esc_html( $event->tickets->link->label ); ?>
32
+ </a>
33
+ <?php endif; ?>
34
+ <span class="tribe-events-c-small-cta__price">
35
+ <?php echo esc_html( $event->cost ) ?>
36
+ </span>
37
+ <?php if ( ! empty( $event->tickets->stock->available ) ) : ?>
38
+ <span class="tribe-events-c-small-cta__stock">
39
+ <?php echo esc_html( $event->tickets->stock->available ) ?>
40
+ </span>
41
+ <?php endif; ?>
42
+ </div>
src/views/v2/list/event/cost.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * View: List Single Event Cost
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/event-tickets/views/v2/list/event/cost.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link {INSERT_ARTCILE_LINK_HERE}
11
+ *
12
+ * @version 4.10.9
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ *
18
+ */
19
+
20
+ if ( empty( $event->cost ) ) {
21
+ return;
22
+ }
23
+
24
+ ?>
25
+ <div class="tribe-events-c-small-cta tribe-common-b3 tribe-events-calendar-list__event-cost">
26
+ <?php if ( ! empty( $event->tickets->exist ) ) : ?>
27
+ <a
28
+ href="<?php echo esc_url( $event->tickets->link->anchor ); ?>"
29
+ class="tribe-events-c-small-cta__link tribe-common-cta tribe-common-cta--thin-alt"
30
+ >
31
+ <?php echo esc_html( $event->tickets->link->label ); ?>
32
+ </a>
33
+ <?php endif; ?>
34
+ <span class="tribe-events-c-small-cta__price">
35
+ <?php echo esc_html( $event->cost ) ?>
36
+ </span>
37
+ <?php if ( ! empty( $event->tickets->stock->available ) ) : ?>
38
+ <span class="tribe-events-c-small-cta__stock">
39
+ <?php echo esc_html( $event->tickets->stock->available ) ?>
40
+ </span>
41
+ <?php endif; ?>
42
+ </div>
src/views/v2/map/event-cards/event-card/event/actions/cost.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * View: Map View - Single Event Actions - Cost
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/event-tickets/views/v2/map/event-cards/event-card/event/actions/cost.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link {INSERT_ARTCILE_LINK_HERE}
11
+ *
12
+ * @version 4.10.9
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ *
18
+ */
19
+ if ( empty( $event->tickets->exist ) ) {
20
+ return;
21
+ }
22
+ ?>
23
+
24
+ <a
25
+ href="<?php echo esc_url( $event->tickets->link->anchor ); ?>"
26
+ class="tribe-events-c-small-cta__link tribe-common-cta tribe-common-cta--thin-alt"
27
+ >
28
+ <?php echo esc_html( $event->tickets->link->label ); ?>
29
+ </a>
src/views/v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/cost.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * View: Month View - Single Event Tooltip Cost
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/event-tickets/views/v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/cost.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link {INSERT_ARTCILE_LINK_HERE}
11
+ *
12
+ * @version 4.10.9
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ */
18
+
19
+ if ( empty( $event->cost ) ) {
20
+ return;
21
+ }
22
+ ?>
23
+ <div class="tribe-events-c-small-cta tribe-common-b3 tribe-events-calendar-month__calendar-event-tooltip-cost">
24
+ <?php if ( ! empty( $event->tickets->exist ) ) : ?>
25
+ <a
26
+ href="<?php echo esc_url( $event->tickets->link->anchor ); ?>"
27
+ class="tribe-events-c-small-cta__link tribe-common-cta tribe-common-cta--thin-alt"
28
+ >
29
+ <?php echo esc_html( $event->tickets->link->label ); ?>
30
+ </a>
31
+ <?php endif; ?>
32
+ <span class="tribe-events-c-small-cta__price">
33
+ <?php echo esc_html( $event->cost ) ?>
34
+ </span>
35
+ </div>
src/views/v2/month/mobile-events/mobile-day/mobile-event/cost.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * View: Month View - Mobile Event Cost
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/event-tickets/views/v2/month/mobile-events/mobile-day/mobile-event/cost.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link {INSERT_ARTCILE_LINK_HERE}
11
+ *
12
+ * @version 4.10.9
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ *
18
+ */
19
+
20
+ if ( ! $event->featured ) {
21
+ return;
22
+ }
23
+
24
+ if ( empty( $event->cost ) ) {
25
+ return;
26
+ }
27
+ ?>
28
+ <div class="tribe-events-c-small-cta tribe-common-b3 tribe-events-calendar-month-mobile-events__mobile-event-cost">
29
+ <?php if ( ! empty( $event->tickets->exist ) ) : ?>
30
+ <a
31
+ href="<?php echo esc_url( $event->tickets->link->anchor ); ?>"
32
+ class="tribe-events-c-small-cta__link tribe-common-cta tribe-common-cta--thin-alt"
33
+ >
34
+ <?php echo esc_html( $event->tickets->link->label ); ?>
35
+ </a>
36
+ <?php endif; ?>
37
+ <span class="tribe-events-c-small-cta__price">
38
+ <?php echo esc_html( $event->cost ) ?>
39
+ </span>
40
+ <?php if ( ! empty( $event->tickets->stock->available ) ) : ?>
41
+ <span class="tribe-events-c-small-cta__stock">
42
+ <?php echo esc_html( $event->tickets->stock->available ) ?>
43
+ </span>
44
+ <?php endif; ?>
45
+ </div>
src/views/v2/photo/event/cost.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * View: Photo View - Single Event Cost
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/event-tickets/views/v2/photo/event/cost.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link {INSERT_ARTCILE_LINK_HERE}
11
+ *
12
+ * @version 4.10.9
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ */
18
+
19
+ if ( empty( $event->cost ) ) {
20
+ return;
21
+ }
22
+ ?>
23
+ <div class="tribe-events-c-small-cta tribe-common-b3 tribe-events-pro-photo__event-cost">
24
+ <?php if ( ! empty( $event->tickets->exist ) ) : ?>
25
+ <a
26
+ href="<?php echo esc_url( $event->tickets->link->anchor ); ?>"
27
+ class="tribe-events-c-small-cta__link tribe-common-cta tribe-common-cta--thin-alt"
28
+ >
29
+ <?php echo esc_html( $event->tickets->link->label ); ?>
30
+ </a>
31
+ <?php endif; ?>
32
+ <span class="tribe-events-c-small-cta__price">
33
+ <?php echo esc_html( $event->cost ) ?>
34
+ </span>
35
+ <?php if ( ! empty( $event->tickets->stock->available ) ) : ?>
36
+ <span class="tribe-events-c-small-cta__stock">
37
+ <?php echo esc_html( $event->tickets->stock->available ) ?>
38
+ </span>
39
+ <?php endif; ?>
40
+ </div>
src/views/v2/week/grid-body/events-day/event/tooltip/cost.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * View: Week View - Event Tooltip Cost
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/event-tickets/views/v2/week/grid-body/events-day/event/tooltip/cost.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link {INSERT_ARTCILE_LINK_HERE}
11
+ *
12
+ * @version 4.10.9
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ *
18
+ */
19
+ if ( empty( $event->cost ) ) {
20
+ return;
21
+ }
22
+ ?>
23
+ <div class="tribe-events-c-small-cta tribe-common-b3 tribe-events-pro-week-grid__event-tooltip-cost">
24
+ <?php if ( ! empty( $event->tickets->exist ) ) : ?>
25
+ <a
26
+ href="<?php echo esc_url( $event->tickets->link->anchor ); ?>"
27
+ class="tribe-events-c-small-cta__link tribe-common-cta tribe-common-cta--thin-alt"
28
+ >
29
+ <?php echo esc_html( $event->tickets->link->label ); ?>
30
+ </a>
31
+ <?php endif; ?>
32
+ <span class="tribe-events-c-small-cta__price">
33
+ <?php echo esc_html( $event->cost ) ?>
34
+ </span>
35
+ </div>
36
+
src/views/v2/week/mobile-events/day/event/cost.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * View: Week View - Mobile Event Cost
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/event-tickets/views/v2/week/mobile-events/day/event/cost.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link {INSERT_ARTCILE_LINK_HERE}
11
+ *
12
+ * @version 4.10.9
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ *
18
+ */
19
+
20
+ if ( empty( $event->cost ) ) {
21
+ return;
22
+ }
23
+ ?>
24
+ <div class="tribe-events-c-small-cta tribe-common-b3 tribe-events-pro-week-mobile-events__event-cost">
25
+ <?php if ( ! empty( $event->tickets->exist ) ) : ?>
26
+ <a
27
+ href="<?php echo esc_url( $event->tickets->link->anchor ); ?>"
28
+ class="tribe-events-c-small-cta__link tribe-common-cta tribe-common-cta--thin-alt"
29
+ >
30
+ <?php echo esc_html( $event->tickets->link->label ); ?>
31
+ </a>
32
+ <?php endif; ?>
33
+ <span class="tribe-events-c-small-cta__price">
34
+ <?php echo esc_html( $event->cost ) ?>
35
+ </span>
36
+ <?php if ( ! empty( $event->tickets->stock->available ) ) : ?>
37
+ <span class="tribe-events-c-small-cta__stock">
38
+ <?php echo esc_html( $event->tickets->stock->available ) ?>
39
+ </span>
40
+ <?php endif; ?>
41
+ </div>
vendor/autoload.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload.php @generated by Composer
4
+
5
+ require_once __DIR__ . '/composer/autoload_real.php';
6
+
7
+ return ComposerAutoloaderInit6a81194869c912b62599b3b953ab6b73::getLoader();
vendor/composer/ClassLoader.php ADDED
@@ -0,0 +1,445 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of Composer.
5
+ *
6
+ * (c) Nils Adermann <naderman@naderman.de>
7
+ * Jordi Boggiano <j.boggiano@seld.be>
8
+ *
9
+ * For the full copyright and license information, please view the LICENSE
10
+ * file that was distributed with this source code.
11
+ */
12
+
13
+ namespace Composer\Autoload;
14
+
15
+ /**
16
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
17
+ *
18
+ * $loader = new \Composer\Autoload\ClassLoader();
19
+ *
20
+ * // register classes with namespaces
21
+ * $loader->add('Symfony\Component', __DIR__.'/component');
22
+ * $loader->add('Symfony', __DIR__.'/framework');
23
+ *
24
+ * // activate the autoloader
25
+ * $loader->register();
26
+ *
27
+ * // to enable searching the include path (eg. for PEAR packages)
28
+ * $loader->setUseIncludePath(true);
29
+ *
30
+ * In this example, if you try to use a class in the Symfony\Component
31
+ * namespace or one of its children (Symfony\Component\Console for instance),
32
+ * the autoloader will first look for the class under the component/
33
+ * directory, and it will then fallback to the framework/ directory if not
34
+ * found before giving up.
35
+ *
36
+ * This class is loosely based on the Symfony UniversalClassLoader.
37
+ *
38
+ * @author Fabien Potencier <fabien@symfony.com>
39
+ * @author Jordi Boggiano <j.boggiano@seld.be>
40
+ * @see http://www.php-fig.org/psr/psr-0/
41
+ * @see http://www.php-fig.org/psr/psr-4/
42
+ */
43
+ class ClassLoader
44
+ {
45
+ // PSR-4
46
+ private $prefixLengthsPsr4 = array();
47
+ private $prefixDirsPsr4 = array();
48
+ private $fallbackDirsPsr4 = array();
49
+
50
+ // PSR-0
51
+ private $prefixesPsr0 = array();
52
+ private $fallbackDirsPsr0 = array();
53
+
54
+ private $useIncludePath = false;
55
+ private $classMap = array();
56
+ private $classMapAuthoritative = false;
57
+ private $missingClasses = array();
58
+ private $apcuPrefix;
59
+
60
+ public function getPrefixes()
61
+ {
62
+ if (!empty($this->prefixesPsr0)) {
63
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
64
+ }
65
+
66
+ return array();
67
+ }
68
+
69
+ public function getPrefixesPsr4()
70
+ {
71
+ return $this->prefixDirsPsr4;
72
+ }
73
+
74
+ public function getFallbackDirs()
75
+ {
76
+ return $this->fallbackDirsPsr0;
77
+ }
78
+
79
+ public function getFallbackDirsPsr4()
80
+ {
81
+ return $this->fallbackDirsPsr4;
82
+ }
83
+
84
+ public function getClassMap()
85
+ {
86
+ return $this->classMap;
87
+ }
88
+
89
+ /**
90
+ * @param array $classMap Class to filename map
91
+ */
92
+ public function addClassMap(array $classMap)
93
+ {
94
+ if ($this->classMap) {
95
+ $this->classMap = array_merge($this->classMap, $classMap);
96
+ } else {
97
+ $this->classMap = $classMap;
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Registers a set of PSR-0 directories for a given prefix, either
103
+ * appending or prepending to the ones previously set for this prefix.
104
+ *
105
+ * @param string $prefix The prefix
106
+ * @param array|string $paths The PSR-0 root directories
107
+ * @param bool $prepend Whether to prepend the directories
108
+ */
109
+ public function add($prefix, $paths, $prepend = false)
110
+ {
111
+ if (!$prefix) {
112
+ if ($prepend) {
113
+ $this->fallbackDirsPsr0 = array_merge(
114
+ (array) $paths,
115
+ $this->fallbackDirsPsr0
116
+ );
117
+ } else {
118
+ $this->fallbackDirsPsr0 = array_merge(
119
+ $this->fallbackDirsPsr0,
120
+ (array) $paths
121
+ );
122
+ }
123
+
124
+ return;
125
+ }
126
+
127
+ $first = $prefix[0];
128
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
129
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
130
+
131
+ return;
132
+ }
133
+ if ($prepend) {
134
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
135
+ (array) $paths,
136
+ $this->prefixesPsr0[$first][$prefix]
137
+ );
138
+ } else {
139
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
140
+ $this->prefixesPsr0[$first][$prefix],
141
+ (array) $paths
142
+ );
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Registers a set of PSR-4 directories for a given namespace, either
148
+ * appending or prepending to the ones previously set for this namespace.
149
+ *
150
+ * @param string $prefix The prefix/namespace, with trailing '\\'
151
+ * @param array|string $paths The PSR-4 base directories
152
+ * @param bool $prepend Whether to prepend the directories
153
+ *
154
+ * @throws \InvalidArgumentException
155
+ */
156
+ public function addPsr4($prefix, $paths, $prepend = false)
157
+ {
158
+ if (!$prefix) {
159
+ // Register directories for the root namespace.
160
+ if ($prepend) {
161
+ $this->fallbackDirsPsr4 = array_merge(
162
+ (array) $paths,
163
+ $this->fallbackDirsPsr4
164
+ );
165
+ } else {
166
+ $this->fallbackDirsPsr4 = array_merge(
167
+ $this->fallbackDirsPsr4,
168
+ (array) $paths
169
+ );
170
+ }
171
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
172
+ // Register directories for a new namespace.
173
+ $length = strlen($prefix);
174
+ if ('\\' !== $prefix[$length - 1]) {
175
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
176
+ }
177
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
178
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
179
+ } elseif ($prepend) {
180
+ // Prepend directories for an already registered namespace.
181
+ $this->prefixDirsPsr4[$prefix] = array_merge(
182
+ (array) $paths,
183
+ $this->prefixDirsPsr4[$prefix]
184
+ );
185
+ } else {
186
+ // Append directories for an already registered namespace.
187
+ $this->prefixDirsPsr4[$prefix] = array_merge(
188
+ $this->prefixDirsPsr4[$prefix],
189
+ (array) $paths
190
+ );
191
+ }
192
+ }
193
+
194
+ /**
195
+ * Registers a set of PSR-0 directories for a given prefix,
196
+ * replacing any others previously set for this prefix.
197
+ *
198
+ * @param string $prefix The prefix
199
+ * @param array|string $paths The PSR-0 base directories
200
+ */
201
+ public function set($prefix, $paths)
202
+ {
203
+ if (!$prefix) {
204
+ $this->fallbackDirsPsr0 = (array) $paths;
205
+ } else {
206
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
207
+ }
208
+ }
209
+
210
+ /**
211
+ * Registers a set of PSR-4 directories for a given namespace,
212
+ * replacing any others previously set for this namespace.
213
+ *
214
+ * @param string $prefix The prefix/namespace, with trailing '\\'
215
+ * @param array|string $paths The PSR-4 base directories
216
+ *
217
+ * @throws \InvalidArgumentException
218
+ */
219
+ public function setPsr4($prefix, $paths)
220
+ {
221
+ if (!$prefix) {
222
+ $this->fallbackDirsPsr4 = (array) $paths;
223
+ } else {
224
+ $length = strlen($prefix);
225
+ if ('\\' !== $prefix[$length - 1]) {
226
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
227
+ }
228
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
229
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
230
+ }
231
+ }
232
+
233
+ /**
234
+ * Turns on searching the include path for class files.
235
+ *
236
+ * @param bool $useIncludePath
237
+ */
238
+ public function setUseIncludePath($useIncludePath)
239
+ {
240
+ $this->useIncludePath = $useIncludePath;
241
+ }
242
+
243
+ /**
244
+ * Can be used to check if the autoloader uses the include path to check
245
+ * for classes.
246
+ *
247
+ * @return bool
248
+ */
249
+ public function getUseIncludePath()
250
+ {
251
+ return $this->useIncludePath;
252
+ }
253
+
254
+ /**
255
+ * Turns off searching the prefix and fallback directories for classes
256
+ * that have not been registered with the class map.
257
+ *
258
+ * @param bool $classMapAuthoritative
259
+ */
260
+ public function setClassMapAuthoritative($classMapAuthoritative)
261
+ {
262
+ $this->classMapAuthoritative = $classMapAuthoritative;
263
+ }
264
+
265
+ /**
266
+ * Should class lookup fail if not found in the current class map?
267
+ *
268
+ * @return bool
269
+ */
270
+ public function isClassMapAuthoritative()
271
+ {
272
+ return $this->classMapAuthoritative;
273
+ }
274
+
275
+ /**
276
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
277
+ *
278
+ * @param string|null $apcuPrefix
279
+ */
280
+ public function setApcuPrefix($apcuPrefix)
281
+ {
282
+ $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
283
+ }
284
+
285
+ /**
286
+ * The APCu prefix in use, or null if APCu caching is not enabled.
287
+ *
288
+ * @return string|null
289
+ */
290
+ public function getApcuPrefix()
291
+ {
292
+ return $this->apcuPrefix;
293
+ }
294
+
295
+ /**
296
+ * Registers this instance as an autoloader.
297
+ *
298
+ * @param bool $prepend Whether to prepend the autoloader or not
299
+ */
300
+ public function register($prepend = false)
301
+ {
302
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
303
+ }
304
+
305
+ /**
306
+ * Unregisters this instance as an autoloader.
307
+ */
308
+ public function unregister()
309
+ {
310
+ spl_autoload_unregister(array($this, 'loadClass'));
311
+ }
312
+
313
+ /**
314
+ * Loads the given class or interface.
315
+ *
316
+ * @param string $class The name of the class
317
+ * @return bool|null True if loaded, null otherwise
318
+ */
319
+ public function loadClass($class)
320
+ {
321
+ if ($file = $this->findFile($class)) {
322
+ includeFile($file);
323
+
324
+ return true;
325
+ }
326
+ }
327
+
328
+ /**
329
+ * Finds the path to the file where the class is defined.
330
+ *
331
+ * @param string $class The name of the class
332
+ *
333
+ * @return string|false The path if found, false otherwise
334
+ */
335
+ public function findFile($class)
336
+ {
337
+ // class map lookup
338
+ if (isset($this->classMap[$class])) {
339
+ return $this->classMap[$class];
340
+ }
341
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
342
+ return false;
343
+ }
344
+ if (null !== $this->apcuPrefix) {
345
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
346
+ if ($hit) {
347
+ return $file;
348
+ }
349
+ }
350
+
351
+ $file = $this->findFileWithExtension($class, '.php');
352
+
353
+ // Search for Hack files if we are running on HHVM
354
+ if (false === $file && defined('HHVM_VERSION')) {
355
+ $file = $this->findFileWithExtension($class, '.hh');
356
+ }
357
+
358
+ if (null !== $this->apcuPrefix) {
359
+ apcu_add($this->apcuPrefix.$class, $file);
360
+ }
361
+
362
+ if (false === $file) {
363
+ // Remember that this class does not exist.
364
+ $this->missingClasses[$class] = true;
365
+ }
366
+
367
+ return $file;
368
+ }
369
+
370
+ private function findFileWithExtension($class, $ext)
371
+ {
372
+ // PSR-4 lookup
373
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
374
+
375
+ $first = $class[0];
376
+ if (isset($this->prefixLengthsPsr4[$first])) {
377
+ $subPath = $class;
378
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
379
+ $subPath = substr($subPath, 0, $lastPos);
380
+ $search = $subPath . '\\';
381
+ if (isset($this->prefixDirsPsr4[$search])) {
382
+ $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
383
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
384
+ if (file_exists($file = $dir . $pathEnd)) {
385
+ return $file;
386
+ }
387
+ }
388
+ }
389
+ }
390
+ }
391
+
392
+ // PSR-4 fallback dirs
393
+ foreach ($this->fallbackDirsPsr4 as $dir) {
394
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
395
+ return $file;
396
+ }
397
+ }
398
+
399
+ // PSR-0 lookup
400
+ if (false !== $pos = strrpos($class, '\\')) {
401
+ // namespaced class name
402
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
403
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
404
+ } else {
405
+ // PEAR-like class name
406
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
407
+ }
408
+
409
+ if (isset($this->prefixesPsr0[$first])) {
410
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
411
+ if (0 === strpos($class, $prefix)) {
412
+ foreach ($dirs as $dir) {
413
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
414
+ return $file;
415
+ }
416
+ }
417
+ }
418
+ }
419
+ }
420
+
421
+ // PSR-0 fallback dirs
422
+ foreach ($this->fallbackDirsPsr0 as $dir) {
423
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
424
+ return $file;
425
+ }
426
+ }
427
+
428
+ // PSR-0 include paths.
429
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
430
+ return $file;
431
+ }
432
+
433
+ return false;
434
+ }
435
+ }
436
+
437
+ /**
438
+ * Scope isolated include.
439
+ *
440
+ * Prevents access to $this/self from included files.
441
+ */
442
+ function includeFile($file)
443
+ {
444
+ include $file;
445
+ }
vendor/composer/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Copyright (c) Nils Adermann, Jordi Boggiano
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is furnished
9
+ to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ THE SOFTWARE.
21
+
vendor/composer/autoload_classmap.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_classmap.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ 'Tribe\\Events\\Tickets\\Views\\V2\\Hooks' => $baseDir . '/src/Tribe/Views/V2/Hooks.php',
10
+ 'Tribe\\Events\\Tickets\\Views\\V2\\Models\\Tickets' => $baseDir . '/src/Tribe/Views/V2/Models/Tickets.php',
11
+ 'Tribe\\Events\\Tickets\\Views\\V2\\Partials\\Day_View\\Event\\CostTest' => $baseDir . '/tests/views_integration/Tribe/Events/Tickets/Views/V2/Partials/Day_View/Event/CostTest.php',
12
+ 'Tribe\\Events\\Tickets\\Views\\V2\\Service_Provider' => $baseDir . '/src/Tribe/Views/V2/Service_Provider.php',
13
+ );
vendor/composer/autoload_namespaces.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_namespaces.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/composer/autoload_psr4.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_psr4.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ 'Tribe\\Tests\\Tickets\\' => array($baseDir . '/tests/_support'),
10
+ 'Tribe\\Tests\\Modules\\Tickets\\' => array($baseDir . '/tests/_support/Modules'),
11
+ 'Tribe\\Events\\Tickets\\Views\\' => array($baseDir . '/tests/views_integration/Tribe/Events/Tickets/Views'),
12
+ 'Tribe\\Events\\Tickets\\' => array($baseDir . '/src/Tribe'),
13
+ );
vendor/composer/autoload_real.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_real.php @generated by Composer
4
+
5
+ class ComposerAutoloaderInit6a81194869c912b62599b3b953ab6b73
6
+ {
7
+ private static $loader;
8
+
9
+ public static function loadClassLoader($class)
10
+ {
11
+ if ('Composer\Autoload\ClassLoader' === $class) {
12
+ require __DIR__ . '/ClassLoader.php';
13
+ }
14
+ }
15
+
16
+ public static function getLoader()
17
+ {
18
+ if (null !== self::$loader) {
19
+ return self::$loader;
20
+ }
21
+
22
+ spl_autoload_register(array('ComposerAutoloaderInit6a81194869c912b62599b3b953ab6b73', 'loadClassLoader'), true, true);
23
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit6a81194869c912b62599b3b953ab6b73', '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\ComposerStaticInit6a81194869c912b62599b3b953ab6b73::getInitializer($loader));
31
+ } else {
32
+ $map = require __DIR__ . '/autoload_namespaces.php';
33
+ foreach ($map as $namespace => $path) {
34
+ $loader->set($namespace, $path);
35
+ }
36
+
37
+ $map = require __DIR__ . '/autoload_psr4.php';
38
+ foreach ($map as $namespace => $path) {
39
+ $loader->setPsr4($namespace, $path);
40
+ }
41
+
42
+ $classMap = require __DIR__ . '/autoload_classmap.php';
43
+ if ($classMap) {
44
+ $loader->addClassMap($classMap);
45
+ }
46
+ }
47
+
48
+ $loader->register(true);
49
+
50
+ return $loader;
51
+ }
52
+ }
vendor/composer/autoload_static.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_static.php @generated by Composer
4
+
5
+ namespace Composer\Autoload;
6
+
7
+ class ComposerStaticInit6a81194869c912b62599b3b953ab6b73
8
+ {
9
+ public static $prefixLengthsPsr4 = array (
10
+ 'T' =>
11
+ array (
12
+ 'Tribe\\Tests\\Tickets\\' => 20,
13
+ 'Tribe\\Tests\\Modules\\Tickets\\' => 28,
14
+ 'Tribe\\Events\\Tickets\\Views\\' => 27,
15
+ 'Tribe\\Events\\Tickets\\' => 21,
16
+ ),
17
+ );
18
+
19
+ public static $prefixDirsPsr4 = array (
20
+ 'Tribe\\Tests\\Tickets\\' =>
21
+ array (
22
+ 0 => __DIR__ . '/../..' . '/tests/_support',
23
+ ),
24
+ 'Tribe\\Tests\\Modules\\Tickets\\' =>
25
+ array (
26
+ 0 => __DIR__ . '/../..' . '/tests/_support/Modules',
27
+ ),
28
+ 'Tribe\\Events\\Tickets\\Views\\' =>
29
+ array (
30
+ 0 => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Tickets/Views',
31
+ ),
32
+ 'Tribe\\Events\\Tickets\\' =>
33
+ array (
34
+ 0 => __DIR__ . '/../..' . '/src/Tribe',
35
+ ),
36
+ );
37
+
38
+ public static $classMap = array (
39
+ 'Tribe\\Events\\Tickets\\Views\\V2\\Hooks' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Hooks.php',
40
+ 'Tribe\\Events\\Tickets\\Views\\V2\\Models\\Tickets' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Models/Tickets.php',
41
+ 'Tribe\\Events\\Tickets\\Views\\V2\\Partials\\Day_View\\Event\\CostTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Tickets/Views/V2/Partials/Day_View/Event/CostTest.php',
42
+ 'Tribe\\Events\\Tickets\\Views\\V2\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Service_Provider.php',
43
+ );
44
+
45
+ public static function getInitializer(ClassLoader $loader)
46
+ {
47
+ return \Closure::bind(function () use ($loader) {
48
+ $loader->prefixLengthsPsr4 = ComposerStaticInit6a81194869c912b62599b3b953ab6b73::$prefixLengthsPsr4;
49
+ $loader->prefixDirsPsr4 = ComposerStaticInit6a81194869c912b62599b3b953ab6b73::$prefixDirsPsr4;
50
+ $loader->classMap = ComposerStaticInit6a81194869c912b62599b3b953ab6b73::$classMap;
51
+
52
+ }, null, ClassLoader::class);
53
+ }
54
+ }
vendor/composer/installed.json ADDED
@@ -0,0 +1 @@
 
1
+ []