Version Description
Download this release
Release Info
| Developer | bordoni |
| Plugin | |
| Version | 5.4.4 |
| Comparing to | |
| See all releases | |
Code changes from version 5.4.3.1 to 5.4.4
- common/lang/tribe-common.pot +49 -29
- common/src/Tribe/Admin/Settings.php +82 -0
- common/src/Tribe/Field.php +79 -0
- common/src/Tribe/Main.php +25 -1
- common/src/Tribe/Repository/Query_Filters.php +1 -1
- common/src/Tribe/Tracker.php +4 -0
- common/src/Tribe/Validate.php +14 -0
- common/src/resources/css/tribe-common-admin.min.css +1 -1
- common/src/resources/images/welcome/tickets-commerce.png +0 -0
- common/src/resources/js/admin-color-field.js +57 -0
- common/src/resources/js/admin-color-field.min.js +1 -0
- common/src/resources/js/admin-image-field.js +172 -0
- common/src/resources/js/admin-image-field.min.js +1 -0
- common/vendor/autoload.php +1 -1
- common/vendor/autoload_52.php +1 -1
- common/vendor/composer/autoload_classmap.php +1 -0
- common/vendor/composer/autoload_real.php +4 -4
- common/vendor/composer/autoload_real_52.php +3 -3
- common/vendor/composer/autoload_static.php +6 -5
- event-tickets.php +2 -2
- lang/event-tickets-nl_NL.mo +0 -0
- lang/event-tickets-ro_RO.mo +0 -0
- lang/event-tickets.pot +163 -160
- readme.txt +17 -1
- src/Tickets/Commerce/Admin_Tables/Orders.php +31 -0
- src/Tickets/Commerce/Gateways/Stripe/Payment_Intent_Handler.php +43 -6
- src/Tickets/Commerce/Order.php +1 -0
- src/Tickets/Commerce/Repositories/Order_Repository.php +261 -0
- src/Tickets/Commerce/Ticket.php +13 -0
- src/Tribe/Attendee_Repository.php +230 -3
- src/Tribe/Attendees_Table.php +52 -0
- src/Tribe/Editor/Blocks/Rsvp.php +1 -1
- src/Tribe/Editor/Compatibility/Tickets.php +1 -0
- src/Tribe/Editor/Template/Overwrite.php +5 -0
- src/Tribe/Main.php +1 -1
- src/Tribe/REST/V1/Attendee_Repository.php +7 -11
- src/Tribe/REST/V1/Endpoints/Attendee_Archive.php +16 -22
- src/Tribe/REST/V1/Endpoints/Single_Attendee.php +12 -12
- src/Tribe/REST/V1/Endpoints/Ticket_Archive.php +3 -3
- src/Tribe/REST/V1/Main.php +78 -3
- src/Tribe/REST/V1/Post_Repository.php +9 -9
- src/Tribe/REST/V1/Service_Provider.php +10 -6
- src/Tribe/RSVP.php +31 -23
- src/Tribe/Tickets.php +9 -5
- src/admin-views/admin-welcome-message.php +18 -5
- src/resources/css/tickets-report.css +1 -1
- src/resources/css/tickets-report.min.css +1 -1
- src/resources/js/v2/__tests__/tickets-utils.test.js +24 -0
- src/resources/js/v2/tickets-block.js +23 -14
- src/resources/js/v2/tickets-utils.js +25 -0
- src/resources/postcss/tickets-report.pcss +1 -1
- src/views/v2/tickets/item/inactive.php +1 -1
- vendor/autoload.php +1 -1
- vendor/composer/autoload_real.php +4 -4
- vendor/composer/autoload_static.php +4 -4
common/lang/tribe-common.pot
CHANGED
|
@@ -2,13 +2,13 @@
|
|
| 2 |
# This file is distributed under the same license as the Tribe Common package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
-
"Project-Id-Version: Tribe Common 4.15.
|
| 6 |
"Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
|
| 7 |
-
"POT-Creation-Date: 2022-
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 11 |
-
"PO-Revision-Date: 2022-
|
| 12 |
"Last-Translator: \n"
|
| 13 |
"Language-Team: \n"
|
| 14 |
|
|
@@ -58,7 +58,7 @@ msgctxt "Error status label for system info optin"
|
|
| 58 |
msgid "Status:"
|
| 59 |
msgstr ""
|
| 60 |
|
| 61 |
-
#. #-#-#-#-# tribe-common.pot (Tribe Common 4.15.
|
| 62 |
#. Author of the plugin/theme
|
| 63 |
#: src/Tribe/Admin/Help_Page.php:116 src/Tribe/Customizer.php:664
|
| 64 |
#: src/Tribe/Plugins_API.php:25 src/admin-views/help-calendar.php:97
|
|
@@ -1091,22 +1091,38 @@ msgid ""
|
|
| 1091 |
"and you should likely delete it."
|
| 1092 |
msgstr ""
|
| 1093 |
|
| 1094 |
-
#: src/Tribe/Field.php:
|
| 1095 |
msgid "Invalid field type specified"
|
| 1096 |
msgstr ""
|
| 1097 |
|
| 1098 |
-
#: src/Tribe/Field.php:
|
| 1099 |
msgid "No radio options specified"
|
| 1100 |
msgstr ""
|
| 1101 |
|
| 1102 |
-
#: src/Tribe/Field.php:
|
| 1103 |
msgid "No checkbox options specified"
|
| 1104 |
msgstr ""
|
| 1105 |
|
| 1106 |
-
#: src/Tribe/Field.php:
|
| 1107 |
msgid "No select options specified"
|
| 1108 |
msgstr ""
|
| 1109 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1110 |
#: src/Tribe/Languages/Locations.php:79
|
| 1111 |
msgid "United States"
|
| 1112 |
msgstr ""
|
|
@@ -2327,87 +2343,87 @@ msgstr ""
|
|
| 2327 |
msgid "Full debug (all events)"
|
| 2328 |
msgstr ""
|
| 2329 |
|
| 2330 |
-
#: src/Tribe/Main.php:
|
| 2331 |
msgid ": activate to sort column ascending"
|
| 2332 |
msgstr ""
|
| 2333 |
|
| 2334 |
-
#: src/Tribe/Main.php:
|
| 2335 |
msgid ": activate to sort column descending"
|
| 2336 |
msgstr ""
|
| 2337 |
|
| 2338 |
-
#: src/Tribe/Main.php:
|
| 2339 |
msgid "Show _MENU_ entries"
|
| 2340 |
msgstr ""
|
| 2341 |
|
| 2342 |
-
#: src/Tribe/Main.php:
|
| 2343 |
msgid "No data available in table"
|
| 2344 |
msgstr ""
|
| 2345 |
|
| 2346 |
-
#: src/Tribe/Main.php:
|
| 2347 |
msgid "Showing _START_ to _END_ of _TOTAL_ entries"
|
| 2348 |
msgstr ""
|
| 2349 |
|
| 2350 |
-
#: src/Tribe/Main.php:
|
| 2351 |
msgid "Showing 0 to 0 of 0 entries"
|
| 2352 |
msgstr ""
|
| 2353 |
|
| 2354 |
-
#: src/Tribe/Main.php:
|
| 2355 |
msgid "(filtered from _MAX_ total entries)"
|
| 2356 |
msgstr ""
|
| 2357 |
|
| 2358 |
-
#: src/Tribe/Main.php:
|
| 2359 |
msgid "No matching records found"
|
| 2360 |
msgstr ""
|
| 2361 |
|
| 2362 |
-
#: src/Tribe/Main.php:
|
| 2363 |
msgid "Search:"
|
| 2364 |
msgstr ""
|
| 2365 |
|
| 2366 |
-
#: src/Tribe/Main.php:
|
| 2367 |
msgid "All items on this page were selected. "
|
| 2368 |
msgstr ""
|
| 2369 |
|
| 2370 |
-
#: src/Tribe/Main.php:
|
| 2371 |
msgid "Select all pages"
|
| 2372 |
msgstr ""
|
| 2373 |
|
| 2374 |
-
#: src/Tribe/Main.php:
|
| 2375 |
msgid "Clear Selection."
|
| 2376 |
msgstr ""
|
| 2377 |
|
| 2378 |
-
#: src/Tribe/Main.php:
|
| 2379 |
msgid "All"
|
| 2380 |
msgstr ""
|
| 2381 |
|
| 2382 |
-
#: src/Tribe/Main.php:
|
| 2383 |
msgid "Next"
|
| 2384 |
msgstr ""
|
| 2385 |
|
| 2386 |
-
#: src/Tribe/Main.php:
|
| 2387 |
msgid "Previous"
|
| 2388 |
msgstr ""
|
| 2389 |
|
| 2390 |
-
#: src/Tribe/Main.php:
|
| 2391 |
msgid ": Selected %d rows"
|
| 2392 |
msgstr ""
|
| 2393 |
|
| 2394 |
-
#: src/Tribe/Main.php:
|
| 2395 |
msgid ": Selected 1 row"
|
| 2396 |
msgstr ""
|
| 2397 |
|
| 2398 |
-
#: src/Tribe/Main.php:
|
| 2399 |
msgid "Prev"
|
| 2400 |
msgstr ""
|
| 2401 |
|
| 2402 |
-
#: src/Tribe/Main.php:
|
| 2403 |
msgid "Today"
|
| 2404 |
msgstr ""
|
| 2405 |
|
| 2406 |
-
#: src/Tribe/Main.php:
|
| 2407 |
msgid "Done"
|
| 2408 |
msgstr ""
|
| 2409 |
|
| 2410 |
-
#: src/Tribe/Main.php:
|
| 2411 |
msgid "Clear"
|
| 2412 |
msgstr ""
|
| 2413 |
|
|
@@ -3113,6 +3129,10 @@ msgstr ""
|
|
| 3113 |
msgid "%s must be an email address."
|
| 3114 |
msgstr ""
|
| 3115 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3116 |
#: src/Tribe/View_Helpers.php:59
|
| 3117 |
msgid "Select a Country:"
|
| 3118 |
msgstr ""
|
| 2 |
# This file is distributed under the same license as the Tribe Common package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
+
"Project-Id-Version: Tribe Common 4.15.5\n"
|
| 6 |
"Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
|
| 7 |
+
"POT-Creation-Date: 2022-08-11 05:07:49+00:00\n"
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 11 |
+
"PO-Revision-Date: 2022-08-11 05:07\n"
|
| 12 |
"Last-Translator: \n"
|
| 13 |
"Language-Team: \n"
|
| 14 |
|
| 58 |
msgid "Status:"
|
| 59 |
msgstr ""
|
| 60 |
|
| 61 |
+
#. #-#-#-#-# tribe-common.pot (Tribe Common 4.15.5) #-#-#-#-#
|
| 62 |
#. Author of the plugin/theme
|
| 63 |
#: src/Tribe/Admin/Help_Page.php:116 src/Tribe/Customizer.php:664
|
| 64 |
#: src/Tribe/Plugins_API.php:25 src/admin-views/help-calendar.php:97
|
| 1091 |
"and you should likely delete it."
|
| 1092 |
msgstr ""
|
| 1093 |
|
| 1094 |
+
#: src/Tribe/Field.php:240
|
| 1095 |
msgid "Invalid field type specified"
|
| 1096 |
msgstr ""
|
| 1097 |
|
| 1098 |
+
#: src/Tribe/Field.php:550
|
| 1099 |
msgid "No radio options specified"
|
| 1100 |
msgstr ""
|
| 1101 |
|
| 1102 |
+
#: src/Tribe/Field.php:586
|
| 1103 |
msgid "No checkbox options specified"
|
| 1104 |
msgstr ""
|
| 1105 |
|
| 1106 |
+
#: src/Tribe/Field.php:648
|
| 1107 |
msgid "No select options specified"
|
| 1108 |
msgstr ""
|
| 1109 |
|
| 1110 |
+
#: src/Tribe/Field.php:750
|
| 1111 |
+
msgid "Select Image"
|
| 1112 |
+
msgstr ""
|
| 1113 |
+
|
| 1114 |
+
#: src/Tribe/Field.php:751
|
| 1115 |
+
msgid "Remove Image"
|
| 1116 |
+
msgstr ""
|
| 1117 |
+
|
| 1118 |
+
#: src/Tribe/Field.php:755
|
| 1119 |
+
msgid "Select an image"
|
| 1120 |
+
msgstr ""
|
| 1121 |
+
|
| 1122 |
+
#: src/Tribe/Field.php:756
|
| 1123 |
+
msgid "Use this image"
|
| 1124 |
+
msgstr ""
|
| 1125 |
+
|
| 1126 |
#: src/Tribe/Languages/Locations.php:79
|
| 1127 |
msgid "United States"
|
| 1128 |
msgstr ""
|
| 2343 |
msgid "Full debug (all events)"
|
| 2344 |
msgstr ""
|
| 2345 |
|
| 2346 |
+
#: src/Tribe/Main.php:378
|
| 2347 |
msgid ": activate to sort column ascending"
|
| 2348 |
msgstr ""
|
| 2349 |
|
| 2350 |
+
#: src/Tribe/Main.php:379
|
| 2351 |
msgid ": activate to sort column descending"
|
| 2352 |
msgstr ""
|
| 2353 |
|
| 2354 |
+
#: src/Tribe/Main.php:381
|
| 2355 |
msgid "Show _MENU_ entries"
|
| 2356 |
msgstr ""
|
| 2357 |
|
| 2358 |
+
#: src/Tribe/Main.php:382
|
| 2359 |
msgid "No data available in table"
|
| 2360 |
msgstr ""
|
| 2361 |
|
| 2362 |
+
#: src/Tribe/Main.php:383
|
| 2363 |
msgid "Showing _START_ to _END_ of _TOTAL_ entries"
|
| 2364 |
msgstr ""
|
| 2365 |
|
| 2366 |
+
#: src/Tribe/Main.php:384
|
| 2367 |
msgid "Showing 0 to 0 of 0 entries"
|
| 2368 |
msgstr ""
|
| 2369 |
|
| 2370 |
+
#: src/Tribe/Main.php:385
|
| 2371 |
msgid "(filtered from _MAX_ total entries)"
|
| 2372 |
msgstr ""
|
| 2373 |
|
| 2374 |
+
#: src/Tribe/Main.php:386
|
| 2375 |
msgid "No matching records found"
|
| 2376 |
msgstr ""
|
| 2377 |
|
| 2378 |
+
#: src/Tribe/Main.php:387
|
| 2379 |
msgid "Search:"
|
| 2380 |
msgstr ""
|
| 2381 |
|
| 2382 |
+
#: src/Tribe/Main.php:388
|
| 2383 |
msgid "All items on this page were selected. "
|
| 2384 |
msgstr ""
|
| 2385 |
|
| 2386 |
+
#: src/Tribe/Main.php:389
|
| 2387 |
msgid "Select all pages"
|
| 2388 |
msgstr ""
|
| 2389 |
|
| 2390 |
+
#: src/Tribe/Main.php:390
|
| 2391 |
msgid "Clear Selection."
|
| 2392 |
msgstr ""
|
| 2393 |
|
| 2394 |
+
#: src/Tribe/Main.php:392
|
| 2395 |
msgid "All"
|
| 2396 |
msgstr ""
|
| 2397 |
|
| 2398 |
+
#: src/Tribe/Main.php:393 src/Tribe/Main.php:410
|
| 2399 |
msgid "Next"
|
| 2400 |
msgstr ""
|
| 2401 |
|
| 2402 |
+
#: src/Tribe/Main.php:394
|
| 2403 |
msgid "Previous"
|
| 2404 |
msgstr ""
|
| 2405 |
|
| 2406 |
+
#: src/Tribe/Main.php:399
|
| 2407 |
msgid ": Selected %d rows"
|
| 2408 |
msgstr ""
|
| 2409 |
|
| 2410 |
+
#: src/Tribe/Main.php:400
|
| 2411 |
msgid ": Selected 1 row"
|
| 2412 |
msgstr ""
|
| 2413 |
|
| 2414 |
+
#: src/Tribe/Main.php:411
|
| 2415 |
msgid "Prev"
|
| 2416 |
msgstr ""
|
| 2417 |
|
| 2418 |
+
#: src/Tribe/Main.php:412 src/Tribe/Main.php:414
|
| 2419 |
msgid "Today"
|
| 2420 |
msgstr ""
|
| 2421 |
|
| 2422 |
+
#: src/Tribe/Main.php:413
|
| 2423 |
msgid "Done"
|
| 2424 |
msgstr ""
|
| 2425 |
|
| 2426 |
+
#: src/Tribe/Main.php:415
|
| 2427 |
msgid "Clear"
|
| 2428 |
msgstr ""
|
| 2429 |
|
| 3129 |
msgid "%s must be an email address."
|
| 3130 |
msgstr ""
|
| 3131 |
|
| 3132 |
+
#: src/Tribe/Validate.php:512
|
| 3133 |
+
msgid "%s must be a valid HTML color code."
|
| 3134 |
+
msgstr ""
|
| 3135 |
+
|
| 3136 |
#: src/Tribe/View_Helpers.php:59
|
| 3137 |
msgid "Select a Country:"
|
| 3138 |
msgstr ""
|
common/src/Tribe/Admin/Settings.php
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
namespace Tribe\Admin;
|
| 4 |
+
|
| 5 |
+
/**
|
| 6 |
+
* Admin Settings class.
|
| 7 |
+
*
|
| 8 |
+
* @since TBD
|
| 9 |
+
*/
|
| 10 |
+
|
| 11 |
+
class Settings {
|
| 12 |
+
|
| 13 |
+
/**
|
| 14 |
+
* Loaded image field assets if not already loaded.
|
| 15 |
+
*
|
| 16 |
+
* @since TBD
|
| 17 |
+
*
|
| 18 |
+
* @return void
|
| 19 |
+
*/
|
| 20 |
+
public function maybe_load_image_field_assets() {
|
| 21 |
+
if ( has_filter( 'tec_admin_load_image_fields_assets', '__return_true' ) ) {
|
| 22 |
+
return;
|
| 23 |
+
}
|
| 24 |
+
add_filter( 'tec_admin_load_image_fields_assets', '__return_true' );
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Logic to load image field assets.
|
| 29 |
+
*
|
| 30 |
+
* @since TBD
|
| 31 |
+
*
|
| 32 |
+
* @return bool
|
| 33 |
+
*/
|
| 34 |
+
public function should_load_image_field_assets() {
|
| 35 |
+
/**
|
| 36 |
+
* Filters whether or not we should load the image field assets on the settings page.
|
| 37 |
+
*
|
| 38 |
+
* @since TBD
|
| 39 |
+
*
|
| 40 |
+
* @param boolean $return True or false whether to load image field assets.
|
| 41 |
+
*/
|
| 42 |
+
$load_assets = apply_filters( 'tec_admin_load_image_fields_assets', false );
|
| 43 |
+
if ( $load_assets ) {
|
| 44 |
+
wp_enqueue_media();
|
| 45 |
+
}
|
| 46 |
+
return $load_assets;
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
/**
|
| 50 |
+
* Load color field assets if not already loaded.
|
| 51 |
+
*
|
| 52 |
+
* @since TBD
|
| 53 |
+
*
|
| 54 |
+
* @return void
|
| 55 |
+
*/
|
| 56 |
+
public function maybe_load_color_field_assets() {
|
| 57 |
+
if ( has_filter( 'tec_admin_load_color_field_assets', '__return_true' ) ) {
|
| 58 |
+
return;
|
| 59 |
+
}
|
| 60 |
+
add_filter( 'tec_admin_load_color_field_assets', '__return_true' );
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
/**
|
| 64 |
+
* Logic to load color field assets.
|
| 65 |
+
*
|
| 66 |
+
* @since TBD
|
| 67 |
+
*
|
| 68 |
+
* @return bool
|
| 69 |
+
*/
|
| 70 |
+
public function should_load_color_field_assets() {
|
| 71 |
+
/**
|
| 72 |
+
* Filters whether or not we should load the color field assets on the settings page.
|
| 73 |
+
*
|
| 74 |
+
* @since TBD
|
| 75 |
+
*
|
| 76 |
+
* @param boolean $return True or false whether to load color field assets.
|
| 77 |
+
*/
|
| 78 |
+
$load_assets = apply_filters( 'tec_admin_load_color_field_assets', false );
|
| 79 |
+
return $load_assets;
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
}
|
common/src/Tribe/Field.php
CHANGED
|
@@ -1,6 +1,9 @@
|
|
| 1 |
<?php
|
| 2 |
|
| 3 |
// Don't load directly
|
|
|
|
|
|
|
|
|
|
| 4 |
if ( ! defined( 'ABSPATH' ) ) {
|
| 5 |
die( '-1' );
|
| 6 |
}
|
|
@@ -110,6 +113,8 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
| 110 |
'number',
|
| 111 |
'wrapped_html',
|
| 112 |
'email',
|
|
|
|
|
|
|
| 113 |
];
|
| 114 |
|
| 115 |
$this->valid_field_types = apply_filters( 'tribe_valid_field_types', $this->valid_field_types );
|
|
@@ -702,6 +707,80 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
| 702 |
return $field;
|
| 703 |
}
|
| 704 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 705 |
/* deprecated camelCase methods */
|
| 706 |
public function doField() {
|
| 707 |
_deprecated_function( __METHOD__, '4.3', __CLASS__ . '::do_field' );
|
| 1 |
<?php
|
| 2 |
|
| 3 |
// Don't load directly
|
| 4 |
+
|
| 5 |
+
use Tribe\Admin\Settings;
|
| 6 |
+
|
| 7 |
if ( ! defined( 'ABSPATH' ) ) {
|
| 8 |
die( '-1' );
|
| 9 |
}
|
| 113 |
'number',
|
| 114 |
'wrapped_html',
|
| 115 |
'email',
|
| 116 |
+
'color',
|
| 117 |
+
'image',
|
| 118 |
];
|
| 119 |
|
| 120 |
$this->valid_field_types = apply_filters( 'tribe_valid_field_types', $this->valid_field_types );
|
| 707 |
return $field;
|
| 708 |
}
|
| 709 |
|
| 710 |
+
/**
|
| 711 |
+
* Generate a color field.
|
| 712 |
+
*
|
| 713 |
+
* @since TBD
|
| 714 |
+
*
|
| 715 |
+
* @return string The field.
|
| 716 |
+
*/
|
| 717 |
+
public function color() {
|
| 718 |
+
|
| 719 |
+
tribe( Settings::class )->maybe_load_color_field_assets();
|
| 720 |
+
|
| 721 |
+
$field = $this->do_field_start();
|
| 722 |
+
$field .= $this->do_field_label();
|
| 723 |
+
$field .= $this->do_field_div_start();
|
| 724 |
+
$field .= '<input';
|
| 725 |
+
$field .= ' type="text"';
|
| 726 |
+
$field .= ' class="tec-admin__settings-color-field-input"';
|
| 727 |
+
$field .= $this->do_field_name();
|
| 728 |
+
$field .= $this->do_field_value();
|
| 729 |
+
$field .= $this->do_field_attributes();
|
| 730 |
+
$field .= '/>';
|
| 731 |
+
$field .= $this->do_screen_reader_label();
|
| 732 |
+
$field .= $this->do_field_div_end();
|
| 733 |
+
$field .= $this->do_field_end();
|
| 734 |
+
|
| 735 |
+
return $field;
|
| 736 |
+
}
|
| 737 |
+
|
| 738 |
+
/**
|
| 739 |
+
* Generate an image field.
|
| 740 |
+
*
|
| 741 |
+
* @since TBD
|
| 742 |
+
*
|
| 743 |
+
* @return string The field.
|
| 744 |
+
*/
|
| 745 |
+
public function image() {
|
| 746 |
+
|
| 747 |
+
tribe( Settings::class )->maybe_load_image_field_assets();
|
| 748 |
+
|
| 749 |
+
$image_exists = ! empty( $this->value );
|
| 750 |
+
$upload_image_text = esc_html__( 'Select Image', 'tribe-common' );
|
| 751 |
+
$remove_image_text = esc_html__( 'Remove Image', 'tribe-common' );
|
| 752 |
+
|
| 753 |
+
// Add default fieldset attributes if none exist.
|
| 754 |
+
$image_fieldset_attributes = [
|
| 755 |
+
'data-select-image-text' => esc_html__( 'Select an image', 'tribe-common' ),
|
| 756 |
+
'data-use-image-text' => esc_html__( 'Use this image', 'tribe-common' ),
|
| 757 |
+
];
|
| 758 |
+
$this->fieldset_attributes = array_merge( $image_fieldset_attributes, $this->fieldset_attributes );
|
| 759 |
+
|
| 760 |
+
$field = $this->do_field_start();
|
| 761 |
+
$field .= $this->do_field_label();
|
| 762 |
+
$field .= $this->do_field_div_start();
|
| 763 |
+
$field .= '<input';
|
| 764 |
+
$field .= ' type="hidden"';
|
| 765 |
+
$field .= ' class="tec-admin__settings-image-field-input"';
|
| 766 |
+
$field .= $this->do_field_name();
|
| 767 |
+
$field .= $this->do_field_value();
|
| 768 |
+
$field .= $this->do_field_attributes();
|
| 769 |
+
$field .= '/>';
|
| 770 |
+
$field .= '<button type="button" class="button tec-admin__settings-image-field-btn-add">' . $upload_image_text . '</button>';
|
| 771 |
+
$field .= '<div class="tec-admin__settings-image-field-image-container hidden">';
|
| 772 |
+
if ( $image_exists ) {
|
| 773 |
+
$field .= '<img src="' . esc_url( $this->value ) . '" />';
|
| 774 |
+
}
|
| 775 |
+
$field .= '</div>';
|
| 776 |
+
$field .= '<button class="tec-admin__settings-image-field-btn-remove hidden">' . $remove_image_text . '</button>';
|
| 777 |
+
$field .= $this->do_screen_reader_label();
|
| 778 |
+
$field .= $this->do_field_div_end();
|
| 779 |
+
$field .= $this->do_field_end();
|
| 780 |
+
|
| 781 |
+
return $field;
|
| 782 |
+
}
|
| 783 |
+
|
| 784 |
/* deprecated camelCase methods */
|
| 785 |
public function doField() {
|
| 786 |
_deprecated_function( __METHOD__, '4.3', __CLASS__ . '::do_field' );
|
common/src/Tribe/Main.php
CHANGED
|
@@ -5,6 +5,7 @@
|
|
| 5 |
|
| 6 |
// Don't load directly
|
| 7 |
|
|
|
|
| 8 |
use Tribe\DB_Lock;
|
| 9 |
|
| 10 |
if ( ! defined( 'ABSPATH' ) ) {
|
|
@@ -20,7 +21,7 @@ class Tribe__Main {
|
|
| 20 |
const OPTIONNAME = 'tribe_events_calendar_options';
|
| 21 |
const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
|
| 22 |
|
| 23 |
-
const VERSION = '4.15.
|
| 24 |
const FEED_URL = 'https://theeventscalendar.com/feed/';
|
| 25 |
|
| 26 |
protected $plugin_context;
|
|
@@ -286,6 +287,17 @@ class Tribe__Main {
|
|
| 286 |
]
|
| 287 |
);
|
| 288 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 289 |
// Register the asset for Customizer controls.
|
| 290 |
tribe_asset(
|
| 291 |
$this,
|
|
@@ -295,6 +307,18 @@ class Tribe__Main {
|
|
| 295 |
'customize_controls_print_styles'
|
| 296 |
);
|
| 297 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 298 |
tribe( Tribe__Admin__Help_Page::class )->register_assets();
|
| 299 |
}
|
| 300 |
|
| 5 |
|
| 6 |
// Don't load directly
|
| 7 |
|
| 8 |
+
use Tribe\Admin\Settings;
|
| 9 |
use Tribe\DB_Lock;
|
| 10 |
|
| 11 |
if ( ! defined( 'ABSPATH' ) ) {
|
| 21 |
const OPTIONNAME = 'tribe_events_calendar_options';
|
| 22 |
const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
|
| 23 |
|
| 24 |
+
const VERSION = '4.15.5';
|
| 25 |
const FEED_URL = 'https://theeventscalendar.com/feed/';
|
| 26 |
|
| 27 |
protected $plugin_context;
|
| 287 |
]
|
| 288 |
);
|
| 289 |
|
| 290 |
+
tribe_asset(
|
| 291 |
+
$this,
|
| 292 |
+
'tec-admin-settings-image-field',
|
| 293 |
+
'admin-image-field.js',
|
| 294 |
+
[ 'jquery' ],
|
| 295 |
+
'in_admin_footer',
|
| 296 |
+
[
|
| 297 |
+
'conditionals' => [ tribe( Settings::class ), 'should_load_image_field_assets' ]
|
| 298 |
+
]
|
| 299 |
+
);
|
| 300 |
+
|
| 301 |
// Register the asset for Customizer controls.
|
| 302 |
tribe_asset(
|
| 303 |
$this,
|
| 307 |
'customize_controls_print_styles'
|
| 308 |
);
|
| 309 |
|
| 310 |
+
// Register the asset for color fields.
|
| 311 |
+
tribe_asset(
|
| 312 |
+
$this,
|
| 313 |
+
'tec-settings-color-field',
|
| 314 |
+
'admin-color-field.js',
|
| 315 |
+
[ 'jquery', 'wp-color-picker' ],
|
| 316 |
+
'admin_footer',
|
| 317 |
+
[
|
| 318 |
+
'conditionals' => [ tribe( Settings::class ), 'should_load_color_field_assets' ]
|
| 319 |
+
]
|
| 320 |
+
);
|
| 321 |
+
|
| 322 |
tribe( Tribe__Admin__Help_Page::class )->register_assets();
|
| 323 |
}
|
| 324 |
|
common/src/Tribe/Repository/Query_Filters.php
CHANGED
|
@@ -1012,7 +1012,7 @@ class Tribe__Repository__Query_Filters {
|
|
| 1012 |
$frags[] = implode( ', ', array_map( $build_entry, $this->query_vars[ static::AFTER . 'orderby' ] ) );
|
| 1013 |
}
|
| 1014 |
|
| 1015 |
-
return implode( ', ', $frags );
|
| 1016 |
}
|
| 1017 |
|
| 1018 |
/**
|
| 1012 |
$frags[] = implode( ', ', array_map( $build_entry, $this->query_vars[ static::AFTER . 'orderby' ] ) );
|
| 1013 |
}
|
| 1014 |
|
| 1015 |
+
return implode( ', ', array_filter( $frags ) );
|
| 1016 |
}
|
| 1017 |
|
| 1018 |
/**
|
common/src/Tribe/Tracker.php
CHANGED
|
@@ -282,8 +282,12 @@ class Tribe__Tracker {
|
|
| 282 |
// If we got here we will update the Modified Meta
|
| 283 |
$modified[ $meta_key ] = $now;
|
| 284 |
|
|
|
|
|
|
|
| 285 |
// Actually do the Update
|
| 286 |
update_post_meta( $post->ID, self::$field_key, $modified );
|
|
|
|
|
|
|
| 287 |
|
| 288 |
// We need to return this, because we are still on a filter
|
| 289 |
return $check;
|
| 282 |
// If we got here we will update the Modified Meta
|
| 283 |
$modified[ $meta_key ] = $now;
|
| 284 |
|
| 285 |
+
// Avoid loops!
|
| 286 |
+
remove_filter( 'update_post_metadata', [ $this, 'filter_watch_updated_meta' ], PHP_INT_MAX - 1 );
|
| 287 |
// Actually do the Update
|
| 288 |
update_post_meta( $post->ID, self::$field_key, $modified );
|
| 289 |
+
// Safe to filter again.
|
| 290 |
+
add_filter( 'update_post_metadata', [ $this, 'filter_watch_updated_meta' ], PHP_INT_MAX - 1, 5 );
|
| 291 |
|
| 292 |
// We need to return this, because we are still on a filter
|
| 293 |
return $check;
|
common/src/Tribe/Validate.php
CHANGED
|
@@ -499,5 +499,19 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
|
|
| 499 |
}
|
| 500 |
}
|
| 501 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 502 |
} // end class
|
| 503 |
} // endif class_exists
|
| 499 |
}
|
| 500 |
}
|
| 501 |
|
| 502 |
+
/**
|
| 503 |
+
* Validates and sanitizes a HTML color codes, including hex, rgb, rgba, hsl and hsla.
|
| 504 |
+
*
|
| 505 |
+
* @since TBD
|
| 506 |
+
*/
|
| 507 |
+
public function color() {
|
| 508 |
+
if ( preg_match( '/^(#(?:[0-9a-f]{2}){2,4}|#[0-9a-f]{3}|(?:rgba?|hsla?)\((?:\d+%?(?:deg|rad|grad|turn)?(?:,|\s)+){2,3}[\s\/]*[\d\.]+%?\))$/i', $this->value ) ) {
|
| 509 |
+
$this->result->valid = true;
|
| 510 |
+
} else {
|
| 511 |
+
$this->result->valid = false;
|
| 512 |
+
$this->result->error = sprintf( esc_html__( '%s must be a valid HTML color code.', 'tribe-common' ), $this->label );
|
| 513 |
+
}
|
| 514 |
+
}
|
| 515 |
+
|
| 516 |
} // end class
|
| 517 |
} // endif class_exists
|
common/src/resources/css/tribe-common-admin.min.css
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
.invalid input,input:out-of-range{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input::placeholder,textarea::placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia,serif!important;font-size:17px!important;font-weight:400;margin:8px 0}.tribe-rating{color:#3d54ff}.tribe-rating:hover{color:#1c39bb}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label>p,.tribe-settings-form .tribe-field-radio label>p{margin-left:1px;text-indent:0}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.tribe-settings-form .tribe-settings-form-wrap #tribe-field-stylesheetOption .description{color:#999;margin-left:1px}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}#modern-tribe-info{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{margin:10px 0}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:alpha(opacity=50);opacity:.5}.ui-widget-shadow{background:#000;border-radius:5px;filter:alpha(opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none!important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}#ui-datepicker-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page{max-width:850px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p{font-size:15px}p.tribe-update-message{font-size:18px;font-weight:400}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}a.tribe-rating-link{text-decoration:none}.tribe-update-links{margin-top:30px}.tribe_update_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-events-widget-admin-form__input-section p{margin:0}.tribe-events-widget-admin-form__input-section h4{margin:.5em 0}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#7ad03a;height:1rem;width:1%}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;height:300px;overflow-y:scroll}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{min-height:100px;padding:1em}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;height:100%;max-height:150px;max-width:150px;vertical-align:middle;width:auto}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-marketing-notice__icon{display:none;flex-shrink:0;padding:0;position:static}.tribe-marketing-notice .tribe-marketing-notice__icon img{display:inline-block;max-height:100%;max-width:none;vertical-align:middle;width:100%}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}.notice-tribe-banner .tribe-marketing-notice__icon{width:47px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:0;padding:1em 0}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice{min-height:50px}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__content{align-content:center;display:flex;flex-wrap:wrap;justify-content:center;margin:auto}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__icon{align-self:baseline;height:20px;margin:auto 14px auto 0;width:13px}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__icon .tribe-common-c-svgicon--stellar-icon circle{stroke:#fff}.notice-tribe-banner.tribe-notice-stellar-sale .tec-stellar-sale-text{fill:#fff;height:16px;margin:unset;margin-top:.25em;stroke:#fff;width:176px}.notice-tribe-banner.tribe-notice-stellar-sale h3{font-weight:400;margin:auto 8px auto 14px;text-align:center}.notice-tribe-banner h3{color:#fff;display:block;font-size:.875rem;line-height:1.25;margin:0 0 .25rem}.notice-tribe-banner a{border-bottom:1px solid;line-height:1.25;margin:0;text-decoration:none}.notice-tribe-banner a:hover{text-decoration:none}.notice-tribe-banner a,.notice-tribe-banner p{color:#fff;display:inline-block;font-size:.875rem;line-height:1.25}.notice-tribe-banner p{display:inline-block;margin:0;padding:0}.notice-tribe-banner .tribe-marketing-notice{align-items:center;display:flex;justify-content:flex-start;margin:0 auto;min-height:65px;padding:0 .75rem;width:100%}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:100%}.notice-tribe-banner .notice-dismiss{position:static}.notice-tribe-banner .notice-dismiss:before{color:#eaf1ff}#wpcontent .notice-tribe-banner{align-items:center;background-color:#161b7d;border:0;box-shadow:none;display:flex;justify-content:flex-start;margin:0 0 16px;padding-right:0}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale{background-color:#000}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a{color:#d8ff00;text-transform:uppercase}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:active,#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:focus,#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:hover{color:#e6b1fc}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container .selection,.tribe-ea-dropdown.select2-container .selection{margin-top:inherit}.tribe-dropdown .select2-selection--single,.tribe-ea-dropdown .select2-selection--single{height:32px}.tribe-dropdown .select2-selection--single .select2-selection__clear,.tribe-ea-dropdown .select2-selection--single .select2-selection__clear{line-height:28px}.tribe-dropdown .select2-selection--single .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--single .select2-selection__rendered{line-height:32px;padding-right:28px}.tribe-dropdown.select2-container--focus .select2-selection--single,.tribe-ea-dropdown.select2-container--focus .select2-selection--single{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-container--open .select2-search__field,.tribe-ea-dropdown.select2-container--open .select2-search__field{padding:0}.tribe-dropdown.select2-container--open .select2-dropdown--below,.tribe-ea-dropdown.select2-container--open .select2-dropdown--below{border-top:1px solid #aaa;margin-top:-1px}.tribe-dropdown.select2-container--open .select2-dropdown--above,.tribe-ea-dropdown.select2-container--open .select2-dropdown--above{border-bottom:1px solid #aaa;margin-bottom:-16px}.tribe-dropdown.select2-container--open .select2-selection--single,.tribe-ea-dropdown.select2-container--open .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown.select2-container--open .select2-selection__arrow b,.tribe-ea-dropdown.select2-container--open .select2-selection__arrow b{transform:rotate(180deg)}.tribe-dropdown.select2-selection--single,.tribe-ea-dropdown.select2-selection--single{background-image:none;border:1px solid #ccc;border-radius:3px;overflow:hidden}.tribe-dropdown.select2-selection--single>.select2-selection__rendered,.tribe-ea-dropdown.select2-selection--single>.select2-selection__rendered{white-space:normal}.tribe-dropdown.select2-selection--single .select2-selection__arrow,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow{background:transparent;background-image:none;border-left:0;top:2px;width:26px}.tribe-dropdown.select2-selection--single .select2-selection__arrow b,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow b{background:#fff url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E") no-repeat right 5px top 55%;background-size:auto;background-size:16px 16px;border:0;bottom:0;display:block;height:auto;left:0;margin:0;padding:0;right:0;top:0;width:auto}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered{background-image:none;border:1px solid #ccc;border-radius:3px;min-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline{line-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input{padding-bottom:0;padding-top:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice{line-height:19px;margin-top:2px;padding-bottom:0;padding-top:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div{line-height:inherit}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove{left:4px;top:3px;transition-property:border,color}.select2-results .select2-results__option{color:#939393;font-weight:400;margin-bottom:0}.select2-results .select2-results__option[aria-disabled=true]{background-color:#e0e0e0}.select2-results.select2-results__option--highlighted{background-color:#efefef;color:#a1a1a1;cursor:default;display:block}.wp-core-ui .button-red{background-color:#a00;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;color:#e79496!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.ticket_form .select2-container .select2-selection--single .select2-selection__arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{border:solid #0ab152;border-width:0 3px 3px 0;content:"";display:block;height:15px;transform:rotate(45deg);width:8px}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}body.tec-help,body.tribe-welcome{background-color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.tec-help .update-nag,body.tribe-welcome .update-nag{display:none}body.tec-help #wpcontent,body.tribe-welcome #wpcontent{padding:0}body.tec-help .tribe_settings,body.tribe-welcome .tribe_settings{margin:0}body.tec-help #wpfooter,body.tec-help .tribe_settings>h1,body.tribe-welcome #wpfooter,body.tribe-welcome .tribe_settings>h1{display:none}body.tec-help #wpbody-content,body.tribe-welcome #wpbody-content{padding-bottom:25px}body.tec-help .tribe-dependency-error,body.tribe-welcome .tribe-dependency-error{display:none}.tribe-events-admin-content-wrapper{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;margin:0 auto;padding:0 0 30px;width:calc(100% - 40px)}.tribe-events-admin-card{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;display:block;margin:0 auto 36px;padding:27px;text-align:center}.tribe-events-admin-card--2up .tribe-events-admin-card__title{max-width:260px}.tribe-events-admin-card--3up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--3up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card__button{background-color:#fff;border:none;color:#3d54ff;font-size:14px;font-weight:700;letter-spacing:1px;line-height:16px;position:absolute;right:20px;text-transform:uppercase;top:17px}.tribe-events-admin-card__button:hover{color:#161b7d}.tribe-events-admin-card__description{color:#000;font-size:14px;font-style:normal;font-weight:400;line-height:22px;margin-top:16px}.tribe-events-admin-card__image{display:block;height:100px;margin:0 auto}.tribe-events-admin-card__link{color:#3d54ff;display:inline-block;font-size:16px;font-style:normal;font-weight:700;line-height:18px;margin-top:24px;position:relative;text-decoration:none}.tribe-events-admin-card__link:hover{color:#161b7d}.tribe-events-admin-card__link:after{border-style:solid;border-width:0 0 1px;bottom:-4px;content:"";left:0;position:absolute;width:100%}.tribe-events-admin-card__title{color:#0f1031;font-size:20px;font-weight:700;line-height:23px;margin:auto}.tribe-events-admin-card-grid{max-width:1048px}input[type=checkbox].tribe-common-switch__input{display:none}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label{background:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;cursor:pointer;display:block;height:18px;outline:0;padding:3px;position:relative;transition:all .2s ease;-webkit-user-select:none;user-select:none;width:27px}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:after,input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:before{content:"";display:block;height:10px;position:relative;width:10px}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:after{background:#878787;border-radius:2px;content:"";left:0;transition:all .2s ease}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:before{display:none}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label::selection{background:none}input[type=checkbox].tribe-common-switch__input:checked+.tribe-common-switch__label:after{background:#2e709d;left:50%}.tribe-events-admin-header__logo-word-mark{display:inline-block;height:auto;margin:0 0 26px;vertical-align:middle;width:312px}.tribe-events-admin-header{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:45px 0 0}.tribe-events-admin-header__right-image{height:280px;position:absolute;right:0;top:0;width:auto;z-index:-1}.tribe-events-admin-header__title{font-size:48px;line-height:48px;margin:0 0 18px}.tribe-events-admin-header__description{font-size:18px;line-height:28px;margin-bottom:44px;max-width:60%}.tribe-events-admin-tab-nav{display:flex;margin:0}.tribe-events-admin-tab-nav li{cursor:pointer;font-size:16px;font-weight:500;margin-bottom:0;margin-right:30px}.tribe-events-admin-tab-nav li:hover{color:#334aff}.tribe-events-admin-tab-nav .selected{border-bottom:3px solid currentColor;color:#334aff;padding-bottom:17px}.tribe-events-admin-tab-nav li:after{background:#334aff;border-radius:100px;bottom:0;content:"";display:block;height:3px;left:0;position:absolute;right:0}.tribe-events-admin__line{border-top:1px solid #e1e1e4}.tribe-events-admin-products-description{color:#0f1031;font-size:14px;line-height:2}.tribe-events-admin-products-card{align-items:center;border:1px solid #e1e1e4;border-radius:20px;display:flex;padding:10px 15px}.tribe-events-admin-products-card__icon{height:40px;object-fit:contain;width:40px}.tribe-events-admin-products-card__group{margin:0 20px;max-width:55%}.tribe-events-admin-products-card__group-title{color:#0f1031;font-size:16px;font-weight:700;line-height:1;margin:0}.tribe-events-admin-products-card__group-description{font-size:12px;margin-top:5px}.tribe-events-admin-products-card__button{background-color:#fff;border:1px solid #e1e1e4;border-radius:20px;color:#0f1031;font-size:12px;font-weight:700;letter-spacing:1px;line-height:16px;margin-left:auto;padding:10px 15px;text-decoration:none;text-transform:uppercase}.tribe-events-admin-products-card__button:hover{background-color:#334aff;color:#fff}.tribe-events-admin-products-card__button:active,.tribe-events-admin-products-card__button:focus{box-shadow:none;outline:none}.tribe-events-admin-products-card__button--active,.tribe-events-admin-products-card__button--active:active,.tribe-events-admin-products-card__button--active:focus,.tribe-events-admin-products-card__button--active:hover{background:rgba(61,84,255,.16);color:#334aff;cursor:not-allowed;text-transform:uppercase}.tribe-events-admin-card--1up{width:100%}.tribe-events-admin-card--no-pad{padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__image{display:block;height:152px;margin:0;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{font-size:28px;line-height:34px;text-align:left}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin:0;padding:0;text-align:left}.tribe-events-admin-card--no-pad .tribe-events-admin-card__link{margin:0;padding:0}.tribe-events-admin-card--faq{display:inline-block;font-size:0;height:147px;margin:0 0 0 30px;padding:24px 16px 22px 20px;width:230px}.tribe-events-admin-card--faq:first-child{margin-left:0}.tribe-events-admin-card--faq img{float:left;height:22px;width:16px}.tribe-events-admin-card--faq .tribe-events-admin-faq__question{color:#334aff;font-size:16px;line-height:19px;margin:0 0 12px 26px;text-align:left}.tribe-events-admin-card--faq .tribe-events-admin-faq__answer{font-size:13px;line-height:16px;margin-left:26px;text-align:left}.tribe-events-admin-video{border-radius:16px;height:200px;margin-bottom:72px;-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 0);overflow:hidden;-webkit-transform:rotate(.000001deg)}.tribe-events-admin-video iframe{width:100%}.tribe-events-admin-card--promo-blue{background-color:#3d54ff;background-image:url(../images/welcome/promo.jpg)}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{color:#fff;font-size:16px;margin-bottom:16px;text-align:left}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__title{color:#fff;text-align:left}.tribe-events-admin-graphic{position:absolute;right:0;top:106px;z-index:-1}.tribe-events-admin-graphic--desktop-only{display:none}.tribe-events-admin-graphic--mobile-only{display:block}.tribe-events-admin-card__form{position:relative}input[type=email].tribe-events-admin-card__input{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;font-size:14px;height:54px}input[type=email].tribe-events-admin-card__input::placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}.tribe-events-admin-container,.tribe-events-admin-content-wrapper.tribe-events-admin-container{margin:0 auto;max-width:1024px;width:90%}.tribe-events-admin-2col-grid{display:grid;grid-gap:15px 30px;gap:15px 30px;grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-3col-grid{display:grid;grid-gap:30px;gap:30px;grid-template-areas:". . .";grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-4col-grid{display:grid;grid-gap:30px;gap:30px;grid-template-areas:". . . .";grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-products{margin:10px 0 0}.tribe-events-admin-quick-nav{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;display:block;margin:40px 0 78px;padding:18px 23px 2px}.tribe-events-admin-quick-nav__link{color:#3d54ff;font-size:16px;font-weight:700;line-height:18px;text-align:center;text-decoration:none}.tribe-events-admin-quick-nav__link:hover{color:#161b7d}.tribe-events-admin-quick-nav__link-item{display:block;padding-bottom:19px}.tribe-events-admin-quick-nav__links{display:inline}.tribe-events-admin-quick-nav__title{color:rgba(15,16,49,.72);display:inline-block;font-size:14px;font-weight:400;line-height:16px;padding-bottom:14px;text-transform:uppercase}.tribe-events-admin-title{padding-top:14px}.tribe-events-admin-title__description{color:#0f1031;font-size:16px;font-weight:400;line-height:24px;max-width:584px;padding-top:15px}.tribe-events-admin-title__heading{color:#0f1031;display:inline-block;font-size:24px;font-weight:700;line-height:28px;margin:5px 0 0}.tribe-events-admin-title__logo{margin-right:8px;vertical-align:top;width:34px}.tribe-events-admin-notice{background-color:#3d54ff;height:65px}.tribe-events-admin-notice .tribe-events-admin-content-wrapper{padding-bottom:0;padding-top:8px}.tribe-events-admin-notice p{color:#fff;display:inline-block;font-family:Helvetica,sans-serif;font-size:16px;line-height:18px;margin-top:0;padding-bottom:12px;padding-left:16px;vertical-align:middle;width:calc(100% - 60px)}.tribe-events-admin-notice__logo{display:inline-block}.tribe-events-admin-tickets .tribe-events-admin-section-header{font-size:28px;line-height:32px}.tribe-events-admin-tickets .tribe-events-admin-graphic--desktop-only{width:365px}.tribe-events-admin-tickets .tribe-events-admin-graphic--mobile-only{top:230px;width:300px}.tribe-events-admin-tickets .tribe-events-admin-title__heading{margin-top:0}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:4px;width:32px}.tribe-events-admin-kb{margin:10px 0 0}.tribe-events-admin-kb-card{border:1px solid #e1e1e4;border-radius:20px}.tribe-events-admin-kb-card__image{height:auto;width:100%}.tribe-events-admin-kb-card__title{color:#0f1031;flex-grow:0;font-size:20px;font-weight:700;line-height:1.2;margin:0;padding:20px 28px 10px}.tribe-events-admin-kb-card__links{margin:0;padding:0 28px 25px}.tribe-events-admin-kb-card__links li{margin:0 0 10px}.tribe-events-admin-kb-card__links li a{color:#334aff;font-size:14px;line-height:1.2;text-decoration:none}.tribe-events-admin-kb-card__links li a:focus{box-shadow:none;outline:none}.tribe-events-admin-kb-card__links li a:hover{color:#1c39bb}.tribe-events-admin-section-header{align-items:center;color:#000;display:flex;font-weight:700;justify-content:space-between;margin:0}.tribe-events-admin-section-header h3{color:#0f1031;font-size:28px;font-weight:700;line-height:1}.tribe-events-admin-section-header a{border-bottom:2px solid;color:#334aff;font-size:14px;padding-bottom:2px;text-decoration:none}.tribe-events-admin-section-header a:focus{box-shadow:none;outline:none}.tribe-events-admin-section-header a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-faq{margin:10px 0 0}.tribe-events-admin-faq-card{border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;padding:24px 15px 19px 19px}.tribe-events-admin-faq-card a{color:#0f1031}.tribe-events-admin-faq-card a:focus{box-shadow:none;outline:none}.tribe-events-admin-faq-card a:hover{color:#1c39bb}.tribe-events-admin-faq-card__icon img{height:22px;width:16px}.tribe-events-admin-faq-card__content{margin-left:10px}.tribe-events-admin-faq__question,.tribe-events-admin-faq__question a{color:#334aff;font-size:16px;text-decoration:none}.tribe-events-admin-faq__question a:focus{box-shadow:none;outline:none}.tribe-events-admin-faq__question a:hover{color:#1c39bb}.tribe-events-admin-faq__answer{color:#0f1031;font-size:13px;margin-top:18px}.tribe-events-admin-extensions-title{color:#0f1031;font-size:16px;line-height:1.5;margin:0 0 30px;max-width:70%}.tribe-events-admin-extensions{margin:10px 0 0}.tribe-events-admin-extensions-card{border:1px solid #e1e1e4;border-radius:20px;border-top:8px solid #334aff;padding:48px 35px 24px 25px}.tribe-events-admin-extensions-card__title{font-size:20px;margin:0}.tribe-events-admin-extensions-card__title a{color:#0f1031;font-family:Helvetica,sans-serif;font-size:20px;font-weight:700;line-height:1.2;text-decoration:none}.tribe-events-admin-extensions-card__title a:active,.tribe-events-admin-extensions-card__title a:focus,.tribe-events-admin-extensions-card__title a:hover{box-shadow:none;color:#334aff}.tribe-events-admin-extensions-card__description{color:#0f1031;font-family:Helvetica,sans-serif;font-size:14px;line-height:1.43;margin:20px 0}.tribe-events-admin-cta{align-items:center;border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;margin:60px 0}.tribe-events-admin-cta__image{height:152px;object-fit:contain;width:auto}.tribe-events-admin-cta__content,.tribe-events-admin__troubleshooting-cta{align-items:center;display:flex;flex-direction:column;justify-content:center;padding:20px 0;width:100%}.tribe-events-admin-cta__content-title{color:#0f1031;font-size:28px;font-weight:700;line-height:normal;margin:0 0 10px;text-align:center}.tribe-events-admin-cta__content-subtitle{color:#0f1031;font-size:16px;line-height:1.5;margin-bottom:10px;text-align:center}.tribe-events-admin-cta__content-description a{border-bottom:2px solid;color:#334aff;font-size:16px;font-weight:700;padding-bottom:2px;text-decoration:none}.tribe-events-admin-cta__content-description a:focus{box-shadow:none;outline:none}.tribe-events-admin-cta__content-description a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-footer-logo{display:inline-block;vertical-align:middle;width:228px}.tribe-events-admin-step{margin:10px 0 0}.tribe-events-admin-step-card{border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;padding:24px 15px 19px 19px}.tribe-events-admin-step-card a{border-bottom:2px solid;color:#334aff;padding-bottom:2px;text-decoration:none}.tribe-events-admin-step-card a:focus{box-shadow:none;outline:none}.tribe-events-admin-step-card a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-step-card__icon img{height:43px;margin-right:5px;width:42px}.tribe-events-admin-step-card__content{margin-left:10px}.tribe-events-admin-step__title{color:#0f1031;font-size:20px;font-weight:700;line-height:1.2;margin-bottom:10px}.tribe-events-admin-step__answer{color:#0f1031;font-size:13px;margin-top:18px}.tribe-events-admin__system-information{display:grid;grid-gap:15px 30px;gap:15px 30px;grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:1fr;margin:100px 0;position:relative}.tribe-events-admin__troubleshooting-title{color:#0f1031;font-size:28px;font-weight:700;line-height:1;margin:0}.tribe-events-admin__troubleshooting-description{color:#0f1031;font-size:18px;line-height:1.2;line-height:1.44;margin:20px 0}.tribe-events-admin__system-information-select{display:flex;margin:30px 0 20px}.tribe-events-admin__system-information-select input[type=checkbox]{margin:0 10px 0 0}.tribe-events-admin__system-information-select label{color:#0f1031;font-size:16px;line-height:1.2}.tribe-events-admin__system-information-content small{color:#0f1031;font-size:12px;line-height:1.2}.tribe-events-admin__recent-template-changes .template-updates-wrapper,.tribe-events-admin__system-information-widget{background:#0f1031;border-radius:16px;color:#fff;font-size:14px;line-height:1.14;max-height:280px;overflow:scroll;-ms-overflow-style:none;padding:12px 0 0 27px;scrollbar-width:none}.tribe-events-admin__recent-template-changes .template-updates-wrapper p{color:#fff;font-size:14px;line-height:1.14;margin:0}.tribe-events-admin__system-information-widget a{color:#334aff}.tribe-events-admin__system-information-widget a:hover{opacity:.8}.tribe-events-admin__recent-template-changes .template-updates-wrapper{padding:30px 0 30px 27px}.tribe-events-admin__recent-template-changes .template-updates-wrapper::-webkit-scrollbar,.tribe-events-admin__system-information-widget::-webkit-scrollbar{display:none}.tribe-events-admin__system-information-widget-copy{bottom:10px;position:absolute}.tribe-events-admin__system-information-widget-copy button{background-color:#334aff;border:none;border-radius:100px;color:#fff;cursor:pointer;font-size:16px;font-weight:700;outline:none;padding:18px 25px;text-align:center}.tribe-events-admin__system-information-widget-copy button:hover{background-color:#1c39bb}.tribe-events-admin__system-information-widget-copy button .dashicons,.tribe-events-admin__system-information-widget-copy button .dashicons-before:before{display:none}.tribe-events-admin__system-information-widget-copy button .optin-success{color:#fff;font-size:16px;font-weight:700;text-align:center}.tribe-events-admin__recent-template-changes p{color:#0f1031;font-size:18px;line-height:1.2;line-height:1.44;margin:20px 0}.tribe-events-admin__recent-log{margin-top:50px}.tribe-events-admin__troubleshooting-event-log-wrapper label{color:#0f1031;display:block;font-size:16px;line-height:1.63;margin-bottom:10px}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-controls{margin:20px 0 10px}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-viewer{background:#0f1031;border-radius:16px;color:#fff;font-size:14px;line-height:1.14;max-height:280px;min-height:60px;overflow:scroll;-ms-overflow-style:none;padding:12px 0 0 27px;scrollbar-width:none}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-viewer::-webkit-scrollbar{display:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log{border-bottom:2px solid;color:#334aff;font-size:16px;padding-bottom:2px;text-decoration:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log:focus{box-shadow:none;outline:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__troubleshooting-event-log-wrapper .tribe-events-admin__recent-log-filters-select-wrapper:after{display:none}.tribe-events-admin__recent-log-filters{display:flex;padding:20px 0 40px}.tribe-events-admin__recent-log-filters-field{margin-right:40px}.tribe-events-admin__recent-log-filters-select-wrapper:after{content:url(../images/help/polygon.svg);height:13px;pointer-events:none;position:absolute;right:22px;top:20px;width:14px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default .select2-selection--single{border:1px solid #e1e1e4!important;border-radius:16px;color:#0f1031;font-size:14px;line-height:1.14;padding:0 25px 0 15px!important}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls{margin-bottom:20px;padding:0}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:first-child,.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(2),.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(3){padding-right:75px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-selection__clear{display:none}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default .select2-selection--single .select2-selection__arrow{right:5px}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:16px;border-bottom-right-radius:16px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container .select2-selection--single .select2-selection__rendered{width:100%}.tribe-events-admin__recent-log-filters-select-wrapper select.focus-visible,.tribe-events-admin__recent-log-filters-select-wrapper select:focus-visible{outline:none}.tribe-events-admin__recent-log-filters-select-wrapper select option{color:#0f1031;font-size:14px;line-height:1.14}.tribe-events-admin__ea-status{margin-top:50px}.tribe-events-admin__issues-found-card{background-color:#f3eee8;border-radius:8px;margin-bottom:20px}.tribe-events-admin__issues-found-card:last-of-type{margin-bottom:100px}.tribe-events-admin__issues-found-card-title{align-items:center;cursor:pointer;display:flex;padding:10px 20px 10px 17px;position:relative}.tribe-events-admin__issues-found-card-title img{height:21px;margin-right:14px;object-fit:contain;width:21px}.tribe-events-admin__issues-found-card-title h3{margin:0}.tribe-events-admin__issues-found-card-title span{color:#0f1031;display:block}.tribe-events-admin__issues-found-card-title i{background-image:url(../images/help/arrow-down.svg);background-position:50%;background-repeat:no-repeat;background-size:contain;height:15px;margin:12px 20px;position:absolute;right:0;top:0;transition:all .3s ease;width:15px}.tribe-events-admin__issues-found-card-title.active i{background-image:url(../images/help/arrow-up.svg);background-repeat:no-repeat;top:5px}.tribe-events-admin__issues-found-card-description{display:none;padding:0 20px 20px 55px}.tribe-events-admin__issues-found-card-description p{color:#0f1031;font-size:16px;margin:0}.tribe-events-admin__issues-found-card-description-actions{display:flex;padding:20px 0 10px}.tribe-events-admin__issues-found-card-description-actions a{border-bottom:2px solid;color:#334aff;font-size:16px;margin-right:20px;padding-bottom:5px;text-decoration:none}.tribe-events-admin__issues-found-card-description-actions a:focus{box-shadow:none;outline:none}.tribe-events-admin__issues-found-card-description-actions a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__ea-status-table-wrapper{overflow-x:auto}.tribe-events-admin__ea-status-table{border:1px solid #e1e1e4;border-radius:16px;margin:30px 0 40px;overflow:hidden}.tribe-events-admin__ea-status-table a{border-bottom:2px solid;color:#334aff;padding-bottom:2px;text-decoration:none}.tribe-events-admin__ea-status-table a:focus{box-shadow:none;outline:none}.tribe-events-admin__ea-status-table a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__ea-status-table tr{align-items:center;display:flex}.tribe-events-admin__ea-status-table th{color:#0f1031;font-weight:700;line-height:1.17;margin-top:10px;padding:5px 25px}.tribe-events-admin__ea-status-table td{align-items:center;color:#0f1031;display:flex;font-size:16px;line-height:1.63;padding:10px 25px;width:25%}.tribe-events-admin__ea-status-table td:nth-child(2){width:45%}.tribe-events-admin__ea-status-table td:nth-child(3){display:flex;justify-content:flex-end;width:30%}.tribe-events-admin__ea-status-table-dark{background-color:#f9f7f4}.tribe-events-admin__ea-status-table td img{height:21px;margin-right:14px;object-fit:contain;width:21px}.tec-troubleshooting,.tribe_events_page_tec-troubleshooting{background-color:#fff}#tribe-community,#tribe-ticketing{display:none}.tribe-events-admin__troubleshooting-notice{background-color:#161b7d;color:#fff;font-size:16px;line-height:1;margin-left:-1.55vw;padding:24px 0}.tribe-events-admin__troubleshooting-notice_title{margin:0 auto;max-width:1024px;padding-left:25px;width:90%}.tribe-events-admin__troubleshooting-notice_title a{border-bottom:2px solid;color:#fff;font-size:16px;line-height:1;padding-bottom:2px;text-decoration:none}.tribe-events-admin__troubleshooting-notice_title a:focus{box-shadow:none;outline:none}.tribe-events-admin__troubleshooting-notice_title a:hover{border-bottom:2px solid;color:#f3eee8}.tec-help #tec-help-community,.tec-help #tec-help-ticketing{display:none}.tec-help .tribe-events-admin-title{padding-top:25px}.tec-help .tribe-events-admin-title img{height:67px}body.tribe-welcome #fs_connect{border:1px solid #e1e1e4;border-radius:16px;box-shadow:none;box-sizing:border-box;margin-left:22px}body.tribe-welcome #fs_connect .fs-actions{background-color:transparent}body.tribe-welcome #fs_connect .fs-permissions{border-top:1px solid #e1e1e4;margin:0 16px}body.tribe-welcome #fs_connect button{background-color:#3d54ff;border-color:#3d54ff}body.tribe-welcome #fs_connect .button-secondary{background:#fff;border-color:#3d54ff;color:#3d54ff}body.tribe-welcome #fs_connect a{color:#3d54ff}body.tribe-welcome #fs_connect a:focus{box-shadow:none;outline:none}body.tribe-welcome #fs_connect a:hover{color:#161b7d}.black-friday-promo{align-items:flex-start;display:flex;flex-direction:column-reverse;justify-content:space-between}.black-friday-promo .black-friday-promo__button{background:#3d54ff;border-color:transparent;border-radius:20px;color:#fff;font-size:12px;height:34px;line-height:32px;min-height:unset;width:115px}.black-friday-promo .black-friday-promo__button:active,.black-friday-promo .black-friday-promo__button:focus,.black-friday-promo .black-friday-promo__button:hover{background:#1c39bb;border-color:transparent;color:#fff}.black-friday-promo__promo{background-position:50%;background-repeat:no-repeat;border-radius:10px;display:grid;grid-template-areas:"a b";grid-template-columns:auto 150px;height:150px;margin:10px 0;max-width:100%;width:450px}.black-friday-promo__content{grid-area:b;padding-top:8px;text-align:center}.black-friday-promo__text{color:#0f1031;font-family:monospace;font-size:16px;line-height:1;text-transform:uppercase}.black-friday-promo__branding-image{max-width:390px;width:100%}.end-of-year-sale-promo{align-items:flex-start;display:flex;flex-direction:column-reverse;justify-content:space-between}.end-of-year-sale-promo .end-of-year-sale-promo__button{background:#3d54ff;border-color:transparent;border-radius:20px;color:#fff;font-size:12px;height:34px;line-height:32px;min-height:unset;width:115px}.end-of-year-sale-promo .end-of-year-sale-promo__button:active,.end-of-year-sale-promo .end-of-year-sale-promo__button:focus,.end-of-year-sale-promo .end-of-year-sale-promo__button:hover{background:#1c39bb;border-color:transparent;color:#fff}.end-of-year-sale-promo__promo{background-color:#fff;background-position:0 0;background-repeat:no-repeat;border-radius:10px;display:grid;flex-shrink:0;grid-template-areas:"a b";grid-template-columns:auto 160px;height:150px;margin:10px 0;max-width:100%;width:460px}.end-of-year-sale-promo__content{grid-area:b;padding-top:8px;text-align:center}.end-of-year-sale-promo__text{color:#0f1031;font-family:monospace;font-size:13px;line-height:1.2;margin-bottom:8px;text-transform:uppercase}.end-of-year-sale-promo__branding-image{max-width:390px;width:100%}.tribe-common .tec-admin__upsell{display:inline-block;font-family:var(--tec-font-family-sans-serif);font-size:var(--tec-font-size-1);font-weight:var(--tec-font-weight-regular);line-height:var(--tec-line-height-1)}.tribe-common .tec-admin__upsell-content{align-items:center;display:flex;padding:var(--tec-spacer-1);padding-right:var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-icon,.tribe-common .tec-admin__upsell-icon-image{height:24px;width:24px}.tribe-common .tec-admin__upsell-text-wrap{margin-left:var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-link{color:var(--tec-color-accent-primary);font-weight:var(--tec-font-weight-bold);text-decoration:none}.tribe-common .tec-admin__upsell--rounded-corners .tec-admin__upsell-content{background:var(--tec-color-accent-primary-background);border-radius:24px}.tribe-common .tec-admin__upsell--rounded-corners-text .tec-admin__upsell-text-wrap{background:rgba(51,74,255,.1);border-radius:14px;padding:var(--tec-spacer-1) var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-link--dark{color:var(--tec-color-text-primary)}.tribe-common .tec-admin__upsell-link--underlined{text-decoration:underline}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:320px){.tribe-marketing-notice .tribe-marketing-notice__icon{display:block}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:145px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:130px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:642px}}@media screen and (min-width:400px){.notice-tribe-banner .tribe-marketing-notice__icon{width:67px}}@media screen and (min-width:800px){.notice-tribe-banner h3{display:inline-block;font-size:1rem;margin:0 .5rem 0 0}.notice-tribe-banner a{line-height:1.5}.notice-tribe-banner a,.notice-tribe-banner p{font-size:1rem}.notice-tribe-banner p{margin:0 .5rem 0 0}.notice-tribe-banner .tribe-marketing-notice__cta{display:inline-block;margin-left:.5rem}}@media screen and (min-width:1215px){.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:992px}.tribe-welcome .notice-tribe-banner .tribe-marketing-notice{max-width:1036px}}@media screen and (min-width:710px){.tribe-events-admin-content-wrapper{width:670px}.tribe-events-admin-card--2up{display:inline-block;width:calc(50% - 20px)}.tribe-events-admin-card--2up.tribe-events-admin-card--first{margin-right:36px}.tribe-events-admin-card--2up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--2up .tribe-events-admin-card__image{height:100px;margin-bottom:12px}.tribe-events-admin-card--2up .tribe-events-admin-card__title{margin-bottom:27px;max-width:340px}.tribe-events-admin-card--3up{display:inline-block;margin-bottom:32px;width:calc(50% - 18px)}.tribe-events-admin-card--3up.tribe-events-admin-card--first{margin-right:32px}.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:0}.tribe-events-admin-card__title{font-size:20px;line-height:23px}.tribe-events-admin-card--1up{display:inline-block;margin-left:32px;width:calc(50% - 18px)}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--1up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card--no-pad{height:154px;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{margin-left:50%;padding:42px 0 10px}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin-left:50%}.tribe-events-admin-card--promo-blue{display:block;margin-left:0;min-height:170px;width:100%}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{float:left;max-width:300px}.tribe-events-admin-graphic{max-width:250px;top:0}.tribe-events-admin-graphic--desktop-only{display:block}.tribe-events-admin-graphic--mobile-only{display:none}.tribe-events-admin-card__form{float:right;width:300px}input[type=email].tribe-events-admin-card__input{width:300px}.tribe-events-admin-title{padding-top:50px}.tribe-events-admin-title__description{padding-top:15px}.tribe-events-admin-title__heading{font-size:48px;line-height:55px;margin:0}.tribe-events-admin-title__logo{margin-right:14px;padding-top:5px;width:40px}.tribe-events-admin-tickets .tribe-events-admin-card__title{font-size:18px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{font-size:18px;height:66px}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:8px;padding-top:4px;width:60px}}@media screen and (min-width:1217px){.tribe-events-admin-content-wrapper{max-width:1060px;width:100%}.tribe-events-admin-card--2up{margin-right:36px;width:486px}.tribe-events-admin-card--3up{width:310px}.tribe-events-admin-card--3up.tribe-events-admin-card--first,.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:36px}.tribe-events-admin-card--3up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--1up{margin:0 0 36px;padding:33px 44px 30px;text-align:left;width:1012px}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:auto}.tribe-events-admin-card--1up .tribe-events-admin-card__image{float:left;margin:0 48px 10px 0}.tribe-events-admin-card--no-pad{padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__image{margin:0;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{margin-left:50%;padding:42px 0 10px}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin-left:50%}.tribe-events-admin-card--promo-blue{min-height:150px}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{max-width:450px}.tribe-events-admin-graphic{max-width:none}.tribe-events-admin-card__form,input[type=email].tribe-events-admin-card__input{width:365px}.tribe-events-admin-quick-nav{border-radius:100px;display:inline-block;height:54px;margin:24px 0 94px;max-width:1010px;padding:0 36px 0 0}.tribe-events-admin-quick-nav__link-item{display:inline-block;padding:18px 10px 0}.tribe-events-admin-quick-nav__title{padding:19px 6px 17px 32px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{height:auto}}@media screen and (max-width:768px){.tribe-events-admin-header__logo-word-mark{width:285px}.tribe-events-admin-header__right-image{height:160px}.tribe-events-admin-header__description{max-width:100%}.tribe-events-admin-tab-nav li{margin-right:20px}.tribe-events-admin-tab-nav .selected{border-bottom:2px solid currentColor;padding-bottom:10px}.tribe-events-admin-2col-grid{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr))}.tribe-events-admin-3col-grid{grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr))}.tribe-events-admin-extensions-title{max-width:100%}.tribe-events-admin-cta{align-items:flex-start;flex-direction:column;overflow:hidden}.tribe-events-admin-footer-logo{width:225px}.tribe-events-admin__system-information{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr));margin:50px 0}}@media screen and (max-width:480px){.tribe-events-admin-header__logo-word-mark{width:260px}.tribe-events-admin-header__right-image{height:120px}.tribe-events-admin-header__title{font-size:35px}.tribe-events-admin-header__description{max-width:100%}.tribe-events-admin-tab-nav{border:1px solid #e1e1e4;border-radius:20px;flex-direction:column;padding:18px 22px}.tribe-events-admin-tab-nav li{margin-bottom:18px;margin-right:0}.tribe-events-admin-tab-nav .selected{border-bottom:2px solid currentColor;padding-bottom:10px;width:fit-content}.tribe-events-admin__line{border:none}.tribe-events-admin-products-card,.tribe-events-admin-products-description{display:none}.tribe-events-admin-container,.tribe-events-admin-content-wrapper.tribe-events-admin-container{max-width:90%}.tribe-events-admin-2col-grid,.tribe-events-admin-3col-grid,.tribe-events-admin-4col-grid{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr))}.tribe-events-admin-extensions-title{max-width:100%}.tribe-events-admin-cta__image{height:auto;width:90%}.tribe-events-admin-cta__content,.tribe-events-admin__troubleshooting-cta{align-items:flex-start;padding:32px 23px 45px;width:auto}.tribe-events-admin-cta__content-title{font-size:22px;text-align:left}.tribe-events-admin-cta__content-subtitle{text-align:left}.tribe-events-admin-footer-logo{width:210px}.tribe-events-admin__system-information{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr));margin:50px 0}.tribe-events-admin__troubleshooting-notice{margin-left:-20px}.tribe-events-admin__troubleshooting-notice_title{max-width:90%}}@media screen and (min-width:1200px){.tribe-events-admin-products-card__group{max-width:47%}}@media screen and (min-width:500px) and (max-width:1080px){.tribe-events-admin-4col-grid{grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr))}}@media screen and (min-width:768px){.tribe-events-admin-section-header{font-size:28px;line-height:1.143;margin:50px 0 21px}}@media screen and (max-width:1080px){.tribe-events-admin-cta__content-title{font-size:24px}}@media only screen and (max-width:1920px){.tribe-events-admin__system-information-widget-copy{right:20.5vw}}@media only screen and (max-width:1280px){.tribe-events-admin__system-information-widget-copy{right:22vw}}@media only screen and (max-width:768px){.tribe-events-admin__system-information-widget-copy{left:10px;right:auto}.tribe-events-admin__recent-log-filters{flex-direction:column}.tribe-events-admin__recent-log-filters-field{margin-bottom:30px;margin-right:0}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:first-child,.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(2),.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(3){padding-right:30px}.tribe-events-admin__issues-found-card-title h3{max-width:90%}}@media only screen and (max-width:480px){.tribe-events-admin__system-information-widget-copy{left:10px;right:auto}.tribe-events-admin__recent-log-filters{flex-direction:column}.tribe-events-admin__recent-log-filters-field{margin-bottom:30px;margin-right:0}.tribe-events-admin__recent-log-filters-select-wrapper:after{right:25px}.tribe-events-admin__issues-found-card-title h3{max-width:80%}.tribe-events-admin__ea-status-table{overflow:scroll}.tribe-events-admin__ea-status-table td{min-width:150px}.tribe-events-admin__ea-status-table td:nth-child(2),.tribe-events-admin__ea-status-table td:nth-child(3){width:100%}}@media (min-width:1024px){.black-friday-promo{align-items:center;flex-direction:row}.black-friday-promo__branding{padding-right:10px;width:calc(100% - 450px)}.end-of-year-sale-promo{align-items:center;flex-direction:row}.end-of-year-sale-promo__branding{padding-right:10px;width:calc(100% - 460px)}}@media (max-width:525px){.end-of-year-sale-promo__promo{grid-template-areas:"a" "b";grid-template-columns:auto;margin:20px auto;padding-top:100px;width:300px}}
|
| 1 |
+
.invalid input,input:out-of-range{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input::placeholder,textarea::placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia,serif!important;font-size:17px!important;font-weight:400;margin:8px 0}.tribe-rating{color:#3d54ff}.tribe-rating:hover{color:#1c39bb}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label>p,.tribe-settings-form .tribe-field-radio label>p{margin-left:1px;text-indent:0}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.tribe-settings-form .tribe-settings-form-wrap #tribe-field-stylesheetOption .description{color:#999;margin-left:1px}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}#modern-tribe-info{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{margin:10px 0}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:alpha(opacity=50);opacity:.5}.ui-widget-shadow{background:#000;border-radius:5px;filter:alpha(opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none!important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}#ui-datepicker-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page{max-width:850px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p{font-size:15px}p.tribe-update-message{font-size:18px;font-weight:400}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}a.tribe-rating-link{text-decoration:none}.tribe-update-links{margin-top:30px}.tribe_update_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-events-widget-admin-form__input-section p{margin:0}.tribe-events-widget-admin-form__input-section h4{margin:.5em 0}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#7ad03a;height:1rem;width:1%}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;height:300px;overflow-y:scroll}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{min-height:100px;padding:1em}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;height:100%;max-height:150px;max-width:150px;vertical-align:middle;width:auto}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-marketing-notice__icon{display:none;flex-shrink:0;padding:0;position:static}.tribe-marketing-notice .tribe-marketing-notice__icon img{display:inline-block;max-height:100%;max-width:none;vertical-align:middle;width:100%}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}.notice-tribe-banner .tribe-marketing-notice__icon{width:47px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:0;padding:1em 0}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice{min-height:50px}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__content{align-content:center;display:flex;flex-wrap:wrap;justify-content:center;margin:auto}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__icon{align-self:baseline;height:20px;margin:auto 14px auto 0;width:13px}.notice-tribe-banner.tribe-notice-stellar-sale .tribe-marketing-notice__icon .tribe-common-c-svgicon--stellar-icon circle{stroke:#fff}.notice-tribe-banner.tribe-notice-stellar-sale .tec-stellar-sale-text{fill:#fff;height:16px;margin:unset;margin-top:.25em;stroke:#fff;width:176px}.notice-tribe-banner.tribe-notice-stellar-sale h3{font-weight:400;margin:auto 8px auto 14px;text-align:center}.notice-tribe-banner h3{color:#fff;display:block;font-size:.875rem;line-height:1.25;margin:0 0 .25rem}.notice-tribe-banner a{border-bottom:1px solid;line-height:1.25;margin:0;text-decoration:none}.notice-tribe-banner a:hover{text-decoration:none}.notice-tribe-banner a,.notice-tribe-banner p{color:#fff;display:inline-block;font-size:.875rem;line-height:1.25}.notice-tribe-banner p{display:inline-block;margin:0;padding:0}.notice-tribe-banner .tribe-marketing-notice{align-items:center;display:flex;justify-content:flex-start;margin:0 auto;min-height:65px;padding:0 .75rem;width:100%}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:100%}.notice-tribe-banner .notice-dismiss{position:static}.notice-tribe-banner .notice-dismiss:before{color:#eaf1ff}#wpcontent .notice-tribe-banner{align-items:center;background-color:#161b7d;border:0;box-shadow:none;display:flex;justify-content:flex-start;margin:0 0 16px;padding-right:0}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale{background-color:#000}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a{color:#d8ff00;text-transform:uppercase}#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:active,#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:focus,#wpcontent .notice-tribe-banner.tribe-notice-stellar-sale a:hover{color:#e6b1fc}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container .selection,.tribe-ea-dropdown.select2-container .selection{margin-top:inherit}.tribe-dropdown .select2-selection--single,.tribe-ea-dropdown .select2-selection--single{height:32px}.tribe-dropdown .select2-selection--single .select2-selection__clear,.tribe-ea-dropdown .select2-selection--single .select2-selection__clear{line-height:28px}.tribe-dropdown .select2-selection--single .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--single .select2-selection__rendered{line-height:32px;padding-right:28px}.tribe-dropdown.select2-container--focus .select2-selection--single,.tribe-ea-dropdown.select2-container--focus .select2-selection--single{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-container--open .select2-search__field,.tribe-ea-dropdown.select2-container--open .select2-search__field{padding:0}.tribe-dropdown.select2-container--open .select2-dropdown--below,.tribe-ea-dropdown.select2-container--open .select2-dropdown--below{border-top:1px solid #aaa;margin-top:-1px}.tribe-dropdown.select2-container--open .select2-dropdown--above,.tribe-ea-dropdown.select2-container--open .select2-dropdown--above{border-bottom:1px solid #aaa;margin-bottom:-16px}.tribe-dropdown.select2-container--open .select2-selection--single,.tribe-ea-dropdown.select2-container--open .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown.select2-container--open .select2-selection__arrow b,.tribe-ea-dropdown.select2-container--open .select2-selection__arrow b{transform:rotate(180deg)}.tribe-dropdown.select2-selection--single,.tribe-ea-dropdown.select2-selection--single{background-image:none;border:1px solid #ccc;border-radius:3px;overflow:hidden}.tribe-dropdown.select2-selection--single>.select2-selection__rendered,.tribe-ea-dropdown.select2-selection--single>.select2-selection__rendered{white-space:normal}.tribe-dropdown.select2-selection--single .select2-selection__arrow,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow{background:transparent;background-image:none;border-left:0;top:2px;width:26px}.tribe-dropdown.select2-selection--single .select2-selection__arrow b,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow b{background:#fff url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E") no-repeat right 5px top 55%;background-size:auto;background-size:16px 16px;border:0;bottom:0;display:block;height:auto;left:0;margin:0;padding:0;right:0;top:0;width:auto}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered{background-image:none;border:1px solid #ccc;border-radius:3px;min-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline{line-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input{padding-bottom:0;padding-top:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice{line-height:19px;margin-top:2px;padding-bottom:0;padding-top:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div{line-height:inherit}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove{left:4px;top:3px;transition-property:border,color}.select2-results .select2-results__option{color:#939393;font-weight:400;margin-bottom:0}.select2-results .select2-results__option[aria-disabled=true]{background-color:#e0e0e0}.select2-results.select2-results__option--highlighted{background-color:#efefef;color:#a1a1a1;cursor:default;display:block}.wp-core-ui .button-red{background-color:#a00;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;color:#e79496!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.ticket_form .select2-container .select2-selection--single .select2-selection__arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{border:solid #0ab152;border-width:0 3px 3px 0;content:"";display:block;height:15px;transform:rotate(45deg);width:8px}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}body.tec-help,body.tribe-welcome{background-color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.tec-help .update-nag,body.tribe-welcome .update-nag{display:none}body.tec-help #wpcontent,body.tribe-welcome #wpcontent{padding:0}body.tec-help .tribe_settings,body.tribe-welcome .tribe_settings{margin:0}body.tec-help #wpfooter,body.tec-help .tribe_settings>h1,body.tribe-welcome #wpfooter,body.tribe-welcome .tribe_settings>h1{display:none}body.tec-help #wpbody-content,body.tribe-welcome #wpbody-content{padding-bottom:25px}body.tec-help .tribe-dependency-error,body.tribe-welcome .tribe-dependency-error{display:none}.tribe-events-admin-content-wrapper{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;margin:0 auto;padding:0 0 30px;width:calc(100% - 40px)}.tribe-events-admin-card{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;display:block;margin:0 auto 36px;padding:27px;text-align:center}.tribe-events-admin-card--2up .tribe-events-admin-card__title{max-width:260px}.tribe-events-admin-card--3up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--3up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card__button{background-color:#fff;border:none;color:#3d54ff;font-size:14px;font-weight:700;letter-spacing:1px;line-height:16px;position:absolute;right:20px;text-transform:uppercase;top:17px}.tribe-events-admin-card__button:hover{color:#161b7d}.tribe-events-admin-card__description{color:#000;font-size:14px;font-style:normal;font-weight:400;line-height:22px;margin-top:16px}.tribe-events-admin-card__image{display:block;height:100px;margin:0 auto}.tribe-events-admin-card__link{color:#3d54ff;display:inline-block;font-size:16px;font-style:normal;font-weight:700;line-height:18px;margin-top:24px;position:relative;text-decoration:none}.tribe-events-admin-card__link:hover{color:#161b7d}.tribe-events-admin-card__link:after{border-style:solid;border-width:0 0 1px;bottom:-4px;content:"";left:0;position:absolute;width:100%}.tribe-events-admin-card__title{color:#0f1031;font-size:20px;font-weight:700;line-height:23px;margin:auto}.tribe-events-admin-card-grid{max-width:1048px}input[type=checkbox].tribe-common-switch__input{display:none}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label{background:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;cursor:pointer;display:block;height:18px;outline:0;padding:3px;position:relative;transition:all .2s ease;-webkit-user-select:none;user-select:none;width:27px}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:after,input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:before{content:"";display:block;height:10px;position:relative;width:10px}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:after{background:#878787;border-radius:2px;content:"";left:0;transition:all .2s ease}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label:before{display:none}input[type=checkbox].tribe-common-switch__input+.tribe-common-switch__label::selection{background:none}input[type=checkbox].tribe-common-switch__input:checked+.tribe-common-switch__label:after{background:#2e709d;left:50%}.tribe-events-admin-header__logo-word-mark{display:inline-block;height:auto;margin:0 0 26px;vertical-align:middle;width:312px}.tribe-events-admin-header{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:45px 0 0}.tribe-events-admin-header__right-image{height:280px;position:absolute;right:0;top:0;width:auto;z-index:-1}.tribe-events-admin-header__title{font-size:48px;line-height:48px;margin:0 0 18px}.tribe-events-admin-header__description{font-size:18px;line-height:28px;margin-bottom:44px;max-width:60%}.tribe-events-admin-tab-nav{display:flex;margin:0}.tribe-events-admin-tab-nav li{cursor:pointer;font-size:16px;font-weight:500;margin-bottom:0;margin-right:30px}.tribe-events-admin-tab-nav li:hover{color:#334aff}.tribe-events-admin-tab-nav .selected{border-bottom:3px solid currentColor;color:#334aff;padding-bottom:17px}.tribe-events-admin-tab-nav li:after{background:#334aff;border-radius:100px;bottom:0;content:"";display:block;height:3px;left:0;position:absolute;right:0}.tribe-events-admin__line{border-top:1px solid #e1e1e4}.tribe-events-admin-products-description{color:#0f1031;font-size:14px;line-height:2}.tribe-events-admin-products-card{align-items:center;border:1px solid #e1e1e4;border-radius:20px;display:flex;padding:10px 15px}.tribe-events-admin-products-card__icon{height:40px;object-fit:contain;width:40px}.tribe-events-admin-products-card__group{margin:0 20px;max-width:55%}.tribe-events-admin-products-card__group-title{color:#0f1031;font-size:16px;font-weight:700;line-height:1;margin:0}.tribe-events-admin-products-card__group-description{font-size:12px;margin-top:5px}.tribe-events-admin-products-card__button{background-color:#fff;border:1px solid #e1e1e4;border-radius:20px;color:#0f1031;font-size:12px;font-weight:700;letter-spacing:1px;line-height:16px;margin-left:auto;padding:10px 15px;text-decoration:none;text-transform:uppercase}.tribe-events-admin-products-card__button:hover{background-color:#334aff;color:#fff}.tribe-events-admin-products-card__button:active,.tribe-events-admin-products-card__button:focus{box-shadow:none;outline:none}.tribe-events-admin-products-card__button--active,.tribe-events-admin-products-card__button--active:active,.tribe-events-admin-products-card__button--active:focus,.tribe-events-admin-products-card__button--active:hover{background:rgba(61,84,255,.16);color:#334aff;cursor:not-allowed;text-transform:uppercase}.tribe-events-admin-card--1up{width:100%}.tribe-events-admin-card--no-pad{padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__image{display:block;height:152px;margin:0;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{font-size:28px;line-height:34px;text-align:left}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin:0;padding:0;text-align:left}.tribe-events-admin-card--no-pad .tribe-events-admin-card__link{margin:0;padding:0}.tribe-events-admin-card--faq{display:inline-block;font-size:0;height:147px;margin:0 0 0 30px;padding:24px 16px 22px 20px;width:230px}.tribe-events-admin-card--faq:first-child{margin-left:0}.tribe-events-admin-card--faq img{float:left;height:22px;width:16px}.tribe-events-admin-card--faq .tribe-events-admin-faq__question{color:#334aff;font-size:16px;line-height:19px;margin:0 0 12px 26px;text-align:left}.tribe-events-admin-card--faq .tribe-events-admin-faq__answer{font-size:13px;line-height:16px;margin-left:26px;text-align:left}.tribe-events-admin-video{border-radius:16px;height:200px;margin-bottom:72px;-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 0);overflow:hidden;-webkit-transform:rotate(.000001deg)}.tribe-events-admin-video iframe{width:100%}.tribe-events-admin-card--promo-blue{background-color:#3d54ff;background-image:url(../images/welcome/promo.jpg)}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{color:#fff;font-size:16px;margin-bottom:16px;text-align:left}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__title{color:#fff;text-align:left}.tribe-events-admin-graphic{position:absolute;right:0;top:106px;z-index:-1}.tribe-events-admin-graphic--desktop-only{display:none}.tribe-events-admin-graphic--mobile-only{display:block}.tribe-events-admin-card__form{position:relative}input[type=email].tribe-events-admin-card__input{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;font-size:14px;height:54px}input[type=email].tribe-events-admin-card__input::placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}.tribe-events-admin-container,.tribe-events-admin-content-wrapper.tribe-events-admin-container{margin:0 auto;max-width:1024px;width:90%}.tribe-events-admin-2col-grid{display:grid;grid-gap:15px 30px;gap:15px 30px;grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-3col-grid{display:grid;grid-gap:30px;gap:30px;grid-template-areas:". . .";grid-template-columns:repeat(3,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-4col-grid{display:grid;grid-gap:30px;gap:30px;grid-template-areas:". . . .";grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:1fr}.tribe-events-admin-products{margin:10px 0 0}.tribe-events-admin-quick-nav{background:#fff;border:1px solid #e1e1e4;border-radius:16px;box-sizing:border-box;display:block;margin:40px 0 78px;padding:18px 23px 2px}.tribe-events-admin-quick-nav__link{color:#3d54ff;font-size:16px;font-weight:700;line-height:18px;text-align:center;text-decoration:none}.tribe-events-admin-quick-nav__link:hover{color:#161b7d}.tribe-events-admin-quick-nav__link-item{display:block;padding-bottom:19px}.tribe-events-admin-quick-nav__links{display:inline}.tribe-events-admin-quick-nav__title{color:rgba(15,16,49,.72);display:inline-block;font-size:14px;font-weight:400;line-height:16px;padding-bottom:14px;text-transform:uppercase}.tribe-events-admin-title{padding-top:14px}.tribe-events-admin-title__description{color:#0f1031;font-size:16px;font-weight:400;line-height:24px;max-width:584px;padding-top:15px}.tribe-events-admin-title__heading{color:#0f1031;display:inline-block;font-size:24px;font-weight:700;line-height:28px;margin:5px 0 0}.tribe-events-admin-title__logo{margin-right:8px;vertical-align:top;width:34px}.tribe-events-admin-notice{background-color:#3d54ff;height:65px}.tribe-events-admin-notice .tribe-events-admin-content-wrapper{padding-bottom:0;padding-top:8px}.tribe-events-admin-notice p{color:#fff;display:inline-block;font-family:Helvetica,sans-serif;font-size:16px;line-height:18px;margin-top:0;padding-bottom:12px;padding-left:16px;vertical-align:middle;width:calc(100% - 60px)}.tribe-events-admin-notice__logo{display:inline-block}.tribe-events-admin-tickets .tribe-events-admin-section-header{font-size:28px;line-height:32px}.tribe-events-admin-tickets .tribe-events-admin-graphic--desktop-only{width:365px}.tribe-events-admin-tickets .tribe-events-admin-graphic--mobile-only{top:230px;width:300px}.tribe-events-admin-tickets .tribe-events-admin-title__heading{margin-top:0}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:4px;width:32px}.tribe-events-admin-kb{margin:10px 0 0}.tribe-events-admin-kb-card{border:1px solid #e1e1e4;border-radius:20px}.tribe-events-admin-kb-card__image{height:auto;width:100%}.tribe-events-admin-kb-card__title{color:#0f1031;flex-grow:0;font-size:20px;font-weight:700;line-height:1.2;margin:0;padding:20px 28px 10px}.tribe-events-admin-kb-card__links{margin:0;padding:0 28px 25px}.tribe-events-admin-kb-card__links li{margin:0 0 10px}.tribe-events-admin-kb-card__links li a{color:#334aff;font-size:14px;line-height:1.2;text-decoration:none}.tribe-events-admin-kb-card__links li a:focus{box-shadow:none;outline:none}.tribe-events-admin-kb-card__links li a:hover{color:#1c39bb}.tribe-events-admin-section-header{align-items:center;color:#000;display:flex;font-weight:700;justify-content:space-between;margin:0}.tribe-events-admin-section-header h3{color:#0f1031;font-size:28px;font-weight:700;line-height:1}.tribe-events-admin-section-header a{border-bottom:2px solid;color:#334aff;font-size:14px;padding-bottom:2px;text-decoration:none}.tribe-events-admin-section-header a:focus{box-shadow:none;outline:none}.tribe-events-admin-section-header a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-faq{margin:10px 0 0}.tribe-events-admin-faq-card{border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;padding:24px 15px 19px 19px}.tribe-events-admin-faq-card a{color:#0f1031}.tribe-events-admin-faq-card a:focus{box-shadow:none;outline:none}.tribe-events-admin-faq-card a:hover{color:#1c39bb}.tribe-events-admin-faq-card__icon img{height:22px;width:16px}.tribe-events-admin-faq-card__content{margin-left:10px}.tribe-events-admin-faq__question,.tribe-events-admin-faq__question a{color:#334aff;font-size:16px;text-decoration:none}.tribe-events-admin-faq__question a:focus{box-shadow:none;outline:none}.tribe-events-admin-faq__question a:hover{color:#1c39bb}.tribe-events-admin-faq__answer{color:#0f1031;font-size:13px;margin-top:18px}.tribe-events-admin-extensions-title{color:#0f1031;font-size:16px;line-height:1.5;margin:0 0 30px;max-width:70%}.tribe-events-admin-extensions{margin:10px 0 0}.tribe-events-admin-extensions-card{border:1px solid #e1e1e4;border-radius:20px;border-top:8px solid #334aff;padding:48px 35px 24px 25px}.tribe-events-admin-extensions-card__title{font-size:20px;margin:0}.tribe-events-admin-extensions-card__title a{color:#0f1031;font-family:Helvetica,sans-serif;font-size:20px;font-weight:700;line-height:1.2;text-decoration:none}.tribe-events-admin-extensions-card__title a:active,.tribe-events-admin-extensions-card__title a:focus,.tribe-events-admin-extensions-card__title a:hover{box-shadow:none;color:#334aff}.tribe-events-admin-extensions-card__description{color:#0f1031;font-family:Helvetica,sans-serif;font-size:14px;line-height:1.43;margin:20px 0}.tribe-events-admin-cta{align-items:center;border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;margin:60px 0}.tribe-events-admin-cta__image{height:152px;object-fit:contain;width:auto}.tribe-events-admin-cta__content,.tribe-events-admin__troubleshooting-cta{align-items:center;display:flex;flex-direction:column;justify-content:center;padding:20px 0;width:100%}.tribe-events-admin-cta__content-title{color:#0f1031;font-size:28px;font-weight:700;line-height:normal;margin:0 0 10px;text-align:center}.tribe-events-admin-cta__content-subtitle{color:#0f1031;font-size:16px;line-height:1.5;margin-bottom:10px;text-align:center}.tribe-events-admin-cta__content-description a{border-bottom:2px solid;color:#334aff;font-size:16px;font-weight:700;padding-bottom:2px;text-decoration:none}.tribe-events-admin-cta__content-description a:focus{box-shadow:none;outline:none}.tribe-events-admin-cta__content-description a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-footer-logo{display:inline-block;vertical-align:middle;width:228px}.tribe-events-admin-step{margin:10px 0 0}.tribe-events-admin-step-card{border:1px solid #e1e1e4;border-radius:20px;display:flex;justify-content:space-between;padding:24px 15px 19px 19px}.tribe-events-admin-step-card a{border-bottom:2px solid;color:#334aff;padding-bottom:2px;text-decoration:none}.tribe-events-admin-step-card a:focus{box-shadow:none;outline:none}.tribe-events-admin-step-card a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin-step-card__icon img{height:43px;margin-right:5px;width:42px}.tribe-events-admin-step-card__content{margin-left:10px}.tribe-events-admin-step__title{color:#0f1031;font-size:20px;font-weight:700;line-height:1.2;margin-bottom:10px}.tribe-events-admin-step__answer{color:#0f1031;font-size:13px;margin-top:18px}.tribe-events-admin__system-information{display:grid;grid-gap:15px 30px;gap:15px 30px;grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:1fr;margin:100px 0;position:relative}.tribe-events-admin__troubleshooting-title{color:#0f1031;font-size:28px;font-weight:700;line-height:1;margin:0}.tribe-events-admin__troubleshooting-description{color:#0f1031;font-size:18px;line-height:1.2;line-height:1.44;margin:20px 0}.tribe-events-admin__system-information-select{display:flex;margin:30px 0 20px}.tribe-events-admin__system-information-select input[type=checkbox]{margin:0 10px 0 0}.tribe-events-admin__system-information-select label{color:#0f1031;font-size:16px;line-height:1.2}.tribe-events-admin__system-information-content small{color:#0f1031;font-size:12px;line-height:1.2}.tribe-events-admin__recent-template-changes .template-updates-wrapper,.tribe-events-admin__system-information-widget{background:#0f1031;border-radius:16px;color:#fff;font-size:14px;line-height:1.14;max-height:280px;overflow:scroll;-ms-overflow-style:none;padding:12px 0 0 27px;scrollbar-width:none}.tribe-events-admin__recent-template-changes .template-updates-wrapper p{color:#fff;font-size:14px;line-height:1.14;margin:0}.tribe-events-admin__system-information-widget a{color:#334aff}.tribe-events-admin__system-information-widget a:hover{opacity:.8}.tribe-events-admin__recent-template-changes .template-updates-wrapper{padding:30px 0 30px 27px}.tribe-events-admin__recent-template-changes .template-updates-wrapper::-webkit-scrollbar,.tribe-events-admin__system-information-widget::-webkit-scrollbar{display:none}.tribe-events-admin__system-information-widget-copy{bottom:10px;position:absolute}.tribe-events-admin__system-information-widget-copy button{background-color:#334aff;border:none;border-radius:100px;color:#fff;cursor:pointer;font-size:16px;font-weight:700;outline:none;padding:18px 25px;text-align:center}.tribe-events-admin__system-information-widget-copy button:hover{background-color:#1c39bb}.tribe-events-admin__system-information-widget-copy button .dashicons,.tribe-events-admin__system-information-widget-copy button .dashicons-before:before{display:none}.tribe-events-admin__system-information-widget-copy button .optin-success{color:#fff;font-size:16px;font-weight:700;text-align:center}.tribe-events-admin__recent-template-changes p{color:#0f1031;font-size:18px;line-height:1.2;line-height:1.44;margin:20px 0}.tribe-events-admin__recent-log{margin-top:50px}.tribe-events-admin__troubleshooting-event-log-wrapper label{color:#0f1031;display:block;font-size:16px;line-height:1.63;margin-bottom:10px}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-controls{margin:20px 0 10px}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-viewer{background:#0f1031;border-radius:16px;color:#fff;font-size:14px;line-height:1.14;max-height:280px;min-height:60px;overflow:scroll;-ms-overflow-style:none;padding:12px 0 0 27px;scrollbar-width:none}.tribe-events-admin__troubleshooting-event-log-wrapper #tribe-log-viewer::-webkit-scrollbar{display:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log{border-bottom:2px solid;color:#334aff;font-size:16px;padding-bottom:2px;text-decoration:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log:focus{box-shadow:none;outline:none}.tribe-events-admin__troubleshooting-event-log-wrapper .download_log:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__troubleshooting-event-log-wrapper .tribe-events-admin__recent-log-filters-select-wrapper:after{display:none}.tribe-events-admin__recent-log-filters{display:flex;padding:20px 0 40px}.tribe-events-admin__recent-log-filters-field{margin-right:40px}.tribe-events-admin__recent-log-filters-select-wrapper:after{content:url(../images/help/polygon.svg);height:13px;pointer-events:none;position:absolute;right:22px;top:20px;width:14px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default .select2-selection--single{border:1px solid #e1e1e4!important;border-radius:16px;color:#0f1031;font-size:14px;line-height:1.14;padding:0 25px 0 15px!important}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls{margin-bottom:20px;padding:0}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:first-child,.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(2),.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(3){padding-right:75px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-selection__clear{display:none}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default .select2-selection--single .select2-selection__arrow{right:5px}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.tribe-events-admin__recent-log-filters-select-wrapper .select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:16px;border-bottom-right-radius:16px}.tribe-events-admin__recent-log-filters-select-wrapper .select2-container .select2-selection--single .select2-selection__rendered{width:100%}.tribe-events-admin__recent-log-filters-select-wrapper select.focus-visible,.tribe-events-admin__recent-log-filters-select-wrapper select:focus-visible{outline:none}.tribe-events-admin__recent-log-filters-select-wrapper select option{color:#0f1031;font-size:14px;line-height:1.14}.tribe-events-admin__ea-status{margin-top:50px}.tribe-events-admin__issues-found-card{background-color:#f3eee8;border-radius:8px;margin-bottom:20px}.tribe-events-admin__issues-found-card:last-of-type{margin-bottom:100px}.tribe-events-admin__issues-found-card-title{align-items:center;cursor:pointer;display:flex;padding:10px 20px 10px 17px;position:relative}.tribe-events-admin__issues-found-card-title img{height:21px;margin-right:14px;object-fit:contain;width:21px}.tribe-events-admin__issues-found-card-title h3{margin:0}.tribe-events-admin__issues-found-card-title span{color:#0f1031;display:block}.tribe-events-admin__issues-found-card-title i{background-image:url(../images/help/arrow-down.svg);background-position:50%;background-repeat:no-repeat;background-size:contain;height:15px;margin:12px 20px;position:absolute;right:0;top:0;transition:all .3s ease;width:15px}.tribe-events-admin__issues-found-card-title.active i{background-image:url(../images/help/arrow-up.svg);background-repeat:no-repeat;top:5px}.tribe-events-admin__issues-found-card-description{display:none;padding:0 20px 20px 55px}.tribe-events-admin__issues-found-card-description p{color:#0f1031;font-size:16px;margin:0}.tribe-events-admin__issues-found-card-description-actions{display:flex;padding:20px 0 10px}.tribe-events-admin__issues-found-card-description-actions a{border-bottom:2px solid;color:#334aff;font-size:16px;margin-right:20px;padding-bottom:5px;text-decoration:none}.tribe-events-admin__issues-found-card-description-actions a:focus{box-shadow:none;outline:none}.tribe-events-admin__issues-found-card-description-actions a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__ea-status-table-wrapper{overflow-x:auto}.tribe-events-admin__ea-status-table{border:1px solid #e1e1e4;border-radius:16px;margin:30px 0 40px;overflow:hidden}.tribe-events-admin__ea-status-table a{border-bottom:2px solid;color:#334aff;padding-bottom:2px;text-decoration:none}.tribe-events-admin__ea-status-table a:focus{box-shadow:none;outline:none}.tribe-events-admin__ea-status-table a:hover{border-bottom:2px solid;color:#1c39bb}.tribe-events-admin__ea-status-table tr{align-items:center;display:flex}.tribe-events-admin__ea-status-table th{color:#0f1031;font-weight:700;line-height:1.17;margin-top:10px;padding:5px 25px}.tribe-events-admin__ea-status-table td{align-items:center;color:#0f1031;display:flex;font-size:16px;line-height:1.63;padding:10px 25px;width:25%}.tribe-events-admin__ea-status-table td:nth-child(2){width:45%}.tribe-events-admin__ea-status-table td:nth-child(3){display:flex;justify-content:flex-end;width:30%}.tribe-events-admin__ea-status-table-dark{background-color:#f9f7f4}.tribe-events-admin__ea-status-table td img{height:21px;margin-right:14px;object-fit:contain;width:21px}.tec-troubleshooting,.tribe_events_page_tec-troubleshooting{background-color:#fff}#tribe-community,#tribe-ticketing{display:none}.tribe-events-admin__troubleshooting-notice{background-color:#161b7d;color:#fff;font-size:16px;line-height:1;margin-left:-1.55vw;padding:24px 0}.tribe-events-admin__troubleshooting-notice_title{margin:0 auto;max-width:1024px;padding-left:25px;width:90%}.tribe-events-admin__troubleshooting-notice_title a{border-bottom:2px solid;color:#fff;font-size:16px;line-height:1;padding-bottom:2px;text-decoration:none}.tribe-events-admin__troubleshooting-notice_title a:focus{box-shadow:none;outline:none}.tribe-events-admin__troubleshooting-notice_title a:hover{border-bottom:2px solid;color:#f3eee8}.tec-help #tec-help-community,.tec-help #tec-help-ticketing{display:none}.tec-help .tribe-events-admin-title{padding-top:25px}.tec-help .tribe-events-admin-title img{height:67px}body.tribe-welcome #fs_connect{border:1px solid #e1e1e4;border-radius:16px;box-shadow:none;box-sizing:border-box;margin-left:22px}body.tribe-welcome #fs_connect .fs-actions{background-color:transparent}body.tribe-welcome #fs_connect .fs-permissions{border-top:1px solid #e1e1e4;margin:0 16px}body.tribe-welcome #fs_connect button{background-color:#3d54ff;border-color:#3d54ff}body.tribe-welcome #fs_connect .button-secondary{background:#fff;border-color:#3d54ff;color:#3d54ff}body.tribe-welcome #fs_connect a{color:#3d54ff}body.tribe-welcome #fs_connect a:focus{box-shadow:none;outline:none}body.tribe-welcome #fs_connect a:hover{color:#161b7d}.black-friday-promo{align-items:flex-start;display:flex;flex-direction:column-reverse;justify-content:space-between}.black-friday-promo .black-friday-promo__button{background:#3d54ff;border-color:transparent;border-radius:20px;color:#fff;font-size:12px;height:34px;line-height:32px;min-height:unset;width:115px}.black-friday-promo .black-friday-promo__button:active,.black-friday-promo .black-friday-promo__button:focus,.black-friday-promo .black-friday-promo__button:hover{background:#1c39bb;border-color:transparent;color:#fff}.black-friday-promo__promo{background-position:50%;background-repeat:no-repeat;border-radius:10px;display:grid;grid-template-areas:"a b";grid-template-columns:auto 150px;height:150px;margin:10px 0;max-width:100%;width:450px}.black-friday-promo__content{grid-area:b;padding-top:8px;text-align:center}.black-friday-promo__text{color:#0f1031;font-family:monospace;font-size:16px;line-height:1;text-transform:uppercase}.black-friday-promo__branding-image{max-width:390px;width:100%}.end-of-year-sale-promo{align-items:flex-start;display:flex;flex-direction:column-reverse;justify-content:space-between}.end-of-year-sale-promo .end-of-year-sale-promo__button{background:#3d54ff;border-color:transparent;border-radius:20px;color:#fff;font-size:12px;height:34px;line-height:32px;min-height:unset;width:115px}.end-of-year-sale-promo .end-of-year-sale-promo__button:active,.end-of-year-sale-promo .end-of-year-sale-promo__button:focus,.end-of-year-sale-promo .end-of-year-sale-promo__button:hover{background:#1c39bb;border-color:transparent;color:#fff}.end-of-year-sale-promo__promo{background-color:#fff;background-position:0 0;background-repeat:no-repeat;border-radius:10px;display:grid;flex-shrink:0;grid-template-areas:"a b";grid-template-columns:auto 160px;height:150px;margin:10px 0;max-width:100%;width:460px}.end-of-year-sale-promo__content{grid-area:b;padding-top:8px;text-align:center}.end-of-year-sale-promo__text{color:#0f1031;font-family:monospace;font-size:13px;line-height:1.2;margin-bottom:8px;text-transform:uppercase}.end-of-year-sale-promo__branding-image{max-width:390px;width:100%}.tribe-common .tec-admin__upsell{display:inline-block;font-family:var(--tec-font-family-sans-serif);font-size:var(--tec-font-size-1);font-weight:var(--tec-font-weight-regular);line-height:var(--tec-line-height-1)}.tribe-common .tec-admin__upsell-content{align-items:center;display:flex;padding:var(--tec-spacer-1);padding-right:var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-icon,.tribe-common .tec-admin__upsell-icon-image{height:24px;width:24px}.tribe-common .tec-admin__upsell-text-wrap{margin-left:var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-link{color:var(--tec-color-accent-primary);font-weight:var(--tec-font-weight-bold);text-decoration:none}.tribe-common .tec-admin__upsell--rounded-corners .tec-admin__upsell-content{background:var(--tec-color-accent-primary-background);border-radius:24px}.tribe-common .tec-admin__upsell--rounded-corners-text .tec-admin__upsell-text-wrap{background:rgba(51,74,255,.1);border-radius:14px;padding:var(--tec-spacer-1) var(--tec-spacer-2)}.tribe-common .tec-admin__upsell-link--dark{color:var(--tec-color-text-primary)}.tribe-common .tec-admin__upsell-link--underlined{text-decoration:underline}.tribe-field .tec-admin__settings-image-field-btn-remove{border:none;color:#3c434a;cursor:pointer;padding:0;text-decoration:underline}.tribe-field .tec-admin__settings-image-field-image-container{height:120px;position:relative}.tribe-field .tec-admin__settings-image-field-image-container img{height:auto;max-height:100%;width:auto}.tribe-field.tribe-field-color .wp-color-result.button{align-items:stretch;border-radius:var(--tec-border-radius-default);display:flex;margin:0 6px 6px 0;min-height:30px;padding:0 0 0 var(--tec-spacer-7)}.tribe-field.tribe-field-color .wp-color-result-text{background:var(--tec-color-background);border-left:1px solid var(--tec-color-border-default);font-size:var(--tec-font-size-0);line-height:30px;padding:0 var(--tec-spacer-2)}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:320px){.tribe-marketing-notice .tribe-marketing-notice__icon{display:block}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:145px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:130px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:642px}}@media screen and (min-width:400px){.notice-tribe-banner .tribe-marketing-notice__icon{width:67px}}@media screen and (min-width:800px){.notice-tribe-banner h3{display:inline-block;font-size:1rem;margin:0 .5rem 0 0}.notice-tribe-banner a{line-height:1.5}.notice-tribe-banner a,.notice-tribe-banner p{font-size:1rem}.notice-tribe-banner p{margin:0 .5rem 0 0}.notice-tribe-banner .tribe-marketing-notice__cta{display:inline-block;margin-left:.5rem}}@media screen and (min-width:1215px){.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:992px}.tribe-welcome .notice-tribe-banner .tribe-marketing-notice{max-width:1036px}}@media screen and (min-width:710px){.tribe-events-admin-content-wrapper{width:670px}.tribe-events-admin-card--2up{display:inline-block;width:calc(50% - 20px)}.tribe-events-admin-card--2up.tribe-events-admin-card--first{margin-right:36px}.tribe-events-admin-card--2up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--2up .tribe-events-admin-card__image{height:100px;margin-bottom:12px}.tribe-events-admin-card--2up .tribe-events-admin-card__title{margin-bottom:27px;max-width:340px}.tribe-events-admin-card--3up{display:inline-block;margin-bottom:32px;width:calc(50% - 18px)}.tribe-events-admin-card--3up.tribe-events-admin-card--first{margin-right:32px}.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:0}.tribe-events-admin-card__title{font-size:20px;line-height:23px}.tribe-events-admin-card--1up{display:inline-block;margin-left:32px;width:calc(50% - 18px)}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--1up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card--no-pad{height:154px;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{margin-left:50%;padding:42px 0 10px}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin-left:50%}.tribe-events-admin-card--promo-blue{display:block;margin-left:0;min-height:170px;width:100%}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{float:left;max-width:300px}.tribe-events-admin-graphic{max-width:250px;top:0}.tribe-events-admin-graphic--desktop-only{display:block}.tribe-events-admin-graphic--mobile-only{display:none}.tribe-events-admin-card__form{float:right;width:300px}input[type=email].tribe-events-admin-card__input{width:300px}.tribe-events-admin-title{padding-top:50px}.tribe-events-admin-title__description{padding-top:15px}.tribe-events-admin-title__heading{font-size:48px;line-height:55px;margin:0}.tribe-events-admin-title__logo{margin-right:14px;padding-top:5px;width:40px}.tribe-events-admin-tickets .tribe-events-admin-card__title{font-size:18px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{font-size:18px;height:66px}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:8px;padding-top:4px;width:60px}}@media screen and (min-width:1217px){.tribe-events-admin-content-wrapper{max-width:1060px;width:100%}.tribe-events-admin-card--2up{margin-right:36px;width:486px}.tribe-events-admin-card--3up{width:310px}.tribe-events-admin-card--3up.tribe-events-admin-card--first,.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:36px}.tribe-events-admin-card--3up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--1up{margin:0 0 36px;padding:33px 44px 30px;text-align:left;width:1012px}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:auto}.tribe-events-admin-card--1up .tribe-events-admin-card__image{float:left;margin:0 48px 10px 0}.tribe-events-admin-card--no-pad{padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__image{margin:0;padding:0}.tribe-events-admin-card--no-pad .tribe-events-admin-card__title{margin-left:50%;padding:42px 0 10px}.tribe-events-admin-card--no-pad .tribe-events-admin-card__description{margin-left:50%}.tribe-events-admin-card--promo-blue{min-height:150px}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{max-width:450px}.tribe-events-admin-graphic{max-width:none}.tribe-events-admin-card__form,input[type=email].tribe-events-admin-card__input{width:365px}.tribe-events-admin-quick-nav{border-radius:100px;display:inline-block;height:54px;margin:24px 0 94px;max-width:1010px;padding:0 36px 0 0}.tribe-events-admin-quick-nav__link-item{display:inline-block;padding:18px 10px 0}.tribe-events-admin-quick-nav__title{padding:19px 6px 17px 32px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{height:auto}}@media screen and (max-width:768px){.tribe-events-admin-header__logo-word-mark{width:285px}.tribe-events-admin-header__right-image{height:160px}.tribe-events-admin-header__description{max-width:100%}.tribe-events-admin-tab-nav li{margin-right:20px}.tribe-events-admin-tab-nav .selected{border-bottom:2px solid currentColor;padding-bottom:10px}.tribe-events-admin-2col-grid{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr))}.tribe-events-admin-3col-grid{grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr))}.tribe-events-admin-extensions-title{max-width:100%}.tribe-events-admin-cta{align-items:flex-start;flex-direction:column;overflow:hidden}.tribe-events-admin-footer-logo{width:225px}.tribe-events-admin__system-information{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr));margin:50px 0}}@media screen and (max-width:480px){.tribe-events-admin-header__logo-word-mark{width:260px}.tribe-events-admin-header__right-image{height:120px}.tribe-events-admin-header__title{font-size:35px}.tribe-events-admin-header__description{max-width:100%}.tribe-events-admin-tab-nav{border:1px solid #e1e1e4;border-radius:20px;flex-direction:column;padding:18px 22px}.tribe-events-admin-tab-nav li{margin-bottom:18px;margin-right:0}.tribe-events-admin-tab-nav .selected{border-bottom:2px solid currentColor;padding-bottom:10px;width:fit-content}.tribe-events-admin__line{border:none}.tribe-events-admin-products-card,.tribe-events-admin-products-description{display:none}.tribe-events-admin-container,.tribe-events-admin-content-wrapper.tribe-events-admin-container{max-width:90%}.tribe-events-admin-2col-grid,.tribe-events-admin-3col-grid,.tribe-events-admin-4col-grid{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr))}.tribe-events-admin-extensions-title{max-width:100%}.tribe-events-admin-cta__image{height:auto;width:90%}.tribe-events-admin-cta__content,.tribe-events-admin__troubleshooting-cta{align-items:flex-start;padding:32px 23px 45px;width:auto}.tribe-events-admin-cta__content-title{font-size:22px;text-align:left}.tribe-events-admin-cta__content-subtitle{text-align:left}.tribe-events-admin-footer-logo{width:210px}.tribe-events-admin__system-information{grid-template-areas:".";grid-template-columns:repeat(1,minmax(0,1fr));margin:50px 0}.tribe-events-admin__troubleshooting-notice{margin-left:-20px}.tribe-events-admin__troubleshooting-notice_title{max-width:90%}}@media screen and (min-width:1200px){.tribe-events-admin-products-card__group{max-width:47%}}@media screen and (min-width:500px) and (max-width:1080px){.tribe-events-admin-4col-grid{grid-template-areas:". .";grid-template-columns:repeat(2,minmax(0,1fr))}}@media screen and (min-width:768px){.tribe-events-admin-section-header{font-size:28px;line-height:1.143;margin:50px 0 21px}}@media screen and (max-width:1080px){.tribe-events-admin-cta__content-title{font-size:24px}}@media only screen and (max-width:1920px){.tribe-events-admin__system-information-widget-copy{right:20.5vw}}@media only screen and (max-width:1280px){.tribe-events-admin__system-information-widget-copy{right:22vw}}@media only screen and (max-width:768px){.tribe-events-admin__system-information-widget-copy{left:10px;right:auto}.tribe-events-admin__recent-log-filters{flex-direction:column}.tribe-events-admin__recent-log-filters-field{margin-bottom:30px;margin-right:0}.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:first-child,.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(2),.tribe-events-admin__recent-log-filters-select-wrapper #tribe-log-controls div:nth-child(3){padding-right:30px}.tribe-events-admin__issues-found-card-title h3{max-width:90%}}@media only screen and (max-width:480px){.tribe-events-admin__system-information-widget-copy{left:10px;right:auto}.tribe-events-admin__recent-log-filters{flex-direction:column}.tribe-events-admin__recent-log-filters-field{margin-bottom:30px;margin-right:0}.tribe-events-admin__recent-log-filters-select-wrapper:after{right:25px}.tribe-events-admin__issues-found-card-title h3{max-width:80%}.tribe-events-admin__ea-status-table{overflow:scroll}.tribe-events-admin__ea-status-table td{min-width:150px}.tribe-events-admin__ea-status-table td:nth-child(2),.tribe-events-admin__ea-status-table td:nth-child(3){width:100%}}@media (min-width:1024px){.black-friday-promo{align-items:center;flex-direction:row}.black-friday-promo__branding{padding-right:10px;width:calc(100% - 450px)}.end-of-year-sale-promo{align-items:center;flex-direction:row}.end-of-year-sale-promo__branding{padding-right:10px;width:calc(100% - 460px)}}@media (max-width:525px){.end-of-year-sale-promo__promo{grid-template-areas:"a" "b";grid-template-columns:auto;margin:20px auto;padding-top:100px;width:300px}}
|
common/src/resources/images/welcome/tickets-commerce.png
ADDED
|
Binary file
|
common/src/resources/js/admin-color-field.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* eslint-disable es5/no-arrow-functions */
|
| 2 |
+
/* eslint-disable linebreak-style */
|
| 3 |
+
/**
|
| 4 |
+
* Makes sure we have all the required levels on the Tribe Object.
|
| 5 |
+
*
|
| 6 |
+
* @since TBD
|
| 7 |
+
*
|
| 8 |
+
* @type {PlainObject}
|
| 9 |
+
*/
|
| 10 |
+
tribe.settings = tribe.settings || {};
|
| 11 |
+
tribe.settings.fields = tribe.settings.fields || {};
|
| 12 |
+
|
| 13 |
+
/**
|
| 14 |
+
* Configure image field for settings in global Tribe variable.
|
| 15 |
+
*
|
| 16 |
+
* @since TBD
|
| 17 |
+
*
|
| 18 |
+
* @type {PlainObject}
|
| 19 |
+
*/
|
| 20 |
+
tribe.settings.fields.color = {};
|
| 21 |
+
|
| 22 |
+
/**
|
| 23 |
+
* Initializes the color field for settings.
|
| 24 |
+
*
|
| 25 |
+
* @since TBD
|
| 26 |
+
*
|
| 27 |
+
* @param {PlainObject} $ jQuery
|
| 28 |
+
* @param {PlainObject} obj tribe.settings.fields.color
|
| 29 |
+
*/
|
| 30 |
+
( function( $, obj ) {
|
| 31 |
+
'use strict';
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* Selectors used for configuration and setup
|
| 35 |
+
*
|
| 36 |
+
* @since TBD
|
| 37 |
+
*
|
| 38 |
+
* @type {PlainObject}
|
| 39 |
+
*/
|
| 40 |
+
obj.selectors = {
|
| 41 |
+
colorFieldInput: '.tec-admin__settings-color-field-input',
|
| 42 |
+
};
|
| 43 |
+
|
| 44 |
+
/**
|
| 45 |
+
* Handles the initialization of color fields when Document is ready.
|
| 46 |
+
*
|
| 47 |
+
* @since TBD
|
| 48 |
+
*
|
| 49 |
+
* @return {void}
|
| 50 |
+
*/
|
| 51 |
+
obj.init = () => {
|
| 52 |
+
$( obj.selectors.colorFieldInput ).wpColorPicker();
|
| 53 |
+
};
|
| 54 |
+
|
| 55 |
+
$( obj.init );
|
| 56 |
+
|
| 57 |
+
} )( jQuery, tribe.settings.fields.color );
|
common/src/resources/js/admin-color-field.min.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
| 1 |
+
tribe.settings=tribe.settings||{},tribe.settings.fields=tribe.settings.fields||{},tribe.settings.fields.color={},function(t,i){"use strict";i.selectors={colorFieldInput:".tec-admin__settings-color-field-input"},i.init=(()=>{t(i.selectors.colorFieldInput).wpColorPicker()}),t(i.init)}(jQuery,tribe.settings.fields.color);
|
common/src/resources/js/admin-image-field.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* eslint-disable linebreak-style */
|
| 2 |
+
/**
|
| 3 |
+
* Makes sure we have all the required levels on the Tribe Object.
|
| 4 |
+
*
|
| 5 |
+
* @since TBD
|
| 6 |
+
*
|
| 7 |
+
* @type {PlainObject}
|
| 8 |
+
*/
|
| 9 |
+
tribe.settings = tribe.settings || {};
|
| 10 |
+
tribe.settings.fields = tribe.settings.fields || {};
|
| 11 |
+
|
| 12 |
+
/**
|
| 13 |
+
* Configure image field for settings in global Tribe variable.
|
| 14 |
+
*
|
| 15 |
+
* @since TBD
|
| 16 |
+
*
|
| 17 |
+
* @type {PlainObject}
|
| 18 |
+
*/
|
| 19 |
+
tribe.settings.fields.image = {};
|
| 20 |
+
|
| 21 |
+
/**
|
| 22 |
+
* Intializes the image field for settings.
|
| 23 |
+
*
|
| 24 |
+
* @since TBD
|
| 25 |
+
*
|
| 26 |
+
* @param {PlainObject} $ jQuery
|
| 27 |
+
* @param {PlainObject} obj tribe.settings.fields.image
|
| 28 |
+
*/
|
| 29 |
+
( function( $, obj ) {
|
| 30 |
+
'use strict';
|
| 31 |
+
var $document = $( document );
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* Store the frame object globally.
|
| 35 |
+
*
|
| 36 |
+
* @since TBD
|
| 37 |
+
*
|
| 38 |
+
* @type {PlainObject}
|
| 39 |
+
*/
|
| 40 |
+
obj.frame = false;
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* Selectors used for configuration and setup
|
| 44 |
+
*
|
| 45 |
+
* @since TBD
|
| 46 |
+
*
|
| 47 |
+
* @type {PlainObject}
|
| 48 |
+
*/
|
| 49 |
+
obj.selectors = {
|
| 50 |
+
imageFieldContainer: '.tribe-field-image',
|
| 51 |
+
addImgLink: '.tec-admin__settings-image-field-btn-add',
|
| 52 |
+
removeImgLink: '.tec-admin__settings-image-field-btn-remove',
|
| 53 |
+
imgContainer: '.tec-admin__settings-image-field-image-container',
|
| 54 |
+
imgIdInput: '.tec-admin__settings-image-field-input',
|
| 55 |
+
};
|
| 56 |
+
|
| 57 |
+
/**
|
| 58 |
+
* Method to hide/show elements based on the image input field.
|
| 59 |
+
*
|
| 60 |
+
* @since TBD
|
| 61 |
+
*
|
| 62 |
+
* @param {jQuery} $fieldParent jQuery object of the field container.
|
| 63 |
+
*
|
| 64 |
+
* @return {void}
|
| 65 |
+
*/
|
| 66 |
+
obj.hideElements = function( $fieldParent ) {
|
| 67 |
+
const imageIsSet = $fieldParent.find( obj.selectors.imgIdInput ).val() !== '';
|
| 68 |
+
$fieldParent.find( obj.selectors.addImgLink ).toggleClass( 'hidden', imageIsSet );
|
| 69 |
+
$fieldParent.find( obj.selectors.removeImgLink ).toggleClass( 'hidden', !imageIsSet );
|
| 70 |
+
$fieldParent.find( obj.selectors.imgContainer ).toggleClass( 'hidden', !imageIsSet );
|
| 71 |
+
};
|
| 72 |
+
|
| 73 |
+
/**
|
| 74 |
+
* Method to handle when image is selected from WP Media feature.
|
| 75 |
+
*
|
| 76 |
+
* @since TBD
|
| 77 |
+
*
|
| 78 |
+
* @param {jQuery} $fieldParent jQuery object of the field container.
|
| 79 |
+
*
|
| 80 |
+
* @return {void}
|
| 81 |
+
*/
|
| 82 |
+
obj.onImageSelect = function( $fieldParent ) {
|
| 83 |
+
const attachment = obj.frame.state().get('selection').first().toJSON(),
|
| 84 |
+
$imgContainer = $fieldParent.find( obj.selectors.imgContainer );
|
| 85 |
+
if ( $imgContainer.find( 'img' ).length > 0 ) {
|
| 86 |
+
$imgContainer.find( 'img' ).attr( 'src', attachment.url );
|
| 87 |
+
} else {
|
| 88 |
+
$imgContainer.html( '<img src="' + attachment.url + '" />' );
|
| 89 |
+
}
|
| 90 |
+
$fieldParent.find( obj.selectors.imgIdInput ).val( attachment.url );
|
| 91 |
+
obj.hideElements( $fieldParent );
|
| 92 |
+
};
|
| 93 |
+
|
| 94 |
+
/**
|
| 95 |
+
* Method that handles 'Add Image' button click event.
|
| 96 |
+
*
|
| 97 |
+
* @since TBD
|
| 98 |
+
*
|
| 99 |
+
* @param {Event} e Click event.
|
| 100 |
+
*
|
| 101 |
+
* @return {void}
|
| 102 |
+
*/
|
| 103 |
+
obj.addImage = function( e ) {
|
| 104 |
+
e.preventDefault();
|
| 105 |
+
const $target = $( e.target );
|
| 106 |
+
const $fieldParent = $target.closest( obj.selectors.imageFieldContainer );
|
| 107 |
+
|
| 108 |
+
if ( obj.frame ) {
|
| 109 |
+
obj.frame.open();
|
| 110 |
+
} else {
|
| 111 |
+
obj.frame = wp.media({ // eslint-disable-line no-undef
|
| 112 |
+
title: $fieldParent.data( 'select-image-text' ),
|
| 113 |
+
button: {
|
| 114 |
+
text: $fieldParent.data( 'use-image-text' )
|
| 115 |
+
},
|
| 116 |
+
multiple: false
|
| 117 |
+
});
|
| 118 |
+
obj.frame.open();
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
obj.frame.off( 'select' ).on( 'select', function() {
|
| 122 |
+
obj.onImageSelect( $fieldParent );
|
| 123 |
+
} );
|
| 124 |
+
};
|
| 125 |
+
|
| 126 |
+
/**
|
| 127 |
+
* Method that handles 'Remove Image' button click event.
|
| 128 |
+
*
|
| 129 |
+
* @since TBD
|
| 130 |
+
*
|
| 131 |
+
* @param {Event} e Click event.
|
| 132 |
+
*
|
| 133 |
+
* @return {void}
|
| 134 |
+
*/
|
| 135 |
+
obj.removeImage = function( e ) {
|
| 136 |
+
e.preventDefault();
|
| 137 |
+
const $target = $( e.target );
|
| 138 |
+
const $fieldParent = $target.closest( obj.selectors.imageFieldContainer );
|
| 139 |
+
$fieldParent.find( obj.selectors.imgIdInput ).val( '' );
|
| 140 |
+
$fieldParent.find( obj.selectors.imgContainer ).html( '' );
|
| 141 |
+
obj.hideElements( $fieldParent );
|
| 142 |
+
};
|
| 143 |
+
|
| 144 |
+
/**
|
| 145 |
+
* Bind events for events bar
|
| 146 |
+
*
|
| 147 |
+
* @since TBD
|
| 148 |
+
*
|
| 149 |
+
* @return {void}
|
| 150 |
+
*/
|
| 151 |
+
obj.bindEvents = function() {
|
| 152 |
+
$document.on( 'click', obj.selectors.addImgLink, obj.addImage );
|
| 153 |
+
$document.on( 'click', obj.selectors.removeImgLink, obj.removeImage );
|
| 154 |
+
};
|
| 155 |
+
|
| 156 |
+
/**
|
| 157 |
+
* Handles the initialization of image fields when Document is ready.
|
| 158 |
+
*
|
| 159 |
+
* @since TBD
|
| 160 |
+
*
|
| 161 |
+
* @return {void}
|
| 162 |
+
*/
|
| 163 |
+
obj.init = function() {
|
| 164 |
+
$( obj.selectors.imageFieldContainer ).each( function( x, elm ) {
|
| 165 |
+
obj.hideElements( $( elm ) );
|
| 166 |
+
} );
|
| 167 |
+
obj.bindEvents();
|
| 168 |
+
};
|
| 169 |
+
|
| 170 |
+
$( obj.init );
|
| 171 |
+
|
| 172 |
+
} )( jQuery, tribe.settings.fields.image );
|
common/src/resources/js/admin-image-field.min.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
| 1 |
+
tribe.settings=tribe.settings||{},tribe.settings.fields=tribe.settings.fields||{},tribe.settings.fields.image={},function(e,t){"use strict";var i=e(document);t.frame=!1,t.selectors={imageFieldContainer:".tribe-field-image",addImgLink:".tec-admin__settings-image-field-btn-add",removeImgLink:".tec-admin__settings-image-field-btn-remove",imgContainer:".tec-admin__settings-image-field-image-container",imgIdInput:".tec-admin__settings-image-field-input"},t.hideElements=function(e){const i=""!==e.find(t.selectors.imgIdInput).val();e.find(t.selectors.addImgLink).toggleClass("hidden",i),e.find(t.selectors.removeImgLink).toggleClass("hidden",!i),e.find(t.selectors.imgContainer).toggleClass("hidden",!i)},t.onImageSelect=function(e){const i=t.frame.state().get("selection").first().toJSON(),n=e.find(t.selectors.imgContainer);n.find("img").length>0?n.find("img").attr("src",i.url):n.html('<img src="'+i.url+'" />'),e.find(t.selectors.imgIdInput).val(i.url),t.hideElements(e)},t.addImage=function(i){i.preventDefault();const n=e(i.target).closest(t.selectors.imageFieldContainer);t.frame?t.frame.open():(t.frame=wp.media({title:n.data("select-image-text"),button:{text:n.data("use-image-text")},multiple:!1}),t.frame.open()),t.frame.off("select").on("select",function(){t.onImageSelect(n)})},t.removeImage=function(i){i.preventDefault();const n=e(i.target).closest(t.selectors.imageFieldContainer);n.find(t.selectors.imgIdInput).val(""),n.find(t.selectors.imgContainer).html(""),t.hideElements(n)},t.bindEvents=function(){i.on("click",t.selectors.addImgLink,t.addImage),i.on("click",t.selectors.removeImgLink,t.removeImage)},t.init=function(){e(t.selectors.imageFieldContainer).each(function(i,n){t.hideElements(e(n))}),t.bindEvents()},e(t.init)}(jQuery,tribe.settings.fields.image);
|
common/vendor/autoload.php
CHANGED
|
@@ -4,4 +4,4 @@
|
|
| 4 |
|
| 5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
| 6 |
|
| 7 |
-
return
|
| 4 |
|
| 5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
| 6 |
|
| 7 |
+
return ComposerAutoloaderInit7aca5473727aeb3be10fa099344985aa::getLoader();
|
common/vendor/autoload_52.php
CHANGED
|
@@ -4,4 +4,4 @@
|
|
| 4 |
|
| 5 |
require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
|
| 6 |
|
| 7 |
-
return
|
| 4 |
|
| 5 |
require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
|
| 6 |
|
| 7 |
+
return ComposerAutoloaderInit7b4c9b325ada73e49f16fe5940811ddf::getLoader();
|
common/vendor/composer/autoload_classmap.php
CHANGED
|
@@ -126,6 +126,7 @@ return array(
|
|
| 126 |
'Tribe\\Admin\\Notice\\Service_Provider' => $baseDir . '/src/Tribe/Admin/Notice/Service_Provider.php',
|
| 127 |
'Tribe\\Admin\\Notice\\WP_Version' => $baseDir . '/src/Tribe/Admin/Notice/WP_Version.php',
|
| 128 |
'Tribe\\Admin\\Pages' => $baseDir . '/src/Tribe/Admin/Pages.php',
|
|
|
|
| 129 |
'Tribe\\Admin\\Troubleshooting' => $baseDir . '/src/Tribe/Admin/Troubleshooting.php',
|
| 130 |
'Tribe\\Admin\\Upsell_Notice\\Main' => $baseDir . '/src/Tribe/Admin/Upsell_Notice/Main.php',
|
| 131 |
'Tribe\\Customizer\\Control' => $baseDir . '/src/Tribe/Customizer/Control.php',
|
| 126 |
'Tribe\\Admin\\Notice\\Service_Provider' => $baseDir . '/src/Tribe/Admin/Notice/Service_Provider.php',
|
| 127 |
'Tribe\\Admin\\Notice\\WP_Version' => $baseDir . '/src/Tribe/Admin/Notice/WP_Version.php',
|
| 128 |
'Tribe\\Admin\\Pages' => $baseDir . '/src/Tribe/Admin/Pages.php',
|
| 129 |
+
'Tribe\\Admin\\Settings' => $baseDir . '/src/Tribe/Admin/Settings.php',
|
| 130 |
'Tribe\\Admin\\Troubleshooting' => $baseDir . '/src/Tribe/Admin/Troubleshooting.php',
|
| 131 |
'Tribe\\Admin\\Upsell_Notice\\Main' => $baseDir . '/src/Tribe/Admin/Upsell_Notice/Main.php',
|
| 132 |
'Tribe\\Customizer\\Control' => $baseDir . '/src/Tribe/Customizer/Control.php',
|
common/vendor/composer/autoload_real.php
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
|
| 3 |
// autoload_real.php @generated by Composer
|
| 4 |
|
| 5 |
-
class
|
| 6 |
{
|
| 7 |
private static $loader;
|
| 8 |
|
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInitbe502ab6c2b9b341451ac40a62acd01b
|
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
-
spl_autoload_register(array('
|
| 23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
-
spl_autoload_unregister(array('
|
| 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\
|
| 31 |
} else {
|
| 32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
| 33 |
foreach ($map as $namespace => $path) {
|
| 2 |
|
| 3 |
// autoload_real.php @generated by Composer
|
| 4 |
|
| 5 |
+
class ComposerAutoloaderInit7aca5473727aeb3be10fa099344985aa
|
| 6 |
{
|
| 7 |
private static $loader;
|
| 8 |
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
+
spl_autoload_register(array('ComposerAutoloaderInit7aca5473727aeb3be10fa099344985aa', 'loadClassLoader'), true, true);
|
| 23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit7aca5473727aeb3be10fa099344985aa', 'loadClassLoader'));
|
| 25 |
|
| 26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
| 27 |
if ($useStaticLoader) {
|
| 28 |
require_once __DIR__ . '/autoload_static.php';
|
| 29 |
|
| 30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit7aca5473727aeb3be10fa099344985aa::getInitializer($loader));
|
| 31 |
} else {
|
| 32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
| 33 |
foreach ($map as $namespace => $path) {
|
common/vendor/composer/autoload_real_52.php
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
|
| 3 |
// autoload_real_52.php generated by xrstf/composer-php52
|
| 4 |
|
| 5 |
-
class
|
| 6 |
private static $loader;
|
| 7 |
|
| 8 |
public static function loadClassLoader($class) {
|
|
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit0bcc44b8fd3b541feacf464057247397 {
|
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
-
spl_autoload_register(array('
|
| 23 |
self::$loader = $loader = new xrstf_Composer52_ClassLoader();
|
| 24 |
-
spl_autoload_unregister(array('
|
| 25 |
|
| 26 |
$vendorDir = dirname(dirname(__FILE__));
|
| 27 |
$baseDir = dirname($vendorDir);
|
| 2 |
|
| 3 |
// autoload_real_52.php generated by xrstf/composer-php52
|
| 4 |
|
| 5 |
+
class ComposerAutoloaderInit7b4c9b325ada73e49f16fe5940811ddf {
|
| 6 |
private static $loader;
|
| 7 |
|
| 8 |
public static function loadClassLoader($class) {
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
+
spl_autoload_register(array('ComposerAutoloaderInit7b4c9b325ada73e49f16fe5940811ddf', 'loadClassLoader'), true /*, true */);
|
| 23 |
self::$loader = $loader = new xrstf_Composer52_ClassLoader();
|
| 24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit7b4c9b325ada73e49f16fe5940811ddf', 'loadClassLoader'));
|
| 25 |
|
| 26 |
$vendorDir = dirname(dirname(__FILE__));
|
| 27 |
$baseDir = dirname($vendorDir);
|
common/vendor/composer/autoload_static.php
CHANGED
|
@@ -4,7 +4,7 @@
|
|
| 4 |
|
| 5 |
namespace Composer\Autoload;
|
| 6 |
|
| 7 |
-
class
|
| 8 |
{
|
| 9 |
public static $prefixLengthsPsr4 = array (
|
| 10 |
'T' =>
|
|
@@ -187,6 +187,7 @@ class ComposerStaticInitbe502ab6c2b9b341451ac40a62acd01b
|
|
| 187 |
'Tribe\\Admin\\Notice\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Admin/Notice/Service_Provider.php',
|
| 188 |
'Tribe\\Admin\\Notice\\WP_Version' => __DIR__ . '/../..' . '/src/Tribe/Admin/Notice/WP_Version.php',
|
| 189 |
'Tribe\\Admin\\Pages' => __DIR__ . '/../..' . '/src/Tribe/Admin/Pages.php',
|
|
|
|
| 190 |
'Tribe\\Admin\\Troubleshooting' => __DIR__ . '/../..' . '/src/Tribe/Admin/Troubleshooting.php',
|
| 191 |
'Tribe\\Admin\\Upsell_Notice\\Main' => __DIR__ . '/../..' . '/src/Tribe/Admin/Upsell_Notice/Main.php',
|
| 192 |
'Tribe\\Customizer\\Control' => __DIR__ . '/../..' . '/src/Tribe/Customizer/Control.php',
|
|
@@ -269,10 +270,10 @@ class ComposerStaticInitbe502ab6c2b9b341451ac40a62acd01b
|
|
| 269 |
public static function getInitializer(ClassLoader $loader)
|
| 270 |
{
|
| 271 |
return \Closure::bind(function () use ($loader) {
|
| 272 |
-
$loader->prefixLengthsPsr4 =
|
| 273 |
-
$loader->prefixDirsPsr4 =
|
| 274 |
-
$loader->prefixesPsr0 =
|
| 275 |
-
$loader->classMap =
|
| 276 |
|
| 277 |
}, null, ClassLoader::class);
|
| 278 |
}
|
| 4 |
|
| 5 |
namespace Composer\Autoload;
|
| 6 |
|
| 7 |
+
class ComposerStaticInit7aca5473727aeb3be10fa099344985aa
|
| 8 |
{
|
| 9 |
public static $prefixLengthsPsr4 = array (
|
| 10 |
'T' =>
|
| 187 |
'Tribe\\Admin\\Notice\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Admin/Notice/Service_Provider.php',
|
| 188 |
'Tribe\\Admin\\Notice\\WP_Version' => __DIR__ . '/../..' . '/src/Tribe/Admin/Notice/WP_Version.php',
|
| 189 |
'Tribe\\Admin\\Pages' => __DIR__ . '/../..' . '/src/Tribe/Admin/Pages.php',
|
| 190 |
+
'Tribe\\Admin\\Settings' => __DIR__ . '/../..' . '/src/Tribe/Admin/Settings.php',
|
| 191 |
'Tribe\\Admin\\Troubleshooting' => __DIR__ . '/../..' . '/src/Tribe/Admin/Troubleshooting.php',
|
| 192 |
'Tribe\\Admin\\Upsell_Notice\\Main' => __DIR__ . '/../..' . '/src/Tribe/Admin/Upsell_Notice/Main.php',
|
| 193 |
'Tribe\\Customizer\\Control' => __DIR__ . '/../..' . '/src/Tribe/Customizer/Control.php',
|
| 270 |
public static function getInitializer(ClassLoader $loader)
|
| 271 |
{
|
| 272 |
return \Closure::bind(function () use ($loader) {
|
| 273 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit7aca5473727aeb3be10fa099344985aa::$prefixLengthsPsr4;
|
| 274 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit7aca5473727aeb3be10fa099344985aa::$prefixDirsPsr4;
|
| 275 |
+
$loader->prefixesPsr0 = ComposerStaticInit7aca5473727aeb3be10fa099344985aa::$prefixesPsr0;
|
| 276 |
+
$loader->classMap = ComposerStaticInit7aca5473727aeb3be10fa099344985aa::$classMap;
|
| 277 |
|
| 278 |
}, null, ClassLoader::class);
|
| 279 |
}
|
event-tickets.php
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
Plugin Name: Event Tickets
|
| 4 |
Plugin URI: https://evnt.is/1acb
|
| 5 |
Description: Event Tickets allows you to sell basic tickets and collect RSVPs from any post, page, or event.
|
| 6 |
-
Version: 5.4.
|
| 7 |
Author: The Events Calendar
|
| 8 |
Author URI: https://evnt.is/1aor
|
| 9 |
License: GPLv2 or later
|
|
@@ -12,7 +12,7 @@ Text Domain: event-tickets
|
|
| 12 |
Domain Path: /lang/
|
| 13 |
*/
|
| 14 |
/*
|
| 15 |
-
Copyright 2010-
|
| 16 |
|
| 17 |
This program is free software; you can redistribute it and/or
|
| 18 |
modify it under the terms of the GNU General Public License
|
| 3 |
Plugin Name: Event Tickets
|
| 4 |
Plugin URI: https://evnt.is/1acb
|
| 5 |
Description: Event Tickets allows you to sell basic tickets and collect RSVPs from any post, page, or event.
|
| 6 |
+
Version: 5.4.4
|
| 7 |
Author: The Events Calendar
|
| 8 |
Author URI: https://evnt.is/1aor
|
| 9 |
License: GPLv2 or later
|
| 12 |
Domain Path: /lang/
|
| 13 |
*/
|
| 14 |
/*
|
| 15 |
+
Copyright 2010-2022 by The Events Calendar and the contributors
|
| 16 |
|
| 17 |
This program is free software; you can redistribute it and/or
|
| 18 |
modify it under the terms of the GNU General Public License
|
lang/event-tickets-nl_NL.mo
CHANGED
|
Binary file
|
lang/event-tickets-ro_RO.mo
CHANGED
|
Binary file
|
lang/event-tickets.pot
CHANGED
|
@@ -2,20 +2,20 @@
|
|
| 2 |
# This file is distributed under the same license as the Event Tickets package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
-
"Project-Id-Version: Event Tickets 5.4.
|
| 6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/event-tickets\n"
|
| 7 |
-
"POT-Creation-Date: 2022-
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 11 |
-
"PO-Revision-Date: 2022-
|
| 12 |
"Last-Translator: \n"
|
| 13 |
"Language-Team: \n"
|
| 14 |
|
| 15 |
-
#. #-#-#-#-# event-tickets.pot (Event Tickets 5.4.
|
| 16 |
#. Plugin Name of the plugin/theme
|
| 17 |
#: event-tickets.php:61 src/Tribe/Admin/Notices.php:92 src/Tribe/Main.php:701
|
| 18 |
-
#: src/Tribe/Privacy.php:59 src/admin-views/admin-welcome-message.php:
|
| 19 |
msgid "Event Tickets"
|
| 20 |
msgstr ""
|
| 21 |
|
|
@@ -175,61 +175,61 @@ msgid "Check In"
|
|
| 175 |
msgstr ""
|
| 176 |
|
| 177 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:350
|
| 178 |
-
#: src/Tribe/Attendees_Table.php:
|
| 179 |
msgctxt "Attendees Table search options"
|
| 180 |
msgid "Search by Purchaser Name"
|
| 181 |
msgstr ""
|
| 182 |
|
| 183 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:351
|
| 184 |
-
#: src/Tribe/Attendees_Table.php:
|
| 185 |
msgctxt "Attendees Table search options"
|
| 186 |
msgid "Search by Purchaser Email"
|
| 187 |
msgstr ""
|
| 188 |
|
| 189 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:352
|
| 190 |
-
#: src/Tribe/Attendees_Table.php:
|
| 191 |
msgctxt "Attendees Table search options"
|
| 192 |
msgid "Search by Ticket Holder Name"
|
| 193 |
msgstr ""
|
| 194 |
|
| 195 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:353
|
| 196 |
-
#: src/Tribe/Attendees_Table.php:
|
| 197 |
msgctxt "Attendees Table search options"
|
| 198 |
msgid "Search by Ticket Holder Email"
|
| 199 |
msgstr ""
|
| 200 |
|
| 201 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:354
|
| 202 |
-
#: src/Tribe/Attendees_Table.php:
|
| 203 |
msgctxt "Attendees Table search options"
|
| 204 |
msgid "Search by User ID"
|
| 205 |
msgstr ""
|
| 206 |
|
| 207 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:355
|
| 208 |
-
#: src/Tribe/Attendees_Table.php:
|
| 209 |
msgctxt "Attendees Table search options"
|
| 210 |
msgid "Search by Order Status"
|
| 211 |
msgstr ""
|
| 212 |
|
| 213 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:356
|
| 214 |
-
#: src/Tribe/Attendees_Table.php:
|
| 215 |
msgctxt "Attendees Table search options"
|
| 216 |
msgid "Search by Order ID"
|
| 217 |
msgstr ""
|
| 218 |
|
| 219 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:357
|
| 220 |
-
#: src/Tribe/Attendees_Table.php:
|
| 221 |
msgctxt "Attendees Table search options"
|
| 222 |
msgid "Search by Security Code"
|
| 223 |
msgstr ""
|
| 224 |
|
| 225 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:358
|
| 226 |
-
#: src/Tribe/Attendees_Table.php:
|
| 227 |
msgctxt "Attendees Table search options"
|
| 228 |
msgid "Search by %s ID"
|
| 229 |
msgstr ""
|
| 230 |
|
| 231 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:359
|
| 232 |
-
#: src/Tribe/Attendees_Table.php:
|
| 233 |
msgctxt "Attendees Table search options"
|
| 234 |
msgid "Search by Product ID"
|
| 235 |
msgstr ""
|
|
@@ -259,7 +259,7 @@ msgid "Delete"
|
|
| 259 |
msgstr ""
|
| 260 |
|
| 261 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:630
|
| 262 |
-
#: src/Tribe/Attendees_Table.php:
|
| 263 |
msgid "No matching attendees found."
|
| 264 |
msgstr ""
|
| 265 |
|
|
@@ -307,12 +307,12 @@ msgstr ""
|
|
| 307 |
msgid "Total"
|
| 308 |
msgstr ""
|
| 309 |
|
| 310 |
-
#: src/Tickets/Commerce/Admin_Tables/Orders.php:
|
| 311 |
#: src/Tribe/Commerce/PayPal/Orders/Table.php:274
|
| 312 |
msgid "No matching orders found."
|
| 313 |
msgstr ""
|
| 314 |
|
| 315 |
-
#: src/Tickets/Commerce/Admin_Tables/Orders.php:
|
| 316 |
#: src/Tribe/Commerce/PayPal/Orders/Table.php:177
|
| 317 |
msgid "%1$s"
|
| 318 |
msgstr ""
|
|
@@ -4639,32 +4639,32 @@ msgid "Reach out to PayPal to resolve the following capabilities:"
|
|
| 4639 |
msgstr ""
|
| 4640 |
|
| 4641 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:77
|
| 4642 |
-
#: src/Tribe/Commerce/PayPal/Main.php:1906 src/Tribe/RSVP.php:
|
| 4643 |
msgid "Return to the %1$sAttendees Report%2$s."
|
| 4644 |
msgstr ""
|
| 4645 |
|
| 4646 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:84
|
| 4647 |
-
#: src/Tribe/Commerce/PayPal/Main.php:1913 src/Tribe/RSVP.php:
|
| 4648 |
msgid "Post updated. %1$s"
|
| 4649 |
msgstr ""
|
| 4650 |
|
| 4651 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:88
|
| 4652 |
-
#: src/Tribe/Commerce/PayPal/Main.php:1917 src/Tribe/RSVP.php:
|
| 4653 |
msgid "Post published. %1$s"
|
| 4654 |
msgstr ""
|
| 4655 |
|
| 4656 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:91
|
| 4657 |
-
#: src/Tribe/Commerce/PayPal/Main.php:1920 src/Tribe/RSVP.php:
|
| 4658 |
msgid "Post submitted."
|
| 4659 |
msgstr ""
|
| 4660 |
|
| 4661 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:92
|
| 4662 |
-
#: src/Tribe/Commerce/PayPal/Main.php:1921 src/Tribe/RSVP.php:
|
| 4663 |
msgid "Post scheduled."
|
| 4664 |
msgstr ""
|
| 4665 |
|
| 4666 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:93
|
| 4667 |
-
#: src/Tribe/Commerce/PayPal/Main.php:1922 src/Tribe/RSVP.php:
|
| 4668 |
msgid "Post draft updated."
|
| 4669 |
msgstr ""
|
| 4670 |
|
|
@@ -4827,9 +4827,8 @@ msgstr ""
|
|
| 4827 |
#: src/Tickets/Commerce/Gateways/Stripe/Settings.php:194
|
| 4828 |
#: src/Tribe/Admin/Settings/Service_Provider.php:147
|
| 4829 |
#: src/Tribe/Admin/Settings/Service_Provider.php:195
|
| 4830 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 4831 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 4832 |
-
#: src/admin-views/admin-welcome-message.php:192
|
| 4833 |
msgid "Learn more"
|
| 4834 |
msgstr ""
|
| 4835 |
|
|
@@ -5060,11 +5059,12 @@ msgid "Tribe Commerce ( Legacy PayPal, not recommended )"
|
|
| 5060 |
msgstr ""
|
| 5061 |
|
| 5062 |
#: src/Tickets/Commerce/Models/Attendee_Model.php:62
|
| 5063 |
-
#: src/Tribe/Commerce/PayPal/Main.php:2957 src/Tribe/RSVP.php:
|
| 5064 |
msgid "(deleted)"
|
| 5065 |
msgstr ""
|
| 5066 |
|
| 5067 |
#: src/Tickets/Commerce/Module.php:20 src/Tickets/Commerce/Payments_Tab.php:200
|
|
|
|
| 5068 |
msgid "Tickets Commerce"
|
| 5069 |
msgstr ""
|
| 5070 |
|
|
@@ -5079,7 +5079,7 @@ msgid "Payments"
|
|
| 5079 |
msgstr ""
|
| 5080 |
|
| 5081 |
#: src/Tickets/Commerce/Payments_Tab.php:300 src/Tribe/Admin/Notices.php:214
|
| 5082 |
-
#: src/Tribe/Main.php:676 src/admin-views/admin-welcome-message.php:
|
| 5083 |
#: src/admin-views/tribe-commerce-settings.php:4
|
| 5084 |
msgid "Event Tickets Plus"
|
| 5085 |
msgstr ""
|
|
@@ -5434,11 +5434,11 @@ msgstr ""
|
|
| 5434 |
msgid "%s will be available on %s at %s"
|
| 5435 |
msgstr ""
|
| 5436 |
|
| 5437 |
-
#: src/Tickets/Commerce/Status/Pending.php:163 src/Tribe/Tickets.php:
|
| 5438 |
msgid "%s are no longer available."
|
| 5439 |
msgstr ""
|
| 5440 |
|
| 5441 |
-
#: src/Tickets/Commerce/Status/Pending.php:165 src/Tribe/Tickets.php:
|
| 5442 |
msgid "There are no %s available at this time."
|
| 5443 |
msgstr ""
|
| 5444 |
|
|
@@ -6237,7 +6237,7 @@ msgid ""
|
|
| 6237 |
msgstr ""
|
| 6238 |
|
| 6239 |
#: src/Tribe/Admin/Settings/Service_Provider.php:53
|
| 6240 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 6241 |
msgid "Getting Started Guide"
|
| 6242 |
msgstr ""
|
| 6243 |
|
|
@@ -6297,6 +6297,7 @@ msgid ""
|
|
| 6297 |
msgstr ""
|
| 6298 |
|
| 6299 |
#: src/Tribe/Admin/Settings/Service_Provider.php:145
|
|
|
|
| 6300 |
msgid "Get started"
|
| 6301 |
msgstr ""
|
| 6302 |
|
|
@@ -6774,28 +6775,28 @@ msgstr ""
|
|
| 6774 |
msgid "Are you sure you want to cancel?"
|
| 6775 |
msgstr ""
|
| 6776 |
|
| 6777 |
-
#: src/Tribe/Editor/Blocks/Tickets.php:282 src/Tribe/Tickets.php:
|
| 6778 |
msgctxt "Error message title, will be followed by the error code."
|
| 6779 |
msgid "API Error"
|
| 6780 |
msgstr ""
|
| 6781 |
|
| 6782 |
-
#: src/Tribe/Editor/Blocks/Tickets.php:283 src/Tribe/Tickets.php:
|
| 6783 |
msgid ""
|
| 6784 |
"Refresh this page or wait a few minutes before trying again. If this happens "
|
| 6785 |
"repeatedly, please contact the Site Admin."
|
| 6786 |
msgstr ""
|
| 6787 |
|
| 6788 |
-
#: src/Tribe/Editor/Blocks/Tickets.php:284 src/Tribe/Tickets.php:
|
| 6789 |
msgid ""
|
| 6790 |
"The ticket for this event has sold out and has been removed from your cart."
|
| 6791 |
msgstr ""
|
| 6792 |
|
| 6793 |
-
#: src/Tribe/Editor/Blocks/Tickets.php:285 src/Tribe/Tickets.php:
|
| 6794 |
#: src/views/v2/commerce/order/header/title-empty.php:28
|
| 6795 |
msgid "Whoops!"
|
| 6796 |
msgstr ""
|
| 6797 |
|
| 6798 |
-
#: src/Tribe/Editor/Blocks/Tickets.php:286 src/Tribe/Tickets.php:
|
| 6799 |
msgctxt "The %s will change based on the error produced."
|
| 6800 |
msgid "You have %s ticket(s) with a field that requires information."
|
| 6801 |
msgstr ""
|
|
@@ -6903,7 +6904,7 @@ msgstr ""
|
|
| 6903 |
msgid "Powered by"
|
| 6904 |
msgstr ""
|
| 6905 |
|
| 6906 |
-
#: src/Tribe/JSON_LD/Order.php:132 src/Tribe/RSVP.php:
|
| 6907 |
#: src/admin-views/editor/column-body-price.php:23
|
| 6908 |
msgid "Free"
|
| 6909 |
msgstr ""
|
|
@@ -7423,139 +7424,134 @@ msgstr ""
|
|
| 7423 |
msgid "The requested page was not found."
|
| 7424 |
msgstr ""
|
| 7425 |
|
| 7426 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7427 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:90
|
| 7428 |
-
msgid "Sorry, Event Tickets Plus must be active to use this endpoint."
|
| 7429 |
-
msgstr ""
|
| 7430 |
-
|
| 7431 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:205
|
| 7432 |
#: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:239
|
| 7433 |
msgid "The page of results to return; defaults to 1"
|
| 7434 |
msgstr ""
|
| 7435 |
|
| 7436 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7437 |
msgid ""
|
| 7438 |
"How many attendees to return per results page; defaults to posts_per_page."
|
| 7439 |
msgstr ""
|
| 7440 |
|
| 7441 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7442 |
msgid ""
|
| 7443 |
"Limit results to attendees whose ticket is provided by one of the providers "
|
| 7444 |
"specified in the CSV list or array; defaults to all the available."
|
| 7445 |
msgstr ""
|
| 7446 |
|
| 7447 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7448 |
msgid ""
|
| 7449 |
"Limit results to attendees containing the specified string in the title or "
|
| 7450 |
"description."
|
| 7451 |
msgstr ""
|
| 7452 |
|
| 7453 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7454 |
#: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:260
|
| 7455 |
msgid "Offset the results by a specific number of items."
|
| 7456 |
msgstr ""
|
| 7457 |
|
| 7458 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7459 |
#: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:266
|
| 7460 |
msgid "Sort results in ASC or DESC order. Defaults to ASC."
|
| 7461 |
msgstr ""
|
| 7462 |
|
| 7463 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7464 |
msgid ""
|
| 7465 |
"Order the results by one of date, relevance, id, include, title or slug. "
|
| 7466 |
"Defaults to id."
|
| 7467 |
msgstr ""
|
| 7468 |
|
| 7469 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7470 |
msgid "Limit results to attendees by post the ticket is associated with."
|
| 7471 |
msgstr ""
|
| 7472 |
|
| 7473 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7474 |
msgid "Limit results to attendees associated with a ticket."
|
| 7475 |
msgstr ""
|
| 7476 |
|
| 7477 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7478 |
msgid ""
|
| 7479 |
"Limit results to attendees created after or on the specified UTC date or "
|
| 7480 |
"timestamp."
|
| 7481 |
msgstr ""
|
| 7482 |
|
| 7483 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7484 |
msgid ""
|
| 7485 |
"Limit results to attendees created before or on the specified UTC date or "
|
| 7486 |
"timestamp."
|
| 7487 |
msgstr ""
|
| 7488 |
|
| 7489 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7490 |
msgid "Limit results to a specific CSV list or array of attendee IDs."
|
| 7491 |
msgstr ""
|
| 7492 |
|
| 7493 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7494 |
msgid "Exclude a specific CSV list or array of attendee IDs from the results."
|
| 7495 |
msgstr ""
|
| 7496 |
|
| 7497 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7498 |
msgid ""
|
| 7499 |
"Limit results to attendees that paid tickets a price equal or below the "
|
| 7500 |
"specified value; if not specified no maximum price limit will be used."
|
| 7501 |
msgstr ""
|
| 7502 |
|
| 7503 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7504 |
msgid ""
|
| 7505 |
"Limit results to attendees that paid tickets a price equal or above the "
|
| 7506 |
"specified value; if not specified no minimum price limit will be used."
|
| 7507 |
msgstr ""
|
| 7508 |
|
| 7509 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7510 |
msgid ""
|
| 7511 |
"Limit results to attendees whose ticket is assigned to one of the posts "
|
| 7512 |
"specified in the CSV list or array."
|
| 7513 |
msgstr ""
|
| 7514 |
|
| 7515 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7516 |
msgid ""
|
| 7517 |
"Limit results to attendees whose tickets is not assigned to any of the posts "
|
| 7518 |
"specified in the CSV list or array.."
|
| 7519 |
msgstr ""
|
| 7520 |
|
| 7521 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7522 |
#: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:314
|
| 7523 |
msgid "Limit results to a specific CSV list or array of ticket IDs."
|
| 7524 |
msgstr ""
|
| 7525 |
|
| 7526 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7527 |
msgid "Exclude a specific CSV list or array of ticket IDs."
|
| 7528 |
msgstr ""
|
| 7529 |
|
| 7530 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7531 |
msgid ""
|
| 7532 |
"Limit results to attendees for posts that are in one of the post statuses "
|
| 7533 |
"specified in the CSV list or array; defaults to publish."
|
| 7534 |
msgstr ""
|
| 7535 |
|
| 7536 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7537 |
msgid ""
|
| 7538 |
"Limit results to attendees that are in one of post statuses specified in the "
|
| 7539 |
"CSV list or array; defaults to publish."
|
| 7540 |
msgstr ""
|
| 7541 |
|
| 7542 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7543 |
msgid ""
|
| 7544 |
"Limit results to attendees whose order status is in one of post statuses "
|
| 7545 |
"specified in the CSV list or array; defaults to public."
|
| 7546 |
msgstr ""
|
| 7547 |
|
| 7548 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7549 |
msgid "Limit results to attendees that are or not checked-in."
|
| 7550 |
msgstr ""
|
| 7551 |
|
| 7552 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7553 |
msgid ""
|
| 7554 |
"Limit results to RSVP Attendees that have one of the RSVP Going status "
|
| 7555 |
"specified in the CSV list or array."
|
| 7556 |
msgstr ""
|
| 7557 |
|
| 7558 |
-
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:
|
| 7559 |
msgid ""
|
| 7560 |
"Limit results to attendees for tickets that provide attendees the "
|
| 7561 |
"possibility to fill in additional information or not; requires ET+."
|
|
@@ -7626,65 +7622,65 @@ msgstr ""
|
|
| 7626 |
msgid "List of meta for each ticket to be saved for Attendee Registration"
|
| 7627 |
msgstr ""
|
| 7628 |
|
| 7629 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7630 |
msgid "Returns the data of the attendee with the specified post ID"
|
| 7631 |
msgstr ""
|
| 7632 |
|
| 7633 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7634 |
msgid "The attendee post ID is invalid."
|
| 7635 |
msgstr ""
|
| 7636 |
|
| 7637 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7638 |
msgid "The attendee with the specified ID is not accessible."
|
| 7639 |
msgstr ""
|
| 7640 |
|
| 7641 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7642 |
msgid "An attendee with the specified ID does not exist."
|
| 7643 |
msgstr ""
|
| 7644 |
|
| 7645 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7646 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7647 |
msgid "The attendee post ID"
|
| 7648 |
msgstr ""
|
| 7649 |
|
| 7650 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7651 |
msgid "Something went wrong! Attendee creation failed."
|
| 7652 |
msgstr ""
|
| 7653 |
|
| 7654 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7655 |
msgid "The Ticket ID, where the attendee is registered."
|
| 7656 |
msgstr ""
|
| 7657 |
|
| 7658 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7659 |
msgid "Full name of the attendee."
|
| 7660 |
msgstr ""
|
| 7661 |
|
| 7662 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7663 |
msgid "Email of the attendeee."
|
| 7664 |
msgstr ""
|
| 7665 |
|
| 7666 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7667 |
msgid "Order Status for the attendee."
|
| 7668 |
msgstr ""
|
| 7669 |
|
| 7670 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7671 |
msgid "Something went wrong! Attendee update failed."
|
| 7672 |
msgstr ""
|
| 7673 |
|
| 7674 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7675 |
msgid "Ticket Provider not found."
|
| 7676 |
msgstr ""
|
| 7677 |
|
| 7678 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7679 |
msgid "Attendee ID is not valid."
|
| 7680 |
msgstr ""
|
| 7681 |
|
| 7682 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7683 |
msgid "Attendee provider not found."
|
| 7684 |
msgstr ""
|
| 7685 |
|
| 7686 |
#. Translators: %s - List of valid statuses.
|
| 7687 |
-
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:
|
| 7688 |
msgid "Supported statuses for this attendee are: %s"
|
| 7689 |
msgstr ""
|
| 7690 |
|
|
@@ -7933,10 +7929,6 @@ msgstr ""
|
|
| 7933 |
msgid "Not going"
|
| 7934 |
msgstr ""
|
| 7935 |
|
| 7936 |
-
#: src/Tribe/RSVP.php:487
|
| 7937 |
-
msgid "Your RSVP was unsuccessful, please try again."
|
| 7938 |
-
msgstr ""
|
| 7939 |
-
|
| 7940 |
#: src/Tribe/RSVP.php:524
|
| 7941 |
msgid "Unable to verify your opt-in request, please try again."
|
| 7942 |
msgstr ""
|
|
@@ -7972,27 +7964,47 @@ msgstr ""
|
|
| 7972 |
msgid "Unable to process your request, attendee creation failed."
|
| 7973 |
msgstr ""
|
| 7974 |
|
| 7975 |
-
#: src/Tribe/RSVP.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7976 |
msgid "Your %1$s from %2$s"
|
| 7977 |
msgstr ""
|
| 7978 |
|
| 7979 |
-
#: src/Tribe/RSVP.php:
|
| 7980 |
msgid "You confirmed you will not be attending %s"
|
| 7981 |
msgstr ""
|
| 7982 |
|
| 7983 |
-
#: src/Tribe/RSVP.php:
|
| 7984 |
msgid ""
|
| 7985 |
"Your %1$s has been received! Check your email for your %1$s confirmation."
|
| 7986 |
msgstr ""
|
| 7987 |
|
| 7988 |
-
#: src/Tribe/RSVP.php:
|
| 7989 |
msgid "You can't %1$s more than the total remaining %2$s."
|
| 7990 |
msgstr ""
|
| 7991 |
|
| 7992 |
-
#: src/Tribe/RSVP.php:
|
| 7993 |
msgid "In order to %s, you must enter your name and a valid email address."
|
| 7994 |
msgstr ""
|
| 7995 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7996 |
#: src/Tribe/Status/Abstract_Commerce.php:169
|
| 7997 |
msgid "Sold"
|
| 7998 |
msgstr ""
|
|
@@ -8049,43 +8061,42 @@ msgstr ""
|
|
| 8049 |
msgid "Move %s"
|
| 8050 |
msgstr ""
|
| 8051 |
|
| 8052 |
-
#: src/Tribe/Tickets.php:
|
| 8053 |
msgid "Shared capacity with other tickets"
|
| 8054 |
msgstr ""
|
| 8055 |
|
| 8056 |
-
#: src/Tribe/Tickets.php:
|
| 8057 |
msgid "Set capacity for this ticket only"
|
| 8058 |
msgstr ""
|
| 8059 |
|
| 8060 |
#. translators: %1$s: The singular of "RSVP" or "ticket", %2$s: The plural of
|
| 8061 |
#. "RSVPs" or "tickets", %3$s: The site name.
|
| 8062 |
-
#: src/Tribe/Tickets.php:
|
| 8063 |
msgctxt "The default RSVP/ticket email subject"
|
| 8064 |
msgid "Your %1$s from %3$s"
|
| 8065 |
msgid_plural "Your %2$s from %3$s"
|
| 8066 |
msgstr[0] ""
|
| 8067 |
msgstr[1] ""
|
| 8068 |
|
| 8069 |
-
#: src/Tribe/Tickets.php:
|
| 8070 |
msgid "%s are not available as this %s has passed."
|
| 8071 |
msgstr ""
|
| 8072 |
|
| 8073 |
-
#: src/Tribe/Tickets.php:
|
| 8074 |
msgid "%s will be available on "
|
| 8075 |
msgstr ""
|
| 8076 |
|
| 8077 |
-
#: src/Tribe/Tickets.php:
|
| 8078 |
msgid " at "
|
| 8079 |
msgstr ""
|
| 8080 |
|
| 8081 |
#. translators: %s: Tickets label
|
| 8082 |
-
#: src/Tribe/Tickets.php:
|
| 8083 |
#: src/views/v2/tickets/item/content/inactive.php:53
|
| 8084 |
-
#: src/views/v2/tickets/item/inactive.php:63
|
| 8085 |
msgid "%s are not yet available"
|
| 8086 |
msgstr ""
|
| 8087 |
|
| 8088 |
-
#: src/Tribe/Tickets.php:
|
| 8089 |
msgid "(copy)"
|
| 8090 |
msgstr ""
|
| 8091 |
|
|
@@ -8109,194 +8120,186 @@ msgstr ""
|
|
| 8109 |
msgid "This %s is no longer active."
|
| 8110 |
msgstr ""
|
| 8111 |
|
| 8112 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8113 |
msgid "The Events Calendar product suite logo"
|
| 8114 |
msgstr ""
|
| 8115 |
|
| 8116 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8117 |
msgctxt "short expression of excitement"
|
| 8118 |
msgid "WOOHOO!"
|
| 8119 |
msgstr ""
|
| 8120 |
|
| 8121 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8122 |
msgid "You're the proud owner of Event Tickets Plus! Let's get started…"
|
| 8123 |
msgstr ""
|
| 8124 |
|
| 8125 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8126 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8127 |
msgid "Shapes and lines for visual interest"
|
| 8128 |
msgstr ""
|
| 8129 |
|
| 8130 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8131 |
msgid "Event Tickets logo"
|
| 8132 |
msgstr ""
|
| 8133 |
|
| 8134 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8135 |
msgid ""
|
| 8136 |
"Thanks for installing Event Tickets Plus! Here are some handy resources for "
|
| 8137 |
"getting started with our plugins."
|
| 8138 |
msgstr ""
|
| 8139 |
|
| 8140 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8141 |
msgid ""
|
| 8142 |
"Thanks for installing Event Tickets! Here are some handy resources for "
|
| 8143 |
"getting started with our plugins."
|
| 8144 |
msgstr ""
|
| 8145 |
|
| 8146 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8147 |
msgid "Quick Links:"
|
| 8148 |
msgstr ""
|
| 8149 |
|
| 8150 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8151 |
msgid "Configure Settings"
|
| 8152 |
msgstr ""
|
| 8153 |
|
| 8154 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8155 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8156 |
msgid "Install WooCommerce"
|
| 8157 |
msgstr ""
|
| 8158 |
|
| 8159 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8160 |
msgid "Create Ticket"
|
| 8161 |
msgstr ""
|
| 8162 |
|
| 8163 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8164 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8165 |
msgid "Install The Events Calendar"
|
| 8166 |
msgstr ""
|
| 8167 |
|
| 8168 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8169 |
msgid "Create RSVP"
|
| 8170 |
msgstr ""
|
| 8171 |
|
| 8172 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8173 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8174 |
msgid "Set Up Tickets Commerce"
|
| 8175 |
msgstr ""
|
| 8176 |
|
| 8177 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8178 |
msgid "Helpful Resources"
|
| 8179 |
msgstr ""
|
| 8180 |
|
| 8181 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8182 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8183 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8184 |
msgid "Illustration of a book with The Events Calendar logo"
|
| 8185 |
msgstr ""
|
| 8186 |
|
| 8187 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8188 |
msgid "New to Event Tickets? Here's everything you need to get started."
|
| 8189 |
msgstr ""
|
| 8190 |
|
| 8191 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8192 |
msgid "Check out the guide"
|
| 8193 |
msgstr ""
|
| 8194 |
|
| 8195 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8196 |
msgid "Illustration of a thought lightbulb coming from a book"
|
| 8197 |
msgstr ""
|
| 8198 |
|
| 8199 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8200 |
msgid "Knowledgebase"
|
| 8201 |
msgstr ""
|
| 8202 |
|
| 8203 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8204 |
msgid ""
|
| 8205 |
"Ready to dig deeper? Our Knowledgebase can help you get the most out of The "
|
| 8206 |
"Events Calendar suite."
|
| 8207 |
msgstr ""
|
| 8208 |
|
| 8209 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8210 |
msgid "Dig deeper"
|
| 8211 |
msgstr ""
|
| 8212 |
|
| 8213 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8214 |
-
msgid "Illustration of
|
| 8215 |
-
msgstr ""
|
| 8216 |
-
|
| 8217 |
-
#: src/admin-views/admin-welcome-message.php:148
|
| 8218 |
-
msgid "Translations"
|
| 8219 |
-
msgstr ""
|
| 8220 |
-
|
| 8221 |
-
#: src/admin-views/admin-welcome-message.php:149
|
| 8222 |
-
msgid "Need a language other than English? We've got you covered here."
|
| 8223 |
msgstr ""
|
| 8224 |
|
| 8225 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8226 |
msgid "Illustration of a phone screen with a person's face"
|
| 8227 |
msgstr ""
|
| 8228 |
|
| 8229 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8230 |
msgid "Virtual Event Resources"
|
| 8231 |
msgstr ""
|
| 8232 |
|
| 8233 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8234 |
msgid ""
|
| 8235 |
"Tips and tools to help with planning online events, webinars, and more on "
|
| 8236 |
"WordPress and beyond."
|
| 8237 |
msgstr ""
|
| 8238 |
|
| 8239 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8240 |
msgid "Get started with online events"
|
| 8241 |
msgstr ""
|
| 8242 |
|
| 8243 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8244 |
msgid "Illustration of a power plug and gears"
|
| 8245 |
msgstr ""
|
| 8246 |
|
| 8247 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8248 |
msgid "Browse our library of free extensions for Event Tickets."
|
| 8249 |
msgstr ""
|
| 8250 |
|
| 8251 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8252 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8253 |
msgid "Want to take your events to the next level?"
|
| 8254 |
msgstr ""
|
| 8255 |
|
| 8256 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8257 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8258 |
msgid "Check out our suite of add-ons"
|
| 8259 |
msgstr ""
|
| 8260 |
|
| 8261 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8262 |
msgid "Illustration of a calendar"
|
| 8263 |
msgstr ""
|
| 8264 |
|
| 8265 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8266 |
msgid "Add The Events Calendar (it's free!) to enhance Event Tickets."
|
| 8267 |
msgstr ""
|
| 8268 |
|
| 8269 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8270 |
msgid "Illustration of a hand holding a ticket and the WooCommerce logo"
|
| 8271 |
msgstr ""
|
| 8272 |
|
| 8273 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8274 |
msgid "Add WooCommerce integration, advanced registration, and more."
|
| 8275 |
msgstr ""
|
| 8276 |
|
| 8277 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8278 |
msgid "Check out Event Tickets Plus"
|
| 8279 |
msgstr ""
|
| 8280 |
|
| 8281 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8282 |
msgid "Want this emailed to you?"
|
| 8283 |
msgstr ""
|
| 8284 |
|
| 8285 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8286 |
msgid ""
|
| 8287 |
"Keep this list of links on hand and stay subscribed to receive tips and "
|
| 8288 |
"tricks about The Events Calendar products."
|
| 8289 |
msgstr ""
|
| 8290 |
|
| 8291 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8292 |
msgid "Your email"
|
| 8293 |
msgstr ""
|
| 8294 |
|
| 8295 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8296 |
msgid "Sign Up"
|
| 8297 |
msgstr ""
|
| 8298 |
|
| 8299 |
-
#: src/admin-views/admin-welcome-message.php:
|
| 8300 |
msgid "The Events Calendar brand logo"
|
| 8301 |
msgstr ""
|
| 8302 |
|
| 2 |
# This file is distributed under the same license as the Event Tickets package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
+
"Project-Id-Version: Event Tickets 5.4.4\n"
|
| 6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/event-tickets\n"
|
| 7 |
+
"POT-Creation-Date: 2022-08-11 05:07:59+00:00\n"
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 11 |
+
"PO-Revision-Date: 2022-08-11 05:07\n"
|
| 12 |
"Last-Translator: \n"
|
| 13 |
"Language-Team: \n"
|
| 14 |
|
| 15 |
+
#. #-#-#-#-# event-tickets.pot (Event Tickets 5.4.4) #-#-#-#-#
|
| 16 |
#. Plugin Name of the plugin/theme
|
| 17 |
#: event-tickets.php:61 src/Tribe/Admin/Notices.php:92 src/Tribe/Main.php:701
|
| 18 |
+
#: src/Tribe/Privacy.php:59 src/admin-views/admin-welcome-message.php:73
|
| 19 |
msgid "Event Tickets"
|
| 20 |
msgstr ""
|
| 21 |
|
| 175 |
msgstr ""
|
| 176 |
|
| 177 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:350
|
| 178 |
+
#: src/Tribe/Attendees_Table.php:1003
|
| 179 |
msgctxt "Attendees Table search options"
|
| 180 |
msgid "Search by Purchaser Name"
|
| 181 |
msgstr ""
|
| 182 |
|
| 183 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:351
|
| 184 |
+
#: src/Tribe/Attendees_Table.php:1004
|
| 185 |
msgctxt "Attendees Table search options"
|
| 186 |
msgid "Search by Purchaser Email"
|
| 187 |
msgstr ""
|
| 188 |
|
| 189 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:352
|
| 190 |
+
#: src/Tribe/Attendees_Table.php:1005
|
| 191 |
msgctxt "Attendees Table search options"
|
| 192 |
msgid "Search by Ticket Holder Name"
|
| 193 |
msgstr ""
|
| 194 |
|
| 195 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:353
|
| 196 |
+
#: src/Tribe/Attendees_Table.php:1006
|
| 197 |
msgctxt "Attendees Table search options"
|
| 198 |
msgid "Search by Ticket Holder Email"
|
| 199 |
msgstr ""
|
| 200 |
|
| 201 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:354
|
| 202 |
+
#: src/Tribe/Attendees_Table.php:1007
|
| 203 |
msgctxt "Attendees Table search options"
|
| 204 |
msgid "Search by User ID"
|
| 205 |
msgstr ""
|
| 206 |
|
| 207 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:355
|
| 208 |
+
#: src/Tribe/Attendees_Table.php:1008
|
| 209 |
msgctxt "Attendees Table search options"
|
| 210 |
msgid "Search by Order Status"
|
| 211 |
msgstr ""
|
| 212 |
|
| 213 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:356
|
| 214 |
+
#: src/Tribe/Attendees_Table.php:1009
|
| 215 |
msgctxt "Attendees Table search options"
|
| 216 |
msgid "Search by Order ID"
|
| 217 |
msgstr ""
|
| 218 |
|
| 219 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:357
|
| 220 |
+
#: src/Tribe/Attendees_Table.php:1010
|
| 221 |
msgctxt "Attendees Table search options"
|
| 222 |
msgid "Search by Security Code"
|
| 223 |
msgstr ""
|
| 224 |
|
| 225 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:358
|
| 226 |
+
#: src/Tribe/Attendees_Table.php:1011
|
| 227 |
msgctxt "Attendees Table search options"
|
| 228 |
msgid "Search by %s ID"
|
| 229 |
msgstr ""
|
| 230 |
|
| 231 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:359
|
| 232 |
+
#: src/Tribe/Attendees_Table.php:1012
|
| 233 |
msgctxt "Attendees Table search options"
|
| 234 |
msgid "Search by Product ID"
|
| 235 |
msgstr ""
|
| 259 |
msgstr ""
|
| 260 |
|
| 261 |
#: src/Tickets/Commerce/Admin_Tables/Attendees.php:630
|
| 262 |
+
#: src/Tribe/Attendees_Table.php:989
|
| 263 |
msgid "No matching attendees found."
|
| 264 |
msgstr ""
|
| 265 |
|
| 307 |
msgid "Total"
|
| 308 |
msgstr ""
|
| 309 |
|
| 310 |
+
#: src/Tickets/Commerce/Admin_Tables/Orders.php:188
|
| 311 |
#: src/Tribe/Commerce/PayPal/Orders/Table.php:274
|
| 312 |
msgid "No matching orders found."
|
| 313 |
msgstr ""
|
| 314 |
|
| 315 |
+
#: src/Tickets/Commerce/Admin_Tables/Orders.php:291
|
| 316 |
#: src/Tribe/Commerce/PayPal/Orders/Table.php:177
|
| 317 |
msgid "%1$s"
|
| 318 |
msgstr ""
|
| 4639 |
msgstr ""
|
| 4640 |
|
| 4641 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:77
|
| 4642 |
+
#: src/Tribe/Commerce/PayPal/Main.php:1906 src/Tribe/RSVP.php:2365
|
| 4643 |
msgid "Return to the %1$sAttendees Report%2$s."
|
| 4644 |
msgstr ""
|
| 4645 |
|
| 4646 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:84
|
| 4647 |
+
#: src/Tribe/Commerce/PayPal/Main.php:1913 src/Tribe/RSVP.php:2372
|
| 4648 |
msgid "Post updated. %1$s"
|
| 4649 |
msgstr ""
|
| 4650 |
|
| 4651 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:88
|
| 4652 |
+
#: src/Tribe/Commerce/PayPal/Main.php:1917 src/Tribe/RSVP.php:2376
|
| 4653 |
msgid "Post published. %1$s"
|
| 4654 |
msgstr ""
|
| 4655 |
|
| 4656 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:91
|
| 4657 |
+
#: src/Tribe/Commerce/PayPal/Main.php:1920 src/Tribe/RSVP.php:2379
|
| 4658 |
msgid "Post submitted."
|
| 4659 |
msgstr ""
|
| 4660 |
|
| 4661 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:92
|
| 4662 |
+
#: src/Tribe/Commerce/PayPal/Main.php:1921 src/Tribe/RSVP.php:2380
|
| 4663 |
msgid "Post scheduled."
|
| 4664 |
msgstr ""
|
| 4665 |
|
| 4666 |
#: src/Tickets/Commerce/Gateways/PayPal/Tickets_Form.php:93
|
| 4667 |
+
#: src/Tribe/Commerce/PayPal/Main.php:1922 src/Tribe/RSVP.php:2381
|
| 4668 |
msgid "Post draft updated."
|
| 4669 |
msgstr ""
|
| 4670 |
|
| 4827 |
#: src/Tickets/Commerce/Gateways/Stripe/Settings.php:194
|
| 4828 |
#: src/Tribe/Admin/Settings/Service_Provider.php:147
|
| 4829 |
#: src/Tribe/Admin/Settings/Service_Provider.php:195
|
| 4830 |
+
#: src/admin-views/admin-welcome-message.php:185
|
| 4831 |
+
#: src/admin-views/admin-welcome-message.php:205
|
|
|
|
| 4832 |
msgid "Learn more"
|
| 4833 |
msgstr ""
|
| 4834 |
|
| 5059 |
msgstr ""
|
| 5060 |
|
| 5061 |
#: src/Tickets/Commerce/Models/Attendee_Model.php:62
|
| 5062 |
+
#: src/Tribe/Commerce/PayPal/Main.php:2957 src/Tribe/RSVP.php:2024
|
| 5063 |
msgid "(deleted)"
|
| 5064 |
msgstr ""
|
| 5065 |
|
| 5066 |
#: src/Tickets/Commerce/Module.php:20 src/Tickets/Commerce/Payments_Tab.php:200
|
| 5067 |
+
#: src/admin-views/admin-welcome-message.php:161
|
| 5068 |
msgid "Tickets Commerce"
|
| 5069 |
msgstr ""
|
| 5070 |
|
| 5079 |
msgstr ""
|
| 5080 |
|
| 5081 |
#: src/Tickets/Commerce/Payments_Tab.php:300 src/Tribe/Admin/Notices.php:214
|
| 5082 |
+
#: src/Tribe/Main.php:676 src/admin-views/admin-welcome-message.php:71
|
| 5083 |
#: src/admin-views/tribe-commerce-settings.php:4
|
| 5084 |
msgid "Event Tickets Plus"
|
| 5085 |
msgstr ""
|
| 5434 |
msgid "%s will be available on %s at %s"
|
| 5435 |
msgstr ""
|
| 5436 |
|
| 5437 |
+
#: src/Tickets/Commerce/Status/Pending.php:163 src/Tribe/Tickets.php:3208
|
| 5438 |
msgid "%s are no longer available."
|
| 5439 |
msgstr ""
|
| 5440 |
|
| 5441 |
+
#: src/Tickets/Commerce/Status/Pending.php:165 src/Tribe/Tickets.php:3210
|
| 5442 |
msgid "There are no %s available at this time."
|
| 5443 |
msgstr ""
|
| 5444 |
|
| 6237 |
msgstr ""
|
| 6238 |
|
| 6239 |
#: src/Tribe/Admin/Settings/Service_Provider.php:53
|
| 6240 |
+
#: src/admin-views/admin-welcome-message.php:141
|
| 6241 |
msgid "Getting Started Guide"
|
| 6242 |
msgstr ""
|
| 6243 |
|
| 6297 |
msgstr ""
|
| 6298 |
|
| 6299 |
#: src/Tribe/Admin/Settings/Service_Provider.php:145
|
| 6300 |
+
#: src/admin-views/admin-welcome-message.php:163
|
| 6301 |
msgid "Get started"
|
| 6302 |
msgstr ""
|
| 6303 |
|
| 6775 |
msgid "Are you sure you want to cancel?"
|
| 6776 |
msgstr ""
|
| 6777 |
|
| 6778 |
+
#: src/Tribe/Editor/Blocks/Tickets.php:282 src/Tribe/Tickets.php:4338
|
| 6779 |
msgctxt "Error message title, will be followed by the error code."
|
| 6780 |
msgid "API Error"
|
| 6781 |
msgstr ""
|
| 6782 |
|
| 6783 |
+
#: src/Tribe/Editor/Blocks/Tickets.php:283 src/Tribe/Tickets.php:4339
|
| 6784 |
msgid ""
|
| 6785 |
"Refresh this page or wait a few minutes before trying again. If this happens "
|
| 6786 |
"repeatedly, please contact the Site Admin."
|
| 6787 |
msgstr ""
|
| 6788 |
|
| 6789 |
+
#: src/Tribe/Editor/Blocks/Tickets.php:284 src/Tribe/Tickets.php:4340
|
| 6790 |
msgid ""
|
| 6791 |
"The ticket for this event has sold out and has been removed from your cart."
|
| 6792 |
msgstr ""
|
| 6793 |
|
| 6794 |
+
#: src/Tribe/Editor/Blocks/Tickets.php:285 src/Tribe/Tickets.php:4341
|
| 6795 |
#: src/views/v2/commerce/order/header/title-empty.php:28
|
| 6796 |
msgid "Whoops!"
|
| 6797 |
msgstr ""
|
| 6798 |
|
| 6799 |
+
#: src/Tribe/Editor/Blocks/Tickets.php:286 src/Tribe/Tickets.php:4342
|
| 6800 |
msgctxt "The %s will change based on the error produced."
|
| 6801 |
msgid "You have %s ticket(s) with a field that requires information."
|
| 6802 |
msgstr ""
|
| 6904 |
msgid "Powered by"
|
| 6905 |
msgstr ""
|
| 6906 |
|
| 6907 |
+
#: src/Tribe/JSON_LD/Order.php:132 src/Tribe/RSVP.php:1616
|
| 6908 |
#: src/admin-views/editor/column-body-price.php:23
|
| 6909 |
msgid "Free"
|
| 6910 |
msgstr ""
|
| 7424 |
msgid "The requested page was not found."
|
| 7425 |
msgstr ""
|
| 7426 |
|
| 7427 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:199
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7428 |
#: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:239
|
| 7429 |
msgid "The page of results to return; defaults to 1"
|
| 7430 |
msgstr ""
|
| 7431 |
|
| 7432 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:207
|
| 7433 |
msgid ""
|
| 7434 |
"How many attendees to return per results page; defaults to posts_per_page."
|
| 7435 |
msgstr ""
|
| 7436 |
|
| 7437 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:216
|
| 7438 |
msgid ""
|
| 7439 |
"Limit results to attendees whose ticket is provided by one of the providers "
|
| 7440 |
"specified in the CSV list or array; defaults to all the available."
|
| 7441 |
msgstr ""
|
| 7442 |
|
| 7443 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:229
|
| 7444 |
msgid ""
|
| 7445 |
"Limit results to attendees containing the specified string in the title or "
|
| 7446 |
"description."
|
| 7447 |
msgstr ""
|
| 7448 |
|
| 7449 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:235
|
| 7450 |
#: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:260
|
| 7451 |
msgid "Offset the results by a specific number of items."
|
| 7452 |
msgstr ""
|
| 7453 |
|
| 7454 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:241
|
| 7455 |
#: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:266
|
| 7456 |
msgid "Sort results in ASC or DESC order. Defaults to ASC."
|
| 7457 |
msgstr ""
|
| 7458 |
|
| 7459 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:250
|
| 7460 |
msgid ""
|
| 7461 |
"Order the results by one of date, relevance, id, include, title or slug. "
|
| 7462 |
"Defaults to id."
|
| 7463 |
msgstr ""
|
| 7464 |
|
| 7465 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:262
|
| 7466 |
msgid "Limit results to attendees by post the ticket is associated with."
|
| 7467 |
msgstr ""
|
| 7468 |
|
| 7469 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:268
|
| 7470 |
msgid "Limit results to attendees associated with a ticket."
|
| 7471 |
msgstr ""
|
| 7472 |
|
| 7473 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:274
|
| 7474 |
msgid ""
|
| 7475 |
"Limit results to attendees created after or on the specified UTC date or "
|
| 7476 |
"timestamp."
|
| 7477 |
msgstr ""
|
| 7478 |
|
| 7479 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:280
|
| 7480 |
msgid ""
|
| 7481 |
"Limit results to attendees created before or on the specified UTC date or "
|
| 7482 |
"timestamp."
|
| 7483 |
msgstr ""
|
| 7484 |
|
| 7485 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:286
|
| 7486 |
msgid "Limit results to a specific CSV list or array of attendee IDs."
|
| 7487 |
msgstr ""
|
| 7488 |
|
| 7489 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:299
|
| 7490 |
msgid "Exclude a specific CSV list or array of attendee IDs from the results."
|
| 7491 |
msgstr ""
|
| 7492 |
|
| 7493 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:312
|
| 7494 |
msgid ""
|
| 7495 |
"Limit results to attendees that paid tickets a price equal or below the "
|
| 7496 |
"specified value; if not specified no maximum price limit will be used."
|
| 7497 |
msgstr ""
|
| 7498 |
|
| 7499 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:318
|
| 7500 |
msgid ""
|
| 7501 |
"Limit results to attendees that paid tickets a price equal or above the "
|
| 7502 |
"specified value; if not specified no minimum price limit will be used."
|
| 7503 |
msgstr ""
|
| 7504 |
|
| 7505 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:324
|
| 7506 |
msgid ""
|
| 7507 |
"Limit results to attendees whose ticket is assigned to one of the posts "
|
| 7508 |
"specified in the CSV list or array."
|
| 7509 |
msgstr ""
|
| 7510 |
|
| 7511 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:337
|
| 7512 |
msgid ""
|
| 7513 |
"Limit results to attendees whose tickets is not assigned to any of the posts "
|
| 7514 |
"specified in the CSV list or array.."
|
| 7515 |
msgstr ""
|
| 7516 |
|
| 7517 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:350
|
| 7518 |
#: src/Tribe/REST/V1/Endpoints/Ticket_Archive.php:314
|
| 7519 |
msgid "Limit results to a specific CSV list or array of ticket IDs."
|
| 7520 |
msgstr ""
|
| 7521 |
|
| 7522 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:362
|
| 7523 |
msgid "Exclude a specific CSV list or array of ticket IDs."
|
| 7524 |
msgstr ""
|
| 7525 |
|
| 7526 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:374
|
| 7527 |
msgid ""
|
| 7528 |
"Limit results to attendees for posts that are in one of the post statuses "
|
| 7529 |
"specified in the CSV list or array; defaults to publish."
|
| 7530 |
msgstr ""
|
| 7531 |
|
| 7532 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:385
|
| 7533 |
msgid ""
|
| 7534 |
"Limit results to attendees that are in one of post statuses specified in the "
|
| 7535 |
"CSV list or array; defaults to publish."
|
| 7536 |
msgstr ""
|
| 7537 |
|
| 7538 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:396
|
| 7539 |
msgid ""
|
| 7540 |
"Limit results to attendees whose order status is in one of post statuses "
|
| 7541 |
"specified in the CSV list or array; defaults to public."
|
| 7542 |
msgstr ""
|
| 7543 |
|
| 7544 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:407
|
| 7545 |
msgid "Limit results to attendees that are or not checked-in."
|
| 7546 |
msgstr ""
|
| 7547 |
|
| 7548 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:412
|
| 7549 |
msgid ""
|
| 7550 |
"Limit results to RSVP Attendees that have one of the RSVP Going status "
|
| 7551 |
"specified in the CSV list or array."
|
| 7552 |
msgstr ""
|
| 7553 |
|
| 7554 |
+
#: src/Tribe/REST/V1/Endpoints/Attendee_Archive.php:423
|
| 7555 |
msgid ""
|
| 7556 |
"Limit results to attendees for tickets that provide attendees the "
|
| 7557 |
"possibility to fill in additional information or not; requires ET+."
|
| 7622 |
msgid "List of meta for each ticket to be saved for Attendee Registration"
|
| 7623 |
msgstr ""
|
| 7624 |
|
| 7625 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:23
|
| 7626 |
msgid "Returns the data of the attendee with the specified post ID"
|
| 7627 |
msgstr ""
|
| 7628 |
|
| 7629 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:33
|
| 7630 |
msgid "The attendee post ID is invalid."
|
| 7631 |
msgstr ""
|
| 7632 |
|
| 7633 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:43
|
| 7634 |
msgid "The attendee with the specified ID is not accessible."
|
| 7635 |
msgstr ""
|
| 7636 |
|
| 7637 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:53
|
| 7638 |
msgid "An attendee with the specified ID does not exist."
|
| 7639 |
msgstr ""
|
| 7640 |
|
| 7641 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:75
|
| 7642 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:216
|
| 7643 |
msgid "The attendee post ID"
|
| 7644 |
msgstr ""
|
| 7645 |
|
| 7646 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:116
|
| 7647 |
msgid "Something went wrong! Attendee creation failed."
|
| 7648 |
msgstr ""
|
| 7649 |
|
| 7650 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:140
|
| 7651 |
msgid "The Ticket ID, where the attendee is registered."
|
| 7652 |
msgstr ""
|
| 7653 |
|
| 7654 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:145
|
| 7655 |
msgid "Full name of the attendee."
|
| 7656 |
msgstr ""
|
| 7657 |
|
| 7658 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:151
|
| 7659 |
msgid "Email of the attendeee."
|
| 7660 |
msgstr ""
|
| 7661 |
|
| 7662 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:156
|
| 7663 |
msgid "Order Status for the attendee."
|
| 7664 |
msgstr ""
|
| 7665 |
|
| 7666 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:193
|
| 7667 |
msgid "Something went wrong! Attendee update failed."
|
| 7668 |
msgstr ""
|
| 7669 |
|
| 7670 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:244
|
| 7671 |
msgid "Ticket Provider not found."
|
| 7672 |
msgstr ""
|
| 7673 |
|
| 7674 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:289
|
| 7675 |
msgid "Attendee ID is not valid."
|
| 7676 |
msgstr ""
|
| 7677 |
|
| 7678 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:295
|
| 7679 |
msgid "Attendee provider not found."
|
| 7680 |
msgstr ""
|
| 7681 |
|
| 7682 |
#. Translators: %s - List of valid statuses.
|
| 7683 |
+
#: src/Tribe/REST/V1/Endpoints/Single_Attendee.php:344
|
| 7684 |
msgid "Supported statuses for this attendee are: %s"
|
| 7685 |
msgstr ""
|
| 7686 |
|
| 7929 |
msgid "Not going"
|
| 7930 |
msgstr ""
|
| 7931 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7932 |
#: src/Tribe/RSVP.php:524
|
| 7933 |
msgid "Unable to verify your opt-in request, please try again."
|
| 7934 |
msgstr ""
|
| 7964 |
msgid "Unable to process your request, attendee creation failed."
|
| 7965 |
msgstr ""
|
| 7966 |
|
| 7967 |
+
#: src/Tribe/RSVP.php:1072
|
| 7968 |
+
msgid "Invalid data! Missing required attendee details!"
|
| 7969 |
+
msgstr ""
|
| 7970 |
+
|
| 7971 |
+
#: src/Tribe/RSVP.php:1278
|
| 7972 |
msgid "Your %1$s from %2$s"
|
| 7973 |
msgstr ""
|
| 7974 |
|
| 7975 |
+
#: src/Tribe/RSVP.php:1384
|
| 7976 |
msgid "You confirmed you will not be attending %s"
|
| 7977 |
msgstr ""
|
| 7978 |
|
| 7979 |
+
#: src/Tribe/RSVP.php:1733
|
| 7980 |
msgid ""
|
| 7981 |
"Your %1$s has been received! Check your email for your %1$s confirmation."
|
| 7982 |
msgstr ""
|
| 7983 |
|
| 7984 |
+
#: src/Tribe/RSVP.php:1740
|
| 7985 |
msgid "You can't %1$s more than the total remaining %2$s."
|
| 7986 |
msgstr ""
|
| 7987 |
|
| 7988 |
+
#: src/Tribe/RSVP.php:1748
|
| 7989 |
msgid "In order to %s, you must enter your name and a valid email address."
|
| 7990 |
msgstr ""
|
| 7991 |
|
| 7992 |
+
#: src/Tribe/RSVP.php:2546
|
| 7993 |
+
msgid "Invalid parent ID provided!"
|
| 7994 |
+
msgstr ""
|
| 7995 |
+
|
| 7996 |
+
#: src/Tribe/RSVP.php:2553
|
| 7997 |
+
msgid "Invalid Ticket ID provided!"
|
| 7998 |
+
msgstr ""
|
| 7999 |
+
|
| 8000 |
+
#: src/Tribe/RSVP.php:2568 src/Tribe/RSVP.php:2574
|
| 8001 |
+
msgid "Missing required RSVP field: %s"
|
| 8002 |
+
msgstr ""
|
| 8003 |
+
|
| 8004 |
+
#: src/Tribe/RSVP.php:2612
|
| 8005 |
+
msgid "Requested amount of Tickets are not available!"
|
| 8006 |
+
msgstr ""
|
| 8007 |
+
|
| 8008 |
#: src/Tribe/Status/Abstract_Commerce.php:169
|
| 8009 |
msgid "Sold"
|
| 8010 |
msgstr ""
|
| 8061 |
msgid "Move %s"
|
| 8062 |
msgstr ""
|
| 8063 |
|
| 8064 |
+
#: src/Tribe/Tickets.php:1794
|
| 8065 |
msgid "Shared capacity with other tickets"
|
| 8066 |
msgstr ""
|
| 8067 |
|
| 8068 |
+
#: src/Tribe/Tickets.php:1795
|
| 8069 |
msgid "Set capacity for this ticket only"
|
| 8070 |
msgstr ""
|
| 8071 |
|
| 8072 |
#. translators: %1$s: The singular of "RSVP" or "ticket", %2$s: The plural of
|
| 8073 |
#. "RSVPs" or "tickets", %3$s: The site name.
|
| 8074 |
+
#: src/Tribe/Tickets.php:2412
|
| 8075 |
msgctxt "The default RSVP/ticket email subject"
|
| 8076 |
msgid "Your %1$s from %3$s"
|
| 8077 |
msgid_plural "Your %2$s from %3$s"
|
| 8078 |
msgstr[0] ""
|
| 8079 |
msgstr[1] ""
|
| 8080 |
|
| 8081 |
+
#: src/Tribe/Tickets.php:3160
|
| 8082 |
msgid "%s are not available as this %s has passed."
|
| 8083 |
msgstr ""
|
| 8084 |
|
| 8085 |
+
#: src/Tribe/Tickets.php:3196
|
| 8086 |
msgid "%s will be available on "
|
| 8087 |
msgstr ""
|
| 8088 |
|
| 8089 |
+
#: src/Tribe/Tickets.php:3202
|
| 8090 |
msgid " at "
|
| 8091 |
msgstr ""
|
| 8092 |
|
| 8093 |
#. translators: %s: Tickets label
|
| 8094 |
+
#: src/Tribe/Tickets.php:3205 src/views/blocks/tickets/content-inactive.php:19
|
| 8095 |
#: src/views/v2/tickets/item/content/inactive.php:53
|
|
|
|
| 8096 |
msgid "%s are not yet available"
|
| 8097 |
msgstr ""
|
| 8098 |
|
| 8099 |
+
#: src/Tribe/Tickets.php:3657
|
| 8100 |
msgid "(copy)"
|
| 8101 |
msgstr ""
|
| 8102 |
|
| 8120 |
msgid "This %s is no longer active."
|
| 8121 |
msgstr ""
|
| 8122 |
|
| 8123 |
+
#: src/admin-views/admin-welcome-message.php:42
|
| 8124 |
msgid "The Events Calendar product suite logo"
|
| 8125 |
msgstr ""
|
| 8126 |
|
| 8127 |
+
#: src/admin-views/admin-welcome-message.php:44
|
| 8128 |
msgctxt "short expression of excitement"
|
| 8129 |
msgid "WOOHOO!"
|
| 8130 |
msgstr ""
|
| 8131 |
|
| 8132 |
+
#: src/admin-views/admin-welcome-message.php:44
|
| 8133 |
msgid "You're the proud owner of Event Tickets Plus! Let's get started…"
|
| 8134 |
msgstr ""
|
| 8135 |
|
| 8136 |
+
#: src/admin-views/admin-welcome-message.php:53
|
| 8137 |
+
#: src/admin-views/admin-welcome-message.php:59
|
| 8138 |
msgid "Shapes and lines for visual interest"
|
| 8139 |
msgstr ""
|
| 8140 |
|
| 8141 |
+
#: src/admin-views/admin-welcome-message.php:66
|
| 8142 |
msgid "Event Tickets logo"
|
| 8143 |
msgstr ""
|
| 8144 |
|
| 8145 |
+
#: src/admin-views/admin-welcome-message.php:79
|
| 8146 |
msgid ""
|
| 8147 |
"Thanks for installing Event Tickets Plus! Here are some handy resources for "
|
| 8148 |
"getting started with our plugins."
|
| 8149 |
msgstr ""
|
| 8150 |
|
| 8151 |
+
#: src/admin-views/admin-welcome-message.php:81
|
| 8152 |
msgid ""
|
| 8153 |
"Thanks for installing Event Tickets! Here are some handy resources for "
|
| 8154 |
"getting started with our plugins."
|
| 8155 |
msgstr ""
|
| 8156 |
|
| 8157 |
+
#: src/admin-views/admin-welcome-message.php:87
|
| 8158 |
msgid "Quick Links:"
|
| 8159 |
msgstr ""
|
| 8160 |
|
| 8161 |
+
#: src/admin-views/admin-welcome-message.php:90
|
| 8162 |
msgid "Configure Settings"
|
| 8163 |
msgstr ""
|
| 8164 |
|
| 8165 |
+
#: src/admin-views/admin-welcome-message.php:94
|
| 8166 |
+
#: src/admin-views/admin-welcome-message.php:101
|
| 8167 |
msgid "Install WooCommerce"
|
| 8168 |
msgstr ""
|
| 8169 |
|
| 8170 |
+
#: src/admin-views/admin-welcome-message.php:97
|
| 8171 |
msgid "Create Ticket"
|
| 8172 |
msgstr ""
|
| 8173 |
|
| 8174 |
+
#: src/admin-views/admin-welcome-message.php:104
|
| 8175 |
+
#: src/admin-views/admin-welcome-message.php:115
|
| 8176 |
msgid "Install The Events Calendar"
|
| 8177 |
msgstr ""
|
| 8178 |
|
| 8179 |
+
#: src/admin-views/admin-welcome-message.php:108
|
| 8180 |
msgid "Create RSVP"
|
| 8181 |
msgstr ""
|
| 8182 |
|
| 8183 |
+
#: src/admin-views/admin-welcome-message.php:111
|
| 8184 |
+
#: src/admin-views/admin-welcome-message.php:118
|
| 8185 |
msgid "Set Up Tickets Commerce"
|
| 8186 |
msgstr ""
|
| 8187 |
|
| 8188 |
+
#: src/admin-views/admin-welcome-message.php:124
|
| 8189 |
msgid "Helpful Resources"
|
| 8190 |
msgstr ""
|
| 8191 |
|
| 8192 |
+
#: src/admin-views/admin-welcome-message.php:139
|
| 8193 |
+
#: src/admin-views/admin-welcome-message.php:192
|
| 8194 |
+
#: src/admin-views/admin-welcome-message.php:214
|
| 8195 |
msgid "Illustration of a book with The Events Calendar logo"
|
| 8196 |
msgstr ""
|
| 8197 |
|
| 8198 |
+
#: src/admin-views/admin-welcome-message.php:142
|
| 8199 |
msgid "New to Event Tickets? Here's everything you need to get started."
|
| 8200 |
msgstr ""
|
| 8201 |
|
| 8202 |
+
#: src/admin-views/admin-welcome-message.php:143
|
| 8203 |
msgid "Check out the guide"
|
| 8204 |
msgstr ""
|
| 8205 |
|
| 8206 |
+
#: src/admin-views/admin-welcome-message.php:149
|
| 8207 |
msgid "Illustration of a thought lightbulb coming from a book"
|
| 8208 |
msgstr ""
|
| 8209 |
|
| 8210 |
+
#: src/admin-views/admin-welcome-message.php:151
|
| 8211 |
msgid "Knowledgebase"
|
| 8212 |
msgstr ""
|
| 8213 |
|
| 8214 |
+
#: src/admin-views/admin-welcome-message.php:152
|
| 8215 |
msgid ""
|
| 8216 |
"Ready to dig deeper? Our Knowledgebase can help you get the most out of The "
|
| 8217 |
"Events Calendar suite."
|
| 8218 |
msgstr ""
|
| 8219 |
|
| 8220 |
+
#: src/admin-views/admin-welcome-message.php:153
|
| 8221 |
msgid "Dig deeper"
|
| 8222 |
msgstr ""
|
| 8223 |
|
| 8224 |
+
#: src/admin-views/admin-welcome-message.php:159
|
| 8225 |
+
msgid "Illustration of money turning into a ticket"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8226 |
msgstr ""
|
| 8227 |
|
| 8228 |
+
#: src/admin-views/admin-welcome-message.php:170
|
| 8229 |
msgid "Illustration of a phone screen with a person's face"
|
| 8230 |
msgstr ""
|
| 8231 |
|
| 8232 |
+
#: src/admin-views/admin-welcome-message.php:172
|
| 8233 |
msgid "Virtual Event Resources"
|
| 8234 |
msgstr ""
|
| 8235 |
|
| 8236 |
+
#: src/admin-views/admin-welcome-message.php:173
|
| 8237 |
msgid ""
|
| 8238 |
"Tips and tools to help with planning online events, webinars, and more on "
|
| 8239 |
"WordPress and beyond."
|
| 8240 |
msgstr ""
|
| 8241 |
|
| 8242 |
+
#: src/admin-views/admin-welcome-message.php:174
|
| 8243 |
msgid "Get started with online events"
|
| 8244 |
msgstr ""
|
| 8245 |
|
| 8246 |
+
#: src/admin-views/admin-welcome-message.php:182
|
| 8247 |
msgid "Illustration of a power plug and gears"
|
| 8248 |
msgstr ""
|
| 8249 |
|
| 8250 |
+
#: src/admin-views/admin-welcome-message.php:184
|
| 8251 |
msgid "Browse our library of free extensions for Event Tickets."
|
| 8252 |
msgstr ""
|
| 8253 |
|
| 8254 |
+
#: src/admin-views/admin-welcome-message.php:194
|
| 8255 |
+
#: src/admin-views/admin-welcome-message.php:216
|
| 8256 |
msgid "Want to take your events to the next level?"
|
| 8257 |
msgstr ""
|
| 8258 |
|
| 8259 |
+
#: src/admin-views/admin-welcome-message.php:195
|
| 8260 |
+
#: src/admin-views/admin-welcome-message.php:217
|
| 8261 |
msgid "Check out our suite of add-ons"
|
| 8262 |
msgstr ""
|
| 8263 |
|
| 8264 |
+
#: src/admin-views/admin-welcome-message.php:202
|
| 8265 |
msgid "Illustration of a calendar"
|
| 8266 |
msgstr ""
|
| 8267 |
|
| 8268 |
+
#: src/admin-views/admin-welcome-message.php:204
|
| 8269 |
msgid "Add The Events Calendar (it's free!) to enhance Event Tickets."
|
| 8270 |
msgstr ""
|
| 8271 |
|
| 8272 |
+
#: src/admin-views/admin-welcome-message.php:224
|
| 8273 |
msgid "Illustration of a hand holding a ticket and the WooCommerce logo"
|
| 8274 |
msgstr ""
|
| 8275 |
|
| 8276 |
+
#: src/admin-views/admin-welcome-message.php:226
|
| 8277 |
msgid "Add WooCommerce integration, advanced registration, and more."
|
| 8278 |
msgstr ""
|
| 8279 |
|
| 8280 |
+
#: src/admin-views/admin-welcome-message.php:227
|
| 8281 |
msgid "Check out Event Tickets Plus"
|
| 8282 |
msgstr ""
|
| 8283 |
|
| 8284 |
+
#: src/admin-views/admin-welcome-message.php:232
|
| 8285 |
msgid "Want this emailed to you?"
|
| 8286 |
msgstr ""
|
| 8287 |
|
| 8288 |
+
#: src/admin-views/admin-welcome-message.php:233
|
| 8289 |
msgid ""
|
| 8290 |
"Keep this list of links on hand and stay subscribed to receive tips and "
|
| 8291 |
"tricks about The Events Calendar products."
|
| 8292 |
msgstr ""
|
| 8293 |
|
| 8294 |
+
#: src/admin-views/admin-welcome-message.php:236
|
| 8295 |
msgid "Your email"
|
| 8296 |
msgstr ""
|
| 8297 |
|
| 8298 |
+
#: src/admin-views/admin-welcome-message.php:238
|
| 8299 |
msgid "Sign Up"
|
| 8300 |
msgstr ""
|
| 8301 |
|
| 8302 |
+
#: src/admin-views/admin-welcome-message.php:251
|
| 8303 |
msgid "The Events Calendar brand logo"
|
| 8304 |
msgstr ""
|
| 8305 |
|
readme.txt
CHANGED
|
@@ -4,7 +4,7 @@ Contributors: theeventscalendar, brianjessee, camwynsp, aguseo, bordoni, borkweb
|
|
| 4 |
Tags: tickets, registration, event registration, RSVP, ticket sales, attendee management
|
| 5 |
Requires at least: 5.6
|
| 6 |
Tested up to: 6.0.1
|
| 7 |
-
Stable tag: 5.4.
|
| 8 |
Requires PHP: 7.1
|
| 9 |
License: GPLv2 or later
|
| 10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
|
@@ -188,6 +188,22 @@ Check out our extensive [knowledgebase](https://evnt.is/18wm) for articles on us
|
|
| 188 |
|
| 189 |
== Changelog ==
|
| 190 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 191 |
= [5.4.3.1] 2022-07-21 =
|
| 192 |
|
| 193 |
* Fix - Update Freemius to avoid PHP 8 fatals. [TEC-4330]
|
| 4 |
Tags: tickets, registration, event registration, RSVP, ticket sales, attendee management
|
| 5 |
Requires at least: 5.6
|
| 6 |
Tested up to: 6.0.1
|
| 7 |
+
Stable tag: 5.4.4
|
| 8 |
Requires PHP: 7.1
|
| 9 |
License: GPLv2 or later
|
| 10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 188 |
|
| 189 |
== Changelog ==
|
| 190 |
|
| 191 |
+
= [5.4.4] 2022-08-15 =
|
| 192 |
+
|
| 193 |
+
* Fix - Tickets/RSVP blocks appear in wrong place on non-events when block editor is disabled in The Events Calendar. [ET-1544]
|
| 194 |
+
* Fix - Fixed searching attendees by purchaser name and email for Tickets Commerce attendees. [ET-1543]
|
| 195 |
+
* Fix - Fixed concurrent RSVP booking not showing error messages for out of stock tickets. [ET-1506]
|
| 196 |
+
* Fix - Fixed showing proper ticket unavailable message for past events. [ET-1146]
|
| 197 |
+
* Fix - Fixed Shared Capacity calculation with capped tickets. [ETP-801]
|
| 198 |
+
* Fix - Fixed logic that was causing fatal errors when using Elementor. [ET-1561]
|
| 199 |
+
* Enhancement - Sorting support added on Tickets Commerce Order Report page columns. [ET-1527]
|
| 200 |
+
* Enhancement - Sorting support added on Attendee Report page for Ticket, Security Code, and Check In columns. [ET-1526]
|
| 201 |
+
* Enhancement - Added section about Tickets Commerce on the Tickets Home page. [ET-1539]
|
| 202 |
+
* Enhancement - Tickets Commerce Stripe gateway now shows additional purchaser info metadata in Stripe dashboard. [ET-1542]
|
| 203 |
+
* Enhancement - Update REST API Endpoints to have access via API KEY and remove the restriction to be using Event Tickets Plus to access the `attendees` endpoint. [ET-1559]
|
| 204 |
+
* Enhancement - Allow filtering of Events Archive REST API using `ticketed` parameter to filter Ticketed and Non-ticketed events. [TEC-4439]
|
| 205 |
+
* Language - 6 new strings added, 162 updated, 0 fuzzied, and 9 obsoleted
|
| 206 |
+
|
| 207 |
= [5.4.3.1] 2022-07-21 =
|
| 208 |
|
| 209 |
* Fix - Update Freemius to avoid PHP 8 fatals. [TEC-4330]
|
src/Tickets/Commerce/Admin_Tables/Orders.php
CHANGED
|
@@ -140,6 +140,8 @@ class Orders extends WP_List_Table {
|
|
| 140 |
|
| 141 |
$search = tribe_get_request_var( 's' );
|
| 142 |
$page = absint( tribe_get_request_var( 'paged', 0 ) );
|
|
|
|
|
|
|
| 143 |
$arguments = [
|
| 144 |
'status' => 'any',
|
| 145 |
'paged' => $page,
|
|
@@ -157,6 +159,14 @@ class Orders extends WP_List_Table {
|
|
| 157 |
$arguments['tickets'] = $product_ids;
|
| 158 |
}
|
| 159 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 160 |
$orders_repository = tec_tc_orders()->by_args( $arguments );
|
| 161 |
|
| 162 |
$total_items = $orders_repository->found();
|
|
@@ -334,4 +344,25 @@ class Orders extends WP_List_Table {
|
|
| 334 |
}
|
| 335 |
return $gateway::get_label();
|
| 336 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 337 |
}
|
| 140 |
|
| 141 |
$search = tribe_get_request_var( 's' );
|
| 142 |
$page = absint( tribe_get_request_var( 'paged', 0 ) );
|
| 143 |
+
$orderby = tribe_get_request_var( 'orderby' );
|
| 144 |
+
$order = tribe_get_request_var( 'order' );
|
| 145 |
$arguments = [
|
| 146 |
'status' => 'any',
|
| 147 |
'paged' => $page,
|
| 159 |
$arguments['tickets'] = $product_ids;
|
| 160 |
}
|
| 161 |
|
| 162 |
+
if ( ! empty( $orderby ) ) {
|
| 163 |
+
$arguments['orderby'] = $orderby;
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
if ( ! empty( $order ) ) {
|
| 167 |
+
$arguments['order'] = $order;
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
$orders_repository = tec_tc_orders()->by_args( $arguments );
|
| 171 |
|
| 172 |
$total_items = $orders_repository->found();
|
| 344 |
}
|
| 345 |
return $gateway::get_label();
|
| 346 |
}
|
| 347 |
+
|
| 348 |
+
/**
|
| 349 |
+
* List of sortable columns.
|
| 350 |
+
*
|
| 351 |
+
* @since TBD
|
| 352 |
+
*
|
| 353 |
+
* @return array
|
| 354 |
+
*/
|
| 355 |
+
public function get_sortable_columns() {
|
| 356 |
+
return [
|
| 357 |
+
'order' => 'order_id',
|
| 358 |
+
'purchaser' => 'purchaser_full_name',
|
| 359 |
+
'email' => 'purchaser_email',
|
| 360 |
+
'date' => 'purchase_time',
|
| 361 |
+
'gateway' => 'gateway',
|
| 362 |
+
'gateway_order_id' => 'gateway_id',
|
| 363 |
+
'status' => 'status',
|
| 364 |
+
'total' => 'total_value'
|
| 365 |
+
];
|
| 366 |
+
}
|
| 367 |
+
|
| 368 |
}
|
src/Tickets/Commerce/Gateways/Stripe/Payment_Intent_Handler.php
CHANGED
|
@@ -112,12 +112,7 @@ class Payment_Intent_Handler {
|
|
| 112 |
|
| 113 |
$stripe_receipt_emails = tribe_get_option( Settings::$option_stripe_receipt_emails );
|
| 114 |
$payment_intent = Payment_Intent::get( $payment_intent_id );
|
| 115 |
-
|
| 116 |
-
// Add the Order ID as metadata to the Payment Intent
|
| 117 |
-
$metadata = $payment_intent['metadata'];
|
| 118 |
-
$metadata['order_id'] = $order->ID;
|
| 119 |
-
$metadata['return_url'] = tribe( Webhook_Endpoint::class )->get_route_url();
|
| 120 |
-
$body['metadata'] = $metadata;
|
| 121 |
|
| 122 |
if ( $stripe_receipt_emails ) {
|
| 123 |
if ( is_user_logged_in() ) {
|
|
@@ -215,4 +210,46 @@ class Payment_Intent_Handler {
|
|
| 215 |
public function store_payment_intent( $payment_intent ) {
|
| 216 |
set_transient( $this->get_payment_intent_transient_name(), $payment_intent, 6 * HOUR_IN_SECONDS );
|
| 217 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 218 |
}
|
| 112 |
|
| 113 |
$stripe_receipt_emails = tribe_get_option( Settings::$option_stripe_receipt_emails );
|
| 114 |
$payment_intent = Payment_Intent::get( $payment_intent_id );
|
| 115 |
+
$body['metadata'] = $this->get_updated_metadata( $order, $payment_intent );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
|
| 117 |
if ( $stripe_receipt_emails ) {
|
| 118 |
if ( is_user_logged_in() ) {
|
| 210 |
public function store_payment_intent( $payment_intent ) {
|
| 211 |
set_transient( $this->get_payment_intent_transient_name(), $payment_intent, 6 * HOUR_IN_SECONDS );
|
| 212 |
}
|
| 213 |
+
|
| 214 |
+
/**
|
| 215 |
+
* Get the additional metadata for the payment intent.
|
| 216 |
+
*
|
| 217 |
+
* @since TBD
|
| 218 |
+
*
|
| 219 |
+
* @param \WP_Post $order The Order data.
|
| 220 |
+
* @param array $payment_intent The Payment intent.
|
| 221 |
+
*
|
| 222 |
+
* @return array
|
| 223 |
+
*/
|
| 224 |
+
protected function get_updated_metadata( \WP_Post $order, array $payment_intent ) {
|
| 225 |
+
// Add the Order ID as metadata to the Payment Intent.
|
| 226 |
+
$metadata = $payment_intent['metadata'];
|
| 227 |
+
$metadata['order_id'] = $order->ID;
|
| 228 |
+
$metadata['return_url'] = tribe( Webhook_Endpoint::class )->get_route_url();
|
| 229 |
+
|
| 230 |
+
$events_in_order = array_unique( array_filter( wp_list_pluck( $order->items, 'event_id' ) ) );
|
| 231 |
+
$tickets_in_order = array_unique( array_filter( wp_list_pluck( $order->items, 'ticket_id' ) ) );
|
| 232 |
+
$ticket_names = array_map(
|
| 233 |
+
static function ( $item ) {
|
| 234 |
+
return get_the_title( $item );
|
| 235 |
+
},
|
| 236 |
+
$tickets_in_order
|
| 237 |
+
);
|
| 238 |
+
|
| 239 |
+
$metadata[ 'purchaser_name' ] = $order->purchaser_name;
|
| 240 |
+
$metadata[ 'purchaser_email' ] = $order->purchaser_email;
|
| 241 |
+
$metadata[ 'event_name' ] = get_post( current( $events_in_order ) )->post_title;
|
| 242 |
+
$metadata[ 'event_url' ] = get_post_permalink( current( $events_in_order ) );
|
| 243 |
+
$metadata[ 'ticket_names' ] = implode( $ticket_names, ' ,' );
|
| 244 |
+
|
| 245 |
+
/**
|
| 246 |
+
* Filter the updated metadata for a completed order's payment intent.
|
| 247 |
+
*
|
| 248 |
+
* @since TBD
|
| 249 |
+
*
|
| 250 |
+
* @param \WP_Post $order The Order data.
|
| 251 |
+
* @param array $payment_intent The Payment intent.
|
| 252 |
+
*/
|
| 253 |
+
return apply_filters( 'tec_tickets_commerce_stripe_update_payment_intent_metadata', $metadata, $order, $payment_intent );
|
| 254 |
+
}
|
| 255 |
}
|
src/Tickets/Commerce/Order.php
CHANGED
|
@@ -350,6 +350,7 @@ class Order extends Abstract_Order {
|
|
| 350 |
|
| 351 |
$item['price'] = $ticket_value->get_decimal();
|
| 352 |
$item['sub_total'] = $ticket_value->sub_total( $item['quantity'] )->get_decimal();
|
|
|
|
| 353 |
|
| 354 |
return $item;
|
| 355 |
},
|
| 350 |
|
| 351 |
$item['price'] = $ticket_value->get_decimal();
|
| 352 |
$item['sub_total'] = $ticket_value->sub_total( $item['quantity'] )->get_decimal();
|
| 353 |
+
$item['event_id'] = tribe( Ticket::class )->get_related_event_id( $item['ticket_id'] );
|
| 354 |
|
| 355 |
return $item;
|
| 356 |
},
|
src/Tickets/Commerce/Repositories/Order_Repository.php
CHANGED
|
@@ -487,4 +487,265 @@ class Order_Repository extends Tribe__Repository {
|
|
| 487 |
return null;
|
| 488 |
}
|
| 489 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 490 |
}
|
| 487 |
return null;
|
| 488 |
}
|
| 489 |
|
| 490 |
+
/**
|
| 491 |
+
* Overrides the base method to correctly handle the `order_by` clauses before.
|
| 492 |
+
*
|
| 493 |
+
* @since TBD
|
| 494 |
+
*
|
| 495 |
+
* @return \WP_Query The built query object.
|
| 496 |
+
*/
|
| 497 |
+
protected function build_query_internally() {
|
| 498 |
+
$order_by = Arr::get_in_any( [ $this->query_args, $this->default_args ], 'orderby', 'event_date' );
|
| 499 |
+
unset( $this->query_args['orderby'], $this->default_args['order_by'] );
|
| 500 |
+
|
| 501 |
+
$this->handle_order_by( $order_by );
|
| 502 |
+
|
| 503 |
+
return parent::build_query_internally();
|
| 504 |
+
}
|
| 505 |
+
|
| 506 |
+
/**
|
| 507 |
+
* Handles the `order_by` clauses for events
|
| 508 |
+
*
|
| 509 |
+
* @since TBD
|
| 510 |
+
*
|
| 511 |
+
* @param string $order_by The key used to order items.
|
| 512 |
+
*/
|
| 513 |
+
public function handle_order_by( $order_by ) {
|
| 514 |
+
$check_orderby = $order_by;
|
| 515 |
+
|
| 516 |
+
if ( ! is_array( $check_orderby ) ) {
|
| 517 |
+
$check_orderby = explode( ' ', $check_orderby );
|
| 518 |
+
}
|
| 519 |
+
|
| 520 |
+
$after = false;
|
| 521 |
+
$loop = 0;
|
| 522 |
+
|
| 523 |
+
foreach ( $check_orderby as $key => $value ) {
|
| 524 |
+
$order_by = is_numeric( $key ) ? $value : $key;
|
| 525 |
+
$default_order = Arr::get_in_any( [ $this->query_args, $this->default_args ], 'order', 'ASC' );
|
| 526 |
+
$order = is_numeric( $key ) ? $default_order : $value;
|
| 527 |
+
|
| 528 |
+
// Let the first applied ORDER BY clause override the existing ones, then stack the ORDER BY clauses.
|
| 529 |
+
$override = $loop === 0;
|
| 530 |
+
|
| 531 |
+
switch ( $order_by ) {
|
| 532 |
+
case 'purchaser_full_name':
|
| 533 |
+
$this->order_by_purchaser_full_name( $order, $after, $override );
|
| 534 |
+
break;
|
| 535 |
+
case 'purchaser_email':
|
| 536 |
+
$this->order_by_purchaser_email( $order, $after, $override );
|
| 537 |
+
break;
|
| 538 |
+
case 'total_value':
|
| 539 |
+
$this->order_by_total_value( $order, $after, $override );
|
| 540 |
+
break;
|
| 541 |
+
case 'status':
|
| 542 |
+
$this->order_by_status( $order, $after, $override );
|
| 543 |
+
break;
|
| 544 |
+
case 'gateway':
|
| 545 |
+
$this->order_by_gateway( $order, $after, $override );
|
| 546 |
+
break;
|
| 547 |
+
case 'gateway_id':
|
| 548 |
+
$this->order_by_gateway_id( $order, $after, $override );
|
| 549 |
+
break;
|
| 550 |
+
case '__none':
|
| 551 |
+
unset( $this->query_args['orderby'] );
|
| 552 |
+
unset( $this->query_args['order'] );
|
| 553 |
+
break;
|
| 554 |
+
default:
|
| 555 |
+
$after = $after || 1 === $loop;
|
| 556 |
+
if ( empty( $this->query_args['orderby'] ) ) {
|
| 557 |
+
// In some versions of WP, [ $order_by, $order ] doesn't work as expected. Using explict value setting instead.
|
| 558 |
+
$this->query_args['orderby'] = $order_by;
|
| 559 |
+
$this->query_args['order'] = $order;
|
| 560 |
+
} else {
|
| 561 |
+
$add = [ $order_by => $order ];
|
| 562 |
+
// Make sure all `orderby` clauses have the shape `<orderby> => <order>`.
|
| 563 |
+
$normalized = [];
|
| 564 |
+
|
| 565 |
+
if ( ! is_array( $this->query_args['orderby'] ) ) {
|
| 566 |
+
$this->query_args['orderby'] = [
|
| 567 |
+
$this->query_args['orderby'] => $this->query_args['order']
|
| 568 |
+
];
|
| 569 |
+
}
|
| 570 |
+
|
| 571 |
+
foreach ( $this->query_args['orderby'] as $k => $v ) {
|
| 572 |
+
$the_order_by = is_numeric( $k ) ? $v : $k;
|
| 573 |
+
$the_order = is_numeric( $k ) ? $default_order : $v;
|
| 574 |
+
$normalized[ $the_order_by ] = $the_order;
|
| 575 |
+
}
|
| 576 |
+
$this->query_args['orderby'] = $normalized;
|
| 577 |
+
$this->query_args['orderby'] = array_merge( $this->query_args['orderby'], $add );
|
| 578 |
+
}
|
| 579 |
+
}
|
| 580 |
+
}
|
| 581 |
+
}
|
| 582 |
+
|
| 583 |
+
/**
|
| 584 |
+
* Sets up the query filters to order items by the purchaser email.
|
| 585 |
+
*
|
| 586 |
+
* @since TBD
|
| 587 |
+
*
|
| 588 |
+
* @param string $key The meta key that is used for the sorting.
|
| 589 |
+
* @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
|
| 590 |
+
* specified in the current query or default arguments.
|
| 591 |
+
* @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
|
| 592 |
+
* defaults to `false` to prepend the duration clause to the existing ORDER BY
|
| 593 |
+
* clauses.
|
| 594 |
+
* @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
|
| 595 |
+
* `true` to override existing ORDER BY clauses.
|
| 596 |
+
*/
|
| 597 |
+
protected function order_by_key( $meta_key, $order = null, $after = false, $override = true ) {
|
| 598 |
+
global $wpdb;
|
| 599 |
+
|
| 600 |
+
$meta_alias = "sorted_by_{$meta_key}";
|
| 601 |
+
$filter_id = "order_by_{$meta_alias}";
|
| 602 |
+
$postmeta_table = "orderby_{$meta_alias}_meta";
|
| 603 |
+
|
| 604 |
+
$this->filter_query->join(
|
| 605 |
+
$wpdb->prepare(
|
| 606 |
+
"
|
| 607 |
+
LEFT JOIN {$wpdb->postmeta} AS {$postmeta_table}
|
| 608 |
+
ON (
|
| 609 |
+
{$postmeta_table}.post_id = {$wpdb->posts}.ID
|
| 610 |
+
AND {$postmeta_table}.meta_key = %s
|
| 611 |
+
)
|
| 612 |
+
",
|
| 613 |
+
$meta_key
|
| 614 |
+
),
|
| 615 |
+
$filter_id,
|
| 616 |
+
true
|
| 617 |
+
);
|
| 618 |
+
|
| 619 |
+
$order = $this->get_query_order_type( $order );
|
| 620 |
+
|
| 621 |
+
$this->filter_query->orderby( [ $meta_alias => $order ], $filter_id, $override, $after );
|
| 622 |
+
$this->filter_query->fields( "{$postmeta_table}.meta_value AS {$meta_alias}", $filter_id, $override );
|
| 623 |
+
}
|
| 624 |
+
|
| 625 |
+
/**
|
| 626 |
+
* Sets up the query filters to order items by purchaser name.
|
| 627 |
+
*
|
| 628 |
+
* @since TBD
|
| 629 |
+
*
|
| 630 |
+
* @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
|
| 631 |
+
* specified in the current query or default arguments.
|
| 632 |
+
* @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
|
| 633 |
+
* defaults to `false` to prepend the duration clause to the existing ORDER BY
|
| 634 |
+
* clauses.
|
| 635 |
+
* @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
|
| 636 |
+
* `true` to override existing ORDER BY clauses.
|
| 637 |
+
*/
|
| 638 |
+
protected function order_by_purchaser_full_name( $order = null, $after = false, $override = true ) {
|
| 639 |
+
$this->order_by_key( Order::$purchaser_full_name_meta_key, $order, $after, $override );
|
| 640 |
+
}
|
| 641 |
+
|
| 642 |
+
/**
|
| 643 |
+
* Sets up the query filters to order items by the purchaser email.
|
| 644 |
+
*
|
| 645 |
+
* @since TBD
|
| 646 |
+
*
|
| 647 |
+
* @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
|
| 648 |
+
* specified in the current query or default arguments.
|
| 649 |
+
* @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
|
| 650 |
+
* defaults to `false` to prepend the duration clause to the existing ORDER BY
|
| 651 |
+
* clauses.
|
| 652 |
+
* @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
|
| 653 |
+
* `true` to override existing ORDER BY clauses.
|
| 654 |
+
*/
|
| 655 |
+
protected function order_by_purchaser_email( $order = null, $after = false, $override = true ) {
|
| 656 |
+
$this->order_by_key( Order::$purchaser_email_meta_key, $order, $after, $override );
|
| 657 |
+
}
|
| 658 |
+
|
| 659 |
+
/**
|
| 660 |
+
* Sets up the query filters to order items by the total value.
|
| 661 |
+
*
|
| 662 |
+
* @since TBD
|
| 663 |
+
*
|
| 664 |
+
* @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
|
| 665 |
+
* specified in the current query or default arguments.
|
| 666 |
+
* @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
|
| 667 |
+
* defaults to `false` to prepend the duration clause to the existing ORDER BY
|
| 668 |
+
* clauses.
|
| 669 |
+
* @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
|
| 670 |
+
* `true` to override existing ORDER BY clauses.
|
| 671 |
+
*/
|
| 672 |
+
protected function order_by_total_value( $order = null, $after = false, $override = true ) {
|
| 673 |
+
$this->order_by_key( Order::$total_value_meta_key, $order, $after, $override );
|
| 674 |
+
}
|
| 675 |
+
|
| 676 |
+
/**
|
| 677 |
+
* Sets up the query filters to order items by the gateway id.
|
| 678 |
+
*
|
| 679 |
+
* @since TBD
|
| 680 |
+
*
|
| 681 |
+
* @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
|
| 682 |
+
* specified in the current query or default arguments.
|
| 683 |
+
* @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
|
| 684 |
+
* defaults to `false` to prepend the duration clause to the existing ORDER BY
|
| 685 |
+
* clauses.
|
| 686 |
+
* @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
|
| 687 |
+
* `true` to override existing ORDER BY clauses.
|
| 688 |
+
*/
|
| 689 |
+
protected function order_by_gateway_id( $order = null, $after = false, $override = true ) {
|
| 690 |
+
$this->order_by_key( Order::$gateway_order_id_meta_key, $order, $after, $override );
|
| 691 |
+
}
|
| 692 |
+
|
| 693 |
+
/**
|
| 694 |
+
* Sets up the query filters to order items by the gatway name.
|
| 695 |
+
*
|
| 696 |
+
* @since TBD
|
| 697 |
+
*
|
| 698 |
+
* @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
|
| 699 |
+
* specified in the current query or default arguments.
|
| 700 |
+
* @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
|
| 701 |
+
* defaults to `false` to prepend the duration clause to the existing ORDER BY
|
| 702 |
+
* clauses.
|
| 703 |
+
* @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
|
| 704 |
+
* `true` to override existing ORDER BY clauses.
|
| 705 |
+
*/
|
| 706 |
+
protected function order_by_gateway( $order = null, $after = false, $override = true ) {
|
| 707 |
+
$this->order_by_key( Order::$gateway_meta_key, $order, $after, $override );
|
| 708 |
+
}
|
| 709 |
+
|
| 710 |
+
/**
|
| 711 |
+
* Sets up the query filters to order items by the status.
|
| 712 |
+
*
|
| 713 |
+
* @since TBD
|
| 714 |
+
*
|
| 715 |
+
* @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
|
| 716 |
+
* specified in the current query or default arguments.
|
| 717 |
+
* @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
|
| 718 |
+
* defaults to `false` to prepend the duration clause to the existing ORDER BY
|
| 719 |
+
* clauses.
|
| 720 |
+
* @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
|
| 721 |
+
* `true` to override existing ORDER BY clauses.
|
| 722 |
+
*/
|
| 723 |
+
protected function order_by_status( $order = null, $after = false, $override = true ) {
|
| 724 |
+
global $wpdb;
|
| 725 |
+
|
| 726 |
+
$meta_alias = 'status';
|
| 727 |
+
$filter_id = "order_by_{$meta_alias}";
|
| 728 |
+
$prefix = 'tec-' . Commerce::ABBR . '-';
|
| 729 |
+
|
| 730 |
+
$order = $this->get_query_order_type( $order );
|
| 731 |
+
|
| 732 |
+
$this->filter_query->orderby( [ $meta_alias => $order ], $filter_id, $override, $after );
|
| 733 |
+
$this->filter_query->fields( "TRIM( '{$prefix}' from {$wpdb->posts}.post_status ) AS {$meta_alias}", $filter_id, $override );
|
| 734 |
+
}
|
| 735 |
+
|
| 736 |
+
/**
|
| 737 |
+
* Get the order param for the current orderby clause.
|
| 738 |
+
*
|
| 739 |
+
* @since TBD
|
| 740 |
+
*
|
| 741 |
+
* @param $order string|null order type value either 'ASC' or 'DESC'.
|
| 742 |
+
*
|
| 743 |
+
* @return string
|
| 744 |
+
*/
|
| 745 |
+
protected function get_query_order_type( $order = null ) {
|
| 746 |
+
return $order === null
|
| 747 |
+
? Arr::get_in_any( [ $this->query_args, $this->default_args ], 'order', 'ASC' )
|
| 748 |
+
: $order;
|
| 749 |
+
}
|
| 750 |
+
|
| 751 |
}
|
src/Tickets/Commerce/Ticket.php
CHANGED
|
@@ -900,4 +900,17 @@ class Ticket {
|
|
| 900 |
|
| 901 |
return $this->get_template()->template( 'price', [ 'price' => $value ], false );
|
| 902 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 903 |
}
|
| 900 |
|
| 901 |
return $this->get_template()->template( 'price', [ 'price' => $value ], false );
|
| 902 |
}
|
| 903 |
+
|
| 904 |
+
/**
|
| 905 |
+
* Get the event ID for the ticket.
|
| 906 |
+
*
|
| 907 |
+
* @since TBD
|
| 908 |
+
*
|
| 909 |
+
* @param int $ticket_id The ticket post ID.
|
| 910 |
+
*
|
| 911 |
+
* @return mixed
|
| 912 |
+
*/
|
| 913 |
+
public function get_related_event_id( $ticket_id ) {
|
| 914 |
+
return get_post_meta( $ticket_id, static::$event_relation_meta_key, true );
|
| 915 |
+
}
|
| 916 |
}
|
src/Tribe/Attendee_Repository.php
CHANGED
|
@@ -217,7 +217,7 @@ class Tribe__Tickets__Attendee_Repository extends Tribe__Repository {
|
|
| 217 |
return [
|
| 218 |
'rsvp' => '_tribe_rsvp_full_name',
|
| 219 |
'tribe-commerce' => '_tribe_tpp_full_name',
|
| 220 |
-
\TEC\Tickets\Commerce::PROVIDER => \TEC\Tickets\Commerce\Attendee::$
|
| 221 |
];
|
| 222 |
}
|
| 223 |
|
|
@@ -234,7 +234,7 @@ class Tribe__Tickets__Attendee_Repository extends Tribe__Repository {
|
|
| 234 |
return [
|
| 235 |
'rsvp' => '_tribe_rsvp_email',
|
| 236 |
'tribe-commerce' => '_tribe_tpp_email',
|
| 237 |
-
\TEC\Tickets\Commerce::PROVIDER => \TEC\Tickets\Commerce\Attendee::$
|
| 238 |
];
|
| 239 |
}
|
| 240 |
|
|
@@ -529,7 +529,7 @@ class Tribe__Tickets__Attendee_Repository extends Tribe__Repository {
|
|
| 529 |
public function filter_by_order_status( $order_status, $type = 'in' ) {
|
| 530 |
$statuses = Arr::list_to_array( $order_status );
|
| 531 |
|
| 532 |
-
$has_manage_access =
|
| 533 |
|
| 534 |
// map the `any` meta-status
|
| 535 |
if ( 1 === count( $statuses ) && 'any' === $statuses[0] ) {
|
|
@@ -1307,4 +1307,231 @@ class Tribe__Tickets__Attendee_Repository extends Tribe__Repository {
|
|
| 1307 |
|
| 1308 |
$this->attendee_provider->send_tickets_email_for_attendees( $attendee_tickets, $send_ticket_email_args );
|
| 1309 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1310 |
}
|
| 217 |
return [
|
| 218 |
'rsvp' => '_tribe_rsvp_full_name',
|
| 219 |
'tribe-commerce' => '_tribe_tpp_full_name',
|
| 220 |
+
\TEC\Tickets\Commerce::PROVIDER => \TEC\Tickets\Commerce\Attendee::$full_name_meta_key,
|
| 221 |
];
|
| 222 |
}
|
| 223 |
|
| 234 |
return [
|
| 235 |
'rsvp' => '_tribe_rsvp_email',
|
| 236 |
'tribe-commerce' => '_tribe_tpp_email',
|
| 237 |
+
\TEC\Tickets\Commerce::PROVIDER => \TEC\Tickets\Commerce\Attendee::$email_meta_key,
|
| 238 |
];
|
| 239 |
}
|
| 240 |
|
| 529 |
public function filter_by_order_status( $order_status, $type = 'in' ) {
|
| 530 |
$statuses = Arr::list_to_array( $order_status );
|
| 531 |
|
| 532 |
+
$has_manage_access = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
|
| 533 |
|
| 534 |
// map the `any` meta-status
|
| 535 |
if ( 1 === count( $statuses ) && 'any' === $statuses[0] ) {
|
| 1307 |
|
| 1308 |
$this->attendee_provider->send_tickets_email_for_attendees( $attendee_tickets, $send_ticket_email_args );
|
| 1309 |
}
|
| 1310 |
+
|
| 1311 |
+
/**
|
| 1312 |
+
* Overrides the base method to correctly handle the `order_by` clauses before.
|
| 1313 |
+
*
|
| 1314 |
+
* The Event repository handles ordering with some non trivial logic and some query filtering.
|
| 1315 |
+
* To avoid the "stacking" of `orderby` clauses and filters the query filters are added at the very last moment,
|
| 1316 |
+
* right before building the query.
|
| 1317 |
+
*
|
| 1318 |
+
* @since TBD
|
| 1319 |
+
*
|
| 1320 |
+
* @return WP_Query The built query object.
|
| 1321 |
+
*/
|
| 1322 |
+
protected function build_query_internally() {
|
| 1323 |
+
$order_by = Arr::get_in_any( [ $this->query_args, $this->default_args ], 'orderby' );
|
| 1324 |
+
unset( $this->query_args['orderby'], $this->default_args['order_by'] );
|
| 1325 |
+
|
| 1326 |
+
$this->handle_order_by( $order_by );
|
| 1327 |
+
|
| 1328 |
+
return parent::build_query_internally();
|
| 1329 |
+
}
|
| 1330 |
+
|
| 1331 |
+
/**
|
| 1332 |
+
* Handles the `order_by` clauses for events
|
| 1333 |
+
*
|
| 1334 |
+
* @since TBD
|
| 1335 |
+
*
|
| 1336 |
+
* @param string $order_by The key used to order events; e.g. `event_date` to order events by start date.
|
| 1337 |
+
*/
|
| 1338 |
+
public function handle_order_by( $order_by ) {
|
| 1339 |
+
$check_orderby = $order_by;
|
| 1340 |
+
|
| 1341 |
+
if ( ! is_array( $check_orderby ) ) {
|
| 1342 |
+
$check_orderby = explode( ' ', $check_orderby );
|
| 1343 |
+
}
|
| 1344 |
+
|
| 1345 |
+
$after = false;
|
| 1346 |
+
$loop = 0;
|
| 1347 |
+
|
| 1348 |
+
foreach ( $check_orderby as $key => $value ) {
|
| 1349 |
+
$order_by = is_numeric( $key ) ? $value : $key;
|
| 1350 |
+
$default_order = Arr::get_in_any( [ $this->query_args, $this->default_args ], 'order', 'ASC' );
|
| 1351 |
+
$order = is_numeric( $key ) ? $default_order : $value;
|
| 1352 |
+
|
| 1353 |
+
// Let the first applied ORDER BY clause override the existing ones, then stack the ORDER BY clauses.
|
| 1354 |
+
$override = $loop === 0;
|
| 1355 |
+
|
| 1356 |
+
switch ( $order_by ) {
|
| 1357 |
+
case 'security_code':
|
| 1358 |
+
$this->order_by_security_code( $order, $after, $override );
|
| 1359 |
+
break;
|
| 1360 |
+
case 'check_in':
|
| 1361 |
+
$this->order_by_check_in( $order, $after, $override );
|
| 1362 |
+
break;
|
| 1363 |
+
case 'rsvp_status':
|
| 1364 |
+
$this->order_by_rsvp_status( $order, $after, $override );
|
| 1365 |
+
break;
|
| 1366 |
+
case '__none':
|
| 1367 |
+
unset( $this->query_args['orderby'] );
|
| 1368 |
+
unset( $this->query_args['order'] );
|
| 1369 |
+
break;
|
| 1370 |
+
default:
|
| 1371 |
+
$after = $after || 1 === $loop;
|
| 1372 |
+
if ( empty( $this->query_args['orderby'] ) ) {
|
| 1373 |
+
// In some versions of WP, [ $order_by, $order ] doesn't work as expected. Using explict value setting instead.
|
| 1374 |
+
$this->query_args['orderby'] = $order_by;
|
| 1375 |
+
$this->query_args['order'] = $order;
|
| 1376 |
+
} else {
|
| 1377 |
+
$add = [ $order_by => $order ];
|
| 1378 |
+
// Make sure all `orderby` clauses have the shape `<orderby> => <order>`.
|
| 1379 |
+
$normalized = [];
|
| 1380 |
+
|
| 1381 |
+
if ( ! is_array( $this->query_args['orderby'] ) ) {
|
| 1382 |
+
$this->query_args['orderby'] = [
|
| 1383 |
+
$this->query_args['orderby'] => $this->query_args['order']
|
| 1384 |
+
];
|
| 1385 |
+
}
|
| 1386 |
+
|
| 1387 |
+
foreach ( $this->query_args['orderby'] as $k => $v ) {
|
| 1388 |
+
$the_order_by = is_numeric( $k ) ? $v : $k;
|
| 1389 |
+
$the_order = is_numeric( $k ) ? $default_order : $v;
|
| 1390 |
+
$normalized[ $the_order_by ] = $the_order;
|
| 1391 |
+
}
|
| 1392 |
+
$this->query_args['orderby'] = $normalized;
|
| 1393 |
+
$this->query_args['orderby'] = array_merge( $this->query_args['orderby'], $add );
|
| 1394 |
+
}
|
| 1395 |
+
}
|
| 1396 |
+
}
|
| 1397 |
+
}
|
| 1398 |
+
|
| 1399 |
+
/**
|
| 1400 |
+
* Sets up the query filters to order attendees by the security code meta.
|
| 1401 |
+
*
|
| 1402 |
+
* @since TBD
|
| 1403 |
+
*
|
| 1404 |
+
* @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
|
| 1405 |
+
* specified in the current query or default arguments.
|
| 1406 |
+
* @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
|
| 1407 |
+
* defaults to `false` to prepend the duration clause to the existing ORDER BY
|
| 1408 |
+
* clauses.
|
| 1409 |
+
* @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
|
| 1410 |
+
* `true` to override existing ORDER BY clauses.
|
| 1411 |
+
*/
|
| 1412 |
+
protected function order_by_security_code( $order = null, $after = false, $override = true ) {
|
| 1413 |
+
global $wpdb;
|
| 1414 |
+
|
| 1415 |
+
$meta_alias = 'security_code';
|
| 1416 |
+
$meta_keys_in = $this->prepare_interval( $this->security_code_keys() );
|
| 1417 |
+
$postmeta_table = "orderby_{$meta_alias}_meta";
|
| 1418 |
+
$filter_id = 'order_by_security_code';
|
| 1419 |
+
|
| 1420 |
+
$this->filter_query->join(
|
| 1421 |
+
"
|
| 1422 |
+
LEFT JOIN {$wpdb->postmeta} AS {$postmeta_table}
|
| 1423 |
+
ON (
|
| 1424 |
+
{$postmeta_table}.post_id = {$wpdb->posts}.ID
|
| 1425 |
+
AND {$postmeta_table}.meta_key IN {$meta_keys_in}
|
| 1426 |
+
)
|
| 1427 |
+
"
|
| 1428 |
+
,
|
| 1429 |
+
$filter_id,
|
| 1430 |
+
true
|
| 1431 |
+
);
|
| 1432 |
+
|
| 1433 |
+
$order = $this->get_query_order_type( $order );
|
| 1434 |
+
|
| 1435 |
+
$this->filter_query->orderby( [ $meta_alias => $order ], $filter_id, true, $after );
|
| 1436 |
+
$this->filter_query->fields( "{$postmeta_table}.meta_value AS {$meta_alias}", $filter_id, $override );
|
| 1437 |
+
}
|
| 1438 |
+
|
| 1439 |
+
/**
|
| 1440 |
+
* Sets up the query filters to order attendees by the check-in status.
|
| 1441 |
+
*
|
| 1442 |
+
* @since TBD
|
| 1443 |
+
*
|
| 1444 |
+
* @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
|
| 1445 |
+
* specified in the current query or default arguments.
|
| 1446 |
+
* @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
|
| 1447 |
+
* defaults to `false` to prepend the duration clause to the existing ORDER BY
|
| 1448 |
+
* clauses.
|
| 1449 |
+
* @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
|
| 1450 |
+
* `true` to override existing ORDER BY clauses.
|
| 1451 |
+
*/
|
| 1452 |
+
protected function order_by_check_in( $order = null, $after = false, $override = true ) {
|
| 1453 |
+
global $wpdb;
|
| 1454 |
+
|
| 1455 |
+
$meta_alias = 'check_in';
|
| 1456 |
+
$meta_keys_in = $this->prepare_interval( $this->checked_in_keys() );
|
| 1457 |
+
|
| 1458 |
+
$postmeta_table = "orderby_{$meta_alias}_meta";
|
| 1459 |
+
$filter_id = "order_by_{$meta_alias}";
|
| 1460 |
+
|
| 1461 |
+
$this->filter_query->join(
|
| 1462 |
+
"
|
| 1463 |
+
LEFT JOIN {$wpdb->postmeta} AS {$postmeta_table}
|
| 1464 |
+
ON (
|
| 1465 |
+
{$postmeta_table}.post_id = {$wpdb->posts}.ID
|
| 1466 |
+
AND {$postmeta_table}.meta_key IN {$meta_keys_in}
|
| 1467 |
+
)
|
| 1468 |
+
"
|
| 1469 |
+
,
|
| 1470 |
+
$filter_id,
|
| 1471 |
+
true
|
| 1472 |
+
);
|
| 1473 |
+
|
| 1474 |
+
$order = $this->get_query_order_type( $order );
|
| 1475 |
+
|
| 1476 |
+
$this->filter_query->orderby( [ $meta_alias => $order ], $filter_id, true, $after );
|
| 1477 |
+
$this->filter_query->fields( "{$postmeta_table}.meta_value AS {$meta_alias}", $filter_id, $override );
|
| 1478 |
+
}
|
| 1479 |
+
|
| 1480 |
+
/**
|
| 1481 |
+
* Sets up the query filters to order attendees by the order status.
|
| 1482 |
+
*
|
| 1483 |
+
* @since TBD
|
| 1484 |
+
*
|
| 1485 |
+
* @param string $order The order direction, either `ASC` or `DESC`; defaults to `null` to use the order
|
| 1486 |
+
* specified in the current query or default arguments.
|
| 1487 |
+
* @param bool $after Whether to append the duration ORDER BY clause to the existing clauses or not;
|
| 1488 |
+
* defaults to `false` to prepend the duration clause to the existing ORDER BY
|
| 1489 |
+
* clauses.
|
| 1490 |
+
* @param bool $override Whether to override existing ORDER BY clauses with this one or not; default to
|
| 1491 |
+
* `true` to override existing ORDER BY clauses.
|
| 1492 |
+
*/
|
| 1493 |
+
protected function order_by_rsvp_status( $order = null, $after = false, $override = true ) {
|
| 1494 |
+
global $wpdb;
|
| 1495 |
+
|
| 1496 |
+
$meta_alias = 'rsvp_status';
|
| 1497 |
+
$meta_key = Tribe__Tickets__RSVP::ATTENDEE_RSVP_KEY;
|
| 1498 |
+
|
| 1499 |
+
$postmeta_table = "orderby_{$meta_alias}";
|
| 1500 |
+
$filter_id = "order_by_{$meta_alias}";
|
| 1501 |
+
|
| 1502 |
+
$this->filter_query->join(
|
| 1503 |
+
$wpdb->prepare(
|
| 1504 |
+
"
|
| 1505 |
+
LEFT JOIN {$wpdb->postmeta} AS {$postmeta_table}
|
| 1506 |
+
ON (
|
| 1507 |
+
{$postmeta_table}.post_id = {$wpdb->posts}.ID
|
| 1508 |
+
AND {$postmeta_table}.meta_key = %s
|
| 1509 |
+
)
|
| 1510 |
+
",
|
| 1511 |
+
$meta_key
|
| 1512 |
+
),
|
| 1513 |
+
$filter_id,
|
| 1514 |
+
true
|
| 1515 |
+
);
|
| 1516 |
+
|
| 1517 |
+
$order = $this->get_query_order_type( $order );
|
| 1518 |
+
|
| 1519 |
+
$this->filter_query->orderby( [ $meta_alias => $order ], $filter_id, $override, $after );
|
| 1520 |
+
$this->filter_query->fields( "{$postmeta_table}.meta_value AS {$meta_alias}", $filter_id, $override );
|
| 1521 |
+
}
|
| 1522 |
+
|
| 1523 |
+
/**
|
| 1524 |
+
* Get the order param for the current orderby clause.
|
| 1525 |
+
*
|
| 1526 |
+
* @since TBD
|
| 1527 |
+
*
|
| 1528 |
+
* @param $order string|null order type value either 'ASC' or 'DESC'.
|
| 1529 |
+
*
|
| 1530 |
+
* @return string
|
| 1531 |
+
*/
|
| 1532 |
+
protected function get_query_order_type( $order = null ) {
|
| 1533 |
+
return $order === null
|
| 1534 |
+
? Arr::get_in_any( [ $this->query_args, $this->default_args ], 'order', 'ASC' )
|
| 1535 |
+
: $order;
|
| 1536 |
+
}
|
| 1537 |
}
|
src/Tribe/Attendees_Table.php
CHANGED
|
@@ -956,6 +956,15 @@ class Tribe__Tickets__Attendees_Table extends WP_List_Table {
|
|
| 956 |
];
|
| 957 |
}
|
| 958 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 959 |
$item_data = Tribe__Tickets__Tickets::get_event_attendees_by_args( $event_id, $args );
|
| 960 |
|
| 961 |
$items = [];
|
|
@@ -1066,4 +1075,47 @@ class Tribe__Tickets__Attendees_Table extends WP_List_Table {
|
|
| 1066 |
|
| 1067 |
echo $search_box;
|
| 1068 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1069 |
}
|
| 956 |
];
|
| 957 |
}
|
| 958 |
|
| 959 |
+
// Setup sorting args.
|
| 960 |
+
if ( tribe_get_request_var( 'orderby' ) ) {
|
| 961 |
+
$args['orderby'] = tribe_get_request_var( 'orderby' );
|
| 962 |
+
}
|
| 963 |
+
|
| 964 |
+
if ( tribe_get_request_var( 'order' ) ) {
|
| 965 |
+
$args['order'] = tribe_get_request_var( 'order' );
|
| 966 |
+
}
|
| 967 |
+
|
| 968 |
$item_data = Tribe__Tickets__Tickets::get_event_attendees_by_args( $event_id, $args );
|
| 969 |
|
| 970 |
$items = [];
|
| 1075 |
|
| 1076 |
echo $search_box;
|
| 1077 |
}
|
| 1078 |
+
|
| 1079 |
+
/**
|
| 1080 |
+
* Return list of sortable columns.
|
| 1081 |
+
*
|
| 1082 |
+
* @since TBD
|
| 1083 |
+
*
|
| 1084 |
+
* @return array
|
| 1085 |
+
*/
|
| 1086 |
+
public function get_sortable_columns() {
|
| 1087 |
+
return [
|
| 1088 |
+
'ticket' => 'id',
|
| 1089 |
+
'security' => 'security_code',
|
| 1090 |
+
'check_in' => 'check_in',
|
| 1091 |
+
'status' => $this->is_status_sortable()
|
| 1092 |
+
];
|
| 1093 |
+
}
|
| 1094 |
+
|
| 1095 |
+
/**
|
| 1096 |
+
* Check if `Status` column is sortable or not.
|
| 1097 |
+
*
|
| 1098 |
+
* @since TBD
|
| 1099 |
+
*
|
| 1100 |
+
* @return false|string
|
| 1101 |
+
*/
|
| 1102 |
+
protected function is_status_sortable() {
|
| 1103 |
+
$event_id = tribe_get_request_var( 'event_id' );
|
| 1104 |
+
$providers = Tribe__Tickets__Tickets::get_active_providers_for_post( $event_id );
|
| 1105 |
+
|
| 1106 |
+
if ( count( $providers ) > 1 ) {
|
| 1107 |
+
return false;
|
| 1108 |
+
}
|
| 1109 |
+
|
| 1110 |
+
/** @var \Tribe__Tickets__Status__Manager $status */
|
| 1111 |
+
$status = tribe( 'tickets.status' );
|
| 1112 |
+
$provider = $status->get_provider_slug( current( $providers ) );
|
| 1113 |
+
|
| 1114 |
+
// For now, disabled for all providers but RSVP, we may remove this logic once we implement sorting for other providers.
|
| 1115 |
+
if ( 'rsvp' !== $provider ) {
|
| 1116 |
+
return false;
|
| 1117 |
+
}
|
| 1118 |
+
|
| 1119 |
+
return $provider . '_status';
|
| 1120 |
+
}
|
| 1121 |
}
|
src/Tribe/Editor/Blocks/Rsvp.php
CHANGED
|
@@ -415,7 +415,7 @@ class Tribe__Tickets__Editor__Blocks__Rsvp extends Tribe__Editor__Blocks__Abstra
|
|
| 415 |
continue;
|
| 416 |
}
|
| 417 |
|
| 418 |
-
$has_tickets
|
| 419 |
}
|
| 420 |
|
| 421 |
$order_id = $attendee_details['order_id'];
|
| 415 |
continue;
|
| 416 |
}
|
| 417 |
|
| 418 |
+
$has_tickets = ! is_wp_error( $rsvp->generate_tickets_for( $product_id, $ticket_qty, $attendee_details ) );
|
| 419 |
}
|
| 420 |
|
| 421 |
$order_id = $attendee_details['order_id'];
|
src/Tribe/Editor/Compatibility/Tickets.php
CHANGED
|
@@ -36,6 +36,7 @@ class Tribe__Tickets__Editor__Compatibility__Tickets {
|
|
| 36 |
$post = get_post();
|
| 37 |
if ( $post instanceof WP_Post
|
| 38 |
&& class_exists( '\Elementor\Plugin' )
|
|
|
|
| 39 |
&& \Elementor\Plugin::$instance->documents->get( $post->ID )->is_built_with_elementor()
|
| 40 |
) {
|
| 41 |
return $content;
|
| 36 |
$post = get_post();
|
| 37 |
if ( $post instanceof WP_Post
|
| 38 |
&& class_exists( '\Elementor\Plugin' )
|
| 39 |
+
&& \Elementor\Plugin::$instance->documents->get( $post->ID )
|
| 40 |
&& \Elementor\Plugin::$instance->documents->get( $post->ID )->is_built_with_elementor()
|
| 41 |
) {
|
| 42 |
return $content;
|
src/Tribe/Editor/Template/Overwrite.php
CHANGED
|
@@ -94,6 +94,11 @@ class Tribe__Tickets__Editor__Template__Overwrite {
|
|
| 94 |
public function has_classic_editor( $post_id ) {
|
| 95 |
$is_event = function_exists( 'tribe_is_event' ) && tribe_is_event( $post_id );
|
| 96 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
if ( $is_event && $this->has_early_access_to_blocks() ) {
|
| 98 |
return false;
|
| 99 |
}
|
| 94 |
public function has_classic_editor( $post_id ) {
|
| 95 |
$is_event = function_exists( 'tribe_is_event' ) && tribe_is_event( $post_id );
|
| 96 |
|
| 97 |
+
// If not an event, just check if it has blocks or not.
|
| 98 |
+
if ( ! $is_event ) {
|
| 99 |
+
return ! has_blocks( $post_id );
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
if ( $is_event && $this->has_early_access_to_blocks() ) {
|
| 103 |
return false;
|
| 104 |
}
|
src/Tribe/Main.php
CHANGED
|
@@ -8,7 +8,7 @@ class Tribe__Tickets__Main {
|
|
| 8 |
/**
|
| 9 |
* Current version of this plugin
|
| 10 |
*/
|
| 11 |
-
const VERSION = '5.4.
|
| 12 |
|
| 13 |
/**
|
| 14 |
* Used to store the version history.
|
| 8 |
/**
|
| 9 |
* Current version of this plugin
|
| 10 |
*/
|
| 11 |
+
const VERSION = '5.4.4';
|
| 12 |
|
| 13 |
/**
|
| 14 |
* Used to store the version history.
|
src/Tribe/REST/V1/Attendee_Repository.php
CHANGED
|
@@ -23,7 +23,7 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
|
|
| 23 |
public function __construct() {
|
| 24 |
$this->decorated = tribe( 'tickets.attendee-repository' );
|
| 25 |
$this->decorated->set_formatter( $this );
|
| 26 |
-
$this->decorated->set_query_builder($this);
|
| 27 |
$this->decorated->set_default_args( array_merge(
|
| 28 |
$this->decorated->get_default_args(),
|
| 29 |
array( 'order' => 'ASC', 'orderby' => array( 'id', 'title' ) )
|
|
@@ -39,11 +39,7 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
|
|
| 39 |
* @return WP_Query
|
| 40 |
*/
|
| 41 |
public function build_query( $use_query_builder = true ) {
|
| 42 |
-
$can_view_hidden_attendees =
|
| 43 |
-
|
| 44 |
-
if ( current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' ) ) {
|
| 45 |
-
$can_view_hidden_attendees = true;
|
| 46 |
-
}
|
| 47 |
|
| 48 |
/**
|
| 49 |
* Whether the current user can view hidden attendees,
|
|
@@ -115,7 +111,7 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
|
|
| 115 |
*
|
| 116 |
* @since 4.8
|
| 117 |
*
|
| 118 |
-
* @param mixed $primary_key
|
| 119 |
*
|
| 120 |
* @return array|WP_Error The Attendee data on success, or a WP_Error
|
| 121 |
* detailing why the read failed.
|
|
@@ -131,10 +127,10 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
|
|
| 131 |
$messages = tribe( 'tickets.rest-v1.messages' );
|
| 132 |
|
| 133 |
if ( empty( $found ) ) {
|
| 134 |
-
return new WP_Error( 'attendee-not-found', $messages->get_message( 'attendee-not-found' ),
|
| 135 |
}
|
| 136 |
|
| 137 |
-
if (
|
| 138 |
return $this->format_item( $found[0] );
|
| 139 |
}
|
| 140 |
|
|
@@ -148,7 +144,7 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
|
|
| 148 |
$found_w_cap = $cap_query->get_posts();
|
| 149 |
|
| 150 |
if ( empty( $found_w_cap ) ) {
|
| 151 |
-
return new WP_Error( 'attendee-not-accessible', $messages->get_message( 'attendee-not-accessible' ),
|
| 152 |
}
|
| 153 |
|
| 154 |
$this->decorated->set_query_builder( $this );
|
|
@@ -161,7 +157,7 @@ class Tribe__Tickets__REST__V1__Attendee_Repository
|
|
| 161 |
*
|
| 162 |
* @since 4.8
|
| 163 |
*
|
| 164 |
-
* @param int|WP_Post $id
|
| 165 |
*
|
| 166 |
* @return array|null The attendee information in the REST API format or
|
| 167 |
* `null` if the attendee is invalid.
|
| 23 |
public function __construct() {
|
| 24 |
$this->decorated = tribe( 'tickets.attendee-repository' );
|
| 25 |
$this->decorated->set_formatter( $this );
|
| 26 |
+
$this->decorated->set_query_builder( $this );
|
| 27 |
$this->decorated->set_default_args( array_merge(
|
| 28 |
$this->decorated->get_default_args(),
|
| 29 |
array( 'order' => 'ASC', 'orderby' => array( 'id', 'title' ) )
|
| 39 |
* @return WP_Query
|
| 40 |
*/
|
| 41 |
public function build_query( $use_query_builder = true ) {
|
| 42 |
+
$can_view_hidden_attendees = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
|
| 44 |
/**
|
| 45 |
* Whether the current user can view hidden attendees,
|
| 111 |
*
|
| 112 |
* @since 4.8
|
| 113 |
*
|
| 114 |
+
* @param mixed $primary_key The attendee ID.
|
| 115 |
*
|
| 116 |
* @return array|WP_Error The Attendee data on success, or a WP_Error
|
| 117 |
* detailing why the read failed.
|
| 127 |
$messages = tribe( 'tickets.rest-v1.messages' );
|
| 128 |
|
| 129 |
if ( empty( $found ) ) {
|
| 130 |
+
return new WP_Error( 'attendee-not-found', $messages->get_message( 'attendee-not-found' ), [ 'status' => 404 ] );
|
| 131 |
}
|
| 132 |
|
| 133 |
+
if ( tribe( 'tickets.rest-v1.main' )->request_has_manage_access() ) {
|
| 134 |
return $this->format_item( $found[0] );
|
| 135 |
}
|
| 136 |
|
| 144 |
$found_w_cap = $cap_query->get_posts();
|
| 145 |
|
| 146 |
if ( empty( $found_w_cap ) ) {
|
| 147 |
+
return new WP_Error( 'attendee-not-accessible', $messages->get_message( 'attendee-not-accessible' ), [ 'status' => 401 ] );
|
| 148 |
}
|
| 149 |
|
| 150 |
$this->decorated->set_query_builder( $this );
|
| 157 |
*
|
| 158 |
* @since 4.8
|
| 159 |
*
|
| 160 |
+
* @param int|WP_Post $id The attendee ID.
|
| 161 |
*
|
| 162 |
* @return array|null The attendee information in the REST API format or
|
| 163 |
* `null` if the attendee is invalid.
|
src/Tribe/REST/V1/Endpoints/Attendee_Archive.php
CHANGED
|
@@ -10,7 +10,7 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
|
|
| 10 |
*
|
| 11 |
* While the structure must conform to that used by v2.0 of Swagger the structure can be that of a full document
|
| 12 |
* or that of a document part.
|
| 13 |
-
* The intelligence lies in the "gatherer" of
|
| 14 |
* interface.
|
| 15 |
*
|
| 16 |
* @link http://swagger.io/
|
|
@@ -86,18 +86,13 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
|
|
| 86 |
* @return WP_Error|WP_REST_Response An array containing the data on success or a WP_Error instance on failure.
|
| 87 |
*/
|
| 88 |
public function get( WP_REST_Request $request ) {
|
| 89 |
-
// Early bail: ET Plus must be active to use this endpoint.
|
| 90 |
-
if ( ! class_exists( 'Tribe__Tickets_Plus__Main' ) ) {
|
| 91 |
-
return new WP_REST_Response( __( 'Sorry, Event Tickets Plus must be active to use this endpoint.', 'event-tickets' ), 401 );
|
| 92 |
-
}
|
| 93 |
-
|
| 94 |
$query_args = $request->get_query_params();
|
| 95 |
-
$page
|
| 96 |
-
$per_page
|
| 97 |
|
| 98 |
-
$fetch_args =
|
| 99 |
|
| 100 |
-
$supported_args =
|
| 101 |
'provider' => 'provider',
|
| 102 |
'search' => 's',
|
| 103 |
'post_id' => 'event',
|
|
@@ -119,7 +114,7 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
|
|
| 119 |
'price_min' => 'price_min',
|
| 120 |
'price_max' => 'price_max',
|
| 121 |
'attendee_information_available' => 'has_attendee_meta',
|
| 122 |
-
|
| 123 |
|
| 124 |
foreach ( $supported_args as $request_arg => $query_arg ) {
|
| 125 |
if ( isset( $request[ $request_arg ] ) ) {
|
|
@@ -127,7 +122,7 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
|
|
| 127 |
}
|
| 128 |
}
|
| 129 |
|
| 130 |
-
if (
|
| 131 |
$permission = Tribe__Tickets__REST__V1__Attendee_Repository::PERMISSION_EDITABLE;
|
| 132 |
$fetch_args['post_status'] = Tribe__Utils__Array::get( $fetch_args, 'post_status', 'any' );
|
| 133 |
$fetch_args['event_status'] = Tribe__Utils__Array::get( $fetch_args, 'event_status', 'any' );
|
|
@@ -156,13 +151,12 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
|
|
| 156 |
}
|
| 157 |
|
| 158 |
$query_args = array_intersect_key( $query_args, $this->READ_args() );
|
| 159 |
-
|
| 160 |
-
$found = $query->found();
|
| 161 |
|
| 162 |
if ( 0 === $found && 1 === $page ) {
|
| 163 |
-
$attendees =
|
| 164 |
} elseif ( 1 !== $page && $page * $per_page > $found ) {
|
| 165 |
-
return new WP_Error( 'invalid-page-number', $this->messages->get_message( 'invalid-page-number' ),
|
| 166 |
} else {
|
| 167 |
$attendees = $query
|
| 168 |
->per_page( $per_page )
|
|
@@ -173,7 +167,7 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
|
|
| 173 |
/** @var Tribe__Tickets__REST__V1__Main $main */
|
| 174 |
$main = tribe( 'tickets.rest-v1.main' );
|
| 175 |
|
| 176 |
-
//
|
| 177 |
foreach ( $query_args as $key => &$value ) {
|
| 178 |
if ( is_array( $value ) ) {
|
| 179 |
$value = Tribe__Utils__Array::to_list( $value );
|
|
@@ -185,10 +179,10 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
|
|
| 185 |
$data['total_pages'] = (int) ceil( $found / $per_page );
|
| 186 |
$data['attendees'] = $attendees;
|
| 187 |
|
| 188 |
-
$headers =
|
| 189 |
'X-ET-TOTAL' => $data['total'],
|
| 190 |
'X-ET-TOTAL-PAGES' => $data['total_pages'],
|
| 191 |
-
|
| 192 |
|
| 193 |
return new WP_REST_Response( $data, 200, $headers );
|
| 194 |
}
|
|
@@ -426,9 +420,9 @@ class Tribe__Tickets__REST__V1__Endpoints__Attendee_Archive
|
|
| 426 |
),
|
| 427 |
),
|
| 428 |
'attendee_information_available' => array(
|
| 429 |
-
'description'
|
| 430 |
-
'required'
|
| 431 |
-
'type'
|
| 432 |
),
|
| 433 |
);
|
| 434 |
}
|
| 10 |
*
|
| 11 |
* While the structure must conform to that used by v2.0 of Swagger the structure can be that of a full document
|
| 12 |
* or that of a document part.
|
| 13 |
+
* The intelligence lies in the "gatherer" of information rather than in the single "providers" implementing this
|
| 14 |
* interface.
|
| 15 |
*
|
| 16 |
* @link http://swagger.io/
|
| 86 |
* @return WP_Error|WP_REST_Response An array containing the data on success or a WP_Error instance on failure.
|
| 87 |
*/
|
| 88 |
public function get( WP_REST_Request $request ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
$query_args = $request->get_query_params();
|
| 90 |
+
$page = $request['page'];
|
| 91 |
+
$per_page = $request['per_page'];
|
| 92 |
|
| 93 |
+
$fetch_args = [];
|
| 94 |
|
| 95 |
+
$supported_args = [
|
| 96 |
'provider' => 'provider',
|
| 97 |
'search' => 's',
|
| 98 |
'post_id' => 'event',
|
| 114 |
'price_min' => 'price_min',
|
| 115 |
'price_max' => 'price_max',
|
| 116 |
'attendee_information_available' => 'has_attendee_meta',
|
| 117 |
+
];
|
| 118 |
|
| 119 |
foreach ( $supported_args as $request_arg => $query_arg ) {
|
| 120 |
if ( isset( $request[ $request_arg ] ) ) {
|
| 122 |
}
|
| 123 |
}
|
| 124 |
|
| 125 |
+
if ( tribe( 'tickets.rest-v1.main' )->request_has_manage_access() ) {
|
| 126 |
$permission = Tribe__Tickets__REST__V1__Attendee_Repository::PERMISSION_EDITABLE;
|
| 127 |
$fetch_args['post_status'] = Tribe__Utils__Array::get( $fetch_args, 'post_status', 'any' );
|
| 128 |
$fetch_args['event_status'] = Tribe__Utils__Array::get( $fetch_args, 'event_status', 'any' );
|
| 151 |
}
|
| 152 |
|
| 153 |
$query_args = array_intersect_key( $query_args, $this->READ_args() );
|
| 154 |
+
$found = $query->found();
|
|
|
|
| 155 |
|
| 156 |
if ( 0 === $found && 1 === $page ) {
|
| 157 |
+
$attendees = [];
|
| 158 |
} elseif ( 1 !== $page && $page * $per_page > $found ) {
|
| 159 |
+
return new WP_Error( 'invalid-page-number', $this->messages->get_message( 'invalid-page-number' ), [ 'status' => 400 ] );
|
| 160 |
} else {
|
| 161 |
$attendees = $query
|
| 162 |
->per_page( $per_page )
|
| 167 |
/** @var Tribe__Tickets__REST__V1__Main $main */
|
| 168 |
$main = tribe( 'tickets.rest-v1.main' );
|
| 169 |
|
| 170 |
+
// Make sure all arrays are formatted to by CSV lists.
|
| 171 |
foreach ( $query_args as $key => &$value ) {
|
| 172 |
if ( is_array( $value ) ) {
|
| 173 |
$value = Tribe__Utils__Array::to_list( $value );
|
| 179 |
$data['total_pages'] = (int) ceil( $found / $per_page );
|
| 180 |
$data['attendees'] = $attendees;
|
| 181 |
|
| 182 |
+
$headers = [
|
| 183 |
'X-ET-TOTAL' => $data['total'],
|
| 184 |
'X-ET-TOTAL-PAGES' => $data['total_pages'],
|
| 185 |
+
];
|
| 186 |
|
| 187 |
return new WP_REST_Response( $data, 200, $headers );
|
| 188 |
}
|
| 420 |
),
|
| 421 |
),
|
| 422 |
'attendee_information_available' => array(
|
| 423 |
+
'description' => __( 'Limit results to attendees for tickets that provide attendees the possibility to fill in additional information or not; requires ET+.', 'event-tickets' ),
|
| 424 |
+
'required' => false,
|
| 425 |
+
'type' => 'boolean',
|
| 426 |
),
|
| 427 |
);
|
| 428 |
}
|
src/Tribe/REST/V1/Endpoints/Single_Attendee.php
CHANGED
|
@@ -9,7 +9,11 @@ class Tribe__Tickets__REST__V1__Endpoints__Single_Attendee
|
|
| 9 |
* {@inheritdoc}
|
| 10 |
*/
|
| 11 |
public function get_documentation() {
|
| 12 |
-
$GET_defaults =
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
|
| 14 |
return array(
|
| 15 |
'get' => array(
|
|
@@ -64,8 +68,8 @@ class Tribe__Tickets__REST__V1__Endpoints__Single_Attendee
|
|
| 64 |
* {@inheritdoc}
|
| 65 |
*/
|
| 66 |
public function READ_args() {
|
| 67 |
-
return
|
| 68 |
-
'id' =>
|
| 69 |
'type' => 'integer',
|
| 70 |
'in' => 'path',
|
| 71 |
'description' => __( 'The attendee post ID', 'event-tickets' ),
|
|
@@ -74,9 +78,9 @@ class Tribe__Tickets__REST__V1__Endpoints__Single_Attendee
|
|
| 74 |
* Here we check for a positive int, not an attendee ID to properly
|
| 75 |
* return 404 for missing post in place of 400.
|
| 76 |
*/
|
| 77 |
-
'validate_callback' =>
|
| 78 |
-
|
| 79 |
-
|
| 80 |
}
|
| 81 |
|
| 82 |
/**
|
|
@@ -85,11 +89,6 @@ class Tribe__Tickets__REST__V1__Endpoints__Single_Attendee
|
|
| 85 |
* @since 4.12.0 Returns 401 Unauthorized if Event Tickets Plus is not loaded.
|
| 86 |
*/
|
| 87 |
public function get( WP_REST_Request $request ) {
|
| 88 |
-
// Early bail: ET Plus must be active to use this endpoint.
|
| 89 |
-
if ( ! class_exists( 'Tribe__Tickets_Plus__Main' ) ) {
|
| 90 |
-
return new WP_REST_Response( __( 'Sorry, Event Tickets Plus must be active to use this endpoint.', 'event-tickets' ), 401 );
|
| 91 |
-
}
|
| 92 |
-
|
| 93 |
return tribe_attendees( 'restv1' )->by_primary_key( $request['id'] );
|
| 94 |
}
|
| 95 |
|
|
@@ -356,10 +355,11 @@ class Tribe__Tickets__REST__V1__Endpoints__Single_Attendee
|
|
| 356 |
* Validates the user permission.
|
| 357 |
*
|
| 358 |
* @since 5.3.2
|
|
|
|
| 359 |
*
|
| 360 |
* @return bool
|
| 361 |
*/
|
| 362 |
public function validate_user_permission() {
|
| 363 |
-
return
|
| 364 |
}
|
| 365 |
}
|
| 9 |
* {@inheritdoc}
|
| 10 |
*/
|
| 11 |
public function get_documentation() {
|
| 12 |
+
$GET_defaults = [
|
| 13 |
+
'in' => 'query',
|
| 14 |
+
'default' => '',
|
| 15 |
+
'type' => 'string',
|
| 16 |
+
];
|
| 17 |
|
| 18 |
return array(
|
| 19 |
'get' => array(
|
| 68 |
* {@inheritdoc}
|
| 69 |
*/
|
| 70 |
public function READ_args() {
|
| 71 |
+
return [
|
| 72 |
+
'id' => [
|
| 73 |
'type' => 'integer',
|
| 74 |
'in' => 'path',
|
| 75 |
'description' => __( 'The attendee post ID', 'event-tickets' ),
|
| 78 |
* Here we check for a positive int, not an attendee ID to properly
|
| 79 |
* return 404 for missing post in place of 400.
|
| 80 |
*/
|
| 81 |
+
'validate_callback' => [ $this->validator, 'is_positive_int' ],
|
| 82 |
+
],
|
| 83 |
+
];
|
| 84 |
}
|
| 85 |
|
| 86 |
/**
|
| 89 |
* @since 4.12.0 Returns 401 Unauthorized if Event Tickets Plus is not loaded.
|
| 90 |
*/
|
| 91 |
public function get( WP_REST_Request $request ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
return tribe_attendees( 'restv1' )->by_primary_key( $request['id'] );
|
| 93 |
}
|
| 94 |
|
| 355 |
* Validates the user permission.
|
| 356 |
*
|
| 357 |
* @since 5.3.2
|
| 358 |
+
* @since TBD check the REST API permission via centralized method.
|
| 359 |
*
|
| 360 |
* @return bool
|
| 361 |
*/
|
| 362 |
public function validate_user_permission() {
|
| 363 |
+
return tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
|
| 364 |
}
|
| 365 |
}
|
src/Tribe/REST/V1/Endpoints/Ticket_Archive.php
CHANGED
|
@@ -113,8 +113,8 @@ class Tribe__Tickets__REST__V1__Endpoints__Ticket_Archive
|
|
| 113 |
'attendees_max' => 'attendees_max',
|
| 114 |
'checkedin_min' => 'checkedin_min',
|
| 115 |
'checkedin_max' => 'checkedin_max',
|
| 116 |
-
'capacity_min'
|
| 117 |
-
'capacity_max'
|
| 118 |
);
|
| 119 |
|
| 120 |
foreach ( $supported_args as $request_arg => $query_arg ) {
|
|
@@ -123,7 +123,7 @@ class Tribe__Tickets__REST__V1__Endpoints__Ticket_Archive
|
|
| 123 |
}
|
| 124 |
}
|
| 125 |
|
| 126 |
-
$has_manage_access =
|
| 127 |
|
| 128 |
$attendess_btwn = $checkedin_btwn = $capacity_btwn = null;
|
| 129 |
|
| 113 |
'attendees_max' => 'attendees_max',
|
| 114 |
'checkedin_min' => 'checkedin_min',
|
| 115 |
'checkedin_max' => 'checkedin_max',
|
| 116 |
+
'capacity_min' => 'capacity_min',
|
| 117 |
+
'capacity_max' => 'capacity_max',
|
| 118 |
);
|
| 119 |
|
| 120 |
foreach ( $supported_args as $request_arg => $query_arg ) {
|
| 123 |
}
|
| 124 |
}
|
| 125 |
|
| 126 |
+
$has_manage_access = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
|
| 127 |
|
| 128 |
$attendess_btwn = $checkedin_btwn = $capacity_btwn = null;
|
| 129 |
|
src/Tribe/REST/V1/Main.php
CHANGED
|
@@ -22,13 +22,12 @@ class Tribe__Tickets__REST__V1__Main extends Tribe__REST__Main {
|
|
| 22 |
/**
|
| 23 |
* @var array
|
| 24 |
*/
|
| 25 |
-
protected $registered_endpoints =
|
| 26 |
|
| 27 |
/**
|
| 28 |
* Hooks the filters and actions required for the REST API support to kick in.
|
| 29 |
*
|
| 30 |
* @since 4.7.5
|
| 31 |
-
*
|
| 32 |
*/
|
| 33 |
public function hook() {
|
| 34 |
$this->hook_headers();
|
|
@@ -41,6 +40,27 @@ class Tribe__Tickets__REST__V1__Main extends Tribe__REST__Main {
|
|
| 41 |
return;
|
| 42 |
}
|
| 43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
}
|
| 45 |
|
| 46 |
/**
|
|
@@ -123,7 +143,6 @@ class Tribe__Tickets__REST__V1__Main extends Tribe__REST__Main {
|
|
| 123 |
return 'v1';
|
| 124 |
}
|
| 125 |
|
| 126 |
-
|
| 127 |
/**
|
| 128 |
* Returns the REST API URL prefix that will be appended to the namespace.
|
| 129 |
*
|
|
@@ -137,4 +156,60 @@ class Tribe__Tickets__REST__V1__Main extends Tribe__REST__Main {
|
|
| 137 |
return $this->url_prefix;
|
| 138 |
}
|
| 139 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
}
|
| 22 |
/**
|
| 23 |
* @var array
|
| 24 |
*/
|
| 25 |
+
protected $registered_endpoints = [];
|
| 26 |
|
| 27 |
/**
|
| 28 |
* Hooks the filters and actions required for the REST API support to kick in.
|
| 29 |
*
|
| 30 |
* @since 4.7.5
|
|
|
|
| 31 |
*/
|
| 32 |
public function hook() {
|
| 33 |
$this->hook_headers();
|
| 40 |
return;
|
| 41 |
}
|
| 42 |
|
| 43 |
+
// Add support for `ticketed` param on tribe_events filter on REST API.
|
| 44 |
+
add_filter( 'tribe_events_archive_get_args', [ $this , 'parse_events_rest_args' ], 10, 3 );
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* Filter the args for Event Query over REST API.
|
| 49 |
+
*
|
| 50 |
+
* @since TBD
|
| 51 |
+
*
|
| 52 |
+
* @param array $args Arguments used to get the events from the archive page.
|
| 53 |
+
* @param array $data Array with the data to be returned to the REST response.
|
| 54 |
+
* @param WP_REST_Request $request The request object.
|
| 55 |
+
*
|
| 56 |
+
* @return mixed
|
| 57 |
+
*/
|
| 58 |
+
public function parse_events_rest_args( $args, $data, $request ) {
|
| 59 |
+
if ( isset( $request['ticketed'] ) ) {
|
| 60 |
+
$args['has_rsvp_or_tickets'] = tribe_is_truthy( $request['ticketed'] );
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
return $args;
|
| 64 |
}
|
| 65 |
|
| 66 |
/**
|
| 143 |
return 'v1';
|
| 144 |
}
|
| 145 |
|
|
|
|
| 146 |
/**
|
| 147 |
* Returns the REST API URL prefix that will be appended to the namespace.
|
| 148 |
*
|
| 156 |
return $this->url_prefix;
|
| 157 |
}
|
| 158 |
|
| 159 |
+
/**
|
| 160 |
+
* Return if the request has access to private information.
|
| 161 |
+
*
|
| 162 |
+
* @since TBD
|
| 163 |
+
*
|
| 164 |
+
* @return bool True if the request has access to private information, false otherwise.
|
| 165 |
+
*/
|
| 166 |
+
public function request_has_manage_access() : bool {
|
| 167 |
+
return $this->user_has_manage_access() || $this->request_has_valid_api_key();
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
/**
|
| 171 |
+
* Return if the user has manage access.
|
| 172 |
+
*
|
| 173 |
+
* @since TBD
|
| 174 |
+
*
|
| 175 |
+
* @return bool True if the user has manage access, false otherwise.
|
| 176 |
+
*/
|
| 177 |
+
public function user_has_manage_access() : bool {
|
| 178 |
+
return current_user_can( 'edit_users' ) || current_user_can( 'tribe_manage_attendees' );
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
/**
|
| 182 |
+
* Return if user can read private information.
|
| 183 |
+
*
|
| 184 |
+
* @since TBD
|
| 185 |
+
*
|
| 186 |
+
* @return bool True if user can read private information, false otherwise.
|
| 187 |
+
*/
|
| 188 |
+
public function user_has_read_private_posts_access() : bool {
|
| 189 |
+
return current_user_can( 'read_private_posts' );
|
| 190 |
+
}
|
| 191 |
+
|
| 192 |
+
/**
|
| 193 |
+
* Return if the request has a valid api key.
|
| 194 |
+
*
|
| 195 |
+
* @since TBD
|
| 196 |
+
*
|
| 197 |
+
* @return bool True if the request has a valid api key, false otherwise.
|
| 198 |
+
*/
|
| 199 |
+
public function request_has_valid_api_key() : bool {
|
| 200 |
+
$option = tribe_get_option( 'tickets-plus-qr-options-api-key', '' );
|
| 201 |
+
|
| 202 |
+
if ( empty( $option ) ) {
|
| 203 |
+
return false;
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
$request_var = tribe_get_request_var( 'api_key' );
|
| 207 |
+
|
| 208 |
+
if ( empty( $request_var ) || $option !== $request_var ) {
|
| 209 |
+
return false;
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
return true;
|
| 213 |
+
}
|
| 214 |
+
|
| 215 |
}
|
src/Tribe/REST/V1/Post_Repository.php
CHANGED
|
@@ -586,12 +586,12 @@ class Tribe__Tickets__REST__V1__Post_Repository
|
|
| 586 |
|
| 587 |
// @todo here we need to uniform the return values to indicate unlimited and oversold!
|
| 588 |
|
| 589 |
-
$details =
|
| 590 |
'available_percentage' => $available_percentage,
|
| 591 |
-
'available' => (int) $ticket->stock(), // see note above about why we use this
|
| 592 |
-
|
| 593 |
|
| 594 |
-
if (
|
| 595 |
$details['max'] = (int) $ticket->capacity();
|
| 596 |
$details['sold'] = (int) $ticket->qty_sold();
|
| 597 |
$details['pending'] = (int) $ticket->qty_pending();
|
|
@@ -663,7 +663,7 @@ class Tribe__Tickets__REST__V1__Post_Repository
|
|
| 663 |
|
| 664 |
$event = $ticket_object->get_event();
|
| 665 |
|
| 666 |
-
$has_manage_access =
|
| 667 |
$always_show_attendees_data = $has_manage_access;
|
| 668 |
|
| 669 |
/**
|
|
@@ -765,7 +765,7 @@ class Tribe__Tickets__REST__V1__Post_Repository
|
|
| 765 |
return false;
|
| 766 |
}
|
| 767 |
|
| 768 |
-
$has_manage_access =
|
| 769 |
$permission = $has_manage_access ? 'editable' : 'readable';
|
| 770 |
|
| 771 |
$query = tribe_attendees( 'restv1' )
|
|
@@ -950,9 +950,9 @@ class Tribe__Tickets__REST__V1__Post_Repository
|
|
| 950 |
'rest_url' => $main->get_url( '/attendees/' . $attendee_id ),
|
| 951 |
];
|
| 952 |
|
| 953 |
-
$has_manage_access =
|
| 954 |
|
| 955 |
-
// Only show the attendee name if the attendee did not optout or the user can read private posts
|
| 956 |
if ( empty( $attendee['optout'] ) || $has_manage_access ) {
|
| 957 |
$attendee_data['title'] = Tribe__Utils__Array::get( $attendee, 'holder_name', Tribe__Utils__Array::get( $attendee, 'purchaser_name', '' ) );
|
| 958 |
$attendee_data['optout'] = tribe_is_truthy( $attendee['optout'] );
|
|
@@ -960,7 +960,7 @@ class Tribe__Tickets__REST__V1__Post_Repository
|
|
| 960 |
$attendee_data['optout'] = true;
|
| 961 |
}
|
| 962 |
|
| 963 |
-
// Sensible information should not be shown to everyone
|
| 964 |
if ( $has_manage_access ) {
|
| 965 |
$attendee_data = array_merge(
|
| 966 |
$attendee_data,
|
| 586 |
|
| 587 |
// @todo here we need to uniform the return values to indicate unlimited and oversold!
|
| 588 |
|
| 589 |
+
$details = [
|
| 590 |
'available_percentage' => $available_percentage,
|
| 591 |
+
'available' => (int) $ticket->stock(), // see note above about why we use this.
|
| 592 |
+
];
|
| 593 |
|
| 594 |
+
if ( tribe( 'tickets.rest-v1.main' )->request_has_manage_access() ) {
|
| 595 |
$details['max'] = (int) $ticket->capacity();
|
| 596 |
$details['sold'] = (int) $ticket->qty_sold();
|
| 597 |
$details['pending'] = (int) $ticket->qty_pending();
|
| 663 |
|
| 664 |
$event = $ticket_object->get_event();
|
| 665 |
|
| 666 |
+
$has_manage_access = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
|
| 667 |
$always_show_attendees_data = $has_manage_access;
|
| 668 |
|
| 669 |
/**
|
| 765 |
return false;
|
| 766 |
}
|
| 767 |
|
| 768 |
+
$has_manage_access = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
|
| 769 |
$permission = $has_manage_access ? 'editable' : 'readable';
|
| 770 |
|
| 771 |
$query = tribe_attendees( 'restv1' )
|
| 950 |
'rest_url' => $main->get_url( '/attendees/' . $attendee_id ),
|
| 951 |
];
|
| 952 |
|
| 953 |
+
$has_manage_access = tribe( 'tickets.rest-v1.main' )->request_has_manage_access();
|
| 954 |
|
| 955 |
+
// Only show the attendee name if the attendee did not optout or the user can read private posts.
|
| 956 |
if ( empty( $attendee['optout'] ) || $has_manage_access ) {
|
| 957 |
$attendee_data['title'] = Tribe__Utils__Array::get( $attendee, 'holder_name', Tribe__Utils__Array::get( $attendee, 'purchaser_name', '' ) );
|
| 958 |
$attendee_data['optout'] = tribe_is_truthy( $attendee['optout'] );
|
| 960 |
$attendee_data['optout'] = true;
|
| 961 |
}
|
| 962 |
|
| 963 |
+
// Sensible information should not be shown to everyone.
|
| 964 |
if ( $has_manage_access ) {
|
| 965 |
$attendee_data = array_merge(
|
| 966 |
$attendee_data,
|
src/Tribe/REST/V1/Service_Provider.php
CHANGED
|
@@ -21,7 +21,7 @@ class Tribe__Tickets__REST__V1__Service_Provider extends tad_DI52_ServiceProvide
|
|
| 21 |
* @since 4.7.5
|
| 22 |
*/
|
| 23 |
public function register() {
|
| 24 |
-
tribe_singleton( 'tickets.rest-v1.main', 'Tribe__Tickets__REST__V1__Main',
|
| 25 |
tribe_singleton( 'tickets.rest-v1.messages', 'Tribe__Tickets__REST__V1__Messages' );
|
| 26 |
tribe_singleton( 'tickets.rest-v1.headers-base', 'Tribe__Tickets__REST__V1__Headers__Base' );
|
| 27 |
tribe_singleton( 'tickets.rest-v1.settings', 'Tribe__Tickets__REST__V1__Settings' );
|
|
@@ -114,11 +114,15 @@ class Tribe__Tickets__REST__V1__Service_Provider extends tad_DI52_ServiceProvide
|
|
| 114 |
/** @var Tribe__Documentation__Swagger__Builder_Interface $endpoint */
|
| 115 |
$endpoint = tribe( 'tickets.rest-v1.endpoints.documentation' );
|
| 116 |
|
| 117 |
-
register_rest_route(
|
| 118 |
-
|
| 119 |
-
'
|
| 120 |
-
|
| 121 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
|
| 123 |
$endpoint->register_definition_provider( 'Image', new Tribe__Documentation__Swagger__Image_Definition_Provider() );
|
| 124 |
$endpoint->register_definition_provider( 'ImageSize', new Tribe__Documentation__Swagger__Image_Size_Definition_Provider() );
|
| 21 |
* @since 4.7.5
|
| 22 |
*/
|
| 23 |
public function register() {
|
| 24 |
+
tribe_singleton( 'tickets.rest-v1.main', 'Tribe__Tickets__REST__V1__Main', [ 'hook' ] );
|
| 25 |
tribe_singleton( 'tickets.rest-v1.messages', 'Tribe__Tickets__REST__V1__Messages' );
|
| 26 |
tribe_singleton( 'tickets.rest-v1.headers-base', 'Tribe__Tickets__REST__V1__Headers__Base' );
|
| 27 |
tribe_singleton( 'tickets.rest-v1.settings', 'Tribe__Tickets__REST__V1__Settings' );
|
| 114 |
/** @var Tribe__Documentation__Swagger__Builder_Interface $endpoint */
|
| 115 |
$endpoint = tribe( 'tickets.rest-v1.endpoints.documentation' );
|
| 116 |
|
| 117 |
+
register_rest_route(
|
| 118 |
+
$this->namespace,
|
| 119 |
+
'/doc',
|
| 120 |
+
[
|
| 121 |
+
'methods' => WP_REST_Server::READABLE,
|
| 122 |
+
'callback' => [ $endpoint, 'get' ],
|
| 123 |
+
'permission_callback' => '__return_true',
|
| 124 |
+
]
|
| 125 |
+
);
|
| 126 |
|
| 127 |
$endpoint->register_definition_provider( 'Image', new Tribe__Documentation__Swagger__Image_Definition_Provider() );
|
| 128 |
$endpoint->register_definition_provider( 'ImageSize', new Tribe__Documentation__Swagger__Image_Size_Definition_Provider() );
|
src/Tribe/RSVP.php
CHANGED
|
@@ -482,9 +482,9 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
|
|
| 482 |
*/
|
| 483 |
$attendee_ids = $this->generate_tickets( $args['post_id'], false );
|
| 484 |
|
| 485 |
-
if (
|
| 486 |
$result['success'] = false;
|
| 487 |
-
$result['errors'][] =
|
| 488 |
|
| 489 |
return $result;
|
| 490 |
}
|
|
@@ -1040,7 +1040,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
|
|
| 1040 |
* @param int|null $post_id Post ID for ticket, null to use current post ID.
|
| 1041 |
* @param boolean $redirect Whether to redirect on error.
|
| 1042 |
*
|
| 1043 |
-
* @return array|
|
| 1044 |
*/
|
| 1045 |
public function generate_tickets( $post_id = null, $redirect = true ) {
|
| 1046 |
$has_tickets = false;
|
|
@@ -1069,7 +1069,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
|
|
| 1069 |
tribe_exit();
|
| 1070 |
}
|
| 1071 |
|
| 1072 |
-
return
|
| 1073 |
}
|
| 1074 |
|
| 1075 |
$product_ids = [];
|
|
@@ -1096,6 +1096,10 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
|
|
| 1096 |
|
| 1097 |
$tickets_generated = $this->generate_tickets_for( $product_id, $ticket_qty, $attendee_details, $redirect );
|
| 1098 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1099 |
if ( $tickets_generated ) {
|
| 1100 |
if ( is_array( $tickets_generated ) ) {
|
| 1101 |
$attendee_ids[] = $tickets_generated;
|
|
@@ -2524,15 +2528,31 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
|
|
| 2524 |
*
|
| 2525 |
* @since 4.7
|
| 2526 |
*
|
|
|
|
|
|
|
| 2527 |
* @param int $product_id The ticket post ID.
|
| 2528 |
* @param int $ticket_qty The number of attendees that should be generated.
|
| 2529 |
* @param array $attendee_details An array containing the details for the attendees
|
| 2530 |
* that should be generated.
|
| 2531 |
* @param boolean $redirect Whether to redirect on error.
|
| 2532 |
*
|
| 2533 |
-
* @return
|
| 2534 |
*/
|
| 2535 |
public function generate_tickets_for( $product_id, $ticket_qty, $attendee_details, $redirect = true ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2536 |
$rsvp_options = $this->tickets_view->get_rsvp_options( null, false );
|
| 2537 |
|
| 2538 |
$required_details = array(
|
|
@@ -2545,12 +2565,14 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
|
|
| 2545 |
|
| 2546 |
foreach ( $required_details as $required_detail ) {
|
| 2547 |
if ( ! isset( $attendee_details[ $required_detail ] ) ) {
|
| 2548 |
-
|
|
|
|
| 2549 |
}
|
| 2550 |
|
| 2551 |
// Some details should not be empty.
|
| 2552 |
if ( 'optout' !== $required_detail && empty( $attendee_details[ $required_detail ] ) ) {
|
| 2553 |
-
|
|
|
|
| 2554 |
}
|
| 2555 |
}
|
| 2556 |
|
|
@@ -2569,20 +2591,6 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
|
|
| 2569 |
$attendee_optout = filter_var( $attendee_optout, FILTER_VALIDATE_BOOLEAN );
|
| 2570 |
$attendee_optout = (int) $attendee_optout;
|
| 2571 |
|
| 2572 |
-
// Get the event this tickets is for
|
| 2573 |
-
$post_id = get_post_meta( $product_id, $this->get_event_key(), true );
|
| 2574 |
-
|
| 2575 |
-
if ( empty( $post_id ) ) {
|
| 2576 |
-
return false;
|
| 2577 |
-
}
|
| 2578 |
-
|
| 2579 |
-
/** @var Tribe__Tickets__Ticket_Object $ticket_type */
|
| 2580 |
-
$ticket_type = $this->get_ticket( $post_id, $product_id );
|
| 2581 |
-
|
| 2582 |
-
if ( ! $ticket_type instanceof Tribe__Tickets__Ticket_Object ) {
|
| 2583 |
-
return false;
|
| 2584 |
-
}
|
| 2585 |
-
|
| 2586 |
// get the RSVP status `decrease_stock_by` value
|
| 2587 |
$status_stock_size = $rsvp_options[ $attendee_order_status ]['decrease_stock_by'];
|
| 2588 |
|
|
@@ -2601,7 +2609,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
|
|
| 2601 |
tribe_exit();
|
| 2602 |
}
|
| 2603 |
|
| 2604 |
-
return
|
| 2605 |
}
|
| 2606 |
|
| 2607 |
/**
|
|
@@ -2631,7 +2639,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
|
|
| 2631 |
$attendee_ids[] = $this->create_attendee_for_ticket( $ticket_type, $attendee_data );
|
| 2632 |
} catch ( Exception $exception ) {
|
| 2633 |
// Stop processing and return false.
|
| 2634 |
-
return
|
| 2635 |
}
|
| 2636 |
}
|
| 2637 |
|
| 482 |
*/
|
| 483 |
$attendee_ids = $this->generate_tickets( $args['post_id'], false );
|
| 484 |
|
| 485 |
+
if ( is_wp_error( $attendee_ids ) ) {
|
| 486 |
$result['success'] = false;
|
| 487 |
+
$result['errors'][] = $attendee_ids->get_error_message();
|
| 488 |
|
| 489 |
return $result;
|
| 490 |
}
|
| 1040 |
* @param int|null $post_id Post ID for ticket, null to use current post ID.
|
| 1041 |
* @param boolean $redirect Whether to redirect on error.
|
| 1042 |
*
|
| 1043 |
+
* @return array|WP_Error List of attendee ID(s) generated, or \WP_Error if there was a problem.
|
| 1044 |
*/
|
| 1045 |
public function generate_tickets( $post_id = null, $redirect = true ) {
|
| 1046 |
$has_tickets = false;
|
| 1069 |
tribe_exit();
|
| 1070 |
}
|
| 1071 |
|
| 1072 |
+
return new WP_Error( 'rsvp-error', __( 'Invalid data! Missing required attendee details!', 'event-tickets' ) );
|
| 1073 |
}
|
| 1074 |
|
| 1075 |
$product_ids = [];
|
| 1096 |
|
| 1097 |
$tickets_generated = $this->generate_tickets_for( $product_id, $ticket_qty, $attendee_details, $redirect );
|
| 1098 |
|
| 1099 |
+
if ( is_wp_error( $tickets_generated ) ) {
|
| 1100 |
+
return $tickets_generated;
|
| 1101 |
+
}
|
| 1102 |
+
|
| 1103 |
if ( $tickets_generated ) {
|
| 1104 |
if ( is_array( $tickets_generated ) ) {
|
| 1105 |
$attendee_ids[] = $tickets_generated;
|
| 2528 |
*
|
| 2529 |
* @since 4.7
|
| 2530 |
*
|
| 2531 |
+
* @since TBD Return WP_Error in case of errors to show proper error messages.
|
| 2532 |
+
*
|
| 2533 |
* @param int $product_id The ticket post ID.
|
| 2534 |
* @param int $ticket_qty The number of attendees that should be generated.
|
| 2535 |
* @param array $attendee_details An array containing the details for the attendees
|
| 2536 |
* that should be generated.
|
| 2537 |
* @param boolean $redirect Whether to redirect on error.
|
| 2538 |
*
|
| 2539 |
+
* @return array|WP_Error `true` if the attendees were successfully generated, `false` otherwise. If $redirect is set to false, upon success this method will return an array of attendee IDs generated.
|
| 2540 |
*/
|
| 2541 |
public function generate_tickets_for( $product_id, $ticket_qty, $attendee_details, $redirect = true ) {
|
| 2542 |
+
// Get the event this tickets is for
|
| 2543 |
+
$post_id = get_post_meta( $product_id, $this->get_event_key(), true );
|
| 2544 |
+
|
| 2545 |
+
if ( empty( $post_id ) ) {
|
| 2546 |
+
return new WP_Error( 'rsvp-invalid-parent-id', __( 'Invalid parent ID provided!', 'event-tickets' ) );
|
| 2547 |
+
}
|
| 2548 |
+
|
| 2549 |
+
/** @var Tribe__Tickets__Ticket_Object $ticket_type */
|
| 2550 |
+
$ticket_type = $this->get_ticket( $post_id, $product_id );
|
| 2551 |
+
|
| 2552 |
+
if ( ! $ticket_type instanceof Tribe__Tickets__Ticket_Object ) {
|
| 2553 |
+
return new WP_Error( 'rsvp-invalid-ticket-id', __( 'Invalid Ticket ID provided!', 'event-tickets' ) );
|
| 2554 |
+
}
|
| 2555 |
+
|
| 2556 |
$rsvp_options = $this->tickets_view->get_rsvp_options( null, false );
|
| 2557 |
|
| 2558 |
$required_details = array(
|
| 2565 |
|
| 2566 |
foreach ( $required_details as $required_detail ) {
|
| 2567 |
if ( ! isset( $attendee_details[ $required_detail ] ) ) {
|
| 2568 |
+
$message = sprintf( __( "Missing required RSVP field: %s", 'event-tickets' ), $required_detail );
|
| 2569 |
+
return new WP_Error( 'rsvp-missing-required-data', $message );
|
| 2570 |
}
|
| 2571 |
|
| 2572 |
// Some details should not be empty.
|
| 2573 |
if ( 'optout' !== $required_detail && empty( $attendee_details[ $required_detail ] ) ) {
|
| 2574 |
+
$message = sprintf( __( "Missing required RSVP field: %s", 'event-tickets' ), $required_detail );
|
| 2575 |
+
return new WP_Error( 'rsvp-missing-required-data', $message );
|
| 2576 |
}
|
| 2577 |
}
|
| 2578 |
|
| 2591 |
$attendee_optout = filter_var( $attendee_optout, FILTER_VALIDATE_BOOLEAN );
|
| 2592 |
$attendee_optout = (int) $attendee_optout;
|
| 2593 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2594 |
// get the RSVP status `decrease_stock_by` value
|
| 2595 |
$status_stock_size = $rsvp_options[ $attendee_order_status ]['decrease_stock_by'];
|
| 2596 |
|
| 2609 |
tribe_exit();
|
| 2610 |
}
|
| 2611 |
|
| 2612 |
+
return new WP_Error( 'rsvp-invalid-stock-request', __( 'Requested amount of Tickets are not available!', 'event-tickets' ) );
|
| 2613 |
}
|
| 2614 |
|
| 2615 |
/**
|
| 2639 |
$attendee_ids[] = $this->create_attendee_for_ticket( $ticket_type, $attendee_data );
|
| 2640 |
} catch ( Exception $exception ) {
|
| 2641 |
// Stop processing and return false.
|
| 2642 |
+
return new WP_Error( 'rsvp-invalid-stock-request', $exception->getMessage() );
|
| 2643 |
}
|
| 2644 |
}
|
| 2645 |
|
src/Tribe/Tickets.php
CHANGED
|
@@ -1475,6 +1475,14 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
|
|
| 1475 |
if ( ! empty( $args['per_page'] ) ) {
|
| 1476 |
$repository->per_page( absint( $args['per_page'] ) );
|
| 1477 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1478 |
}
|
| 1479 |
|
| 1480 |
/**
|
|
@@ -3409,11 +3417,7 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
|
|
| 3409 |
$editor = tribe( 'editor' );
|
| 3410 |
|
| 3411 |
// Blocks and ticket templates merged - bail if we should be seeing blocks.
|
| 3412 |
-
if (
|
| 3413 |
-
has_blocks( $post->ID )
|
| 3414 |
-
&& $editor->should_load_blocks()
|
| 3415 |
-
&& ! $editor->is_classic_editor()
|
| 3416 |
-
) {
|
| 3417 |
return false;
|
| 3418 |
}
|
| 3419 |
|
| 1475 |
if ( ! empty( $args['per_page'] ) ) {
|
| 1476 |
$repository->per_page( absint( $args['per_page'] ) );
|
| 1477 |
}
|
| 1478 |
+
|
| 1479 |
+
if ( ! empty( $args['orderby'] ) ) {
|
| 1480 |
+
$repository->order_by( strval( $args['orderby'] ) );
|
| 1481 |
+
}
|
| 1482 |
+
|
| 1483 |
+
if ( ! empty( $args['order'] ) ) {
|
| 1484 |
+
$repository->order( strval( $args['order'] ) );
|
| 1485 |
+
}
|
| 1486 |
}
|
| 1487 |
|
| 1488 |
/**
|
| 3417 |
$editor = tribe( 'editor' );
|
| 3418 |
|
| 3419 |
// Blocks and ticket templates merged - bail if we should be seeing blocks.
|
| 3420 |
+
if ( has_blocks( $post->ID ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3421 |
return false;
|
| 3422 |
}
|
| 3423 |
|
src/admin-views/admin-welcome-message.php
CHANGED
|
@@ -3,6 +3,7 @@
|
|
| 3 |
* The template that displays the welcome message when the plugin is first activated.
|
| 4 |
*/
|
| 5 |
|
|
|
|
| 6 |
use Tribe\Tickets\Admin\Settings;
|
| 7 |
|
| 8 |
$main = Tribe__Main::instance();
|
|
@@ -18,6 +19,18 @@ if ( $has_plus ) {
|
|
| 18 |
$logo_image = 'images/logo/event-tickets-plus.svg';
|
| 19 |
$mobile_graphic = 'images/header/welcome-mobile-etplus.jpg';
|
| 20 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
?>
|
| 22 |
|
| 23 |
<?php if ( $has_plus ) : ?>
|
|
@@ -142,12 +155,12 @@ if ( $has_plus ) {
|
|
| 142 |
<div class="tribe-events-admin-card tribe-events-admin-card--3up tribe-events-admin-card--last">
|
| 143 |
<img
|
| 144 |
class="tribe-events-admin-card__image"
|
| 145 |
-
src="<?php echo esc_url( tribe_resource_url( 'images/welcome/
|
| 146 |
-
alt="<?php esc_attr_e( 'Illustration of
|
| 147 |
/>
|
| 148 |
-
<div class="tribe-events-admin-card__title"><?php esc_html_e( '
|
| 149 |
-
<div class="tribe-events-admin-card__description"><?php
|
| 150 |
-
<a class="tribe-events-admin-card__link" href="
|
| 151 |
</div>
|
| 152 |
|
| 153 |
<div class="tribe-events-admin-card tribe-events-admin-card--1up">
|
| 3 |
* The template that displays the welcome message when the plugin is first activated.
|
| 4 |
*/
|
| 5 |
|
| 6 |
+
use TEC\Tickets\Commerce\Payments_Tab;
|
| 7 |
use Tribe\Tickets\Admin\Settings;
|
| 8 |
|
| 9 |
$main = Tribe__Main::instance();
|
| 19 |
$logo_image = 'images/logo/event-tickets-plus.svg';
|
| 20 |
$mobile_graphic = 'images/header/welcome-mobile-etplus.jpg';
|
| 21 |
}
|
| 22 |
+
|
| 23 |
+
$tc_description = esc_html( 'Tickets Commerce provides flexible online payments right out of the box.', 'event-tickets' );
|
| 24 |
+
$tc_link = tribe( Payments_Tab::class )->get_url();
|
| 25 |
+
|
| 26 |
+
if ( $has_tec ) {
|
| 27 |
+
$tc_description = sprintf(
|
| 28 |
+
'%s %s',
|
| 29 |
+
esc_html( 'Want to monetize your events?', 'event-tickets' ),
|
| 30 |
+
$tc_description
|
| 31 |
+
);
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
?>
|
| 35 |
|
| 36 |
<?php if ( $has_plus ) : ?>
|
| 155 |
<div class="tribe-events-admin-card tribe-events-admin-card--3up tribe-events-admin-card--last">
|
| 156 |
<img
|
| 157 |
class="tribe-events-admin-card__image"
|
| 158 |
+
src="<?php echo esc_url( tribe_resource_url( 'images/welcome/tickets-commerce.png', false, null, $main ) ); ?>"
|
| 159 |
+
alt="<?php esc_attr_e( 'Illustration of money turning into a ticket', 'event-tickets' ); ?>"
|
| 160 |
/>
|
| 161 |
+
<div class="tribe-events-admin-card__title"><?php esc_html_e( 'Tickets Commerce', 'event-tickets' ); ?></div>
|
| 162 |
+
<div class="tribe-events-admin-card__description"><?php echo $tc_description; ?></div>
|
| 163 |
+
<a class="tribe-events-admin-card__link" href="<?php echo $tc_link; ?>"><?php esc_html_e( 'Get started', 'event-tickets' ); ?></a>
|
| 164 |
</div>
|
| 165 |
|
| 166 |
<div class="tribe-events-admin-card tribe-events-admin-card--1up">
|
src/resources/css/tickets-report.css
CHANGED
|
@@ -181,7 +181,7 @@
|
|
| 181 |
}
|
| 182 |
|
| 183 |
.tribe-report-page .column-security {
|
| 184 |
-
width:
|
| 185 |
}
|
| 186 |
|
| 187 |
.tribe-report-page .column-check_in {
|
| 181 |
}
|
| 182 |
|
| 183 |
.tribe-report-page .column-security {
|
| 184 |
+
width: 130px;
|
| 185 |
}
|
| 186 |
|
| 187 |
.tribe-report-page .column-check_in {
|
src/resources/css/tickets-report.min.css
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
.tribe-report-panel{overflow:visible;padding:0;position:relative}.tribe-report-panel.welcome-panel{background:none;overflow:visible}.tribe-report-panel.welcome-panel:before{content:none}.tribe-report-panel .about-description{width:66%}.tribe-report-panel .about-description a{color:inherit}.tribe-report-panel .welcome-panel-content{min-height:0}.tribe-report-panel .welcome-panel-column-container{display:grid;grid-gap:unset;gap:unset;grid-template-columns:repeat(3,1fr);grid-template-areas:"a b c" "d d c";margin-top:0;padding:0;position:static;*zoom:1}.tribe-report-panel .welcome-panel-column{display:inline-block;max-width:none;padding:20px 10px;width:auto}.tribe-report-panel .welcome-panel-column li{line-height:1.4em;margin-bottom:6px;padding:0}.tribe-report-panel .welcome-panel-column .tribe-event-meta-note div{padding:0 0 0 15px}.tribe-report-panel .welcome-panel-first{grid-area:a}.tribe-report-panel .welcome-panel-extra{grid-area:d}.tribe-report-panel .welcome-panel-middle{grid-area:b}.tribe-report-panel .welcome-panel-last{align-content:start;border-left:1px solid #eee;display:flex;flex-flow:row wrap;grid-area:c;padding:10px 20px 5px;*zoom:1}.tribe-report-panel .welcome-panel-last li{margin-bottom:2px}.tribe-report-panel .welcome-panel-last .totals-header{flex:0 0 100%}.tribe-report-panel .welcome-panel-last .totals-header h3{display:inline-block;width:auto}.tribe-report-panel .welcome-panel-last .totals-header .order-total{font-size:16px;margin:1.2em 0 0;font-weight:600}.tribe-report-panel .welcome-panel-last h4{font-size:1.5em;text-align:center}.tribe-report-panel .welcome-panel-last li{font-size:1.1em}.tribe-report-page .welcome-panel-content h3{margin-top:0}.tribe-report-page h4.tickets-summary{margin:0}.tribe-report-page .tickets_checkin{min-width:87px;text-align:center;white-space:nowrap}.tribe-report-page .tickets_uncheckin{display:none;height:auto;line-height:1.5;white-space:normal}.tribe-report-page .tickets_checked td{opacity:.6}.tribe-report-page .tickets_checked td.check_in{opacity:1}.tribe-report-page .tickets_checked .tickets_checkin{display:none}.tribe-report-page .tickets_checked .tickets_uncheckin{display:block;opacity:1}.tribe-report-page .tickets_checked .inline .tickets_uncheckin{display:inline}.tribe-report-page .cancelled{font-style:italic}.tribe-report-page .cancelled .check_in{font-style:normal}.tribe-report-page .column-attendee_id,.tribe-report-page .column-order_id{width:70px}.tribe-report-page td[class*=column]{word-break:break-word}.tribe-report-page td.column-status{font-size:13px;width:80px}.tribe-report-page .column-security{width:
|
| 1 |
+
.tribe-report-panel{overflow:visible;padding:0;position:relative}.tribe-report-panel.welcome-panel{background:none;overflow:visible}.tribe-report-panel.welcome-panel:before{content:none}.tribe-report-panel .about-description{width:66%}.tribe-report-panel .about-description a{color:inherit}.tribe-report-panel .welcome-panel-content{min-height:0}.tribe-report-panel .welcome-panel-column-container{display:grid;grid-gap:unset;gap:unset;grid-template-columns:repeat(3,1fr);grid-template-areas:"a b c" "d d c";margin-top:0;padding:0;position:static;*zoom:1}.tribe-report-panel .welcome-panel-column{display:inline-block;max-width:none;padding:20px 10px;width:auto}.tribe-report-panel .welcome-panel-column li{line-height:1.4em;margin-bottom:6px;padding:0}.tribe-report-panel .welcome-panel-column .tribe-event-meta-note div{padding:0 0 0 15px}.tribe-report-panel .welcome-panel-first{grid-area:a}.tribe-report-panel .welcome-panel-extra{grid-area:d}.tribe-report-panel .welcome-panel-middle{grid-area:b}.tribe-report-panel .welcome-panel-last{align-content:start;border-left:1px solid #eee;display:flex;flex-flow:row wrap;grid-area:c;padding:10px 20px 5px;*zoom:1}.tribe-report-panel .welcome-panel-last li{margin-bottom:2px}.tribe-report-panel .welcome-panel-last .totals-header{flex:0 0 100%}.tribe-report-panel .welcome-panel-last .totals-header h3{display:inline-block;width:auto}.tribe-report-panel .welcome-panel-last .totals-header .order-total{font-size:16px;margin:1.2em 0 0;font-weight:600}.tribe-report-panel .welcome-panel-last h4{font-size:1.5em;text-align:center}.tribe-report-panel .welcome-panel-last li{font-size:1.1em}.tribe-report-page .welcome-panel-content h3{margin-top:0}.tribe-report-page h4.tickets-summary{margin:0}.tribe-report-page .tickets_checkin{min-width:87px;text-align:center;white-space:nowrap}.tribe-report-page .tickets_uncheckin{display:none;height:auto;line-height:1.5;white-space:normal}.tribe-report-page .tickets_checked td{opacity:.6}.tribe-report-page .tickets_checked td.check_in{opacity:1}.tribe-report-page .tickets_checked .tickets_checkin{display:none}.tribe-report-page .tickets_checked .tickets_uncheckin{display:block;opacity:1}.tribe-report-page .tickets_checked .inline .tickets_uncheckin{display:inline}.tribe-report-page .cancelled{font-style:italic}.tribe-report-page .cancelled .check_in{font-style:normal}.tribe-report-page .column-attendee_id,.tribe-report-page .column-order_id{width:70px}.tribe-report-page td[class*=column]{word-break:break-word}.tribe-report-page td.column-status{font-size:13px;width:80px}.tribe-report-page .column-security{width:130px}.tribe-report-page .column-check_in{min-width:90px;width:auto}.tribe-report-page .attendees-actions a.email,.tribe-report-page .attendees-actions a.export,.tribe-report-page .attendees-actions input.print{float:left;margin:1px 8px 0 0}.tribe-attendees-email .tribe-attendees-email-message{float:left;margin:0}.tribe-attendees-email .button-primary{margin-top:3px}.tribe-attendees-email-message ul{font-size:13px;line-height:1.5;margin:.5em 0;padding:2px}.tribe-attendees-email-message ul li:last-child{margin-bottom:0}#attendees_email_wrapper{margin-top:10px;overflow:hidden;padding:20px}#attendees_email_wrapper label{display:block}#attendees_email_wrapper label span{display:inline-block;width:105px}#attendees_email_wrapper input[type=text],#attendees_email_wrapper select{width:285px}#attendees_email_wrapper .attendees_or{display:block;font-size:20px;margin:20px 0;text-align:center}.wp-list-table{font-size:14px}.wp-list-table td.check_in .delete{text-align:center}.welcome-panel .welcome-panel-content{margin:0;*zoom:1}table.orders tr.denied,table.orders tr.pending,table.orders tr.refunded{font-style:italic}.tec-admin__upsell-tec-tickets-manual-attendees .tec-admin__upsell-content{padding:0}.tec-admin__upsell-tec-tickets-manual-attendees .tec-admin__upsell-text{color:#1d2327}@media screen and (max-width:768px){.tribe-report-panel .welcome-panel-column-container{grid-template-columns:1fr;grid-template-areas:"a" "b" "c" "d"}.tribe-report-panel .welcome-panel-column{padding:20px 0}.tribe-report-panel .welcome-panel-column h3{display:inline-block;padding-left:15px}.tribe-report-panel .welcome-panel-column .tribe-event-meta-note div,.tribe-report-panel .welcome-panel-column ul,.tribe-report-panel .welcome-panel-middle>div{padding:0 15px}.tribe-report-panel .welcome-panel-last{width:100%}.welcome-panel .welcome-panel-content{margin-left:0;max-width:100%}}@media screen and (min-width:1024px){.tribe-report-panel .welcome-panel-column{padding:20px var(--tec-spacer-5)}}@media screen and (max-width:870px){.tribe-report-panel .welcome-panel-column li{display:list-item}.tribe-report-panel .welcome-panel-last ul{width:50%}}@media screen and (min-width:870px){.tribe-report-panel .welcome-panel-last ul:first-child{margin-bottom:0}}@media screen and (max-width:782px){.tribe-attendees-email-message .notice-dismiss{padding:9px}#TB_window{height:auto!important}#plugin-information-title{height:auto!important;overflow:hidden!important}#plugin-information-footer{position:relative!important}}@media screen and (max-width:440px){#TB_window{left:0!important;margin-left:0!important}#TB_iframeContent,#TB_window{width:100%!important}}
|
src/resources/js/v2/__tests__/tickets-utils.test.js
CHANGED
|
@@ -114,4 +114,28 @@ describe( 'Format number extended tests', () => {
|
|
| 114 |
it( 'Should return false if invalid format given', () => {
|
| 115 |
expect( utils.numberFormat( '111', 'invalid-format' ) ).toBe(false);
|
| 116 |
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
} );
|
| 114 |
it( 'Should return false if invalid format given', () => {
|
| 115 |
expect( utils.numberFormat( '111', 'invalid-format' ) ).toBe(false);
|
| 116 |
} );
|
| 117 |
+
} );
|
| 118 |
+
|
| 119 |
+
describe( 'Testing Shared Capacity Calculations', () => {
|
| 120 |
+
|
| 121 |
+
// result should always the be minimum value between `target_available` and `maxAvailable - addedtToCart`.
|
| 122 |
+
const dataset = [
|
| 123 |
+
{ targetQty: 2, targetAvailable: 2, maxAvailable: 2, addedToCart: 0, result: 2 },
|
| 124 |
+
{ targetQty: 1, targetAvailable: 1, maxAvailable: 2, addedToCart: 0, result: 1 },
|
| 125 |
+
{ targetQty: 3, targetAvailable: 2, maxAvailable: 5, addedToCart: 0, result: 2 },
|
| 126 |
+
{ targetQty: 3, targetAvailable: 3, maxAvailable: 2, addedToCart: 0, result: 2 },
|
| 127 |
+
{ targetQty: 1, targetAvailable: 1, maxAvailable: 2, addedToCart: 2, result: 0 },
|
| 128 |
+
{ targetQty: 3, targetAvailable: 3, maxAvailable: 2, addedToCart: 2, result: 0 },
|
| 129 |
+
{ targetQty: 4, targetAvailable: 4, maxAvailable: 6, addedToCart: 3, result: 3 },
|
| 130 |
+
{ targetQty: 4, targetAvailable: 5, maxAvailable: 3, addedToCart: 0, result: 3 },
|
| 131 |
+
{ targetQty: 4, targetAvailable: 5, maxAvailable: 3, addedToCart: 1, result: 2 },
|
| 132 |
+
{ targetQty: 4, targetAvailable: 5, maxAvailable: 3, addedToCart: 2, result: 1 },
|
| 133 |
+
{ targetQty: 4, targetAvailable: 5, maxAvailable: 3, addedToCart: 3, result: 0 },
|
| 134 |
+
];
|
| 135 |
+
|
| 136 |
+
describe( 'Testing Shared Cap combinations', () => {
|
| 137 |
+
test.each(dataset)( 'values : ( $targetQty, $targetAvailable, $maxAvailable, $addedToCart )', ( { targetQty, targetAvailable, maxAvailable, addedToCart, result } ) => {
|
| 138 |
+
expect(utils.calculateSharedCap( targetQty, targetAvailable, maxAvailable, addedToCart )).toBe(result);
|
| 139 |
+
} );
|
| 140 |
+
});
|
| 141 |
} );
|
src/resources/js/v2/tickets-block.js
CHANGED
|
@@ -297,7 +297,7 @@ tribe.tickets.block = {
|
|
| 297 |
|
| 298 |
if ( 'true' === $parent.attr( 'data-has-shared-cap' ) ) {
|
| 299 |
const $form = $parent.closest( 'form' );
|
| 300 |
-
newValue = obj.checkSharedCapacity( $form, newValue );
|
| 301 |
}
|
| 302 |
|
| 303 |
if ( 0 === newValue ) {
|
|
@@ -396,10 +396,11 @@ tribe.tickets.block = {
|
|
| 396 |
*
|
| 397 |
* @param {jQuery} $form jQuery object that is the form we are checking.
|
| 398 |
* @param {number} qty The quantity we desire.
|
|
|
|
| 399 |
*
|
| 400 |
* @returns {integer} The quantity, limited by existing shared cap tickets.
|
| 401 |
*/
|
| 402 |
-
obj.checkSharedCapacity = function( $form, qty ) {
|
| 403 |
let sharedCap = [];
|
| 404 |
let currentLoad = [];
|
| 405 |
const $sharedTickets = $form
|
|
@@ -411,11 +412,12 @@ tribe.tickets.block = {
|
|
| 411 |
return qty;
|
| 412 |
}
|
| 413 |
|
| 414 |
-
$
|
| 415 |
-
|
| 416 |
-
|
| 417 |
-
|
| 418 |
-
|
|
|
|
| 419 |
|
| 420 |
$sharedCapTickets.each(
|
| 421 |
function() {
|
|
@@ -423,10 +425,6 @@ tribe.tickets.block = {
|
|
| 423 |
}
|
| 424 |
);
|
| 425 |
|
| 426 |
-
// IE doesn't allow spread operator.
|
| 427 |
-
// @todo: check that we're no longer supporting some IE versions.
|
| 428 |
-
sharedCap = Math.max.apply( this, sharedCap );
|
| 429 |
-
|
| 430 |
currentLoad = currentLoad.reduce(
|
| 431 |
function( a, b ) {
|
| 432 |
return a + b;
|
|
@@ -434,9 +432,20 @@ tribe.tickets.block = {
|
|
| 434 |
0
|
| 435 |
);
|
| 436 |
|
| 437 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 438 |
|
| 439 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 440 |
};
|
| 441 |
|
| 442 |
/**
|
|
@@ -637,7 +646,7 @@ tribe.tickets.block = {
|
|
| 637 |
}
|
| 638 |
|
| 639 |
if ( 'true' === $ticket.attr( 'data-has-shared-cap' ) ) {
|
| 640 |
-
maxQty = obj.checkSharedCapacity( $form, newQuantity );
|
| 641 |
}
|
| 642 |
|
| 643 |
if ( 0 > maxQty ) {
|
| 297 |
|
| 298 |
if ( 'true' === $parent.attr( 'data-has-shared-cap' ) ) {
|
| 299 |
const $form = $parent.closest( 'form' );
|
| 300 |
+
newValue = obj.checkSharedCapacity( $form, newValue, $parent );
|
| 301 |
}
|
| 302 |
|
| 303 |
if ( 0 === newValue ) {
|
| 396 |
*
|
| 397 |
* @param {jQuery} $form jQuery object that is the form we are checking.
|
| 398 |
* @param {number} qty The quantity we desire.
|
| 399 |
+
* @param {obj} target The ticket item that was clicked.
|
| 400 |
*
|
| 401 |
* @returns {integer} The quantity, limited by existing shared cap tickets.
|
| 402 |
*/
|
| 403 |
+
obj.checkSharedCapacity = function( $form, qty, $target ) {
|
| 404 |
let sharedCap = [];
|
| 405 |
let currentLoad = [];
|
| 406 |
const $sharedTickets = $form
|
| 412 |
return qty;
|
| 413 |
}
|
| 414 |
|
| 415 |
+
let active_ticket_limit = $target.attr( 'data-available-count' );
|
| 416 |
+
let totalSharedCap = $target.attr( 'data-shared-cap' );
|
| 417 |
+
|
| 418 |
+
if ( undefined === active_ticket_limit || undefined === totalSharedCap ) {
|
| 419 |
+
return qty;
|
| 420 |
+
}
|
| 421 |
|
| 422 |
$sharedCapTickets.each(
|
| 423 |
function() {
|
| 425 |
}
|
| 426 |
);
|
| 427 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 428 |
currentLoad = currentLoad.reduce(
|
| 429 |
function( a, b ) {
|
| 430 |
return a + b;
|
| 432 |
0
|
| 433 |
);
|
| 434 |
|
| 435 |
+
$sharedTickets.each(
|
| 436 |
+
function() {
|
| 437 |
+
sharedCap.push( parseInt( $( this ).attr( 'data-available-count' ), 10 ) );
|
| 438 |
+
}
|
| 439 |
+
);
|
| 440 |
+
|
| 441 |
+
sharedCap = Math.max.apply( this, sharedCap );
|
| 442 |
|
| 443 |
+
return tribe.tickets.utils.calculateSharedCap(
|
| 444 |
+
qty,
|
| 445 |
+
active_ticket_limit,
|
| 446 |
+
sharedCap,
|
| 447 |
+
currentLoad
|
| 448 |
+
);
|
| 449 |
};
|
| 450 |
|
| 451 |
/**
|
| 646 |
}
|
| 647 |
|
| 648 |
if ( 'true' === $ticket.attr( 'data-has-shared-cap' ) ) {
|
| 649 |
+
maxQty = obj.checkSharedCapacity( $form, newQuantity, $this );
|
| 650 |
}
|
| 651 |
|
| 652 |
if ( 0 > maxQty ) {
|
src/resources/js/v2/tickets-utils.js
CHANGED
|
@@ -247,4 +247,29 @@ tribe.tickets.utils = {};
|
|
| 247 |
return parseFloat( priceString );
|
| 248 |
};
|
| 249 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 250 |
} )( jQuery, tribe.tickets.utils );
|
| 247 |
return parseFloat( priceString );
|
| 248 |
};
|
| 249 |
|
| 250 |
+
/**
|
| 251 |
+
*
|
| 252 |
+
* @param targetQty {integer}
|
| 253 |
+
* @param targetAvailable {integer}
|
| 254 |
+
* @param maxAvailable {integer}
|
| 255 |
+
* @param addedToCart {integer}
|
| 256 |
+
* @returns {number|integer}
|
| 257 |
+
*/
|
| 258 |
+
obj.calculateSharedCap = function( targetQty, targetAvailable, maxAvailable, addedToCart ) {
|
| 259 |
+
|
| 260 |
+
const maxLimit = maxAvailable - addedToCart;
|
| 261 |
+
|
| 262 |
+
// If target qty is smaller than both max available and target ticket capacity then it's valid.
|
| 263 |
+
if ( targetQty <= targetAvailable && targetQty <= maxLimit ) {
|
| 264 |
+
return targetQty;
|
| 265 |
+
}
|
| 266 |
+
|
| 267 |
+
// If qty is larger than ticket capacity then return ticket availability, given it's less than max available.
|
| 268 |
+
if ( targetQty > targetAvailable ) {
|
| 269 |
+
return targetAvailable <= maxLimit ? targetAvailable : 0;
|
| 270 |
+
}
|
| 271 |
+
|
| 272 |
+
return maxLimit;
|
| 273 |
+
}
|
| 274 |
+
|
| 275 |
} )( jQuery, tribe.tickets.utils );
|
src/resources/postcss/tickets-report.pcss
CHANGED
|
@@ -237,7 +237,7 @@
|
|
| 237 |
}
|
| 238 |
|
| 239 |
.column-security {
|
| 240 |
-
width:
|
| 241 |
}
|
| 242 |
|
| 243 |
.column-check_in {
|
| 237 |
}
|
| 238 |
|
| 239 |
.column-security {
|
| 240 |
+
width: 130px;
|
| 241 |
}
|
| 242 |
|
| 243 |
.column-check_in {
|
src/views/v2/tickets/item/inactive.php
CHANGED
|
@@ -60,7 +60,7 @@ $message = $is_sale_past
|
|
| 60 |
/* translators: %s: Tickets label */
|
| 61 |
? sprintf( __( '%s are no longer available', 'event-tickets' ), tribe_get_ticket_label_plural( 'event-tickets' ) )
|
| 62 |
/* translators: %s: Tickets label */
|
| 63 |
-
:
|
| 64 |
?>
|
| 65 |
<div <?php tribe_classes( $classes ); ?>>
|
| 66 |
<div
|
| 60 |
/* translators: %s: Tickets label */
|
| 61 |
? sprintf( __( '%s are no longer available', 'event-tickets' ), tribe_get_ticket_label_plural( 'event-tickets' ) )
|
| 62 |
/* translators: %s: Tickets label */
|
| 63 |
+
: $provider->get_tickets_unavailable_message( $tickets );
|
| 64 |
?>
|
| 65 |
<div <?php tribe_classes( $classes ); ?>>
|
| 66 |
<div
|
vendor/autoload.php
CHANGED
|
@@ -4,4 +4,4 @@
|
|
| 4 |
|
| 5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
| 6 |
|
| 7 |
-
return
|
| 4 |
|
| 5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
| 6 |
|
| 7 |
+
return ComposerAutoloaderInit30ba9895520bddaa0c47342927fb07ef::getLoader();
|
vendor/composer/autoload_real.php
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
|
| 3 |
// autoload_real.php @generated by Composer
|
| 4 |
|
| 5 |
-
class
|
| 6 |
{
|
| 7 |
private static $loader;
|
| 8 |
|
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInitfe9e70a3c24664320f614afeeec7f17f
|
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
-
spl_autoload_register(array('
|
| 23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
-
spl_autoload_unregister(array('
|
| 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\
|
| 31 |
} else {
|
| 32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
| 33 |
foreach ($map as $namespace => $path) {
|
| 2 |
|
| 3 |
// autoload_real.php @generated by Composer
|
| 4 |
|
| 5 |
+
class ComposerAutoloaderInit30ba9895520bddaa0c47342927fb07ef
|
| 6 |
{
|
| 7 |
private static $loader;
|
| 8 |
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
+
spl_autoload_register(array('ComposerAutoloaderInit30ba9895520bddaa0c47342927fb07ef', 'loadClassLoader'), true, true);
|
| 23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit30ba9895520bddaa0c47342927fb07ef', 'loadClassLoader'));
|
| 25 |
|
| 26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
| 27 |
if ($useStaticLoader) {
|
| 28 |
require_once __DIR__ . '/autoload_static.php';
|
| 29 |
|
| 30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit30ba9895520bddaa0c47342927fb07ef::getInitializer($loader));
|
| 31 |
} else {
|
| 32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
| 33 |
foreach ($map as $namespace => $path) {
|
vendor/composer/autoload_static.php
CHANGED
|
@@ -4,7 +4,7 @@
|
|
| 4 |
|
| 5 |
namespace Composer\Autoload;
|
| 6 |
|
| 7 |
-
class
|
| 8 |
{
|
| 9 |
public static $prefixLengthsPsr4 = array (
|
| 10 |
'T' =>
|
|
@@ -207,9 +207,9 @@ class ComposerStaticInitfe9e70a3c24664320f614afeeec7f17f
|
|
| 207 |
public static function getInitializer(ClassLoader $loader)
|
| 208 |
{
|
| 209 |
return \Closure::bind(function () use ($loader) {
|
| 210 |
-
$loader->prefixLengthsPsr4 =
|
| 211 |
-
$loader->prefixDirsPsr4 =
|
| 212 |
-
$loader->classMap =
|
| 213 |
|
| 214 |
}, null, ClassLoader::class);
|
| 215 |
}
|
| 4 |
|
| 5 |
namespace Composer\Autoload;
|
| 6 |
|
| 7 |
+
class ComposerStaticInit30ba9895520bddaa0c47342927fb07ef
|
| 8 |
{
|
| 9 |
public static $prefixLengthsPsr4 = array (
|
| 10 |
'T' =>
|
| 207 |
public static function getInitializer(ClassLoader $loader)
|
| 208 |
{
|
| 209 |
return \Closure::bind(function () use ($loader) {
|
| 210 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit30ba9895520bddaa0c47342927fb07ef::$prefixLengthsPsr4;
|
| 211 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit30ba9895520bddaa0c47342927fb07ef::$prefixDirsPsr4;
|
| 212 |
+
$loader->classMap = ComposerStaticInit30ba9895520bddaa0c47342927fb07ef::$classMap;
|
| 213 |
|
| 214 |
}, null, ClassLoader::class);
|
| 215 |
}
|
