Event Tickets - Version 4.6.1

Version Description

Download this release

Release Info

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

Code changes from version 4.6 to 4.6.1

Files changed (102) hide show
  1. common/lang/tribe-common-af.po +17 -17
  2. common/lang/tribe-common-ar.po +17 -17
  3. common/lang/tribe-common-bg_BG.po +17 -17
  4. common/lang/tribe-common-ca.po +17 -17
  5. common/lang/tribe-common-cs_CZ.po +17 -17
  6. common/lang/tribe-common-da_DK.po +17 -17
  7. common/lang/tribe-common-de_DE.po +17 -17
  8. common/lang/tribe-common-el.po +17 -17
  9. common/lang/tribe-common-en_GB.po +17 -17
  10. common/lang/tribe-common-es_ES.po +17 -17
  11. common/lang/tribe-common-et.po +17 -17
  12. common/lang/tribe-common-fi.po +17 -17
  13. common/lang/tribe-common-fr_CA.po +17 -17
  14. common/lang/tribe-common-fr_FR.po +17 -17
  15. common/lang/tribe-common-hu_HU.po +17 -17
  16. common/lang/tribe-common-id_ID.po +17 -17
  17. common/lang/tribe-common-is_IS.po +17 -17
  18. common/lang/tribe-common-it_IT.po +17 -17
  19. common/lang/tribe-common-lt_LT.po +17 -17
  20. common/lang/tribe-common-lv.po +17 -17
  21. common/lang/tribe-common-nb_NO.po +17 -17
  22. common/lang/tribe-common-nl_NL.po +17 -17
  23. common/lang/tribe-common-pl_PL.po +17 -17
  24. common/lang/tribe-common-pt_BR.po +17 -17
  25. common/lang/tribe-common-pt_PT.po +17 -17
  26. common/lang/tribe-common-ro_RO.po +17 -17
  27. common/lang/tribe-common-ru_RU.po +17 -17
  28. common/lang/tribe-common-sk_SK.po +17 -17
  29. common/lang/tribe-common-sl_SI.po +17 -17
  30. common/lang/tribe-common-sr_RS.po +17 -17
  31. common/lang/tribe-common-sv_SE.po +17 -17
  32. common/lang/tribe-common-tr_TR.po +17 -17
  33. common/lang/tribe-common-zh_CN.po +17 -17
  34. common/lang/tribe-common-zh_TW.po +17 -17
  35. common/lang/tribe-common.pot +20 -20
  36. common/readme.txt +18 -0
  37. common/src/Tribe/Ajax/Dropdown.php +8 -3
  38. common/src/Tribe/Container.php +37 -5
  39. common/src/Tribe/Log/File_Logger.php +1 -1
  40. common/src/Tribe/Main.php +4 -2
  41. common/src/Tribe/Meta/Chunker.php +4 -0
  42. common/src/Tribe/Rewrite.php +1 -1
  43. common/src/Tribe/Template.php +383 -0
  44. common/src/Tribe/Utils/Callback.php +109 -0
  45. common/src/Tribe/Validate.php +6 -2
  46. common/src/admin-views/tribe-options-general.php +0 -1
  47. common/src/functions/template-tags/date.php +14 -0
  48. common/src/resources/js/dependency.js +10 -6
  49. common/src/resources/js/dependency.min.js +1 -1
  50. common/src/resources/js/dropdowns.js +5 -0
  51. common/src/resources/js/dropdowns.min.js +1 -1
  52. common/tribe-common.php +1 -1
  53. event-tickets.php +1 -1
  54. lang/event-tickets-cs_CZ.mo +0 -0
  55. lang/event-tickets-cs_CZ.po +181 -175
  56. lang/event-tickets.pot +377 -371
  57. readme.txt +20 -2
  58. src/Tribe/Admin/Columns/Tickets.php +54 -60
  59. src/Tribe/Admin/Views.php +22 -9
  60. src/Tribe/Assets.php +2 -12
  61. src/Tribe/Attendees.php +720 -0
  62. src/Tribe/Main.php +2 -3
  63. src/Tribe/Metabox.php +555 -23
  64. src/Tribe/RSVP.php +15 -16
  65. src/Tribe/Service_Provider.php +4 -0
  66. src/Tribe/Ticket_Object.php +0 -11
  67. src/Tribe/Tickets.php +160 -631
  68. src/Tribe/Tickets_Handler.php +672 -795
  69. src/admin-views/attendees.php +15 -5
  70. src/admin-views/{tickets-advanced.php → editor/fieldset/advanced.php} +51 -9
  71. src/admin-views/{tickets-history.php → editor/fieldset/history.php} +11 -3
  72. src/admin-views/editor/list-row.php +82 -0
  73. src/admin-views/{list.php → editor/list-table.php} +25 -23
  74. src/admin-views/editor/metabox.php +28 -0
  75. src/admin-views/{base_admin_panel.php → editor/panel/list.php} +10 -24
  76. src/admin-views/{settings_admin_panel.php → editor/panel/settings.php} +33 -13
  77. src/admin-views/{edit_admin_panel.php → editor/panel/ticket.php} +48 -25
  78. src/admin-views/meta-box.php +0 -36
  79. src/admin-views/rsvp-metabox-capacity.php +1 -1
  80. src/resources/css/rsvp.css +4 -0
  81. src/resources/css/rsvp.min.css +1 -1
  82. src/resources/css/tickets-refresh.css +1 -0
  83. src/resources/css/tickets-refresh.min.css +1 -1
  84. src/resources/css/tickets-tables.css +5 -4
  85. src/resources/css/tickets-tables.min.css +1 -1
  86. src/resources/css/tickets.css +3 -2
  87. src/resources/css/tickets.min.css +1 -1
  88. src/resources/js/accordion.js +2 -0
  89. src/resources/js/accordion.min.js +1 -1
  90. src/resources/js/tickets-attendees.js +2 -2
  91. src/resources/js/tickets-attendees.min.js +1 -1
  92. src/resources/js/tickets-tables.js +29 -22
  93. src/resources/js/tickets-tables.min.js +1 -1
  94. src/resources/js/tickets.js +358 -740
  95. src/resources/js/tickets.min.js +1 -1
  96. src/resources/postcss/rsvp.pcss +4 -0
  97. src/resources/postcss/tickets-refresh.pcss +1 -0
  98. src/resources/postcss/tickets-tables.pcss +7 -4
  99. src/resources/postcss/tickets.pcss +3 -2
  100. src/template-tags/tickets.php +68 -2
  101. src/views/tickets/email.php +2 -3
  102. src/views/tickets/orders-link.php +2 -4
common/lang/tribe-common-af.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Kies 'n Land:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Land lys moet geformateer word met een land per reël in die volgende formaat: <br> VSA, die Verenigde State van Amerika <br> die Verenigde Koninkryk, die Verenigde Koninkryk."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s moet 'n telefoon nommer wees."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s moet uit 5 syfers bestaan."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "% s moet bestaan ​​uit letters, spasies, afkapings, en strepies."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "% s moet bestaan uit letters, getalle, koppeltekens, afkapings, en ruimtes."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s moet 'n getal 0 en 21 wees."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s moet 'n syfer of 'n persentasie wees."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s mag nie 'n duplikaat wees nie"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s mag nie die selfde wees nie %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Vergelyking bekragtiging misluk omdat geen vergelyking waarde is verskaf vir veld %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "% s moet 'n waarde hë wat deel is van sy opsies."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "% s moet 'n geldige absolute URL wees."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "% s moet 'n geldige afkorting (getalle, letters, koppeltekens en onderstreep) wees."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Kies 'n Land:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Land lys moet geformateer word met een land per reël in die volgende formaat: <br> VSA, die Verenigde State van Amerika <br> die Verenigde Koninkryk, die Verenigde Koninkryk."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s moet 'n telefoon nommer wees."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s moet uit 5 syfers bestaan."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "% s moet bestaan ​​uit letters, spasies, afkapings, en strepies."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "% s moet bestaan uit letters, getalle, koppeltekens, afkapings, en ruimtes."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s moet 'n getal 0 en 21 wees."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s moet 'n syfer of 'n persentasie wees."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s mag nie 'n duplikaat wees nie"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s mag nie die selfde wees nie %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Vergelyking bekragtiging misluk omdat geen vergelyking waarde is verskaf vir veld %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "% s moet 'n waarde hë wat deel is van sy opsies."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "% s moet 'n geldige absolute URL wees."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "% s moet 'n geldige afkorting (getalle, letters, koppeltekens en onderstreep) wees."
2125
 
common/lang/tribe-common-ar.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2082,56 +2082,56 @@ msgstr "أفغانستان"
2082
  msgid "Select a Country:"
2083
  msgstr ""
2084
 
2085
- #: src/Tribe/Validate.php:499
2086
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2087
  msgstr ""
2088
 
2089
- #: src/Tribe/Validate.php:483
2090
  msgid "%s must be a phone number."
2091
  msgstr ""
2092
 
2093
- #: src/Tribe/Validate.php:469
2094
  msgid "%s must consist of 5 numbers."
2095
  msgstr ""
2096
 
2097
- #: src/Tribe/Validate.php:455
2098
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2099
  msgstr ""
2100
 
2101
- #: src/Tribe/Validate.php:439
2102
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2103
  msgstr ""
2104
 
2105
- #: src/Tribe/Validate.php:423
2106
  msgid "%s must be a number between 0 and 21."
2107
  msgstr ""
2108
 
2109
- #: src/Tribe/Validate.php:369
2110
  msgid "%s must be a number or percentage."
2111
  msgstr ""
2112
 
2113
- #: src/Tribe/Validate.php:353
2114
  msgid "%s cannot be a duplicate"
2115
  msgstr ""
2116
 
2117
- #: src/Tribe/Validate.php:351
2118
  msgid "%s cannot be the same as %s."
2119
  msgstr ""
2120
 
2121
- #: src/Tribe/Validate.php:344
2122
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2123
  msgstr ""
2124
 
2125
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2126
- #: src/Tribe/Validate.php:330
2127
  msgid "%s must have a value that's part of its options."
2128
  msgstr ""
2129
 
2130
- #: src/Tribe/Validate.php:275
2131
  msgid "%s must be a valid absolute URL."
2132
  msgstr ""
2133
 
2134
- #: src/Tribe/Validate.php:260
2135
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2136
  msgstr ""
2137
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2082
  msgid "Select a Country:"
2083
  msgstr ""
2084
 
2085
+ #: src/Tribe/Validate.php:503
2086
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2087
  msgstr ""
2088
 
2089
+ #: src/Tribe/Validate.php:487
2090
  msgid "%s must be a phone number."
2091
  msgstr ""
2092
 
2093
+ #: src/Tribe/Validate.php:473
2094
  msgid "%s must consist of 5 numbers."
2095
  msgstr ""
2096
 
2097
+ #: src/Tribe/Validate.php:459
2098
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2099
  msgstr ""
2100
 
2101
+ #: src/Tribe/Validate.php:443
2102
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2103
  msgstr ""
2104
 
2105
+ #: src/Tribe/Validate.php:427
2106
  msgid "%s must be a number between 0 and 21."
2107
  msgstr ""
2108
 
2109
+ #: src/Tribe/Validate.php:373
2110
  msgid "%s must be a number or percentage."
2111
  msgstr ""
2112
 
2113
+ #: src/Tribe/Validate.php:357
2114
  msgid "%s cannot be a duplicate"
2115
  msgstr ""
2116
 
2117
+ #: src/Tribe/Validate.php:355
2118
  msgid "%s cannot be the same as %s."
2119
  msgstr ""
2120
 
2121
+ #: src/Tribe/Validate.php:348
2122
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2123
  msgstr ""
2124
 
2125
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2126
+ #: src/Tribe/Validate.php:334
2127
  msgid "%s must have a value that's part of its options."
2128
  msgstr ""
2129
 
2130
+ #: src/Tribe/Validate.php:279
2131
  msgid "%s must be a valid absolute URL."
2132
  msgstr ""
2133
 
2134
+ #: src/Tribe/Validate.php:264
2135
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2136
  msgstr ""
2137
 
common/lang/tribe-common-bg_BG.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Афганистан"
2070
  msgid "Select a Country:"
2071
  msgstr "Избор на страна:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Списъка със страните трябва да съдържа по една страна на ред и да бъде в следния формат: <br>САЩ, Съединени Американски щати <br> БГ, България."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s трябва да е валиден телефонен номер."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s трябва да съдържа 5 цифри."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s трябва да съдържа само букви, интервали, апострофи и тирета."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s трябва да съдържа само букви, цифри, тирета, апострофи и интервали."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s трябва да е число между 0 и 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s трябва да е номер или процент."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s не може да се дублира"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s не може да съвпада с %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Валидирането на сравнението се провали, тъй като не е зададена стойност за сравнение в полето %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s трябва да има стойност, която отговаря на една от възможноте опции."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s трябва да е валиден абсолюрен URL."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s трябва да е валиден низ (числа, букви, тире и долно тире)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Избор на страна:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Списъка със страните трябва да съдържа по една страна на ред и да бъде в следния формат: <br>САЩ, Съединени Американски щати <br> БГ, България."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s трябва да е валиден телефонен номер."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s трябва да съдържа 5 цифри."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s трябва да съдържа само букви, интервали, апострофи и тирета."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s трябва да съдържа само букви, цифри, тирета, апострофи и интервали."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s трябва да е число между 0 и 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s трябва да е номер или процент."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s не може да се дублира"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s не може да съвпада с %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Валидирането на сравнението се провали, тъй като не е зададена стойност за сравнение в полето %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s трябва да има стойност, която отговаря на една от възможноте опции."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s трябва да е валиден абсолюрен URL."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s трябва да е валиден низ (числа, букви, тире и долно тире)."
2125
 
common/lang/tribe-common-ca.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afganistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Selecciona un país:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "La llista de països ha de contenir només un país per línia de la següent manera: <br>US, Estats Units<br> UK, Regne Unit."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s ha de ser un número de telèfon."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s ha de contenir només 5 números."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s ha de consistir només de lletres, espais, apòstrofs i guions."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s ha de consistir només de lletres, números, guions, apòstrofs i espais,"
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s ha de ser un número entre 0 i 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s ha de ser un número o un percentatge."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s no pot ser un duplicat"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s no pot ser el mateix que %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "La validació per comparació ha fallat perquè no s'ha indicat el valor a comparar per al camp %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s ha de tenir un valor que sigui part de les seves opcions."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s ha de ser una URL absoluta vàlida."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s ha de ser un slug vàlid (números, lletres, guions i guions baixos)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Selecciona un país:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "La llista de països ha de contenir només un país per línia de la següent manera: <br>US, Estats Units<br> UK, Regne Unit."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s ha de ser un número de telèfon."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s ha de contenir només 5 números."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s ha de consistir només de lletres, espais, apòstrofs i guions."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s ha de consistir només de lletres, números, guions, apòstrofs i espais,"
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s ha de ser un número entre 0 i 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s ha de ser un número o un percentatge."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s no pot ser un duplicat"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s no pot ser el mateix que %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "La validació per comparació ha fallat perquè no s'ha indicat el valor a comparar per al camp %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s ha de tenir un valor que sigui part de les seves opcions."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s ha de ser una URL absoluta vàlida."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s ha de ser un slug vàlid (números, lletres, guions i guions baixos)."
2125
 
common/lang/tribe-common-cs_CZ.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2073,56 +2073,56 @@ msgstr "Afghánistán"
2073
  msgid "Select a Country:"
2074
  msgstr "Vyberte zemi:"
2075
 
2076
- #: src/Tribe/Validate.php:499
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Seznam zemí musí být formátován jako jedna země na řádek v následujícím formátu: <br>US, United States <br> UK, United Kingdom."
2079
 
2080
- #: src/Tribe/Validate.php:483
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s musí být telefonní číslo."
2083
 
2084
- #: src/Tribe/Validate.php:469
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s se musí skládat z 5 čísel."
2087
 
2088
- #: src/Tribe/Validate.php:455
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s se musí skládat pouze z písmen, mezer, apostrofů a pomlček."
2091
 
2092
- #: src/Tribe/Validate.php:439
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s se musí skládat pouze z písmen, číslic, pomlček, apostrofů a mezer."
2095
 
2096
- #: src/Tribe/Validate.php:423
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s musí být číslo v rozmezí 0 až 21."
2099
 
2100
- #: src/Tribe/Validate.php:369
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s musí být číslo nebo procento."
2103
 
2104
- #: src/Tribe/Validate.php:353
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s nemůže být duplicitní"
2107
 
2108
- #: src/Tribe/Validate.php:351
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s nemůže být stejné jako %s."
2111
 
2112
- #: src/Tribe/Validate.php:344
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Kontrola porovnávání se nezdařila, protože nebyla zadána porovnávací hodnota pro pole %s"
2115
 
2116
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2117
- #: src/Tribe/Validate.php:330
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s musí mít hodnotu, která je jednou z možných voleb."
2120
 
2121
- #: src/Tribe/Validate.php:275
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s musí být platná absolutní adresa URL."
2124
 
2125
- #: src/Tribe/Validate.php:260
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s musí být platným názvem v URL (číslice, písmena, pomlčky, a podtržítka)."
2128
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2073
  msgid "Select a Country:"
2074
  msgstr "Vyberte zemi:"
2075
 
2076
+ #: src/Tribe/Validate.php:503
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Seznam zemí musí být formátován jako jedna země na řádek v následujícím formátu: <br>US, United States <br> UK, United Kingdom."
2079
 
2080
+ #: src/Tribe/Validate.php:487
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s musí být telefonní číslo."
2083
 
2084
+ #: src/Tribe/Validate.php:473
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s se musí skládat z 5 čísel."
2087
 
2088
+ #: src/Tribe/Validate.php:459
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s se musí skládat pouze z písmen, mezer, apostrofů a pomlček."
2091
 
2092
+ #: src/Tribe/Validate.php:443
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s se musí skládat pouze z písmen, číslic, pomlček, apostrofů a mezer."
2095
 
2096
+ #: src/Tribe/Validate.php:427
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s musí být číslo v rozmezí 0 až 21."
2099
 
2100
+ #: src/Tribe/Validate.php:373
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s musí být číslo nebo procento."
2103
 
2104
+ #: src/Tribe/Validate.php:357
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s nemůže být duplicitní"
2107
 
2108
+ #: src/Tribe/Validate.php:355
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s nemůže být stejné jako %s."
2111
 
2112
+ #: src/Tribe/Validate.php:348
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Kontrola porovnávání se nezdařila, protože nebyla zadána porovnávací hodnota pro pole %s"
2115
 
2116
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2117
+ #: src/Tribe/Validate.php:334
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s musí mít hodnotu, která je jednou z možných voleb."
2120
 
2121
+ #: src/Tribe/Validate.php:279
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s musí být platná absolutní adresa URL."
2124
 
2125
+ #: src/Tribe/Validate.php:264
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s musí být platným názvem v URL (číslice, písmena, pomlčky, a podtržítka)."
2128
 
common/lang/tribe-common-da_DK.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Vælg et land:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Landelisten skal formatteres med ét land per linje:<br>US, United States <br> UK, United Kingdom."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s skal være et telefonnummer."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s skal indeholde 5 cifre."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s må kun indeholde bogstaver, mellemrum og skråstreger."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s må kun indeholde tal, bogstaver, bindestreger, apostroffer og mellemrum."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s skal være et nummer mellem 0 og 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s skal være et nummer eller en procent."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s må ikke være en gentagelse."
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s må ikke være det samme som %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Fejl på grund af manglende værdi som %s kan måle sig mod."
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s skal have en værdi der afspejler dens valg."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s skal være et gyldigt link"
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s må kun indeholde tal, bogstaver, bindestreger og underscores"
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Vælg et land:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Landelisten skal formatteres med ét land per linje:<br>US, United States <br> UK, United Kingdom."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s skal være et telefonnummer."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s skal indeholde 5 cifre."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s må kun indeholde bogstaver, mellemrum og skråstreger."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s må kun indeholde tal, bogstaver, bindestreger, apostroffer og mellemrum."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s skal være et nummer mellem 0 og 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s skal være et nummer eller en procent."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s må ikke være en gentagelse."
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s må ikke være det samme som %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Fejl på grund af manglende værdi som %s kan måle sig mod."
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s skal have en værdi der afspejler dens valg."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s skal være et gyldigt link"
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s må kun indeholde tal, bogstaver, bindestreger og underscores"
2125
 
common/lang/tribe-common-de_DE.po CHANGED
@@ -75,15 +75,15 @@ msgstr "Erweitern Sie den Events Calendar um Veranstaltungen, die durch Nutzer
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr "Veranstlaltungen aus dem Internet importieren! Event Aggregator macht es einfach, geplante oder manuelle Importe von Facebook, Meetup, Google Kalender und iCalendar, zusammen mit Uploads aus CSV und ICS Dateien laufen zu lassen. Sie können dank unserer REST API auch direkt von anderen Seiten importieren, die den Events Calendar nutzen."
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr "\"%s\" ist ungültig und kann auf der \"%s\" Instanz nicht erreicht werden."
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr "Keine Daten für dieses Dropdownmenü festgelegt"
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr "Keine Datenquelle für diese Dropdownmenü verfügbar"
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Land wählen ..."
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Die Länder-Liste muss als ein Land pro Zeile in der folgenden Weise formatiert sein: <br>US, United States <br> UK, United Kingdom."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s muss eine Telefonnummer sein."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s muss aus fünf Ziffern bestehen."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s muss aus Buchstaben, Leerzeichen, Apostrophe und Gedankenstrichen bestehen."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s darf nur aus Buchstaben, Zahlen, Gedankenstrichen, Apostrophe und Leerzeichen bestehen. "
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s muss eine Zahl zwischen 0 und 21 sein."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s muss eine Zahl oder Prozentsatz sein."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s kann nicht vervielfältigt werden"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s kann nicht dasselbe sein wie %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Der Vergleich ist fehlgeschlagen, weil keine Eingabe im Feld %s gefunden wurde"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s muss eine Wert haben, der Teil der Optionen ist."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s muss eine gültige URL sein."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s muss eine gültige Ausgangsform haben (Nummern, Buchstaben, Gedankenstriche und Unterstreichungen)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr "Veranstlaltungen aus dem Internet importieren! Event Aggregator macht es einfach, geplante oder manuelle Importe von Facebook, Meetup, Google Kalender und iCalendar, zusammen mit Uploads aus CSV und ICS Dateien laufen zu lassen. Sie können dank unserer REST API auch direkt von anderen Seiten importieren, die den Events Calendar nutzen."
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr "\"%s\" ist ungültig und kann auf der \"%s\" Instanz nicht erreicht werden."
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr "Keine Daten für dieses Dropdownmenü festgelegt"
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr "Keine Datenquelle für diese Dropdownmenü verfügbar"
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Land wählen ..."
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Die Länder-Liste muss als ein Land pro Zeile in der folgenden Weise formatiert sein: <br>US, United States <br> UK, United Kingdom."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s muss eine Telefonnummer sein."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s muss aus fünf Ziffern bestehen."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s muss aus Buchstaben, Leerzeichen, Apostrophe und Gedankenstrichen bestehen."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s darf nur aus Buchstaben, Zahlen, Gedankenstrichen, Apostrophe und Leerzeichen bestehen. "
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s muss eine Zahl zwischen 0 und 21 sein."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s muss eine Zahl oder Prozentsatz sein."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s kann nicht vervielfältigt werden"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s kann nicht dasselbe sein wie %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Der Vergleich ist fehlgeschlagen, weil keine Eingabe im Feld %s gefunden wurde"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s muss eine Wert haben, der Teil der Optionen ist."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s muss eine gültige URL sein."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s muss eine gültige Ausgangsform haben (Nummern, Buchstaben, Gedankenstriche und Unterstreichungen)."
2125
 
common/lang/tribe-common-el.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Αφγανιστάν"
2070
  msgid "Select a Country:"
2071
  msgstr "Επιλογή Χώρας:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Η λίστα χωρών πρέπει να διαμορφωθεί ως μία χώρα ανά γραμμή με την ακόλουθη μορφή: <br> ΗΠΑ, Ηνωμένες Πολιτείες <br> ΗΒ, Ηνωμένο Βασίλειο."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s πρέπει να είναι ένας αριθμός τηλεφώνου."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s πρέπει να αποτελείται από 5 αριθμούς."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s πρέπει να αποτελείται από γράμματα, κενά διαστήματα, αποστρόφους και παύλες."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s πρέπει να αποτελείται μόνο από γράμματα, αριθμούς, παύλες, αποστρόφους και κενά διαστήματα."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s πρέπει να είναι ένας αριθμός μεταξύ 0 και 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s πρέπει να είναι αριθμός ή ποσοστό."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s δεν μπορεί να είναι ένα διπλότυπο"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s δεν μπορεί να είναι το ίδιο με %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Η σύγκριση επικύρωσης απέτυχε διότι δεν παρασχέθηκε αξία σύγκρισης για το πεδίο %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s πρέπει να έχει μια τιμή που να είναι μέρος των επιλογών του."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s πρέπει να είναι έγκυρη απόλυτη διεύθυνση URL."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s πρέπει να είναι ένα έγκυρο slug (αριθμοί, γράμματα, παύλες, και κάτω παύλες)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Επιλογή Χώρας:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Η λίστα χωρών πρέπει να διαμορφωθεί ως μία χώρα ανά γραμμή με την ακόλουθη μορφή: <br> ΗΠΑ, Ηνωμένες Πολιτείες <br> ΗΒ, Ηνωμένο Βασίλειο."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s πρέπει να είναι ένας αριθμός τηλεφώνου."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s πρέπει να αποτελείται από 5 αριθμούς."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s πρέπει να αποτελείται από γράμματα, κενά διαστήματα, αποστρόφους και παύλες."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s πρέπει να αποτελείται μόνο από γράμματα, αριθμούς, παύλες, αποστρόφους και κενά διαστήματα."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s πρέπει να είναι ένας αριθμός μεταξύ 0 και 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s πρέπει να είναι αριθμός ή ποσοστό."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s δεν μπορεί να είναι ένα διπλότυπο"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s δεν μπορεί να είναι το ίδιο με %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Η σύγκριση επικύρωσης απέτυχε διότι δεν παρασχέθηκε αξία σύγκρισης για το πεδίο %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s πρέπει να έχει μια τιμή που να είναι μέρος των επιλογών του."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s πρέπει να είναι έγκυρη απόλυτη διεύθυνση URL."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s πρέπει να είναι ένα έγκυρο slug (αριθμοί, γράμματα, παύλες, και κάτω παύλες)."
2125
 
common/lang/tribe-common-en_GB.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Select a Country:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s must be a phone number."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s must consist of 5 numbers."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s must consist of letters, spaces, apostrophes, and dashes."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s must be a number between 0 and 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s must be a number or percentage."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s cannot be a duplicate"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s cannot be the same as %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Comparison validation failed because no comparison value was provided, for field %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s must have a value that's part of its options."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s must be a valid absolute URL."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Select a Country:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s must be a phone number."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s must consist of 5 numbers."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s must consist of letters, spaces, apostrophes, and dashes."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s must be a number between 0 and 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s must be a number or percentage."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s cannot be a duplicate"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s cannot be the same as %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Comparison validation failed because no comparison value was provided, for field %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s must have a value that's part of its options."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s must be a valid absolute URL."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2125
 
common/lang/tribe-common-es_ES.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afganistán"
2070
  msgid "Select a Country:"
2071
  msgstr "Selecciona un país:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "La lista de países debe contener solo un país por línea de la siguiente forma: <br>US, Estados Unidos<br> UK, Reino Unido."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s debe ser un número de teléfono."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s debe solo contener 5 números."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s debe consistir solo de letras, guiones, apostrofes y espacios."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s debe consistir solo de letras, números, guiones, apostrofes y espacios."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s debe ser un número entre 0 y 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s debe ser un número o un porcentaje."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s no puede estar duplicada"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s no puede ser igual a %s"
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "La validación por comparación falló debido a que no se indicó el valor a comparar para el campo %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s debe contener una valor que sea parte de sus opciones disponibles."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s debe ser una URL absoluta válida"
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s debe ser un slug válido (números, letras, guiones y guiones bajos)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Selecciona un país:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "La lista de países debe contener solo un país por línea de la siguiente forma: <br>US, Estados Unidos<br> UK, Reino Unido."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s debe ser un número de teléfono."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s debe solo contener 5 números."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s debe consistir solo de letras, guiones, apostrofes y espacios."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s debe consistir solo de letras, números, guiones, apostrofes y espacios."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s debe ser un número entre 0 y 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s debe ser un número o un porcentaje."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s no puede estar duplicada"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s no puede ser igual a %s"
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "La validación por comparación falló debido a que no se indicó el valor a comparar para el campo %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s debe contener una valor que sea parte de sus opciones disponibles."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s debe ser una URL absoluta válida"
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s debe ser un slug válido (números, letras, guiones y guiones bajos)."
2125
 
common/lang/tribe-common-et.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Vali riik:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Riikide list peab olema formaadis üks maa reas järgneva formaadi järgi: <br>US,Ameerika Ühendriigid <br> UK, United Kingdom."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s peab olema telefoninumber"
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s peab sisaldama 5 numbrit"
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s võib sisaldada vaid tähti, tühikuid, ülakoma ja mõttekriipsu"
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s võib sisaldada vaid tähti, numbreid, ülakoma ja tühikuid"
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s peab olema number 0 ja 21 vahel"
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s peab olema number protsentides"
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s ei saa olla dublikaat"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s ei saa olla sama kui %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Võrdlus ebaõnnestus kuna väärtust ei edastatud väljale %s."
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s peab sisaldama väärtust sellest valikust"
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s peab olema kehtiv absoluutne URL"
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s peab olema kehtiv slug (numbrid, tähed, alakriipsud)"
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Vali riik:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Riikide list peab olema formaadis üks maa reas järgneva formaadi järgi: <br>US,Ameerika Ühendriigid <br> UK, United Kingdom."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s peab olema telefoninumber"
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s peab sisaldama 5 numbrit"
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s võib sisaldada vaid tähti, tühikuid, ülakoma ja mõttekriipsu"
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s võib sisaldada vaid tähti, numbreid, ülakoma ja tühikuid"
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s peab olema number 0 ja 21 vahel"
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s peab olema number protsentides"
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s ei saa olla dublikaat"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s ei saa olla sama kui %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Võrdlus ebaõnnestus kuna väärtust ei edastatud väljale %s."
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s peab sisaldama väärtust sellest valikust"
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s peab olema kehtiv absoluutne URL"
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s peab olema kehtiv slug (numbrid, tähed, alakriipsud)"
2125
 
common/lang/tribe-common-fi.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afganistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Valitse maa:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Maaluettelossa tulee olla yksi maa per rivi seuraavassa muodossa: <br>US, Yhdysvallat <br> UK, Iso-Britannia."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s on oltava puhelinnumero."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s täytyy sisältää 5 numeroa."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s saa olla vain kirjaimia, välilyöntejä, heittomerkkejä ja viivoja."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s saa sisältää vain kirjaimia, numeroita, väliviivoja, heittomerkkejä ja välilyöntejä."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s täytyy olla numero väliltä 0 ja 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s täytyy olla numero tai prosenttiluku."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s ei voi olla kaksoiskappale"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s ei voi olla sama kuin %s ."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Kentän %s validointi epäonnistui, koska vertailuarvoa ei annettu"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s on oltava arvo, joka on sen asetuksissa."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s on oltava kelvollinen URL."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s on oltava osoite-muotoa (numeroita, kirjaimia, väliviivoja ja alaviivoja)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Valitse maa:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Maaluettelossa tulee olla yksi maa per rivi seuraavassa muodossa: <br>US, Yhdysvallat <br> UK, Iso-Britannia."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s on oltava puhelinnumero."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s täytyy sisältää 5 numeroa."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s saa olla vain kirjaimia, välilyöntejä, heittomerkkejä ja viivoja."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s saa sisältää vain kirjaimia, numeroita, väliviivoja, heittomerkkejä ja välilyöntejä."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s täytyy olla numero väliltä 0 ja 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s täytyy olla numero tai prosenttiluku."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s ei voi olla kaksoiskappale"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s ei voi olla sama kuin %s ."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Kentän %s validointi epäonnistui, koska vertailuarvoa ei annettu"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s on oltava arvo, joka on sen asetuksissa."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s on oltava kelvollinen URL."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s on oltava osoite-muotoa (numeroita, kirjaimia, väliviivoja ja alaviivoja)."
2125
 
common/lang/tribe-common-fr_CA.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Choisissez un pays :"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Liste des pays doit être formatée comme un pays par ligne dans le format suivant :<br>EUA, États-Unis d'Amérique<br>RU, Royaume-Uni."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s doit être un numéro de téléphone."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s doit contenir 5 chiffres."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s doit contenir uniquement des lettres, tirets, apostrophes et espaces."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s doit contenir uniquement des lettres, chiffres, tirets, apostrophes et espaces."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s doit être un chiffre entre 0 et 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s doit être un chiffre ou en pourcentage."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s ne peut être dupliqué"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s ne peut-être pareil à %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Validation de comparaison échoué parce qu’il n’y a pas de valeur de comparaison fourni pour le champ %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s doit contenir une valeur qui font partie de l'une de ses options."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s doit être un lien URL valide et absolu."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s doit être une entré valide (nombres, lettres, tirets, et traits de soulignement)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Choisissez un pays :"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Liste des pays doit être formatée comme un pays par ligne dans le format suivant :<br>EUA, États-Unis d'Amérique<br>RU, Royaume-Uni."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s doit être un numéro de téléphone."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s doit contenir 5 chiffres."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s doit contenir uniquement des lettres, tirets, apostrophes et espaces."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s doit contenir uniquement des lettres, chiffres, tirets, apostrophes et espaces."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s doit être un chiffre entre 0 et 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s doit être un chiffre ou en pourcentage."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s ne peut être dupliqué"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s ne peut-être pareil à %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Validation de comparaison échoué parce qu’il n’y a pas de valeur de comparaison fourni pour le champ %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s doit contenir une valeur qui font partie de l'une de ses options."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s doit être un lien URL valide et absolu."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s doit être une entré valide (nombres, lettres, tirets, et traits de soulignement)."
2125
 
common/lang/tribe-common-fr_FR.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Choisissez un pays :"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "La liste de pays doit être formatée avec un pays par ligne et avec le format suivant: <br>FR, France <br> UK, United Kingdom."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s doit être un numéro de téléphone."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s doit comprendre au moins 5 chiffres."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s doit comporter des lettres, espaces, apostrophes et tirets."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s doit contenir seulement des lettres, nombres, tirets, apostrophes et espaces."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s doit être un nombre entre 0 et 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s doit être un nombre ou un pourcentage."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s ne doit pas être en double"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s ne peut être identique à %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Échec de validation de la comparaison : aucune valeur de comparaison fournie pour le champ %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s doit être une valeur qui fait parti de ses options."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s doit être une URL absolue valide."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s doit être un permalien valide (nombre, lettres, tirets et tirets de soulignement)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Choisissez un pays :"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "La liste de pays doit être formatée avec un pays par ligne et avec le format suivant: <br>FR, France <br> UK, United Kingdom."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s doit être un numéro de téléphone."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s doit comprendre au moins 5 chiffres."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s doit comporter des lettres, espaces, apostrophes et tirets."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s doit contenir seulement des lettres, nombres, tirets, apostrophes et espaces."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s doit être un nombre entre 0 et 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s doit être un nombre ou un pourcentage."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s ne doit pas être en double"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s ne peut être identique à %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Échec de validation de la comparaison : aucune valeur de comparaison fournie pour le champ %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s doit être une valeur qui fait parti de ses options."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s doit être une URL absolue valide."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s doit être un permalien valide (nombre, lettres, tirets et tirets de soulignement)."
2125
 
common/lang/tribe-common-hu_HU.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afganisztán"
2070
  msgid "Select a Country:"
2071
  msgstr "Válassz országot:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Egy ország soronként a következő formában: <br> US, Egyesült Államok <br> UK, Egyesült Királyság."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s csak telefonszám lehet."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s 5 számot kell, hogy tartalmazzon."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s csak betűket, szóközöket, aposztrofokat és kötőjeleket tartalmazhat."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s csak betűket, számokat, kötőjeleket, aposztrofokat és szóközöket tartalmazhat."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s értéke csak 0 és 21 közötti szám lehet."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s csak szám vagy százalék lehet."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s nem lehet duplikált"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s nem lehet ugyan az, mint %s"
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Az összehasonlítás érvényesítése sikertelen volt, mert nem lett megadva összehasonlítási érték erre a mezőre: %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s csak olyan értéket vehet fel, amit a lehetőségei tartamaznak."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s csak érvényes URL lehet."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s csak érvényes előtag lehet: szám, betű, kötőjel, alávonás."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Válassz országot:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Egy ország soronként a következő formában: <br> US, Egyesült Államok <br> UK, Egyesült Királyság."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s csak telefonszám lehet."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s 5 számot kell, hogy tartalmazzon."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s csak betűket, szóközöket, aposztrofokat és kötőjeleket tartalmazhat."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s csak betűket, számokat, kötőjeleket, aposztrofokat és szóközöket tartalmazhat."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s értéke csak 0 és 21 közötti szám lehet."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s csak szám vagy százalék lehet."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s nem lehet duplikált"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s nem lehet ugyan az, mint %s"
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Az összehasonlítás érvényesítése sikertelen volt, mert nem lett megadva összehasonlítási érték erre a mezőre: %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s csak olyan értéket vehet fel, amit a lehetőségei tartamaznak."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s csak érvényes URL lehet."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s csak érvényes előtag lehet: szám, betű, kötőjel, alávonás."
2125
 
common/lang/tribe-common-id_ID.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afganistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Pilih Negara:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Daftar Negara harus diformat sebagai salah satu negara per baris dalam format berikut: <br> AS, Amerika Serikat <br> UK, United Kingdom."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s harus berupa nomor telepon."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s harus terdiri dari 5 angka."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s harus terdiri dari huruf, spasi, apostrof, dan tanda hubung."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s harus terdiri dari huruf, angka, tanda hubung, apostrof, dan spasi saja."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s harus berupa angka antara 0 dan 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s harus berupa angka atau persentase."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s tidak dapat duplikat"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s tidak bisa sama dengan %s ."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Validasi perbandingan gagal karena tidak ada nilai perbandingan diberikan, untuk field %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s harus memiliki nilai yang merupakan bagian dari pilihan."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s harus mutlak URL yang valid."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s harus slug valid (angka, huruf, tanda hubung, dan garis bawah)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Pilih Negara:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Daftar Negara harus diformat sebagai salah satu negara per baris dalam format berikut: <br> AS, Amerika Serikat <br> UK, United Kingdom."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s harus berupa nomor telepon."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s harus terdiri dari 5 angka."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s harus terdiri dari huruf, spasi, apostrof, dan tanda hubung."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s harus terdiri dari huruf, angka, tanda hubung, apostrof, dan spasi saja."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s harus berupa angka antara 0 dan 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s harus berupa angka atau persentase."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s tidak dapat duplikat"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s tidak bisa sama dengan %s ."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Validasi perbandingan gagal karena tidak ada nilai perbandingan diberikan, untuk field %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s harus memiliki nilai yang merupakan bagian dari pilihan."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s harus mutlak URL yang valid."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s harus slug valid (angka, huruf, tanda hubung, dan garis bawah)."
2125
 
common/lang/tribe-common-is_IS.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Veldu land:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Landslisti verður að vera með aðeins eitt land í línu og líta svona út: <br>US, United States <br> UK, United Kingdom."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s verður að vera símanúmer."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s verður að innihalda 5 tölustafi."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s verður að vera bókstafir, bil, úrfellingarmerki og bandstrik."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s verður að innihalda bókstafi, tölur, bandstrik, úrfellingarmerki og bil."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s verður að vera tala á milli 0 og 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s verður að vera tala eða prósenta."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s má ekki vera afrit"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s má ekki vera sama og %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Samanburðar skráning tókst ekki þar sem engin samanburðar gildi voru tilgreind fyrir svæði %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s verður að vera gildi sem er hluti af valkosti."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s verður að vera gilt endanlegt URL."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s verður að vera gilt gildi (tölur, bókstafir, bandstirk eða undirstrik)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Veldu land:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Landslisti verður að vera með aðeins eitt land í línu og líta svona út: <br>US, United States <br> UK, United Kingdom."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s verður að vera símanúmer."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s verður að innihalda 5 tölustafi."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s verður að vera bókstafir, bil, úrfellingarmerki og bandstrik."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s verður að innihalda bókstafi, tölur, bandstrik, úrfellingarmerki og bil."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s verður að vera tala á milli 0 og 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s verður að vera tala eða prósenta."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s má ekki vera afrit"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s má ekki vera sama og %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Samanburðar skráning tókst ekki þar sem engin samanburðar gildi voru tilgreind fyrir svæði %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s verður að vera gildi sem er hluti af valkosti."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s verður að vera gilt endanlegt URL."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s verður að vera gilt gildi (tölur, bókstafir, bandstirk eða undirstrik)."
2125
 
common/lang/tribe-common-it_IT.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Seleziona un Paese:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s deve essere un numero telefonico"
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s deve essere costituito da 5 numeri."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s deve essere costituito da lettere, spazi, apostrofi e trattini."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s deve essere costituito da lettere, numeri, trattini, apostrofi, e solo spazi."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s deve essere un numero tra 0 e 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s deve essere un numero o una percentuale."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s non può essere un duplicato"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s non può essere lo stesso di %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Convalida confronto non è riuscita perché è stato fornito alcun valore di confronto, per il camp %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s deve avere un valore che fa parte delle sue opzioni."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s deve essere un URL assoluto valido."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s deve essere uno slug valido (numeri, lettere, trattini, e sottolineature)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Seleziona un Paese:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s deve essere un numero telefonico"
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s deve essere costituito da 5 numeri."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s deve essere costituito da lettere, spazi, apostrofi e trattini."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s deve essere costituito da lettere, numeri, trattini, apostrofi, e solo spazi."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s deve essere un numero tra 0 e 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s deve essere un numero o una percentuale."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s non può essere un duplicato"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s non può essere lo stesso di %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Convalida confronto non è riuscita perché è stato fornito alcun valore di confronto, per il camp %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s deve avere un valore che fa parte delle sue opzioni."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s deve essere un URL assoluto valido."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s deve essere uno slug valido (numeri, lettere, trattini, e sottolineature)."
2125
 
common/lang/tribe-common-lt_LT.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2073,56 +2073,56 @@ msgstr "Afganistanas"
2073
  msgid "Select a Country:"
2074
  msgstr "Pasirinkite šalį:"
2075
 
2076
- #: src/Tribe/Validate.php:499
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Šalių sąrašas turi būti suformatuota kaip viena šalis eilutėje šiuo formatu: <br>US, United States <br> UK, United Kingdom."
2079
 
2080
- #: src/Tribe/Validate.php:483
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s turi būti telefono numeris."
2083
 
2084
- #: src/Tribe/Validate.php:469
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s turi būti sudaryti iš 5 skaičių."
2087
 
2088
- #: src/Tribe/Validate.php:455
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s turi sudaryti tik raidės, tarpai, apostrofai ir brūkšneliai."
2091
 
2092
- #: src/Tribe/Validate.php:439
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s turi sudaryti tik raidės, skaičiai, brūkšneliai, apostrofai ir tarpai."
2095
 
2096
- #: src/Tribe/Validate.php:423
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s turi būti skaičius nuo 0 iki 21."
2099
 
2100
- #: src/Tribe/Validate.php:369
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s turi būti skaičius arba procentas."
2103
 
2104
- #: src/Tribe/Validate.php:353
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s negali būti dublikatas"
2107
 
2108
- #: src/Tribe/Validate.php:351
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s negali būti tas pats kaip%s"
2111
 
2112
- #: src/Tribe/Validate.php:344
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Palyginimo patikrinti nepavyko, nes nebuvo nurodyta jokia palyginimo vertė laukui %s"
2115
 
2116
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2117
- #: src/Tribe/Validate.php:330
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s turi turėti reikšmę, kuri yra jos pasirinkties dalis."
2120
 
2121
- #: src/Tribe/Validate.php:275
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s turi būti galiojantis absoliutus URL."
2124
 
2125
- #: src/Tribe/Validate.php:260
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s turi būti galiojantis trumpinys (skaičiai, raidės, brūkšneliai ir pabraukimai)."
2128
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2073
  msgid "Select a Country:"
2074
  msgstr "Pasirinkite šalį:"
2075
 
2076
+ #: src/Tribe/Validate.php:503
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Šalių sąrašas turi būti suformatuota kaip viena šalis eilutėje šiuo formatu: <br>US, United States <br> UK, United Kingdom."
2079
 
2080
+ #: src/Tribe/Validate.php:487
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s turi būti telefono numeris."
2083
 
2084
+ #: src/Tribe/Validate.php:473
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s turi būti sudaryti iš 5 skaičių."
2087
 
2088
+ #: src/Tribe/Validate.php:459
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s turi sudaryti tik raidės, tarpai, apostrofai ir brūkšneliai."
2091
 
2092
+ #: src/Tribe/Validate.php:443
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s turi sudaryti tik raidės, skaičiai, brūkšneliai, apostrofai ir tarpai."
2095
 
2096
+ #: src/Tribe/Validate.php:427
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s turi būti skaičius nuo 0 iki 21."
2099
 
2100
+ #: src/Tribe/Validate.php:373
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s turi būti skaičius arba procentas."
2103
 
2104
+ #: src/Tribe/Validate.php:357
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s negali būti dublikatas"
2107
 
2108
+ #: src/Tribe/Validate.php:355
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s negali būti tas pats kaip%s"
2111
 
2112
+ #: src/Tribe/Validate.php:348
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Palyginimo patikrinti nepavyko, nes nebuvo nurodyta jokia palyginimo vertė laukui %s"
2115
 
2116
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2117
+ #: src/Tribe/Validate.php:334
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s turi turėti reikšmę, kuri yra jos pasirinkties dalis."
2120
 
2121
+ #: src/Tribe/Validate.php:279
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s turi būti galiojantis absoliutus URL."
2124
 
2125
+ #: src/Tribe/Validate.php:264
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s turi būti galiojantis trumpinys (skaičiai, raidės, brūkšneliai ir pabraukimai)."
2128
 
common/lang/tribe-common-lv.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2073,56 +2073,56 @@ msgstr "Afganistāna"
2073
  msgid "Select a Country:"
2074
  msgstr "Izvēlies Valsti:"
2075
 
2076
- #: src/Tribe/Validate.php:499
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Valstu sarakstā katrai valstij jābūt savā līnijā pēc sekojoša formāta <br>US, Unated States <br> UK, United Kingdom."
2079
 
2080
- #: src/Tribe/Validate.php:483
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s jābūt tālrunim"
2083
 
2084
- #: src/Tribe/Validate.php:469
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s jāsastāv no 5 skaitļiem."
2087
 
2088
- #: src/Tribe/Validate.php:455
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s jāsastāv no burtiem, atstarpēm, apostrofiem un domuzīmēm."
2091
 
2092
- #: src/Tribe/Validate.php:439
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s jāsastāv tikai no no burtiem, cipariem, domuzīmēm, apostrofiem un atstarpēm."
2095
 
2096
- #: src/Tribe/Validate.php:423
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s jābūt skaitlim no 0 līdz 21"
2099
 
2100
- #: src/Tribe/Validate.php:369
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s jābūt skaitlim vai procentiem"
2103
 
2104
- #: src/Tribe/Validate.php:353
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s nedrīkst būt dublikāts"
2107
 
2108
- #: src/Tribe/Validate.php:351
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s nedrīkst būt tāds pats kā %s."
2111
 
2112
- #: src/Tribe/Validate.php:344
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Salīdzināšanas validācija neizdevās, jo laukam %s netika padota salīdzināmā vērtība"
2115
 
2116
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2117
- #: src/Tribe/Validate.php:330
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s ir jābūt vērtībai kura ir daļa no tās opcijām."
2120
 
2121
- #: src/Tribe/Validate.php:275
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s ir jābūt derīgam un absolūtam URL."
2124
 
2125
- #: src/Tribe/Validate.php:260
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s ir jābūt derīgam īsvārdam (skaitļi, burti, domuzīmes un apakšsvītras)."
2128
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2073
  msgid "Select a Country:"
2074
  msgstr "Izvēlies Valsti:"
2075
 
2076
+ #: src/Tribe/Validate.php:503
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Valstu sarakstā katrai valstij jābūt savā līnijā pēc sekojoša formāta <br>US, Unated States <br> UK, United Kingdom."
2079
 
2080
+ #: src/Tribe/Validate.php:487
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s jābūt tālrunim"
2083
 
2084
+ #: src/Tribe/Validate.php:473
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s jāsastāv no 5 skaitļiem."
2087
 
2088
+ #: src/Tribe/Validate.php:459
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s jāsastāv no burtiem, atstarpēm, apostrofiem un domuzīmēm."
2091
 
2092
+ #: src/Tribe/Validate.php:443
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s jāsastāv tikai no no burtiem, cipariem, domuzīmēm, apostrofiem un atstarpēm."
2095
 
2096
+ #: src/Tribe/Validate.php:427
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s jābūt skaitlim no 0 līdz 21"
2099
 
2100
+ #: src/Tribe/Validate.php:373
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s jābūt skaitlim vai procentiem"
2103
 
2104
+ #: src/Tribe/Validate.php:357
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s nedrīkst būt dublikāts"
2107
 
2108
+ #: src/Tribe/Validate.php:355
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s nedrīkst būt tāds pats kā %s."
2111
 
2112
+ #: src/Tribe/Validate.php:348
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Salīdzināšanas validācija neizdevās, jo laukam %s netika padota salīdzināmā vērtība"
2115
 
2116
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2117
+ #: src/Tribe/Validate.php:334
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s ir jābūt vērtībai kura ir daļa no tās opcijām."
2120
 
2121
+ #: src/Tribe/Validate.php:279
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s ir jābūt derīgam un absolūtam URL."
2124
 
2125
+ #: src/Tribe/Validate.php:264
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s ir jābūt derīgam īsvārdam (skaitļi, burti, domuzīmes un apakšsvītras)."
2128
 
common/lang/tribe-common-nb_NO.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Velg et land:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Liste over land må være formatert som ett land pr linje i følgende format: <br>US, United States <br> UK, United Kingdom."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s må være et telefonnummer."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s må inneholde 5 tall."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s må inneholde bokstaver, mellomrom, apostrofer og bindestrek."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s kan kun inneholde bokstaver, tall, strek, apostrof eller mellomrom."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s må være et tall mellom 0 og 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s må være ett nummer."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s kan ikke være et duplikat"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s kan ikke være det samme som %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Sammenligningsvalidering mislyktes fordi ingen sammenligningsverdi var angitt for felt %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s må ha en verdi i samsvar med valgmulighetene."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s må være en gyldig absolutt URL."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s må være en gyldig kortlenke (tall, bokstaver, bindestrek og understrek)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Velg et land:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Liste over land må være formatert som ett land pr linje i følgende format: <br>US, United States <br> UK, United Kingdom."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s må være et telefonnummer."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s må inneholde 5 tall."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s må inneholde bokstaver, mellomrom, apostrofer og bindestrek."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s kan kun inneholde bokstaver, tall, strek, apostrof eller mellomrom."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s må være et tall mellom 0 og 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s må være ett nummer."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s kan ikke være et duplikat"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s kan ikke være det samme som %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Sammenligningsvalidering mislyktes fordi ingen sammenligningsverdi var angitt for felt %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s må ha en verdi i samsvar med valgmulighetene."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s må være en gyldig absolutt URL."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s må være en gyldig kortlenke (tall, bokstaver, bindestrek og understrek)."
2125
 
common/lang/tribe-common-nl_NL.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2072,56 +2072,56 @@ msgstr "Afghanistan"
2072
  msgid "Select a Country:"
2073
  msgstr "Selecteer een land:"
2074
 
2075
- #: src/Tribe/Validate.php:499
2076
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2077
  msgstr "Landenlijst moet geformatteerd zijn als een land per regel in het volgende formaat <br>US, United States <br> UK, United Kingdom."
2078
 
2079
- #: src/Tribe/Validate.php:483
2080
  msgid "%s must be a phone number."
2081
  msgstr "%s moet een telefoonnummer zijn."
2082
 
2083
- #: src/Tribe/Validate.php:469
2084
  msgid "%s must consist of 5 numbers."
2085
  msgstr "%s moet bestaan uit 5 getallen."
2086
 
2087
- #: src/Tribe/Validate.php:455
2088
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2089
  msgstr "%s moet bestaan uit letters, spaties, apostroffen en streepjes."
2090
 
2091
- #: src/Tribe/Validate.php:439
2092
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2093
  msgstr "%s moet alleen bestaan uit letters, getallen, streepjes, apostroffen en spaties."
2094
 
2095
- #: src/Tribe/Validate.php:423
2096
  msgid "%s must be a number between 0 and 21."
2097
  msgstr "%s moet een getal tussen 0 en 21 zijn."
2098
 
2099
- #: src/Tribe/Validate.php:369
2100
  msgid "%s must be a number or percentage."
2101
  msgstr "%s moet een getal of percentage zijn."
2102
 
2103
- #: src/Tribe/Validate.php:353
2104
  msgid "%s cannot be a duplicate"
2105
  msgstr "%s kan geen duplicaat zijn"
2106
 
2107
- #: src/Tribe/Validate.php:351
2108
  msgid "%s cannot be the same as %s."
2109
  msgstr "%s kan niet hetzelfde zijn als %s."
2110
 
2111
- #: src/Tribe/Validate.php:344
2112
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2113
  msgstr "Vergelijkende validatie lukt niet omdat geen vergelijkingswaarde is verstrekt in het veld %s"
2114
 
2115
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2116
- #: src/Tribe/Validate.php:330
2117
  msgid "%s must have a value that's part of its options."
2118
  msgstr "%s moet een waarde hebben die deel is van de opties."
2119
 
2120
- #: src/Tribe/Validate.php:275
2121
  msgid "%s must be a valid absolute URL."
2122
  msgstr "%s moet een valide absolute URL zijn."
2123
 
2124
- #: src/Tribe/Validate.php:260
2125
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2126
  msgstr "%s moet een geldige slug zijn (nummers, letters, streepjes en underscores)."
2127
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2072
  msgid "Select a Country:"
2073
  msgstr "Selecteer een land:"
2074
 
2075
+ #: src/Tribe/Validate.php:503
2076
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2077
  msgstr "Landenlijst moet geformatteerd zijn als een land per regel in het volgende formaat <br>US, United States <br> UK, United Kingdom."
2078
 
2079
+ #: src/Tribe/Validate.php:487
2080
  msgid "%s must be a phone number."
2081
  msgstr "%s moet een telefoonnummer zijn."
2082
 
2083
+ #: src/Tribe/Validate.php:473
2084
  msgid "%s must consist of 5 numbers."
2085
  msgstr "%s moet bestaan uit 5 getallen."
2086
 
2087
+ #: src/Tribe/Validate.php:459
2088
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2089
  msgstr "%s moet bestaan uit letters, spaties, apostroffen en streepjes."
2090
 
2091
+ #: src/Tribe/Validate.php:443
2092
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2093
  msgstr "%s moet alleen bestaan uit letters, getallen, streepjes, apostroffen en spaties."
2094
 
2095
+ #: src/Tribe/Validate.php:427
2096
  msgid "%s must be a number between 0 and 21."
2097
  msgstr "%s moet een getal tussen 0 en 21 zijn."
2098
 
2099
+ #: src/Tribe/Validate.php:373
2100
  msgid "%s must be a number or percentage."
2101
  msgstr "%s moet een getal of percentage zijn."
2102
 
2103
+ #: src/Tribe/Validate.php:357
2104
  msgid "%s cannot be a duplicate"
2105
  msgstr "%s kan geen duplicaat zijn"
2106
 
2107
+ #: src/Tribe/Validate.php:355
2108
  msgid "%s cannot be the same as %s."
2109
  msgstr "%s kan niet hetzelfde zijn als %s."
2110
 
2111
+ #: src/Tribe/Validate.php:348
2112
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2113
  msgstr "Vergelijkende validatie lukt niet omdat geen vergelijkingswaarde is verstrekt in het veld %s"
2114
 
2115
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2116
+ #: src/Tribe/Validate.php:334
2117
  msgid "%s must have a value that's part of its options."
2118
  msgstr "%s moet een waarde hebben die deel is van de opties."
2119
 
2120
+ #: src/Tribe/Validate.php:279
2121
  msgid "%s must be a valid absolute URL."
2122
  msgstr "%s moet een valide absolute URL zijn."
2123
 
2124
+ #: src/Tribe/Validate.php:264
2125
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2126
  msgstr "%s moet een geldige slug zijn (nummers, letters, streepjes en underscores)."
2127
 
common/lang/tribe-common-pl_PL.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2073,56 +2073,56 @@ msgstr ""
2073
  msgid "Select a Country:"
2074
  msgstr "Wybierz kraj:"
2075
 
2076
- #: src/Tribe/Validate.php:499
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Podaj po jednym kraju w każdej linii, zachowując następujący format: <br>US, United States <br> UK, United Kingdom."
2079
 
2080
- #: src/Tribe/Validate.php:483
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s musi być numerem telefonu."
2083
 
2084
- #: src/Tribe/Validate.php:469
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s musi składać się z 5 cyfr."
2087
 
2088
- #: src/Tribe/Validate.php:455
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s może zawierać litery, spacje, apostrofy i podkreślenia."
2091
 
2092
- #: src/Tribe/Validate.php:439
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s może zawierać tylko litery, cyfry, podkreślenia, apostrofy i spacje. "
2095
 
2096
- #: src/Tribe/Validate.php:423
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s musi być liczbą z zakresu 0-21."
2099
 
2100
- #: src/Tribe/Validate.php:369
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s musi być liczbą lub procentem."
2103
 
2104
- #: src/Tribe/Validate.php:353
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s nie może być zduplikowane"
2107
 
2108
- #: src/Tribe/Validate.php:351
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s nie może być taka sama jak %s."
2111
 
2112
- #: src/Tribe/Validate.php:344
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr ""
2115
 
2116
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2117
- #: src/Tribe/Validate.php:330
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr ""
2120
 
2121
- #: src/Tribe/Validate.php:275
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s musi być poprawnym bezwzględnym adresem URL."
2124
 
2125
- #: src/Tribe/Validate.php:260
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s musi być poprawnym slugiem (moze zawierać cyfry, litery, myślniki i podkreślenie)."
2128
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2073
  msgid "Select a Country:"
2074
  msgstr "Wybierz kraj:"
2075
 
2076
+ #: src/Tribe/Validate.php:503
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Podaj po jednym kraju w każdej linii, zachowując następujący format: <br>US, United States <br> UK, United Kingdom."
2079
 
2080
+ #: src/Tribe/Validate.php:487
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s musi być numerem telefonu."
2083
 
2084
+ #: src/Tribe/Validate.php:473
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s musi składać się z 5 cyfr."
2087
 
2088
+ #: src/Tribe/Validate.php:459
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s może zawierać litery, spacje, apostrofy i podkreślenia."
2091
 
2092
+ #: src/Tribe/Validate.php:443
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s może zawierać tylko litery, cyfry, podkreślenia, apostrofy i spacje. "
2095
 
2096
+ #: src/Tribe/Validate.php:427
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s musi być liczbą z zakresu 0-21."
2099
 
2100
+ #: src/Tribe/Validate.php:373
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s musi być liczbą lub procentem."
2103
 
2104
+ #: src/Tribe/Validate.php:357
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s nie może być zduplikowane"
2107
 
2108
+ #: src/Tribe/Validate.php:355
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s nie może być taka sama jak %s."
2111
 
2112
+ #: src/Tribe/Validate.php:348
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr ""
2115
 
2116
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2117
+ #: src/Tribe/Validate.php:334
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr ""
2120
 
2121
+ #: src/Tribe/Validate.php:279
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s musi być poprawnym bezwzględnym adresem URL."
2124
 
2125
+ #: src/Tribe/Validate.php:264
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s musi być poprawnym slugiem (moze zawierać cyfry, litery, myślniki i podkreślenie)."
2128
 
common/lang/tribe-common-pt_BR.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afeganistão"
2070
  msgid "Select a Country:"
2071
  msgstr "Selecione um País:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "A listagem de países deve ser formatada com um país por linha, no seguinte formato: <br/>US, Estados Unidos <br/> UK, Reino Unido."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s deve ser um número de telefone."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s deve conter 5 números."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s deve possuir letras, espaços, apóstrofos e traços."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s deve possuir apenas letras, números, traços, apóstrofos e espaços."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s deve ser um número entre 0 e 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s deve ser um número ou porcentagem."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s não pode ser uma duplicata"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s não pode ser o mesmo que %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "A comparação de validação falhou porque não foi fornecido um valor de comparação para o campo %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s precisa ter um valor que seja parte destas opções."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%sprecisa ser uma URL absoluta válida."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s precisa ser um slug válido (números, letras, traços e sublinhados)"
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Selecione um País:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "A listagem de países deve ser formatada com um país por linha, no seguinte formato: <br/>US, Estados Unidos <br/> UK, Reino Unido."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s deve ser um número de telefone."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s deve conter 5 números."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s deve possuir letras, espaços, apóstrofos e traços."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s deve possuir apenas letras, números, traços, apóstrofos e espaços."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s deve ser um número entre 0 e 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s deve ser um número ou porcentagem."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s não pode ser uma duplicata"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s não pode ser o mesmo que %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "A comparação de validação falhou porque não foi fornecido um valor de comparação para o campo %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s precisa ter um valor que seja parte destas opções."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%sprecisa ser uma URL absoluta válida."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s precisa ser um slug válido (números, letras, traços e sublinhados)"
2125
 
common/lang/tribe-common-pt_PT.po CHANGED
@@ -75,15 +75,15 @@ msgstr "Aceite eventos submetidos por utilizadores no seu site! Com o plugin Com
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr "Importe eventos de toda a web! O Event Aggregator permite-lhe facilmente executar importações agendadas ou manuais do Facebook, Meetup, Calendário Google e iCalendar, bem como através de carregar ficheiros CSV e ICS. Pode também importar directamente de outros sites que utilizem o The Events Calendar graças ao suporte da REST API incorporada."
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr "A \"%s\" origem é inválida e não é possível obter na instância \"%s\"."
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr "Conjunto de dados vazio para este selector"
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr "Origem de dados em falta para este selector"
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afeganistão"
2070
  msgid "Select a Country:"
2071
  msgstr "Seleccione um país:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "A lista de países tem de ser formatada como um país por linha no seguinte formato: <br>US, Estados Unidos <br> UK, Reino Unido."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s deve ser um número de telefone."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s deve ser constituído por 5 números."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s deve ser constituído por letras, espaços, apóstrofos e traços."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s deve ser constituído apenas por letras, número, traços, apóstrofos e espaços."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s deve ser um número entre 0 e 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s deve ser um número ou percentagem."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s não pode ser um duplicado"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s não pode ser o mesmo que %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "A validação da comparação falhou porque não foi fornecido nenhum valor de comparação para o campo %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s deve ser um valor presente nas suas opções."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s deve ser um URL válido e absoluto."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s deve ser uma slug válida (números, letras, traços e underscores)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr "Importe eventos de toda a web! O Event Aggregator permite-lhe facilmente executar importações agendadas ou manuais do Facebook, Meetup, Calendário Google e iCalendar, bem como através de carregar ficheiros CSV e ICS. Pode também importar directamente de outros sites que utilizem o The Events Calendar graças ao suporte da REST API incorporada."
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr "A \"%s\" origem é inválida e não é possível obter na instância \"%s\"."
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr "Conjunto de dados vazio para este selector"
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr "Origem de dados em falta para este selector"
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Seleccione um país:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "A lista de países tem de ser formatada como um país por linha no seguinte formato: <br>US, Estados Unidos <br> UK, Reino Unido."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s deve ser um número de telefone."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s deve ser constituído por 5 números."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s deve ser constituído por letras, espaços, apóstrofos e traços."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s deve ser constituído apenas por letras, número, traços, apóstrofos e espaços."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s deve ser um número entre 0 e 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s deve ser um número ou percentagem."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s não pode ser um duplicado"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s não pode ser o mesmo que %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "A validação da comparação falhou porque não foi fornecido nenhum valor de comparação para o campo %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s deve ser um valor presente nas suas opções."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s deve ser um URL válido e absoluto."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s deve ser uma slug válida (números, letras, traços e underscores)."
2125
 
common/lang/tribe-common-ro_RO.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2073,56 +2073,56 @@ msgstr "Afghanistan"
2073
  msgid "Select a Country:"
2074
  msgstr "Selectaţi Ţara:"
2075
 
2076
- #: src/Tribe/Validate.php:499
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Lista ţărilor trebuie formatată sub forma unei singure ţări pe linie, cu următorul format:<br>RO, România <br> UK, United Kingdom."
2079
 
2080
- #: src/Tribe/Validate.php:483
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s trebuie să fie un număr de telefon."
2083
 
2084
- #: src/Tribe/Validate.php:469
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s trebuie să conţină 5 numere."
2087
 
2088
- #: src/Tribe/Validate.php:455
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s trebuie să conţină doar litere, spaţii,semne de apostrof şi liniuţe."
2091
 
2092
- #: src/Tribe/Validate.php:439
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s trebuie să conţină doar litere, numere, liniuţe, semne de apostrof şi spaţii."
2095
 
2096
- #: src/Tribe/Validate.php:423
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s trebuie să fie un număr între 0 şi 21."
2099
 
2100
- #: src/Tribe/Validate.php:369
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s trebuie să fie un număr sau un procent."
2103
 
2104
- #: src/Tribe/Validate.php:353
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s nu poate fi un duplicat"
2107
 
2108
- #: src/Tribe/Validate.php:351
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s nu poate fi la fel ca %s."
2111
 
2112
- #: src/Tribe/Validate.php:344
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Validarea comparărilor a eşuat pentru că nu a fost alocată nici-o valoare de comparat, pentru câmpul %s"
2115
 
2116
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2117
- #: src/Tribe/Validate.php:330
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s trebuie să aibă o valoare, parte din propriile-i opţiuni."
2120
 
2121
- #: src/Tribe/Validate.php:275
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s trebuie să fie o adresă URL absolută."
2124
 
2125
- #: src/Tribe/Validate.php:260
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s trebuie să fie un slug valid (numere, litere,liniuţe şi linii de subliniere)"
2128
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2073
  msgid "Select a Country:"
2074
  msgstr "Selectaţi Ţara:"
2075
 
2076
+ #: src/Tribe/Validate.php:503
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Lista ţărilor trebuie formatată sub forma unei singure ţări pe linie, cu următorul format:<br>RO, România <br> UK, United Kingdom."
2079
 
2080
+ #: src/Tribe/Validate.php:487
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s trebuie să fie un număr de telefon."
2083
 
2084
+ #: src/Tribe/Validate.php:473
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s trebuie să conţină 5 numere."
2087
 
2088
+ #: src/Tribe/Validate.php:459
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s trebuie să conţină doar litere, spaţii,semne de apostrof şi liniuţe."
2091
 
2092
+ #: src/Tribe/Validate.php:443
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s trebuie să conţină doar litere, numere, liniuţe, semne de apostrof şi spaţii."
2095
 
2096
+ #: src/Tribe/Validate.php:427
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s trebuie să fie un număr între 0 şi 21."
2099
 
2100
+ #: src/Tribe/Validate.php:373
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s trebuie să fie un număr sau un procent."
2103
 
2104
+ #: src/Tribe/Validate.php:357
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s nu poate fi un duplicat"
2107
 
2108
+ #: src/Tribe/Validate.php:355
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s nu poate fi la fel ca %s."
2111
 
2112
+ #: src/Tribe/Validate.php:348
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Validarea comparărilor a eşuat pentru că nu a fost alocată nici-o valoare de comparat, pentru câmpul %s"
2115
 
2116
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2117
+ #: src/Tribe/Validate.php:334
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s trebuie să aibă o valoare, parte din propriile-i opţiuni."
2120
 
2121
+ #: src/Tribe/Validate.php:279
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s trebuie să fie o adresă URL absolută."
2124
 
2125
+ #: src/Tribe/Validate.php:264
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s trebuie să fie un slug valid (numere, litere,liniuţe şi linii de subliniere)"
2128
 
common/lang/tribe-common-ru_RU.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2073,56 +2073,56 @@ msgstr "Афганистан"
2073
  msgid "Select a Country:"
2074
  msgstr "Выберите страну:"
2075
 
2076
- #: src/Tribe/Validate.php:499
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Список стран должен быть форматирован следующим образом: одна страна в строке в формате <br>США, Соединенные штаты Америки <br>ВБ, Великобритания."
2079
 
2080
- #: src/Tribe/Validate.php:483
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s должен быть номером телефона."
2083
 
2084
- #: src/Tribe/Validate.php:469
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s должен содержать 5 цифр."
2087
 
2088
- #: src/Tribe/Validate.php:455
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s должен содержать буквы, пробелы, апострофы и тире."
2091
 
2092
- #: src/Tribe/Validate.php:439
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s должен содержать только буквы, цифры, тире, апострофы и пробелы."
2095
 
2096
- #: src/Tribe/Validate.php:423
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s должен быть числом от 0 до 21."
2099
 
2100
- #: src/Tribe/Validate.php:369
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s должен быть числом или процентом."
2103
 
2104
- #: src/Tribe/Validate.php:353
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s не может быть копией"
2107
 
2108
- #: src/Tribe/Validate.php:351
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s не может совпадать с %s."
2111
 
2112
- #: src/Tribe/Validate.php:344
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Cравнение не произошло, поскольку для поля %s не было предоставлено никакое значение"
2115
 
2116
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2117
- #: src/Tribe/Validate.php:330
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s должен иметь значение, которое является частью его параметров."
2120
 
2121
- #: src/Tribe/Validate.php:275
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s должен быть допустимой абсолютной ссылкой."
2124
 
2125
- #: src/Tribe/Validate.php:260
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s должен быть допустимым адресом (цифры, буквы, тире и подчеркивания)"
2128
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2073
  msgid "Select a Country:"
2074
  msgstr "Выберите страну:"
2075
 
2076
+ #: src/Tribe/Validate.php:503
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Список стран должен быть форматирован следующим образом: одна страна в строке в формате <br>США, Соединенные штаты Америки <br>ВБ, Великобритания."
2079
 
2080
+ #: src/Tribe/Validate.php:487
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s должен быть номером телефона."
2083
 
2084
+ #: src/Tribe/Validate.php:473
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s должен содержать 5 цифр."
2087
 
2088
+ #: src/Tribe/Validate.php:459
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s должен содержать буквы, пробелы, апострофы и тире."
2091
 
2092
+ #: src/Tribe/Validate.php:443
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s должен содержать только буквы, цифры, тире, апострофы и пробелы."
2095
 
2096
+ #: src/Tribe/Validate.php:427
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s должен быть числом от 0 до 21."
2099
 
2100
+ #: src/Tribe/Validate.php:373
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s должен быть числом или процентом."
2103
 
2104
+ #: src/Tribe/Validate.php:357
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s не может быть копией"
2107
 
2108
+ #: src/Tribe/Validate.php:355
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s не может совпадать с %s."
2111
 
2112
+ #: src/Tribe/Validate.php:348
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Cравнение не произошло, поскольку для поля %s не было предоставлено никакое значение"
2115
 
2116
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2117
+ #: src/Tribe/Validate.php:334
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s должен иметь значение, которое является частью его параметров."
2120
 
2121
+ #: src/Tribe/Validate.php:279
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s должен быть допустимой абсолютной ссылкой."
2124
 
2125
+ #: src/Tribe/Validate.php:264
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s должен быть допустимым адресом (цифры, буквы, тире и подчеркивания)"
2128
 
common/lang/tribe-common-sk_SK.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2073,56 +2073,56 @@ msgstr "Afganistan"
2073
  msgid "Select a Country:"
2074
  msgstr "Vybrať krajinu:"
2075
 
2076
- #: src/Tribe/Validate.php:499
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Zoznam krajín musí byť formátovaný ako jedna krajina na riadok vo formáte: <br>US, Spojené štáty americke <br> UK, Spojené kráľovstvo."
2079
 
2080
- #: src/Tribe/Validate.php:483
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s musí byť telefónne číslo."
2083
 
2084
- #: src/Tribe/Validate.php:469
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s musí obsahovať 5 číslic."
2087
 
2088
- #: src/Tribe/Validate.php:455
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s musí obsahovať len písmená, medzery, apostrofy a pomĺčky."
2091
 
2092
- #: src/Tribe/Validate.php:439
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s musí obsahovať len písmená, číslice, pomĺčky, apostrofy a medzery."
2095
 
2096
- #: src/Tribe/Validate.php:423
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s musí byť číslo medzi 0 a 21."
2099
 
2100
- #: src/Tribe/Validate.php:369
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s musí byť číslo alebo percento."
2103
 
2104
- #: src/Tribe/Validate.php:353
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s nemôže byť duplicitné"
2107
 
2108
- #: src/Tribe/Validate.php:351
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s nemôže byť také isté ako %s"
2111
 
2112
- #: src/Tribe/Validate.php:344
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Validácia zlyhala, pretože nebola vložená žiadna porovnávaná hodnota do poľa %s"
2115
 
2116
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2117
- #: src/Tribe/Validate.php:330
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s musí mať hodnotu, ktorá je súčasťou výberu."
2120
 
2121
- #: src/Tribe/Validate.php:275
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s musí byť platná absolútna adresa URL."
2124
 
2125
- #: src/Tribe/Validate.php:260
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s musí byť platnou URL značkou (číslice, písmená, pomĺčky a podčiarkovníky)."
2128
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2073
  msgid "Select a Country:"
2074
  msgstr "Vybrať krajinu:"
2075
 
2076
+ #: src/Tribe/Validate.php:503
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Zoznam krajín musí byť formátovaný ako jedna krajina na riadok vo formáte: <br>US, Spojené štáty americke <br> UK, Spojené kráľovstvo."
2079
 
2080
+ #: src/Tribe/Validate.php:487
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s musí byť telefónne číslo."
2083
 
2084
+ #: src/Tribe/Validate.php:473
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s musí obsahovať 5 číslic."
2087
 
2088
+ #: src/Tribe/Validate.php:459
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s musí obsahovať len písmená, medzery, apostrofy a pomĺčky."
2091
 
2092
+ #: src/Tribe/Validate.php:443
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s musí obsahovať len písmená, číslice, pomĺčky, apostrofy a medzery."
2095
 
2096
+ #: src/Tribe/Validate.php:427
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s musí byť číslo medzi 0 a 21."
2099
 
2100
+ #: src/Tribe/Validate.php:373
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s musí byť číslo alebo percento."
2103
 
2104
+ #: src/Tribe/Validate.php:357
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s nemôže byť duplicitné"
2107
 
2108
+ #: src/Tribe/Validate.php:355
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s nemôže byť také isté ako %s"
2111
 
2112
+ #: src/Tribe/Validate.php:348
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Validácia zlyhala, pretože nebola vložená žiadna porovnávaná hodnota do poľa %s"
2115
 
2116
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2117
+ #: src/Tribe/Validate.php:334
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s musí mať hodnotu, ktorá je súčasťou výberu."
2120
 
2121
+ #: src/Tribe/Validate.php:279
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s musí byť platná absolútna adresa URL."
2124
 
2125
+ #: src/Tribe/Validate.php:264
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s musí byť platnou URL značkou (číslice, písmená, pomĺčky a podčiarkovníky)."
2128
 
common/lang/tribe-common-sl_SI.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2076,56 +2076,56 @@ msgstr "Afganistan"
2076
  msgid "Select a Country:"
2077
  msgstr "Izberite državo:"
2078
 
2079
- #: src/Tribe/Validate.php:499
2080
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2081
  msgstr "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2082
 
2083
- #: src/Tribe/Validate.php:483
2084
  msgid "%s must be a phone number."
2085
  msgstr "%s mora biti telefonska številka."
2086
 
2087
- #: src/Tribe/Validate.php:469
2088
  msgid "%s must consist of 5 numbers."
2089
  msgstr "%s mora biti sestavljeno iz 5 številk."
2090
 
2091
- #: src/Tribe/Validate.php:455
2092
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2093
  msgstr "%s mora biti sestavljeno iz črk, presledkov, apostrofov in vezajev. "
2094
 
2095
- #: src/Tribe/Validate.php:439
2096
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2097
  msgstr "%s lahko vseguje zgolj črke, številke, vezaje, apostrofe in presledke. "
2098
 
2099
- #: src/Tribe/Validate.php:423
2100
  msgid "%s must be a number between 0 and 21."
2101
  msgstr "%s mora biti število med 0 in 21."
2102
 
2103
- #: src/Tribe/Validate.php:369
2104
  msgid "%s must be a number or percentage."
2105
  msgstr "%s mora biti število ali procent."
2106
 
2107
- #: src/Tribe/Validate.php:353
2108
  msgid "%s cannot be a duplicate"
2109
  msgstr "%s ne more biti duplikat"
2110
 
2111
- #: src/Tribe/Validate.php:351
2112
  msgid "%s cannot be the same as %s."
2113
  msgstr "%s ne more biti enak kot %s. "
2114
 
2115
- #: src/Tribe/Validate.php:344
2116
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2117
  msgstr "Primerjalno preverjanje ni uspelo, ker ni bilo podanih vrednosti za primerjavo, za polje %s"
2118
 
2119
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2120
- #: src/Tribe/Validate.php:330
2121
  msgid "%s must have a value that's part of its options."
2122
  msgstr "%s mora imeti vrednost, ki je del možnosti."
2123
 
2124
- #: src/Tribe/Validate.php:275
2125
  msgid "%s must be a valid absolute URL."
2126
  msgstr "%s mora biti veljaven absolutni URL"
2127
 
2128
- #: src/Tribe/Validate.php:260
2129
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2130
  msgstr "%s mora biti veljavni ključ (številke, črke, vezaji in podčrtaji)."
2131
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2076
  msgid "Select a Country:"
2077
  msgstr "Izberite državo:"
2078
 
2079
+ #: src/Tribe/Validate.php:503
2080
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2081
  msgstr "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2082
 
2083
+ #: src/Tribe/Validate.php:487
2084
  msgid "%s must be a phone number."
2085
  msgstr "%s mora biti telefonska številka."
2086
 
2087
+ #: src/Tribe/Validate.php:473
2088
  msgid "%s must consist of 5 numbers."
2089
  msgstr "%s mora biti sestavljeno iz 5 številk."
2090
 
2091
+ #: src/Tribe/Validate.php:459
2092
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2093
  msgstr "%s mora biti sestavljeno iz črk, presledkov, apostrofov in vezajev. "
2094
 
2095
+ #: src/Tribe/Validate.php:443
2096
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2097
  msgstr "%s lahko vseguje zgolj črke, številke, vezaje, apostrofe in presledke. "
2098
 
2099
+ #: src/Tribe/Validate.php:427
2100
  msgid "%s must be a number between 0 and 21."
2101
  msgstr "%s mora biti število med 0 in 21."
2102
 
2103
+ #: src/Tribe/Validate.php:373
2104
  msgid "%s must be a number or percentage."
2105
  msgstr "%s mora biti število ali procent."
2106
 
2107
+ #: src/Tribe/Validate.php:357
2108
  msgid "%s cannot be a duplicate"
2109
  msgstr "%s ne more biti duplikat"
2110
 
2111
+ #: src/Tribe/Validate.php:355
2112
  msgid "%s cannot be the same as %s."
2113
  msgstr "%s ne more biti enak kot %s. "
2114
 
2115
+ #: src/Tribe/Validate.php:348
2116
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2117
  msgstr "Primerjalno preverjanje ni uspelo, ker ni bilo podanih vrednosti za primerjavo, za polje %s"
2118
 
2119
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2120
+ #: src/Tribe/Validate.php:334
2121
  msgid "%s must have a value that's part of its options."
2122
  msgstr "%s mora imeti vrednost, ki je del možnosti."
2123
 
2124
+ #: src/Tribe/Validate.php:279
2125
  msgid "%s must be a valid absolute URL."
2126
  msgstr "%s mora biti veljaven absolutni URL"
2127
 
2128
+ #: src/Tribe/Validate.php:264
2129
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2130
  msgstr "%s mora biti veljavni ključ (številke, črke, vezaji in podčrtaji)."
2131
 
common/lang/tribe-common-sr_RS.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2073,56 +2073,56 @@ msgstr "Afganistan"
2073
  msgid "Select a Country:"
2074
  msgstr "Odaberite zemlju:"
2075
 
2076
- #: src/Tribe/Validate.php:499
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Popis zemalja mora biti formatiran kao jedna zemlja po redu u sljedećem formatu: <br>SAD, Sjedinjene Američke Države <br> UK, Ujedinjeno Kraljevstvo."
2079
 
2080
- #: src/Tribe/Validate.php:483
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s mora biti telefonski broj."
2083
 
2084
- #: src/Tribe/Validate.php:469
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s mora da se sastoji od 5 brojeva."
2087
 
2088
- #: src/Tribe/Validate.php:455
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s mora da se sastoji samo od slova, razmaka, apostrofa i crtica."
2091
 
2092
- #: src/Tribe/Validate.php:439
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s mora da se sastoji samo od slova, brojeva, crtica, apostrofa i razmaka."
2095
 
2096
- #: src/Tribe/Validate.php:423
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s mora biti broj između 0 i 21."
2099
 
2100
- #: src/Tribe/Validate.php:369
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s mora biti broj ili procenat."
2103
 
2104
- #: src/Tribe/Validate.php:353
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s ne može biti duplikat"
2107
 
2108
- #: src/Tribe/Validate.php:351
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s ne može biti isto kao %s."
2111
 
2112
- #: src/Tribe/Validate.php:344
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Validacija poređenja nije uspela jer podaci za poređenje nisu dati za polje %s"
2115
 
2116
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2117
- #: src/Tribe/Validate.php:330
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s mora imati vrijednost koja je dio opcije"
2120
 
2121
- #: src/Tribe/Validate.php:275
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s mora biti validan apsolutni URL"
2124
 
2125
- #: src/Tribe/Validate.php:260
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s mora biti validan naziv (brojevi, slova, donje crte)"
2128
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2073
  msgid "Select a Country:"
2074
  msgstr "Odaberite zemlju:"
2075
 
2076
+ #: src/Tribe/Validate.php:503
2077
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2078
  msgstr "Popis zemalja mora biti formatiran kao jedna zemlja po redu u sljedećem formatu: <br>SAD, Sjedinjene Američke Države <br> UK, Ujedinjeno Kraljevstvo."
2079
 
2080
+ #: src/Tribe/Validate.php:487
2081
  msgid "%s must be a phone number."
2082
  msgstr "%s mora biti telefonski broj."
2083
 
2084
+ #: src/Tribe/Validate.php:473
2085
  msgid "%s must consist of 5 numbers."
2086
  msgstr "%s mora da se sastoji od 5 brojeva."
2087
 
2088
+ #: src/Tribe/Validate.php:459
2089
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2090
  msgstr "%s mora da se sastoji samo od slova, razmaka, apostrofa i crtica."
2091
 
2092
+ #: src/Tribe/Validate.php:443
2093
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2094
  msgstr "%s mora da se sastoji samo od slova, brojeva, crtica, apostrofa i razmaka."
2095
 
2096
+ #: src/Tribe/Validate.php:427
2097
  msgid "%s must be a number between 0 and 21."
2098
  msgstr "%s mora biti broj između 0 i 21."
2099
 
2100
+ #: src/Tribe/Validate.php:373
2101
  msgid "%s must be a number or percentage."
2102
  msgstr "%s mora biti broj ili procenat."
2103
 
2104
+ #: src/Tribe/Validate.php:357
2105
  msgid "%s cannot be a duplicate"
2106
  msgstr "%s ne može biti duplikat"
2107
 
2108
+ #: src/Tribe/Validate.php:355
2109
  msgid "%s cannot be the same as %s."
2110
  msgstr "%s ne može biti isto kao %s."
2111
 
2112
+ #: src/Tribe/Validate.php:348
2113
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2114
  msgstr "Validacija poređenja nije uspela jer podaci za poređenje nisu dati za polje %s"
2115
 
2116
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2117
+ #: src/Tribe/Validate.php:334
2118
  msgid "%s must have a value that's part of its options."
2119
  msgstr "%s mora imati vrijednost koja je dio opcije"
2120
 
2121
+ #: src/Tribe/Validate.php:279
2122
  msgid "%s must be a valid absolute URL."
2123
  msgstr "%s mora biti validan apsolutni URL"
2124
 
2125
+ #: src/Tribe/Validate.php:264
2126
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2127
  msgstr "%s mora biti validan naziv (brojevi, slova, donje crte)"
2128
 
common/lang/tribe-common-sv_SE.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Välj ett land:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Landslistan måste vara formaterad med ett land per rad på följande format: <br>SE, Sverige <br> US, United States <br> UK, United Kingdom."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s måste vara ett telefonnummer."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s måste bestå av 5 tal."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s måste bestå av bokstäver, mellanslag, apostrofer och bindestreck."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s får endast bestå av bokstäver, siffor, bindestreck, apostrofer och mellanslag."
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s måste vara ett tal mellan 0 och 21."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s måste vara ett tal eller en procentsats."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s får ej vara en dublett"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s kan ej vara samma som %s."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Jämförelsekontrollen misslyckades eftersom inget jämförelsevärde angavs för fält %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s måste ha ett giltigt värde."
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s måste vara en giltig absolut URL."
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s måste vara en giltig slug (siffror, bokstäver, bindestreck och understreck)."
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Välj ett land:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Landslistan måste vara formaterad med ett land per rad på följande format: <br>SE, Sverige <br> US, United States <br> UK, United Kingdom."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s måste vara ett telefonnummer."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s måste bestå av 5 tal."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s måste bestå av bokstäver, mellanslag, apostrofer och bindestreck."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s får endast bestå av bokstäver, siffor, bindestreck, apostrofer och mellanslag."
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s måste vara ett tal mellan 0 och 21."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s måste vara ett tal eller en procentsats."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s får ej vara en dublett"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s kan ej vara samma som %s."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Jämförelsekontrollen misslyckades eftersom inget jämförelsevärde angavs för fält %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s måste ha ett giltigt värde."
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s måste vara en giltig absolut URL."
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s måste vara en giltig slug (siffror, bokstäver, bindestreck och understreck)."
2125
 
common/lang/tribe-common-tr_TR.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2070,56 +2070,56 @@ msgstr "Afghanistan"
2070
  msgid "Select a Country:"
2071
  msgstr "Ülke Seçiniz:"
2072
 
2073
- #: src/Tribe/Validate.php:499
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Ülke listesi her satırda bir ülke olarak şu formatta sunulmalıdır: <br>ABD, Birleşik Devletler <br> İngiltere, Birleşik Krallık."
2076
 
2077
- #: src/Tribe/Validate.php:483
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s bir telefon numarası olmalı."
2080
 
2081
- #: src/Tribe/Validate.php:469
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s 5 rakamdan oluşmalı."
2084
 
2085
- #: src/Tribe/Validate.php:455
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s harf, boşluk, kesme işareti ve tire içerebilir."
2088
 
2089
- #: src/Tribe/Validate.php:439
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s harf, rakam, boşluk, kesme işareti ve tire içerebilir"
2092
 
2093
- #: src/Tribe/Validate.php:423
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s 0 ile 21 arasında bir rakam olmalı."
2096
 
2097
- #: src/Tribe/Validate.php:369
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s rakam ya da yüzde olmalı."
2100
 
2101
- #: src/Tribe/Validate.php:353
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s çakışamaz"
2104
 
2105
- #: src/Tribe/Validate.php:351
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s ile %s aynı olamaz."
2108
 
2109
- #: src/Tribe/Validate.php:344
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Comparison validation failed because no comparison value was provided, for field %s"
2112
 
2113
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2114
- #: src/Tribe/Validate.php:330
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s seçeneklerinden bir değere sahip olmalı"
2117
 
2118
- #: src/Tribe/Validate.php:275
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s kesin bir URL olmalı"
2121
 
2122
- #: src/Tribe/Validate.php:260
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s düzgün bir isim olmalı (rakam, harf, tire ve alttan çizgi)"
2125
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2070
  msgid "Select a Country:"
2071
  msgstr "Ülke Seçiniz:"
2072
 
2073
+ #: src/Tribe/Validate.php:503
2074
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2075
  msgstr "Ülke listesi her satırda bir ülke olarak şu formatta sunulmalıdır: <br>ABD, Birleşik Devletler <br> İngiltere, Birleşik Krallık."
2076
 
2077
+ #: src/Tribe/Validate.php:487
2078
  msgid "%s must be a phone number."
2079
  msgstr "%s bir telefon numarası olmalı."
2080
 
2081
+ #: src/Tribe/Validate.php:473
2082
  msgid "%s must consist of 5 numbers."
2083
  msgstr "%s 5 rakamdan oluşmalı."
2084
 
2085
+ #: src/Tribe/Validate.php:459
2086
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2087
  msgstr "%s harf, boşluk, kesme işareti ve tire içerebilir."
2088
 
2089
+ #: src/Tribe/Validate.php:443
2090
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2091
  msgstr "%s harf, rakam, boşluk, kesme işareti ve tire içerebilir"
2092
 
2093
+ #: src/Tribe/Validate.php:427
2094
  msgid "%s must be a number between 0 and 21."
2095
  msgstr "%s 0 ile 21 arasında bir rakam olmalı."
2096
 
2097
+ #: src/Tribe/Validate.php:373
2098
  msgid "%s must be a number or percentage."
2099
  msgstr "%s rakam ya da yüzde olmalı."
2100
 
2101
+ #: src/Tribe/Validate.php:357
2102
  msgid "%s cannot be a duplicate"
2103
  msgstr "%s çakışamaz"
2104
 
2105
+ #: src/Tribe/Validate.php:355
2106
  msgid "%s cannot be the same as %s."
2107
  msgstr "%s ile %s aynı olamaz."
2108
 
2109
+ #: src/Tribe/Validate.php:348
2110
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2111
  msgstr "Comparison validation failed because no comparison value was provided, for field %s"
2112
 
2113
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2114
+ #: src/Tribe/Validate.php:334
2115
  msgid "%s must have a value that's part of its options."
2116
  msgstr "%s seçeneklerinden bir değere sahip olmalı"
2117
 
2118
+ #: src/Tribe/Validate.php:279
2119
  msgid "%s must be a valid absolute URL."
2120
  msgstr "%s kesin bir URL olmalı"
2121
 
2122
+ #: src/Tribe/Validate.php:264
2123
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2124
  msgstr "%s düzgün bir isim olmalı (rakam, harf, tire ve alttan çizgi)"
2125
 
common/lang/tribe-common-zh_CN.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2067,56 +2067,56 @@ msgstr "阿富汗"
2067
  msgid "Select a Country:"
2068
  msgstr "请选择国家"
2069
 
2070
- #: src/Tribe/Validate.php:499
2071
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2072
  msgstr "国家列表必须以每行一个国家的格式表列于以下的格式中:<br>US, United States <br> UK, United Kingdom."
2073
 
2074
- #: src/Tribe/Validate.php:483
2075
  msgid "%s must be a phone number."
2076
  msgstr "%s 必须是电话号码数字。"
2077
 
2078
- #: src/Tribe/Validate.php:469
2079
  msgid "%s must consist of 5 numbers."
2080
  msgstr "%s 必须由 5 个数字所组成。"
2081
 
2082
- #: src/Tribe/Validate.php:455
2083
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2084
  msgstr "%s 必须由字元、数字、空格、撇号及点所组成。"
2085
 
2086
- #: src/Tribe/Validate.php:439
2087
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2088
  msgstr "%s 必须只由字元、数字、点、撇号及空格所组成。"
2089
 
2090
- #: src/Tribe/Validate.php:423
2091
  msgid "%s must be a number between 0 and 21."
2092
  msgstr "%s 必须是介于 0 到 21之间的数字。"
2093
 
2094
- #: src/Tribe/Validate.php:369
2095
  msgid "%s must be a number or percentage."
2096
  msgstr "%s 必须是数字或百分比符号。"
2097
 
2098
- #: src/Tribe/Validate.php:353
2099
  msgid "%s cannot be a duplicate"
2100
  msgstr "%s 不能是複製的"
2101
 
2102
- #: src/Tribe/Validate.php:351
2103
  msgid "%s cannot be the same as %s."
2104
  msgstr "%s 不能和 %s 完全一样。"
2105
 
2106
- #: src/Tribe/Validate.php:344
2107
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2108
  msgstr "比较确认失败的原因是由于没有提供比较数值给栏位 %s。"
2109
 
2110
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2111
- #: src/Tribe/Validate.php:330
2112
  msgid "%s must have a value that's part of its options."
2113
  msgstr "%s 必须有一个数值是选项中的一部份。"
2114
 
2115
- #: src/Tribe/Validate.php:275
2116
  msgid "%s must be a valid absolute URL."
2117
  msgstr "%s 必须是有效完整的网址。"
2118
 
2119
- #: src/Tribe/Validate.php:260
2120
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2121
  msgstr "%s 必须是有效的代称 (数字、字元、破折号及底线)。"
2122
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2067
  msgid "Select a Country:"
2068
  msgstr "请选择国家"
2069
 
2070
+ #: src/Tribe/Validate.php:503
2071
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2072
  msgstr "国家列表必须以每行一个国家的格式表列于以下的格式中:<br>US, United States <br> UK, United Kingdom."
2073
 
2074
+ #: src/Tribe/Validate.php:487
2075
  msgid "%s must be a phone number."
2076
  msgstr "%s 必须是电话号码数字。"
2077
 
2078
+ #: src/Tribe/Validate.php:473
2079
  msgid "%s must consist of 5 numbers."
2080
  msgstr "%s 必须由 5 个数字所组成。"
2081
 
2082
+ #: src/Tribe/Validate.php:459
2083
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2084
  msgstr "%s 必须由字元、数字、空格、撇号及点所组成。"
2085
 
2086
+ #: src/Tribe/Validate.php:443
2087
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2088
  msgstr "%s 必须只由字元、数字、点、撇号及空格所组成。"
2089
 
2090
+ #: src/Tribe/Validate.php:427
2091
  msgid "%s must be a number between 0 and 21."
2092
  msgstr "%s 必须是介于 0 到 21之间的数字。"
2093
 
2094
+ #: src/Tribe/Validate.php:373
2095
  msgid "%s must be a number or percentage."
2096
  msgstr "%s 必须是数字或百分比符号。"
2097
 
2098
+ #: src/Tribe/Validate.php:357
2099
  msgid "%s cannot be a duplicate"
2100
  msgstr "%s 不能是複製的"
2101
 
2102
+ #: src/Tribe/Validate.php:355
2103
  msgid "%s cannot be the same as %s."
2104
  msgstr "%s 不能和 %s 完全一样。"
2105
 
2106
+ #: src/Tribe/Validate.php:348
2107
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2108
  msgstr "比较确认失败的原因是由于没有提供比较数值给栏位 %s。"
2109
 
2110
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2111
+ #: src/Tribe/Validate.php:334
2112
  msgid "%s must have a value that's part of its options."
2113
  msgstr "%s 必须有一个数值是选项中的一部份。"
2114
 
2115
+ #: src/Tribe/Validate.php:279
2116
  msgid "%s must be a valid absolute URL."
2117
  msgstr "%s 必须是有效完整的网址。"
2118
 
2119
+ #: src/Tribe/Validate.php:264
2120
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2121
  msgstr "%s 必须是有效的代称 (数字、字元、破折号及底线)。"
2122
 
common/lang/tribe-common-zh_TW.po CHANGED
@@ -75,15 +75,15 @@ msgstr ""
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
- #: src/Tribe/Ajax/Dropdown.php:238
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
- #: src/Tribe/Ajax/Dropdown.php:188
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
- #: src/Tribe/Ajax/Dropdown.php:175
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
@@ -2067,56 +2067,56 @@ msgstr "阿富汗"
2067
  msgid "Select a Country:"
2068
  msgstr "請選擇國家"
2069
 
2070
- #: src/Tribe/Validate.php:499
2071
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2072
  msgstr "國家列表必須以每行一個國家的格式表列於以下的格式中:<br>US, United States <br> UK, United Kingdom."
2073
 
2074
- #: src/Tribe/Validate.php:483
2075
  msgid "%s must be a phone number."
2076
  msgstr "%s 必須是電話號碼數字。"
2077
 
2078
- #: src/Tribe/Validate.php:469
2079
  msgid "%s must consist of 5 numbers."
2080
  msgstr "%s 必須由 5 個數字所組成。"
2081
 
2082
- #: src/Tribe/Validate.php:455
2083
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2084
  msgstr "%s 必須由字元、數字、空格、撇號及點所組成。"
2085
 
2086
- #: src/Tribe/Validate.php:439
2087
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2088
  msgstr "%s 必須只由字元、數字、點、撇號及空格所組成。"
2089
 
2090
- #: src/Tribe/Validate.php:423
2091
  msgid "%s must be a number between 0 and 21."
2092
  msgstr "%s 必須是介於 0 到 21之間的數字。"
2093
 
2094
- #: src/Tribe/Validate.php:369
2095
  msgid "%s must be a number or percentage."
2096
  msgstr "%s 必須是數字或百分比符號。"
2097
 
2098
- #: src/Tribe/Validate.php:353
2099
  msgid "%s cannot be a duplicate"
2100
  msgstr "%s 不能是複製的"
2101
 
2102
- #: src/Tribe/Validate.php:351
2103
  msgid "%s cannot be the same as %s."
2104
  msgstr "%s 不能和 %s 完全一樣。"
2105
 
2106
- #: src/Tribe/Validate.php:344
2107
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2108
  msgstr "比較確認失敗的原因是由於沒有提供比較數值給欄位 %s。"
2109
 
2110
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2111
- #: src/Tribe/Validate.php:330
2112
  msgid "%s must have a value that's part of its options."
2113
  msgstr "%s 必須有一個數值是選項中的一部份。"
2114
 
2115
- #: src/Tribe/Validate.php:275
2116
  msgid "%s must be a valid absolute URL."
2117
  msgstr "%s 必須是有效完整的網址。"
2118
 
2119
- #: src/Tribe/Validate.php:260
2120
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2121
  msgstr "%s 必須是有效的代稱 (數字、字元、破折號及底線)。"
2122
 
75
  msgid "Import events from across the web! Event Aggregator makes it easy to run scheduled or manual imports from Facebook, Meetup, Google Calendar, and iCalendar, along with uploads from CSV and ICS files. You can also import directly from other sites running The Events Calendar thanks to our built-in REST API support."
76
  msgstr ""
77
 
78
+ #: src/Tribe/Ajax/Dropdown.php:243
79
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
80
  msgstr ""
81
 
82
+ #: src/Tribe/Ajax/Dropdown.php:193
83
  msgid "Empty data set for this dropdown"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Ajax/Dropdown.php:180
87
  msgid "Missing data source for this dropdown"
88
  msgstr ""
89
 
2067
  msgid "Select a Country:"
2068
  msgstr "請選擇國家"
2069
 
2070
+ #: src/Tribe/Validate.php:503
2071
  msgid "Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom."
2072
  msgstr "國家列表必須以每行一個國家的格式表列於以下的格式中:<br>US, United States <br> UK, United Kingdom."
2073
 
2074
+ #: src/Tribe/Validate.php:487
2075
  msgid "%s must be a phone number."
2076
  msgstr "%s 必須是電話號碼數字。"
2077
 
2078
+ #: src/Tribe/Validate.php:473
2079
  msgid "%s must consist of 5 numbers."
2080
  msgstr "%s 必須由 5 個數字所組成。"
2081
 
2082
+ #: src/Tribe/Validate.php:459
2083
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2084
  msgstr "%s 必須由字元、數字、空格、撇號及點所組成。"
2085
 
2086
+ #: src/Tribe/Validate.php:443
2087
  msgid "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2088
  msgstr "%s 必須只由字元、數字、點、撇號及空格所組成。"
2089
 
2090
+ #: src/Tribe/Validate.php:427
2091
  msgid "%s must be a number between 0 and 21."
2092
  msgstr "%s 必須是介於 0 到 21之間的數字。"
2093
 
2094
+ #: src/Tribe/Validate.php:373
2095
  msgid "%s must be a number or percentage."
2096
  msgstr "%s 必須是數字或百分比符號。"
2097
 
2098
+ #: src/Tribe/Validate.php:357
2099
  msgid "%s cannot be a duplicate"
2100
  msgstr "%s 不能是複製的"
2101
 
2102
+ #: src/Tribe/Validate.php:355
2103
  msgid "%s cannot be the same as %s."
2104
  msgstr "%s 不能和 %s 完全一樣。"
2105
 
2106
+ #: src/Tribe/Validate.php:348
2107
  msgid "Comparison validation failed because no comparison value was provided, for field %s"
2108
  msgstr "比較確認失敗的原因是由於沒有提供比較數值給欄位 %s。"
2109
 
2110
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2111
+ #: src/Tribe/Validate.php:334
2112
  msgid "%s must have a value that's part of its options."
2113
  msgstr "%s 必須有一個數值是選項中的一部份。"
2114
 
2115
+ #: src/Tribe/Validate.php:279
2116
  msgid "%s must be a valid absolute URL."
2117
  msgstr "%s 必須是有效完整的網址。"
2118
 
2119
+ #: src/Tribe/Validate.php:264
2120
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2121
  msgstr "%s 必須是有效的代稱 (數字、字元、破折號及底線)。"
2122
 
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.7rc1\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
- "POT-Creation-Date: 2017-11-06 23:57:25+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: 2017-11-06 23:57\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
@@ -179,15 +179,15 @@ msgstr ""
179
  msgid "Cannot look for Terms without a taxonomy"
180
  msgstr ""
181
 
182
- #: src/Tribe/Ajax/Dropdown.php:175
183
  msgid "Missing data source for this dropdown"
184
  msgstr ""
185
 
186
- #: src/Tribe/Ajax/Dropdown.php:188
187
  msgid "Empty data set for this dropdown"
188
  msgstr ""
189
 
190
- #: src/Tribe/Ajax/Dropdown.php:238
191
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
192
  msgstr ""
193
 
@@ -2098,59 +2098,59 @@ msgstr ""
2098
  msgid "%s must be a whole number."
2099
  msgstr ""
2100
 
2101
- #: src/Tribe/Validate.php:260
2102
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2103
  msgstr ""
2104
 
2105
- #: src/Tribe/Validate.php:275
2106
  msgid "%s must be a valid absolute URL."
2107
  msgstr ""
2108
 
2109
- #: src/Tribe/Validate.php:291 src/Tribe/Validate.php:308
2110
- #: src/Tribe/Validate.php:330
2111
  msgid "%s must have a value that's part of its options."
2112
  msgstr ""
2113
 
2114
- #: src/Tribe/Validate.php:344
2115
  msgid ""
2116
  "Comparison validation failed because no comparison value was provided, for "
2117
  "field %s"
2118
  msgstr ""
2119
 
2120
- #: src/Tribe/Validate.php:351
2121
  msgid "%s cannot be the same as %s."
2122
  msgstr ""
2123
 
2124
- #: src/Tribe/Validate.php:353
2125
  msgid "%s cannot be a duplicate"
2126
  msgstr ""
2127
 
2128
- #: src/Tribe/Validate.php:369
2129
  msgid "%s must be a number or percentage."
2130
  msgstr ""
2131
 
2132
- #: src/Tribe/Validate.php:423
2133
  msgid "%s must be a number between 0 and 21."
2134
  msgstr ""
2135
 
2136
- #: src/Tribe/Validate.php:439
2137
  msgid ""
2138
  "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2139
  msgstr ""
2140
 
2141
- #: src/Tribe/Validate.php:455
2142
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2143
  msgstr ""
2144
 
2145
- #: src/Tribe/Validate.php:469
2146
  msgid "%s must consist of 5 numbers."
2147
  msgstr ""
2148
 
2149
- #: src/Tribe/Validate.php:483
2150
  msgid "%s must be a phone number."
2151
  msgstr ""
2152
 
2153
- #: src/Tribe/Validate.php:499
2154
  msgid ""
2155
  "Country List must be formatted as one country per line in the following "
2156
  "format: <br>US, United States <br> UK, United Kingdom."
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.7.1\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
+ "POT-Creation-Date: 2017-11-14 22:13: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: 2017-11-14 22:13\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
179
  msgid "Cannot look for Terms without a taxonomy"
180
  msgstr ""
181
 
182
+ #: src/Tribe/Ajax/Dropdown.php:180
183
  msgid "Missing data source for this dropdown"
184
  msgstr ""
185
 
186
+ #: src/Tribe/Ajax/Dropdown.php:193
187
  msgid "Empty data set for this dropdown"
188
  msgstr ""
189
 
190
+ #: src/Tribe/Ajax/Dropdown.php:243
191
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
192
  msgstr ""
193
 
2098
  msgid "%s must be a whole number."
2099
  msgstr ""
2100
 
2101
+ #: src/Tribe/Validate.php:264
2102
  msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
2103
  msgstr ""
2104
 
2105
+ #: src/Tribe/Validate.php:279
2106
  msgid "%s must be a valid absolute URL."
2107
  msgstr ""
2108
 
2109
+ #: src/Tribe/Validate.php:295 src/Tribe/Validate.php:312
2110
+ #: src/Tribe/Validate.php:334
2111
  msgid "%s must have a value that's part of its options."
2112
  msgstr ""
2113
 
2114
+ #: src/Tribe/Validate.php:348
2115
  msgid ""
2116
  "Comparison validation failed because no comparison value was provided, for "
2117
  "field %s"
2118
  msgstr ""
2119
 
2120
+ #: src/Tribe/Validate.php:355
2121
  msgid "%s cannot be the same as %s."
2122
  msgstr ""
2123
 
2124
+ #: src/Tribe/Validate.php:357
2125
  msgid "%s cannot be a duplicate"
2126
  msgstr ""
2127
 
2128
+ #: src/Tribe/Validate.php:373
2129
  msgid "%s must be a number or percentage."
2130
  msgstr ""
2131
 
2132
+ #: src/Tribe/Validate.php:427
2133
  msgid "%s must be a number between 0 and 21."
2134
  msgstr ""
2135
 
2136
+ #: src/Tribe/Validate.php:443
2137
  msgid ""
2138
  "%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
2139
  msgstr ""
2140
 
2141
+ #: src/Tribe/Validate.php:459
2142
  msgid "%s must consist of letters, spaces, apostrophes, and dashes."
2143
  msgstr ""
2144
 
2145
+ #: src/Tribe/Validate.php:473
2146
  msgid "%s must consist of 5 numbers."
2147
  msgstr ""
2148
 
2149
+ #: src/Tribe/Validate.php:487
2150
  msgid "%s must be a phone number."
2151
  msgstr ""
2152
 
2153
+ #: src/Tribe/Validate.php:503
2154
  msgid ""
2155
  "Country List must be formatted as one country per line in the following "
2156
  "format: <br>US, United States <br> UK, United Kingdom."
common/readme.txt CHANGED
@@ -2,6 +2,23 @@
2
 
3
  == Changelog ==
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  = [4.7] 2017-11-09 =
6
 
7
  * Feature - Included a new Validation.js for Forms and Fields
@@ -109,3 +126,4 @@
109
 
110
  * Fix - Resolved issue where the Meta Chunker attempted to inappropriately chunk meta for post post_types [80857]
111
  * Language - 0 new strings added, 0 updated, 1 fuzzied, and 0 obsoleted [tribe-common]
 
2
 
3
  == Changelog ==
4
 
5
+ = [4.7.2] 2017-11-21 =
6
+
7
+ * Feature - Added Template class which adds a few layers of filtering to any template file included
8
+ * Tweak - Included `tribe_callback_return` for static returns for Hooks
9
+ * Language - 0 new strings added, 0 updated, 1 fuzzied, and 0 obsoleted
10
+
11
+ = [4.7.1] 2017-11-16 =
12
+
13
+ * Fix - Added support for translatable placeholder text when dropdown selectors are waiting on results being returned via ajax [84926]
14
+ * Fix - Implemented an additional file permissions check within default error logger (our thanks to Oscar for highlighting this) [73551]
15
+ * Tweak - Added new `tribe_is_site_using_24_hour_time()` function to easily check if the site is using a 24-hour time format [78621]
16
+ * Tweak - Ensure the "Debug Mode" helper text in the Events Settings screen displays all of the time (it previously would vanish with certain permalinks settings) [92315]
17
+ * Tweak - Allow for non-Latin characters to be used as the Events URL slug and the Single Event URL slug (thanks @daviddweb for originally reporting this) [61880]
18
+ * Tweak - Removed restrictions imposed on taxonomy queries by Tribe__Ajax__Dropdown (our thanks to Ian in the forums for flagging this issue) [91762]
19
+ * Tweak - Fixed the definition of Tribe__Rewrite::get_bases() to address some PHP strict notices its previous definition triggered [91828]
20
+ * Language - 0 new strings added, 16 updated, 1 fuzzied, and 0 obsoleted
21
+
22
  = [4.7] 2017-11-09 =
23
 
24
  * Feature - Included a new Validation.js for Forms and Fields
126
 
127
  * Fix - Resolved issue where the Meta Chunker attempted to inappropriately chunk meta for post post_types [80857]
128
  * Language - 0 new strings added, 0 updated, 1 fuzzied, and 0 obsoleted [tribe-common]
129
+
common/src/Tribe/Ajax/Dropdown.php CHANGED
@@ -37,9 +37,10 @@ class Tribe__Ajax__Dropdown {
37
  if ( empty( $args['taxonomy'] ) ) {
38
  $this->error( esc_attr__( 'Cannot look for Terms without a taxonomy', 'tribe-common' ) );
39
  }
 
40
  // We always want all the fields so we overwrite it
41
- $args['fields'] = 'all';
42
- $args['get'] = 'all';
43
 
44
  if ( ! empty( $search ) ) {
45
  $args['search'] = $search;
@@ -54,8 +55,12 @@ class Tribe__Ajax__Dropdown {
54
 
55
  $results = array();
56
 
 
 
 
 
57
  if ( empty( $args['search'] ) ) {
58
- $this->sort_terms_hierarchically( $terms, $results );
59
  $results = $this->convert_children_to_array( $results );
60
  } else {
61
  foreach ( $terms as $term ) {
37
  if ( empty( $args['taxonomy'] ) ) {
38
  $this->error( esc_attr__( 'Cannot look for Terms without a taxonomy', 'tribe-common' ) );
39
  }
40
+
41
  // We always want all the fields so we overwrite it
42
+ $args['fields'] = isset( $args['fields'] ) ? $args['fields'] : 'all';
43
+ $args['hide_empty'] = isset( $args['hide_empty'] ) ? $args['hide_empty'] : false;
44
 
45
  if ( ! empty( $search ) ) {
46
  $args['search'] = $search;
55
 
56
  $results = array();
57
 
58
+ // Respect the parent/child_of argument if set
59
+ $parent = ! empty( $args['child_of'] ) ? (int) $args['child_of'] : 0;
60
+ $parent = ! empty( $args['parent'] ) ? (int) $args['parent'] : $parent;
61
+
62
  if ( empty( $args['search'] ) ) {
63
+ $this->sort_terms_hierarchically( $terms, $results, $parent );
64
  $results = $this->convert_children_to_array( $results );
65
  } else {
66
  foreach ( $terms as $term ) {
common/src/Tribe/Container.php CHANGED
@@ -247,16 +247,48 @@ if ( ! function_exists( 'tribe_register_provider' ) ) {
247
  * Returns a lambda function suitable to use as a callback; when called the function will build the implementation
248
  * bound to `$classOrInterface` and return the value of a call to `$method` method with the call arguments.
249
  *
250
- * @param string $slug A class or interface fully qualified name or a string slug.
251
- * @param string $method The method that should be called on the resolved implementation with the
252
- * specified array arguments.
253
  *
254
- * @return mixed The called method return value.
 
 
 
 
 
255
  */
256
  function tribe_callback( $slug, $method ) {
257
  $container = Tribe__Container::init();
 
 
 
 
 
 
 
 
 
258
 
259
- return $container->callback( $slug, $method );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
260
  }
261
  }
262
  }
247
  * Returns a lambda function suitable to use as a callback; when called the function will build the implementation
248
  * bound to `$classOrInterface` and return the value of a call to `$method` method with the call arguments.
249
  *
250
+ * @since 4.7
251
+ * @since TBD Included the $argsN params
 
252
  *
253
+ * @param string $slug A class or interface fully qualified name or a string slug.
254
+ * @param string $method The method that should be called on the resolved implementation with the
255
+ * specified array arguments.
256
+ * @param mixed [$argsN] (optional) Any number of arguments that will be passed down to the Callback
257
+ *
258
+ * @return callable A PHP Callable based on the Slug and Methods passed
259
  */
260
  function tribe_callback( $slug, $method ) {
261
  $container = Tribe__Container::init();
262
+ $arguments = func_get_args();
263
+ $is_empty = 2 === count( $arguments );
264
+
265
+ if ( $is_empty ) {
266
+ $callable = $container->callback( $slug, $method );
267
+ } else {
268
+ $callback = $container->callback( 'callback', 'get' );
269
+ $callable = call_user_func_array( $callback, $arguments );
270
+ }
271
 
272
+ return $callable;
273
+ }
274
+ }
275
+
276
+ if ( ! function_exists( 'tribe_callback_return' ) ) {
277
+ /**
278
+ * Returns a tribe_callback for a very simple Return value method
279
+ *
280
+ * Example of Usage:
281
+ *
282
+ * add_filter( 'admin_title', tribe_callback_return( __( 'Ready to work.' ) ) );
283
+ *
284
+ * @since TBD
285
+ *
286
+ * @param mixed $value The value to be returned
287
+ *
288
+ * @return callable A PHP Callable based on the Slug and Methods passed
289
+ */
290
+ function tribe_callback_return( $value ) {
291
+ return tribe_callback( 'callback', 'return_value', $value );
292
  }
293
  }
294
  }
common/src/Tribe/Log/File_Logger.php CHANGED
@@ -60,7 +60,7 @@ class Tribe__Log__File_Logger implements Tribe__Log__Logger {
60
  protected function obtain_handle() {
61
  $this->close_handle();
62
 
63
- if ( ! file_exists( $this->log_file ) ) {
64
  touch( $this->log_file );
65
  }
66
 
60
  protected function obtain_handle() {
61
  $this->close_handle();
62
 
63
+ if ( ! file_exists( $this->log_file ) && $this->is_available() ) {
64
  touch( $this->log_file );
65
  }
66
 
common/src/Tribe/Main.php CHANGED
@@ -17,7 +17,7 @@ class Tribe__Main {
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
- const VERSION = '4.7';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
@@ -223,7 +223,7 @@ class Tribe__Main {
223
  array( 'tribe-common-admin', 'tribe-common-admin.css', array( 'tribe-dependency-style', 'tribe-bumpdown-css', 'tribe-buttonset-style', 'tribe-select2-css' ) ),
224
  array( 'tribe-validation', 'validation.js', array( 'jquery', 'underscore', 'tribe-common', 'tribe-utils-camelcase' ) ),
225
  array( 'tribe-validation-style', 'validation.css', array() ),
226
- array( 'tribe-dependency', 'dependency.js', array( 'jquery', 'underscore', 'tribe-select2' ) ),
227
  array( 'tribe-dependency-style', 'dependency.css', array( 'tribe-select2-css' ) ),
228
  array( 'tribe-pue-notices', 'pue-notices.js', array( 'jquery' ) ),
229
  array( 'tribe-datepicker', 'datepicker.css' ),
@@ -560,5 +560,7 @@ class Tribe__Main {
560
  tribe_singleton( 'cost-utils', array( 'Tribe__Cost_Utils', 'instance' ) );
561
  tribe_singleton( 'post-duplicate.strategy-factory', 'Tribe__Duplicate__Strategy_Factory' );
562
  tribe_singleton( 'post-duplicate', 'Tribe__Duplicate__Post' );
 
 
563
  }
564
  }
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
+ const VERSION = '4.7.2';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
223
  array( 'tribe-common-admin', 'tribe-common-admin.css', array( 'tribe-dependency-style', 'tribe-bumpdown-css', 'tribe-buttonset-style', 'tribe-select2-css' ) ),
224
  array( 'tribe-validation', 'validation.js', array( 'jquery', 'underscore', 'tribe-common', 'tribe-utils-camelcase' ) ),
225
  array( 'tribe-validation-style', 'validation.css', array() ),
226
+ array( 'tribe-dependency', 'dependency.js', array( 'jquery', 'underscore', 'tribe-common' ) ),
227
  array( 'tribe-dependency-style', 'dependency.css', array( 'tribe-select2-css' ) ),
228
  array( 'tribe-pue-notices', 'pue-notices.js', array( 'jquery' ) ),
229
  array( 'tribe-datepicker', 'datepicker.css' ),
560
  tribe_singleton( 'cost-utils', array( 'Tribe__Cost_Utils', 'instance' ) );
561
  tribe_singleton( 'post-duplicate.strategy-factory', 'Tribe__Duplicate__Strategy_Factory' );
562
  tribe_singleton( 'post-duplicate', 'Tribe__Duplicate__Post' );
563
+
564
+ tribe_singleton( 'callback', 'Tribe__Utils__Callback' );
565
  }
566
  }
common/src/Tribe/Meta/Chunker.php CHANGED
@@ -323,6 +323,10 @@ class Tribe__Meta__Chunker {
323
  * @return bool
324
  */
325
  protected function is_chunker_logic_meta_key( $meta_key ) {
 
 
 
 
326
  return 0 === strpos( $meta_key, $this->meta_key_prefix );
327
  }
328
 
323
  * @return bool
324
  */
325
  protected function is_chunker_logic_meta_key( $meta_key ) {
326
+ if ( ! is_string( $meta_key ) ) {
327
+ return false;
328
+ }
329
+
330
  return 0 === strpos( $meta_key, $this->meta_key_prefix );
331
  }
332
 
common/src/Tribe/Rewrite.php CHANGED
@@ -168,7 +168,7 @@ class Tribe__Rewrite {
168
  *
169
  * @return object Return Base Slugs with l10n variations
170
  */
171
- public function get_bases( $string ) {
172
  return new stdClass();
173
  }
174
 
168
  *
169
  * @return object Return Base Slugs with l10n variations
170
  */
171
+ public function get_bases( $method = 'regex' ) {
172
  return new stdClass();
173
  }
174
 
common/src/Tribe/Template.php ADDED
@@ -0,0 +1,383 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Tribe__Template {
3
+ /**
4
+ * The folders into we will look for the template
5
+ *
6
+ * @since TBD
7
+ *
8
+ * @var array
9
+ */
10
+ protected $folder = array();
11
+
12
+ /**
13
+ * The origin class for the plugin where the template lives
14
+ *
15
+ * @since TBD
16
+ *
17
+ * @var object
18
+ */
19
+ public $origin;
20
+
21
+ /**
22
+ * The local context for templates, muteable on every self::template() call
23
+ *
24
+ * @since TBD
25
+ *
26
+ * @var array
27
+ */
28
+ protected $context;
29
+
30
+ /**
31
+ * The global context for this instance of templates
32
+ *
33
+ * @since TBD
34
+ *
35
+ * @var array
36
+ */
37
+ protected $global = array();
38
+
39
+ /**
40
+ * Allow chaing if class will extract data from the local context
41
+ *
42
+ * @since TBD
43
+ *
44
+ * @var boolean
45
+ */
46
+ protected $template_context_extract = false;
47
+
48
+ /**
49
+ * Base template for where to look for template
50
+ *
51
+ * @since TBD
52
+ *
53
+ * @var array
54
+ */
55
+ protected $template_base_path;
56
+
57
+ /**
58
+ * Configures the class origin plugin path
59
+ *
60
+ * @since TBD
61
+ *
62
+ * @param object|string $origin The base origin for the templates
63
+ *
64
+ * @return self
65
+ */
66
+ public function set_template_origin( $origin = null ) {
67
+ if ( empty( $origin ) ) {
68
+ $origin = $this->origin;
69
+ }
70
+
71
+ if ( is_string( $origin ) ) {
72
+ // Origin needs to be a class with a `instance` method
73
+ if ( class_exists( $origin ) && method_exists( $origin, 'instance' ) ) {
74
+ $origin = call_user_func( array( $origin, 'instance' ) );
75
+ }
76
+ }
77
+
78
+ if ( empty( $origin->plugin_path ) && empty( $origin->pluginPath ) && ! is_dir( $origin ) ) {
79
+ throw new InvalidArgumentException( 'Invalid Origin Class for Template Instance' );
80
+ }
81
+
82
+ if ( ! is_string( $origin ) ) {
83
+ $this->origin = $origin;
84
+ $this->template_base_path = untrailingslashit( ! empty( $this->origin->plugin_path ) ? $this->origin->plugin_path : $this->origin->pluginPath );
85
+ } else {
86
+ $this->template_base_path = untrailingslashit( (array) explode( '/', $origin ) );
87
+ }
88
+
89
+ return $this;
90
+ }
91
+
92
+ /**
93
+ * Configures the class with the base folder in relation to the Origin
94
+ *
95
+ * @since TBD
96
+ *
97
+ * @param array|string $folder Which folder we are going to look for templates
98
+ *
99
+ * @return self
100
+ */
101
+ public function set_template_folder( $folder = null ) {
102
+ // Allows configuring a already set class
103
+ if ( ! isset( $folder ) ) {
104
+ $folder = $this->folder;
105
+ }
106
+
107
+ // If Folder is String make it an Array
108
+ if ( is_string( $folder ) ) {
109
+ $folder = (array) explode( '/', $folder );
110
+ }
111
+
112
+ // Cast as Array and save
113
+ $this->folder = (array) $folder;
114
+
115
+ return $this;
116
+ }
117
+
118
+ /**
119
+ * Configures the class global context
120
+ *
121
+ * @since TBD
122
+ *
123
+ * @param array $context Default global Context
124
+ *
125
+ * @return self
126
+ */
127
+ public function add_template_globals( $context = array() ) {
128
+ // Cast as Array merge and save
129
+ $this->global = wp_parse_args( (array) $context, $this->global );
130
+
131
+ return $this;
132
+ }
133
+
134
+ /**
135
+ * Configures if the class will extract context for template
136
+ *
137
+ * @since TBD
138
+ *
139
+ * @param bool $value Should we extract context for templates
140
+ *
141
+ * @return self
142
+ */
143
+ public function set_template_context_extract( $value = false ) {
144
+ // Cast as bool and save
145
+ $this->template_context_extract = (bool) $value;
146
+
147
+ return $this;
148
+ }
149
+
150
+ /**
151
+ * Gets the base path for this Instance of Templates
152
+ *
153
+ * @since TBD
154
+ *
155
+ * @return string
156
+ */
157
+ public function get_base_path() {
158
+ // Craft the Base Path
159
+ $path = array_merge( (array) $this->template_base_path, $this->folder );
160
+
161
+ // Implode to avoid Window Problems
162
+ $path = implode( DIRECTORY_SEPARATOR, $path );
163
+
164
+ /**
165
+ * Allows filtering of the base path for templates
166
+ *
167
+ * @param string $path Complete path to include the base folder
168
+ * @param self $template Current instance of the Tribe__Template
169
+ */
170
+ return apply_filters( 'tribe_template_base_path', $path, $this );
171
+ }
172
+
173
+ /**
174
+ * Sets a Index inside of the global or local context
175
+ * Final to prevent extending the class when the `get` already exists on the child class
176
+ *
177
+ * @since TBD
178
+ *
179
+ * @see Tribe__Utils__Array::set
180
+ *
181
+ * @param array $index Specify each nested index in order.
182
+ * Example: array( 'lvl1', 'lvl2' );
183
+ * @param mixed $default Default value if the search finds nothing.
184
+ * @param boolean $is_local Use the Local or Global context
185
+ *
186
+ * @return mixed The value of the specified index or the default if not found.
187
+ */
188
+ final public function get( $index, $default = null, $is_local = true ) {
189
+ $context = $this->global;
190
+
191
+ if ( true === $is_local ) {
192
+ $context = $this->context;
193
+ }
194
+
195
+ /**
196
+ * Allows filtering the the getting of Context variables, also short circuiting
197
+ * Following the same strucuture as WP Core
198
+ *
199
+ * @since TBD
200
+ *
201
+ * @param mixed $value The value that will be filtered
202
+ * @param array $index Specify each nested index in order.
203
+ * Example: array( 'lvl1', 'lvl2' );
204
+ * @param mixed $default Default value if the search finds nothing.
205
+ * @param boolean $is_local Use the Local or Global context
206
+ * @param self $template Current instance of the Tribe__Template
207
+ */
208
+ $value = apply_filters( 'tribe_template_context_get', null, $index, $default, $is_local, $this );
209
+ if ( null !== $value ) {
210
+ return $value;
211
+ }
212
+
213
+ return Tribe__Utils__Array::get( $context, $index, $default );
214
+ }
215
+
216
+ /**
217
+ * Sets a Index inside of the global or local context
218
+ * Final to prevent extending the class when the `set` already exists on the child class
219
+ *
220
+ * @since TBD
221
+ *
222
+ * @see Tribe__Utils__Array::set
223
+ *
224
+ * @param string|array $index To set a key nested multiple levels deep pass an array
225
+ * specifying each key in order as a value.
226
+ * Example: array( 'lvl1', 'lvl2', 'lvl3' );
227
+ * @param mixed $value The value.
228
+ * @param boolean $is_local Use the Local or Global context
229
+ *
230
+ * @return array Full array with the key set to the specified value.
231
+ */
232
+ final public function set( $index, $value = null, $is_local = true ) {
233
+ if ( true === $is_local ) {
234
+ return Tribe__Utils__Array::set( $this->context, $index, $value );
235
+ } else {
236
+ return Tribe__Utils__Array::set( $this->global, $index, $value );
237
+ }
238
+ }
239
+
240
+ /**
241
+ * Merges local and global context, and saves it locally
242
+ *
243
+ * @since TBD
244
+ *
245
+ * @param array $context Local Context array of data
246
+ * @param string $file Complete path to include the PHP File
247
+ * @param array $name Template name
248
+ *
249
+ * @return array
250
+ */
251
+ public function merge_context( $context = array(), $file = null, $name = null ) {
252
+ // Allow for simple null usage as well as array() for nothing
253
+ if ( is_null( $context ) ) {
254
+ $context = array();
255
+ }
256
+
257
+ // Applies local context on top of Global one
258
+ $context = wp_parse_args( (array) $context, $this->global );
259
+
260
+ /**
261
+ * Allows filtering the Local context
262
+ *
263
+ * @since TBD
264
+ *
265
+ * @param array $context Local Context array of data
266
+ * @param string $file Complete path to include the PHP File
267
+ * @param array $name Template name
268
+ * @param self $template Current instance of the Tribe__Template
269
+ */
270
+ $this->context = apply_filters( 'tribe_template_context', $context, $file, $name, $this );
271
+
272
+ return $this->context;
273
+ }
274
+
275
+ /**
276
+ * A very simple method to include a Aggregator Template, allowing filtering and additions using hooks.
277
+ *
278
+ * @since TBD
279
+ *
280
+ * @param string $name Which file we are talking about including
281
+ * @param array $context Any context data you need to expose to this file
282
+ * @param boolean $echo If we should also print the Template
283
+ *
284
+ * @return string Final Content HTML
285
+ */
286
+ public function template( $name, $context = array(), $echo = true ) {
287
+ // If name is String make it an Array
288
+ if ( is_string( $name ) ) {
289
+ $name = (array) explode( '/', $name );
290
+ }
291
+
292
+ // Clean this Variable
293
+ $name = array_map( 'sanitize_title_with_dashes', $name );
294
+
295
+ // Apply the .php to the last item on the name
296
+ $name[ count( $name ) - 1 ] .= '.php';
297
+
298
+ // Build the File Path
299
+ $file = implode( DIRECTORY_SEPARATOR, array_merge( (array) $this->get_base_path(), $name ) );
300
+
301
+ /**
302
+ * A more Specific Filter that will include the template name
303
+ *
304
+ * @since TBD
305
+ *
306
+ * @param string $file Complete path to include the PHP File
307
+ * @param array $name Template name
308
+ * @param self $template Current instance of the Tribe__Template
309
+ */
310
+ $file = apply_filters( 'tribe_template_file', $file, $name, $this );
311
+
312
+ // Before we load the file we check if it exists
313
+ if ( ! file_exists( $file ) ) {
314
+ return false;
315
+ }
316
+
317
+ ob_start();
318
+
319
+ // Merges the local data passed to template to the global scope
320
+ $this->merge_context( $context, $file, $name );
321
+
322
+ /**
323
+ * Fires an Action before including the template file
324
+ *
325
+ * @since TBD
326
+ *
327
+ * @param string $file Complete path to include the PHP File
328
+ * @param array $name Template name
329
+ * @param self $template Current instance of the Tribe__Template
330
+ */
331
+ do_action( 'tribe_template_before_include', $file, $name, $this );
332
+
333
+ // Only do this if really needed (by default it wont)
334
+ if ( true === $this->template_context_extract && ! empty( $this->context ) ) {
335
+ // We don't allow Extrating of a variable called $name
336
+ if ( isset( $this->context['name'] ) ) {
337
+ unset( $this->context['name'] );
338
+ }
339
+
340
+ // We don't allow Extrating of a variable called $file
341
+ if ( isset( $this->context['file'] ) ) {
342
+ unset( $this->context['file'] );
343
+ }
344
+
345
+ // Make any provided variables available in the template variable scope
346
+ extract( $this->context ); // @codingStandardsIgnoreLine
347
+ }
348
+
349
+ include $file;
350
+
351
+ /**
352
+ * Fires an Action After including the template file
353
+ *
354
+ * @since TBD
355
+ *
356
+ * @param string $file Complete path to include the PHP File
357
+ * @param array $name Template name
358
+ * @param self $template Current instance of the Tribe__Template
359
+ */
360
+ do_action( 'tribe_template_after_include', $file, $name, $this );
361
+
362
+ // Only fetch the contents after the action
363
+ $html = ob_get_clean();
364
+
365
+ /**
366
+ * Allow users to filter the final HTML
367
+ *
368
+ * @since TBD
369
+ *
370
+ * @param string $html The final HTML
371
+ * @param string $file Complete path to include the PHP File
372
+ * @param array $name Template name
373
+ * @param self $template Current instance of the Tribe__Template
374
+ */
375
+ $html = apply_filters( 'tribe_template_html', $html, $file, $name, $this );
376
+
377
+ if ( $echo ) {
378
+ echo $html;
379
+ }
380
+
381
+ return $html;
382
+ }
383
+ }
common/src/Tribe/Utils/Callback.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Tribe__Utils__Callback {
4
+
5
+ /**
6
+ * Where we store all the Callbacks to allow removing of hooks
7
+ *
8
+ * @since TBD
9
+ *
10
+ * @var array
11
+ */
12
+ public $items = array();
13
+
14
+ /**
15
+ * The Prefix we use for the Overloading replacement
16
+ *
17
+ * @since TBD
18
+ *
19
+ * @var string
20
+ */
21
+ protected $prefix = 'callback_';
22
+
23
+ /**
24
+ * Returns a callable for on this class that doesn't exist, but passes in the Key for Di52 Slug and it's method
25
+ * and arguments. It will relayed via overloading __call() on this same class.
26
+ *
27
+ * The lambda function suitable to use as a callback; when called the function will build the implementation
28
+ * bound to `$classOrInterface` and return the value of a call to `$method` method with the call arguments.
29
+ *
30
+ * @since TBD
31
+ *
32
+ * @param string $slug A class or interface fully qualified name or a string slug.
33
+ * @param string $method The method that should be called on the resolved implementation with the
34
+ * specified array arguments.
35
+ *
36
+ * @return array The callable
37
+ */
38
+ public function get( $slug, $method ) {
39
+ $container = Tribe__Container::init();
40
+ $arguments = func_get_args();
41
+ $is_empty = 2 === count( $arguments );
42
+
43
+ // Remove Slug and Method
44
+ array_shift( $arguments );
45
+ array_shift( $arguments );
46
+
47
+ $item = (object) array(
48
+ 'slug' => $slug,
49
+ 'method' => $method,
50
+ 'arguments' => $arguments,
51
+ 'is_empty' => $is_empty,
52
+ );
53
+
54
+ $key = md5( json_encode( $item ) );
55
+
56
+ // Prevent this from been reset
57
+ if ( isset( $this->items[ $key ] ) ) {
58
+ return $this->items[ $key ];
59
+ }
60
+
61
+ $item->callback = $container->callback( $item->slug, $item->method );
62
+
63
+ $this->items[ $key ] = $item;
64
+
65
+ return array( $this, $this->prefix . $key );
66
+ }
67
+
68
+ /**
69
+ * Returns the Value passed as a simple Routing method for tribe_callback_return
70
+ *
71
+ * @since TBD
72
+ *
73
+ * @param mixed $value Value to be Routed
74
+ *
75
+ * @return mixed
76
+ */
77
+ public function return_value( $value ) {
78
+ return $value;
79
+ }
80
+
81
+ /**
82
+ * Calls the Lambda function provided by Di52 to allow passing of Params without having to create more
83
+ * methods into classes for simple callbacks that will only have a pre-determined value.
84
+ *
85
+ * @since TBD
86
+ *
87
+ * @param string $slug A class or interface fully qualified name or a string slug.
88
+ * @param string $method The method that should be called on the resolved implementation with the
89
+ * specified array arguments.
90
+ *
91
+ * @return mixed The Return value used
92
+ */
93
+ public function __call( $method, $args ) {
94
+ $key = str_replace( $this->prefix, '', $method );
95
+
96
+ if ( ! isset( $this->items[ $key ] ) ) {
97
+ return false;
98
+ }
99
+
100
+ $item = $this->items[ $key ];
101
+
102
+ // Allow for previous compatibility with tribe_callback
103
+ if ( ! $item->is_empty ) {
104
+ $args = $item->arguments;
105
+ }
106
+
107
+ return call_user_func_array( $item->callback, $args );
108
+ }
109
+ }
common/src/Tribe/Validate.php CHANGED
@@ -252,7 +252,11 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
252
  * @return stdClass validation result object
253
  */
254
  public function slug() {
255
- if ( preg_match( '/^[a-zA-Z0-9-_]+$/', $this->value ) ) {
 
 
 
 
256
  $this->result->valid = true;
257
  $this->value = sanitize_title( $this->value );
258
  } else {
@@ -517,4 +521,4 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
517
  }
518
 
519
  } // end class
520
- } // endif class_exists
252
  * @return stdClass validation result object
253
  */
254
  public function slug() {
255
+ $maybe_valid_value = esc_url_raw( $this->value );
256
+
257
+ // esc_url_raw does the work of validating chars, but returns the checked string with a
258
+ // prepended URL protocol; so let's use strpos to match the values.
259
+ if ( false !== strpos( $maybe_valid_value, $this->value ) ) {
260
  $this->result->valid = true;
261
  $this->value = sanitize_title( $this->value );
262
  } else {
521
  }
522
 
523
  } // end class
524
+ } // endif class_exists
common/src/admin-views/tribe-options-general.php CHANGED
@@ -62,7 +62,6 @@ if ( is_super_admin() ) {
62
  $generalTabFields['debugEventsHelper'] = array(
63
  'type' => 'html',
64
  'html' => '<p class="tribe-field-indent tribe-field-description description" style="max-width:400px;">' . sprintf( esc_html__( 'Enable this option to log debug information. By default this will log to your server PHP error log. If you\'d like to see the log messages in your browser, then we recommend that you install the %s and look for the "Tribe" tab in the debug output.', 'tribe-common' ), '<a href="https://wordpress.org/extend/plugins/debug-bar/" target="_blank">' . esc_html__( 'Debug Bar Plugin', 'tribe-common' ) . '</a>' ) . '</p>',
65
- 'conditional' => ( '' != get_option( 'permalink_structure' ) ),
66
  );
67
  }
68
 
62
  $generalTabFields['debugEventsHelper'] = array(
63
  'type' => 'html',
64
  'html' => '<p class="tribe-field-indent tribe-field-description description" style="max-width:400px;">' . sprintf( esc_html__( 'Enable this option to log debug information. By default this will log to your server PHP error log. If you\'d like to see the log messages in your browser, then we recommend that you install the %s and look for the "Tribe" tab in the debug output.', 'tribe-common' ), '<a href="https://wordpress.org/extend/plugins/debug-bar/" target="_blank">' . esc_html__( 'Debug Bar Plugin', 'tribe-common' ) . '</a>' ) . '</p>',
 
65
  );
66
  }
67
 
common/src/functions/template-tags/date.php CHANGED
@@ -407,3 +407,17 @@ if ( ! function_exists( 'tribe_wp_locale_month' ) ) {
407
  return Tribe__Date_Utils::wp_locale_month( $month, $format );
408
  }
409
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
407
  return Tribe__Date_Utils::wp_locale_month( $month, $format );
408
  }
409
  }
410
+
411
+ if ( ! function_exists( 'tribe_is_site_using_24_hour_time' ) ) {
412
+ /**
413
+ * Handy function for easily detecting if this site's using the 24-hour time format.
414
+ *
415
+ * @since 4.7.1
416
+ *
417
+ * @return boolean
418
+ */
419
+ function tribe_is_site_using_24_hour_time() {
420
+ $time_format = get_option( 'time_format' );
421
+ return strpos( $time_format, 'H' ) !== false;
422
+ }
423
+ }
common/src/resources/js/dependency.js CHANGED
@@ -162,9 +162,11 @@
162
  }
163
  }
164
 
165
- $dependent
166
- .find( selectors.fields ).prop( 'disabled', false )
167
- .end().find( '.select2-container' ).select2( 'enable', true );
 
 
168
  } else {
169
  $dependent.removeClass( active_class );
170
 
@@ -173,9 +175,11 @@
173
  $dependent.hide();
174
  }
175
 
176
- $dependent
177
- .find( selectors.fields ).prop( 'disabled', true )
178
- .end().find( '.select2-container' ).select2( 'enable', false );
 
 
179
 
180
  if ( $dependent.data( 'select2' ) ) {
181
  $dependent.data( 'select2' ).container.removeClass( active_class );
162
  }
163
  }
164
 
165
+ $dependent.find( selectors.fields ).prop( 'disabled', false );
166
+
167
+ if ( 'undefined' !== typeof $().select2 ) {
168
+ $dependent.find( '.select2-container' ).select2( 'enable', true );
169
+ }
170
  } else {
171
  $dependent.removeClass( active_class );
172
 
175
  $dependent.hide();
176
  }
177
 
178
+ $dependent.find( selectors.fields ).prop( 'disabled', true );
179
+
180
+ if ( 'undefined' !== typeof $().select2 ) {
181
+ $dependent.find( '.select2-container' ).select2( 'enable', false );
182
+ }
183
 
184
  if ( $dependent.data( 'select2' ) ) {
185
  $dependent.data( 'select2' ).container.removeClass( active_class );
common/src/resources/js/dependency.min.js CHANGED
@@ -1 +1 @@
1
- !function(e,n,i){"use strict";var d=e(document),t=e(window),c={dependent:".tribe-dependent",active:".tribe-active",dependency:".tribe-dependency",dependencyVerified:".tribe-dependency-verified",fields:"input, select, textarea",advanced_fields:".select2-container",linked:".tribe-dependent-linked"};e.fn.dependency=function(){return this.each(function(){var n=e(this).data("depends");e(n).addClass(c.dependency.replace(".","")).data("dependent",e(this))})},d.off("change.dependency verify.dependency",c.dependency).on({"verify.dependency":function(i){var t,a=e(this),o="#"+a.attr("id"),r=a.val();if(o){if(a.is(":radio")){var s=e("[name='"+a.attr("name")+"']");s.not(c.linked).on("change",function(){s.trigger("verify.dependency")}).addClass(c.linked.replace(".",""))}var p=d.find('[data-depends="'+o+'"]').not(".select2-container");t={condition:function(e,i){return n.isArray(i)?-1!==i.indexOf(e):e==i},not_condition:function(e,i){return n.isArray(i)?-1===i.indexOf(e):e!=i},is_not_empty:function(e){return""!=e},is_empty:function(e){return""===e},is_numeric:function(n){return e.isNumeric(n)},is_not_numeric:function(n){return!e.isNumeric(n)},is_checked:function(e,n,i){return!(!i.is(":checkbox")&&!i.is(":radio"))&&i.is(":checked")},is_not_checked:function(e,n,i){return!(!i.is(":checkbox")&&!i.is(":radio"))&&!i.is(":checked")}},p.each(function(i,d){var o=e(d),s=o.is("[data-dependent-parent]");if(s){var p=o.data("dependentParent"),u=o.closest(p);if(0===u.length)return void console.warn("Dependency: `data-dependent-parent` has bad selector",o);o=u.find(d)}var l,f={condition:!!o.is("[data-condition]")&&o.data("condition"),not_condition:!!o.is("[data-condition-not]")&&o.data("conditionNot"),is_not_empty:o.data("conditionIsNotEmpty")||o.is("[data-condition-is-not-empty]")||o.data("conditionNotEmpty")||o.is("[data-condition-not-empty]"),is_empty:o.data("conditionIsEmpty")||o.is("[data-condition-is-empty]")||o.data("conditionEmpty")||o.is("[data-condition-empty]"),is_numeric:o.data("conditionIsNumeric")||o.is("[data-condition-is-numeric]")||o.data("conditionNumeric")||o.is("[data-condition-numeric]"),is_not_numeric:o.data("conditionIsNotNumeric")||o.is("[data-condition-is-not-numeric]"),is_checked:o.data("conditionIsChecked")||o.is("[data-condition-is-checked]")||o.data("conditionChecked")||o.is("[data-condition-checked]"),is_not_checked:o.data("conditionIsNotChecked")||o.is("[data-condition-is-not-checked]")||o.data("conditionNotChecked")||o.is("[data-condition-not-checked]")},y=c.active.replace(".",""),h=o.data("dependencyCheckDisabled")||o.is("[data-dependency-check-disabled]"),m=!h&&a.is(":disabled"),v=o.data("condition-relation")||"or";f=n.pick(f,function(e){return!1!==e}),l="or"===v?n.reduce(f,function(e,n,i){return e||t[i](r,n,a)},!1):n.reduce(f,function(e,n,i){return e&&t[i](r,n,a)},!0),l&&!m?(o.data("select2")?(o.data("select2").container.addClass(y),o.data("select2").container.is(":hidden")&&o.data("select2").container.show()):(o.addClass(y),o.is(":hidden")&&o.show()),o.find(c.fields).prop("disabled",!1).end().find(".select2-container").select2("enable",!0)):(o.removeClass(y),o.is(":visible")&&o.hide(),o.find(c.fields).prop("disabled",!0).end().find(".select2-container").select2("enable",!1),o.data("select2")&&o.data("select2").container.removeClass(y)),o.find(c.dependency).trigger("change")}),a.addClass(c.dependencyVerified.className())}},"change.dependency":function(n){e(this).trigger("verify.dependency")}},c.dependency),i.run=function(n){var i=e(c.dependent);i.length&&i.dependency();var d=e(c.dependency);d.not(c.dependencyVerified).length&&d.trigger("verify.dependency")},d.ready(i.run),t.on("load",i.run)}(jQuery,_,{});
1
+ !function(e,n,i){"use strict";var d=e(document),t=e(window),c={dependent:".tribe-dependent",active:".tribe-active",dependency:".tribe-dependency",dependencyVerified:".tribe-dependency-verified",fields:"input, select, textarea",advanced_fields:".select2-container",linked:".tribe-dependent-linked"};e.fn.dependency=function(){return this.each(function(){var n=e(this).data("depends");e(n).addClass(c.dependency.replace(".","")).data("dependent",e(this))})},d.off("change.dependency verify.dependency",c.dependency).on({"verify.dependency":function(i){var t,a=e(this),o="#"+a.attr("id"),r=a.val();if(o){if(a.is(":radio")){var s=e("[name='"+a.attr("name")+"']");s.not(c.linked).on("change",function(){s.trigger("verify.dependency")}).addClass(c.linked.replace(".",""))}var p=d.find('[data-depends="'+o+'"]').not(".select2-container");t={condition:function(e,i){return n.isArray(i)?-1!==i.indexOf(e):e==i},not_condition:function(e,i){return n.isArray(i)?-1===i.indexOf(e):e!=i},is_not_empty:function(e){return""!=e},is_empty:function(e){return""===e},is_numeric:function(n){return e.isNumeric(n)},is_not_numeric:function(n){return!e.isNumeric(n)},is_checked:function(e,n,i){return!(!i.is(":checkbox")&&!i.is(":radio"))&&i.is(":checked")},is_not_checked:function(e,n,i){return!(!i.is(":checkbox")&&!i.is(":radio"))&&!i.is(":checked")}},p.each(function(i,d){var o=e(d),s=o.is("[data-dependent-parent]");if(s){var p=o.data("dependentParent"),u=o.closest(p);if(0===u.length)return void console.warn("Dependency: `data-dependent-parent` has bad selector",o);o=u.find(d)}var f,l={condition:!!o.is("[data-condition]")&&o.data("condition"),not_condition:!!o.is("[data-condition-not]")&&o.data("conditionNot"),is_not_empty:o.data("conditionIsNotEmpty")||o.is("[data-condition-is-not-empty]")||o.data("conditionNotEmpty")||o.is("[data-condition-not-empty]"),is_empty:o.data("conditionIsEmpty")||o.is("[data-condition-is-empty]")||o.data("conditionEmpty")||o.is("[data-condition-empty]"),is_numeric:o.data("conditionIsNumeric")||o.is("[data-condition-is-numeric]")||o.data("conditionNumeric")||o.is("[data-condition-numeric]"),is_not_numeric:o.data("conditionIsNotNumeric")||o.is("[data-condition-is-not-numeric]"),is_checked:o.data("conditionIsChecked")||o.is("[data-condition-is-checked]")||o.data("conditionChecked")||o.is("[data-condition-checked]"),is_not_checked:o.data("conditionIsNotChecked")||o.is("[data-condition-is-not-checked]")||o.data("conditionNotChecked")||o.is("[data-condition-not-checked]")},y=c.active.replace(".",""),h=o.data("dependencyCheckDisabled")||o.is("[data-dependency-check-disabled]"),m=!h&&a.is(":disabled"),v=o.data("condition-relation")||"or";l=n.pick(l,function(e){return!1!==e}),f="or"===v?n.reduce(l,function(e,n,i){return e||t[i](r,n,a)},!1):n.reduce(l,function(e,n,i){return e&&t[i](r,n,a)},!0),f&&!m?(o.data("select2")?(o.data("select2").container.addClass(y),o.data("select2").container.is(":hidden")&&o.data("select2").container.show()):(o.addClass(y),o.is(":hidden")&&o.show()),o.find(c.fields).prop("disabled",!1),"undefined"!=typeof e().select2&&o.find(".select2-container").select2("enable",!0)):(o.removeClass(y),o.is(":visible")&&o.hide(),o.find(c.fields).prop("disabled",!0),"undefined"!=typeof e().select2&&o.find(".select2-container").select2("enable",!1),o.data("select2")&&o.data("select2").container.removeClass(y)),o.find(c.dependency).trigger("change")}),a.addClass(c.dependencyVerified.className())}},"change.dependency":function(n){e(this).trigger("verify.dependency")}},c.dependency),i.run=function(n){var i=e(c.dependent);i.length&&i.dependency();var d=e(c.dependency);d.not(c.dependencyVerified).length&&d.trigger("verify.dependency")},d.ready(i.run),t.on("load",i.run)}(jQuery,_,{});
common/src/resources/js/dropdowns.js CHANGED
@@ -216,6 +216,11 @@ var tribe_dropdowns = tribe_dropdowns || {};
216
  args.allowClear = false;
217
  }
218
 
 
 
 
 
 
219
  // If we are dealing with a Input Hidden we need to set the Data for it to work
220
  if ( $select.is( '[data-options]' ) ) {
221
  args.data = $select.data( 'options' );
216
  args.allowClear = false;
217
  }
218
 
219
+ // Pass the "Searching..." placeholder if specified
220
+ if ( $select.is( '[data-searching-placeholder]' ) ) {
221
+ args.formatSearching = $select.data( 'searching-placeholder' );
222
+ }
223
+
224
  // If we are dealing with a Input Hidden we need to set the Data for it to work
225
  if ( $select.is( '[data-options]' ) ) {
226
  args.data = $select.data( 'options' );
common/src/resources/js/dropdowns.min.js CHANGED
@@ -1 +1 @@
1
- var tribe_dropdowns=tribe_dropdowns||{};!function(e,t){"use strict";function a(t,r){if(!e.isArray(r))return!1;for(var o in r){var i=r[o];if(i.hasOwnProperty("id")&&i.id==t.id)return i;if(i.hasOwnProperty("text")&&i.text==t.text)return i;if(i.hasOwnProperty("children")&&e.isArray(i.children)){var n=a(t,i.children);if(n)return n}}return!1}t.selector={dropdown:".tribe-dropdown"},e.fn.tribe_dropdowns=function(){return t.dropdown(this),this},t.freefrom_create_search_choice=function(e,t){var a=this.opts,r=a.$select;if(e.match(a.regexToken)&&(!r.is("[data-int]")||r.is("[data-int]")&&e.match(/\d+/))){var o={id:e,text:e,"new":!0};return r.is("[data-create-choice-template]")&&(o.text=_.template(r.data("createChoiceTemplate"))({term:e})),o}},t.allow_html_markup=function(e){return e},t.search_id=function(e){var t=void 0;return"undefined"!=typeof e.id?t=e.id:"undefined"!=typeof e.ID?t=e.ID:"undefined"!=typeof e.value&&(t=e.value),void 0===e?void 0:t},t.matcher=function(e,a){var r=this.element,o=r.data("dropdown"),i=a.toUpperCase().indexOf(e.toUpperCase())!==-1;if(!i&&"undefined"!=typeof o.tags){var n=_.where(o.tags,{text:a});if(o.tags.length>0&&_.isObject(n)){var s=t.search_id(n[0]);i=s.toUpperCase().indexOf(e.toUpperCase())!==-1}}return i},t.init_selection=function(t,r){var o=t.is("[multiple]"),i=t.data("dropdown"),n=t.val().split(i.regexSplit),s=[];e(n).each(function(){var e={id:this,text:this},r=i.ajax?t.data("options"):i.data,o=a(e,r);o&&s.push(o)}),s.length&&o?r(s):s.length&&r(s[0])},t.element=function(a){var r,o=e(this),i={},n=["depends","condition","conditionNot","condition-not","conditionNotEmpty","condition-not-empty","conditionEmpty","condition-empty","conditionIsNumeric","condition-is-numeric","conditionIsNotNumeric","condition-is-not-numeric","conditionChecked","condition-is-checked"];if(i.$select=o,i.dropdownAutoWidth=!0,i.containerCss={},o.is(":visible")&&(i.containerCss.display="inline-block"),i.dropdownCss={},i.dropdownCss.width="auto",o.is("[data-dropdown-css-width]")&&(i.dropdownCss.width=o.data("dropdown-css-width"),i.dropdownCss.width||delete i.dropdownCss.width),i.matcher=t.matcher,o.is("select")||(i.id=t.search_id),i.allowClear=!0,o.is("[data-prevent-clear]")&&(i.allowClear=!1),o.is("[data-options]")&&(i.data=o.data("options"),o.is("select")||(i.initSelection=t.init_selection)),o.is("[data-allow-html]")&&(i.escapeMarkup=t.allow_html_markup),o.is("[data-hide-search]")&&(i.minimumResultsForSearch=1/0),o.is("[data-freeform]")&&(i.createSearchChoice=t.freefrom_create_search_choice),"tribe-ea-field-origin"===o.attr("id")&&(i.formatResult=i.upsellFormatter,i.formatSelection=i.upsellFormatter,i.escapeMarkup=t.allow_html_markup),o.is("[multiple]")&&(i.multiple=!0,o.is("data-separator")||o.data("separator",","),_.isArray(o.data("separator"))?i.tokenSeparators=o.data("separator"):i.tokenSeparators=[o.data("separator")],i.separator=o.data("separator"),i.regexSeparatorElements=["^("],i.regexSplitElements=["(?:"],e.each(i.tokenSeparators,function(e,t){i.regexSeparatorElements.push("[^"+t+"]+"),i.regexSplitElements.push("["+t+"]")}),i.regexSeparatorElements.push(")$"),i.regexSplitElements.push(")"),i.regexSeparatorString=i.regexSeparatorElements.join(""),i.regexSplitString=i.regexSplitElements.join(""),i.regexToken=new RegExp(i.regexSeparatorString,"ig"),i.regexSplit=new RegExp(i.regexSplitString,"ig")),o.is("[data-tags]")&&(i.tags=o.data("tags"),i.initSelection=t.init_selection,i.createSearchChoice=function(e,t){if(e.match(i.regexToken))return{id:e,text:e}},0===i.tags.length&&(i.formatNoMatches=function(){return o.attr("placeholder")})),o.is("[data-source]")){var s=o.data("source");i.data={results:[]},i.escapeMarkup=t.allow_html_markup,i.formatResult=function(t,a,r){return"undefined"!=typeof t.breadcrumbs?e.merge(t.breadcrumbs,[t.text]).join(" &#187; "):t.text},i.ajax={dataType:"json",type:"POST",url:t.ajaxurl(),results:function(t,a,r){return e.isPlainObject(t)&&"undefined"!=typeof t.success?e.isPlainObject(t.data)&&"undefined"!=typeof t.data.results?t.success?t.data:("string"===e.type(t.data.message)?console.error(t.data.message):console.error("The Select2 search failed in some way... Verify the source."),{results:[]}):(console.error("We received a malformed results array, could not complete the Select2 Search."),{results:[]}):(console.error("We received a malformed Object, could not complete the Select2 Search."),{results:[]})}},i.ajax.data=function(e,t){return{action:"tribe_dropdown",source:s,search:e,page:t,args:o.data("source-args")}}}o.data("dropdown",i),r=o.select2(i).select2("container"),n.length>0&&n.map(function(e){var t="data-"+e,a=o.attr(t);a&&this.attr(t,a)},r)},t.action_change=function(t){var a=e(this),r=e(this).data("value");a.is("[multiple]")&&a.is("[data-source]")&&(t.added?_.isArray(r)?r.push(t.added):r=[t.added]:r=_.isArray(r)?_.without(r,t.removed):[],a.data("value",r).attr("data-value",JSON.stringify(r)))},t.ajaxurl=function(){return"undefined"!=typeof window.ajaxurl?window.ajaxurl:"undefined"!=typeof TEC&&"undefined"!=typeof TEC.ajaxurl?TEC.ajaxurl:void console.error("Dropdowns framework cannot properly do an AJAX request without the WordPress `ajaxurl` variable setup.")},t.action_select2_removed=function(t){var a=e(this);a.is("[data-sticky-search]")&&a.is("[data-last-search]")&&a.removeAttr("data-last-search").removeData("lastSearch")},t.action_bugfix_group_select=function(a){var r=e(this),o=r.select2("data"),i=e(".select2-drop:visible");i.find(".select2-selected").each(function(){var a=e(this),r=a.data("select2-data"),i=!0;"undefined"!=typeof r.children&&(e.each(o,function(e,a){t.search_id(r)==t.search_id(a)&&(i=!1)}),i&&a.removeClass("select2-selected"))})},t.action_select2_close=function(t){var a=e(this),r=e(".select2-drop .select2-input.select2-focused");a.is("[data-sticky-search]")&&r.off("keyup-change.tribe")},t.action_select2_open=function(t){var a=e(this),r=e(".select2-drop .select2-input:visible");a.is("[data-search-placeholder]")&&r.attr("placeholder",a.data("searchPlaceholder")),a.is("[data-sticky-search]")&&(r.on("keyup-change.tribe",function(){a.data("lastSearch",e(this).val()).attr("data-last-search",e(this).val())}),a.is("[data-last-search]")&&r.val(a.data("lastSearch")).trigger("keyup-change"))},t.dropdown=function(e){var a=e.not(".select2-offscreen, .select2-container");return a.each(t.element).on("select2-open",t.action_select2_open).on("select2-close",t.action_select2_close).on("select2-removed",t.action_select2_removed).on("select2-loaded",t.action_bugfix_group_select).on("change",t.action_change),a},e(function(){e(t.selector.dropdown).tribe_dropdowns()}),e(window).on("unload",function(){e(t.selector.dropdown).tribe_dropdowns()})}(jQuery,tribe_dropdowns);
1
+ var tribe_dropdowns=tribe_dropdowns||{};!function(e,t){"use strict";function a(t,r){if(!e.isArray(r))return!1;for(var o in r){var i=r[o];if(i.hasOwnProperty("id")&&i.id==t.id)return i;if(i.hasOwnProperty("text")&&i.text==t.text)return i;if(i.hasOwnProperty("children")&&e.isArray(i.children)){var n=a(t,i.children);if(n)return n}}return!1}t.selector={dropdown:".tribe-dropdown"},e.fn.tribe_dropdowns=function(){return t.dropdown(this),this},t.freefrom_create_search_choice=function(e,t){var a=this.opts,r=a.$select;if(e.match(a.regexToken)&&(!r.is("[data-int]")||r.is("[data-int]")&&e.match(/\d+/))){var o={id:e,text:e,"new":!0};return r.is("[data-create-choice-template]")&&(o.text=_.template(r.data("createChoiceTemplate"))({term:e})),o}},t.allow_html_markup=function(e){return e},t.search_id=function(e){var t=void 0;return"undefined"!=typeof e.id?t=e.id:"undefined"!=typeof e.ID?t=e.ID:"undefined"!=typeof e.value&&(t=e.value),void 0===e?void 0:t},t.matcher=function(e,a){var r=this.element,o=r.data("dropdown"),i=a.toUpperCase().indexOf(e.toUpperCase())!==-1;if(!i&&"undefined"!=typeof o.tags){var n=_.where(o.tags,{text:a});if(o.tags.length>0&&_.isObject(n)){var s=t.search_id(n[0]);i=s.toUpperCase().indexOf(e.toUpperCase())!==-1}}return i},t.init_selection=function(t,r){var o=t.is("[multiple]"),i=t.data("dropdown"),n=t.val().split(i.regexSplit),s=[];e(n).each(function(){var e={id:this,text:this},r=i.ajax?t.data("options"):i.data,o=a(e,r);o&&s.push(o)}),s.length&&o?r(s):s.length&&r(s[0])},t.element=function(a){var r,o=e(this),i={},n=["depends","condition","conditionNot","condition-not","conditionNotEmpty","condition-not-empty","conditionEmpty","condition-empty","conditionIsNumeric","condition-is-numeric","conditionIsNotNumeric","condition-is-not-numeric","conditionChecked","condition-is-checked"];if(i.$select=o,i.dropdownAutoWidth=!0,i.containerCss={},o.is(":visible")&&(i.containerCss.display="inline-block"),i.dropdownCss={},i.dropdownCss.width="auto",o.is("[data-dropdown-css-width]")&&(i.dropdownCss.width=o.data("dropdown-css-width"),i.dropdownCss.width||delete i.dropdownCss.width),i.matcher=t.matcher,o.is("select")||(i.id=t.search_id),i.allowClear=!0,o.is("[data-prevent-clear]")&&(i.allowClear=!1),o.is("[data-searching-placeholder]")&&(i.formatSearching=o.data("searching-placeholder")),o.is("[data-options]")&&(i.data=o.data("options"),o.is("select")||(i.initSelection=t.init_selection)),o.is("[data-allow-html]")&&(i.escapeMarkup=t.allow_html_markup),o.is("[data-hide-search]")&&(i.minimumResultsForSearch=1/0),o.is("[data-freeform]")&&(i.createSearchChoice=t.freefrom_create_search_choice),"tribe-ea-field-origin"===o.attr("id")&&(i.formatResult=i.upsellFormatter,i.formatSelection=i.upsellFormatter,i.escapeMarkup=t.allow_html_markup),o.is("[multiple]")&&(i.multiple=!0,o.is("data-separator")||o.data("separator",","),_.isArray(o.data("separator"))?i.tokenSeparators=o.data("separator"):i.tokenSeparators=[o.data("separator")],i.separator=o.data("separator"),i.regexSeparatorElements=["^("],i.regexSplitElements=["(?:"],e.each(i.tokenSeparators,function(e,t){i.regexSeparatorElements.push("[^"+t+"]+"),i.regexSplitElements.push("["+t+"]")}),i.regexSeparatorElements.push(")$"),i.regexSplitElements.push(")"),i.regexSeparatorString=i.regexSeparatorElements.join(""),i.regexSplitString=i.regexSplitElements.join(""),i.regexToken=new RegExp(i.regexSeparatorString,"ig"),i.regexSplit=new RegExp(i.regexSplitString,"ig")),o.is("[data-tags]")&&(i.tags=o.data("tags"),i.initSelection=t.init_selection,i.createSearchChoice=function(e,t){if(e.match(i.regexToken))return{id:e,text:e}},0===i.tags.length&&(i.formatNoMatches=function(){return o.attr("placeholder")})),o.is("[data-source]")){var s=o.data("source");i.data={results:[]},i.escapeMarkup=t.allow_html_markup,i.formatResult=function(t,a,r){return"undefined"!=typeof t.breadcrumbs?e.merge(t.breadcrumbs,[t.text]).join(" &#187; "):t.text},i.ajax={dataType:"json",type:"POST",url:t.ajaxurl(),results:function(t,a,r){return e.isPlainObject(t)&&"undefined"!=typeof t.success?e.isPlainObject(t.data)&&"undefined"!=typeof t.data.results?t.success?t.data:("string"===e.type(t.data.message)?console.error(t.data.message):console.error("The Select2 search failed in some way... Verify the source."),{results:[]}):(console.error("We received a malformed results array, could not complete the Select2 Search."),{results:[]}):(console.error("We received a malformed Object, could not complete the Select2 Search."),{results:[]})}},i.ajax.data=function(e,t){return{action:"tribe_dropdown",source:s,search:e,page:t,args:o.data("source-args")}}}o.data("dropdown",i),r=o.select2(i).select2("container"),n.length>0&&n.map(function(e){var t="data-"+e,a=o.attr(t);a&&this.attr(t,a)},r)},t.action_change=function(t){var a=e(this),r=e(this).data("value");a.is("[multiple]")&&a.is("[data-source]")&&(t.added?_.isArray(r)?r.push(t.added):r=[t.added]:r=_.isArray(r)?_.without(r,t.removed):[],a.data("value",r).attr("data-value",JSON.stringify(r)))},t.ajaxurl=function(){return"undefined"!=typeof window.ajaxurl?window.ajaxurl:"undefined"!=typeof TEC&&"undefined"!=typeof TEC.ajaxurl?TEC.ajaxurl:void console.error("Dropdowns framework cannot properly do an AJAX request without the WordPress `ajaxurl` variable setup.")},t.action_select2_removed=function(t){var a=e(this);a.is("[data-sticky-search]")&&a.is("[data-last-search]")&&a.removeAttr("data-last-search").removeData("lastSearch")},t.action_bugfix_group_select=function(a){var r=e(this),o=r.select2("data"),i=e(".select2-drop:visible");i.find(".select2-selected").each(function(){var a=e(this),r=a.data("select2-data"),i=!0;"undefined"!=typeof r.children&&(e.each(o,function(e,a){t.search_id(r)==t.search_id(a)&&(i=!1)}),i&&a.removeClass("select2-selected"))})},t.action_select2_close=function(t){var a=e(this),r=e(".select2-drop .select2-input.select2-focused");a.is("[data-sticky-search]")&&r.off("keyup-change.tribe")},t.action_select2_open=function(t){var a=e(this),r=e(".select2-drop .select2-input:visible");a.is("[data-search-placeholder]")&&r.attr("placeholder",a.data("searchPlaceholder")),a.is("[data-sticky-search]")&&(r.on("keyup-change.tribe",function(){a.data("lastSearch",e(this).val()).attr("data-last-search",e(this).val())}),a.is("[data-last-search]")&&r.val(a.data("lastSearch")).trigger("keyup-change"))},t.dropdown=function(e){var a=e.not(".select2-offscreen, .select2-container");return a.each(t.element).on("select2-open",t.action_select2_open).on("select2-close",t.action_select2_close).on("select2-removed",t.action_select2_removed).on("select2-loaded",t.action_bugfix_group_select).on("change",t.action_change),a},e(function(){e(t.selector.dropdown).tribe_dropdowns()}),e(window).on("unload",function(){e(t.selector.dropdown).tribe_dropdowns()})}(jQuery,tribe_dropdowns);
common/tribe-common.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
  Description: An event settings framework for managing shared options
4
- Version: 4.7
5
  Author: Modern Tribe, Inc.
6
  Author URI: http://m.tri.be/1x
7
  Text Domain: tribe-common
1
  <?php
2
  /*
3
  Description: An event settings framework for managing shared options
4
+ Version: 4.7.2
5
  Author: Modern Tribe, Inc.
6
  Author URI: http://m.tri.be/1x
7
  Text Domain: tribe-common
event-tickets.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: Event Tickets
4
  Description: Event Tickets allows your guests to RSVP from any post, page, or event.
5
- Version: 4.6
6
  Author: Modern Tribe, Inc.
7
  Author URI: http://m.tri.be/28
8
  License: GPLv2 or later
2
  /*
3
  Plugin Name: Event Tickets
4
  Description: Event Tickets allows your guests to RSVP from any post, page, or event.
5
+ Version: 4.6.1
6
  Author: Modern Tribe, Inc.
7
  Author URI: http://m.tri.be/28
8
  License: GPLv2 or later
lang/event-tickets-cs_CZ.mo CHANGED
Binary file
lang/event-tickets-cs_CZ.po CHANGED
@@ -11,7 +11,49 @@ msgstr ""
11
  "Language: cs_CZ\n"
12
  "Project-Id-Version: Event Tickets\n"
13
 
14
- #: src/admin-views/base_admin_panel.php:6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  msgid "You have unsaved changes to your tickets. Discard those changes?"
16
  msgstr ""
17
 
@@ -44,66 +86,66 @@ msgctxt "ticket shared capacity message (remaining stock)"
44
  msgid "%1$d Remaining of shared capacity"
45
  msgstr ""
46
 
47
- #: src/admin-views/tickets-history.php:22
48
  msgid "Ti"
49
  msgstr ""
50
 
51
- #: src/admin-views/tickets-history.php:19
52
  msgid "History"
53
  msgstr ""
54
 
55
- #: src/admin-views/tickets-advanced.php:90
56
  msgid "If you do not set an end sale date, tickets sales will never end."
57
  msgstr ""
58
 
59
- #: src/admin-views/tickets-advanced.php:88
60
  msgid "If you do not set an end sale date, tickets will be available until the event begins."
61
  msgstr ""
62
 
63
- #: src/admin-views/tickets-advanced.php:57
64
  msgid "If you do not set a start sale date, tickets will be available immediately."
65
  msgstr ""
66
 
67
- #: src/admin-views/tickets-advanced.php:56
68
- #: src/admin-views/tickets-advanced.php:84
69
  msgid "HH:MM"
70
  msgstr ""
71
 
72
- #: src/admin-views/tickets-advanced.php:44
73
- #: src/admin-views/tickets-advanced.php:72
74
  msgid "at"
75
  msgstr ""
76
 
77
- #: src/admin-views/tickets-advanced.php:43
78
- #: src/admin-views/tickets-advanced.php:71
79
  msgid "YYYY-MM-DD"
80
  msgstr ""
81
 
82
- #: src/admin-views/tickets-advanced.php:25
83
  msgid "Show description on front end ticket form."
84
  msgstr ""
85
 
86
- #: src/admin-views/tickets-advanced.php:7
87
  msgid "Description:"
88
  msgstr ""
89
 
90
- #: src/admin-views/tickets-advanced.php:5
91
  msgid "Advanced Settings"
92
  msgstr ""
93
 
94
- #: src/admin-views/tickets-advanced.php:2
95
  msgid "Advanced"
96
  msgstr ""
97
 
98
- #: src/admin-views/settings_admin_panel.php:49
99
  msgid "Save settings"
100
  msgstr ""
101
 
102
- #: src/admin-views/settings_admin_panel.php:31
103
  msgid "Select an image from your Media Library to display on emailed tickets. For best results, use a .jpg, .png, or .gif at least 1160px wide."
104
  msgstr ""
105
 
106
- #: src/admin-views/settings_admin_panel.php:30
107
  msgid "Ticket header image:"
108
  msgstr ""
109
 
@@ -111,132 +153,108 @@ msgstr ""
111
  msgid "Leave blank for unlimited"
112
  msgstr ""
113
 
114
- #: src/admin-views/list.php:38
115
  msgid "Available"
116
  msgstr ""
117
 
118
- #: src/admin-views/list.php:37
119
  msgid "Capacity"
120
  msgstr ""
121
 
122
- #: src/admin-views/edit_admin_panel.php:167
123
  msgid "Save RSVP"
124
  msgstr ""
125
 
126
- #: src/admin-views/edit_admin_panel.php:158
127
  msgid "Save ticket"
128
  msgstr ""
129
 
130
- #: src/admin-views/edit_admin_panel.php:86
131
  msgid "Ticket type name shows on the front end and emailed tickets"
132
  msgstr ""
133
 
134
- #: src/admin-views/edit_admin_panel.php:84
135
  msgid "Ticket Type is a required field."
136
  msgstr ""
137
 
138
- #: src/admin-views/edit_admin_panel.php:75
139
  msgid "Type:"
140
  msgstr ""
141
 
142
- #: src/admin-views/edit_admin_panel.php:70
143
  msgid "Edit RSVP"
144
  msgstr ""
145
 
146
- #: src/admin-views/edit_admin_panel.php:62
147
  msgid "Add new RSVP"
148
  msgstr ""
149
 
150
- #: src/admin-views/edit_admin_panel.php:11
151
  msgid "Start sale date cannot be greater than End Sale date"
152
  msgstr ""
153
 
154
- #: src/admin-views/edit_admin_panel.php:10
155
  msgid "Start sale date cannot be empty."
156
  msgstr ""
157
 
158
- #: src/admin-views/base_admin_panel.php:75
159
  msgid "New RSVP"
160
  msgstr ""
161
 
162
- #: src/admin-views/base_admin_panel.php:73
163
  msgid "Add a new RSVP"
164
  msgstr ""
165
 
166
- #: src/admin-views/base_admin_panel.php:33
167
  msgid "View Attendees"
168
  msgstr ""
169
 
170
- #: src/Tribe/Tickets_Handler.php:1547
171
  msgid "( Ticket ID: %d )"
172
  msgstr ""
173
 
174
- #: src/Tribe/Tickets_Handler.php:1535
175
  msgid "The number of Complete ticket sales does not match the number of attendees. Please check the Attendees list and adjust ticket stock in WooCommerce as needed."
176
  msgstr ""
177
 
178
- #: src/Tribe/Tickets_Handler.php:1533
179
  msgid "Available:"
180
  msgstr ""
181
 
182
- #: src/Tribe/Tickets_Handler.php:1528
183
  #: src/admin-views/rsvp-metabox-capacity.php:10
184
  msgid "Capacity:"
185
  msgstr ""
186
 
187
- #: src/Tribe/Tickets_Handler.php:128
188
  msgid "Unlimited"
189
  msgstr ""
190
 
191
- #: src/Tribe/Tickets.php:1487
192
- msgid "Global capacity updated. New level set to %n"
193
- msgstr ""
194
-
195
- #: src/Tribe/Tickets.php:1452
196
- msgid "Bad capacity data."
197
- msgstr ""
198
-
199
- #: src/Tribe/Tickets.php:1447
200
- msgid "Missing required capacity."
201
- msgstr ""
202
-
203
- #: src/Tribe/Tickets.php:1443
204
- msgid "Missing required post ID."
205
- msgstr ""
206
-
207
- #: src/Tribe/Tickets.php:1409
208
  msgid "Set capacity for this ticket only"
209
  msgstr ""
210
 
211
- #: src/Tribe/Tickets.php:1408
212
  msgid "Shared capacity with other tickets"
213
  msgstr ""
214
 
215
- #: src/Tribe/Tickets.php:851
216
  msgid "Failed to Add the Ticket"
217
  msgstr ""
218
 
219
- #: src/Tribe/Tickets.php:796
220
- msgid "No Post ID was provided."
221
- msgstr ""
222
-
223
- #: src/Tribe/Tickets.php:755
224
- msgid "Your settings have been saved."
225
- msgstr ""
226
-
227
- #: src/Tribe/Tickets.php:386
228
  msgid "Move Ticket"
229
  msgstr ""
230
 
231
- #: src/Tribe/Tickets.php:386
232
  msgid "Move RSVP"
233
  msgstr ""
234
 
235
- #: src/Tribe/Tickets.php:311
236
  msgid "Delete Ticket"
237
  msgstr ""
238
 
239
- #: src/Tribe/Tickets.php:311
240
  msgid "Delete RSVP"
241
  msgstr ""
242
 
@@ -324,22 +342,22 @@ msgstr ""
324
  msgid "Below the event details [default]"
325
  msgstr ""
326
 
327
- #: src/admin-views/attendees.php:66
328
  msgctxt "attendee screen summary"
329
  msgid "Attendees By Ticket"
330
  msgstr ""
331
 
332
- #: src/admin-views/attendees.php:28
333
  msgctxt "attendee screen summary"
334
  msgid "Event Details"
335
  msgstr ""
336
 
337
- #: src/Tribe/Tickets_Handler.php:897
338
  msgctxt "attendee event actions"
339
  msgid "View Event"
340
  msgstr ""
341
 
342
- #: src/Tribe/Tickets_Handler.php:896
343
  msgctxt "attendee event actions"
344
  msgid "Edit Event"
345
  msgstr ""
@@ -557,45 +575,45 @@ msgstr ""
557
  msgid "You are running Version %s and deserve a hug :-)"
558
  msgstr "Používáte verzi %s a zasloužíte si obejmout :-)"
559
 
560
- #: src/Tribe/Tickets_Handler.php:1210
561
  msgctxt "attendee export"
562
  msgid "Customer Email Address"
563
  msgstr ""
564
 
565
- #: src/Tribe/Tickets_Handler.php:1209
566
  msgctxt "attendee export"
567
  msgid "Customer Name"
568
  msgstr ""
569
 
570
- #: src/Tribe/Tickets_Handler.php:1208
571
  msgctxt "attendee export"
572
  msgid "Ticket #"
573
  msgstr ""
574
 
575
- #: src/Tribe/Tickets_Handler.php:1207
576
  msgctxt "attendee export"
577
  msgid "Order Status"
578
  msgstr ""
579
 
580
- #: src/Tribe/Tickets_Handler.php:1206
581
  msgctxt "attendee export"
582
  msgid "Order ID"
583
  msgstr ""
584
 
585
- #: src/Tribe/Tickets_Handler.php:1019
586
  msgid "You must first select one or more tickets before you can move them!"
587
  msgstr ""
588
 
589
- #: src/Tribe/Tickets_Handler.php:883
590
  msgid "Post type"
591
  msgstr ""
592
 
593
- #: src/Tribe/Tickets_Handler.php:897
594
  msgctxt "attendee event actions"
595
  msgid "View"
596
  msgstr ""
597
 
598
- #: src/Tribe/Tickets_Handler.php:896
599
  msgctxt "attendee event actions"
600
  msgid "Edit"
601
  msgstr ""
@@ -628,16 +646,16 @@ msgctxt "attendee summary"
628
  msgid "Total RSVPs:"
629
  msgstr ""
630
 
631
- #: src/Tribe/Assets.php:99
632
  msgid "Are you sure you want to delete this ticket? This cannot be undone."
633
  msgstr ""
634
 
635
- #: src/Tribe/Main.php:693
636
  msgctxt "button text"
637
  msgid "RSVP"
638
  msgstr ""
639
 
640
- #: src/Tribe/Main.php:558
641
  msgid "Welcome to Event Tickets"
642
  msgstr ""
643
 
@@ -686,7 +704,7 @@ msgctxt "attendee summary"
686
  msgid "Deleted Attendees:"
687
  msgstr ""
688
 
689
- #: src/Tribe/Tickets_Handler.php:921
690
  msgctxt "attendee summary"
691
  msgid "Checked in:"
692
  msgstr ""
@@ -845,22 +863,22 @@ msgstr ""
845
  msgid "My RSVPs for This %s"
846
  msgstr ""
847
 
848
- #: src/views/tickets/orders-link.php:56
849
  msgid "View your %s"
850
  msgstr ""
851
 
852
- #: src/views/tickets/orders-link.php:55
853
  msgid "You have %s for this %s."
854
  msgstr ""
855
 
856
- #: src/views/tickets/orders-link.php:36
857
  msgid "%d Ticket"
858
  msgid_plural "%d Tickets"
859
  msgstr[0] ""
860
  msgstr[1] ""
861
  msgstr[2] ""
862
 
863
- #: src/views/tickets/orders-link.php:32
864
  msgid "%d RSVP"
865
  msgid_plural "%d RSVPs"
866
  msgstr[0] ""
@@ -912,35 +930,35 @@ msgstr ""
912
  msgid "Going"
913
  msgstr ""
914
 
915
- #: src/Tribe/Tickets.php:2094
916
  msgid "There are no tickets available at this time."
917
  msgstr ""
918
 
919
- #: src/Tribe/Tickets.php:2092
920
  msgid "Tickets are no longer available."
921
  msgstr ""
922
 
923
- #: src/Tribe/Tickets.php:2090
924
  msgid "Tickets are not yet available."
925
  msgstr ""
926
 
927
- #: src/Tribe/Tickets.php:2088
928
  msgid "Tickets are not available as this %s has passed."
929
  msgstr ""
930
 
931
- #: src/Tribe/RSVP.php:846
932
  msgid "You confirmed you will not be attending %s"
933
  msgstr ""
934
 
935
- #: src/Tribe/Assets.php:112 src/Tribe/Metabox.php:82
936
  msgid "Please enter in without thousand separators and currency symbols."
937
  msgstr ""
938
 
939
- #: src/Tribe/Assets.php:105
940
  msgid "It looks like you have modified your shared capacity setting but have not saved or updated the post."
941
  msgstr ""
942
 
943
- #: src/Tribe/Main.php:693
944
  msgid "Buy"
945
  msgstr ""
946
 
@@ -992,8 +1010,8 @@ msgstr "Název, ID nebo Název v URL akce"
992
  msgid "View order"
993
  msgstr ""
994
 
995
- #: src/admin-views/edit_admin_panel.php:171
996
- #: src/admin-views/settings_admin_panel.php:50
997
  msgid "Cancel"
998
  msgstr "Zrušit"
999
 
@@ -1001,123 +1019,119 @@ msgstr "Zrušit"
1001
  msgid "Send Email"
1002
  msgstr "Poslat email"
1003
 
1004
- #: src/Tribe/Tickets_Handler.php:1399
1005
  msgid "Email sent successfully!"
1006
  msgstr "Email byl úspěšně odeslán!"
1007
 
1008
- #: src/Tribe/Tickets_Handler.php:1392
1009
  msgid "Error when sending the email"
1010
  msgstr "Došlo k chybě při odesílání emailu"
1011
 
1012
- #: src/Tribe/Tickets_Handler.php:1354 src/Tribe/Tickets_Handler.php:1370
1013
  msgid "Invalid User ID"
1014
  msgstr "Neplatné ID uživatele"
1015
 
1016
- #: src/Tribe/Tickets_Handler.php:1348
1017
  msgid "Invalid Email"
1018
  msgstr "Neplatná emailová adresa"
1019
 
1020
- #: src/Tribe/Tickets_Handler.php:1336
1021
  msgid "Empty user and email"
1022
  msgstr "Nebylo zadáno uživatelské jméno a emailová adresa"
1023
 
1024
- #: src/Tribe/Tickets_Handler.php:1313
1025
  msgid "Invalid Event ID"
1026
  msgstr "Neplatné ID akce"
1027
 
1028
- #: src/Tribe/Tickets_Handler.php:1330
1029
  msgid "Cheatin Huh?"
1030
  msgstr "Co zkúšáš, jak zkúšáš?"
1031
 
1032
- #: src/Tribe/Tickets.php:1114
1033
- msgid "Editing the ticket price is currently disallowed."
1034
- msgstr "Upravovaní ceny vstupenky není aktuálně povoleno."
1035
-
1036
- #: src/Tribe/RSVP.php:1780
1037
  msgid "Post draft updated."
1038
  msgstr "Koncept příspěvku byl uložen."
1039
 
1040
- #: src/Tribe/RSVP.php:1779
1041
  msgid "Post scheduled."
1042
  msgstr "Příspěvek bude automaticky publikován."
1043
 
1044
- #: src/Tribe/RSVP.php:1778
1045
  msgid "Post submitted."
1046
  msgstr "Příspěvek byl odeslán ke schválení."
1047
 
1048
- #: src/Tribe/RSVP.php:1775
1049
  msgid "Post published. %1$s"
1050
  msgstr "Příspěvek byl publikován. %1$s"
1051
 
1052
- #: src/Tribe/RSVP.php:1771
1053
  msgid "Post updated. %1$s"
1054
  msgstr "Příspěvek byl aktualizován. %1$s"
1055
 
1056
- #: src/Tribe/RSVP.php:1764
1057
  msgid "Return to the %1$sAttendees Report%2$s."
1058
  msgstr "Zpět na %1$spřehled účastníků%2$s."
1059
 
1060
- #: src/Tribe/RSVP.php:1160
1061
  msgid "You can't RSVP more than the total remaining tickets."
1062
  msgstr "Nemůžete potvrdit účast pro více než kolik je k dispozici zbývajících vstupenek."
1063
 
1064
- #: src/Tribe/Main.php:457
1065
  msgid "If you have a valid license for one of our paid plugins, you can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
1066
  msgstr ""
1067
 
1068
- #: src/Tribe/Main.php:452
1069
  msgid "Already have Events Tickets Plus? You can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
1070
  msgstr ""
1071
 
1072
- #: src/Tribe/Main.php:451 src/Tribe/Main.php:456
1073
  msgid "post a thread"
1074
  msgstr ""
1075
 
1076
- #: src/Tribe/Main.php:449
1077
  msgid "Looking for more immediate support? We offer %1$s with the purchase of any of our premium plugins (like %2$s). Pick up a license and you can post there directly and expect a response within 24-48 hours during weekdays."
1078
  msgstr ""
1079
 
1080
- #: src/Tribe/Main.php:448
1081
  msgid "Events Tickets Plus"
1082
  msgstr "Events Tickets Plus"
1083
 
1084
- #: src/Tribe/Main.php:447
1085
  msgid "premium support on our website"
1086
  msgstr ""
1087
 
1088
- #: src/Tribe/Main.php:445
1089
  msgid "If you have tried the above steps and are still having trouble, you can post a new thread to our %s. Our support staff monitors these forums once a week and would be happy to assist you there."
1090
  msgstr ""
1091
 
1092
- #: src/Tribe/Main.php:444
1093
  msgid "open-source forum on WordPress.org"
1094
  msgstr ""
1095
 
1096
- #: src/Tribe/Main.php:427
1097
  msgid "We are committed to helping you sell tickets for your event. Check out our handy %s to get started."
1098
  msgstr ""
1099
 
1100
- #: src/Tribe/Main.php:425 src/admin-views/admin-welcome-message.php:23
1101
  msgid "New User Primer"
1102
  msgstr ""
1103
 
1104
- #: src/Tribe/Main.php:408
1105
  msgid "Customizing Event Tickets"
1106
  msgstr ""
1107
 
1108
- #: src/Tribe/Main.php:407
1109
  msgid "Troubleshooting common problems"
1110
  msgstr ""
1111
 
1112
- #: src/Tribe/Main.php:406
1113
  msgid "Features overview"
1114
  msgstr "Přehled funkcí"
1115
 
1116
- #: src/Tribe/Main.php:405
1117
  msgid "Settings overview"
1118
  msgstr "Přehled nastavení"
1119
 
1120
- #: src/Tribe/Main.php:403
1121
  msgid "Support for Event Tickets"
1122
  msgstr ""
1123
 
@@ -1125,7 +1139,7 @@ msgstr ""
1125
  msgid "When The Events Calendar and Event Tickets are both activated, The Events Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
1126
  msgstr ""
1127
 
1128
- #: src/Tribe/Tickets_View.php:673 src/views/tickets/orders-link.php:55
1129
  msgid " and "
1130
  msgstr " a "
1131
 
@@ -1137,9 +1151,9 @@ msgstr "http://m.tri.be/28"
1137
  msgid "Modern Tribe, Inc."
1138
  msgstr "Modern Tribe, Inc."
1139
 
1140
- #. #-#-#-#-# event-tickets.pot (Event Tickets 4.6) #-#-#-#-#
1141
  #. Plugin Name of the plugin/theme
1142
- #: src/Tribe/Main.php:471
1143
  msgid "Event Tickets"
1144
  msgstr "Event Tickets"
1145
 
@@ -1163,17 +1177,17 @@ msgstr "%1$s z celkem %2$s k dispozici"
1163
  msgid "RSVP"
1164
  msgstr "Potvrzení účasti"
1165
 
1166
- #: src/views/tickets/email.php:379
1167
  msgid "Purchaser"
1168
  msgstr "Kupující"
1169
 
1170
- #: src/views/tickets/email.php:375
1171
  msgid "Ticket Type"
1172
  msgstr "Typ vstupenky"
1173
 
1174
  #: src/views/tickets/email-non-attendance.php:24
1175
  #: src/views/tickets/email-ticket-type-moved.php:25
1176
- #: src/views/tickets/email-tickets-moved.php:26 src/views/tickets/email.php:27
1177
  msgid "Your tickets"
1178
  msgstr "Vaše vstupenky"
1179
 
@@ -1185,16 +1199,16 @@ msgstr "Seznam účastníků"
1185
  msgid "Post types that can have tickets"
1186
  msgstr "Typy příspěvků, které mohou mít vstupenky"
1187
 
1188
- #: src/admin-views/settings_admin_panel.php:14
1189
  #: src/admin-views/tribe-options-tickets.php:47
1190
  msgid "Ticket Settings"
1191
  msgstr "Nastavení pro vstupenky"
1192
 
1193
- #: src/admin-views/tickets-advanced.php:61
1194
  msgid "End sale:"
1195
  msgstr "Konec prodeje:"
1196
 
1197
- #: src/admin-views/tickets-advanced.php:30
1198
  msgid "Start sale:"
1199
  msgstr "Začátek prodeje:"
1200
 
@@ -1214,23 +1228,23 @@ msgstr "(pro vstupné zdarma ponechte prázdné nebo zadejte 0)"
1214
  msgid "Price:"
1215
  msgstr "Cena:"
1216
 
1217
- #: src/admin-views/edit_admin_panel.php:89
1218
  msgid "Sell using:"
1219
  msgstr "Prodej pomocí:"
1220
 
1221
- #: src/admin-views/edit_admin_panel.php:48
1222
  msgid "Edit ticket"
1223
  msgstr "Upravit vstupenku"
1224
 
1225
- #: src/admin-views/edit_admin_panel.php:40
1226
  msgid "Add new ticket"
1227
  msgstr "Přidat novou vstupenku"
1228
 
1229
- #: src/admin-views/settings_admin_panel.php:43
1230
  msgid "Remove"
1231
  msgstr "Odstranit"
1232
 
1233
- #: src/admin-views/settings_admin_panel.php:33
1234
  msgid "Select an Image"
1235
  msgstr "Zvolit obrázek"
1236
 
@@ -1254,65 +1268,57 @@ msgstr "Vybrat uživatele:"
1254
  msgid "Send the attendee list by email"
1255
  msgstr "Poslat seznam účastníků emailem"
1256
 
1257
- #: src/Tribe/Tickets_Handler.php:1391
1258
  msgid "Attendee List for: %s"
1259
  msgstr "Seznam účastníků na: %s"
1260
 
1261
- #: src/Tribe/Tickets_Handler.php:1287
1262
  msgid "attendees"
1263
  msgstr "ucastnici"
1264
 
1265
- #: src/Tribe/Tickets_Handler.php:1239
1266
  msgid "Yes"
1267
  msgstr "Ano"
1268
 
1269
- #: src/Tribe/Tickets_Handler.php:1048
1270
  msgid "You can use Screen Options to select which columns you want to see. The selection works in the table below, in the email, for print and for the CSV export."
1271
  msgstr "Pomocí záložky &#8222;Nastavení zobrazených informací&#8220; si můžete vybrat, které sloupce chcete zobrazit. Tento výběr se projeví při výpisu, při odesílání emailem, při tisku a při exportu do CSV souboru."
1272
 
1273
- #: src/Tribe/Tickets_Handler.php:1048
1274
  msgid "Columns"
1275
  msgstr "Sloupce"
1276
 
1277
- #: src/Tribe/Tickets_Handler.php:1016
1278
  msgid "Sending..."
1279
  msgstr "Odesílání..."
1280
 
1281
- #: src/Tribe/Tickets_Handler.php:1015
1282
  msgid "You need to select a user or type a valid email address"
1283
  msgstr "Je třeba vybrat uživatele nebo zadat platnou emailovou adresu"
1284
 
1285
- #: src/Tribe/Admin/Columns/Tickets.php:57
1286
  #: src/Tribe/Tabbed_View/Attendee_Report_Tab.php:22
1287
- #: src/Tribe/Tickets_Handler.php:952 src/admin-views/attendees.php:11
1288
  msgid "Attendees"
1289
  msgstr "Účastníci"
1290
 
1291
- #: src/Tribe/Tickets_Handler.php:950
1292
  msgid "See who purchased tickets to this event"
1293
  msgstr "Kdo si koupil vstupenky na tuto akci"
1294
 
1295
- #: src/Tribe/Tickets.php:761 src/Tribe/Tickets.php:1057
1296
- msgid "Your ticket has been deleted."
1297
- msgstr "Vaše vstupenka byla smazána."
1298
-
1299
- #: src/Tribe/Tickets.php:758
1300
- msgid "Your ticket has been saved."
1301
- msgstr "Vaše vstupenka byla uložena."
1302
-
1303
- #: src/Tribe/RSVP.php:1469
1304
  msgid "(deleted)"
1305
  msgstr "(smazáno)"
1306
 
1307
- #: src/Tribe/RSVP.php:1165
1308
  msgid "In order to RSVP, you must enter your name and a valid email address."
1309
  msgstr "Pro potvrzení účasti musíte zadat své jméno a platnou emailovou adresu."
1310
 
1311
- #: src/Tribe/RSVP.php:1154
1312
  msgid "Your RSVP has been received! Check your email for your RSVP confirmation."
1313
  msgstr "Vaše potvrzení účasti bylo přijato. Zkontrolujte prosím emailovou schránku, kam byl odeslán kontrolní email."
1314
 
1315
- #: src/Tribe/RSVP.php:758
1316
  msgid "Your tickets from %s"
1317
  msgstr "Vaše vstupenky z webu %s"
1318
 
@@ -1358,20 +1364,20 @@ msgstr "Zrušit registraci"
1358
  msgid "Check in"
1359
  msgstr "Zaregistrovat"
1360
 
1361
- #: src/views/tickets/email.php:383
1362
  msgid "Security Code"
1363
  msgstr "Kontrolní kód"
1364
 
1365
- #: src/views/tickets/email.php:371
1366
  msgid "Ticket #"
1367
  msgstr "Vstupenka č."
1368
 
1369
- #: src/Tribe/Tickets_Handler.php:1503
1370
  msgid "Ticket Type:"
1371
  msgstr ""
1372
 
1373
- #: src/Tribe/Admin/Ticket_Settings.php:22 src/Tribe/Metabox.php:31
1374
- #: src/Tribe/Tickets_View.php:665 src/admin-views/list.php:28
1375
  msgid "Tickets"
1376
  msgstr "Vstupenky"
1377
 
@@ -1379,6 +1385,6 @@ msgstr "Vstupenky"
1379
  msgid "Getting Started"
1380
  msgstr "Začínáme"
1381
 
1382
- #: src/admin-views/base_admin_panel.php:80
1383
  msgid "Settings"
1384
  msgstr "Nastavení"
11
  "Language: cs_CZ\n"
12
  "Project-Id-Version: Event Tickets\n"
13
 
14
+ #: src/admin-views/editor/fieldset/advanced.php:124
15
+ msgid "Ticket end date"
16
+ msgstr ""
17
+
18
+ #: src/admin-views/editor/fieldset/advanced.php:95
19
+ msgid "Ticket start date"
20
+ msgstr ""
21
+
22
+ #: src/Tribe/Metabox.php:308
23
+ msgid "Failed to Delete the Ticket, Refresh the Page to try again."
24
+ msgstr ""
25
+
26
+ #: src/Tribe/Metabox.php:268 src/Tribe/Metabox.php:314
27
+ #: src/Tribe/Metabox.php:352 src/Tribe/Metabox.php:388
28
+ msgid "Commerce Module invalid"
29
+ msgstr ""
30
+
31
+ #: src/Tribe/Metabox.php:262
32
+ msgid "Failed to Edit the Ticket, Refresh the Page to try again."
33
+ msgstr ""
34
+
35
+ #: src/Tribe/Metabox.php:252 src/Tribe/Metabox.php:304
36
+ msgid "Invalid Ticket"
37
+ msgstr ""
38
+
39
+ #: src/Tribe/Metabox.php:199
40
+ msgid "Commerce Provider invalid"
41
+ msgstr ""
42
+
43
+ #: src/Tribe/Metabox.php:195
44
+ msgid "Failed to Add the Ticket, Refresh the Page to try again."
45
+ msgstr ""
46
+
47
+ #: src/Tribe/Metabox.php:185 src/Tribe/Metabox.php:246
48
+ #: src/Tribe/Metabox.php:298
49
+ msgid "Invalid parent Post"
50
+ msgstr ""
51
+
52
+ #: src/Tribe/Metabox.php:106
53
+ msgid "Invalid Post ID"
54
+ msgstr ""
55
+
56
+ #: src/admin-views/editor/panel/list.php:11
57
  msgid "You have unsaved changes to your tickets. Discard those changes?"
58
  msgstr ""
59
 
86
  msgid "%1$d Remaining of shared capacity"
87
  msgstr ""
88
 
89
+ #: src/admin-views/editor/fieldset/history.php:30
90
  msgid "Ti"
91
  msgstr ""
92
 
93
+ #: src/admin-views/editor/fieldset/history.php:27
94
  msgid "History"
95
  msgstr ""
96
 
97
+ #: src/admin-views/editor/fieldset/advanced.php:132
98
  msgid "If you do not set an end sale date, tickets sales will never end."
99
  msgstr ""
100
 
101
+ #: src/admin-views/editor/fieldset/advanced.php:130
102
  msgid "If you do not set an end sale date, tickets will be available until the event begins."
103
  msgstr ""
104
 
105
+ #: src/admin-views/editor/fieldset/advanced.php:98
106
  msgid "If you do not set a start sale date, tickets will be available immediately."
107
  msgstr ""
108
 
109
+ #: src/admin-views/editor/fieldset/advanced.php:97
110
+ #: src/admin-views/editor/fieldset/advanced.php:126
111
  msgid "HH:MM"
112
  msgstr ""
113
 
114
+ #: src/admin-views/editor/fieldset/advanced.php:84
115
+ #: src/admin-views/editor/fieldset/advanced.php:113
116
  msgid "at"
117
  msgstr ""
118
 
119
+ #: src/admin-views/editor/fieldset/advanced.php:83
120
+ #: src/admin-views/editor/fieldset/advanced.php:112
121
  msgid "YYYY-MM-DD"
122
  msgstr ""
123
 
124
+ #: src/admin-views/editor/fieldset/advanced.php:65
125
  msgid "Show description on front end ticket form."
126
  msgstr ""
127
 
128
+ #: src/admin-views/editor/fieldset/advanced.php:47
129
  msgid "Description:"
130
  msgstr ""
131
 
132
+ #: src/admin-views/editor/fieldset/advanced.php:45
133
  msgid "Advanced Settings"
134
  msgstr ""
135
 
136
+ #: src/admin-views/editor/fieldset/advanced.php:42
137
  msgid "Advanced"
138
  msgstr ""
139
 
140
+ #: src/admin-views/editor/panel/settings.php:69
141
  msgid "Save settings"
142
  msgstr ""
143
 
144
+ #: src/admin-views/editor/panel/settings.php:32
145
  msgid "Select an image from your Media Library to display on emailed tickets. For best results, use a .jpg, .png, or .gif at least 1160px wide."
146
  msgstr ""
147
 
148
+ #: src/admin-views/editor/panel/settings.php:30
149
  msgid "Ticket header image:"
150
  msgstr ""
151
 
153
  msgid "Leave blank for unlimited"
154
  msgstr ""
155
 
156
+ #: src/admin-views/editor/list-table.php:40
157
  msgid "Available"
158
  msgstr ""
159
 
160
+ #: src/admin-views/editor/list-table.php:39
161
  msgid "Capacity"
162
  msgstr ""
163
 
164
+ #: src/admin-views/editor/panel/ticket.php:183
165
  msgid "Save RSVP"
166
  msgstr ""
167
 
168
+ #: src/admin-views/editor/panel/ticket.php:174
169
  msgid "Save ticket"
170
  msgstr ""
171
 
172
+ #: src/admin-views/editor/panel/ticket.php:92
173
  msgid "Ticket type name shows on the front end and emailed tickets"
174
  msgstr ""
175
 
176
+ #: src/admin-views/editor/panel/ticket.php:90
177
  msgid "Ticket Type is a required field."
178
  msgstr ""
179
 
180
+ #: src/admin-views/editor/panel/ticket.php:81
181
  msgid "Type:"
182
  msgstr ""
183
 
184
+ #: src/admin-views/editor/panel/ticket.php:76
185
  msgid "Edit RSVP"
186
  msgstr ""
187
 
188
+ #: src/admin-views/editor/panel/ticket.php:68
189
  msgid "Add new RSVP"
190
  msgstr ""
191
 
192
+ #: src/admin-views/editor/fieldset/advanced.php:38
193
  msgid "Start sale date cannot be greater than End Sale date"
194
  msgstr ""
195
 
196
+ #: src/admin-views/editor/fieldset/advanced.php:37
197
  msgid "Start sale date cannot be empty."
198
  msgstr ""
199
 
200
+ #: src/admin-views/editor/panel/list.php:61
201
  msgid "New RSVP"
202
  msgstr ""
203
 
204
+ #: src/admin-views/editor/panel/list.php:59
205
  msgid "Add a new RSVP"
206
  msgstr ""
207
 
208
+ #: src/admin-views/editor/panel/list.php:39
209
  msgid "View Attendees"
210
  msgstr ""
211
 
212
+ #: src/admin-views/editor/list-row.php:77
213
  msgid "( Ticket ID: %d )"
214
  msgstr ""
215
 
216
+ #: src/admin-views/editor/list-row.php:65
217
  msgid "The number of Complete ticket sales does not match the number of attendees. Please check the Attendees list and adjust ticket stock in WooCommerce as needed."
218
  msgstr ""
219
 
220
+ #: src/admin-views/editor/list-row.php:63
221
  msgid "Available:"
222
  msgstr ""
223
 
224
+ #: src/admin-views/editor/list-row.php:58
225
  #: src/admin-views/rsvp-metabox-capacity.php:10
226
  msgid "Capacity:"
227
  msgstr ""
228
 
229
+ #: src/Tribe/Tickets_Handler.php:84
230
  msgid "Unlimited"
231
  msgstr ""
232
 
233
+ #: src/Tribe/Tickets.php:904
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  msgid "Set capacity for this ticket only"
235
  msgstr ""
236
 
237
+ #: src/Tribe/Tickets.php:903
238
  msgid "Shared capacity with other tickets"
239
  msgstr ""
240
 
241
+ #: src/Tribe/Metabox.php:217
242
  msgid "Failed to Add the Ticket"
243
  msgstr ""
244
 
245
+ #: src/Tribe/Tickets.php:385
 
 
 
 
 
 
 
 
246
  msgid "Move Ticket"
247
  msgstr ""
248
 
249
+ #: src/Tribe/Tickets.php:385
250
  msgid "Move RSVP"
251
  msgstr ""
252
 
253
+ #: src/Tribe/Tickets.php:310
254
  msgid "Delete Ticket"
255
  msgstr ""
256
 
257
+ #: src/Tribe/Tickets.php:310
258
  msgid "Delete RSVP"
259
  msgstr ""
260
 
342
  msgid "Below the event details [default]"
343
  msgstr ""
344
 
345
+ #: src/admin-views/attendees.php:76
346
  msgctxt "attendee screen summary"
347
  msgid "Attendees By Ticket"
348
  msgstr ""
349
 
350
+ #: src/admin-views/attendees.php:38
351
  msgctxt "attendee screen summary"
352
  msgid "Event Details"
353
  msgstr ""
354
 
355
+ #: src/Tribe/Attendees.php:95
356
  msgctxt "attendee event actions"
357
  msgid "View Event"
358
  msgstr ""
359
 
360
+ #: src/Tribe/Attendees.php:94
361
  msgctxt "attendee event actions"
362
  msgid "Edit Event"
363
  msgstr ""
575
  msgid "You are running Version %s and deserve a hug :-)"
576
  msgstr "Používáte verzi %s a zasloužíte si obejmout :-)"
577
 
578
+ #: src/Tribe/Attendees.php:477
579
  msgctxt "attendee export"
580
  msgid "Customer Email Address"
581
  msgstr ""
582
 
583
+ #: src/Tribe/Attendees.php:476
584
  msgctxt "attendee export"
585
  msgid "Customer Name"
586
  msgstr ""
587
 
588
+ #: src/Tribe/Attendees.php:475
589
  msgctxt "attendee export"
590
  msgid "Ticket #"
591
  msgstr ""
592
 
593
+ #: src/Tribe/Attendees.php:474
594
  msgctxt "attendee export"
595
  msgid "Order Status"
596
  msgstr ""
597
 
598
+ #: src/Tribe/Attendees.php:473
599
  msgctxt "attendee export"
600
  msgid "Order ID"
601
  msgstr ""
602
 
603
+ #: src/Tribe/Attendees.php:262
604
  msgid "You must first select one or more tickets before you can move them!"
605
  msgstr ""
606
 
607
+ #: src/Tribe/Attendees.php:79
608
  msgid "Post type"
609
  msgstr ""
610
 
611
+ #: src/Tribe/Attendees.php:95
612
  msgctxt "attendee event actions"
613
  msgid "View"
614
  msgstr ""
615
 
616
+ #: src/Tribe/Attendees.php:94
617
  msgctxt "attendee event actions"
618
  msgid "Edit"
619
  msgstr ""
646
  msgid "Total RSVPs:"
647
  msgstr ""
648
 
649
+ #: src/Tribe/Assets.php:89
650
  msgid "Are you sure you want to delete this ticket? This cannot be undone."
651
  msgstr ""
652
 
653
+ #: src/Tribe/Main.php:692
654
  msgctxt "button text"
655
  msgid "RSVP"
656
  msgstr ""
657
 
658
+ #: src/Tribe/Main.php:557
659
  msgid "Welcome to Event Tickets"
660
  msgstr ""
661
 
704
  msgid "Deleted Attendees:"
705
  msgstr ""
706
 
707
+ #: src/Tribe/Attendees.php:122
708
  msgctxt "attendee summary"
709
  msgid "Checked in:"
710
  msgstr ""
863
  msgid "My RSVPs for This %s"
864
  msgstr ""
865
 
866
+ #: src/views/tickets/orders-link.php:54
867
  msgid "View your %s"
868
  msgstr ""
869
 
870
+ #: src/views/tickets/orders-link.php:53
871
  msgid "You have %s for this %s."
872
  msgstr ""
873
 
874
+ #: src/views/tickets/orders-link.php:34
875
  msgid "%d Ticket"
876
  msgid_plural "%d Tickets"
877
  msgstr[0] ""
878
  msgstr[1] ""
879
  msgstr[2] ""
880
 
881
+ #: src/views/tickets/orders-link.php:30
882
  msgid "%d RSVP"
883
  msgid_plural "%d RSVPs"
884
  msgstr[0] ""
930
  msgid "Going"
931
  msgstr ""
932
 
933
+ #: src/Tribe/Tickets.php:1464
934
  msgid "There are no tickets available at this time."
935
  msgstr ""
936
 
937
+ #: src/Tribe/Tickets.php:1462
938
  msgid "Tickets are no longer available."
939
  msgstr ""
940
 
941
+ #: src/Tribe/Tickets.php:1460
942
  msgid "Tickets are not yet available."
943
  msgstr ""
944
 
945
+ #: src/Tribe/Tickets.php:1458
946
  msgid "Tickets are not available as this %s has passed."
947
  msgstr ""
948
 
949
+ #: src/Tribe/RSVP.php:843
950
  msgid "You confirmed you will not be attending %s"
951
  msgstr ""
952
 
953
+ #: src/Tribe/Assets.php:102 src/Tribe/Metabox.php:548
954
  msgid "Please enter in without thousand separators and currency symbols."
955
  msgstr ""
956
 
957
+ #: src/Tribe/Assets.php:95
958
  msgid "It looks like you have modified your shared capacity setting but have not saved or updated the post."
959
  msgstr ""
960
 
961
+ #: src/Tribe/Main.php:692
962
  msgid "Buy"
963
  msgstr ""
964
 
1010
  msgid "View order"
1011
  msgstr ""
1012
 
1013
+ #: src/admin-views/editor/panel/settings.php:70
1014
+ #: src/admin-views/editor/panel/ticket.php:192
1015
  msgid "Cancel"
1016
  msgstr "Zrušit"
1017
 
1019
  msgid "Send Email"
1020
  msgstr "Poslat email"
1021
 
1022
+ #: src/Tribe/Attendees.php:672
1023
  msgid "Email sent successfully!"
1024
  msgstr "Email byl úspěšně odeslán!"
1025
 
1026
+ #: src/Tribe/Attendees.php:665
1027
  msgid "Error when sending the email"
1028
  msgstr "Došlo k chybě při odesílání emailu"
1029
 
1030
+ #: src/Tribe/Attendees.php:627 src/Tribe/Attendees.php:643
1031
  msgid "Invalid User ID"
1032
  msgstr "Neplatné ID uživatele"
1033
 
1034
+ #: src/Tribe/Attendees.php:621
1035
  msgid "Invalid Email"
1036
  msgstr "Neplatná emailová adresa"
1037
 
1038
+ #: src/Tribe/Attendees.php:609
1039
  msgid "Empty user and email"
1040
  msgstr "Nebylo zadáno uživatelské jméno a emailová adresa"
1041
 
1042
+ #: src/Tribe/Attendees.php:586
1043
  msgid "Invalid Event ID"
1044
  msgstr "Neplatné ID akce"
1045
 
1046
+ #: src/Tribe/Attendees.php:603
1047
  msgid "Cheatin Huh?"
1048
  msgstr "Co zkúšáš, jak zkúšáš?"
1049
 
1050
+ #: src/Tribe/RSVP.php:1779
 
 
 
 
1051
  msgid "Post draft updated."
1052
  msgstr "Koncept příspěvku byl uložen."
1053
 
1054
+ #: src/Tribe/RSVP.php:1778
1055
  msgid "Post scheduled."
1056
  msgstr "Příspěvek bude automaticky publikován."
1057
 
1058
+ #: src/Tribe/RSVP.php:1777
1059
  msgid "Post submitted."
1060
  msgstr "Příspěvek byl odeslán ke schválení."
1061
 
1062
+ #: src/Tribe/RSVP.php:1774
1063
  msgid "Post published. %1$s"
1064
  msgstr "Příspěvek byl publikován. %1$s"
1065
 
1066
+ #: src/Tribe/RSVP.php:1770
1067
  msgid "Post updated. %1$s"
1068
  msgstr "Příspěvek byl aktualizován. %1$s"
1069
 
1070
+ #: src/Tribe/RSVP.php:1763
1071
  msgid "Return to the %1$sAttendees Report%2$s."
1072
  msgstr "Zpět na %1$spřehled účastníků%2$s."
1073
 
1074
+ #: src/Tribe/RSVP.php:1158
1075
  msgid "You can't RSVP more than the total remaining tickets."
1076
  msgstr "Nemůžete potvrdit účast pro více než kolik je k dispozici zbývajících vstupenek."
1077
 
1078
+ #: src/Tribe/Main.php:456
1079
  msgid "If you have a valid license for one of our paid plugins, you can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
1080
  msgstr ""
1081
 
1082
+ #: src/Tribe/Main.php:451
1083
  msgid "Already have Events Tickets Plus? You can %s in our premium support forums. Our support team monitors the forums and will respond to your thread within 24-48 hours (during the week)."
1084
  msgstr ""
1085
 
1086
+ #: src/Tribe/Main.php:450 src/Tribe/Main.php:455
1087
  msgid "post a thread"
1088
  msgstr ""
1089
 
1090
+ #: src/Tribe/Main.php:448
1091
  msgid "Looking for more immediate support? We offer %1$s with the purchase of any of our premium plugins (like %2$s). Pick up a license and you can post there directly and expect a response within 24-48 hours during weekdays."
1092
  msgstr ""
1093
 
1094
+ #: src/Tribe/Main.php:447
1095
  msgid "Events Tickets Plus"
1096
  msgstr "Events Tickets Plus"
1097
 
1098
+ #: src/Tribe/Main.php:446
1099
  msgid "premium support on our website"
1100
  msgstr ""
1101
 
1102
+ #: src/Tribe/Main.php:444
1103
  msgid "If you have tried the above steps and are still having trouble, you can post a new thread to our %s. Our support staff monitors these forums once a week and would be happy to assist you there."
1104
  msgstr ""
1105
 
1106
+ #: src/Tribe/Main.php:443
1107
  msgid "open-source forum on WordPress.org"
1108
  msgstr ""
1109
 
1110
+ #: src/Tribe/Main.php:426
1111
  msgid "We are committed to helping you sell tickets for your event. Check out our handy %s to get started."
1112
  msgstr ""
1113
 
1114
+ #: src/Tribe/Main.php:424 src/admin-views/admin-welcome-message.php:23
1115
  msgid "New User Primer"
1116
  msgstr ""
1117
 
1118
+ #: src/Tribe/Main.php:407
1119
  msgid "Customizing Event Tickets"
1120
  msgstr ""
1121
 
1122
+ #: src/Tribe/Main.php:406
1123
  msgid "Troubleshooting common problems"
1124
  msgstr ""
1125
 
1126
+ #: src/Tribe/Main.php:405
1127
  msgid "Features overview"
1128
  msgstr "Přehled funkcí"
1129
 
1130
+ #: src/Tribe/Main.php:404
1131
  msgid "Settings overview"
1132
  msgstr "Přehled nastavení"
1133
 
1134
+ #: src/Tribe/Main.php:402
1135
  msgid "Support for Event Tickets"
1136
  msgstr ""
1137
 
1139
  msgid "When The Events Calendar and Event Tickets are both activated, The Events Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
1140
  msgstr ""
1141
 
1142
+ #: src/Tribe/Tickets_View.php:673 src/views/tickets/orders-link.php:53
1143
  msgid " and "
1144
  msgstr " a "
1145
 
1151
  msgid "Modern Tribe, Inc."
1152
  msgstr "Modern Tribe, Inc."
1153
 
1154
+ #. #-#-#-#-# event-tickets.pot (Event Tickets 4.6.1) #-#-#-#-#
1155
  #. Plugin Name of the plugin/theme
1156
+ #: src/Tribe/Main.php:470
1157
  msgid "Event Tickets"
1158
  msgstr "Event Tickets"
1159
 
1177
  msgid "RSVP"
1178
  msgstr "Potvrzení účasti"
1179
 
1180
+ #: src/views/tickets/email.php:378
1181
  msgid "Purchaser"
1182
  msgstr "Kupující"
1183
 
1184
+ #: src/views/tickets/email.php:374
1185
  msgid "Ticket Type"
1186
  msgstr "Typ vstupenky"
1187
 
1188
  #: src/views/tickets/email-non-attendance.php:24
1189
  #: src/views/tickets/email-ticket-type-moved.php:25
1190
+ #: src/views/tickets/email-tickets-moved.php:26 src/views/tickets/email.php:26
1191
  msgid "Your tickets"
1192
  msgstr "Vaše vstupenky"
1193
 
1199
  msgid "Post types that can have tickets"
1200
  msgstr "Typy příspěvků, které mohou mít vstupenky"
1201
 
1202
+ #: src/admin-views/editor/panel/settings.php:14
1203
  #: src/admin-views/tribe-options-tickets.php:47
1204
  msgid "Ticket Settings"
1205
  msgstr "Nastavení pro vstupenky"
1206
 
1207
+ #: src/admin-views/editor/fieldset/advanced.php:102
1208
  msgid "End sale:"
1209
  msgstr "Konec prodeje:"
1210
 
1211
+ #: src/admin-views/editor/fieldset/advanced.php:70
1212
  msgid "Start sale:"
1213
  msgstr "Začátek prodeje:"
1214
 
1228
  msgid "Price:"
1229
  msgstr "Cena:"
1230
 
1231
+ #: src/admin-views/editor/panel/ticket.php:95
1232
  msgid "Sell using:"
1233
  msgstr "Prodej pomocí:"
1234
 
1235
+ #: src/admin-views/editor/panel/ticket.php:54
1236
  msgid "Edit ticket"
1237
  msgstr "Upravit vstupenku"
1238
 
1239
+ #: src/admin-views/editor/panel/ticket.php:46
1240
  msgid "Add new ticket"
1241
  msgstr "Přidat novou vstupenku"
1242
 
1243
+ #: src/admin-views/editor/panel/settings.php:56
1244
  msgid "Remove"
1245
  msgstr "Odstranit"
1246
 
1247
+ #: src/admin-views/editor/panel/settings.php:40
1248
  msgid "Select an Image"
1249
  msgstr "Zvolit obrázek"
1250
 
1268
  msgid "Send the attendee list by email"
1269
  msgstr "Poslat seznam účastníků emailem"
1270
 
1271
+ #: src/Tribe/Attendees.php:664
1272
  msgid "Attendee List for: %s"
1273
  msgstr "Seznam účastníků na: %s"
1274
 
1275
+ #: src/Tribe/Attendees.php:557
1276
  msgid "attendees"
1277
  msgstr "ucastnici"
1278
 
1279
+ #: src/Tribe/Attendees.php:506
1280
  msgid "Yes"
1281
  msgstr "Ano"
1282
 
1283
+ #: src/Tribe/Attendees.php:293
1284
  msgid "You can use Screen Options to select which columns you want to see. The selection works in the table below, in the email, for print and for the CSV export."
1285
  msgstr "Pomocí záložky &#8222;Nastavení zobrazených informací&#8220; si můžete vybrat, které sloupce chcete zobrazit. Tento výběr se projeví při výpisu, při odesílání emailem, při tisku a při exportu do CSV souboru."
1286
 
1287
+ #: src/Tribe/Attendees.php:293
1288
  msgid "Columns"
1289
  msgstr "Sloupce"
1290
 
1291
+ #: src/Tribe/Attendees.php:259
1292
  msgid "Sending..."
1293
  msgstr "Odesílání..."
1294
 
1295
+ #: src/Tribe/Attendees.php:258
1296
  msgid "You need to select a user or type a valid email address"
1297
  msgstr "Je třeba vybrat uživatele nebo zadat platnou emailovou adresu"
1298
 
1299
+ #: src/Tribe/Admin/Columns/Tickets.php:57 src/Tribe/Attendees.php:184
1300
  #: src/Tribe/Tabbed_View/Attendee_Report_Tab.php:22
1301
+ #: src/admin-views/attendees.php:21
1302
  msgid "Attendees"
1303
  msgstr "Účastníci"
1304
 
1305
+ #: src/Tribe/Attendees.php:182
1306
  msgid "See who purchased tickets to this event"
1307
  msgstr "Kdo si koupil vstupenky na tuto akci"
1308
 
1309
+ #: src/Tribe/RSVP.php:1468
 
 
 
 
 
 
 
 
1310
  msgid "(deleted)"
1311
  msgstr "(smazáno)"
1312
 
1313
+ #: src/Tribe/RSVP.php:1163
1314
  msgid "In order to RSVP, you must enter your name and a valid email address."
1315
  msgstr "Pro potvrzení účasti musíte zadat své jméno a platnou emailovou adresu."
1316
 
1317
+ #: src/Tribe/RSVP.php:1152
1318
  msgid "Your RSVP has been received! Check your email for your RSVP confirmation."
1319
  msgstr "Vaše potvrzení účasti bylo přijato. Zkontrolujte prosím emailovou schránku, kam byl odeslán kontrolní email."
1320
 
1321
+ #: src/Tribe/RSVP.php:755
1322
  msgid "Your tickets from %s"
1323
  msgstr "Vaše vstupenky z webu %s"
1324
 
1364
  msgid "Check in"
1365
  msgstr "Zaregistrovat"
1366
 
1367
+ #: src/views/tickets/email.php:382
1368
  msgid "Security Code"
1369
  msgstr "Kontrolní kód"
1370
 
1371
+ #: src/views/tickets/email.php:370
1372
  msgid "Ticket #"
1373
  msgstr "Vstupenka č."
1374
 
1375
+ #: src/admin-views/editor/list-row.php:33
1376
  msgid "Ticket Type:"
1377
  msgstr ""
1378
 
1379
+ #: src/Tribe/Admin/Ticket_Settings.php:22 src/Tribe/Metabox.php:53
1380
+ #: src/Tribe/Tickets_View.php:665 src/admin-views/editor/list-table.php:30
1381
  msgid "Tickets"
1382
  msgstr "Vstupenky"
1383
 
1385
  msgid "Getting Started"
1386
  msgstr "Začínáme"
1387
 
1388
+ #: src/admin-views/editor/panel/list.php:66
1389
  msgid "Settings"
1390
  msgstr "Nastavení"
lang/event-tickets.pot CHANGED
@@ -2,19 +2,19 @@
2
  # This file is distributed under the same license as the Event Tickets package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Event Tickets 4.6\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/event-tickets\n"
7
- "POT-Creation-Date: 2017-11-08 18:27:05+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2017-11-08 18:27\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
15
- #: src/Tribe/Admin/Columns/Tickets.php:57
16
  #: src/Tribe/Tabbed_View/Attendee_Report_Tab.php:22
17
- #: src/Tribe/Tickets_Handler.php:952 src/admin-views/attendees.php:11
18
  msgid "Attendees"
19
  msgstr ""
20
 
@@ -143,8 +143,8 @@ msgstr ""
143
  msgid "No history available"
144
  msgstr ""
145
 
146
- #: src/Tribe/Admin/Ticket_Settings.php:22 src/Tribe/Metabox.php:31
147
- #: src/Tribe/Tickets_View.php:665 src/admin-views/list.php:28
148
  msgid "Tickets"
149
  msgstr ""
150
 
@@ -164,17 +164,17 @@ msgstr ""
164
  msgid "Set as ticket header"
165
  msgstr ""
166
 
167
- #: src/Tribe/Assets.php:99
168
  msgid "Are you sure you want to delete this ticket? This cannot be undone."
169
  msgstr ""
170
 
171
- #: src/Tribe/Assets.php:105
172
  msgid ""
173
  "It looks like you have modified your shared capacity setting but have not "
174
  "saved or updated the post."
175
  msgstr ""
176
 
177
- #: src/Tribe/Assets.php:112 src/Tribe/Metabox.php:82
178
  msgid "Please enter in without thousand separators and currency symbols."
179
  msgstr ""
180
 
@@ -183,6 +183,127 @@ msgctxt "attendee summary"
183
  msgid "Deleted Attendees:"
184
  msgstr ""
185
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  #: src/Tribe/Attendees_Table.php:52
187
  msgctxt "attendee table"
188
  msgid "Ticket"
@@ -330,99 +451,137 @@ msgid ""
330
  "Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
331
  msgstr ""
332
 
333
- #: src/Tribe/Main.php:403
334
  msgid "Support for Event Tickets"
335
  msgstr ""
336
 
337
- #: src/Tribe/Main.php:405
338
  msgid "Settings overview"
339
  msgstr ""
340
 
341
- #: src/Tribe/Main.php:406
342
  msgid "Features overview"
343
  msgstr ""
344
 
345
- #: src/Tribe/Main.php:407
346
  msgid "Troubleshooting common problems"
347
  msgstr ""
348
 
349
- #: src/Tribe/Main.php:408
350
  msgid "Customizing Event Tickets"
351
  msgstr ""
352
 
353
- #: src/Tribe/Main.php:425 src/admin-views/admin-welcome-message.php:23
354
  msgid "New User Primer"
355
  msgstr ""
356
 
357
- #: src/Tribe/Main.php:427
358
  msgid ""
359
  "We are committed to helping you sell tickets for your event. Check out our "
360
  "handy %s to get started."
361
  msgstr ""
362
 
363
- #: src/Tribe/Main.php:444
364
  msgid "open-source forum on WordPress.org"
365
  msgstr ""
366
 
367
- #: src/Tribe/Main.php:445
368
  msgid ""
369
  "If you have tried the above steps and are still having trouble, you can post "
370
  "a new thread to our %s. Our support staff monitors these forums once a week "
371
  "and would be happy to assist you there."
372
  msgstr ""
373
 
374
- #: src/Tribe/Main.php:447
375
  msgid "premium support on our website"
376
  msgstr ""
377
 
378
- #: src/Tribe/Main.php:448
379
  msgid "Events Tickets Plus"
380
  msgstr ""
381
 
382
- #: src/Tribe/Main.php:449
383
  msgid ""
384
  "Looking for more immediate support? We offer %1$s with the purchase of any "
385
  "of our premium plugins (like %2$s). Pick up a license and you can post there "
386
  "directly and expect a response within 24-48 hours during weekdays."
387
  msgstr ""
388
 
389
- #: src/Tribe/Main.php:451 src/Tribe/Main.php:456
390
  msgid "post a thread"
391
  msgstr ""
392
 
393
- #: src/Tribe/Main.php:452
394
  msgid ""
395
  "Already have Events Tickets Plus? You can %s in our premium support forums. "
396
  "Our support team monitors the forums and will respond to your thread within "
397
  "24-48 hours (during the week)."
398
  msgstr ""
399
 
400
- #: src/Tribe/Main.php:457
401
  msgid ""
402
  "If you have a valid license for one of our paid plugins, you can %s in our "
403
  "premium support forums. Our support team monitors the forums and will "
404
  "respond to your thread within 24-48 hours (during the week)."
405
  msgstr ""
406
 
407
- #. #-#-#-#-# event-tickets.pot (Event Tickets 4.6) #-#-#-#-#
408
  #. Plugin Name of the plugin/theme
409
- #: src/Tribe/Main.php:471
410
  msgid "Event Tickets"
411
  msgstr ""
412
 
413
- #: src/Tribe/Main.php:558
414
  msgid "Welcome to Event Tickets"
415
  msgstr ""
416
 
417
- #: src/Tribe/Main.php:693
418
  msgid "Buy"
419
  msgstr ""
420
 
421
- #: src/Tribe/Main.php:693
422
  msgctxt "button text"
423
  msgid "RSVP"
424
  msgstr ""
425
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
426
  #: src/Tribe/RSVP/Attendance_Totals.php:37
427
  msgctxt "attendee summary"
428
  msgid "Total RSVPs:"
@@ -456,284 +615,99 @@ msgstr ""
456
  msgid "RSVP Ticket"
457
  msgstr ""
458
 
459
- #: src/Tribe/RSVP.php:758
460
  msgid "Your tickets from %s"
461
  msgstr ""
462
 
463
- #: src/Tribe/RSVP.php:846
464
  msgid "You confirmed you will not be attending %s"
465
  msgstr ""
466
 
467
- #: src/Tribe/RSVP.php:1154
468
  msgid ""
469
  "Your RSVP has been received! Check your email for your RSVP confirmation."
470
  msgstr ""
471
 
472
- #: src/Tribe/RSVP.php:1160
473
  msgid "You can't RSVP more than the total remaining tickets."
474
  msgstr ""
475
 
476
- #: src/Tribe/RSVP.php:1165
477
  msgid "In order to RSVP, you must enter your name and a valid email address."
478
  msgstr ""
479
 
480
- #: src/Tribe/RSVP.php:1469
481
  msgid "(deleted)"
482
  msgstr ""
483
 
484
- #: src/Tribe/RSVP.php:1764
485
  msgid "Return to the %1$sAttendees Report%2$s."
486
  msgstr ""
487
 
488
- #: src/Tribe/RSVP.php:1771
489
  msgid "Post updated. %1$s"
490
  msgstr ""
491
 
492
- #: src/Tribe/RSVP.php:1775
493
  msgid "Post published. %1$s"
494
  msgstr ""
495
 
496
- #: src/Tribe/RSVP.php:1778
497
  msgid "Post submitted."
498
  msgstr ""
499
 
500
- #: src/Tribe/RSVP.php:1779
501
  msgid "Post scheduled."
502
  msgstr ""
503
 
504
- #: src/Tribe/RSVP.php:1780
505
  msgid "Post draft updated."
506
  msgstr ""
507
 
508
- #: src/Tribe/Tickets.php:311
509
  msgid "Delete RSVP"
510
  msgstr ""
511
 
512
- #: src/Tribe/Tickets.php:311
513
  msgid "Delete Ticket"
514
  msgstr ""
515
 
516
- #: src/Tribe/Tickets.php:386
517
  msgid "Move RSVP"
518
  msgstr ""
519
 
520
- #: src/Tribe/Tickets.php:386
521
  msgid "Move Ticket"
522
  msgstr ""
523
 
524
- #: src/Tribe/Tickets.php:755
525
- msgid "Your settings have been saved."
526
- msgstr ""
527
-
528
- #: src/Tribe/Tickets.php:758
529
- msgid "Your ticket has been saved."
530
- msgstr ""
531
-
532
- #: src/Tribe/Tickets.php:761 src/Tribe/Tickets.php:1057
533
- msgid "Your ticket has been deleted."
534
- msgstr ""
535
-
536
- #: src/Tribe/Tickets.php:796
537
- msgid "No Post ID was provided."
538
- msgstr ""
539
-
540
- #: src/Tribe/Tickets.php:851
541
- msgid "Failed to Add the Ticket"
542
- msgstr ""
543
-
544
- #: src/Tribe/Tickets.php:1114
545
- msgid "Editing the ticket price is currently disallowed."
546
- msgstr ""
547
-
548
- #: src/Tribe/Tickets.php:1408
549
  msgid "Shared capacity with other tickets"
550
  msgstr ""
551
 
552
- #: src/Tribe/Tickets.php:1409
553
  msgid "Set capacity for this ticket only"
554
  msgstr ""
555
 
556
- #: src/Tribe/Tickets.php:1443
557
- msgid "Missing required post ID."
558
- msgstr ""
559
-
560
- #: src/Tribe/Tickets.php:1447
561
- msgid "Missing required capacity."
562
- msgstr ""
563
-
564
- #: src/Tribe/Tickets.php:1452
565
- msgid "Bad capacity data."
566
- msgstr ""
567
-
568
- #: src/Tribe/Tickets.php:1487
569
- msgid "Global capacity updated. New level set to %n"
570
- msgstr ""
571
-
572
- #: src/Tribe/Tickets.php:2088
573
  msgid "Tickets are not available as this %s has passed."
574
  msgstr ""
575
 
576
- #: src/Tribe/Tickets.php:2090
577
  msgid "Tickets are not yet available."
578
  msgstr ""
579
 
580
- #: src/Tribe/Tickets.php:2092
581
  msgid "Tickets are no longer available."
582
  msgstr ""
583
 
584
- #: src/Tribe/Tickets.php:2094
585
  msgid "There are no tickets available at this time."
586
  msgstr ""
587
 
588
- #: src/Tribe/Tickets_Handler.php:128
589
  msgid "Unlimited"
590
  msgstr ""
591
 
592
- #: src/Tribe/Tickets_Handler.php:883
593
- msgid "Post type"
594
- msgstr ""
595
-
596
- #: src/Tribe/Tickets_Handler.php:896
597
- msgctxt "attendee event actions"
598
- msgid "Edit"
599
- msgstr ""
600
-
601
- #: src/Tribe/Tickets_Handler.php:896
602
- msgctxt "attendee event actions"
603
- msgid "Edit Event"
604
- msgstr ""
605
-
606
- #: src/Tribe/Tickets_Handler.php:897
607
- msgctxt "attendee event actions"
608
- msgid "View"
609
- msgstr ""
610
-
611
- #: src/Tribe/Tickets_Handler.php:897
612
- msgctxt "attendee event actions"
613
- msgid "View Event"
614
- msgstr ""
615
-
616
- #: src/Tribe/Tickets_Handler.php:921
617
- msgctxt "attendee summary"
618
- msgid "Checked in:"
619
- msgstr ""
620
-
621
- #: src/Tribe/Tickets_Handler.php:950
622
- msgid "See who purchased tickets to this event"
623
- msgstr ""
624
-
625
- #: src/Tribe/Tickets_Handler.php:1015
626
- msgid "You need to select a user or type a valid email address"
627
- msgstr ""
628
-
629
- #: src/Tribe/Tickets_Handler.php:1016
630
- msgid "Sending..."
631
- msgstr ""
632
-
633
- #: src/Tribe/Tickets_Handler.php:1019
634
- msgid "You must first select one or more tickets before you can move them!"
635
- msgstr ""
636
-
637
- #: src/Tribe/Tickets_Handler.php:1048
638
- msgid "Columns"
639
- msgstr ""
640
-
641
- #: src/Tribe/Tickets_Handler.php:1048
642
- msgid ""
643
- "You can use Screen Options to select which columns you want to see. The "
644
- "selection works in the table below, in the email, for print and for the CSV "
645
- "export."
646
- msgstr ""
647
-
648
- #: src/Tribe/Tickets_Handler.php:1206
649
- msgctxt "attendee export"
650
- msgid "Order ID"
651
- msgstr ""
652
-
653
- #: src/Tribe/Tickets_Handler.php:1207
654
- msgctxt "attendee export"
655
- msgid "Order Status"
656
- msgstr ""
657
-
658
- #: src/Tribe/Tickets_Handler.php:1208
659
- msgctxt "attendee export"
660
- msgid "Ticket #"
661
- msgstr ""
662
-
663
- #: src/Tribe/Tickets_Handler.php:1209
664
- msgctxt "attendee export"
665
- msgid "Customer Name"
666
- msgstr ""
667
-
668
- #: src/Tribe/Tickets_Handler.php:1210
669
- msgctxt "attendee export"
670
- msgid "Customer Email Address"
671
- msgstr ""
672
-
673
- #: src/Tribe/Tickets_Handler.php:1239
674
- msgid "Yes"
675
- msgstr ""
676
-
677
- #: src/Tribe/Tickets_Handler.php:1287
678
- msgid "attendees"
679
- msgstr ""
680
-
681
- #: src/Tribe/Tickets_Handler.php:1313
682
- msgid "Invalid Event ID"
683
- msgstr ""
684
-
685
- #: src/Tribe/Tickets_Handler.php:1330
686
- msgid "Cheatin Huh?"
687
- msgstr ""
688
-
689
- #: src/Tribe/Tickets_Handler.php:1336
690
- msgid "Empty user and email"
691
- msgstr ""
692
-
693
- #: src/Tribe/Tickets_Handler.php:1348
694
- msgid "Invalid Email"
695
- msgstr ""
696
-
697
- #: src/Tribe/Tickets_Handler.php:1354 src/Tribe/Tickets_Handler.php:1370
698
- msgid "Invalid User ID"
699
- msgstr ""
700
-
701
- #: src/Tribe/Tickets_Handler.php:1391
702
- msgid "Attendee List for: %s"
703
- msgstr ""
704
-
705
- #: src/Tribe/Tickets_Handler.php:1392
706
- msgid "Error when sending the email"
707
- msgstr ""
708
-
709
- #: src/Tribe/Tickets_Handler.php:1399
710
- msgid "Email sent successfully!"
711
- msgstr ""
712
-
713
- #: src/Tribe/Tickets_Handler.php:1503
714
- msgid "Ticket Type:"
715
- msgstr ""
716
-
717
- #: src/Tribe/Tickets_Handler.php:1528
718
- #: src/admin-views/rsvp-metabox-capacity.php:10
719
- msgid "Capacity:"
720
- msgstr ""
721
-
722
- #: src/Tribe/Tickets_Handler.php:1533
723
- msgid "Available:"
724
- msgstr ""
725
-
726
- #: src/Tribe/Tickets_Handler.php:1535
727
- msgid ""
728
- "The number of Complete ticket sales does not match the number of attendees. "
729
- "Please check the Attendees list and adjust ticket stock in WooCommerce as "
730
- "needed."
731
- msgstr ""
732
-
733
- #: src/Tribe/Tickets_Handler.php:1547
734
- msgid "( Ticket ID: %d )"
735
- msgstr ""
736
-
737
  #: src/Tribe/Tickets_View.php:552
738
  msgid "Going"
739
  msgstr ""
@@ -754,7 +728,7 @@ msgstr ""
754
  msgid "Ticket"
755
  msgstr ""
756
 
757
- #: src/Tribe/Tickets_View.php:673 src/views/tickets/orders-link.php:55
758
  msgid " and "
759
  msgstr ""
760
 
@@ -895,89 +869,218 @@ msgstr ""
895
  msgid "Send Email"
896
  msgstr ""
897
 
898
- #: src/admin-views/attendees.php:28
899
  msgctxt "attendee screen summary"
900
  msgid "Event Details"
901
  msgstr ""
902
 
903
- #: src/admin-views/attendees.php:66
904
  msgctxt "attendee screen summary"
905
  msgid "Attendees By Ticket"
906
  msgstr ""
907
 
908
- #: src/admin-views/base_admin_panel.php:6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
909
  msgid "You have unsaved changes to your tickets. Discard those changes?"
910
  msgstr ""
911
 
912
- #: src/admin-views/base_admin_panel.php:33
913
  msgid "View Attendees"
914
  msgstr ""
915
 
916
- #: src/admin-views/base_admin_panel.php:73
917
  msgid "Add a new RSVP"
918
  msgstr ""
919
 
920
- #: src/admin-views/base_admin_panel.php:75
921
  msgid "New RSVP"
922
  msgstr ""
923
 
924
- #: src/admin-views/base_admin_panel.php:80
925
  msgid "Settings"
926
  msgstr ""
927
 
928
- #: src/admin-views/edit_admin_panel.php:10
929
- msgid "Start sale date cannot be empty."
 
930
  msgstr ""
931
 
932
- #: src/admin-views/edit_admin_panel.php:11
933
- msgid "Start sale date cannot be greater than End Sale date"
 
 
 
 
 
 
934
  msgstr ""
935
 
936
- #: src/admin-views/edit_admin_panel.php:40
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
937
  msgid "Add new ticket"
938
  msgstr ""
939
 
940
- #: src/admin-views/edit_admin_panel.php:48
941
  msgid "Edit ticket"
942
  msgstr ""
943
 
944
- #: src/admin-views/edit_admin_panel.php:62
945
  msgid "Add new RSVP"
946
  msgstr ""
947
 
948
- #: src/admin-views/edit_admin_panel.php:70
949
  msgid "Edit RSVP"
950
  msgstr ""
951
 
952
- #: src/admin-views/edit_admin_panel.php:75
953
  msgid "Type:"
954
  msgstr ""
955
 
956
- #: src/admin-views/edit_admin_panel.php:84
957
  msgid "Ticket Type is a required field."
958
  msgstr ""
959
 
960
- #: src/admin-views/edit_admin_panel.php:86
961
  msgid "Ticket type name shows on the front end and emailed tickets"
962
  msgstr ""
963
 
964
- #: src/admin-views/edit_admin_panel.php:89
965
  msgid "Sell using:"
966
  msgstr ""
967
 
968
- #: src/admin-views/edit_admin_panel.php:158
969
  msgid "Save ticket"
970
  msgstr ""
971
 
972
- #: src/admin-views/edit_admin_panel.php:167
973
  msgid "Save RSVP"
974
  msgstr ""
975
 
976
- #: src/admin-views/edit_admin_panel.php:171
977
- #: src/admin-views/settings_admin_panel.php:50
978
- msgid "Cancel"
979
- msgstr ""
980
-
981
  #: src/admin-views/legacy-ticket-fields.php:15
982
  msgid "Price:"
983
  msgstr ""
@@ -994,14 +1097,6 @@ msgstr ""
994
  msgid "(Current sale price - this can be managed via the product editor)"
995
  msgstr ""
996
 
997
- #: src/admin-views/list.php:37
998
- msgid "Capacity"
999
- msgstr ""
1000
-
1001
- #: src/admin-views/list.php:38
1002
- msgid "Available"
1003
- msgstr ""
1004
-
1005
  #: src/admin-views/move-tickets.php:19
1006
  msgid "No attendees specified! Please try again."
1007
  msgstr ""
@@ -1071,33 +1166,6 @@ msgstr ""
1071
  msgid "Leave blank for unlimited"
1072
  msgstr ""
1073
 
1074
- #: src/admin-views/settings_admin_panel.php:14
1075
- #: src/admin-views/tribe-options-tickets.php:47
1076
- msgid "Ticket Settings"
1077
- msgstr ""
1078
-
1079
- #: src/admin-views/settings_admin_panel.php:30
1080
- msgid "Ticket header image:"
1081
- msgstr ""
1082
-
1083
- #: src/admin-views/settings_admin_panel.php:31
1084
- msgid ""
1085
- "Select an image from your Media Library to display on emailed tickets. For "
1086
- "best results, use a .jpg, .png, or .gif at least 1160px wide."
1087
- msgstr ""
1088
-
1089
- #: src/admin-views/settings_admin_panel.php:33
1090
- msgid "Select an Image"
1091
- msgstr ""
1092
-
1093
- #: src/admin-views/settings_admin_panel.php:43
1094
- msgid "Remove"
1095
- msgstr ""
1096
-
1097
- #: src/admin-views/settings_admin_panel.php:49
1098
- msgid "Save settings"
1099
- msgstr ""
1100
-
1101
  #: src/admin-views/ticket-type-history.php:10
1102
  msgid "Ticket history:"
1103
  msgstr ""
@@ -1110,68 +1178,6 @@ msgstr ""
1110
  msgid "Click to hide history"
1111
  msgstr ""
1112
 
1113
- #: src/admin-views/tickets-advanced.php:2
1114
- msgid "Advanced"
1115
- msgstr ""
1116
-
1117
- #: src/admin-views/tickets-advanced.php:5
1118
- msgid "Advanced Settings"
1119
- msgstr ""
1120
-
1121
- #: src/admin-views/tickets-advanced.php:7
1122
- msgid "Description:"
1123
- msgstr ""
1124
-
1125
- #: src/admin-views/tickets-advanced.php:25
1126
- msgid "Show description on front end ticket form."
1127
- msgstr ""
1128
-
1129
- #: src/admin-views/tickets-advanced.php:30
1130
- msgid "Start sale:"
1131
- msgstr ""
1132
-
1133
- #: src/admin-views/tickets-advanced.php:43
1134
- #: src/admin-views/tickets-advanced.php:71
1135
- msgid "YYYY-MM-DD"
1136
- msgstr ""
1137
-
1138
- #: src/admin-views/tickets-advanced.php:44
1139
- #: src/admin-views/tickets-advanced.php:72
1140
- msgid "at"
1141
- msgstr ""
1142
-
1143
- #: src/admin-views/tickets-advanced.php:56
1144
- #: src/admin-views/tickets-advanced.php:84
1145
- msgid "HH:MM"
1146
- msgstr ""
1147
-
1148
- #: src/admin-views/tickets-advanced.php:57
1149
- msgid ""
1150
- "If you do not set a start sale date, tickets will be available immediately."
1151
- msgstr ""
1152
-
1153
- #: src/admin-views/tickets-advanced.php:61
1154
- msgid "End sale:"
1155
- msgstr ""
1156
-
1157
- #: src/admin-views/tickets-advanced.php:88
1158
- msgid ""
1159
- "If you do not set an end sale date, tickets will be available until the "
1160
- "event begins."
1161
- msgstr ""
1162
-
1163
- #: src/admin-views/tickets-advanced.php:90
1164
- msgid "If you do not set an end sale date, tickets sales will never end."
1165
- msgstr ""
1166
-
1167
- #: src/admin-views/tickets-history.php:19
1168
- msgid "History"
1169
- msgstr ""
1170
-
1171
- #: src/admin-views/tickets-history.php:22
1172
- msgid "Ti"
1173
- msgstr ""
1174
-
1175
  #: src/admin-views/tribe-options-tickets.php:37
1176
  msgid "Require users to log in before they RSVP"
1177
  msgstr ""
@@ -1289,7 +1295,7 @@ msgstr ""
1289
 
1290
  #: src/views/tickets/email-non-attendance.php:24
1291
  #: src/views/tickets/email-ticket-type-moved.php:25
1292
- #: src/views/tickets/email-tickets-moved.php:26 src/views/tickets/email.php:27
1293
  msgid "Your tickets"
1294
  msgstr ""
1295
 
@@ -1332,39 +1338,39 @@ msgid_plural ""
1332
  msgstr[0] ""
1333
  msgstr[1] ""
1334
 
1335
- #: src/views/tickets/email.php:371
1336
  msgid "Ticket #"
1337
  msgstr ""
1338
 
1339
- #: src/views/tickets/email.php:375
1340
  msgid "Ticket Type"
1341
  msgstr ""
1342
 
1343
- #: src/views/tickets/email.php:379
1344
  msgid "Purchaser"
1345
  msgstr ""
1346
 
1347
- #: src/views/tickets/email.php:383
1348
  msgid "Security Code"
1349
  msgstr ""
1350
 
1351
- #: src/views/tickets/orders-link.php:32
1352
  msgid "%d RSVP"
1353
  msgid_plural "%d RSVPs"
1354
  msgstr[0] ""
1355
  msgstr[1] ""
1356
 
1357
- #: src/views/tickets/orders-link.php:36
1358
  msgid "%d Ticket"
1359
  msgid_plural "%d Tickets"
1360
  msgstr[0] ""
1361
  msgstr[1] ""
1362
 
1363
- #: src/views/tickets/orders-link.php:55
1364
  msgid "You have %s for this %s."
1365
  msgstr ""
1366
 
1367
- #: src/views/tickets/orders-link.php:56
1368
  msgid "View your %s"
1369
  msgstr ""
1370
 
2
  # This file is distributed under the same license as the Event Tickets package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Event Tickets 4.6.1\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/event-tickets\n"
7
+ "POT-Creation-Date: 2017-11-21 16:23:55+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: 2017-11-21 16:23\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
15
+ #: src/Tribe/Admin/Columns/Tickets.php:57 src/Tribe/Attendees.php:184
16
  #: src/Tribe/Tabbed_View/Attendee_Report_Tab.php:22
17
+ #: src/admin-views/attendees.php:21
18
  msgid "Attendees"
19
  msgstr ""
20
 
143
  msgid "No history available"
144
  msgstr ""
145
 
146
+ #: src/Tribe/Admin/Ticket_Settings.php:22 src/Tribe/Metabox.php:53
147
+ #: src/Tribe/Tickets_View.php:665 src/admin-views/editor/list-table.php:30
148
  msgid "Tickets"
149
  msgstr ""
150
 
164
  msgid "Set as ticket header"
165
  msgstr ""
166
 
167
+ #: src/Tribe/Assets.php:89
168
  msgid "Are you sure you want to delete this ticket? This cannot be undone."
169
  msgstr ""
170
 
171
+ #: src/Tribe/Assets.php:95
172
  msgid ""
173
  "It looks like you have modified your shared capacity setting but have not "
174
  "saved or updated the post."
175
  msgstr ""
176
 
177
+ #: src/Tribe/Assets.php:102 src/Tribe/Metabox.php:548
178
  msgid "Please enter in without thousand separators and currency symbols."
179
  msgstr ""
180
 
183
  msgid "Deleted Attendees:"
184
  msgstr ""
185
 
186
+ #: src/Tribe/Attendees.php:79
187
+ msgid "Post type"
188
+ msgstr ""
189
+
190
+ #: src/Tribe/Attendees.php:94
191
+ msgctxt "attendee event actions"
192
+ msgid "Edit"
193
+ msgstr ""
194
+
195
+ #: src/Tribe/Attendees.php:94
196
+ msgctxt "attendee event actions"
197
+ msgid "Edit Event"
198
+ msgstr ""
199
+
200
+ #: src/Tribe/Attendees.php:95
201
+ msgctxt "attendee event actions"
202
+ msgid "View"
203
+ msgstr ""
204
+
205
+ #: src/Tribe/Attendees.php:95
206
+ msgctxt "attendee event actions"
207
+ msgid "View Event"
208
+ msgstr ""
209
+
210
+ #: src/Tribe/Attendees.php:122
211
+ msgctxt "attendee summary"
212
+ msgid "Checked in:"
213
+ msgstr ""
214
+
215
+ #: src/Tribe/Attendees.php:182
216
+ msgid "See who purchased tickets to this event"
217
+ msgstr ""
218
+
219
+ #: src/Tribe/Attendees.php:258
220
+ msgid "You need to select a user or type a valid email address"
221
+ msgstr ""
222
+
223
+ #: src/Tribe/Attendees.php:259
224
+ msgid "Sending..."
225
+ msgstr ""
226
+
227
+ #: src/Tribe/Attendees.php:262
228
+ msgid "You must first select one or more tickets before you can move them!"
229
+ msgstr ""
230
+
231
+ #: src/Tribe/Attendees.php:293
232
+ msgid "Columns"
233
+ msgstr ""
234
+
235
+ #: src/Tribe/Attendees.php:293
236
+ msgid ""
237
+ "You can use Screen Options to select which columns you want to see. The "
238
+ "selection works in the table below, in the email, for print and for the CSV "
239
+ "export."
240
+ msgstr ""
241
+
242
+ #: src/Tribe/Attendees.php:473
243
+ msgctxt "attendee export"
244
+ msgid "Order ID"
245
+ msgstr ""
246
+
247
+ #: src/Tribe/Attendees.php:474
248
+ msgctxt "attendee export"
249
+ msgid "Order Status"
250
+ msgstr ""
251
+
252
+ #: src/Tribe/Attendees.php:475
253
+ msgctxt "attendee export"
254
+ msgid "Ticket #"
255
+ msgstr ""
256
+
257
+ #: src/Tribe/Attendees.php:476
258
+ msgctxt "attendee export"
259
+ msgid "Customer Name"
260
+ msgstr ""
261
+
262
+ #: src/Tribe/Attendees.php:477
263
+ msgctxt "attendee export"
264
+ msgid "Customer Email Address"
265
+ msgstr ""
266
+
267
+ #: src/Tribe/Attendees.php:506
268
+ msgid "Yes"
269
+ msgstr ""
270
+
271
+ #: src/Tribe/Attendees.php:557
272
+ msgid "attendees"
273
+ msgstr ""
274
+
275
+ #: src/Tribe/Attendees.php:586
276
+ msgid "Invalid Event ID"
277
+ msgstr ""
278
+
279
+ #: src/Tribe/Attendees.php:603
280
+ msgid "Cheatin Huh?"
281
+ msgstr ""
282
+
283
+ #: src/Tribe/Attendees.php:609
284
+ msgid "Empty user and email"
285
+ msgstr ""
286
+
287
+ #: src/Tribe/Attendees.php:621
288
+ msgid "Invalid Email"
289
+ msgstr ""
290
+
291
+ #: src/Tribe/Attendees.php:627 src/Tribe/Attendees.php:643
292
+ msgid "Invalid User ID"
293
+ msgstr ""
294
+
295
+ #: src/Tribe/Attendees.php:664
296
+ msgid "Attendee List for: %s"
297
+ msgstr ""
298
+
299
+ #: src/Tribe/Attendees.php:665
300
+ msgid "Error when sending the email"
301
+ msgstr ""
302
+
303
+ #: src/Tribe/Attendees.php:672
304
+ msgid "Email sent successfully!"
305
+ msgstr ""
306
+
307
  #: src/Tribe/Attendees_Table.php:52
308
  msgctxt "attendee table"
309
  msgid "Ticket"
451
  "Calendar must be running version %1$s or greater. Please %2$supdate now.%3$s"
452
  msgstr ""
453
 
454
+ #: src/Tribe/Main.php:402
455
  msgid "Support for Event Tickets"
456
  msgstr ""
457
 
458
+ #: src/Tribe/Main.php:404
459
  msgid "Settings overview"
460
  msgstr ""
461
 
462
+ #: src/Tribe/Main.php:405
463
  msgid "Features overview"
464
  msgstr ""
465
 
466
+ #: src/Tribe/Main.php:406
467
  msgid "Troubleshooting common problems"
468
  msgstr ""
469
 
470
+ #: src/Tribe/Main.php:407
471
  msgid "Customizing Event Tickets"
472
  msgstr ""
473
 
474
+ #: src/Tribe/Main.php:424 src/admin-views/admin-welcome-message.php:23
475
  msgid "New User Primer"
476
  msgstr ""
477
 
478
+ #: src/Tribe/Main.php:426
479
  msgid ""
480
  "We are committed to helping you sell tickets for your event. Check out our "
481
  "handy %s to get started."
482
  msgstr ""
483
 
484
+ #: src/Tribe/Main.php:443
485
  msgid "open-source forum on WordPress.org"
486
  msgstr ""
487
 
488
+ #: src/Tribe/Main.php:444
489
  msgid ""
490
  "If you have tried the above steps and are still having trouble, you can post "
491
  "a new thread to our %s. Our support staff monitors these forums once a week "
492
  "and would be happy to assist you there."
493
  msgstr ""
494
 
495
+ #: src/Tribe/Main.php:446
496
  msgid "premium support on our website"
497
  msgstr ""
498
 
499
+ #: src/Tribe/Main.php:447
500
  msgid "Events Tickets Plus"
501
  msgstr ""
502
 
503
+ #: src/Tribe/Main.php:448
504
  msgid ""
505
  "Looking for more immediate support? We offer %1$s with the purchase of any "
506
  "of our premium plugins (like %2$s). Pick up a license and you can post there "
507
  "directly and expect a response within 24-48 hours during weekdays."
508
  msgstr ""
509
 
510
+ #: src/Tribe/Main.php:450 src/Tribe/Main.php:455
511
  msgid "post a thread"
512
  msgstr ""
513
 
514
+ #: src/Tribe/Main.php:451
515
  msgid ""
516
  "Already have Events Tickets Plus? You can %s in our premium support forums. "
517
  "Our support team monitors the forums and will respond to your thread within "
518
  "24-48 hours (during the week)."
519
  msgstr ""
520
 
521
+ #: src/Tribe/Main.php:456
522
  msgid ""
523
  "If you have a valid license for one of our paid plugins, you can %s in our "
524
  "premium support forums. Our support team monitors the forums and will "
525
  "respond to your thread within 24-48 hours (during the week)."
526
  msgstr ""
527
 
528
+ #. #-#-#-#-# event-tickets.pot (Event Tickets 4.6.1) #-#-#-#-#
529
  #. Plugin Name of the plugin/theme
530
+ #: src/Tribe/Main.php:470
531
  msgid "Event Tickets"
532
  msgstr ""
533
 
534
+ #: src/Tribe/Main.php:557
535
  msgid "Welcome to Event Tickets"
536
  msgstr ""
537
 
538
+ #: src/Tribe/Main.php:692
539
  msgid "Buy"
540
  msgstr ""
541
 
542
+ #: src/Tribe/Main.php:692
543
  msgctxt "button text"
544
  msgid "RSVP"
545
  msgstr ""
546
 
547
+ #: src/Tribe/Metabox.php:106
548
+ msgid "Invalid Post ID"
549
+ msgstr ""
550
+
551
+ #: src/Tribe/Metabox.php:185 src/Tribe/Metabox.php:246
552
+ #: src/Tribe/Metabox.php:298
553
+ msgid "Invalid parent Post"
554
+ msgstr ""
555
+
556
+ #: src/Tribe/Metabox.php:195
557
+ msgid "Failed to Add the Ticket, Refresh the Page to try again."
558
+ msgstr ""
559
+
560
+ #: src/Tribe/Metabox.php:199
561
+ msgid "Commerce Provider invalid"
562
+ msgstr ""
563
+
564
+ #: src/Tribe/Metabox.php:217
565
+ msgid "Failed to Add the Ticket"
566
+ msgstr ""
567
+
568
+ #: src/Tribe/Metabox.php:252 src/Tribe/Metabox.php:304
569
+ msgid "Invalid Ticket"
570
+ msgstr ""
571
+
572
+ #: src/Tribe/Metabox.php:262
573
+ msgid "Failed to Edit the Ticket, Refresh the Page to try again."
574
+ msgstr ""
575
+
576
+ #: src/Tribe/Metabox.php:268 src/Tribe/Metabox.php:314
577
+ #: src/Tribe/Metabox.php:352 src/Tribe/Metabox.php:388
578
+ msgid "Commerce Module invalid"
579
+ msgstr ""
580
+
581
+ #: src/Tribe/Metabox.php:308
582
+ msgid "Failed to Delete the Ticket, Refresh the Page to try again."
583
+ msgstr ""
584
+
585
  #: src/Tribe/RSVP/Attendance_Totals.php:37
586
  msgctxt "attendee summary"
587
  msgid "Total RSVPs:"
615
  msgid "RSVP Ticket"
616
  msgstr ""
617
 
618
+ #: src/Tribe/RSVP.php:755
619
  msgid "Your tickets from %s"
620
  msgstr ""
621
 
622
+ #: src/Tribe/RSVP.php:843
623
  msgid "You confirmed you will not be attending %s"
624
  msgstr ""
625
 
626
+ #: src/Tribe/RSVP.php:1152
627
  msgid ""
628
  "Your RSVP has been received! Check your email for your RSVP confirmation."
629
  msgstr ""
630
 
631
+ #: src/Tribe/RSVP.php:1158
632
  msgid "You can't RSVP more than the total remaining tickets."
633
  msgstr ""
634
 
635
+ #: src/Tribe/RSVP.php:1163
636
  msgid "In order to RSVP, you must enter your name and a valid email address."
637
  msgstr ""
638
 
639
+ #: src/Tribe/RSVP.php:1468
640
  msgid "(deleted)"
641
  msgstr ""
642
 
643
+ #: src/Tribe/RSVP.php:1763
644
  msgid "Return to the %1$sAttendees Report%2$s."
645
  msgstr ""
646
 
647
+ #: src/Tribe/RSVP.php:1770
648
  msgid "Post updated. %1$s"
649
  msgstr ""
650
 
651
+ #: src/Tribe/RSVP.php:1774
652
  msgid "Post published. %1$s"
653
  msgstr ""
654
 
655
+ #: src/Tribe/RSVP.php:1777
656
  msgid "Post submitted."
657
  msgstr ""
658
 
659
+ #: src/Tribe/RSVP.php:1778
660
  msgid "Post scheduled."
661
  msgstr ""
662
 
663
+ #: src/Tribe/RSVP.php:1779
664
  msgid "Post draft updated."
665
  msgstr ""
666
 
667
+ #: src/Tribe/Tickets.php:310
668
  msgid "Delete RSVP"
669
  msgstr ""
670
 
671
+ #: src/Tribe/Tickets.php:310
672
  msgid "Delete Ticket"
673
  msgstr ""
674
 
675
+ #: src/Tribe/Tickets.php:385
676
  msgid "Move RSVP"
677
  msgstr ""
678
 
679
+ #: src/Tribe/Tickets.php:385
680
  msgid "Move Ticket"
681
  msgstr ""
682
 
683
+ #: src/Tribe/Tickets.php:903
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
684
  msgid "Shared capacity with other tickets"
685
  msgstr ""
686
 
687
+ #: src/Tribe/Tickets.php:904
688
  msgid "Set capacity for this ticket only"
689
  msgstr ""
690
 
691
+ #: src/Tribe/Tickets.php:1458
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
692
  msgid "Tickets are not available as this %s has passed."
693
  msgstr ""
694
 
695
+ #: src/Tribe/Tickets.php:1460
696
  msgid "Tickets are not yet available."
697
  msgstr ""
698
 
699
+ #: src/Tribe/Tickets.php:1462
700
  msgid "Tickets are no longer available."
701
  msgstr ""
702
 
703
+ #: src/Tribe/Tickets.php:1464
704
  msgid "There are no tickets available at this time."
705
  msgstr ""
706
 
707
+ #: src/Tribe/Tickets_Handler.php:84
708
  msgid "Unlimited"
709
  msgstr ""
710
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
711
  #: src/Tribe/Tickets_View.php:552
712
  msgid "Going"
713
  msgstr ""
728
  msgid "Ticket"
729
  msgstr ""
730
 
731
+ #: src/Tribe/Tickets_View.php:673 src/views/tickets/orders-link.php:53
732
  msgid " and "
733
  msgstr ""
734
 
869
  msgid "Send Email"
870
  msgstr ""
871
 
872
+ #: src/admin-views/attendees.php:38
873
  msgctxt "attendee screen summary"
874
  msgid "Event Details"
875
  msgstr ""
876
 
877
+ #: src/admin-views/attendees.php:76
878
  msgctxt "attendee screen summary"
879
  msgid "Attendees By Ticket"
880
  msgstr ""
881
 
882
+ #: src/admin-views/editor/fieldset/advanced.php:37
883
+ msgid "Start sale date cannot be empty."
884
+ msgstr ""
885
+
886
+ #: src/admin-views/editor/fieldset/advanced.php:38
887
+ msgid "Start sale date cannot be greater than End Sale date"
888
+ msgstr ""
889
+
890
+ #: src/admin-views/editor/fieldset/advanced.php:42
891
+ msgid "Advanced"
892
+ msgstr ""
893
+
894
+ #: src/admin-views/editor/fieldset/advanced.php:45
895
+ msgid "Advanced Settings"
896
+ msgstr ""
897
+
898
+ #: src/admin-views/editor/fieldset/advanced.php:47
899
+ msgid "Description:"
900
+ msgstr ""
901
+
902
+ #: src/admin-views/editor/fieldset/advanced.php:65
903
+ msgid "Show description on front end ticket form."
904
+ msgstr ""
905
+
906
+ #: src/admin-views/editor/fieldset/advanced.php:70
907
+ msgid "Start sale:"
908
+ msgstr ""
909
+
910
+ #: src/admin-views/editor/fieldset/advanced.php:83
911
+ #: src/admin-views/editor/fieldset/advanced.php:112
912
+ msgid "YYYY-MM-DD"
913
+ msgstr ""
914
+
915
+ #: src/admin-views/editor/fieldset/advanced.php:84
916
+ #: src/admin-views/editor/fieldset/advanced.php:113
917
+ msgid "at"
918
+ msgstr ""
919
+
920
+ #: src/admin-views/editor/fieldset/advanced.php:95
921
+ msgid "Ticket start date"
922
+ msgstr ""
923
+
924
+ #: src/admin-views/editor/fieldset/advanced.php:97
925
+ #: src/admin-views/editor/fieldset/advanced.php:126
926
+ msgid "HH:MM"
927
+ msgstr ""
928
+
929
+ #: src/admin-views/editor/fieldset/advanced.php:98
930
+ msgid ""
931
+ "If you do not set a start sale date, tickets will be available immediately."
932
+ msgstr ""
933
+
934
+ #: src/admin-views/editor/fieldset/advanced.php:102
935
+ msgid "End sale:"
936
+ msgstr ""
937
+
938
+ #: src/admin-views/editor/fieldset/advanced.php:124
939
+ msgid "Ticket end date"
940
+ msgstr ""
941
+
942
+ #: src/admin-views/editor/fieldset/advanced.php:130
943
+ msgid ""
944
+ "If you do not set an end sale date, tickets will be available until the "
945
+ "event begins."
946
+ msgstr ""
947
+
948
+ #: src/admin-views/editor/fieldset/advanced.php:132
949
+ msgid "If you do not set an end sale date, tickets sales will never end."
950
+ msgstr ""
951
+
952
+ #: src/admin-views/editor/fieldset/history.php:27
953
+ msgid "History"
954
+ msgstr ""
955
+
956
+ #: src/admin-views/editor/fieldset/history.php:30
957
+ msgid "Ti"
958
+ msgstr ""
959
+
960
+ #: src/admin-views/editor/list-row.php:33
961
+ msgid "Ticket Type:"
962
+ msgstr ""
963
+
964
+ #: src/admin-views/editor/list-row.php:58
965
+ #: src/admin-views/rsvp-metabox-capacity.php:10
966
+ msgid "Capacity:"
967
+ msgstr ""
968
+
969
+ #: src/admin-views/editor/list-row.php:63
970
+ msgid "Available:"
971
+ msgstr ""
972
+
973
+ #: src/admin-views/editor/list-row.php:65
974
+ msgid ""
975
+ "The number of Complete ticket sales does not match the number of attendees. "
976
+ "Please check the Attendees list and adjust ticket stock in WooCommerce as "
977
+ "needed."
978
+ msgstr ""
979
+
980
+ #: src/admin-views/editor/list-row.php:77
981
+ msgid "( Ticket ID: %d )"
982
+ msgstr ""
983
+
984
+ #: src/admin-views/editor/list-table.php:39
985
+ msgid "Capacity"
986
+ msgstr ""
987
+
988
+ #: src/admin-views/editor/list-table.php:40
989
+ msgid "Available"
990
+ msgstr ""
991
+
992
+ #: src/admin-views/editor/panel/list.php:11
993
  msgid "You have unsaved changes to your tickets. Discard those changes?"
994
  msgstr ""
995
 
996
+ #: src/admin-views/editor/panel/list.php:39
997
  msgid "View Attendees"
998
  msgstr ""
999
 
1000
+ #: src/admin-views/editor/panel/list.php:59
1001
  msgid "Add a new RSVP"
1002
  msgstr ""
1003
 
1004
+ #: src/admin-views/editor/panel/list.php:61
1005
  msgid "New RSVP"
1006
  msgstr ""
1007
 
1008
+ #: src/admin-views/editor/panel/list.php:66
1009
  msgid "Settings"
1010
  msgstr ""
1011
 
1012
+ #: src/admin-views/editor/panel/settings.php:14
1013
+ #: src/admin-views/tribe-options-tickets.php:47
1014
+ msgid "Ticket Settings"
1015
  msgstr ""
1016
 
1017
+ #: src/admin-views/editor/panel/settings.php:30
1018
+ msgid "Ticket header image:"
1019
+ msgstr ""
1020
+
1021
+ #: src/admin-views/editor/panel/settings.php:32
1022
+ msgid ""
1023
+ "Select an image from your Media Library to display on emailed tickets. For "
1024
+ "best results, use a .jpg, .png, or .gif at least 1160px wide."
1025
  msgstr ""
1026
 
1027
+ #: src/admin-views/editor/panel/settings.php:40
1028
+ msgid "Select an Image"
1029
+ msgstr ""
1030
+
1031
+ #: src/admin-views/editor/panel/settings.php:56
1032
+ msgid "Remove"
1033
+ msgstr ""
1034
+
1035
+ #: src/admin-views/editor/panel/settings.php:69
1036
+ msgid "Save settings"
1037
+ msgstr ""
1038
+
1039
+ #: src/admin-views/editor/panel/settings.php:70
1040
+ #: src/admin-views/editor/panel/ticket.php:192
1041
+ msgid "Cancel"
1042
+ msgstr ""
1043
+
1044
+ #: src/admin-views/editor/panel/ticket.php:46
1045
  msgid "Add new ticket"
1046
  msgstr ""
1047
 
1048
+ #: src/admin-views/editor/panel/ticket.php:54
1049
  msgid "Edit ticket"
1050
  msgstr ""
1051
 
1052
+ #: src/admin-views/editor/panel/ticket.php:68
1053
  msgid "Add new RSVP"
1054
  msgstr ""
1055
 
1056
+ #: src/admin-views/editor/panel/ticket.php:76
1057
  msgid "Edit RSVP"
1058
  msgstr ""
1059
 
1060
+ #: src/admin-views/editor/panel/ticket.php:81
1061
  msgid "Type:"
1062
  msgstr ""
1063
 
1064
+ #: src/admin-views/editor/panel/ticket.php:90
1065
  msgid "Ticket Type is a required field."
1066
  msgstr ""
1067
 
1068
+ #: src/admin-views/editor/panel/ticket.php:92
1069
  msgid "Ticket type name shows on the front end and emailed tickets"
1070
  msgstr ""
1071
 
1072
+ #: src/admin-views/editor/panel/ticket.php:95
1073
  msgid "Sell using:"
1074
  msgstr ""
1075
 
1076
+ #: src/admin-views/editor/panel/ticket.php:174
1077
  msgid "Save ticket"
1078
  msgstr ""
1079
 
1080
+ #: src/admin-views/editor/panel/ticket.php:183
1081
  msgid "Save RSVP"
1082
  msgstr ""
1083
 
 
 
 
 
 
1084
  #: src/admin-views/legacy-ticket-fields.php:15
1085
  msgid "Price:"
1086
  msgstr ""
1097
  msgid "(Current sale price - this can be managed via the product editor)"
1098
  msgstr ""
1099
 
 
 
 
 
 
 
 
 
1100
  #: src/admin-views/move-tickets.php:19
1101
  msgid "No attendees specified! Please try again."
1102
  msgstr ""
1166
  msgid "Leave blank for unlimited"
1167
  msgstr ""
1168
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1169
  #: src/admin-views/ticket-type-history.php:10
1170
  msgid "Ticket history:"
1171
  msgstr ""
1178
  msgid "Click to hide history"
1179
  msgstr ""
1180
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1181
  #: src/admin-views/tribe-options-tickets.php:37
1182
  msgid "Require users to log in before they RSVP"
1183
  msgstr ""
1295
 
1296
  #: src/views/tickets/email-non-attendance.php:24
1297
  #: src/views/tickets/email-ticket-type-moved.php:25
1298
+ #: src/views/tickets/email-tickets-moved.php:26 src/views/tickets/email.php:26
1299
  msgid "Your tickets"
1300
  msgstr ""
1301
 
1338
  msgstr[0] ""
1339
  msgstr[1] ""
1340
 
1341
+ #: src/views/tickets/email.php:370
1342
  msgid "Ticket #"
1343
  msgstr ""
1344
 
1345
+ #: src/views/tickets/email.php:374
1346
  msgid "Ticket Type"
1347
  msgstr ""
1348
 
1349
+ #: src/views/tickets/email.php:378
1350
  msgid "Purchaser"
1351
  msgstr ""
1352
 
1353
+ #: src/views/tickets/email.php:382
1354
  msgid "Security Code"
1355
  msgstr ""
1356
 
1357
+ #: src/views/tickets/orders-link.php:30
1358
  msgid "%d RSVP"
1359
  msgid_plural "%d RSVPs"
1360
  msgstr[0] ""
1361
  msgstr[1] ""
1362
 
1363
+ #: src/views/tickets/orders-link.php:34
1364
  msgid "%d Ticket"
1365
  msgid_plural "%d Tickets"
1366
  msgstr[0] ""
1367
  msgstr[1] ""
1368
 
1369
+ #: src/views/tickets/orders-link.php:53
1370
  msgid "You have %s for this %s."
1371
  msgstr ""
1372
 
1373
+ #: src/views/tickets/orders-link.php:54
1374
  msgid "View your %s"
1375
  msgstr ""
1376
 
readme.txt CHANGED
@@ -3,8 +3,8 @@
3
  Contributors: ModernTribe, borkweb, aguseo, barry.hughes, bordoni, brianjessee, cliffpaulick, courane01, faction23, GeoffBel, geoffgraham, ggwicz, jbrinley, jentheo, leahkoerper, lucatume, mastromktg, MZAWeb, neillmcshea, nicosantos, patriciahillebrandt, peterchester, reid.peifer, roblagatta, ryancurban, shane.pearlman, tribecari, vicskf, zbtirrell
4
  Tags: RSVP, events, tickets, event management, calendar, ticket sales, community, registration, api, dates, date, posts, workshop, conference, meeting, seminar, concert, summit, ticket integration, event ticketing
5
  Requires at least: 4.5
6
- Tested up to: 4.8.4
7
- Stable tag: 4.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -233,6 +233,24 @@ The plugin is produced by [Modern Tribe Inc](http://m.tri.be/18uc).
233
 
234
  == Changelog ==
235
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
236
  = [4.6] 2017-11-09 =
237
 
238
  * New - Fully redesigned ticket editor interface
3
  Contributors: ModernTribe, borkweb, aguseo, barry.hughes, bordoni, brianjessee, cliffpaulick, courane01, faction23, GeoffBel, geoffgraham, ggwicz, jbrinley, jentheo, leahkoerper, lucatume, mastromktg, MZAWeb, neillmcshea, nicosantos, patriciahillebrandt, peterchester, reid.peifer, roblagatta, ryancurban, shane.pearlman, tribecari, vicskf, zbtirrell
4
  Tags: RSVP, events, tickets, event management, calendar, ticket sales, community, registration, api, dates, date, posts, workshop, conference, meeting, seminar, concert, summit, ticket integration, event ticketing
5
  Requires at least: 4.5
6
+ Tested up to: 4.9
7
+ Stable tag: 4.6.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
233
 
234
  == Changelog ==
235
 
236
+ = [4.6.1] 2017-11-21 =
237
+
238
+ * Tweak - Prevents unnecessary AJAX requests when using tickets editor [88642]
239
+ * Tweak - Removes weird clearing of fields when canceling or saving Tickets [88642]
240
+ * Tweak - Allow saving of Ticket Editor contents when Updating the Event [91760]
241
+ * Tweak - Included more hooks via the new Template class for the Ticket Editor: `tribe_template_file`, `tribe_template_before_include`, `tribe_template_after_include` and `tribe_template_html` [91760]
242
+ * Tweak - Only display admin links in Community Tickets if user is able to access the admin [79565]
243
+ * Tweak - spacing of message to logged in users to view attendees [92550]
244
+ * Fix - RSVP and Tickets migration from pre-4.6 updates capacity corretly for all cases now (props to Uwe Matern) [93231]
245
+ * Fix - Attendees column for events display correctly the percentages now [92287]
246
+ * Fix - Tickets Editor now has more support for Accessibility [80651]
247
+ * Tweak - Added filters: `tribe_ticket_filter_attendee_report_link`, `tribe_tickets_attendees_show_title`
248
+ * Tweak - Removed filters: `tribe_tickets_default_end_date`, `tribe_tickets_ajax_refresh_settings`, `tribe_tickets_can_update_ticket_price`, `tribe_tickets_disallow_update_ticket_price_message`, `tribe_events_tickets_metabox_edit_attendee`
249
+ * Tweak - Added actions: `tribe_tickets_save_post`
250
+ * Tweak - Removed actions: `tribe_events_tickets_pre_ticket_list`, `tribe_events_tickets_post_ticket_list`
251
+ * Tweak - Changed views: `tickets/email`, `tickets/orders-link`
252
+ * Language - 10 new strings added, 132 updated, 0 fuzzied, and 9 obsoleted
253
+
254
  = [4.6] 2017-11-09 =
255
 
256
  * New - Fully redesigned ticket editor interface
src/Tribe/Admin/Columns/Tickets.php CHANGED
@@ -89,83 +89,47 @@ class Tribe__Tickets__Admin__Columns__Tickets {
89
  * @return string The column HTML.
90
  */
91
  protected function render_tickets_entry( $post_id ) {
92
- $output = '—';
 
93
 
94
- $tickets = Tribe__Tickets__Tickets::get_all_event_tickets( $post_id );
95
- if ( empty( $tickets ) ) {
96
- return '';
97
  }
98
 
99
- $content = sprintf( '<div>%s</div>%s', $this->get_sold( $tickets ), $this->get_percentage_string( $post_id, $tickets ) );
100
- $attendees_link = tribe( 'tickets.handler' )->get_attendee_report_link( get_post( $post_id ) );
101
 
102
- return sprintf( '<a href="%s" target="_blank">%s</a>', $attendees_link, $content );
103
  }
104
 
105
  /**
106
- * Iterates over an array of tickets to fetch the sale total.
107
- *
108
- * @param Tribe__Tickets__Ticket_Object[] $tickets
109
  *
110
- * @return int The sale total.
111
- */
112
- protected function get_sold( $tickets ) {
113
- $sold = 0;
114
-
115
- /** @var Tribe__Tickets__Ticket_Object $ticket */
116
- foreach ( $tickets as $ticket ) {
117
- $sold += $ticket->qty_sold();
118
- }
119
-
120
- return $sold;
121
- }
122
-
123
- /**
124
- * Iterates over an array of tickets to render the percentage HTML.
125
  *
126
- * @param int $post_id The current post ID.
127
- * @param Tribe__Tickets__Ticket_Object[] $tickets
128
  *
129
  * @return string The percentage HTML or an empty string if one of the
130
  * post tickets has unlimited stock.
131
  */
132
- protected function get_percentage_string( $post_id, array $tickets = array() ) {
133
- $sold = 0;
134
- $stock = 0;
135
-
136
- $global_stock_enabled = get_post_meta( $post_id, Tribe__Tickets__Global_Stock::GLOBAL_STOCK_ENABLED, true ) == true;
137
- $global_stock = $global_stock_enabled ?
138
- get_post_meta( $post_id, Tribe__Tickets__Global_Stock::GLOBAL_STOCK_LEVEL, true )
139
- : false;
140
 
141
- /** @var Tribe__Tickets__Ticket_Object $ticket */
142
- foreach ( $tickets as $ticket ) {
143
- $remaining = $ticket->remaining();
144
-
145
- // not tracking stock
146
- if ( false === $remaining ) {
147
- // if event just one is not tracking stock bail
148
- return '';
149
- }
150
-
151
- $this_sold = $ticket->qty_sold();
152
- $this_stock = $global_stock !== false
153
- ? $global_stock
154
- : $ticket->stock() + $this_sold;
155
-
156
- // sanity check
157
- if ( $this_sold > $this_stock ) {
158
- $this_sold = $this_stock;
159
- }
160
-
161
- $sold += $this_sold;
162
- $stock += $this_stock;
163
  }
164
 
165
- $stock = $global_stock !== false ? $global_stock : $stock;
 
 
 
 
166
 
167
  // If there have been zero sales we need not do any further arithmetic
168
- if ( 0 === $sold ) {
169
  $percentage = 0;
170
  }
171
  // If $stock is zero (and items *have* been sold per the above conditional) we can assume 100%
@@ -174,9 +138,39 @@ class Tribe__Tickets__Admin__Columns__Tickets {
174
  }
175
  // In all other cases, calculate the actual percentage
176
  else {
177
- $percentage = round( $sold * 100 / $stock, 0 );
178
  }
179
 
180
  return ' <div><small>(' . $percentage . '%)</small></div>';
181
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  }
89
  * @return string The column HTML.
90
  */
91
  protected function render_tickets_entry( $post_id ) {
92
+ $post = get_post( $post_id );
93
+ $totals = tribe( 'tickets.handler' )->get_post_totals( $post );
94
 
95
+ // Bail with
96
+ if ( 0 === $totals['tickets'] ) {
97
+ return '&mdash;';
98
  }
99
 
100
+ $content = sprintf( '<div>%s</div>%s', $totals['sold'], $this->get_percentage_string( $post->ID ) );
101
+ $attendees_link = tribe( 'tickets.attendees' )->get_report_link( $post );
102
 
103
+ return sprintf( '<a href="%s" target="_blank" class="tribe-tickets-column-attendees-link">%s</a>', $attendees_link, $content );
104
  }
105
 
106
  /**
107
+ * Gets the HTML for the percentage string for Attendees Column
 
 
108
  *
109
+ * @since TBD Deprecated the Second Param
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  *
111
+ * @param int $post_id The current post ID.
112
+ * @param null $deprecated
113
  *
114
  * @return string The percentage HTML or an empty string if one of the
115
  * post tickets has unlimited stock.
116
  */
117
+ protected function get_percentage_string( $post_id, $deprecated = null ) {
118
+ $totals = tribe( 'tickets.handler' )->get_post_totals( $post_id );
 
 
 
 
 
 
119
 
120
+ // Bail early for unlimited
121
+ if ( $totals['has_unlimited'] ) {
122
+ return tribe_tickets_get_readable_amount( -1 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  }
124
 
125
+ $shared_capacity_obj = new Tribe__Tickets__Global_Stock( $post_id );
126
+ $global_stock_enabled = $shared_capacity_obj->is_enabled();
127
+ $global_stock = $shared_capacity_obj->get_stock_level();
128
+
129
+ $stock = $global_stock_enabled ? $global_stock : $totals['stock'];
130
 
131
  // If there have been zero sales we need not do any further arithmetic
132
+ if ( 0 === $totals['sold'] || 0 === $totals['capacity'] ) {
133
  $percentage = 0;
134
  }
135
  // If $stock is zero (and items *have* been sold per the above conditional) we can assume 100%
138
  }
139
  // In all other cases, calculate the actual percentage
140
  else {
141
+ $percentage = round( ( 100 / $totals['capacity'] ) * $totals['sold'], 0 );
142
  }
143
 
144
  return ' <div><small>(' . $percentage . '%)</small></div>';
145
  }
146
+
147
+ /************************
148
+ * *
149
+ * Deprecated Methods *
150
+ * *
151
+ ************************/
152
+ // @codingStandardsIgnoreStart
153
+
154
+ /**
155
+ * Iterates over an array of tickets to fetch the sale total.
156
+ *
157
+ * @deprecated TBD
158
+ *
159
+ * @param Tribe__Tickets__Ticket_Object[] $tickets
160
+ *
161
+ * @return int The sale total.
162
+ */
163
+ protected function get_sold( $tickets ) {
164
+ _deprecated_function( __METHOD__, 'TBD', 'tribe( "tickets.handler" )->get_ticket_totals()' );
165
+ $sold = 0;
166
+
167
+ /** @var Tribe__Tickets__Ticket_Object $ticket */
168
+ foreach ( $tickets as $ticket ) {
169
+ $sold += $ticket->qty_sold();
170
+ }
171
+
172
+ return $sold;
173
+ }
174
+ // @codingStandardsIgnoreEnd
175
+
176
  }
src/Tribe/Admin/Views.php CHANGED
@@ -1,6 +1,4 @@
1
  <?php
2
-
3
-
4
  /**
5
  * Class Tribe__Tickets__Admin__Views
6
  *
@@ -12,12 +10,31 @@
12
  *
13
  * @link https://make.wordpress.org/docs/plugin-developer-handbook/10-plugin-components/custom-list-table-columns/#views
14
  */
15
- class Tribe__Tickets__Admin__Views {
16
 
17
  /**
18
- * @var Tribe__Tickets__Admin__Views__Ticketed
 
 
19
  */
20
- protected $ticketed;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
 
22
  /**
23
  * Adds the view links on supported post types admin lists.
@@ -36,8 +53,4 @@ class Tribe__Tickets__Admin__Views {
36
 
37
  return true;
38
  }
39
-
40
- public function hook() {
41
- $this->add_view_links( (array) tribe_get_option( 'ticket-enabled-post-types', array() ) );
42
- }
43
  }
1
  <?php
 
 
2
  /**
3
  * Class Tribe__Tickets__Admin__Views
4
  *
10
  *
11
  * @link https://make.wordpress.org/docs/plugin-developer-handbook/10-plugin-components/custom-list-table-columns/#views
12
  */
13
+ class Tribe__Tickets__Admin__Views extends Tribe__Template {
14
 
15
  /**
16
+ * Building of the Class template configuration
17
+ *
18
+ * @since TBD
19
  */
20
+ public function __construct() {
21
+ $this->set_template_origin( Tribe__Tickets__Main::instance() );
22
+ $this->set_template_folder( 'src/admin-views' );
23
+
24
+ // Configures this templating class extract variables
25
+ $this->set_template_context_extract( true );
26
+ }
27
+
28
+ /**
29
+ * Hook the necessary Filters and Actions
30
+ *
31
+ * @since 4.6
32
+ *
33
+ * @return void
34
+ */
35
+ public function hook() {
36
+ $this->add_view_links( (array) tribe_get_option( 'ticket-enabled-post-types', array() ) );
37
+ }
38
 
39
  /**
40
  * Adds the view links on supported post types admin lists.
53
 
54
  return true;
55
  }
 
 
 
 
56
  }
src/Tribe/Assets.php CHANGED
@@ -50,17 +50,7 @@ class Tribe__Tickets__Assets {
50
  */
51
  $decimal = apply_filters( 'tribe_event_ticket_decimal_point', $decimal );
52
 
53
- /**
54
- * Filter Default Ticket Capacity Type
55
- *
56
- * @since 4.6
57
- *
58
- * @param string 'global'
59
- *
60
- * @return string (global,own,unlimited)
61
- *
62
- */
63
- $global_stock_mode = apply_filters( 'tribe_tickets_default_ticket_capacity_type', 'global' );
64
 
65
  tribe_assets(
66
  Tribe__Tickets__Main::instance(),
@@ -68,7 +58,7 @@ class Tribe__Tickets__Assets {
68
  array( 'event-tickets-admin-css', 'tickets.css', array( 'tribe-validation-style', 'tribe-jquery-timepicker-css' ) ),
69
  array( 'event-tickets-admin-refresh-css', 'tickets-refresh.css', array( 'event-tickets-admin-css', 'common' ) ),
70
  array( 'event-tickets-admin-tables-css', 'tickets-tables.css', array( 'event-tickets-admin-css' ) ),
71
- array( 'event-tickets-admin-tables-js', 'tickets-tables.js', array( 'underscore' ) ),
72
  array( 'event-tickets-attendees-list-js', 'attendees-list.js', array( 'jquery' ) ),
73
  array( 'event-tickets-admin-accordion-js', 'accordion.js', array() ),
74
  array( 'event-tickets-admin-accordion-css', 'accordion.css', array() ),
50
  */
51
  $decimal = apply_filters( 'tribe_event_ticket_decimal_point', $decimal );
52
 
53
+ $global_stock_mode = tribe( 'tickets.handler' )->get_default_capacity_mode();
 
 
 
 
 
 
 
 
 
 
54
 
55
  tribe_assets(
56
  Tribe__Tickets__Main::instance(),
58
  array( 'event-tickets-admin-css', 'tickets.css', array( 'tribe-validation-style', 'tribe-jquery-timepicker-css' ) ),
59
  array( 'event-tickets-admin-refresh-css', 'tickets-refresh.css', array( 'event-tickets-admin-css', 'common' ) ),
60
  array( 'event-tickets-admin-tables-css', 'tickets-tables.css', array( 'event-tickets-admin-css' ) ),
61
+ array( 'event-tickets-admin-tables-js', 'tickets-tables.js', array( 'underscore', 'jquery', 'tribe-common' ) ),
62
  array( 'event-tickets-attendees-list-js', 'attendees-list.js', array( 'jquery' ) ),
63
  array( 'event-tickets-admin-accordion-js', 'accordion.js', array() ),
64
  array( 'event-tickets-admin-accordion-css', 'accordion.css', array() ),
src/Tribe/Attendees.php ADDED
@@ -0,0 +1,720 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Handles most actions related to an Attendeees or Multiple ones
4
+ */
5
+ class Tribe__Tickets__Attendees {
6
+ /**
7
+ * Hook of the admin page for attendees
8
+ *
9
+ * @since TBD
10
+ *
11
+ * @var string
12
+ */
13
+ public $page_id;
14
+
15
+ /**
16
+ * WP_Post_List children for Attendees
17
+ *
18
+ * @since TBD
19
+ *
20
+ * @var Tribe__Tickets__Attendees_Table
21
+ */
22
+ public $attendees_table;
23
+
24
+ /**
25
+ * Hooks all the required actions and filters in WordPress
26
+ *
27
+ * @since TBD
28
+ *
29
+ * @return void
30
+ */
31
+ public function hook() {
32
+ add_action( 'admin_menu', array( $this, 'register_page' ) );
33
+
34
+ add_action( 'tribe_events_tickets_attendees_totals_top', array( $this, 'print_checkedin_totals' ), 0 );
35
+ add_action( 'tribe_tickets_attendees_event_details_list_top', array( $this, 'event_details_top' ), 20 );
36
+ add_action( 'tribe_tickets_plus_report_event_details_list_top', array( $this, 'event_details_top' ), 20 );
37
+
38
+ add_action( 'tribe_tickets_attendees_event_details_list_top', array( $this, 'event_action_links' ), 25 );
39
+ add_action( 'tribe_tickets_plus_report_event_details_list_top', array( $this, 'event_action_links' ), 25 );
40
+
41
+ add_filter( 'post_row_actions', array( $this, 'filter_admin_row_actions' ) );
42
+ add_filter( 'page_row_actions', array( $this, 'filter_admin_row_actions' ) );
43
+ }
44
+
45
+ /**
46
+ * Returns the Attendees Post Type Slug (mostly used for RSVP)
47
+ *
48
+ * @since TBD
49
+ *
50
+ * @return string
51
+ */
52
+ public function slug() {
53
+ return 'tickets-attendees';
54
+ }
55
+
56
+ /**
57
+ * Returns the current post being handled.
58
+ *
59
+ * @since TBD
60
+ *
61
+ * @return array|bool|null|WP_Post
62
+ */
63
+ public function get_post() {
64
+ return $this->attendees_table->event;
65
+ }
66
+
67
+ /**
68
+ * Injects event post type
69
+ *
70
+ * @since TBD
71
+ *
72
+ * @param int $event_id
73
+ */
74
+ public function event_details_top( $event_id ) {
75
+ $pto = get_post_type_object( get_post_type( $event_id ) );
76
+
77
+ echo '
78
+ <li class="post-type">
79
+ <strong>' . esc_html__( 'Post type', 'event-tickets' ) . ': </strong>
80
+ ' . esc_html( $pto->label ) . '
81
+ </li>
82
+ ';
83
+ }
84
+
85
+ /**
86
+ * Injects action links into the attendee screen.
87
+ *
88
+ * @since TBD
89
+ *
90
+ * @param $event_id
91
+ */
92
+ public function event_action_links( $event_id ) {
93
+ $action_links = array(
94
+ '<a href="' . esc_url( get_edit_post_link( $event_id ) ) . '" title="' . esc_attr_x( 'Edit', 'attendee event actions', 'event-tickets' ) . '">' . esc_html_x( 'Edit Event', 'attendee event actions', 'event-tickets' ) . '</a>',
95
+ '<a href="' . esc_url( get_permalink( $event_id ) ) . '" title="' . esc_attr_x( 'View', 'attendee event actions', 'event-tickets' ) . '">' . esc_html_x( 'View Event', 'attendee event actions', 'event-tickets' ) . '</a>',
96
+ );
97
+
98
+ /**
99
+ * Provides an opportunity to add and remove action links from the
100
+ * attendee screen summary box.
101
+ *
102
+ * @param array $action_links
103
+ */
104
+ $action_links = (array) apply_filters( 'tribe_tickets_attendees_event_action_links', $action_links );
105
+
106
+ if ( empty( $action_links ) ) {
107
+ return;
108
+ }
109
+
110
+ echo wp_kses_post( '<li class="event-actions">' . join( ' | ', $action_links ) . '</li>' );
111
+ }
112
+
113
+
114
+ /**
115
+ * Print Check In Totals at top of Column
116
+ *
117
+ * @since TBD
118
+ */
119
+ public function print_checkedin_totals() {
120
+ $total_checked_in = Tribe__Tickets__Main::instance()->attendance_totals()->get_total_checked_in();
121
+
122
+ echo '<div class="totals-header"><h3>' . esc_html_x( 'Checked in:', 'attendee summary', 'event-tickets' ) . '</h3> ' . absint( $total_checked_in ) . '</div>';
123
+ }
124
+
125
+ /**
126
+ * Returns the full URL to the attendees report page.
127
+ *
128
+ * @since TBD
129
+ *
130
+ * @param WP_Post $post
131
+ *
132
+ * @return string
133
+ */
134
+ public function get_report_link( $post ) {
135
+ $args = array(
136
+ 'post_type' => $post->post_type,
137
+ 'page' => $this->slug(),
138
+ 'event_id' => $post->ID,
139
+ );
140
+
141
+ $url = add_query_arg( $args, admin_url( 'edit.php' ) );
142
+
143
+ /**
144
+ * Filter the Attendee Report Url
145
+ *
146
+ * @since TDB
147
+ *
148
+ * @param string $url a url to attendee report
149
+ * @param int $post ->ID post id
150
+ */
151
+ $url = apply_filters( 'tribe_ticket_filter_attendee_report_link', $url, $post->ID );
152
+
153
+ return $url;
154
+ }
155
+
156
+ /**
157
+ * Adds the "attendees" link in the admin list row actions for each event.
158
+ *
159
+ * @param $actions
160
+ *
161
+ * @return array
162
+ */
163
+ public function filter_admin_row_actions( $actions ) {
164
+ global $post;
165
+
166
+ // Only proceed if we're viewing a tickets-enabled post type.
167
+ if ( ! in_array( $post->post_type, Tribe__Tickets__Main::instance()->post_types() ) ) {
168
+ return $actions;
169
+ }
170
+
171
+ $tickets = Tribe__Tickets__Tickets::get_event_tickets( $post->ID );
172
+
173
+ // Only proceed if there are tickets.
174
+ if ( empty( $tickets ) ) {
175
+ return $actions;
176
+ }
177
+
178
+ $url = $this->get_report_link( $post );
179
+
180
+ $actions['tickets_attendees'] = sprintf(
181
+ '<a title="%s" href="%s">%s</a>',
182
+ esc_html__( 'See who purchased tickets to this event', 'event-tickets' ),
183
+ esc_url( $url ),
184
+ esc_html__( 'Attendees', 'event-tickets' )
185
+ );
186
+
187
+ return $actions;
188
+ }
189
+
190
+ /**
191
+ * Registers the Attendees admin page
192
+ *
193
+ * @since TBD
194
+ */
195
+ public function register_page() {
196
+ $cap = 'edit_posts';
197
+ $event_id = absint( ! empty( $_GET['event_id'] ) && is_numeric( $_GET['event_id'] ) ? $_GET['event_id'] : 0 );
198
+
199
+ if ( ! current_user_can( 'edit_posts' ) && $event_id ) {
200
+ $event = get_post( $event_id );
201
+
202
+ if ( $event instanceof WP_Post && get_current_user_id() === (int) $event->post_author ) {
203
+ $cap = 'read';
204
+ }
205
+ }
206
+
207
+ $this->page_id = add_submenu_page(
208
+ null,
209
+ 'Attendee list',
210
+ 'Attendee list',
211
+ $cap,
212
+ $this->slug(),
213
+ array( $this, 'render' )
214
+ );
215
+
216
+ add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
217
+ add_action( 'admin_enqueue_scripts', array( $this, 'load_pointers' ) );
218
+ add_action( "load-{$this->page_id}", array( $this, 'screen_setup' ) );
219
+
220
+ /**
221
+ * This is a workaround to fix the problem
222
+ *
223
+ * @see https://central.tri.be/issues/46198
224
+ * @todo we need to remove this
225
+ */
226
+ add_action( 'admin_init', array( $this, 'screen_setup' ), 1 );
227
+ }
228
+
229
+ /**
230
+ * Enqueues the JS and CSS for the attendees page in the admin
231
+ *
232
+ * @since TBD
233
+ *
234
+ * @todo this needs to use tribe_assets()
235
+ *
236
+ * @param $hook
237
+ */
238
+ public function enqueue_assets( $hook ) {
239
+ /**
240
+ * Filter the Page Slugs the Attendees Page CSS and JS Loads
241
+ *
242
+ * @param array array( $this->page_id ) an array of admin slugs
243
+ */
244
+ if ( ! in_array( $hook, apply_filters( 'tribe_filter_attendee_page_slug', array( $this->page_id ) ) ) ) {
245
+ return;
246
+ }
247
+
248
+ $resources_url = plugins_url( 'src/resources', dirname( dirname( __FILE__ ) ) );
249
+
250
+ wp_enqueue_style( $this->slug(), $resources_url . '/css/tickets-attendees.css', array(), Tribe__Tickets__Main::instance()->css_version() );
251
+ wp_enqueue_style( $this->slug() . '-print', $resources_url . '/css/tickets-attendees-print.css', array(), Tribe__Tickets__Main::instance()->css_version(), 'print' );
252
+ wp_enqueue_script( $this->slug(), $resources_url . '/js/tickets-attendees.js', array( 'jquery' ), Tribe__Tickets__Main::instance()->js_version() );
253
+
254
+ add_thickbox();
255
+
256
+ $mail_data = array(
257
+ 'nonce' => wp_create_nonce( 'email-attendee-list' ),
258
+ 'required' => esc_html__( 'You need to select a user or type a valid email address', 'event-tickets' ),
259
+ 'sending' => esc_html__( 'Sending...', 'event-tickets' ),
260
+ 'checkin_nonce' => wp_create_nonce( 'checkin' ),
261
+ 'uncheckin_nonce' => wp_create_nonce( 'uncheckin' ),
262
+ 'cannot_move' => esc_html__( 'You must first select one or more tickets before you can move them!', 'event-tickets' ),
263
+ 'move_url' => add_query_arg( array(
264
+ 'dialog' => Tribe__Tickets__Main::instance()->move_tickets()->dialog_name(),
265
+ 'check' => wp_create_nonce( 'move_tickets' ),
266
+ 'TB_iframe' => 'true',
267
+ ) ),
268
+ );
269
+
270
+ wp_localize_script( $this->slug(), 'Attendees', $mail_data );
271
+ }
272
+
273
+ /**
274
+ * Loads the WP-Pointer for the Attendees screen
275
+ *
276
+ * @since TBD
277
+ *
278
+ * @param $hook
279
+ */
280
+ public function load_pointers( $hook ) {
281
+ if ( $hook != $this->page_id ) {
282
+ return;
283
+ }
284
+
285
+ $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
286
+ $pointer = null;
287
+
288
+ if ( version_compare( get_bloginfo( 'version' ), '3.3', '>' ) && ! in_array( 'attendees_filters', $dismissed ) ) {
289
+ $pointer = array(
290
+ 'pointer_id' => 'attendees_filters',
291
+ 'target' => '#screen-options-link-wrap',
292
+ 'options' => array(
293
+ 'content' => sprintf( '<h3> %s </h3> <p> %s </p>', esc_html__( 'Columns', 'event-tickets' ), esc_html__( 'You can use Screen Options to select which columns you want to see. The selection works in the table below, in the email, for print and for the CSV export.', 'event-tickets' ) ),
294
+ 'position' => array( 'edge' => 'top', 'align' => 'right' ),
295
+ ),
296
+ );
297
+ wp_enqueue_script( 'wp-pointer' );
298
+ wp_enqueue_style( 'wp-pointer' );
299
+ }
300
+
301
+ wp_localize_script( $this->slug(), 'AttendeesPointer', $pointer );
302
+ }
303
+
304
+ /**
305
+ * Sets up the Attendees screen data.
306
+ *
307
+ * @since TBD
308
+ */
309
+ public function screen_setup() {
310
+ /* There's no reason for attendee screen setup to happen twice, but because
311
+ * of a fix for bug #46198 it can indeed be called twice in the same request.
312
+ * This flag variable is used to workaround that.
313
+ *
314
+ * @see Tribe__Tickets__Tickets_Handler::attendees_page_register() (and related @todo inside that method)
315
+ * @see https://central.tri.be/issues/46198
316
+ *
317
+ * @todo remove the has_run check once the above workaround is dispensed with
318
+ */
319
+ static $has_run = false;
320
+
321
+ $page = tribe_get_request_var( 'page', false );
322
+ $action = tribe_get_request_var( 'action', false );
323
+
324
+ /// Prevents from running twice
325
+ if ( $has_run ) {
326
+ return;
327
+ }
328
+
329
+ // When on the admin and not on the correct page bail
330
+ if ( is_admin() && $this->slug() !== $page ) {
331
+ return;
332
+ }
333
+
334
+ $has_run = true;
335
+
336
+ /**
337
+ * This is a workaround to fix the problem
338
+ *
339
+ * @see https://central.tri.be/issues/46198
340
+ * @todo remove this
341
+ */
342
+ if ( current_filter() === 'admin_init' ) {
343
+ $this->enqueue_assets( $this->page_id );
344
+
345
+ $GLOBALS['current_screen'] = WP_Screen::get( $this->page_id );
346
+ }
347
+
348
+
349
+ if ( 'email' === $action ) {
350
+ define( 'IFRAME_REQUEST', true );
351
+
352
+ // Use iFrame Header -- WP Method
353
+ iframe_header();
354
+
355
+ // Check if we need to send an Email!
356
+ if ( isset( $_POST['tribe-send-email'] ) && $_POST['tribe-send-email'] ) {
357
+ $status = $this->send_mail_list();
358
+ } else {
359
+ $status = false;
360
+ }
361
+
362
+ tribe( 'tickets.admin.views' )->template( 'attendees-email' );
363
+
364
+ // Use iFrame Footer -- WP Method
365
+ iframe_footer();
366
+
367
+ // We need nothing else here
368
+ exit;
369
+ } else {
370
+ $this->attendees_table = new Tribe__Tickets__Attendees_Table();
371
+
372
+ $this->maybe_generate_csv();
373
+
374
+ add_filter( 'admin_title', array( $this, 'filter_admin_title' ), 10, 2 );
375
+ add_filter( 'admin_body_class', array( $this, 'filter_admin_body_class' ) );
376
+ }
377
+ }
378
+
379
+ /**
380
+ * Add admin body class
381
+ *
382
+ * @since TBD
383
+ */
384
+ public function filter_admin_body_class( $body_classes ) {
385
+ return $body_classes . ' plugins-php';
386
+ }
387
+
388
+ /**
389
+ * Sets the browser title for the Attendees admin page.
390
+ * Uses the event title.
391
+ *
392
+ * @since TBD
393
+ *
394
+ * @param $admin_title
395
+ * @param $unused_title
396
+ *
397
+ * @return string
398
+ */
399
+ public function filter_admin_title( $admin_title, $unused_title ) {
400
+ if ( ! empty( $_GET['event_id'] ) ) {
401
+ $event = get_post( $_GET['event_id'] );
402
+ $admin_title = sprintf( '%s - Attendee list', $event->post_title );
403
+ }
404
+
405
+ return $admin_title;
406
+ }
407
+
408
+ /**
409
+ * Renders the Attendees page
410
+ *
411
+ * @since TBD
412
+ */
413
+ public function render() {
414
+ /**
415
+ * Fires immediately before the content of the attendees screen
416
+ * is rendered.
417
+ *
418
+ * @param $this Tribe__Tickets__Tickets_Handler The current ticket handler instance.
419
+ */
420
+ do_action( 'tribe_tickets_attendees_page_inside', $this );
421
+
422
+ tribe( 'tickets.admin.views' )->template( 'attendees' );
423
+ }
424
+
425
+ /**
426
+ * Generates a list of attendees taking into account the Screen Options.
427
+ * It's used both for the Email functionality, as for the CSV export.
428
+ *
429
+ * @since TBD
430
+ *
431
+ * @param $event_id
432
+ *
433
+ * @return array
434
+ */
435
+ private function generate_filtered_list( $event_id ) {
436
+ /**
437
+ * Fire immediately prior to the generation of a filtered (exportable) attendee list.
438
+ *
439
+ * @param int $event_id
440
+ */
441
+ do_action( 'tribe_events_tickets_generate_filtered_attendees_list', $event_id );
442
+
443
+ if ( empty( $this->page_id ) ) {
444
+ $this->page_id = 'tribe_events_page_tickets-attendees';
445
+ }
446
+
447
+ //Add in Columns or get_column_headers() returns nothing
448
+ $filter_name = "manage_{$this->page_id}_columns";
449
+ add_filter( $filter_name, array( $this->page_id, 'get_columns' ), 15 );
450
+
451
+ $items = Tribe__Tickets__Tickets::get_event_attendees( $event_id );
452
+
453
+ //Add Handler for Community Tickets to Prevent Notices in Exports
454
+ if ( ! is_admin() ) {
455
+ $columns = apply_filters( $filter_name, array() );
456
+ } else {
457
+ $columns = array_map( 'wp_strip_all_tags', get_column_headers( get_current_screen() ) );
458
+ }
459
+
460
+ // We dont want HTML inputs, private data or other columns that are superfluous in a CSV export
461
+ $hidden = array_merge( get_hidden_columns( $this->page_id ), array(
462
+ 'cb',
463
+ 'meta_details',
464
+ 'provider',
465
+ 'purchaser',
466
+ 'status',
467
+ ) );
468
+
469
+ $hidden = array_flip( $hidden );
470
+ $export_columns = array_diff_key( $columns, $hidden );
471
+
472
+ // Add additional expected columns
473
+ $export_columns['order_id'] = esc_html_x( 'Order ID', 'attendee export', 'event-tickets' );
474
+ $export_columns['order_status_label'] = esc_html_x( 'Order Status', 'attendee export', 'event-tickets' );
475
+ $export_columns['attendee_id'] = esc_html_x( 'Ticket #', 'attendee export', 'event-tickets' );
476
+ $export_columns['purchaser_name'] = esc_html_x( 'Customer Name', 'attendee export', 'event-tickets' );
477
+ $export_columns['purchaser_email'] = esc_html_x( 'Customer Email Address', 'attendee export', 'event-tickets' );
478
+
479
+ /**
480
+ * Used to modify what columns should be shown on the CSV export
481
+ * The column name should be the Array Index and the Header is the array Value
482
+ *
483
+ * @param array Columns, associative array
484
+ * @param array Items to be exported
485
+ * @param int Event ID
486
+ */
487
+ $export_columns = apply_filters( 'tribe_events_tickets_attendees_csv_export_columns', $export_columns, $items, $event_id );
488
+
489
+ // Add the export column headers as the first row
490
+ $rows = array(
491
+ array_values( $export_columns ),
492
+ );
493
+
494
+ foreach ( $items as $single_item ) {
495
+ // Fresh row!
496
+ $row = array();
497
+
498
+ foreach ( $export_columns as $column_id => $column_name ) {
499
+ // If additional columns have been added to the attendee list table we can obtain the
500
+ // values by calling the table object's column_default() method - any other values
501
+ // should simply be passed back unmodified
502
+ $row[ $column_id ] = $this->attendees_table->column_default( $single_item, $column_id );
503
+
504
+ // Special handling for the check_in column
505
+ if ( 'check_in' === $column_id && 1 == $single_item[ $column_id ] ) {
506
+ $row[ $column_id ] = esc_html__( 'Yes', 'event-tickets' );
507
+ }
508
+
509
+ // Special handling for new human readable id
510
+ if ( 'attendee_id' === $column_id ) {
511
+ if ( isset( $single_item[ $column_id ] ) ) {
512
+ $ticket_unique_id = get_post_meta( $single_item[ $column_id ], '_unique_id', true );
513
+ $ticket_unique_id = $ticket_unique_id === '' ? $single_item[ $column_id ] : $ticket_unique_id;
514
+ $row[ $column_id ] = esc_html( $ticket_unique_id );
515
+ }
516
+ }
517
+
518
+ // Handle custom columns that might have names containing HTML tags
519
+ $row[ $column_id ] = wp_strip_all_tags( $row[ $column_id ] );
520
+ // Remove line breaks (e.g. from multi-line text field) for valid CSV format. Double quotes necessary here.
521
+ $row[ $column_id ] = str_replace( array( "\r", "\n" ), ' ', $row[ $column_id ] );
522
+ }
523
+
524
+ $rows[] = array_values( $row );
525
+ }
526
+
527
+ return array_filter( $rows );
528
+ }
529
+
530
+ /**
531
+ * Checks if the user requested a CSV export from the attendees list.
532
+ * If so, generates the download and finishes the execution.
533
+ *
534
+ * @since TBD
535
+ *
536
+ */
537
+ public function maybe_generate_csv() {
538
+ if ( empty( $_GET['attendees_csv'] ) || empty( $_GET['attendees_csv_nonce'] ) || empty( $_GET['event_id'] ) ) {
539
+ return;
540
+ }
541
+
542
+ if ( ! wp_verify_nonce( $_GET['attendees_csv_nonce'], 'attendees_csv_nonce' ) || ! $this->user_can( 'edit_posts', $_GET['event_id'] ) ) {
543
+ return;
544
+ }
545
+
546
+ /**
547
+ * Allow for filtering and modifying the list of attendees that will be exported via CSV for a given event.
548
+ *
549
+ * @param array $items The array of attendees that will be exported in this CSV file.
550
+ * @param int $event_id The ID of the event these attendees are associated with.
551
+ */
552
+ $items = apply_filters( 'tribe_events_tickets_attendees_csv_items', $this->generate_filtered_list( $_GET['event_id'] ), $_GET['event_id'] );
553
+ $event = get_post( $_GET['event_id'] );
554
+
555
+ if ( ! empty( $items ) ) {
556
+ $charset = get_option( 'blog_charset' );
557
+ $filename = sanitize_file_name( $event->post_title . '-' . __( 'attendees', 'event-tickets' ) );
558
+
559
+ // output headers so that the file is downloaded rather than displayed
560
+ header( "Content-Type: text/csv; charset=$charset" );
561
+ header( "Content-Disposition: attachment; filename=$filename.csv" );
562
+
563
+ // create a file pointer connected to the output stream
564
+ $output = fopen( 'php://output', 'w' );
565
+
566
+ //And echo the data
567
+ foreach ( $items as $item ) {
568
+ fputcsv( $output, $item );
569
+ }
570
+
571
+ fclose( $output );
572
+ exit;
573
+ }
574
+ }
575
+
576
+ /**
577
+ * Handles the "send to email" action for the attendees list.
578
+ *
579
+ * @since TBD
580
+ *
581
+ */
582
+ public function send_mail_list() {
583
+ $error = new WP_Error();
584
+
585
+ if ( empty( $_GET['event_id'] ) ) {
586
+ $error->add( 'no-event-id', esc_html__( 'Invalid Event ID', 'event-tickets' ), array( 'type' => 'general' ) );
587
+
588
+ return $error;
589
+ }
590
+
591
+ $cap = 'edit_posts';
592
+ $event_id = absint( ! empty( $_GET['event_id'] ) && is_numeric( $_GET['event_id'] ) ? $_GET['event_id'] : 0 );
593
+
594
+ if ( ! current_user_can( 'edit_posts' ) && $event_id ) {
595
+ $event = get_post( $event_id );
596
+
597
+ if ( $event instanceof WP_Post && get_current_user_id() === (int) $event->post_author ) {
598
+ $cap = 'read';
599
+ }
600
+ }
601
+
602
+ if ( empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'email-attendees-list' ) || ! $this->user_can( $cap, $_GET['event_id'] ) ) {
603
+ $error->add( 'nonce-fail', esc_html__( 'Cheatin Huh?', 'event-tickets' ), array( 'type' => 'general' ) );
604
+
605
+ return $error;
606
+ }
607
+
608
+ if ( empty( $_POST['email_to_address'] ) && ( empty( $_POST['email_to_user'] ) || 0 >= (int) $_POST['email_to_user'] ) ) {
609
+ $error->add( 'empty-fields', esc_html__( 'Empty user and email', 'event-tickets' ), array( 'type' => 'general' ) );
610
+
611
+ return $error;
612
+ }
613
+
614
+ if ( ! empty( $_POST['email_to_address'] ) ) {
615
+ $type = 'email';
616
+ } else {
617
+ $type = 'user';
618
+ }
619
+
620
+ if ( 'email' === $type && ! is_email( $_POST['email_to_address'] ) ) {
621
+ $error->add( 'invalid-email', esc_html__( 'Invalid Email', 'event-tickets' ), array( 'type' => $type ) );
622
+
623
+ return $error;
624
+ }
625
+
626
+ if ( 'user' === $type && ! is_numeric( $_POST['email_to_user'] ) ) {
627
+ $error->add( 'invalid-user', esc_html__( 'Invalid User ID', 'event-tickets' ), array( 'type' => $type ) );
628
+
629
+ return $error;
630
+ }
631
+
632
+ /**
633
+ * Now we know we have valid data
634
+ */
635
+
636
+ if ( 'email' === $type ) {
637
+ // We already check this variable so, no harm here
638
+ $email = $_POST['email_to_address'];
639
+ } else {
640
+ $user = get_user_by( 'id', $_POST['email_to_user'] );
641
+
642
+ if ( ! is_object( $user ) ) {
643
+ $error->add( 'invalid-user', esc_html__( 'Invalid User ID', 'event-tickets' ), array( 'type' => $type ) );
644
+
645
+ return $error;
646
+ }
647
+
648
+ $email = $user->data->user_email;
649
+ }
650
+
651
+ $this->attendees_table = new Tribe__Tickets__Attendees_Table();
652
+
653
+ $items = $this->generate_filtered_list( $_GET['event_id'] );
654
+
655
+ $event = get_post( $_GET['event_id'] );
656
+
657
+ ob_start();
658
+ $attendee_tpl = Tribe__Tickets__Templates::get_template_hierarchy( 'tickets/attendees-email.php', array( 'disable_view_check' => true ) );
659
+ include $attendee_tpl;
660
+ $content = ob_get_clean();
661
+
662
+ add_filter( 'wp_mail_content_type', array( $this, 'set_contenttype' ) );
663
+
664
+ if ( ! wp_mail( $email, sprintf( esc_html__( 'Attendee List for: %s', 'event-tickets' ), $event->post_title ), $content ) ) {
665
+ $error->add( 'email-error', esc_html__( 'Error when sending the email', 'event-tickets' ), array( 'type' => 'general' ) );
666
+
667
+ return $error;
668
+ }
669
+
670
+ remove_filter( 'wp_mail_content_type', array( $this, 'set_contenttype' ) );
671
+
672
+ return esc_html__( 'Email sent successfully!', 'event-tickets' );
673
+ }
674
+
675
+ /**
676
+ * Sets the content type for the attendees to email functionality.
677
+ * Allows for sending an HTML email.
678
+ *
679
+ * @since TBD
680
+ *
681
+ * @param $content_type
682
+ *
683
+ * @return string
684
+ */
685
+ public function set_contenttype( $content_type ) {
686
+ return 'text/html';
687
+ }
688
+
689
+ /**
690
+ * Tests if the user has the specified capability in relation to whatever post type
691
+ * the ticket relates to.
692
+ *
693
+ * For example, if tickets are created for the banana post type, the generic capability
694
+ * "edit_posts" will be mapped to "edit_bananas" or whatever is appropriate.
695
+ *
696
+ * @since TBD
697
+ *
698
+ * @internal for internal plugin use only (in spite of having public visibility)
699
+ *
700
+ * @param string $generic_cap
701
+ * @param int $event_id
702
+ * @return boolean
703
+ */
704
+ public function user_can( $generic_cap, $event_id ) {
705
+ $type = get_post_type( $event_id );
706
+
707
+ // It's possible we'll get null back
708
+ if ( null === $type ) {
709
+ return false;
710
+ }
711
+
712
+ $type_config = get_post_type_object( $type );
713
+
714
+ if ( ! empty( $type_config->cap->{$generic_cap} ) ) {
715
+ return current_user_can( $type_config->cap->{$generic_cap} );
716
+ }
717
+
718
+ return false;
719
+ }
720
+ }
src/Tribe/Main.php CHANGED
@@ -4,7 +4,7 @@ class Tribe__Tickets__Main {
4
  /**
5
  * Current version of this plugin
6
  */
7
- const VERSION = '4.6';
8
 
9
  /**
10
  * Min required The Events Calendar version
@@ -14,7 +14,7 @@ class Tribe__Tickets__Main {
14
  /**
15
  * Min required version of Tribe Common
16
  */
17
- const MIN_COMMON_VERSION = '4.7';
18
 
19
  /**
20
  * Name of the provider
@@ -322,7 +322,6 @@ class Tribe__Tickets__Main {
322
  */
323
  public function hooks() {
324
  add_action( 'init', array( $this, 'init' ) );
325
- add_action( 'add_meta_boxes', array( 'Tribe__Tickets__Metabox', 'maybe_add_meta_box' ) );
326
  add_filter( 'tribe_post_types', array( $this, 'inject_post_types' ) );
327
 
328
  // Setup Help Tab texting
4
  /**
5
  * Current version of this plugin
6
  */
7
+ const VERSION = '4.6.1';
8
 
9
  /**
10
  * Min required The Events Calendar version
14
  /**
15
  * Min required version of Tribe Common
16
  */
17
+ const MIN_COMMON_VERSION = '4.7.2';
18
 
19
  /**
20
  * Name of the provider
322
  */
323
  public function hooks() {
324
  add_action( 'init', array( $this, 'init' ) );
 
325
  add_filter( 'tribe_post_types', array( $this, 'inject_post_types' ) );
326
 
327
  // Setup Help Tab texting
src/Tribe/Metabox.php CHANGED
@@ -10,13 +10,35 @@
10
  class Tribe__Tickets__Metabox {
11
 
12
  /**
13
- * Registers the tickets metabox if there's at least
14
- * one Tribe Tickets module (provider) enabled
15
- * @static
16
  *
17
- * @param $post_type
18
  */
19
- public static function maybe_add_meta_box( $post_type ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  $modules = Tribe__Tickets__Tickets::modules();
21
  if ( empty( $modules ) ) {
22
  return;
@@ -29,45 +51,489 @@ class Tribe__Tickets__Metabox {
29
  add_meta_box(
30
  'tribetickets',
31
  esc_html__( 'Tickets', 'event-tickets' ),
32
- array(
33
- 'Tribe__Tickets__Metabox',
34
- 'do_modules_metaboxes',
35
- ),
36
  $post_type,
37
  'normal',
38
  'high'
39
  );
 
 
 
40
  }
41
 
42
  /**
43
- * Loads the content of the tickets metabox if there's at
44
- * least one Tribe Tickets module (provider) enabled
45
- * @static
46
  *
47
- * @param $post_id
 
 
 
 
48
  */
49
- public static function do_modules_metaboxes( $post_id ) {
50
  $modules = Tribe__Tickets__Tickets::modules();
51
  if ( empty( $modules ) ) {
52
- return;
53
  }
54
 
55
- add_thickbox();
56
- tribe( 'tickets.handler' )->do_meta_box( $post_id );
 
 
 
 
 
 
 
 
 
 
 
57
  }
58
 
59
  /**
60
- * Enqueue the tickets metabox JS and CSS
61
  *
62
- * @deprecated 4.6
63
  *
64
- * @param $unused_hook
65
  */
66
- public static function add_admin_scripts( $unused_hook ) {
67
- _deprecated_function( __METHOD__, '4.6', 'Tribe__Tickets__Assets::admin_enqueue_scripts' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  }
69
 
70
- // leaving this alone for now as Community Tickets uses it
 
 
 
 
 
 
71
  public static function localize_decimal_character() {
72
  $locale = localeconv();
73
  $decimal = isset( $locale['decimal_point'] ) ? $locale['decimal_point'] : '.';
@@ -82,4 +548,70 @@ class Tribe__Tickets__Metabox {
82
  'decimal_error' => __( 'Please enter in without thousand separators and currency symbols.', 'event-tickets' ),
83
  ) );
84
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  }
10
  class Tribe__Tickets__Metabox {
11
 
12
  /**
13
+ * Configure all action and filters user by this Class
 
 
14
  *
15
+ * @return void
16
  */
17
+ public function hook() {
18
+ add_action( 'add_meta_boxes', array( $this, 'configure' ) );
19
+
20
+ add_action( 'tribe_events_tickets_bottom_right', array( $this, 'get_ticket_controls' ), 10, 2 );
21
+
22
+ add_action( 'wp_ajax_tribe-ticket-panels', array( $this, 'ajax_panels' ) );
23
+
24
+ add_action( 'wp_ajax_tribe-ticket-add', array( $this, 'ajax_ticket_add' ) );
25
+ add_action( 'wp_ajax_tribe-ticket-edit', array( $this, 'ajax_ticket_edit' ) );
26
+ add_action( 'wp_ajax_tribe-ticket-delete', array( $this, 'ajax_ticket_delete' ) );
27
+
28
+ add_action( 'wp_ajax_tribe-ticket-checkin', array( $this, 'ajax_attendee_checkin' ) );
29
+ add_action( 'wp_ajax_tribe-ticket-uncheckin', array( $this, 'ajax_attendee_uncheckin' ) );
30
+ }
31
+
32
+ /**
33
+ * Configures the Tickets Editor into a Post Type
34
+ *
35
+ * @since TBD
36
+ *
37
+ * @param string $post_type Which post type we are trying to configure
38
+ *
39
+ * @return void
40
+ */
41
+ public function configure( $post_type = null ) {
42
  $modules = Tribe__Tickets__Tickets::modules();
43
  if ( empty( $modules ) ) {
44
  return;
51
  add_meta_box(
52
  'tribetickets',
53
  esc_html__( 'Tickets', 'event-tickets' ),
54
+ array( $this, 'render' ),
 
 
 
55
  $post_type,
56
  'normal',
57
  'high'
58
  );
59
+
60
+ // If we get here means that we will need Thickbox
61
+ add_thickbox();
62
  }
63
 
64
  /**
65
+ * Render the actual Metabox
 
 
66
  *
67
+ * @since TBD
68
+ *
69
+ * @param int $post_id Which post we are dealing with
70
+ *
71
+ * @return string|bool
72
  */
73
+ public function render( $post_id ) {
74
  $modules = Tribe__Tickets__Tickets::modules();
75
  if ( empty( $modules ) ) {
76
+ return false;
77
  }
78
 
79
+ $post = get_post( $post_id );
80
+
81
+ // Prepare all the variables required
82
+ $start_date = date( 'Y-m-d H:00:00' );
83
+ $end_date = date( 'Y-m-d H:00:00' );
84
+ $start_time = Tribe__Date_Utils::time_only( $start_date, false );
85
+ $end_time = Tribe__Date_Utils::time_only( $start_date, false );
86
+
87
+ $show_global_stock = Tribe__Tickets__Tickets::global_stock_available();
88
+ $tickets = Tribe__Tickets__Tickets::get_event_tickets( $post->ID );
89
+ $global_stock = new Tribe__Tickets__Global_Stock( $post->ID );
90
+
91
+ return tribe( 'tickets.admin.views' )->template( array( 'editor', 'metabox' ), get_defined_vars() );
92
  }
93
 
94
  /**
95
+ * Refreshes panels after ajax calls that change data
96
  *
97
+ * @since TBD
98
  *
99
+ * @return string html content of the panels
100
  */
101
+ public function ajax_panels() {
102
+ $post_id = absint( tribe_get_request_var( 'post_id', 0 ) );
103
+
104
+ // Didn't get a post id to work with - bail
105
+ if ( ! $post_id ) {
106
+ wp_send_json_error( esc_html__( 'Invalid Post ID', 'event-tickets' ) );
107
+ }
108
+
109
+ // Overwrites for a few templates that use get_the_ID() and get_post()
110
+ global $post;
111
+
112
+ $post = get_post( $post_id );
113
+ $data = wp_parse_args( tribe_get_request_var( array( 'data' ), array() ), array() );
114
+ $notice = tribe_get_request_var( 'tribe-notice', false );
115
+
116
+ $data = Tribe__Utils__Array::get( $data, array( 'tribe-tickets' ), null );
117
+
118
+ // Save if the info was passed
119
+ if ( ! empty( $data ) ) {
120
+ tribe( 'tickets.handler' )->save_order( $post->ID, isset( $data['list'] ) ? $data['list'] : null );
121
+ tribe( 'tickets.handler' )->save_form_settings( $post->ID, isset( $data['settings'] ) ? $data['settings'] : null );
122
+ }
123
+
124
+ $return = $this->get_panels( $post );
125
+ $return['notice'] = $this->notice( $notice );
126
+
127
+ /**
128
+ * Allows filtering the data by other plugins/ecommerce solutions©
129
+ *
130
+ * @since 4.6
131
+ *
132
+ * @param array the return data
133
+ * @param int the post/event id
134
+ */
135
+ $return = apply_filters( 'tribe_tickets_ajax_refresh_tables', $return, $post->ID );
136
+
137
+ wp_send_json_success( $return );
138
+ }
139
+
140
+ /**
141
+ * Get the Panels for a given
142
+ *
143
+ * @since TBD
144
+ *
145
+ * @param int|WP_Post $post
146
+ * @param int $ticket_id
147
+ *
148
+ * @return array
149
+ */
150
+ public function get_panels( $post, $ticket_id = null ) {
151
+ if ( ! $post instanceof WP_Post ) {
152
+ $post = get_post( $post );
153
+ }
154
+
155
+ // Bail on Invalid post
156
+ if ( ! $post instanceof WP_Post ) {
157
+ return array();
158
+ }
159
+
160
+ // Overwrites for a few templates that use get_the_ID() and get_post()
161
+ $GLOBALS['post'] = $post;
162
+
163
+ // Let's create tickets list markup to return
164
+ $tickets = Tribe__Tickets__Tickets::get_event_tickets( $post->ID );
165
+
166
+ $panels = array(
167
+ 'list' => tribe( 'tickets.admin.views' )->template( 'editor/panel/list', array( 'post_id' => $post->ID, 'tickets' => $tickets ), false ),
168
+ 'settings' => tribe( 'tickets.admin.views' )->template( 'editor/panel/settings', array( 'post_id' => $post->ID ), false ),
169
+ 'ticket' => tribe( 'tickets.admin.views' )->template( 'editor/panel/ticket', array( 'post_id' => $post->ID, 'ticket_id' => $ticket_id ), false ),
170
+ );
171
+
172
+ return $panels;
173
+ }
174
+
175
+ /**
176
+ * Sanitizes the data for the new/edit ticket ajax call,
177
+ * and calls the child save_ticket function.
178
+ *
179
+ * @since TBD
180
+ */
181
+ public function ajax_ticket_add() {
182
+ $post_id = absint( tribe_get_request_var( 'post_id', 0 ) );
183
+
184
+ if ( ! $post_id ) {
185
+ wp_send_json_error( esc_html__( 'Invalid parent Post', 'event-tickets' ) );
186
+ }
187
+
188
+ /**
189
+ * This is needed because a provider can implement a dynamic set of fields.
190
+ * Each provider is responsible for sanitizing these values.
191
+ */
192
+ $data = wp_parse_args( tribe_get_request_var( array( 'data' ), array() ), array() );
193
+
194
+ if ( ! $this->has_permission( $post_id, $_POST, 'add_ticket_nonce' ) ) {
195
+ wp_send_json_error( esc_html__( 'Failed to Add the Ticket, Refresh the Page to try again.', 'event-tickets' ) );
196
+ }
197
+
198
+ if ( ! isset( $data['ticket_provider'] ) || ! $this->module_is_valid( $data['ticket_provider'] ) ) {
199
+ wp_send_json_error( esc_html__( 'Commerce Provider invalid', 'event-tickets' ) );
200
+ }
201
+
202
+ // Get the Provider
203
+ $module = call_user_func( array( $data['ticket_provider'], 'get_instance' ) );
204
+
205
+ // Do the actual adding
206
+ $ticket_id = $module->ticket_add( $post_id, $data );
207
+
208
+ // Successful?
209
+ if ( $ticket_id ) {
210
+ /**
211
+ * Fire action when a ticket has been added
212
+ *
213
+ * @param int $post_id ID of parent "event" post
214
+ */
215
+ do_action( 'tribe_tickets_ticket_added', $post_id );
216
+ } else {
217
+ wp_send_json_error( esc_html__( 'Failed to Add the Ticket', 'event-tickets' ) );
218
+ }
219
+
220
+ $return = $this->get_panels( $post_id );
221
+ $return['notice'] = $this->notice( 'ticket-add' );
222
+
223
+ /**
224
+ * Filters the return data for ticket add
225
+ *
226
+ * @param array $return Array of data to return to the ajax call
227
+ * @param int $post_id ID of parent "event" post
228
+ */
229
+ $return = apply_filters( 'event_tickets_ajax_ticket_add_data', $return, $post_id );
230
+
231
+ wp_send_json_success( $return );
232
+ }
233
+
234
+ /**
235
+ * Returns the data from a single ticket to populate
236
+ * the edit form.
237
+ *
238
+ * @since TBD
239
+ *
240
+ * @return array $return array of ticket data
241
+ */
242
+ public function ajax_ticket_edit() {
243
+ $post_id = absint( tribe_get_request_var( 'post_id', 0 ) );
244
+
245
+ if ( ! $post_id ) {
246
+ wp_send_json_error( esc_html__( 'Invalid parent Post', 'event-tickets' ) );
247
+ }
248
+
249
+ $ticket_id = absint( tribe_get_request_var( 'ticket_id', 0 ) );
250
+
251
+ if ( ! $ticket_id ) {
252
+ wp_send_json_error( esc_html__( 'Invalid Ticket', 'event-tickets' ) );
253
+ }
254
+
255
+ /**
256
+ * This is needed because a provider can implement a dynamic set of fields.
257
+ * Each provider is responsible for sanitizing these values.
258
+ */
259
+ $data = wp_parse_args( tribe_get_request_var( array( 'data' ), array() ), array() );
260
+
261
+ if ( ! $this->has_permission( $post_id, $_POST, 'edit_ticket_nonce' ) ) {
262
+ wp_send_json_error( esc_html__( 'Failed to Edit the Ticket, Refresh the Page to try again.', 'event-tickets' ) );
263
+ }
264
+
265
+ $provider = tribe_tickets_get_ticket_provider( $ticket_id );
266
+
267
+ if ( ! $provider ) {
268
+ wp_send_json_error( esc_html__( 'Commerce Module invalid', 'event-tickets' ) );
269
+ }
270
+
271
+ // Get the Ticket Object
272
+ $ticket = $provider->get_ticket( $post_id, $ticket_id );
273
+ $return = $this->get_panels( $post_id, $ticket_id );
274
+
275
+ /**
276
+ * Provides an opportunity for final adjustments to the data used to populate
277
+ * the edit-ticket form.
278
+ *
279
+ * @param array $return Data for the JSON response
280
+ * @param int $post_id Post ID
281
+ * @param int $ticket_id Ticket ID
282
+ */
283
+ $return = (array) apply_filters( 'tribe_events_tickets_ajax_ticket_edit', $return, $post_id, $ticket_id );
284
+
285
+ wp_send_json_success( $return );
286
+ }
287
+
288
+ /**
289
+ * Sanitizes the data for the delete ticket ajax call, and calls the child delete_ticket
290
+ * function.
291
+ *
292
+ * @since TBD
293
+ */
294
+ public function ajax_ticket_delete() {
295
+ $post_id = absint( tribe_get_request_var( 'post_id', 0 ) );
296
+
297
+ if ( ! $post_id ) {
298
+ wp_send_json_error( esc_html__( 'Invalid parent Post', 'event-tickets' ) );
299
+ }
300
+
301
+ $ticket_id = absint( tribe_get_request_var( 'ticket_id', 0 ) );
302
+
303
+ if ( ! $ticket_id ) {
304
+ wp_send_json_error( esc_html__( 'Invalid Ticket', 'event-tickets' ) );
305
+ }
306
+
307
+ if ( ! $this->has_permission( $post_id, $_POST, 'remove_ticket_nonce' ) ) {
308
+ wp_send_json_error( esc_html__( 'Failed to Delete the Ticket, Refresh the Page to try again.', 'event-tickets' ) );
309
+ }
310
+
311
+ $provider = tribe_tickets_get_ticket_provider( $ticket_id );
312
+
313
+ if ( ! $provider ) {
314
+ wp_send_json_error( esc_html__( 'Commerce Module invalid', 'event-tickets' ) );
315
+ }
316
+
317
+ // Pass the control to the child object
318
+ $return = $provider->delete_ticket( $post_id, $ticket_id );
319
+
320
+ // Successfully deleted?
321
+ if ( $return ) {
322
+ $return = $this->get_panels( $post_id );
323
+ $return['notice'] = $this->notice( 'ticket-delete' );
324
+
325
+ /**
326
+ * Fire action when a ticket has been deleted
327
+ *
328
+ * @param int $post_id ID of parent "event" post
329
+ */
330
+ do_action( 'tribe_tickets_ticket_deleted', $post_id );
331
+ }
332
+
333
+ wp_send_json_success( $return );
334
+ }
335
+ /**
336
+ * Handles the check-in ajax call, and calls the checkin method.
337
+ *
338
+ * @since TBD
339
+ *
340
+ * @todo use of 'order_id' in this method is misleading (we're working with the attendee id)
341
+ * we should consider revising in a back-compat minded way
342
+ */
343
+ public function ajax_attendee_checkin() {
344
+
345
+ if ( ! isset( $_POST['order_ID'] ) || intval( $_POST['order_ID'] ) == 0 ) {
346
+ wp_send_json_error( 'Bad post' );
347
+ }
348
+
349
+ $provider = $_POST['provider'];
350
+
351
+ if ( ! $this->module_is_valid( $provider ) ) {
352
+ wp_send_json_error( esc_html__( 'Commerce Module invalid', 'event-tickets' ) );
353
+ }
354
+
355
+ $provider = call_user_func( array( $provider, 'get_instance' ) );
356
+
357
+ if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'checkin' ) || ! $this->user_can( 'edit_posts', $_POST['order_ID'] ) ) {
358
+ wp_send_json_error( "Cheatin' huh?" );
359
+ }
360
+
361
+ $order_id = $_POST['order_ID'];
362
+
363
+ // Pass the control to the child object
364
+ $did_checkin = $provider->checkin( $order_id );
365
+
366
+ $provider->clear_attendees_cache( $did_checkin );
367
+
368
+ wp_send_json_success( $did_checkin );
369
+ }
370
+
371
+ /**
372
+ * Handles the check-in ajax call, and calls the uncheckin method.
373
+ *
374
+ * @since TBD
375
+ *
376
+ * @todo use of 'order_id' in this method is misleading (we're working with the attendee id)
377
+ * we should consider revising in a back-compat minded way
378
+ */
379
+ public function ajax_attendee_uncheckin() {
380
+
381
+ if ( ! isset( $_POST['order_ID'] ) || intval( $_POST['order_ID'] ) == 0 ) {
382
+ wp_send_json_error( 'Bad post' );
383
+ }
384
+
385
+ $provider = $_POST['provider'];
386
+
387
+ if ( ! $this->module_is_valid( $provider ) ) {
388
+ wp_send_json_error( esc_html__( 'Commerce Module invalid', 'event-tickets' ) );
389
+ }
390
+
391
+ $provider = call_user_func( array( $provider, 'get_instance' ) );
392
+
393
+ if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'uncheckin' ) || ! $this->user_can( 'edit_posts', $_POST['order_ID'] ) ) {
394
+ wp_send_json_error( "Cheatin' huh?" );
395
+ }
396
+
397
+ $order_id = $_POST['order_ID'];
398
+
399
+ // Pass the control to the child object
400
+ $did_uncheckin = $provider->uncheckin( $order_id );
401
+
402
+ $provider->clear_attendees_cache( $did_uncheckin );
403
+
404
+ wp_send_json_success( $did_uncheckin );
405
+ }
406
+
407
+ /**
408
+ * Get the controls (move, delete) as a string
409
+ *
410
+ * @since TBD
411
+ *
412
+ * @param array $post_id
413
+ * @param array $ticket_id
414
+ * @param boolean $echo
415
+ *
416
+ * @return string
417
+ */
418
+ public function get_ticket_controls( $post_id, $ticket_id = null, $echo = true ) {
419
+ $provider = tribe_tickets_get_ticket_provider( $ticket_id );
420
+
421
+ if ( ! $provider ) {
422
+ return false;
423
+ }
424
+
425
+ if ( ! $ticket_id ) {
426
+ return false;
427
+ }
428
+
429
+ $ticket = $provider->get_ticket( $post_id, $ticket_id );
430
+
431
+ if ( empty( $ticket ) ) {
432
+ return false;
433
+ }
434
+
435
+ $controls = array();
436
+
437
+ if ( tribe_is_truthy( tribe_get_request_var( 'is_admin', true ) ) ) {
438
+ $controls[] = $provider->get_ticket_move_link( $post_id, $ticket );
439
+ }
440
+ $controls[] = $provider->get_ticket_delete_link( $ticket );
441
+
442
+ $html = join( ' | ', $controls );
443
+
444
+ if ( $echo ) {
445
+ echo $html;
446
+ }
447
+
448
+ return $html;
449
+ }
450
+
451
+ /**
452
+ * test if the nonce is correct and the current user has the correct permissions
453
+ *
454
+ * @since TBD
455
+ *
456
+ * @param WP_Post $post
457
+ * @param array $data
458
+ * @param string $nonce_action
459
+ *
460
+ * @return boolean
461
+ */
462
+ public function has_permission( $post, $data, $nonce_action ) {
463
+ if ( ! $post instanceof WP_Post ) {
464
+ if ( ! is_numeric( $post ) ) {
465
+ return false;
466
+ }
467
+
468
+ $post = get_post( $post );
469
+ }
470
+
471
+ return ! empty( $data['nonce'] ) && wp_verify_nonce( $data['nonce'], $nonce_action ) && current_user_can( get_post_type_object( $post->post_type )->cap->edit_posts );
472
+ }
473
+
474
+ /**
475
+ * Tests if the user has the specified capability in relation to whatever post type
476
+ * the attendee object relates to.
477
+ *
478
+ * For example, if the attendee was generated for a ticket set up in relation to a
479
+ * post of the `banana` type, the generic capability "edit_posts" will be mapped to
480
+ * "edit_bananas" or whatever is appropriate.
481
+ *
482
+ * @internal for internal plugin use only (in spite of having public visibility)
483
+ *
484
+ * @since TBD
485
+ *
486
+ * @see tribe( 'tickets.attendees' )->user_can
487
+ *
488
+ * @param string $generic_cap
489
+ * @param int $attendee_id
490
+ *
491
+ * @return boolean
492
+ */
493
+ public function user_can( $generic_cap, $attendee_id ) {
494
+ $connections = tribe( 'tickets.handler' )->get_object_connections( $attendee_id );
495
+
496
+ if ( ! $connections->event ) {
497
+ return false;
498
+ }
499
+
500
+ return tribe( 'tickets.attendees' )->user_can( $generic_cap, $connections->event );
501
+ }
502
+
503
+
504
+ /**
505
+ * Returns whether a class name is a valid active module/provider.
506
+ *
507
+ * @since TBD
508
+ *
509
+ * @param string $module class name of module
510
+ *
511
+ * @return bool
512
+ */
513
+ public function module_is_valid( $module ) {
514
+ return array_key_exists( $module, Tribe__Tickets__Tickets::modules() );
515
+ }
516
+
517
+ /**
518
+ * Returns the markup for a notice in the admin
519
+ *
520
+ * @since TBD
521
+ *
522
+ * @param string $msg Text for the notice
523
+ *
524
+ * @return string Notice with markup
525
+ */
526
+ protected function notice( $msg ) {
527
+ return sprintf( '<div class="wrap"><div class="updated"><p>%s</p></div></div>', $msg );
528
  }
529
 
530
+ /**
531
+ * Decimal Character Asset Localization (used on Community Tickets)
532
+ *
533
+ * @todo We need to deprecate this
534
+ *
535
+ * @return void
536
+ */
537
  public static function localize_decimal_character() {
538
  $locale = localeconv();
539
  $decimal = isset( $locale['decimal_point'] ) ? $locale['decimal_point'] : '.';
548
  'decimal_error' => __( 'Please enter in without thousand separators and currency symbols.', 'event-tickets' ),
549
  ) );
550
  }
551
+
552
+
553
+ /************************
554
+ * *
555
+ * Deprecated Methods *
556
+ * *
557
+ ************************/
558
+ // @codingStandardsIgnoreStart
559
+
560
+ /**
561
+ * Refreshes panel settings after canceling saving
562
+ *
563
+ * @deprecated TBD
564
+ * @since 4.6
565
+ *
566
+ * @return string html content of the panel settings
567
+ */
568
+ public function ajax_refresh_settings() {
569
+
570
+ }
571
+
572
+ /**
573
+ * @deprecated TBD
574
+ *
575
+ * @return void
576
+ */
577
+ public function ajax_handler_save_settings() {
578
+
579
+ }
580
+
581
+ /**
582
+ * Registers the tickets metabox if there's at least
583
+ * one Tribe Tickets module (provider) enabled
584
+ *
585
+ * @deprecated TBD
586
+ *
587
+ * @param $post_type
588
+ */
589
+ public static function maybe_add_meta_box( $post_type ) {
590
+ tribe( 'tickets.metabox' )->configure( $post_type );
591
+ }
592
+
593
+ /**
594
+ * Loads the content of the tickets metabox if there's at
595
+ * least one Tribe Tickets module (provider) enabled
596
+ *
597
+ * @deprecated TBD
598
+ *
599
+ * @param $post_id
600
+ */
601
+ public static function do_modules_metaboxes( $post_id ) {
602
+ tribe( 'tickets.metabox' )->render( $post_id );
603
+ }
604
+
605
+ /**
606
+ * Enqueue the tickets metabox JS and CSS
607
+ *
608
+ * @deprecated 4.6
609
+ *
610
+ * @param $unused_hook
611
+ */
612
+ public static function add_admin_scripts( $unused_hook ) {
613
+ _deprecated_function( __METHOD__, '4.6', 'Tribe__Tickets__Assets::admin_enqueue_scripts' );
614
+ }
615
+
616
+ // @codingStandardsIgnoreEnd
617
  }
src/Tribe/RSVP.php CHANGED
@@ -598,7 +598,6 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
598
  */
599
  do_action( 'event_tickets_rsvp_tickets_generated_for_product', $product_id, $order_id, $qty );
600
 
601
-
602
  // After Adding the Values we Update the Transient
603
  Tribe__Post_Transient::instance()->delete( $post_id, Tribe__Tickets__Tickets::ATTENDEES_CACHE );
604
  }
@@ -664,8 +663,6 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
664
  * @param int $event_id
665
  */
666
  public function send_tickets_email( $order_id, $event_id = null ) {
667
-
668
-
669
  $all_attendees = $this->get_attendees_by_id( $order_id );
670
 
671
  $to_send = array();
@@ -975,7 +972,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
975
  delete_post_meta( $ticket->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_CAP );
976
  }
977
 
978
- update_post_meta( $ticket->ID, tribe( 'tickets.handler' )->key_capacity, $data['capacity'] );
979
 
980
  if ( ! empty( $raw_data['ticket_start_date'] ) ) {
981
  $start_date = Tribe__Date_Utils::maybe_format_from_datepicker( $raw_data['ticket_start_date'] );
@@ -1080,10 +1077,11 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1080
  $post_to_delete = get_post( $ticket_id );
1081
 
1082
  foreach ( (array) $attendees as $attendee ) {
1083
- if ( $attendee['product_id'] == $ticket_id ) {
1084
- update_post_meta( $attendee['attendee_id'], $this->deleted_product,
1085
- esc_html( $post_to_delete->post_title ) );
1086
  }
 
 
1087
  }
1088
 
1089
  // Try to kill the actual ticket/attendee post
@@ -1222,17 +1220,18 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1222
  $return->show_description = $return->show_description();
1223
 
1224
  $start_date = get_post_meta( $ticket_id, '_ticket_start_date', true );
1225
- $start_date_unix = strtotime( $start_date );
 
1226
  if ( ! empty( $start_date ) ) {
1227
- $return->start_date = date( 'Y-m-d', $start_date_unix );
1228
- $return->start_time = date( 'h:ia', $start_date_unix );
 
1229
  }
1230
 
1231
- $end_date = get_post_meta( $ticket_id, '_ticket_end_date', true );
1232
- $end_date_unix = strtotime( $end_date );
1233
  if ( ! empty( $end_date ) ) {
1234
- $return->end_date = date( 'Y-m-d', $end_date_unix );
1235
- $return->end_time = date( 'h:ia', $end_date_unix );
 
1236
  }
1237
 
1238
  $return->manage_stock( 'yes' === get_post_meta( $ticket_id, '_manage_stock', true ) );
@@ -1720,7 +1719,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1720
 
1721
  $args = array(
1722
  'post_type' => 'tribe_events',
1723
- 'page' => Tribe__Tickets__Tickets_Handler::$attendees_slug,
1724
  'event_id' => get_post_meta( $post_id, '_tribe_rsvp_event', true ),
1725
  );
1726
 
@@ -1754,7 +1753,7 @@ class Tribe__Tickets__RSVP extends Tribe__Tickets__Tickets {
1754
  $attendees_report_url = add_query_arg(
1755
  array(
1756
  'post_type' => $event->post_type,
1757
- 'page' => Tribe__Tickets__Tickets_Handler::$attendees_slug,
1758
  'event_id' => $event->ID,
1759
  ),
1760
  admin_url( 'edit.php' )
598
  */
599
  do_action( 'event_tickets_rsvp_tickets_generated_for_product', $product_id, $order_id, $qty );
600
 
 
601
  // After Adding the Values we Update the Transient
602
  Tribe__Post_Transient::instance()->delete( $post_id, Tribe__Tickets__Tickets::ATTENDEES_CACHE );
603
  }
663
  * @param int $event_id
664
  */
665
  public function send_tickets_email( $order_id, $event_id = null ) {
 
 
666
  $all_attendees = $this->get_attendees_by_id( $order_id );
667
 
668
  $to_send = array();
972
  delete_post_meta( $ticket->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_CAP );
973
  }
974
 
975
+ tribe_tickets_update_capacity( $ticket, $data['capacity'] );
976
 
977
  if ( ! empty( $raw_data['ticket_start_date'] ) ) {
978
  $start_date = Tribe__Date_Utils::maybe_format_from_datepicker( $raw_data['ticket_start_date'] );
1077
  $post_to_delete = get_post( $ticket_id );
1078
 
1079
  foreach ( (array) $attendees as $attendee ) {
1080
+ if ( (int) $attendee['product_id'] !== (int) $ticket_id ) {
1081
+ continue;
 
1082
  }
1083
+
1084
+ update_post_meta( $attendee['attendee_id'], $this->deleted_product, esc_html( $post_to_delete->post_title ) );
1085
  }
1086
 
1087
  // Try to kill the actual ticket/attendee post
1220
  $return->show_description = $return->show_description();
1221
 
1222
  $start_date = get_post_meta( $ticket_id, '_ticket_start_date', true );
1223
+ $end_date = get_post_meta( $ticket_id, '_ticket_end_date', true );
1224
+
1225
  if ( ! empty( $start_date ) ) {
1226
+ $start_date_unix = strtotime( $start_date );
1227
+ $return->start_date = Tribe__Date_Utils::date_only( $start_date_unix, true );
1228
+ $return->start_time = Tribe__Date_Utils::time_only( $start_date_unix );
1229
  }
1230
 
 
 
1231
  if ( ! empty( $end_date ) ) {
1232
+ $end_date_unix = strtotime( $end_date );
1233
+ $return->end_date = Tribe__Date_Utils::date_only( $end_date_unix, true );
1234
+ $return->end_time = Tribe__Date_Utils::time_only( $end_date_unix );
1235
  }
1236
 
1237
  $return->manage_stock( 'yes' === get_post_meta( $ticket_id, '_manage_stock', true ) );
1719
 
1720
  $args = array(
1721
  'post_type' => 'tribe_events',
1722
+ 'page' => tribe( 'tickets.attendees' )->slug(),
1723
  'event_id' => get_post_meta( $post_id, '_tribe_rsvp_event', true ),
1724
  );
1725
 
1753
  $attendees_report_url = add_query_arg(
1754
  array(
1755
  'post_type' => $event->post_type,
1756
+ 'page' => tribe( 'tickets.attendees' )->slug(),
1757
  'event_id' => $event->ID,
1758
  ),
1759
  admin_url( 'edit.php' )
src/Tribe/Service_Provider.php CHANGED
@@ -18,7 +18,9 @@ class Tribe__Tickets__Service_Provider extends tad_DI52_ServiceProvider {
18
  public function register() {
19
  $this->container->singleton( 'tickets.assets', new Tribe__Tickets__Assets() );
20
  $this->container->singleton( 'tickets.handler', 'Tribe__Tickets__Tickets_Handler' );
 
21
  $this->container->singleton( 'tickets.version', 'Tribe__Tickets__Version', array( 'hook' ) );
 
22
 
23
  // Caching
24
  $this->container->singleton( 'tickets.cache-central', 'Tribe__Tickets__Cache__Central', array( 'hook' ) );
@@ -48,7 +50,9 @@ class Tribe__Tickets__Service_Provider extends tad_DI52_ServiceProvider {
48
  protected function load() {
49
  tribe( 'tickets.query' );
50
  tribe( 'tickets.handler' );
 
51
  tribe( 'tickets.version' );
 
52
 
53
  if ( is_admin() ) {
54
  tribe( 'tickets.admin.views' );
18
  public function register() {
19
  $this->container->singleton( 'tickets.assets', new Tribe__Tickets__Assets() );
20
  $this->container->singleton( 'tickets.handler', 'Tribe__Tickets__Tickets_Handler' );
21
+ $this->container->singleton( 'tickets.attendees', 'Tribe__Tickets__Attendees', array( 'hook' ) );
22
  $this->container->singleton( 'tickets.version', 'Tribe__Tickets__Version', array( 'hook' ) );
23
+ $this->container->singleton( 'tickets.metabox', 'Tribe__Tickets__Metabox', array( 'hook' ) );
24
 
25
  // Caching
26
  $this->container->singleton( 'tickets.cache-central', 'Tribe__Tickets__Cache__Central', array( 'hook' ) );
50
  protected function load() {
51
  tribe( 'tickets.query' );
52
  tribe( 'tickets.handler' );
53
+ tribe( 'tickets.attendees' );
54
  tribe( 'tickets.version' );
55
+ tribe( 'tickets.metabox' );
56
 
57
  if ( is_admin() ) {
58
  tribe( 'tickets.admin.views' );
src/Tribe/Ticket_Object.php CHANGED
@@ -237,17 +237,6 @@ if ( ! class_exists( 'Tribe__Tickets__Ticket_Object' ) ) {
237
  $end_date = null;
238
  if ( ! empty( $this->end_date ) ) {
239
  $end_date = strtotime( $this->end_date );
240
- } else {
241
- $post_id = get_the_ID();
242
-
243
- /**
244
- * Set a default end date for tickets if the end date wasn't specified in the registration form
245
- *
246
- * @param $date End date for the tickets (defaults to tomorrow ... which means registrations will not end)
247
- * @param $post_id Post id for the post that tickets are attached to
248
- */
249
- $end_date = apply_filters( 'tribe_tickets_default_end_date', date( 'Y-m-d G:i', strtotime( '+1 day' ) ), $post_id );
250
- $end_date = strtotime( $end_date );
251
  }
252
 
253
  return $end_date;
237
  $end_date = null;
238
  if ( ! empty( $this->end_date ) ) {
239
  $end_date = strtotime( $this->end_date );
 
 
 
 
 
 
 
 
 
 
 
240
  }
241
 
242
  return $end_date;
src/Tribe/Tickets.php CHANGED
@@ -294,7 +294,6 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
294
  return $query->posts;
295
  }
296
 
297
-
298
  /**
299
  * Returns the html for the delete ticket link
300
  *
@@ -399,6 +398,7 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
399
  /**
400
  * Get the controls (move, delete) as a string and add to our ajax return
401
  *
 
402
  * @since 4.6
403
  *
404
  * @param array $return the ajax return data
@@ -669,26 +669,6 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
669
  * @since 4.6
670
  */
671
  add_action( 'tribe_events_tickets_metabox_edit_main', array( $this, 'do_metabox_capacity_options' ), 11, 2 );
672
- add_filter( 'tribe_events_tickets_ajax_ticket_edit', array( $this, 'ajax_ticket_edit_controls' ) );
673
- add_filter( 'wp_ajax_tribe-events-edit-global-capacity', array( $this, 'edit_global_capacity_level' ) );
674
- add_action( 'wp_ajax_tribe-ticket-refresh-panels', array( $this, 'ajax_refresh_panels' ) );
675
- add_action( 'wp_ajax_tribe-ticket-refresh-settings', array( $this, 'ajax_refresh_settings' ) );
676
-
677
- /**
678
- * @deprecated 4.5.7 `tribe_events_tickets_modules` should no longer be used and direct
679
- * calls to Tribe__Tickets__Tickets::modules() are now preferred
680
- *
681
- * @todo remove in 4.6. This only exists because version =<4.5.10 of TEC runs apply_filter()
682
- * instead of calling this method directly.
683
- */
684
- add_filter( 'tribe_events_tickets_modules', array( $this, 'modules' ) );
685
-
686
- // Admin AJAX actions for each provider
687
- add_action( 'wp_ajax_tribe-ticket-add-' . $this->class_name, array( $this, 'ajax_handler_ticket_add' ) );
688
- add_action( 'wp_ajax_tribe-ticket-delete-' . $this->class_name, array( $this, 'ajax_handler_ticket_delete' ) );
689
- add_action( 'wp_ajax_tribe-ticket-edit-' . $this->class_name, array( $this, 'ajax_handler_ticket_edit' ) );
690
- add_action( 'wp_ajax_tribe-ticket-checkin-' . $this->class_name, array( $this, 'ajax_handler_attendee_checkin' ) );
691
- add_action( 'wp_ajax_tribe-ticket-uncheckin-' . $this->class_name, array( $this, 'ajax_handler_attendee_uncheckin' ) );
692
 
693
  // Front end
694
  $ticket_form_hook = $this->get_ticket_form_hook();
@@ -705,481 +685,6 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
705
  add_filter( 'tribe_events_event_costs', array( $this, 'get_ticket_prices' ), 10, 2 );
706
  }
707
 
708
-
709
- /**
710
- * test if the nonce is correct and the current user has the correct permissions
711
- * @param WP_Post $post
712
- * @param array $data
713
- * @param string $nonce_action
714
- * @return boolean
715
- */
716
- public function has_permission( $post, $data, $nonce_action ) {
717
- if ( ! $post instanceof WP_Post ) {
718
- if ( ! is_numeric( $post ) ) {
719
- return false;
720
- }
721
-
722
- $post = get_post( $post );
723
- }
724
-
725
- return ! empty( $data['nonce'] ) && wp_verify_nonce( $data['nonce'], $nonce_action ) && current_user_can( get_post_type_object( $post->post_type )->cap->edit_posts );
726
- }
727
-
728
- /* AJAX Handlers */
729
-
730
- /**
731
- * Refreshes panels after ajax calls that change data
732
- *
733
- * @since 4.6
734
- *
735
- * @return string html content of the panels
736
- */
737
- public function ajax_refresh_panels() {
738
- // Didn't get a post id to work with - bail
739
- if ( empty( $_POST['post_ID'] ) ) {
740
- return;
741
- }
742
- $post_id = $_POST['post_ID'];
743
-
744
- // Saves the new order
745
- tribe( 'tickets.handler' )->save_order( $post_id, Tribe__Utils__Array::get( $_POST, array( 'tribe-tickets' ), null ) );
746
-
747
- // Let's create tickets list markup to return
748
- $tickets = $this->get_event_tickets( $post_id );
749
-
750
- $notice_type = ! empty( $_POST['notice'] ) ? $_POST['notice'] : '';
751
- $ticket_table = '';
752
-
753
- switch ( $notice_type ) {
754
- case 'settings' :
755
- $ticket_table .= $this->notice( esc_html__( 'Your settings have been saved.', 'event-tickets' ) );
756
- break;
757
- case 'ticket':
758
- $ticket_table .= $this->notice( esc_html__( 'Your ticket has been saved.', 'event-tickets' ) );
759
- break;
760
- case 'delete':
761
- $ticket_table .= $this->notice( esc_html__( 'Your ticket has been deleted.', 'event-tickets' ) );
762
- break;
763
- default:
764
- // Don't add a notice if we didn't get a notice type
765
- }
766
-
767
- $ticket_table .= tribe( 'tickets.handler' )->get_ticket_list_markup( $tickets );
768
-
769
- $return['ticket_table'] = $ticket_table;
770
-
771
- /**
772
- * Allows filtering the data by other plugins/ecommerce solutions©
773
- *
774
- * @since 4.6
775
- *
776
- * @param array the return data
777
- * @param int the post/event id
778
- */
779
- $return = apply_filters( 'tribe_tickets_ajax_refresh_tables', $return, $post_id );
780
-
781
- $this->ajax_ok( $return );
782
- }
783
-
784
- /**
785
- * Refreshes panel settings after canceling saving
786
- *
787
- * @since 4.6
788
- *
789
- * @return string html content of the panel settings
790
- */
791
- public function ajax_refresh_settings() {
792
- $return = array();
793
-
794
- // Didn't get a post id to work with - bail
795
- if ( empty( $_POST['post_ID'] ) ) {
796
- $this->ajax_error( __( 'No Post ID was provided.', 'event-tickets' ) );
797
- }
798
- $post_id = absint( $_POST['post_ID'] );
799
-
800
- $html = tribe( 'tickets.handler' )->get_settings_panel( $post_id );
801
-
802
- /**
803
- * Allows filtering the data by other plugins/ecommerce solutions
804
- *
805
- * @since 4.6
806
- *
807
- * @param array the return data
808
- * @param int the post/event id
809
- */
810
- $return['settings_panel'] = apply_filters( 'tribe_tickets_ajax_refresh_settings', $html, $post_id );
811
-
812
- $this->ajax_ok( $return );
813
- }
814
-
815
- /**
816
- * Sanitizes the data for the new/edit ticket ajax call,
817
- * and calls the child save_ticket function.
818
- */
819
- final public function ajax_handler_ticket_add() {
820
- if ( ! isset( $_POST['formdata'] ) || ! isset( $_POST['post_ID'] ) ) {
821
- $this->ajax_error( 'Bad post' );
822
- }
823
-
824
- /**
825
- * This is needed because a provider can implement a dynamic set of fields.
826
- * Each provider is responsible for sanitizing these values.
827
- */
828
- $data = wp_parse_args( $_POST['formdata'] );
829
-
830
- $post_id = $_POST['post_ID'];
831
-
832
- if ( ! $this->has_permission( $post_id, $_POST, 'add_ticket_nonce' ) ) {
833
- $this->ajax_error( "Cheatin' huh?" );
834
- }
835
-
836
- if ( ! isset( $data['ticket_provider'] ) || ! $this->module_is_valid( $data['ticket_provider'] ) ) {
837
- $this->ajax_error( 'Bad module' );
838
- }
839
-
840
- $ticket_id = $this->ticket_add( $post_id, $data );
841
-
842
- // Successful?
843
- if ( $ticket_id ) {
844
- /**
845
- * Fire action when a ticket has been added
846
- *
847
- * @param int $post_id ID of parent "event" post
848
- */
849
- do_action( 'tribe_tickets_ticket_added', $post_id );
850
- } else {
851
- $this->ajax_error( __( 'Failed to Add the Ticket', 'event-tickets' ) );
852
- }
853
-
854
- $ticket = $this->get_ticket( $post_id, $ticket_id );
855
-
856
- $data['ticket_stock'] = $ticket->stock();
857
- $data['ticket_capacity'] = $ticket->capacity();
858
-
859
- $return = array(
860
- 'data' => json_encode( (object) $data ),
861
- );
862
-
863
- /**
864
- * Filters the return data for ticket add
865
- *
866
- * @param array $return Array of data to return to the ajax call
867
- * @param int $post_id ID of parent "event" post
868
- */
869
- $return = apply_filters( 'event_tickets_ajax_ticket_add_data', $return, $post_id );
870
-
871
- $this->ajax_ok( $return );
872
- }
873
-
874
- /**
875
- * Creates a ticket object and calls the child save_ticket function
876
- *
877
- * @param int $post_id ID of parent "event" post
878
- * @param array $data Raw post data
879
- * @return boolean
880
- */
881
- final public function ticket_add( $post_id, $data ) {
882
- $ticket = new Tribe__Tickets__Ticket_Object();
883
- $ticket->ID = isset( $data['ticket_id'] ) ? absint( $data['ticket_id'] ) : null;
884
- $ticket->name = isset( $data['ticket_name'] ) ? esc_html( $data['ticket_name'] ) : null;
885
- $ticket->description = isset( $data['ticket_description'] ) ? esc_html( $data['ticket_description'] ) : null;
886
- $ticket->price = ! empty( $data['ticket_price'] ) ? filter_var( trim( $data['ticket_price'] ), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND ) : 0;
887
- $ticket->purchase_limit = isset( $data['ticket_purchase_limit'] ) ? absint( $data['ticket_purchase_limit'] ) : apply_filters( 'tribe_tickets_default_purchase_limit', 0, $ticket->ID );
888
- $ticket->show_description = isset( $data['ticket_show_description'] ) ? 'yes' : 'no';
889
- $ticket->provider_class = $this->class_name;
890
- $ticket->start_date = null;
891
- $ticket->end_date = null;
892
-
893
- tribe( 'tickets.handler' )->toggle_manual_update_flag( true );
894
-
895
- if ( ! empty( $ticket->price ) ) {
896
- // remove non-money characters
897
- $ticket->price = preg_replace( '/[^0-9\.\,]/Uis', '', $ticket->price );
898
- }
899
-
900
- if ( ! empty( $data['ticket_start_date'] ) ) {
901
- $start_datetime = Tribe__Date_Utils::maybe_format_from_datepicker( $data['ticket_start_date'] );
902
-
903
- if ( ! empty( $data['ticket_start_time'] ) ) {
904
- $start_datetime .= ' ' . $data['ticket_start_time'];
905
- }
906
-
907
- $ticket->start_date = date( Tribe__Date_Utils::DBDATETIMEFORMAT, strtotime( $start_datetime ) );
908
- }
909
-
910
- if ( ! empty( $data['ticket_end_date'] ) ) {
911
- $end_datetime = Tribe__Date_Utils::maybe_format_from_datepicker( $data['ticket_end_date'] );
912
-
913
- if ( ! empty( $data['ticket_end_time'] ) ) {
914
- $end_datetime .= ' ' . $data['ticket_end_time'];
915
- }
916
-
917
- $ticket->end_date = date( Tribe__Date_Utils::DBDATETIMEFORMAT, strtotime( $end_datetime ) );
918
- }
919
-
920
- /**
921
- * Fired once a ticket has been created and added to a post
922
- *
923
- * @param int $post_id ID of parent "event" post
924
- * @param Tribe__Tickets__Ticket_Object $ticket Ticket object
925
- * @param array $data Submitted post data
926
- */
927
- do_action( 'tribe_tickets_ticket_add', $post_id, $ticket, $data );
928
-
929
- // Pass the control to the child object
930
- $save_ticket = $this->save_ticket( $post_id, $ticket, $data );
931
-
932
- tribe( 'tickets.handler' )->toggle_manual_update_flag( false );
933
-
934
- $post = get_post( $post_id );
935
- if ( empty( $data['ticket_start_date'] ) ) {
936
- // 30 min
937
- $round = 30;
938
- if ( class_exists( 'Tribe__Events__Main' ) ) {
939
- $round = (int) tribe( 'tec.admin.event-meta-box' )->get_timepicker_step( 'start' );
940
- }
941
- // Convert to seconds
942
- $round *= MINUTE_IN_SECONDS;
943
-
944
- $date = strtotime( $post->post_date );
945
- $date = round( $date / $round ) * $round;
946
- $date = date( Tribe__Date_Utils::DBDATETIMEFORMAT, $date );
947
-
948
- update_post_meta( $ticket->ID, tribe( 'tickets.handler' )->key_start_date, $date );
949
- }
950
-
951
- if ( empty( $data['ticket_end_date'] ) && 'tribe_events' === $post->post_type ) {
952
- $event_end = get_post_meta( $post_id, '_EventEndDate', true );
953
- update_post_meta( $ticket->ID, tribe( 'tickets.handler' )->key_end_date, $event_end );
954
- }
955
-
956
- tribe( 'tickets.version' )->update( $ticket->ID );
957
-
958
- return $save_ticket;
959
- }
960
-
961
- /**
962
- * Handles the check-in ajax call, and calls the checkin method.
963
- *
964
- * @todo use of 'order_id' in this method is misleading (we're working with the attendee id)
965
- * we should consider revising in a back-compat minded way
966
- */
967
- final public function ajax_handler_attendee_checkin() {
968
-
969
- if ( ! isset( $_POST['order_ID'] ) || intval( $_POST['order_ID'] ) == 0 ) {
970
- $this->ajax_error( 'Bad post' );
971
- }
972
-
973
- if ( ! isset( $_POST['provider'] ) || ! $this->module_is_valid( $_POST['provider'] ) ) {
974
- $this->ajax_error( 'Bad module' );
975
- }
976
-
977
- if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'checkin' ) || ! $this->user_can( 'edit_posts', $_POST['order_ID'] ) ) {
978
- $this->ajax_error( "Cheatin' huh?" );
979
- }
980
-
981
- $order_id = $_POST['order_ID'];
982
-
983
- // Pass the control to the child object
984
- $did_checkin = $this->checkin( $order_id );
985
-
986
- $this->maybe_update_attendees_cache( $did_checkin );
987
-
988
- $this->ajax_ok( $did_checkin );
989
- }
990
-
991
- /**
992
- * Handles the check-in ajax call, and calls the uncheckin method.
993
- *
994
- * @TODO use of 'order_id' in this method is misleading (we're working with the attendee id)
995
- * we should consider revising in a back-compat minded way
996
- */
997
- final public function ajax_handler_attendee_uncheckin() {
998
-
999
- if ( ! isset( $_POST['order_ID'] ) || intval( $_POST['order_ID'] ) == 0 ) {
1000
- $this->ajax_error( 'Bad post' );
1001
- }
1002
-
1003
- if ( ! isset( $_POST['provider'] ) || ! $this->module_is_valid( $_POST['provider'] ) ) {
1004
- $this->ajax_error( 'Bad module' );
1005
- }
1006
-
1007
- if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'uncheckin' ) || ! $this->user_can( 'edit_posts', $_POST['order_ID'] ) ) {
1008
- $this->ajax_error( "Cheatin' huh?" );
1009
- }
1010
-
1011
- $order_id = $_POST['order_ID'];
1012
-
1013
- // Pass the control to the child object
1014
- $did_uncheckin = $this->uncheckin( $order_id );
1015
-
1016
- if ( class_exists( 'Tribe__Events__Main' ) ) {
1017
- $this->maybe_update_attendees_cache( $did_uncheckin );
1018
- }
1019
-
1020
- $this->ajax_ok( $did_uncheckin );
1021
- }
1022
-
1023
- /**
1024
- * Sanitizes the data for the delete ticket ajax call, and calls the child delete_ticket
1025
- * function.
1026
- *
1027
- * @TODO use of 'order_id' in this method is misleading (we're working with the attendee id)
1028
- * we should consider revising in a back-compat minded way
1029
- */
1030
- final public function ajax_handler_ticket_delete() {
1031
-
1032
- if ( ! isset( $_POST['post_ID'] ) ) {
1033
- $this->ajax_error( 'Bad post' );
1034
- }
1035
-
1036
- if ( ! isset( $_POST['ticket_id'] ) ) {
1037
- $this->ajax_error( 'Bad post' );
1038
- }
1039
-
1040
- $post_id = $_POST['post_ID'];
1041
-
1042
- if ( ! $this->has_permission( $post_id, $_POST, 'remove_ticket_nonce' ) ) {
1043
- $this->ajax_error( "Cheatin' huh?" );
1044
- }
1045
-
1046
- $ticket_id = $_POST['ticket_id'];
1047
-
1048
- // Pass the control to the child object
1049
- $return = $this->delete_ticket( $post_id, $ticket_id );
1050
-
1051
- // Successfully deleted?
1052
- if ( $return ) {
1053
- // Let's create a tickets list markup to return
1054
- $tickets = $this->get_event_tickets( $post_id );
1055
- $return = tribe( 'tickets.handler' )->get_ticket_list_markup( $tickets );
1056
-
1057
- $return = $this->notice( esc_html__( 'Your ticket has been deleted.', 'event-tickets' ) ) . $return;
1058
-
1059
- /**
1060
- * Fire action when a ticket has been deleted
1061
- *
1062
- * @param int $post_id ID of parent "event" post
1063
- */
1064
- do_action( 'tribe_tickets_ticket_deleted', $post_id );
1065
- }
1066
-
1067
- $this->ajax_ok( $return );
1068
- }
1069
-
1070
- /**
1071
- * Returns the data from a single ticket to populate
1072
- * the edit form.
1073
- *
1074
- * @return array $return array of ticket data
1075
- */
1076
- final public function ajax_handler_ticket_edit() {
1077
-
1078
- if ( ! isset( $_POST['post_ID'] ) ) {
1079
- $this->ajax_error( 'Bad post' );
1080
- }
1081
-
1082
- if ( ! isset( $_POST['ticket_id'] ) ) {
1083
- $this->ajax_error( 'Bad post' );
1084
- }
1085
-
1086
- $post_id = $_POST['post_ID'];
1087
-
1088
- if ( ! $this->has_permission( $post_id, $_POST, 'edit_ticket_nonce' ) ) {
1089
- $this->ajax_error( "Cheatin' huh?" );
1090
- }
1091
-
1092
- $ticket_id = $_POST['ticket_id'];
1093
- $ticket = $this->get_ticket( $post_id, $ticket_id );
1094
-
1095
- $return = get_object_vars( $ticket );
1096
- $return['post_id'] = $post_id;
1097
- /**
1098
- * Allow for the prevention of updating ticket price on update.
1099
- *
1100
- * @param boolean
1101
- * @param WP_Post
1102
- */
1103
- $can_update_price = apply_filters( 'tribe_tickets_can_update_ticket_price', true, $ticket );
1104
-
1105
- $return['can_update_price'] = $can_update_price;
1106
-
1107
- if ( ! $can_update_price ) {
1108
- /**
1109
- * Filter the no-update message that is displayed when updating the price is disallowed
1110
- *
1111
- * @param string
1112
- * @param WP_Post
1113
- */
1114
- $return['disallow_update_price_message'] = apply_filters( 'tribe_tickets_disallow_update_ticket_price_message', esc_html__( 'Editing the ticket price is currently disallowed.', 'event-tickets' ), $ticket );
1115
- }
1116
-
1117
- // Prevent HTML elements from being escaped
1118
- $return['name'] = html_entity_decode( $return['name'], ENT_QUOTES );
1119
- $return['name'] = htmlspecialchars_decode( $return['name'] );
1120
- $return['description'] = html_entity_decode( $return['description'], ENT_QUOTES );
1121
- $return['description'] = htmlspecialchars_decode( $return['description'] );
1122
-
1123
- ob_start();
1124
- /**
1125
- * Fired to allow for the insertion of extra form data in the ticket int admin form
1126
- *
1127
- * @param int $post_id ID of parent "event" post
1128
- * @param int $ticket_id ID of ticket post
1129
- */
1130
- do_action( 'tribe_events_tickets_metabox_edit_advanced', $post_id, $ticket_id );
1131
-
1132
- $extra = ob_get_contents();
1133
- ob_end_clean();
1134
-
1135
- $return['advanced_fields'] = $extra;
1136
-
1137
- $return['history'] = tribe( 'tickets.handler' )->get_history_content( $post_id, $ticket->ID );
1138
-
1139
- /**
1140
- * Allows for the insertion of the attendee meta fields into the ticket admin form
1141
- *
1142
- * @since 4.6
1143
- *
1144
- * @param int $post_id ID of parent "event" post
1145
- * @param int $ticket_id ID of ticket post
1146
- */
1147
- $return['attendee_fields'] = apply_filters( 'tribe_events_tickets_metabox_edit_attendee', $post_id, $ticket_id );
1148
-
1149
- $return['stock'] = $ticket->stock;
1150
- $return['capacity'] = $ticket->capacity;
1151
- $global_stock_mode = ( isset( $ticket ) ) ? $ticket->global_stock_mode() : '';
1152
- $return['global_stock_mode'] = $global_stock_mode;
1153
- $return['show_description'] = $ticket->show_description();
1154
-
1155
- if ( Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE === $global_stock_mode || Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE === $global_stock_mode ) {
1156
- $return['event_capacity'] = tribe_tickets_get_capacity( $post_id );
1157
- }
1158
-
1159
- /**
1160
- * Provides an opportunity for final adjustments to the data used to populate
1161
- * the edit-ticket form.
1162
- *
1163
- * @param array $return data returned to the client
1164
- * @param Tribe__Events__Tickets $ticket_object
1165
- */
1166
- $return = (array) apply_filters( 'tribe_events_tickets_ajax_ticket_edit', $return, $this );
1167
- $this->ajax_ok( $return );
1168
- }
1169
-
1170
- /**
1171
- * Returns the markup for a notice in the admin
1172
- *
1173
- * @param string $msg Text for the notice
1174
- * @return string Notice with markup
1175
- */
1176
- protected function notice( $msg ) {
1177
- return sprintf( '<div class="wrap"><div class="updated"><p>%s</p></div></div>', $msg );
1178
- }
1179
-
1180
-
1181
- // end AJAX Handlers
1182
-
1183
  // start Attendees
1184
 
1185
  /**
@@ -1355,16 +860,6 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
1355
  return false;
1356
  }
1357
 
1358
- /**
1359
- * Returns whether a class name is a valid active module/provider.
1360
- *
1361
- * @param string $module class name of module
1362
- * @return bool
1363
- */
1364
- private function module_is_valid( $module ) {
1365
- return array_key_exists( $module, self::modules() );
1366
- }
1367
-
1368
  /**
1369
  * Echos the class for the <tr> in the tickets list admin
1370
  */
@@ -1430,63 +925,6 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
1430
  self::$frontend_ticket_data += $tickets;
1431
  }
1432
 
1433
- /**
1434
- * Check and set global capacity options for the "event" post
1435
- *
1436
- * @return object ajax success object
1437
- */
1438
- public function edit_global_capacity_level() {
1439
- $capacity = tribe_get_request_var( 'capacity' );
1440
- $post_id = tribe_get_request_var( 'post_ID' );
1441
-
1442
- if ( empty( $post_id ) ) {
1443
- return $this->ajax_error( __( 'Missing required post ID.', 'event-tickets' ) );
1444
- }
1445
-
1446
- if ( empty( $capacity ) ) {
1447
- return $this->ajax_error( __( 'Missing required capacity.', 'event-tickets' ) );
1448
- }
1449
-
1450
- if ( ! is_numeric( $capacity ) ) {
1451
- if ( 'unlimited' !== strtolower( trim( $capacity ) ) ) {
1452
- return $this->ajax_error( __( 'Bad capacity data.', 'event-tickets' ) );
1453
- }
1454
-
1455
- $capacity = -1;
1456
- }
1457
-
1458
- $event_global_stock = new Tribe__Tickets__Global_Stock( $post_id );
1459
-
1460
- $event_global_stock->enable();
1461
- $event_global_stock->set_stock_level( $capacity );
1462
-
1463
- // Only update the Global Capacity of the Event in here or when the first Global Capacity happens
1464
- update_post_meta( $post_id, tribe( 'tickets.handler' )->key_capacity, $capacity );
1465
-
1466
- $tickets = self::get_all_event_tickets( $post_id );
1467
- foreach ( $tickets as $ticket ) {
1468
- // When Global Capacity is higher than local ticket one's we bail
1469
- if ( $capacity >= $ticket->capacity ) {
1470
- continue;
1471
- }
1472
-
1473
- $mode = get_post_meta( $ticket->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_MODE, true );
1474
-
1475
- // Skip any more that is not event managed
1476
- if (
1477
- Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE !== $mode
1478
- && Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE !== $mode
1479
- ) {
1480
- continue;
1481
- }
1482
-
1483
- // Otherwise we update tickets required
1484
- update_post_meta( $ticket->ID, tribe( 'tickets.handler' )->key_capacity, $capacity );
1485
- }
1486
-
1487
- return $this->ajax_ok( sprintf( __( 'Global capacity updated. New level set to %n', 'event-tickets' ), $capacity ) );
1488
- }
1489
-
1490
  /**
1491
  * Returns Ticket and RSVP Count for an Event
1492
  *
@@ -1676,48 +1114,6 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
1676
  return $tickets;
1677
  }
1678
 
1679
- /**
1680
- * Sets an AJAX error, returns a JSON array and ends the execution.
1681
- *
1682
- * @param string $message
1683
- */
1684
- final protected function ajax_error( $message = '' ) {
1685
- header( 'Content-type: application/json' );
1686
-
1687
- echo json_encode(
1688
- array(
1689
- 'success' => false,
1690
- 'message' => $message,
1691
- )
1692
- );
1693
- exit;
1694
- }
1695
-
1696
- /**
1697
- * Sets an AJAX response, returns a JSON array and ends the execution.
1698
- *
1699
- * @param mixed $data
1700
- */
1701
- final protected function ajax_ok( $data ) {
1702
- $return = array();
1703
- if ( is_object( $data ) ) {
1704
- $return = get_object_vars( $data );
1705
- } elseif ( is_array( $data ) || is_string( $data ) ) {
1706
- $return = $data;
1707
- } elseif ( is_bool( $data ) && ! $data ) {
1708
- $this->ajax_error( 'Something went wrong' );
1709
- }
1710
-
1711
- header( 'Content-type: application/json' );
1712
- echo json_encode(
1713
- array(
1714
- 'success' => true,
1715
- 'data' => $return,
1716
- )
1717
- );
1718
- exit;
1719
- }
1720
-
1721
  /**
1722
  * Generates and returns the email template for a group of attendees.
1723
  *
@@ -1775,32 +1171,6 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
1775
  return $prices;
1776
  }
1777
 
1778
- /**
1779
- * Tests if the user has the specified capability in relation to whatever post type
1780
- * the attendee object relates to.
1781
- *
1782
- * For example, if the attendee was generated for a ticket set up in relation to a
1783
- * post of the banana type, the generic capability "edit_posts" will be mapped to
1784
- * "edit_bananas" or whatever is appropriate.
1785
- *
1786
- * @internal for internal plugin use only (in spite of having public visibility)
1787
- *
1788
- * @see Tribe__Tickets__Tickets_Handler::user_can()
1789
- *
1790
- * @param string $generic_cap
1791
- * @param int $attendee_id
1792
- * @return boolean
1793
- */
1794
- public function user_can( $generic_cap, $attendee_id ) {
1795
- $post_id = $this->get_event_id_from_attendee_id( $attendee_id );
1796
-
1797
- if ( empty( $post_id ) ) {
1798
- return false;
1799
- }
1800
-
1801
- return tribe( 'tickets.handler' )->user_can( $generic_cap, $post_id );
1802
- }
1803
-
1804
  /**
1805
  * Given a valid attendee ID, returns the event ID it relates to or else boolean false
1806
  * if it cannot be determined.
@@ -2374,5 +1744,164 @@ if ( ! class_exists( 'Tribe__Tickets__Tickets' ) ) {
2374
 
2375
  return $ticket_form_hook;
2376
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2377
  }
2378
  }
294
  return $query->posts;
295
  }
296
 
 
297
  /**
298
  * Returns the html for the delete ticket link
299
  *
398
  /**
399
  * Get the controls (move, delete) as a string and add to our ajax return
400
  *
401
+ * @deprecated TBD
402
  * @since 4.6
403
  *
404
  * @param array $return the ajax return data
669
  * @since 4.6
670
  */
671
  add_action( 'tribe_events_tickets_metabox_edit_main', array( $this, 'do_metabox_capacity_options' ), 11, 2 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
672
 
673
  // Front end
674
  $ticket_form_hook = $this->get_ticket_form_hook();
685
  add_filter( 'tribe_events_event_costs', array( $this, 'get_ticket_prices' ), 10, 2 );
686
  }
687
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
688
  // start Attendees
689
 
690
  /**
860
  return false;
861
  }
862
 
 
 
 
 
 
 
 
 
 
 
863
  /**
864
  * Echos the class for the <tr> in the tickets list admin
865
  */
925
  self::$frontend_ticket_data += $tickets;
926
  }
927
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
928
  /**
929
  * Returns Ticket and RSVP Count for an Event
930
  *
1114
  return $tickets;
1115
  }
1116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1117
  /**
1118
  * Generates and returns the email template for a group of attendees.
1119
  *
1171
  return $prices;
1172
  }
1173
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1174
  /**
1175
  * Given a valid attendee ID, returns the event ID it relates to or else boolean false
1176
  * if it cannot be determined.
1744
 
1745
  return $ticket_form_hook;
1746
  }
1747
+
1748
+ /**
1749
+ * Creates a ticket object and calls the child save_ticket function
1750
+ *
1751
+ * @param int $post_id ID of parent "event" post
1752
+ * @param array $data Raw post data
1753
+ *
1754
+ * @return boolean
1755
+ */
1756
+ public function ticket_add( $post_id, $data ) {
1757
+ $ticket = new Tribe__Tickets__Ticket_Object();
1758
+ $ticket->ID = isset( $data['ticket_id'] ) ? absint( $data['ticket_id'] ) : null;
1759
+ $ticket->name = isset( $data['ticket_name'] ) ? esc_html( $data['ticket_name'] ) : null;
1760
+ $ticket->description = isset( $data['ticket_description'] ) ? esc_html( $data['ticket_description'] ) : null;
1761
+ $ticket->price = ! empty( $data['ticket_price'] ) ? filter_var( trim( $data['ticket_price'] ), FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND ) : 0;
1762
+ $ticket->purchase_limit = isset( $data['ticket_purchase_limit'] ) ? absint( $data['ticket_purchase_limit'] ) : apply_filters( 'tribe_tickets_default_purchase_limit', 0, $ticket->ID );
1763
+ $ticket->show_description = isset( $data['ticket_show_description'] ) ? 'yes' : 'no';
1764
+ $ticket->provider_class = $this->class_name;
1765
+ $ticket->start_date = null;
1766
+ $ticket->end_date = null;
1767
+
1768
+ tribe( 'tickets.handler' )->toggle_manual_update_flag( true );
1769
+
1770
+ if ( ! empty( $ticket->price ) ) {
1771
+ // remove non-money characters
1772
+ $ticket->price = preg_replace( '/[^0-9\.\,]/Uis', '', $ticket->price );
1773
+ }
1774
+
1775
+ if ( ! empty( $data['ticket_start_date'] ) ) {
1776
+ $start_datetime = Tribe__Date_Utils::maybe_format_from_datepicker( $data['ticket_start_date'] );
1777
+
1778
+ if ( ! empty( $data['ticket_start_time'] ) ) {
1779
+ $start_datetime .= ' ' . $data['ticket_start_time'];
1780
+ }
1781
+
1782
+ $ticket->start_date = date( Tribe__Date_Utils::DBDATETIMEFORMAT, strtotime( $start_datetime ) );
1783
+ }
1784
+
1785
+ if ( ! empty( $data['ticket_end_date'] ) ) {
1786
+ $end_datetime = Tribe__Date_Utils::maybe_format_from_datepicker( $data['ticket_end_date'] );
1787
+
1788
+ if ( ! empty( $data['ticket_end_time'] ) ) {
1789
+ $end_datetime .= ' ' . $data['ticket_end_time'];
1790
+ }
1791
+
1792
+ $ticket->end_date = date( Tribe__Date_Utils::DBDATETIMEFORMAT, strtotime( $end_datetime ) );
1793
+ }
1794
+
1795
+ /**
1796
+ * Fired once a ticket has been created and added to a post
1797
+ *
1798
+ * @param int $post_id ID of parent "event" post
1799
+ * @param Tribe__Tickets__Ticket_Object $ticket Ticket object
1800
+ * @param array $data Submitted post data
1801
+ */
1802
+ do_action( 'tribe_tickets_ticket_add', $post_id, $ticket, $data );
1803
+
1804
+ // Pass the control to the child object
1805
+ $save_ticket = $this->save_ticket( $post_id, $ticket, $data );
1806
+
1807
+ tribe( 'tickets.handler' )->toggle_manual_update_flag( false );
1808
+
1809
+ $post = get_post( $post_id );
1810
+ if ( empty( $data['ticket_start_date'] ) ) {
1811
+ // 30 min
1812
+ $round = 30;
1813
+ if ( class_exists( 'Tribe__Events__Main' ) ) {
1814
+ $round = (int) tribe( 'tec.admin.event-meta-box' )->get_timepicker_step( 'start' );
1815
+ }
1816
+ // Convert to seconds
1817
+ $round *= MINUTE_IN_SECONDS;
1818
+
1819
+ $date = strtotime( $post->post_date );
1820
+ $date = round( $date / $round ) * $round;
1821
+ $date = date( Tribe__Date_Utils::DBDATETIMEFORMAT, $date );
1822
+
1823
+ update_post_meta( $ticket->ID, tribe( 'tickets.handler' )->key_start_date, $date );
1824
+ }
1825
+
1826
+ if ( empty( $data['ticket_end_date'] ) && 'tribe_events' === $post->post_type ) {
1827
+ $event_end = get_post_meta( $post_id, '_EventEndDate', true );
1828
+ update_post_meta( $ticket->ID, tribe( 'tickets.handler' )->key_end_date, $event_end );
1829
+ }
1830
+
1831
+ tribe( 'tickets.version' )->update( $ticket->ID );
1832
+
1833
+ return $save_ticket;
1834
+ }
1835
+
1836
+
1837
+ /************************
1838
+ * *
1839
+ * Deprecated Methods *
1840
+ * *
1841
+ ************************/
1842
+ // @codingStandardsIgnoreStart
1843
+
1844
+ /**
1845
+ * Tests if the user has the specified capability in relation to whatever post type
1846
+ * the attendee object relates to.
1847
+ *
1848
+ * For example, if the attendee was generated for a ticket set up in relation to a
1849
+ * post of the banana type, the generic capability "edit_posts" will be mapped to
1850
+ * "edit_bananas" or whatever is appropriate.
1851
+ *
1852
+ * @internal for internal plugin use only (in spite of having public visibility)
1853
+ *
1854
+ * @deprecated TBD
1855
+ *
1856
+ * @see tribe( 'tickets.attendees' )->user_can
1857
+ *
1858
+ * @param string $generic_cap
1859
+ * @param int $attendee_id
1860
+ *
1861
+ * @return boolean
1862
+ */
1863
+ public function user_can( $generic_cap, $attendee_id ) {
1864
+ _deprecated_function( __METHOD__, 'TBD', 'tribe( "tickets.metabox" )->user_can( $generic_cap, $attendee_id )' );
1865
+ return tribe( 'tickets.metabox' )->user_can( $generic_cap, $attendee_id );
1866
+ }
1867
+
1868
+ /**
1869
+ * Check and set global capacity options for the "event" post
1870
+ *
1871
+ * @deprecated TBD
1872
+ * @since 4.6
1873
+ *
1874
+ * @return object ajax success object
1875
+ */
1876
+ public function edit_global_capacity_level() {
1877
+ _deprecated_function( __METHOD__, 'TBD', 'tribe_tickets_update_capacity' );
1878
+ }
1879
+
1880
+ /**
1881
+ * Sets an AJAX error, returns a JSON array and ends the execution.
1882
+ *
1883
+ * @deprecated TBD
1884
+ *
1885
+ * @param string $message
1886
+ */
1887
+ final protected function ajax_error( $message = '' ) {
1888
+ _deprecated_function( __METHOD__, 'TBD', 'wp_send_json_error()' );
1889
+ wp_send_json_error( $message );
1890
+ }
1891
+
1892
+ /**
1893
+ * Sets an AJAX response, returns a JSON array and ends the execution.
1894
+ *
1895
+ * @deprecated TBD
1896
+ *
1897
+ * @param mixed $data
1898
+ */
1899
+ final protected function ajax_ok( $data ) {
1900
+ _deprecated_function( __METHOD__, 'TBD', 'wp_send_json_success()' );
1901
+ wp_send_json_success( $data );
1902
+ }
1903
+
1904
+ // @codingStandardsIgnoreEnd
1905
+
1906
  }
1907
  }
src/Tribe/Tickets_Handler.php CHANGED
@@ -1,37 +1,16 @@
1
  <?php
2
-
3
  /**
4
  * Handles most actions related to a Ticket or Multiple ones
5
  */
6
  class Tribe__Tickets__Tickets_Handler {
7
- /**
8
- * Singleton instance of this class
9
- *
10
- * @var Tribe__Tickets__Tickets_Handler
11
- * @static
12
- */
13
- protected static $instance;
14
-
15
- /**
16
- * Path to this plugin
17
- * @var string
18
- */
19
- protected $path;
20
-
21
  /**
22
  * Post Meta key for the ticket header
23
- * @var string
24
- */
25
- protected $image_header_field = '_tribe_ticket_header';
26
-
27
- /**
28
- * Post Meta key for the ticket order
29
  *
30
  * @since 4.6
31
  *
32
  * @var string
33
  */
34
- protected $tickets_order_field = '_tribe_tickets_order';
35
 
36
  /**
37
  * Post Meta key for event ecommerce provider
@@ -87,29 +66,6 @@ class Tribe__Tickets__Tickets_Handler {
87
  */
88
  public $key_show_description = '_tribe_ticket_show_description';
89
 
90
- /**
91
- * Slug of the admin page for attendees
92
- * @var string
93
- */
94
- public static $attendees_slug = 'tickets-attendees';
95
-
96
- /**
97
- * @var bool
98
- */
99
- protected $should_render_title = true;
100
-
101
- /**
102
- * Hook of the admin page for attendees
103
- * @var
104
- */
105
- private $attendees_page;
106
-
107
- /**
108
- * WP_Post_List children for Attendees
109
- * @var Tribe__Tickets__Attendees_Table
110
- */
111
- private $attendees_table;
112
-
113
  /**
114
  * String to represent unlimited tickets
115
  * translated in the constructor
@@ -128,28 +84,14 @@ class Tribe__Tickets__Tickets_Handler {
128
  $this->unlimited_term = __( 'Unlimited', 'event-tickets' );
129
 
130
  foreach ( $main->post_types() as $post_type ) {
131
- add_action( 'save_post_' . $post_type, array( $this, 'save_image_header' ) );
132
- add_action( 'save_post_' . $post_type, array( $this, 'save_order' ) );
133
  }
134
 
135
- add_action( 'admin_menu', array( $this, 'attendees_page_register' ) );
136
- add_action( 'tribe_tickets_attendees_event_details_list_top', array( $this, 'event_details_top' ), 20 );
137
- add_action( 'tribe_tickets_plus_report_event_details_list_top', array( $this, 'event_details_top' ), 20 );
138
- add_action( 'tribe_tickets_attendees_event_details_list_top', array( $this, 'event_action_links' ), 25 );
139
- add_action( 'tribe_tickets_plus_report_event_details_list_top', array( $this, 'event_action_links' ), 25 );
140
- add_action( 'tribe_events_tickets_attendees_totals_top', array( $this, 'print_checkedin_totals' ), 0 );
141
- add_action( 'wp_ajax_tribe-ticket-save-settings', array( $this, 'ajax_handler_save_settings' ) );
142
-
143
- add_filter( 'post_row_actions', array( $this, 'attendees_row_action' ) );
144
- add_filter( 'page_row_actions', array( $this, 'attendees_row_action' ) );
145
-
146
  add_filter( 'get_post_metadata', array( $this, 'filter_capacity_support' ), 15, 3 );
147
  add_filter( 'updated_postmeta', array( $this, 'update_shared_tickets_capacity' ), 15, 4 );
148
 
149
  add_filter( 'updated_postmeta', array( $this, 'update_meta_date' ), 15, 4 );
150
  add_action( 'wp_insert_post', array( $this, 'update_start_date' ), 15, 3 );
151
-
152
- $this->path = trailingslashit( dirname( dirname( dirname( __FILE__ ) ) ) );
153
  }
154
 
155
  /**
@@ -329,6 +271,139 @@ class Tribe__Tickets__Tickets_Handler {
329
  return true;
330
  }
331
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
332
  /**
333
  * Gets the Tickets from a Post
334
  *
@@ -365,7 +440,10 @@ class Tribe__Tickets__Tickets_Handler {
365
  }
366
 
367
  /**
368
- * On update of the Event Capacity we will update all shared capacity Stock to match
 
 
 
369
  *
370
  * @since 4.6
371
  *
@@ -374,7 +452,7 @@ class Tribe__Tickets__Tickets_Handler {
374
  * @param string $meta_key Which meta key we are fetching
375
  * @param int $event_capacity To which value the event Capacity was update to
376
  *
377
- * @return int
378
  */
379
  public function update_shared_tickets_capacity( $meta_id, $object_id, $meta_key, $event_capacity ) {
380
  // Bail on non-capacity
@@ -389,27 +467,65 @@ class Tribe__Tickets__Tickets_Handler {
389
  return false;
390
  }
391
 
 
 
 
 
 
 
 
 
 
 
 
392
  $completes = array();
 
 
393
  $tickets = $this->get_tickets_ids( $object_id );
394
 
395
  foreach ( $tickets as $ticket ) {
396
  $mode = get_post_meta( $ticket, Tribe__Tickets__Global_Stock::TICKET_STOCK_MODE, true );
397
 
398
- if ( Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE !== $mode ) {
 
 
 
 
399
  continue;
400
  }
401
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
402
  $totals = $this->get_ticket_totals( $ticket );
403
  $completes[] = $complete = $totals['pending'] + $totals['sold'];
404
 
405
  $stock = $event_capacity - $complete;
406
  update_post_meta( $ticket, '_stock', $stock );
 
 
 
 
 
407
  }
408
 
409
- // Make sure we are updating the Global Stock when we update it's capacity
410
- $shared_stock = new Tribe__Tickets__Global_Stock( $object_id );
411
- $shared_stock_level = $event_capacity - array_sum( $completes );
412
- $shared_stock->set_stock_level( $shared_stock_level );
 
413
  }
414
 
415
  /**
@@ -502,15 +618,29 @@ class Tribe__Tickets__Tickets_Handler {
502
  // In here we deal with Tickets migration from legacy
503
  $mode = get_post_meta( $object->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_MODE, true );
504
  $totals = $this->get_ticket_totals( $object->ID );
 
 
 
 
 
 
505
 
506
  if ( Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE === $mode ) {
507
  $capacity = (int) trim( get_post_meta( $object->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_CAP, true ) );
508
  $capacity += $totals['sold'] + $totals['pending'];
509
- } elseif ( Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE === $mode ) {
510
  // When using Global we don't set a ticket cap
511
  $capacity = null;
512
- } elseif ( Tribe__Tickets__Global_Stock::OWN_STOCK_MODE === $mode ) {
513
- $capacity = array_sum( $totals );
 
 
 
 
 
 
 
 
514
  } else {
515
  $capacity = -1;
516
  }
@@ -586,6 +716,50 @@ class Tribe__Tickets__Tickets_Handler {
586
  return $totals;
587
  }
588
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
589
  /**
590
  * Returns whether a ticket has unlimited capacity
591
  *
@@ -651,6 +825,40 @@ class Tribe__Tickets__Tickets_Handler {
651
  return Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE === $mode || Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE === $mode;
652
  }
653
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
654
  /**
655
  * Checks if there are any unlimited tickets, optionally by stock mode or ticket type
656
  *
@@ -866,942 +1074,611 @@ class Tribe__Tickets__Tickets_Handler {
866
  $ticket_list[] = $ticket;
867
  }
868
 
869
-
870
  return $ticket_list;
871
  }
872
 
873
  /**
874
- * Injects event post type
875
  *
876
- * @param int $event_id
877
- */
878
- public function event_details_top( $event_id ) {
879
- $pto = get_post_type_object( get_post_type( $event_id ) );
880
-
881
- echo '
882
- <li class="post-type">
883
- <strong>' . esc_html__( 'Post type', 'event-tickets' ) . ': </strong>
884
- ' . esc_html( $pto->label ) . '
885
- </li>
886
- ';
887
- }
888
-
889
- /**
890
- * Injects action links into the attendee screen.
891
  *
892
- * @param $event_id
893
  */
894
- public function event_action_links( $event_id ) {
895
- $action_links = array(
896
- '<a href="' . esc_url( get_edit_post_link( $event_id ) ) . '" title="' . esc_attr_x( 'Edit', 'attendee event actions', 'event-tickets' ) . '">' . esc_html_x( 'Edit Event', 'attendee event actions', 'event-tickets' ) . '</a>',
897
- '<a href="' . esc_url( get_permalink( $event_id ) ) . '" title="' . esc_attr_x( 'View', 'attendee event actions', 'event-tickets' ) . '">' . esc_html_x( 'View Event', 'attendee event actions', 'event-tickets' ) . '</a>',
898
- );
899
-
900
  /**
901
- * Provides an opportunity to add and remove action links from the
902
- * attendee screen summary box.
 
 
 
 
 
903
  *
904
- * @param array $action_links
905
  */
906
- $action_links = (array) apply_filters( 'tribe_tickets_attendees_event_action_links', $action_links );
907
-
908
- if ( empty( $action_links ) ) {
909
- return;
910
- }
911
-
912
- echo wp_kses_post( '<li class="event-actions">' . join( ' | ', $action_links ) . '</li>' );
913
- }
914
-
915
- /**
916
- * Print Check In Totals at top of Column
917
- */
918
- public function print_checkedin_totals() {
919
- $total_checked_in = Tribe__Tickets__Main::instance()->attendance_totals()->get_total_checked_in();
920
-
921
- echo '<div class="totals-header"><h3>' . esc_html_x( 'Checked in:', 'attendee summary', 'event-tickets' ) . '</h3> ' . absint( $total_checked_in ) . '</div>';
922
  }
923
 
924
  /**
925
- * Adds the "attendees" link in the admin list row actions for each event.
926
  *
927
- * @param $actions
 
928
  *
929
- * @return array
 
 
 
 
930
  */
931
- public function attendees_row_action( $actions ) {
932
- global $post;
933
 
934
- // Only proceed if we're viewing a tickets-enabled post type.
935
- if ( ! in_array( $post->post_type, Tribe__Tickets__Main::instance()->post_types() ) ) {
936
- return $actions;
937
  }
938
 
939
- $tickets = Tribe__Tickets__Tickets::get_event_tickets( $post->ID );
940
-
941
- // Only proceed if there are tickets.
942
- if ( empty( $tickets ) ) {
943
- return $actions;
944
  }
945
 
946
- $url = $this->get_attendee_report_link( $post );
947
-
948
- $actions['tickets_attendees'] = sprintf(
949
- '<a title="%s" href="%s">%s</a>',
950
- esc_html__( 'See who purchased tickets to this event', 'event-tickets' ),
951
- esc_url( $url ),
952
- esc_html__( 'Attendees', 'event-tickets' )
953
- );
954
-
955
- return $actions;
956
- }
957
 
958
- /**
959
- * Registers the Attendees admin page
960
- */
961
- public function attendees_page_register() {
962
- $cap = 'edit_posts';
963
- $event_id = absint( ! empty( $_GET['event_id'] ) && is_numeric( $_GET['event_id'] ) ? $_GET['event_id'] : 0 );
964
 
965
- if ( ! current_user_can( 'edit_posts' ) && $event_id ) {
966
- $event = get_post( $event_id );
 
967
 
968
- if ( $event instanceof WP_Post && get_current_user_id() === (int) $event->post_author ) {
969
- $cap = 'read';
970
- }
971
  }
972
 
973
- $this->attendees_page = add_submenu_page( null, 'Attendee list', 'Attendee list', $cap, self::$attendees_slug, array( $this, 'attendees_page_inside' ) );
974
-
975
- add_action( 'admin_enqueue_scripts', array( $this, 'attendees_page_load_css_js' ) );
976
- add_action( 'admin_enqueue_scripts', array( $this, 'attendees_page_load_pointers' ) );
977
- add_action( 'load-' . $this->attendees_page, array( $this, 'attendees_page_screen_setup' ) );
978
 
979
  /**
980
- * This is a workaround to fix the problem
981
  *
982
- * @see https://central.tri.be/issues/46198
983
- * @todo we need to remove this
 
984
  */
985
- add_action( 'admin_init', array( $this, 'attendees_page_screen_setup' ), 1 );
986
  }
987
 
988
  /**
989
- * Enqueues the JS and CSS for the attendees page in the admin
990
  *
991
- * @TODO: this needs to move to Assets.php
992
  *
993
- * @param $hook
 
 
 
994
  */
995
- public function attendees_page_load_css_js( $hook ) {
996
- /**
997
- * Filter the Page Slugs the Attendees Page CSS and JS Loads
998
- *
999
- * @param array array( $this->attendees_page ) an array of admin slugs
1000
- */
1001
- if ( ! in_array( $hook, apply_filters( 'tribe_filter_attendee_page_slug', array( $this->attendees_page ) ) ) ) {
1002
- return;
1003
  }
1004
 
1005
- $resources_url = plugins_url( 'src/resources', dirname( dirname( __FILE__ ) ) );
1006
-
1007
- wp_enqueue_style( self::$attendees_slug, $resources_url . '/css/tickets-attendees.css', array(), Tribe__Tickets__Main::instance()->css_version() );
1008
- wp_enqueue_style( self::$attendees_slug . '-print', $resources_url . '/css/tickets-attendees-print.css', array(), Tribe__Tickets__Main::instance()->css_version(), 'print' );
1009
- wp_enqueue_script( self::$attendees_slug, $resources_url . '/js/tickets-attendees.js', array( 'jquery' ), Tribe__Tickets__Main::instance()->js_version() );
1010
-
1011
- add_thickbox();
1012
-
1013
- $mail_data = array(
1014
- 'nonce' => wp_create_nonce( 'email-attendee-list' ),
1015
- 'required' => esc_html__( 'You need to select a user or type a valid email address', 'event-tickets' ),
1016
- 'sending' => esc_html__( 'Sending...', 'event-tickets' ),
1017
- 'checkin_nonce' => wp_create_nonce( 'checkin' ),
1018
- 'uncheckin_nonce' => wp_create_nonce( 'uncheckin' ),
1019
- 'cannot_move' => esc_html__( 'You must first select one or more tickets before you can move them!', 'event-tickets' ),
1020
- 'move_url' => add_query_arg( array(
1021
- 'dialog' => Tribe__Tickets__Main::instance()->move_tickets()->dialog_name(),
1022
- 'check' => wp_create_nonce( 'move_tickets' ),
1023
- 'TB_iframe' => 'true',
1024
- ) ),
1025
- );
1026
-
1027
- wp_localize_script( self::$attendees_slug, 'Attendees', $mail_data );
1028
- }
1029
-
1030
- /**
1031
- * Loads the WP-Pointer for the Attendees screen
1032
- *
1033
- * @param $hook
1034
- */
1035
- public function attendees_page_load_pointers( $hook ) {
1036
- if ( $hook != $this->attendees_page ) {
1037
- return;
1038
  }
1039
 
1040
- $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
1041
- $pointer = null;
 
 
1042
 
1043
- if ( version_compare( get_bloginfo( 'version' ), '3.3', '>' ) && ! in_array( 'attendees_filters', $dismissed ) ) {
1044
- $pointer = array(
1045
- 'pointer_id' => 'attendees_filters',
1046
- 'target' => '#screen-options-link-wrap',
1047
- 'options' => array(
1048
- 'content' => sprintf( '<h3> %s </h3> <p> %s </p>', esc_html__( 'Columns', 'event-tickets' ), esc_html__( 'You can use Screen Options to select which columns you want to see. The selection works in the table below, in the email, for print and for the CSV export.', 'event-tickets' ) ),
1049
- 'position' => array( 'edge' => 'top', 'align' => 'right' ),
1050
- ),
1051
- );
1052
- wp_enqueue_script( 'wp-pointer' );
1053
- wp_enqueue_style( 'wp-pointer' );
1054
  }
1055
 
1056
- wp_localize_script( self::$attendees_slug, 'AttendeesPointer', $pointer );
1057
- }
 
1058
 
1059
- /**
1060
- * Sets up the Attendees screen data.
1061
- */
1062
- public function attendees_page_screen_setup() {
1063
- /* There's no reason for attendee screen setup to happen twice, but because
1064
- * of a fix for bug #46198 it can indeed be called twice in the same request.
1065
- * This flag variable is used to workaround that.
1066
  *
1067
- * @see Tribe__Tickets__Tickets_Handler::attendees_page_register() (and related @todo inside that method)
1068
- * @see https://central.tri.be/issues/46198
1069
  *
1070
- * @todo remove the has_run check once the above workaround is dispensed with
1071
  */
1072
- static $has_run = false;
1073
 
1074
- if ( $has_run || ( is_admin() && ( empty( $_GET['page'] ) || self::$attendees_slug !== $_GET['page'] ) ) ) {
1075
- return;
1076
  }
1077
 
1078
- $has_run = true;
1079
-
1080
- /**
1081
- * This is a workaround to fix the problem
1082
- *
1083
- * @see https://central.tri.be/issues/46198
1084
- * @todo remove this
1085
- */
1086
- if ( current_filter() === 'admin_init' ) {
1087
- $this->attendees_page_load_css_js( $this->attendees_page );
1088
-
1089
- $GLOBALS['current_screen'] = WP_Screen::get( $this->attendees_page );
1090
  }
1091
 
1092
- if ( ! empty( $_GET['action'] ) && in_array( $_GET['action'], array( 'email' ) ) ) {
1093
- define( 'IFRAME_REQUEST', true );
1094
-
1095
- // Use iFrame Header -- WP Method
1096
- iframe_header();
1097
-
1098
- // Check if we need to send an Email!
1099
- if ( isset( $_POST['tribe-send-email'] ) && $_POST['tribe-send-email'] ) {
1100
- $status = $this->send_attendee_mail_list();
1101
- } else {
1102
- $status = false;
1103
- }
1104
-
1105
- $which_tmpl = sanitize_file_name( $_GET['action'] );
1106
- include $this->path . 'src/admin-views/attendees-' . $which_tmpl . '.php';
1107
-
1108
- // Use iFrame Footer -- WP Method
1109
- iframe_footer();
1110
 
1111
- // We need nothing else here
1112
- exit;
 
1113
  } else {
1114
- $this->attendees_table = new Tribe__Tickets__Attendees_Table();
1115
-
1116
- $this->maybe_generate_attendees_csv();
1117
-
1118
- add_filter( 'admin_title', array( $this, 'attendees_admin_title' ), 10, 2 );
1119
- add_filter( 'admin_body_class', array( $this, 'attendees_admin_body_class' ) );
1120
  }
1121
  }
1122
 
1123
- public function attendees_admin_body_class( $body_classes ) {
1124
- return $body_classes . ' plugins-php';
1125
- }
1126
-
1127
  /**
1128
- * Sets the browser title for the Attendees admin page.
1129
- * Uses the event title.
1130
- *
1131
- * @param $admin_title
1132
- * @param $unused_title
1133
  *
1134
- * @return string
1135
- */
1136
- public function attendees_admin_title( $admin_title, $unused_title ) {
1137
- if ( ! empty( $_GET['event_id'] ) ) {
1138
- $event = get_post( $_GET['event_id'] );
1139
- $admin_title = sprintf( '%s - Attendee list', $event->post_title );
1140
- }
1141
-
1142
- return $admin_title;
1143
- }
1144
-
1145
- /**
1146
- * Renders the Attendees page
1147
- */
1148
- public function attendees_page_inside() {
1149
- /**
1150
- * Fires immediately before the content of the attendees screen
1151
- * is rendered.
1152
- *
1153
- * @param $this Tribe__Tickets__Tickets_Handler The current ticket handler instance.
1154
- */
1155
- do_action( 'tribe_tickets_attendees_page_inside', $this );
1156
-
1157
- include $this->path . 'src/admin-views/attendees.php';
1158
- }
1159
-
1160
- /**
1161
- * Generates a list of attendees taking into account the Screen Options.
1162
- * It's used both for the Email functionality, as for the CSV export.
1163
  *
1164
- * @param $event_id
1165
  *
1166
- * @return array
1167
  */
1168
- private function generate_filtered_attendees_list( $event_id ) {
1169
- /**
1170
- * Fire immediately prior to the generation of a filtered (exportable) attendee list.
1171
- *
1172
- * @param int $event_id
1173
- */
1174
- do_action( 'tribe_events_tickets_generate_filtered_attendees_list', $event_id );
1175
 
1176
- if ( empty( $this->attendees_page ) ) {
1177
- $this->attendees_page = 'tribe_events_page_tickets-attendees';
 
1178
  }
1179
 
1180
- //Add in Columns or get_column_headers() returns nothing
1181
- $filter_name = "manage_{$this->attendees_page}_columns";
1182
- add_filter( $filter_name, array( $this->attendees_table, 'get_columns' ), 15 );
1183
-
1184
- $items = Tribe__Tickets__Tickets::get_event_attendees( $event_id );
1185
-
1186
- //Add Handler for Community Tickets to Prevent Notices in Exports
1187
- if ( ! is_admin() ) {
1188
- $columns = apply_filters( $filter_name, array() );
1189
- } else {
1190
- $columns = array_map( 'wp_strip_all_tags', get_column_headers( get_current_screen() ) );
1191
  }
1192
 
1193
- // We dont want HTML inputs, private data or other columns that are superfluous in a CSV export
1194
- $hidden = array_merge( get_hidden_columns( $this->attendees_page ), array(
1195
- 'cb',
1196
- 'meta_details',
1197
- 'provider',
1198
- 'purchaser',
1199
- 'status',
1200
- ) );
1201
-
1202
- $hidden = array_flip( $hidden );
1203
- $export_columns = array_diff_key( $columns, $hidden );
1204
-
1205
- // Add additional expected columns
1206
- $export_columns['order_id'] = esc_html_x( 'Order ID', 'attendee export', 'event-tickets' );
1207
- $export_columns['order_status_label'] = esc_html_x( 'Order Status', 'attendee export', 'event-tickets' );
1208
- $export_columns['attendee_id'] = esc_html_x( 'Ticket #', 'attendee export', 'event-tickets' );
1209
- $export_columns['purchaser_name'] = esc_html_x( 'Customer Name', 'attendee export', 'event-tickets' );
1210
- $export_columns['purchaser_email'] = esc_html_x( 'Customer Email Address', 'attendee export', 'event-tickets' );
1211
-
1212
- /**
1213
- * Used to modify what columns should be shown on the CSV export
1214
- * The column name should be the Array Index and the Header is the array Value
1215
- *
1216
- * @param array Columns, associative array
1217
- * @param array Items to be exported
1218
- * @param int Event ID
1219
- */
1220
- $export_columns = apply_filters( 'tribe_events_tickets_attendees_csv_export_columns', $export_columns, $items, $event_id );
1221
-
1222
- // Add the export column headers as the first row
1223
- $rows = array(
1224
- array_values( $export_columns ),
1225
- );
1226
-
1227
- foreach ( $items as $single_item ) {
1228
- // Fresh row!
1229
- $row = array();
1230
-
1231
- foreach ( $export_columns as $column_id => $column_name ) {
1232
- // If additional columns have been added to the attendee list table we can obtain the
1233
- // values by calling the table object's column_default() method - any other values
1234
- // should simply be passed back unmodified
1235
- $row[ $column_id ] = $this->attendees_table->column_default( $single_item, $column_id );
1236
 
1237
- // Special handling for the check_in column
1238
- if ( 'check_in' === $column_id && 1 == $single_item[ $column_id ] ) {
1239
- $row[ $column_id ] = esc_html__( 'Yes', 'event-tickets' );
1240
- }
1241
 
1242
- // Special handling for new human readable id
1243
- if ( 'attendee_id' === $column_id ) {
1244
- if ( isset( $single_item[ $column_id ] ) ) {
1245
- $ticket_unique_id = get_post_meta( $single_item[ $column_id ], '_unique_id', true );
1246
- $ticket_unique_id = $ticket_unique_id === '' ? $single_item[ $column_id ] : $ticket_unique_id;
1247
- $row[ $column_id ] = esc_html( $ticket_unique_id );
1248
- }
1249
- }
1250
 
1251
- // Handle custom columns that might have names containing HTML tags
1252
- $row[ $column_id ] = wp_strip_all_tags( $row[ $column_id ] );
1253
- // Remove line breaks (e.g. from multi-line text field) for valid CSV format. Double quotes necessary here.
1254
- $row[ $column_id ] = str_replace( array( "\r", "\n" ), ' ', $row[ $column_id ] );
1255
  }
1256
 
1257
- $rows[] = array_values( $row );
 
 
 
 
 
1258
  }
1259
 
1260
- return array_filter( $rows );
 
1261
  }
1262
 
1263
  /**
1264
- * Checks if the user requested a CSV export from the attendees list.
1265
- * If so, generates the download and finishes the execution.
 
 
 
 
 
 
1266
  */
1267
- public function maybe_generate_attendees_csv() {
1268
- if ( empty( $_GET['attendees_csv'] ) || empty( $_GET['attendees_csv_nonce'] ) || empty( $_GET['event_id'] ) ) {
1269
- return;
1270
- }
1271
-
1272
- if ( ! wp_verify_nonce( $_GET['attendees_csv_nonce'], 'attendees_csv_nonce' ) || ! $this->user_can( 'edit_posts', $_GET['event_id'] ) ) {
1273
- return;
1274
- }
1275
-
1276
- /**
1277
- * Allow for filtering and modifying the list of attendees that will be exported via CSV for a given event.
1278
- *
1279
- * @param array $items The array of attendees that will be exported in this CSV file.
1280
- * @param int $event_id The ID of the event these attendees are associated with.
1281
- */
1282
- $items = apply_filters( 'tribe_events_tickets_attendees_csv_items', $this->generate_filtered_attendees_list( $_GET['event_id'] ), $_GET['event_id'] );
1283
- $event = get_post( $_GET['event_id'] );
1284
-
1285
- if ( ! empty( $items ) ) {
1286
- $charset = get_option( 'blog_charset' );
1287
- $filename = sanitize_file_name( $event->post_title . '-' . __( 'attendees', 'event-tickets' ) );
1288
-
1289
- // output headers so that the file is downloaded rather than displayed
1290
- header( "Content-Type: text/csv; charset=$charset" );
1291
- header( "Content-Disposition: attachment; filename=$filename.csv" );
1292
-
1293
- // create a file pointer connected to the output stream
1294
- $output = fopen( 'php://output', 'w' );
1295
-
1296
- //And echo the data
1297
- foreach ( $items as $item ) {
1298
- fputcsv( $output, $item );
1299
- }
1300
-
1301
- fclose( $output );
1302
- exit;
1303
- }
1304
  }
1305
 
1306
  /**
1307
- * Handles the "send to email" action for the attendees list.
 
 
 
 
 
 
1308
  */
1309
- public function send_attendee_mail_list() {
1310
- $error = new WP_Error();
1311
-
1312
- if ( empty( $_GET['event_id'] ) ) {
1313
- $error->add( 'no-event-id', esc_html__( 'Invalid Event ID', 'event-tickets' ), array( 'type' => 'general' ) );
1314
-
1315
- return $error;
1316
- }
1317
-
1318
- $cap = 'edit_posts';
1319
- $event_id = absint( ! empty( $_GET['event_id'] ) && is_numeric( $_GET['event_id'] ) ? $_GET['event_id'] : 0 );
1320
-
1321
- if ( ! current_user_can( 'edit_posts' ) && $event_id ) {
1322
- $event = get_post( $event_id );
1323
-
1324
- if ( $event instanceof WP_Post && get_current_user_id() === (int) $event->post_author ) {
1325
- $cap = 'read';
1326
- }
1327
- }
1328
-
1329
- if ( empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'email-attendees-list' ) || ! $this->user_can( $cap, $_GET['event_id'] ) ) {
1330
- $error->add( 'nonce-fail', esc_html__( 'Cheatin Huh?', 'event-tickets' ), array( 'type' => 'general' ) );
1331
-
1332
- return $error;
1333
- }
1334
-
1335
- if ( empty( $_POST['email_to_address'] ) && ( empty( $_POST['email_to_user'] ) || 0 >= (int) $_POST['email_to_user'] ) ) {
1336
- $error->add( 'empty-fields', esc_html__( 'Empty user and email', 'event-tickets' ), array( 'type' => 'general' ) );
1337
-
1338
- return $error;
1339
- }
1340
-
1341
- if ( ! empty( $_POST['email_to_address'] ) ) {
1342
- $type = 'email';
1343
- } else {
1344
- $type = 'user';
1345
- }
1346
-
1347
- if ( 'email' === $type && ! is_email( $_POST['email_to_address'] ) ) {
1348
- $error->add( 'invalid-email', esc_html__( 'Invalid Email', 'event-tickets' ), array( 'type' => $type ) );
1349
-
1350
- return $error;
1351
- }
1352
-
1353
- if ( 'user' === $type && ! is_numeric( $_POST['email_to_user'] ) ) {
1354
- $error->add( 'invalid-user', esc_html__( 'Invalid User ID', 'event-tickets' ), array( 'type' => $type ) );
1355
-
1356
- return $error;
1357
- }
1358
-
1359
- /**
1360
- * Now we know we have valid data
1361
- */
1362
-
1363
- if ( 'email' === $type ) {
1364
- // We already check this variable so, no harm here
1365
- $email = $_POST['email_to_address'];
1366
- } else {
1367
- $user = get_user_by( 'id', $_POST['email_to_user'] );
1368
-
1369
- if ( ! is_object( $user ) ) {
1370
- $error->add( 'invalid-user', esc_html__( 'Invalid User ID', 'event-tickets' ), array( 'type' => $type ) );
1371
-
1372
- return $error;
1373
- }
1374
-
1375
- $email = $user->data->user_email;
1376
  }
1377
 
1378
- $this->attendees_table = new Tribe__Tickets__Attendees_Table();
1379
-
1380
- $items = $this->generate_filtered_attendees_list( $_GET['event_id'] );
1381
-
1382
- $event = get_post( $_GET['event_id'] );
1383
-
1384
- ob_start();
1385
- $attendee_tpl = Tribe__Tickets__Templates::get_template_hierarchy( 'tickets/attendees-email.php', array( 'disable_view_check' => true ) );
1386
- include $attendee_tpl;
1387
- $content = ob_get_clean();
1388
-
1389
- add_filter( 'wp_mail_content_type', array( $this, 'set_contenttype' ) );
1390
 
1391
- if ( ! wp_mail( $email, sprintf( esc_html__( 'Attendee List for: %s', 'event-tickets' ), $event->post_title ), $content ) ) {
1392
- $error->add( 'email-error', esc_html__( 'Error when sending the email', 'event-tickets' ), array( 'type' => 'general' ) );
1393
 
1394
- return $error;
1395
- }
 
 
 
 
 
 
1396
 
1397
- remove_filter( 'wp_mail_content_type', array( $this, 'set_contenttype' ) );
 
 
 
 
 
1398
 
1399
- return esc_html__( 'Email sent successfully!', 'event-tickets' );
1400
- }
 
 
 
 
 
 
1401
 
1402
  /**
1403
- * Sets the content type for the attendees to email functionality.
1404
- * Allows for sending an HTML email.
1405
  *
1406
- * @param $content_type
1407
  *
1408
- * @return string
1409
  */
1410
- public function set_contenttype( $content_type ) {
1411
- return 'text/html';
1412
  }
1413
 
1414
  /**
1415
- * Tests if the user has the specified capability in relation to whatever post type
1416
- * the ticket relates to.
1417
  *
1418
- * For example, if tickets are created for the banana post type, the generic capability
1419
- * "edit_posts" will be mapped to "edit_bananas" or whatever is appropriate.
1420
  *
1421
- * @internal for internal plugin use only (in spite of having public visibility)
1422
- *
1423
- * @param string $generic_cap
1424
- * @param int $event_id
1425
- * @return boolean
1426
  */
1427
- public function user_can( $generic_cap, $event_id ) {
1428
- $type = get_post_type( $event_id );
1429
-
1430
- // It's possible we'll get null back
1431
- if ( null === $type ) {
1432
- return false;
1433
- }
1434
-
1435
- $type_config = get_post_type_object( $type );
1436
-
1437
- if ( ! empty( $type_config->cap->{$generic_cap} ) ) {
1438
- return current_user_can( $type_config->cap->{$generic_cap} );
1439
- }
1440
 
1441
- return false;
1442
  }
1443
 
1444
- /* Tickets Metabox */
1445
-
1446
  /**
1447
  * Includes the tickets metabox inside the Event edit screen
1448
  *
1449
- * @param WP_Post $post
 
 
 
 
1450
  */
1451
  public function do_meta_box( $post ) {
1452
- $start_date = date( 'Y-m-d H:00:00' );
1453
- $end_date = date( 'Y-m-d H:00:00' );
1454
- $start_time = Tribe__Date_Utils::time_only( $start_date, false );
1455
- $end_time = Tribe__Date_Utils::time_only( $start_date, false );
1456
-
1457
- $show_global_stock = Tribe__Tickets__Tickets::global_stock_available();
1458
- $tickets = Tribe__Tickets__Tickets::get_event_tickets( $post->ID );
1459
- $global_stock = new Tribe__Tickets__Global_Stock( $post->ID );
1460
 
1461
- include $this->path . 'src/admin-views/meta-box.php';
 
 
 
 
 
 
 
 
 
 
 
1462
  }
1463
 
1464
  /**
1465
  * Render the ticket row into the ticket table
1466
  *
 
 
1467
  * @since 4.6
1468
  *
1469
  * @param Tribe__Tickets__Ticket_Object $ticket
1470
  */
1471
  public function render_ticket_row( $ticket ) {
1472
- $provider = $ticket->provider_class;
1473
- $provider_obj = call_user_func( array( $provider, 'get_instance' ) );
1474
- $inventory = $ticket->inventory();
1475
- $available = $ticket->available();
1476
- $capacity = $ticket->capacity();
1477
- $stock = $ticket->stock();
1478
- $needs_warning = false;
1479
- $mode = $ticket->global_stock_mode();
1480
- $event = $ticket->get_event();
1481
-
1482
- // If we don't have an event we should even continue
1483
- if ( ! $event ) {
1484
- return;
1485
- }
1486
-
1487
- if (
1488
- 'Tribe__Tickets_Plus__Commerce__WooCommerce__Main' === $ticket->provider_class
1489
- && -1 !== $capacity
1490
- ) {
1491
- $product = wc_get_product( $ticket->ID );
1492
- $shared_stock = new Tribe__Tickets__Global_Stock( $event->ID );
1493
- $needs_warning = (int) $inventory !== (int) $stock;
1494
 
1495
- // We remove the warning flag when shared stock is used
1496
- if ( $shared_stock->is_enabled() && (int) $stock >= (int) $shared_stock->get_stock_level() ) {
1497
- $needs_warning = false;
1498
- }
1499
- }
 
 
 
 
 
 
 
 
1500
 
1501
- ?>
1502
- <tr class="<?php echo esc_attr( $provider ); ?> is-expanded" data-ticket-order-id="order_<?php echo esc_attr( $ticket->ID ); ?>" data-ticket-type-id="<?php echo esc_attr( $ticket->ID ); ?>">
1503
- <td class="column-primary ticket_name <?php echo esc_attr( $provider ); ?>" data-label="<?php esc_html_e( 'Ticket Type:', 'event-tickets' ); ?>">
1504
- <span class="dashicons dashicons-screenoptions tribe-handle"></span>
1505
- <input
1506
- type="hidden"
1507
- class="tribe-ticket-field-order"
1508
- name="tribe-tickets[<?php echo esc_attr( $ticket->ID ); ?>][order]"
1509
- value="<?php echo esc_attr( $ticket->menu_order ); ?>"
1510
- <?php echo 'Tribe__Tickets__RSVP' === $ticket->provider_class ? 'disabled' : ''; ?>
1511
- >
1512
- <?php echo esc_html( $ticket->name ); ?>
1513
- </td>
1514
-
1515
- <?php
1516
- /**
1517
- * Allows for the insertion of additional content into the main ticket admin panel after the tickets listing
1518
- *
1519
- * @since 4.6
1520
- *
1521
- * @param Tribe__Tickets__Ticket_Object $ticket
1522
- * @param obj ecommerce provider object
1523
- */
1524
- do_action( 'tribe_events_tickets_ticket_table_add_tbody_column', $ticket, $provider_obj );
1525
- ?>
1526
-
1527
- <td class="ticket_capacity">
1528
- <span class='tribe-mobile-only'><?php esc_html_e( 'Capacity:', 'event-tickets' ); ?></span>
1529
- <?php tribe_tickets_get_readable_amount( $capacity, $mode, true ); ?>
1530
- </td>
1531
-
1532
- <td class="ticket_available">
1533
- <span class='tribe-mobile-only'><?php esc_html_e( 'Available:', 'event-tickets' ); ?></span>
1534
- <?php if ( $needs_warning ) : ?>
1535
- <span class="dashicons dashicons-warning required" title="<?php esc_attr_e( 'The number of Complete ticket sales does not match the number of attendees. Please check the Attendees list and adjust ticket stock in WooCommerce as needed.', 'event-tickets' ) ?>"></span>
1536
- <?php endif; ?>
1537
-
1538
- <?php tribe_tickets_get_readable_amount( $available, $mode, true ); ?>
1539
- </td>
1540
-
1541
- <td class="ticket_edit">
1542
- <?php
1543
- printf(
1544
- "<button data-provider='%s' data-ticket-id='%s' title='%s' class='ticket_edit_button'><span class='ticket_edit_text'>%s</span></a>",
1545
- esc_attr( $ticket->provider_class ),
1546
- esc_attr( $ticket->ID ),
1547
- esc_attr( sprintf( __( '( Ticket ID: %d )', 'tribe-tickets' ), $ticket->ID ) ),
1548
- esc_html( $ticket->name )
1549
- );
1550
- ?>
1551
- </td>
1552
- </tr>
1553
- <?php
1554
  }
1555
 
1556
  /**
1557
  * Echoes the markup for the tickets list in the tickets metabox
1558
  *
1559
- * @param int $unused_post_id event ID
 
 
1560
  * @param array $tickets
1561
  */
1562
- public function ticket_list_markup( $unused_post_id, $tickets = array() ) {
1563
- if ( ! empty( $tickets ) ) {
1564
- include $this->path . 'src/admin-views/list.php';
1565
- }
1566
  }
1567
 
1568
  /**
1569
  * Returns the markup for the tickets list in the tickets metabox
1570
  *
 
 
1571
  * @param array $tickets
1572
  *
1573
  * @return string
1574
  */
1575
  public function get_ticket_list_markup( $tickets = array() ) {
1576
- ob_start();
1577
- $this->ticket_list_markup( null, $tickets );
1578
- $return = ob_get_clean();
1579
 
1580
- return $return;
1581
  }
1582
 
1583
  /**
1584
- * Returns the markup for the Settings Panel for Tickets
1585
  *
1586
- * @param int $post_id
1587
  *
1588
- * @return string
1589
  */
1590
- public function get_settings_panel( $post_id ) {
1591
- ob_start();
1592
- include $this->path . 'src/admin-views/settings_admin_panel.php';
1593
- $return = ob_get_clean();
1594
-
1595
- return $return;
1596
  }
1597
 
1598
  /**
1599
- * Returns the markup for the History for a Given Ticket
1600
  *
1601
- * @param int $ticket_id
1602
  *
1603
- * @return string
1604
  */
1605
- public function get_history_content( $post_id, $ticket ) {
1606
- ob_start();
1607
- include $this->path . 'src/admin-views/tickets-history.php';
1608
- $return = ob_get_clean();
1609
-
1610
- return $return;
1611
  }
1612
 
1613
  /**
1614
- * Returns the attachment ID for the header image for a event.
1615
  *
1616
- * @param $event_id
1617
  *
1618
- * @return mixed
1619
  */
1620
- public function get_header_image_id( $event_id ) {
1621
- return get_post_meta( $event_id, $this->image_header_field, true );
 
1622
  }
1623
 
1624
  /**
1625
- * Save or delete the image header for tickets on an event
1626
  *
1627
- * @param int $post_id
 
 
 
 
1628
  */
1629
- public function save_image_header( $post_id ) {
1630
- if ( ! ( isset( $_POST[ 'tribe-tickets-post-settings' ] ) && wp_verify_nonce( $_POST[ 'tribe-tickets-post-settings' ], 'tribe-tickets-meta-box' ) ) ) {
1631
- return;
1632
- }
1633
-
1634
- // don't do anything on autosave or auto-draft either or massupdates
1635
- if ( wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) {
1636
- return;
1637
- }
1638
-
1639
- if ( empty( $_POST['tribe_ticket_header_image_id'] ) ) {
1640
- delete_post_meta( $post_id, $this->image_header_field );
1641
- } else {
1642
- update_post_meta( $post_id, $this->image_header_field, $_POST['tribe_ticket_header_image_id'] );
1643
- }
1644
-
1645
- return;
1646
  }
1647
 
1648
  /**
1649
- * Save the the drag-n-drop ticket order
1650
  *
1651
- * @since 4.6
1652
  *
1653
- * @param int $post
1654
  *
 
1655
  */
1656
- public function save_order( $post, $tickets = null ) {
1657
- // We're calling this during post save, so the save nonce has already been checked.
1658
-
1659
- // don't do anything on autosave, auto-draft, or massupdates
1660
- if ( wp_is_post_autosave( $post ) || wp_is_post_revision( $post ) ) {
1661
- return false;
1662
- }
1663
-
1664
- if ( ! $post instanceof WP_Post ) {
1665
- $post = get_post( $post );
1666
- }
1667
-
1668
- // Bail on Invalid post
1669
- if ( ! $post instanceof WP_Post ) {
1670
- return false;
1671
- }
1672
 
1673
- // If we didn't get any Ticket data we fetch from the $_POST
1674
- if ( is_null( $tickets ) ) {
1675
- $tickets = Tribe__Utils__Array::get( $_POST, array( 'tribe-tickets' ), null );
1676
- }
 
 
 
1677
 
1678
- if ( empty( $tickets ) ) {
1679
- return false;
1680
- }
 
 
 
 
 
 
 
 
1681
 
1682
- foreach ( $tickets as $id => $ticket ) {
1683
- if ( ! isset( $ticket['order'] ) ) {
1684
- continue;
1685
- }
 
 
 
 
 
 
 
1686
 
1687
- $args = array(
1688
- 'ID' => absint( $id ),
1689
- 'menu_order' => (int) $ticket['order'],
1690
- );
 
 
 
 
 
 
1691
 
1692
- $updated[] = wp_update_post( $args );
1693
- }
 
 
 
 
 
1694
 
1695
- // Verify if any failed
1696
- return ! in_array( 0, $updated );
 
 
 
 
 
 
 
 
 
 
 
 
1697
  }
1698
 
1699
- protected function sort_by_menu_order( $a, $b ) {
1700
- return $a->menu_order - $b->menu_order;
 
 
 
 
 
 
1701
  }
1702
 
1703
  /**
1704
- * Sorts tickets according to stored menu_order
 
1705
  *
1706
- * @since 4.6
1707
  *
1708
- * @param array $tickets array of ticket objects
1709
  *
1710
- * @return array - sorted array of ticket objects
1711
  */
1712
- public function sort_tickets_by_menu_order( $tickets ) {
1713
- foreach ( $tickets as $key => $ticket ) {
1714
- // make sure they are ordered correctly
1715
- $orderpost = get_post( $ticket->ID );
1716
- $ticket->menu_order = $orderpost->menu_order;
1717
- }
1718
 
1719
- usort( $tickets, array( $this, 'sort_by_menu_order' ) );
 
1720
 
1721
- return $tickets;
 
 
 
 
 
 
 
 
1722
  }
1723
 
1724
  /**
1725
- * Static Singleton Factory Method
1726
  *
1727
- * @return Tribe__Tickets__Tickets_Handler
1728
  */
1729
- public static function instance() {
1730
- return tribe( 'tickets.handler' );
 
1731
  }
1732
 
1733
  /**
1734
- * Returns the current post being handled.
1735
  *
1736
- * @return array|bool|null|WP_Post
1737
  */
1738
- public function get_post() {
1739
- return $this->attendees_table->event;
 
1740
  }
1741
 
1742
  /**
1743
- * Whether the ticket handler should render the title in the attendees report.
1744
  *
1745
- * @param bool $should_render_title
1746
  */
1747
- public function should_render_title( $should_render_title ) {
1748
- $this->should_render_title = $should_render_title;
 
1749
  }
1750
 
1751
  /**
1752
- * Returns the full URL to the attendees report page.
 
1753
  *
1754
- * @param WP_Post $post
 
 
1755
  *
1756
  * @return string
1757
  */
1758
- public function get_attendee_report_link( $post ) {
1759
- $url = add_query_arg( array(
1760
- 'post_type' => $post->post_type,
1761
- 'page' => self::$attendees_slug,
1762
- 'event_id' => $post->ID,
1763
- ), admin_url( 'edit.php' ) );
1764
-
1765
- return $url;
1766
  }
1767
 
1768
  /**
1769
- * Saves the event ticket settings via ajax
 
1770
  *
1771
- * @since 4.6
 
 
 
 
 
 
 
 
 
1772
  */
1773
- public function ajax_handler_save_settings() {
1774
- $params = array();
1775
- $id = absint( $_POST['post_ID'] );
1776
- $params = wp_parse_args( $_POST['formdata'], $params );
1777
-
1778
- /**
1779
- * Allow other plugins to hook into this to add settings
1780
- *
1781
- * @since 4.6
1782
- *
1783
- * @param array $params the array of parameters to filter
1784
- */
1785
- do_action( 'tribe_events_save_tickets_settings', $params );
1786
-
1787
- if ( ! empty( $params['tribe_ticket_header_image_id'] ) ) {
1788
- update_post_meta( $id, $this->image_header_field, $params['tribe_ticket_header_image_id'] );
1789
- } else {
1790
- delete_post_meta( $id, $this->image_header_field );
1791
- }
1792
-
1793
- // We reversed this logic on the back end
1794
- if ( class_exists( 'Tribe__Tickets_Plus__Attendees_List' ) ) {
1795
- update_post_meta( $id, Tribe__Tickets_Plus__Attendees_List::HIDE_META_KEY, ! empty( $params['tribe_show_attendees'] ) );
1796
- }
1797
-
1798
- // Change the default ticket provider
1799
- if ( ! empty( $params['default_ticket_provider'] ) ) {
1800
- update_post_meta( $id, $this->key_provider_field, $params['default_ticket_provider'] );
1801
- } else {
1802
- delete_post_meta( $id, $this->key_provider_field );
1803
- }
1804
-
1805
- wp_send_json_success( $params );
1806
  }
 
 
1807
  }
1
  <?php
 
2
  /**
3
  * Handles most actions related to a Ticket or Multiple ones
4
  */
5
  class Tribe__Tickets__Tickets_Handler {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  /**
7
  * Post Meta key for the ticket header
 
 
 
 
 
 
8
  *
9
  * @since 4.6
10
  *
11
  * @var string
12
  */
13
+ public $key_image_header = '_tribe_ticket_header';
14
 
15
  /**
16
  * Post Meta key for event ecommerce provider
66
  */
67
  public $key_show_description = '_tribe_ticket_show_description';
68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  /**
70
  * String to represent unlimited tickets
71
  * translated in the constructor
84
  $this->unlimited_term = __( 'Unlimited', 'event-tickets' );
85
 
86
  foreach ( $main->post_types() as $post_type ) {
87
+ add_action( 'save_post_' . $post_type, array( $this, 'save_post' ) );
 
88
  }
89
 
 
 
 
 
 
 
 
 
 
 
 
90
  add_filter( 'get_post_metadata', array( $this, 'filter_capacity_support' ), 15, 3 );
91
  add_filter( 'updated_postmeta', array( $this, 'update_shared_tickets_capacity' ), 15, 4 );
92
 
93
  add_filter( 'updated_postmeta', array( $this, 'update_meta_date' ), 15, 4 );
94
  add_action( 'wp_insert_post', array( $this, 'update_start_date' ), 15, 3 );
 
 
95
  }
96
 
97
  /**
271
  return true;
272
  }
273
 
274
+ /**
275
+ * Returns which possible connections an Object might have
276
+ *
277
+ * @since TBD
278
+ *
279
+ * @return object
280
+ * {
281
+ * 'provider' => (mixed|null)
282
+ * 'event' => (int|null)
283
+ * 'product' => (int|null)
284
+ * 'order' => (int|string|null)
285
+ * 'order_item' => (int|null)
286
+ * }
287
+ */
288
+ public function get_connections_template() {
289
+ // If you add any new Items here, update the Docblock
290
+ $connections = (object) array(
291
+ 'provider' => null,
292
+ 'event' => null,
293
+ 'product' => null,
294
+ 'order' => null,
295
+ 'order_item' => null,
296
+ );
297
+
298
+ return $connections;
299
+ }
300
+
301
+ /**
302
+ * The simplest way to grab all the relationships from Any Ticket related objects
303
+ *
304
+ * On RSVPs Attendees and Orders are the same Post
305
+ *
306
+ * @since TBD
307
+ *
308
+ * @see self::get_connections_template
309
+ *
310
+ * @param int|WP_Post $object Which object you are trying to figure out
311
+ *
312
+ * @return object
313
+ */
314
+ public function get_object_connections( $object ) {
315
+ $connections = $this->get_connections_template();
316
+
317
+ if ( ! $object instanceof WP_Post ) {
318
+ $object = get_post( $object );
319
+ }
320
+
321
+ if ( ! $object instanceof WP_Post ) {
322
+ return $connections;
323
+ }
324
+
325
+ $provider_index = array(
326
+ 'rsvp' => 'Tribe__Tickets__RSVP',
327
+ 'woo' => 'Tribe__Tickets_Plus__Commerce__WooCommerce__Main',
328
+ 'edd' => 'Tribe__Tickets_Plus__Commerce__EDD__Main',
329
+ );
330
+
331
+ $relationships = array(
332
+ 'event' => array(
333
+ // RSVP
334
+ '_tribe_rsvp_event' => 'rsvp',
335
+ '_tribe_rsvp_for_event' => 'rsvp',
336
+
337
+ // EDD
338
+ '_tribe_eddticket_event' => 'edd',
339
+ '_tribe_eddticket_for_event' => 'edd',
340
+
341
+ // Woo
342
+ '_tribe_wooticket_event' => 'woo',
343
+ '_tribe_wooticket_for_event' => 'woo',
344
+ ),
345
+ 'product' => array(
346
+ // RSVP
347
+ '_tribe_rsvp_product' => 'rsvp',
348
+
349
+ // EDD
350
+ '_tribe_eddticket_product' => 'edd',
351
+
352
+ // Woo
353
+ '_tribe_wooticket_product' => 'woo',
354
+ ),
355
+ 'order' => array(
356
+ // RSVP
357
+ '_tribe_rsvp_order' => 'rsvp',
358
+
359
+ // EDD
360
+ '_tribe_eddticket_order' => 'edd',
361
+
362
+ // Woo
363
+ '_tribe_wooticket_order' => 'woo',
364
+
365
+ ),
366
+ 'order_item' => array(
367
+ // Woo
368
+ '_tribe_wooticket_order_item' => 'woo',
369
+ ),
370
+ );
371
+
372
+ foreach ( $relationships as $what => $keys ) {
373
+ foreach ( $keys as $key => $provider ) {
374
+ // Skip any key that doens't exist
375
+ if ( ! metadata_exists( 'post', $object->ID, $key ) ) {
376
+ continue;
377
+ }
378
+
379
+ // When we don't have a provider yet we test and fetch it
380
+ if ( ! $connections->provider && isset( $provider_index[ $provider ] ) ) {
381
+ $connections->provider = $provider_index[ $provider ];
382
+ }
383
+
384
+ // Fetch it
385
+ $meta = get_post_meta( $object->ID, $key, true );
386
+
387
+ // Makes sure we have clean data
388
+ if ( empty( $meta ) ) {
389
+ $meta = null;
390
+ } elseif ( is_numeric( $meta ) ) {
391
+ $meta = (int) $meta;
392
+ }
393
+
394
+ // The meta value as a connection
395
+ $connections->{$what} = $meta;
396
+ }
397
+ }
398
+
399
+ // If we have a valid provider get it
400
+ if ( $connections->provider && class_exists( $connections->provider ) ) {
401
+ $connections->provider = call_user_func( array( $connections->provider, 'get_instance' ) );
402
+ }
403
+
404
+ return $connections;
405
+ }
406
+
407
  /**
408
  * Gets the Tickets from a Post
409
  *
440
  }
441
 
442
  /**
443
+ * On the Update of a Object (Event, Page, Post...) we need to do some other actions:
444
+ * - Object needs to have Shared Stock Enabled
445
+ * - Object needs a Shared Stock level to be set
446
+ * - Shared tickets have their capacity and stock updated
447
  *
448
  * @since 4.6
449
  *
452
  * @param string $meta_key Which meta key we are fetching
453
  * @param int $event_capacity To which value the event Capacity was update to
454
  *
455
+ * @return boolean
456
  */
457
  public function update_shared_tickets_capacity( $meta_id, $object_id, $meta_key, $event_capacity ) {
458
  // Bail on non-capacity
467
  return false;
468
  }
469
 
470
+ // We don't accept any non-numeric values here
471
+ if ( ! is_numeric( $event_capacity ) ) {
472
+ return false;
473
+ }
474
+
475
+ // Make sure we are updating the Shared Stock when we update it's capacity
476
+ $object_stock = new Tribe__Tickets__Global_Stock( $object_id );
477
+
478
+ // Make sure that we have stock enabled (backwards compatibility)
479
+ $object_stock->enable();
480
+
481
  $completes = array();
482
+
483
+ // Get all Tickets
484
  $tickets = $this->get_tickets_ids( $object_id );
485
 
486
  foreach ( $tickets as $ticket ) {
487
  $mode = get_post_meta( $ticket, Tribe__Tickets__Global_Stock::TICKET_STOCK_MODE, true );
488
 
489
+ // Skip any tickets that are not Shared
490
+ if (
491
+ Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE !== $mode
492
+ && Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE !== $mode
493
+ ) {
494
  continue;
495
  }
496
 
497
+ $capacity = tribe_tickets_get_capacity( $ticket );
498
+
499
+ // When Global Capacity is higher than local ticket one's we bail
500
+ if (
501
+ Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE === $mode
502
+ ) {
503
+ $capped_capacity = $capacity;
504
+ if ( $event_capacity < $capacity ) {
505
+ $capped_capacity = $event_capacity;
506
+ }
507
+
508
+ // Otherwise we update tickets required
509
+ tribe_tickets_update_capacity( $ticket, $capped_capacity );
510
+ }
511
+
512
  $totals = $this->get_ticket_totals( $ticket );
513
  $completes[] = $complete = $totals['pending'] + $totals['sold'];
514
 
515
  $stock = $event_capacity - $complete;
516
  update_post_meta( $ticket, '_stock', $stock );
517
+
518
+ // Makes sure we mark it as in Stock for the status
519
+ if ( 0 !== $stock ) {
520
+ update_post_meta( $ticket, '_stock_status', 'instock' );
521
+ }
522
  }
523
 
524
+ // Setup the Stock level
525
+ $new_object_stock = $event_capacity - array_sum( $completes );
526
+ $object_stock->set_stock_level( $new_object_stock );
527
+
528
+ return true;
529
  }
530
 
531
  /**
618
  // In here we deal with Tickets migration from legacy
619
  $mode = get_post_meta( $object->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_MODE, true );
620
  $totals = $this->get_ticket_totals( $object->ID );
621
+ $connections = $this->get_object_connections( $object );
622
+
623
+ // When migrating we might get Tickets/RSVP without a mode so we set it to Indy Ticket
624
+ if ( ! metadata_exists( 'post', $object->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_MODE ) ) {
625
+ $mode = 'own';
626
+ }
627
 
628
  if ( Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE === $mode ) {
629
  $capacity = (int) trim( get_post_meta( $object->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_CAP, true ) );
630
  $capacity += $totals['sold'] + $totals['pending'];
631
+ } elseif ( Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE === $mode ) {
632
  // When using Global we don't set a ticket cap
633
  $capacity = null;
634
+ } elseif ( Tribe__Tickets__Global_Stock::OWN_STOCK_MODE === $mode ) {
635
+ /**
636
+ * Due to a bug in version 4.5.6 of our code RSVP doesnt lower the Stock
637
+ * so when setting up the capacity we need to avoid counting solds
638
+ */
639
+ if ( 'Tribe__Tickets__RSVP' === get_class( $connections->provider ) ) {
640
+ $capacity = $totals['stock'];
641
+ } else {
642
+ $capacity = array_sum( $totals );
643
+ }
644
  } else {
645
  $capacity = -1;
646
  }
716
  return $totals;
717
  }
718
 
719
+ /**
720
+ * Gets the Total of Stock, Sold and Pending for a given Post
721
+ * And if there is any Unlimited
722
+ *
723
+ * @since TBD
724
+ *
725
+ * @param int|WP_Post $post Which ticket
726
+ *
727
+ * @return array
728
+ */
729
+ public function get_post_totals( $post ) {
730
+ if ( ! $post instanceof WP_Post ) {
731
+ $post = get_post( $post );
732
+ }
733
+
734
+ if ( ! $post instanceof WP_Post ) {
735
+ return false;
736
+ }
737
+
738
+ $tickets = Tribe__Tickets__Tickets::get_all_event_tickets( $post->ID );
739
+ $totals = array(
740
+ 'has_unlimited' => false,
741
+ 'tickets' => count( $tickets ),
742
+ 'capacity' => $this->get_total_event_capacity( $post ),
743
+ 'sold' => 0,
744
+ 'pending' => 0,
745
+ 'stock' => 0,
746
+ );
747
+
748
+ foreach ( $tickets as $ticket ) {
749
+ $ticket_totals = $this->get_ticket_totals( $ticket->ID );
750
+ $totals['sold'] += $ticket_totals['sold'];
751
+ $totals['pending'] += $ticket_totals['pending'];
752
+ $totals['stock'] += $ticket_totals['stock'];
753
+
754
+ // check if we have any unlimited tickets
755
+ if ( ! $totals['has_unlimited'] ) {
756
+ $totals['has_unlimited'] = -1 === tribe_tickets_get_capacity( $ticket->ID );
757
+ }
758
+ }
759
+
760
+ return $totals;
761
+ }
762
+
763
  /**
764
  * Returns whether a ticket has unlimited capacity
765
  *
825
  return Tribe__Tickets__Global_Stock::CAPPED_STOCK_MODE === $mode || Tribe__Tickets__Global_Stock::GLOBAL_STOCK_MODE === $mode;
826
  }
827
 
828
+ /**
829
+ * Returns whether a given object has the correct Provider for a Post or Ticket
830
+ *
831
+ * @since TBD
832
+ *
833
+ * @param int|WP_Post $ticket
834
+ * @param mixed $provider
835
+ *
836
+ * @return bool
837
+ */
838
+ public function is_correct_provider( $post, $provider ) {
839
+ if ( ! $post instanceof WP_Post ) {
840
+ $post = get_post( $post );
841
+ }
842
+
843
+ if ( ! $post instanceof WP_Post ) {
844
+ return false;
845
+ }
846
+
847
+ $provider_class = get_class( $provider );
848
+
849
+ if ( tribe_tickets_post_type_enabled( $post->post_type ) ) {
850
+ $default_provider = Tribe__Tickets_Plus__Tickets::get_event_ticket_provider( $post->ID );
851
+ } else {
852
+ $default_provider = tribe_tickets_get_ticket_provider( $post->ID );
853
+ }
854
+
855
+ if ( ! is_string( $default_provider ) ) {
856
+ $default_provider = get_class( $default_provider );
857
+ }
858
+
859
+ return $default_provider === $provider_class;
860
+ }
861
+
862
  /**
863
  * Checks if there are any unlimited tickets, optionally by stock mode or ticket type
864
  *
1074
  $ticket_list[] = $ticket;
1075
  }
1076
 
 
1077
  return $ticket_list;
1078
  }
1079
 
1080
  /**
1081
+ * Gets the Default mode in which tickets will be generated
1082
  *
1083
+ * @since TBD
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1084
  *
1085
+ * @return string
1086
  */
1087
+ public function get_default_capacity_mode() {
 
 
 
 
 
1088
  /**
1089
+ * Filter Default Ticket Capacity Type
1090
+ *
1091
+ * @since 4.6
1092
+ *
1093
+ * @param string 'global'
1094
+ *
1095
+ * @return string ('global','capped','own','')
1096
  *
 
1097
  */
1098
+ return apply_filters( 'tribe_tickets_default_ticket_capacity_type', 'global' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1099
  }
1100
 
1101
  /**
1102
+ * Saves the Ticket Editor related tickets on Save of the Parent Post
1103
  *
1104
+ * Due to how we can have multiple Post Types where we can attach tickets we have one place where
1105
+ * all panels will save, because `save_post_$post_type` requires a loop
1106
  *
1107
+ * @since TBD
1108
+ *
1109
+ * @param int $post Post that will be saved
1110
+ *
1111
+ * @return string
1112
  */
1113
+ public function save_post( $post ) {
1114
+ // We're calling this during post save, so the save nonce has already been checked.
1115
 
1116
+ // don't do anything on autosave, auto-draft, or massupdates
1117
+ if ( wp_is_post_autosave( $post ) || wp_is_post_revision( $post ) ) {
1118
+ return false;
1119
  }
1120
 
1121
+ if ( ! $post instanceof WP_Post ) {
1122
+ $post = get_post( $post );
 
 
 
1123
  }
1124
 
1125
+ // Bail on Invalid post
1126
+ if ( ! $post instanceof WP_Post ) {
1127
+ return false;
1128
+ }
 
 
 
 
 
 
 
1129
 
1130
+ $provider = tribe_get_request_var( 'ticket_provider', false );
 
 
 
 
 
1131
 
1132
+ if ( $provider && tribe( 'tickets.metabox' )->module_is_valid( $provider ) ) {
1133
+ // Get the Provider
1134
+ $provider = call_user_func( array( $provider, 'get_instance' ) );
1135
 
1136
+ // Sve the actual ticket
1137
+ $ticket_id = $provider->ticket_add( $post->ID, $_POST );
 
1138
  }
1139
 
1140
+ $this->save_form_settings( $post );
1141
+ $this->save_order( $post );
 
 
 
1142
 
1143
  /**
1144
+ * Allows us to Run any actions related to a Post that has Tickets
1145
  *
1146
+ * @since TBD
1147
+ *
1148
+ * @param WP_Post $post Which post we are saving
1149
  */
1150
+ do_action( 'tribe_tickets_save_post', $post );
1151
  }
1152
 
1153
  /**
1154
+ * Saves the Ticket Editor settings form
1155
  *
1156
+ * @since TBD
1157
  *
1158
+ * @param int $post Post that will be saved
1159
+ * @param array $data Params that will be used to save
1160
+ *
1161
+ * @return string
1162
  */
1163
+ public function save_form_settings( $post, $data = null ) {
1164
+ // don't do anything on autosave, auto-draft, or massupdates
1165
+ if ( wp_is_post_autosave( $post ) || wp_is_post_revision( $post ) ) {
1166
+ return false;
 
 
 
 
1167
  }
1168
 
1169
+ if ( ! $post instanceof WP_Post ) {
1170
+ $post = get_post( $post );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1171
  }
1172
 
1173
+ // Bail on Invalid post
1174
+ if ( ! $post instanceof WP_Post ) {
1175
+ return false;
1176
+ }
1177
 
1178
+ // If we didn't get any Ticket data we fetch from the $_POST
1179
+ if ( is_null( $data ) ) {
1180
+ $data = tribe_get_request_var( array( 'tribe-tickets', 'settings' ), null );
 
 
 
 
 
 
 
 
1181
  }
1182
 
1183
+ if ( empty( $data ) ) {
1184
+ return false;
1185
+ }
1186
 
1187
+ /**
1188
+ * Allow other plugins to hook into this to add settings
 
 
 
 
 
1189
  *
1190
+ * @since 4.6
 
1191
  *
1192
+ * @param array $data the array of parameters to filter
1193
  */
1194
+ do_action( 'tribe_events_save_tickets_settings', $data );
1195
 
1196
+ if ( isset( $data['event_capacity'] ) && is_numeric( $data['event_capacity'] ) ) {
1197
+ tribe_tickets_update_capacity( $post, $data['event_capacity'] );
1198
  }
1199
 
1200
+ if ( ! empty( $data['header_image_id'] ) ) {
1201
+ update_post_meta( $post->ID, $this->key_image_header, $data['header_image_id'] );
1202
+ } else {
1203
+ delete_post_meta( $post->ID, $this->key_image_header );
 
 
 
 
 
 
 
 
1204
  }
1205
 
1206
+ // We reversed this logic on the back end
1207
+ if ( class_exists( 'Tribe__Tickets_Plus__Attendees_List' ) ) {
1208
+ update_post_meta( $post->ID, Tribe__Tickets_Plus__Attendees_List::HIDE_META_KEY, ! empty( $data['show_attendees'] ) );
1209
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1210
 
1211
+ // Change the default ticket provider
1212
+ if ( ! empty( $data['default_provider'] ) ) {
1213
+ update_post_meta( $post->ID, $this->key_provider_field, $data['default_provider'] );
1214
  } else {
1215
+ delete_post_meta( $post->ID, $this->key_provider_field );
 
 
 
 
 
1216
  }
1217
  }
1218
 
 
 
 
 
1219
  /**
1220
+ * Save the the drag-n-drop ticket order
 
 
 
 
1221
  *
1222
+ * @since 4.6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1223
  *
1224
+ * @param int $post
1225
  *
 
1226
  */
1227
+ public function save_order( $post, $tickets = null ) {
1228
+ // We're calling this during post save, so the save nonce has already been checked.
 
 
 
 
 
1229
 
1230
+ // don't do anything on autosave, auto-draft, or massupdates
1231
+ if ( wp_is_post_autosave( $post ) || wp_is_post_revision( $post ) ) {
1232
+ return false;
1233
  }
1234
 
1235
+ if ( ! $post instanceof WP_Post ) {
1236
+ $post = get_post( $post );
 
 
 
 
 
 
 
 
 
1237
  }
1238
 
1239
+ // Bail on Invalid post
1240
+ if ( ! $post instanceof WP_Post ) {
1241
+ return false;
1242
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1243
 
1244
+ // If we didn't get any Ticket data we fetch from the $_POST
1245
+ if ( is_null( $tickets ) ) {
1246
+ $tickets = tribe_get_request_var( array( 'tribe-tickets', 'list' ), null );
1247
+ }
1248
 
1249
+ if ( empty( $tickets ) ) {
1250
+ return false;
1251
+ }
 
 
 
 
 
1252
 
1253
+ foreach ( $tickets as $id => $ticket ) {
1254
+ if ( ! isset( $ticket['order'] ) ) {
1255
+ continue;
 
1256
  }
1257
 
1258
+ $args = array(
1259
+ 'ID' => absint( $id ),
1260
+ 'menu_order' => (int) $ticket['order'],
1261
+ );
1262
+
1263
+ $updated[] = wp_update_post( $args );
1264
  }
1265
 
1266
+ // Verify if any failed
1267
+ return ! in_array( 0, $updated );
1268
  }
1269
 
1270
  /**
1271
+ * Sorts tickets according to stored menu_order
1272
+ *
1273
+ * @since 4.6
1274
+ *
1275
+ * @param object $a First Compare item
1276
+ * @param object $b Second Compare item
1277
+ *
1278
+ * @return array
1279
  */
1280
+ protected function sort_by_menu_order( $a, $b ) {
1281
+ return $a->menu_order - $b->menu_order;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1282
  }
1283
 
1284
  /**
1285
+ * Sorts tickets according to stored menu_order
1286
+ *
1287
+ * @since 4.6
1288
+ *
1289
+ * @param array $tickets array of ticket objects
1290
+ *
1291
+ * @return array - sorted array of ticket objects
1292
  */
1293
+ public function sort_tickets_by_menu_order( $tickets ) {
1294
+ foreach ( $tickets as $key => $ticket ) {
1295
+ // make sure they are ordered correctly
1296
+ $orderpost = get_post( $ticket->ID );
1297
+ $ticket->menu_order = $orderpost->menu_order;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1298
  }
1299
 
1300
+ usort( $tickets, array( $this, 'sort_by_menu_order' ) );
 
 
 
 
 
 
 
 
 
 
 
1301
 
1302
+ return $tickets;
1303
+ }
1304
 
1305
+ /**
1306
+ * Static Singleton Factory Method
1307
+ *
1308
+ * @return Tribe__Tickets__Tickets_Handler
1309
+ */
1310
+ public static function instance() {
1311
+ return tribe( 'tickets.handler' );
1312
+ }
1313
 
1314
+ /************************
1315
+ * *
1316
+ * Deprecated Methods *
1317
+ * *
1318
+ ************************/
1319
+ // @codingStandardsIgnoreStart
1320
 
1321
+ /**
1322
+ * Slug of the admin page for attendees
1323
+ *
1324
+ * @deprecated TBD
1325
+ *
1326
+ * @var string
1327
+ */
1328
+ public static $attendees_slug = 'tickets-attendees';
1329
 
1330
  /**
1331
+ * Save or delete the image header for tickets on an event
 
1332
  *
1333
+ * @deprecated TBD
1334
  *
1335
+ * @param int $post_id
1336
  */
1337
+ public function save_image_header( $post_id ) {
1338
+ _deprecated_function( __METHOD__, 'TBD', "tribe( 'tickets.handler' )->save_settings()" );
1339
  }
1340
 
1341
  /**
1342
+ * Saves the event ticket settings via ajax
 
1343
  *
1344
+ * @deprecated TBD
 
1345
  *
1346
+ * @since 4.6
 
 
 
 
1347
  */
1348
+ public function ajax_handler_save_settings() {
1349
+ _deprecated_function( __METHOD__, 'TBD', "tribe( 'tickets.metabox' )->ajax_settings()" );
1350
+ return tribe( 'tickets.metabox' )->ajax_settings();
 
 
 
 
 
 
 
 
 
 
1351
 
 
1352
  }
1353
 
 
 
1354
  /**
1355
  * Includes the tickets metabox inside the Event edit screen
1356
  *
1357
+ * @deprecated TBD
1358
+ *
1359
+ * @param WP_Post $post
1360
+ *
1361
+ * @return string
1362
  */
1363
  public function do_meta_box( $post ) {
1364
+ _deprecated_function( __METHOD__, 'TBD', "tribe( 'tickets.metabox' )->render( \$post )" );
1365
+ return tribe( 'tickets.metabox' )->render( $post );
1366
+ }
 
 
 
 
 
1367
 
1368
+ /**
1369
+ * Returns the attachment ID for the header image for a event.
1370
+ *
1371
+ * @deprecated TBD
1372
+ *
1373
+ * @param $event_id
1374
+ *
1375
+ * @return mixed
1376
+ */
1377
+ public function get_header_image_id( $event_id ) {
1378
+ _deprecated_function( __METHOD__, 'TBD', "get_post_meta( \$event_id, tribe( 'tickets.handler' )->key_image_header, true );" );
1379
+ return get_post_meta( $event_id, tribe( 'tickets.handler' )->key_image_header, true );
1380
  }
1381
 
1382
  /**
1383
  * Render the ticket row into the ticket table
1384
  *
1385
+ * @deprecated TBD
1386
+ *
1387
  * @since 4.6
1388
  *
1389
  * @param Tribe__Tickets__Ticket_Object $ticket
1390
  */
1391
  public function render_ticket_row( $ticket ) {
1392
+ _deprecated_function( __METHOD__, 'TBD', "tribe( 'tickets.admin.views' )->template( array( 'editor', 'ticket-row' ) )" );
1393
+ tribe( 'tickets.admin.views' )->template( array( 'editor', 'list-row' ), array( 'ticket' => $ticket ) );
1394
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1395
 
1396
+ /**
1397
+ * Returns the markup for the History for a Given Ticket
1398
+ *
1399
+ * @deprecated TBD
1400
+ *
1401
+ * @param int $ticket_id
1402
+ *
1403
+ * @return string
1404
+ */
1405
+ public function get_history_content( $post_id, $ticket ) {
1406
+ _deprecated_function( __METHOD__, 'TBD', "tribe( 'tickets.admin.views' )->template( 'settings_admin_panel' )" );
1407
+ return tribe( 'tickets.admin.views' )->template( 'tickets-history', array( 'post_id' => $post_id, 'ticket' => $ticket ), false );
1408
+ }
1409
 
1410
+ /**
1411
+ * Returns the markup for the Settings Panel for Tickets
1412
+ *
1413
+ * @deprecated TBD
1414
+ *
1415
+ * @param int $post_id
1416
+ *
1417
+ * @return string
1418
+ */
1419
+ public function get_settings_panel( $post_id ) {
1420
+ _deprecated_function( __METHOD__, 'TBD', "tribe( 'tickets.admin.views' )->template( 'settings_admin_panel' )" );
1421
+ return tribe( 'tickets.admin.views' )->template( 'settings_admin_panel', array( 'post_id' => $post_id ), false );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1422
  }
1423
 
1424
  /**
1425
  * Echoes the markup for the tickets list in the tickets metabox
1426
  *
1427
+ * @deprecated TBD
1428
+ *
1429
+ * @param int $deprecated event ID
1430
  * @param array $tickets
1431
  */
1432
+ public function ticket_list_markup( $deprecated, $tickets = array() ) {
1433
+ _deprecated_function( __METHOD__, 'TBD', "tribe( 'tickets.admin.views' )->template( 'list' )" );
1434
+
1435
+ tribe( 'tickets.admin.views' )->template( 'list', array( 'tickets' => $tickets ) );
1436
  }
1437
 
1438
  /**
1439
  * Returns the markup for the tickets list in the tickets metabox
1440
  *
1441
+ * @deprecated TBD
1442
+ *
1443
  * @param array $tickets
1444
  *
1445
  * @return string
1446
  */
1447
  public function get_ticket_list_markup( $tickets = array() ) {
1448
+ _deprecated_function( __METHOD__, 'TBD', "tribe( 'tickets.admin.views' )->template( 'list' )" );
 
 
1449
 
1450
+ return tribe( 'tickets.admin.views' )->template( 'list', array( 'tickets' => $tickets ), false );
1451
  }
1452
 
1453
  /**
1454
+ * Whether the ticket handler should render the title in the attendees report.
1455
  *
1456
+ * @deprecated TBD
1457
  *
1458
+ * @param bool $should_render_title
1459
  */
1460
+ public function should_render_title( $deprecated ) {
1461
+ _deprecated_function( __METHOD__, 'TBD', 'add_filter( \'tribe_tickets_attendees_show_title\', \'_return_false\' );' );
1462
+ return true;
 
 
 
1463
  }
1464
 
1465
  /**
1466
+ * Returns the current post being handled.
1467
  *
1468
+ * @deprecated TBD
1469
  *
1470
+ * @return array|bool|null|WP_Post
1471
  */
1472
+ public function get_post() {
1473
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::get_post' );
1474
+ return tribe( 'tickets.attendees' )->get_post();
 
 
 
1475
  }
1476
 
1477
  /**
1478
+ * Print Check In Totals at top of Column
1479
  *
1480
+ * @deprecated TBD
1481
  *
 
1482
  */
1483
+ public function print_checkedin_totals() {
1484
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::print_checkedin_totals' );
1485
+ tribe( 'tickets.attendees' )->print_checkedin_totals();
1486
  }
1487
 
1488
  /**
1489
+ * Returns the full URL to the attendees report page.
1490
  *
1491
+ * @deprecated TBD
1492
+ *
1493
+ * @param WP_Post $post
1494
+ *
1495
+ * @return string
1496
  */
1497
+ public function get_attendee_report_link( $post ) {
1498
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::get_report_link' );
1499
+ return tribe( 'tickets.attendees' )->get_report_link( $post );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1500
  }
1501
 
1502
  /**
1503
+ * Adds the "attendees" link in the admin list row actions for each event.
1504
  *
1505
+ * @deprecated TBD
1506
  *
1507
+ * @param $actions
1508
  *
1509
+ * @return array
1510
  */
1511
+ public function attendees_row_action( $actions ) {
1512
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::filter_admin_row_actions' );
1513
+ return tribe( 'tickets.attendees' )->filter_admin_row_actions( $actions );
1514
+ }
 
 
 
 
 
 
 
 
 
 
 
 
1515
 
1516
+ /**
1517
+ * Registers the Attendees admin page
1518
+ */
1519
+ public function attendees_page_register() {
1520
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::register_page' );
1521
+ tribe( 'tickets.attendees' )->register_page();
1522
+ }
1523
 
1524
+ /**
1525
+ * Enqueues the JS and CSS for the attendees page in the admin
1526
+ *
1527
+ * @deprecated TBD
1528
+ *
1529
+ * @param $hook
1530
+ */
1531
+ public function attendees_page_load_css_js( $hook ) {
1532
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::enqueue_assets' );
1533
+ tribe( 'tickets.attendees' )->enqueue_assets( $hook );
1534
+ }
1535
 
1536
+ /**
1537
+ * Loads the WP-Pointer for the Attendees screen
1538
+ *
1539
+ * @deprecated TBD
1540
+ *
1541
+ * @param $hook
1542
+ */
1543
+ public function attendees_page_load_pointers( $hook ) {
1544
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::load_pointers' );
1545
+ tribe( 'tickets.attendees' )->load_pointers( $hook );
1546
+ }
1547
 
1548
+ /**
1549
+ * Sets up the Attendees screen data.
1550
+ *
1551
+ * @deprecated TBD
1552
+ *
1553
+ */
1554
+ public function attendees_page_screen_setup() {
1555
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::screen_setup' );
1556
+ tribe( 'tickets.attendees' )->screen_setup();
1557
+ }
1558
 
1559
+ /**
1560
+ * @deprecated TBD
1561
+ */
1562
+ public function attendees_admin_body_class( $body_classes ) {
1563
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::filter_admin_body_class' );
1564
+ tribe( 'tickets.attendees' )->filter_admin_body_class( $body_classes );
1565
+ }
1566
 
1567
+ /**
1568
+ * Sets the browser title for the Attendees admin page.
1569
+ * Uses the event title.
1570
+ *
1571
+ * @deprecated TBD
1572
+ *
1573
+ * @param $admin_title
1574
+ * @param $unused_title
1575
+ *
1576
+ * @return string
1577
+ */
1578
+ public function attendees_admin_title( $admin_title, $unused_title ) {
1579
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::filter_admin_title' );
1580
+ tribe( 'tickets.attendees' )->filter_admin_title( $admin_title, $unused_title );
1581
  }
1582
 
1583
+ /**
1584
+ * Renders the Attendees page
1585
+ *
1586
+ * @deprecated TBD
1587
+ */
1588
+ public function attendees_page_inside() {
1589
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::render' );
1590
+ tribe( 'tickets.attendees' )->render();
1591
  }
1592
 
1593
  /**
1594
+ * Generates a list of attendees taking into account the Screen Options.
1595
+ * It's used both for the Email functionality, as for the CSV export.
1596
  *
1597
+ * @deprecated TBD
1598
  *
1599
+ * @param $event_id
1600
  *
1601
+ * @return array
1602
  */
1603
+ private function generate_filtered_attendees_list( $event_id ) {
1604
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::generate_filtered_list' );
 
 
 
 
1605
 
1606
+ tribe( 'tickets.attendees' )->generate_filtered_list( $event_id );
1607
+ }
1608
 
1609
+ /**
1610
+ * Checks if the user requested a CSV export from the attendees list.
1611
+ * If so, generates the download and finishes the execution.
1612
+ *
1613
+ * @deprecated TBD
1614
+ */
1615
+ public function maybe_generate_attendees_csv() {
1616
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::maybe_generate_csv' );
1617
+ tribe( 'tickets.attendees' )->maybe_generate_csv();
1618
  }
1619
 
1620
  /**
1621
+ * Handles the "send to email" action for the attendees list.
1622
  *
1623
+ * @deprecated TBD
1624
  */
1625
+ public function send_attendee_mail_list() {
1626
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::send_mail_list' );
1627
+ tribe( 'tickets.attendees' )->send_mail_list();
1628
  }
1629
 
1630
  /**
1631
+ * Injects event post type
1632
  *
1633
+ * @deprecated TBD
1634
  */
1635
+ public function event_details_top() {
1636
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::event_details_top' );
1637
+ tribe( 'tickets.attendees' )->event_details_top();
1638
  }
1639
 
1640
  /**
1641
+ * Injects action links into the attendee screen.
1642
  *
1643
+ * @deprecated TBD
1644
  */
1645
+ public function event_action_links() {
1646
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::event_action_links' );
1647
+ tribe( 'tickets.attendees' )->event_action_links();
1648
  }
1649
 
1650
  /**
1651
+ * Sets the content type for the attendees to email functionality.
1652
+ * Allows for sending an HTML email.
1653
  *
1654
+ * @deprecated TBD
1655
+ *
1656
+ * @param $content_type
1657
  *
1658
  * @return string
1659
  */
1660
+ public function set_contenttype( $content_type ) {
1661
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::set_contenttype' );
 
 
 
 
 
 
1662
  }
1663
 
1664
  /**
1665
+ * Tests if the user has the specified capability in relation to whatever post type
1666
+ * the ticket relates to.
1667
  *
1668
+ * For example, if tickets are created for the banana post type, the generic capability
1669
+ * "edit_posts" will be mapped to "edit_bananas" or whatever is appropriate.
1670
+ *
1671
+ * @deprecated TBD
1672
+ *
1673
+ * @internal for internal plugin use only (in spite of having public visibility)
1674
+ *
1675
+ * @param string $generic_cap
1676
+ * @param int $event_id
1677
+ * @return boolean
1678
  */
1679
+ public function user_can( $generic_cap, $event_id ) {
1680
+ _deprecated_function( __METHOD__, 'TBD', 'Tribe__Tickets__Attendees::user_can' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1681
  }
1682
+
1683
+ // @codingStandardsIgnoreEnd
1684
  }
src/admin-views/attendees.php CHANGED
@@ -1,13 +1,23 @@
1
  <?php
2
- $this->attendees_table->prepare_items();
3
 
4
- $event_id = $this->attendees_table->event->ID;
5
- $event = $this->attendees_table->event;
6
  $tickets = Tribe__Tickets__Tickets::get_event_tickets( $event_id );
 
 
 
 
 
 
 
 
 
 
7
  ?>
8
 
9
  <div class="wrap tribe-attendees-page">
10
- <?php if ( $this->should_render_title ) : ?>
11
  <h1><?php esc_html_e( 'Attendees', 'event-tickets' ); ?></h1>
12
  <?php endif; ?>
13
  <div id="tribe-attendees-summary" class="welcome-panel">
@@ -110,6 +120,6 @@ $tickets = Tribe__Tickets__Tickets::get_event_tickets( $event_id );
110
  <input type="hidden" name="<?php echo esc_attr( is_admin() ? 'page' : 'tribe[page]' ); ?>" value="<?php echo esc_attr( isset( $_GET['page'] ) ? $_GET['page'] : '' ); ?>" />
111
  <input type="hidden" name="<?php echo esc_attr( is_admin() ? 'event_id' : 'tribe[event_id]' ); ?>" id="event_id" value="<?php echo esc_attr( $event_id ); ?>" />
112
  <input type="hidden" name="<?php echo esc_attr( is_admin() ? 'post_type' : 'tribe[post_type]' ); ?>" value="<?php echo esc_attr( $event->post_type ); ?>" />
113
- <?php $this->attendees_table->display(); ?>
114
  </form>
115
  </div>
1
  <?php
2
+ tribe( 'tickets.attendees' )->attendees_table->prepare_items();
3
 
4
+ $event_id = tribe( 'tickets.attendees' )->attendees_table->event->ID;
5
+ $event = tribe( 'tickets.attendees' )->attendees_table->event;
6
  $tickets = Tribe__Tickets__Tickets::get_event_tickets( $event_id );
7
+
8
+ /**
9
+ * Wether or not we should display attendees title
10
+ *
11
+ * @since TBD
12
+ *
13
+ * @param boolean $show_title
14
+ * @param Tribe__Tickets__Tickets_Handler $handler
15
+ */
16
+ $show_title = apply_filters( 'tribe_tickets_attendees_show_title', true, tribe( 'tickets.attendees' ) );
17
  ?>
18
 
19
  <div class="wrap tribe-attendees-page">
20
+ <?php if ( $show_title ) : ?>
21
  <h1><?php esc_html_e( 'Attendees', 'event-tickets' ); ?></h1>
22
  <?php endif; ?>
23
  <div id="tribe-attendees-summary" class="welcome-panel">
120
  <input type="hidden" name="<?php echo esc_attr( is_admin() ? 'page' : 'tribe[page]' ); ?>" value="<?php echo esc_attr( isset( $_GET['page'] ) ? $_GET['page'] : '' ); ?>" />
121
  <input type="hidden" name="<?php echo esc_attr( is_admin() ? 'event_id' : 'tribe[event_id]' ); ?>" id="event_id" value="<?php echo esc_attr( $event_id ); ?>" />
122
  <input type="hidden" name="<?php echo esc_attr( is_admin() ? 'post_type' : 'tribe[post_type]' ); ?>" value="<?php echo esc_attr( $event->post_type ); ?>" />
123
+ <?php tribe( 'tickets.attendees' )->attendees_table->display(); ?>
124
  </form>
125
  </div>
src/admin-views/{tickets-advanced.php → editor/fieldset/advanced.php} RENAMED
@@ -1,3 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <button class="accordion-header tribe_advanced_meta">
2
  <?php esc_html_e( 'Advanced', 'event-tickets' ); ?>
3
  </button>
@@ -11,7 +51,7 @@
11
  name="ticket_description"
12
  class="ticket_field ticket_form_right"
13
  id="ticket_description"
14
- ></textarea>
15
  <div class="input_block">
16
  <label class="tribe_soft_note">
17
  <input
@@ -20,7 +60,7 @@
20
  name="ticket_show_description"
21
  value="1"
22
  class="ticket_field ticket_form_left"
23
- checked
24
  >
25
  <?php esc_html_e( 'Show description on front end ticket form.', 'event-tickets' ); ?>
26
  </label>
@@ -35,7 +75,7 @@
35
  class="tribe-datepicker tribe-field-start_date ticket_field"
36
  name="ticket_start_date"
37
  id="ticket_start_date"
38
- value=""
39
  data-validation-type="datepicker"
40
  data-validation-is-less-or-equal-to="#ticket_end_date"
41
  data-validation-error="<?php echo esc_attr( json_encode( $start_date_errors ) ) ?>"
@@ -51,7 +91,8 @@
51
  <?php echo Tribe__View_Helpers::is_24hr_format() ? 'data-format="H:i"' : '' ?>
52
  data-step="<?php echo esc_attr( $timepicker_step ); ?>"
53
  data-round="<?php echo esc_attr( $timepicker_round ); ?>"
54
- value=""
 
55
  />
56
  <span class="helper-text hide-if-js"><?php esc_html_e( 'HH:MM', 'event-tickets' ) ?></span>
57
  <span class="dashicons dashicons-editor-help" title="<?php esc_attr_e( 'If you do not set a start sale date, tickets will be available immediately.', 'event-tickets' ); ?>"></span>
@@ -66,7 +107,7 @@
66
  class="tribe-datepicker tribe-field-end_date ticket_field"
67
  name="ticket_end_date"
68
  id="ticket_end_date"
69
- value=""
70
  />
71
  <span class="helper-text hide-if-js"><?php esc_html_e( 'YYYY-MM-DD', 'event-tickets' ) ?></span>
72
  <span class="datetime_seperator"> <?php esc_html_e( 'at', 'event-tickets' ); ?> </span>
@@ -79,7 +120,8 @@
79
  <?php echo Tribe__View_Helpers::is_24hr_format() ? 'data-format="H:i"' : '' ?>
80
  data-step="<?php echo esc_attr( $timepicker_step ); ?>"
81
  data-round="<?php echo esc_attr( $timepicker_round ); ?>"
82
- value=""
 
83
  />
84
  <span class="helper-text hide-if-js"><?php esc_html_e( 'HH:MM', 'event-tickets' ) ?></span>
85
  <span
@@ -99,10 +141,10 @@
99
  *
100
  * @since 4.6
101
  *
102
- * @param int Post ID
103
- * @param null Ticket ID
104
  */
105
- do_action( 'tribe_events_tickets_metabox_edit_advanced', $post_id, null );
106
  ?>
107
  </div>
108
  </section><!-- #ticket_form_advanced -->
1
+ <?php
2
+ $datepicker_format = Tribe__Date_Utils::datepicker_formats( tribe_get_option( 'datepickerFormat' ) );
3
+
4
+ if ( ! isset( $post_id ) ) {
5
+ $post_id = get_the_ID();
6
+ }
7
+
8
+ if ( ! isset( $ticket_id ) ) {
9
+ $provider = null;
10
+ $ticket_id = null;
11
+ $ticket = null;
12
+ } else {
13
+ $provider = tribe_tickets_get_ticket_provider( $ticket_id );
14
+ $ticket = $provider->get_ticket( $post_id, $ticket_id );
15
+
16
+ if ( $ticket->start_date ) {
17
+ $start_date = Tribe__Date_Utils::date_only( $ticket->start_date, false, $datepicker_format );
18
+ } else {
19
+ $start_date = null;
20
+ }
21
+
22
+ if ( $ticket->end_date ) {
23
+ $end_date = Tribe__Date_Utils::date_only( $ticket->end_date, false, $datepicker_format );
24
+ } else {
25
+ $end_date = null;
26
+ }
27
+ }
28
+
29
+ $timepicker_step = 30;
30
+ if ( class_exists( 'Tribe__Events__Main' ) ) {
31
+ $timepicker_step = (int) tribe( 'tec.admin.event-meta-box' )->get_timepicker_step( 'start' );
32
+ }
33
+
34
+ $timepicker_round = '00:00:00';
35
+
36
+ $start_date_errors = array(
37
+ 'is-required' => __( 'Start sale date cannot be empty.', 'event-tickets' ),
38
+ 'is-less-or-equal-to' => __( 'Start sale date cannot be greater than End Sale date', 'event-tickets' ),
39
+ );
40
+ ?>
41
  <button class="accordion-header tribe_advanced_meta">
42
  <?php esc_html_e( 'Advanced', 'event-tickets' ); ?>
43
  </button>
51
  name="ticket_description"
52
  class="ticket_field ticket_form_right"
53
  id="ticket_description"
54
+ ><?php echo esc_textarea( $ticket ? $ticket->description : null ) ?></textarea>
55
  <div class="input_block">
56
  <label class="tribe_soft_note">
57
  <input
60
  name="ticket_show_description"
61
  value="1"
62
  class="ticket_field ticket_form_left"
63
+ <?php checked( true, $ticket ? $ticket->show_description : true ); ?>
64
  >
65
  <?php esc_html_e( 'Show description on front end ticket form.', 'event-tickets' ); ?>
66
  </label>
75
  class="tribe-datepicker tribe-field-start_date ticket_field"
76
  name="ticket_start_date"
77
  id="ticket_start_date"
78
+ value="<?php echo esc_attr( $ticket ? $start_date : null ); ?>"
79
  data-validation-type="datepicker"
80
  data-validation-is-less-or-equal-to="#ticket_end_date"
81
  data-validation-error="<?php echo esc_attr( json_encode( $start_date_errors ) ) ?>"
91
  <?php echo Tribe__View_Helpers::is_24hr_format() ? 'data-format="H:i"' : '' ?>
92
  data-step="<?php echo esc_attr( $timepicker_step ); ?>"
93
  data-round="<?php echo esc_attr( $timepicker_round ); ?>"
94
+ value="<?php echo esc_attr( $ticket ? $ticket->start_time : null ); ?>"
95
+ aria-label="<?php esc_html_e( 'Ticket start date', 'event-tickets' ); ?>"
96
  />
97
  <span class="helper-text hide-if-js"><?php esc_html_e( 'HH:MM', 'event-tickets' ) ?></span>
98
  <span class="dashicons dashicons-editor-help" title="<?php esc_attr_e( 'If you do not set a start sale date, tickets will be available immediately.', 'event-tickets' ); ?>"></span>
107
  class="tribe-datepicker tribe-field-end_date ticket_field"
108
  name="ticket_end_date"
109
  id="ticket_end_date"
110
+ value="<?php echo esc_attr( $ticket ? $end_date : null ); ?>"
111
  />
112
  <span class="helper-text hide-if-js"><?php esc_html_e( 'YYYY-MM-DD', 'event-tickets' ) ?></span>
113
  <span class="datetime_seperator"> <?php esc_html_e( 'at', 'event-tickets' ); ?> </span>
120
  <?php echo Tribe__View_Helpers::is_24hr_format() ? 'data-format="H:i"' : '' ?>
121
  data-step="<?php echo esc_attr( $timepicker_step ); ?>"
122
  data-round="<?php echo esc_attr( $timepicker_round ); ?>"
123
+ value="<?php echo esc_attr( $ticket ? $ticket->end_time : null ); ?>"
124
+ aria-label="<?php esc_html_e( 'Ticket end date', 'event-tickets' ); ?>"
125
  />
126
  <span class="helper-text hide-if-js"><?php esc_html_e( 'HH:MM', 'event-tickets' ) ?></span>
127
  <span
141
  *
142
  * @since 4.6
143
  *
144
+ * @param int $post_id Post ID
145
+ * @param int|null $ticket_id Ticket ID
146
  */
147
+ do_action( 'tribe_events_tickets_metabox_edit_advanced', $post_id, $ticket_id );
148
  ?>
149
  </div>
150
  </section><!-- #ticket_form_advanced -->
src/admin-views/{tickets-history.php → editor/fieldset/history.php} RENAMED
@@ -1,7 +1,15 @@
1
  <?php
2
- // If we don't have an Ticket ID we bail
3
- if ( empty( $ticket ) ) {
4
- return;
 
 
 
 
 
 
 
 
5
  }
6
 
7
  $history = Tribe__Post_History::load( $ticket );
1
  <?php
2
+ if ( ! isset( $post_id ) ) {
3
+ $post_id = get_the_ID();
4
+ }
5
+
6
+ if ( ! isset( $ticket_id ) ) {
7
+ $provider = null;
8
+ $ticket_id = null;
9
+ $ticket = null;
10
+ } else {
11
+ $provider = tribe_tickets_get_ticket_provider( $ticket_id );
12
+ $ticket = $provider->get_ticket( $post_id, $ticket_id );
13
  }
14
 
15
  $history = Tribe__Post_History::load( $ticket );
src/admin-views/editor/list-row.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $provider = $ticket->provider_class;
3
+ $provider_obj = call_user_func( array( $provider, 'get_instance' ) );
4
+ $inventory = $ticket->inventory();
5
+ $available = $ticket->available();
6
+ $capacity = $ticket->capacity();
7
+ $stock = $ticket->stock();
8
+ $needs_warning = false;
9
+ $mode = $ticket->global_stock_mode();
10
+ $event = $ticket->get_event();
11
+
12
+ // If we don't have an event we should't even continue
13
+ if ( ! $event ) {
14
+ return;
15
+ }
16
+
17
+ if (
18
+ 'Tribe__Tickets_Plus__Commerce__WooCommerce__Main' === $ticket->provider_class
19
+ && -1 !== $capacity
20
+ ) {
21
+ $product = wc_get_product( $ticket->ID );
22
+ $shared_stock = new Tribe__Tickets__Global_Stock( $event->ID );
23
+ $needs_warning = (int) $inventory !== (int) $stock;
24
+
25
+ // We remove the warning flag when shared stock is used
26
+ if ( $shared_stock->is_enabled() && (int) $stock >= (int) $shared_stock->get_stock_level() ) {
27
+ $needs_warning = false;
28
+ }
29
+ }
30
+
31
+ ?>
32
+ <tr class="<?php echo esc_attr( $provider ); ?> is-expanded" data-ticket-order-id="order_<?php echo esc_attr( $ticket->ID ); ?>" data-ticket-type-id="<?php echo esc_attr( $ticket->ID ); ?>">
33
+ <td class="column-primary ticket_name <?php echo esc_attr( $provider ); ?>" data-label="<?php esc_html_e( 'Ticket Type:', 'event-tickets' ); ?>">
34
+ <span class="dashicons dashicons-screenoptions tribe-handle"></span>
35
+ <input
36
+ type="hidden"
37
+ class="tribe-ticket-field-order"
38
+ name="tribe-tickets[list][<?php echo esc_attr( $ticket->ID ); ?>][order]"
39
+ value="<?php echo esc_attr( $ticket->menu_order ); ?>"
40
+ <?php echo 'Tribe__Tickets__RSVP' === $ticket->provider_class ? 'disabled' : ''; ?>
41
+ >
42
+ <?php echo esc_html( $ticket->name ); ?>
43
+ </td>
44
+
45
+ <?php
46
+ /**
47
+ * Allows for the insertion of additional content into the main ticket admin panel after the tickets listing
48
+ *
49
+ * @since 4.6
50
+ *
51
+ * @param Tribe__Tickets__Ticket_Object $ticket
52
+ * @param obj ecommerce provider object
53
+ */
54
+ do_action( 'tribe_events_tickets_ticket_table_add_tbody_column', $ticket, $provider_obj );
55
+ ?>
56
+
57
+ <td class="ticket_capacity">
58
+ <span class='tribe-mobile-only'><?php esc_html_e( 'Capacity:', 'event-tickets' ); ?></span>
59
+ <?php tribe_tickets_get_readable_amount( $capacity, $mode, true ); ?>
60
+ </td>
61
+
62
+ <td class="ticket_available">
63
+ <span class='tribe-mobile-only'><?php esc_html_e( 'Available:', 'event-tickets' ); ?></span>
64
+ <?php if ( $needs_warning ) : ?>
65
+ <span class="dashicons dashicons-warning required" title="<?php esc_attr_e( 'The number of Complete ticket sales does not match the number of attendees. Please check the Attendees list and adjust ticket stock in WooCommerce as needed.', 'event-tickets' ) ?>"></span>
66
+ <?php endif; ?>
67
+
68
+ <?php tribe_tickets_get_readable_amount( $available, $mode, true ); ?>
69
+ </td>
70
+
71
+ <td class="ticket_edit">
72
+ <?php
73
+ printf(
74
+ "<button data-provider='%s' data-ticket-id='%s' title='%s' class='ticket_edit_button'><span class='ticket_edit_text'>%s</span></a>",
75
+ esc_attr( $ticket->provider_class ),
76
+ esc_attr( $ticket->ID ),
77
+ esc_attr( sprintf( __( '( Ticket ID: %d )', 'tribe-tickets' ), $ticket->ID ) ),
78
+ esc_html( $ticket->name )
79
+ );
80
+ ?>
81
+ </td>
82
+ </tr>
src/admin-views/{list.php → editor/list-table.php} RENAMED
@@ -1,28 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) : ?>
2
  <div id="ticket_list_wrapper">
3
  <?php endif; ?>
4
 
5
  <table id="tribe_ticket_list_table" class="tribe-tickets-editor-table eventtable ticket_list eventForm widefat fixed">
6
- <?php
7
- global $post;
8
- $provider = null;
9
- $post_type = 'post';
10
-
11
- if ( $post ) {
12
- $post_id = get_the_ID();
13
- $post_type = $post->post_type;
14
- } else {
15
- $post_id = $_POST['post_ID'];
16
-
17
- if ( ! empty( $_POST['post_type'] ) ) {
18
- $post_type = $_POST['post_type'];
19
- } elseif ( ! empty( $_GET['post_type'] ) ) {
20
- $post_type = $_GET['post_type'];
21
- }
22
- }
23
-
24
- $modules = Tribe__Tickets__Tickets::modules();
25
- ?>
26
  <thead>
27
  <tr class="table-header">
28
  <th class="ticket_name column-primary"><?php esc_html_e( 'Tickets', 'event-tickets' ); ?></th>
@@ -56,7 +58,7 @@
56
  <?php
57
  if ( ! empty( $tickets ) ) {
58
  foreach ( $tickets as $ticket ) {
59
- tribe( 'tickets.handler' )->render_ticket_row( $ticket );
60
  }
61
  }
62
  ?>
@@ -66,7 +68,7 @@
66
  <?php
67
  if ( ! empty( $rsvp ) ) {
68
  foreach ( $rsvp as $ticket ) {
69
- tribe( 'tickets.handler' )->render_ticket_row( $ticket );
70
  }
71
  }
72
  ?>
@@ -76,4 +78,4 @@
76
 
77
  <?php if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) : ?>
78
  </div>
79
- <?php endif;
1
+ <?php
2
+ if ( ! isset( $post_id ) ) {
3
+ $post_id = get_the_ID();
4
+ }
5
+
6
+ if ( ! $post_id ) {
7
+ $post_id = tribe_get_request_var( 'post_id', 0 );
8
+ }
9
+
10
+ // Makes sure we are dealing an int
11
+ $post_id = (int) $post_id;
12
+
13
+ if ( 0 === $post_id ) {
14
+ $post_type = tribe_get_request_var( 'post_type', 'post' );
15
+ } else {
16
+ $post_type = get_post_type( $post_id );
17
+ }
18
+
19
+ $modules = Tribe__Tickets__Tickets::modules();
20
+ ?>
21
+
22
+
23
  <?php if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) : ?>
24
  <div id="ticket_list_wrapper">
25
  <?php endif; ?>
26
 
27
  <table id="tribe_ticket_list_table" class="tribe-tickets-editor-table eventtable ticket_list eventForm widefat fixed">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  <thead>
29
  <tr class="table-header">
30
  <th class="ticket_name column-primary"><?php esc_html_e( 'Tickets', 'event-tickets' ); ?></th>
58
  <?php
59
  if ( ! empty( $tickets ) ) {
60
  foreach ( $tickets as $ticket ) {
61
+ tribe( 'tickets.admin.views' )->template( array( 'editor', 'list-row' ), array( 'ticket' => $ticket ) );
62
  }
63
  }
64
  ?>
68
  <?php
69
  if ( ! empty( $rsvp ) ) {
70
  foreach ( $rsvp as $ticket ) {
71
+ tribe( 'tickets.admin.views' )->template( array( 'editor', 'list-row' ), array( 'ticket' => $ticket ) );
72
  }
73
  }
74
  ?>
78
 
79
  <?php if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) : ?>
80
  </div>
81
+ <?php endif;
src/admin-views/editor/metabox.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var WP_Post $post
4
+ * @var bool $show_global_stock
5
+ * @var Tribe__Tickets__Global_Stock $global_stock
6
+ */
7
+
8
+ // Don't load directly
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ die( '-1' );
11
+ }
12
+ $post_id = get_the_ID();
13
+ ?>
14
+
15
+ <div class="tribe-tickets-editor-blocker">
16
+ <span class="spinner"></span>
17
+ </div>
18
+
19
+ <div id="event_tickets" class="eventtable" aria-live="polite">
20
+ <?php wp_nonce_field( 'tribe-tickets-meta-box', 'tribe-tickets-post-settings' ); ?>
21
+
22
+ <?php tribe( 'tickets.admin.views' )->template( array( 'editor', 'panel', 'list' ), get_defined_vars() ); ?>
23
+
24
+ <?php tribe( 'tickets.admin.views' )->template( array( 'editor', 'panel', 'ticket' ), get_defined_vars() ); ?>
25
+
26
+ <?php tribe( 'tickets.admin.views' )->template( array( 'editor', 'panel', 'settings' ), get_defined_vars() ); ?>
27
+
28
+ </div>
src/admin-views/{base_admin_panel.php → editor/panel/list.php} RENAMED
@@ -1,11 +1,17 @@
1
  <?php
 
2
  $total_tickets = tribe( 'tickets.handler' )->get_total_event_capacity( $post_id );
3
  $container_class = 'tribe_sectionheader ticket_list_container';
4
  $container_class .= ( empty( $total_tickets ) ) ? ' tribe_no_capacity' : '' ;
5
  ?>
6
- <div id="tribe_panel_base" class="ticket_panel panel_base" aria-hidden="false" data-save-prompt="<?php echo esc_attr( __( 'You have unsaved changes to your tickets. Discard those changes?', 'event-tickets' ) ); ?>">
 
 
 
 
 
7
  <div class="<?php echo esc_attr( $container_class ); ?>">
8
- <?php if ( ! empty( $total_tickets ) ) : ?>
9
  <div class="ticket_table_intro">
10
  <?php
11
  /**
@@ -33,28 +39,8 @@ $container_class .= ( empty( $total_tickets ) ) ? ' tribe_no_capacity' : '' ;
33
  <?php esc_html_e( 'View Attendees', 'event-tickets' ); ?>
34
  </a>
35
  </div>
 
36
  <?php endif; ?>
37
- <?php
38
- /**
39
- * Allows for the insertion of additional content into the main ticket admin panel before the tickets listing
40
- *
41
- * @since 4.6
42
- *
43
- * @param int $post_id the id of the post
44
- */
45
- do_action( 'tribe_events_tickets_pre_ticket_list', $post_id );
46
-
47
- $this->ticket_list_markup( $post_id, $tickets );
48
-
49
- /**
50
- * Allows for the insertion of additional content into the main ticket admin panel after the tickets listing
51
- *
52
- * @since 4.6
53
- *
54
- * @param int $post_id the id of the post
55
- */
56
- do_action( 'tribe_events_tickets_post_ticket_list', $post_id );
57
- ?>
58
  </div>
59
  <div>
60
  <?php
@@ -103,4 +89,4 @@ $container_class .= ( empty( $total_tickets ) ) ? ' tribe_no_capacity' : '' ;
103
  do_action( 'tribe_events_tickets_after_new_ticket_panel', $post_id );
104
  ?>
105
 
106
- </div><!-- #panel_base -->
1
  <?php
2
+ $attendees_url = tribe( 'tickets.attendees' )->get_report_link( get_post( $post_id ) );
3
  $total_tickets = tribe( 'tickets.handler' )->get_total_event_capacity( $post_id );
4
  $container_class = 'tribe_sectionheader ticket_list_container';
5
  $container_class .= ( empty( $total_tickets ) ) ? ' tribe_no_capacity' : '' ;
6
  ?>
7
+ <div
8
+ id="tribe_panel_base"
9
+ class="ticket_panel panel_base"
10
+ aria-hidden="false"
11
+ data-save-prompt="<?php echo esc_attr( __( 'You have unsaved changes to your tickets. Discard those changes?', 'event-tickets' ) ); ?>"
12
+ >
13
  <div class="<?php echo esc_attr( $container_class ); ?>">
14
+ <?php if ( ! empty( $tickets ) ) : ?>
15
  <div class="ticket_table_intro">
16
  <?php
17
  /**
39
  <?php esc_html_e( 'View Attendees', 'event-tickets' ); ?>
40
  </a>
41
  </div>
42
+ <?php tribe( 'tickets.admin.views' )->template( 'editor/list-table', array( 'tickets' => $tickets ) ); ?>
43
  <?php endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  </div>
45
  <div>
46
  <?php
89
  do_action( 'tribe_events_tickets_after_new_ticket_panel', $post_id );
90
  ?>
91
 
92
+ </div>
src/admin-views/{settings_admin_panel.php → editor/panel/settings.php} RENAMED
@@ -1,5 +1,5 @@
1
  <?php
2
- $header_id = get_post_meta( $post_id, $this->image_header_field, true );
3
  $header_id = ! empty( $header_id ) ? $header_id : '';
4
  $header_img = '';
5
  $header_filename = '';
@@ -28,24 +28,44 @@ if ( ! empty( $header_id ) ) {
28
  <div class="tribe-tickets-image-upload">
29
  <div class="input_block">
30
  <span class="ticket_form_label"><?php esc_html_e( 'Ticket header image:', 'event-tickets' ); ?></span>
31
- <p class="description"><?php esc_html_e( 'Select an image from your Media Library to display on emailed tickets. For best results, use a .jpg, .png, or .gif at least 1160px wide.', 'event-tickets' ); ?></p>
 
 
32
  </div>
33
- <input type="button" class="button" name="tribe_ticket_header_image" id="tribe_ticket_header_image" value="<?php esc_html_e( 'Select an Image', 'event-tickets' ); ?>" />
34
- <span id="tribe_tickets_image_preview_filename" class="<?php echo ! empty( $header_filename )? esc_attr( '-active' ): ''; ?>"><span class="dashicons dashicons-format-image"></span><span class="filename"><?php echo esc_html( $header_filename ); ?></span></span>
 
 
 
 
 
 
 
 
 
 
35
  </div>
36
  <div class="tribe-tickets-image-preview">
37
- <a class="tribe_preview" id="tribe_ticket_header_preview">
38
- <?php
39
- // Can't escape - mixed html
40
- echo $header_img;
41
- ?>
42
- </a>
43
- <p class="description"><a href="#" id="tribe_ticket_header_remove"><?php esc_html_e( 'Remove', 'event-tickets' ); ?></a></p>
 
 
44
 
45
- <input type="hidden" id="tribe_ticket_header_image_id" class="settings_field" name="tribe_ticket_header_image_id" value="<?php echo esc_attr( $header_id ); ?>" />
 
 
 
 
 
 
46
  </div>
47
  </section>
48
 
49
  <input type="button" id="tribe_settings_form_save" name="tribe_settings_form_save" value="<?php esc_attr_e( 'Save settings', 'event-tickets' ); ?>" class="button-primary" />
50
  <input type="button" id="tribe_settings_form_cancel" name="tribe_settings_form_cancel" value="<?php esc_attr_e( 'Cancel', 'event-tickets' ); ?>" class="button-secondary" />
51
- </div><!-- #tribe_panel_settings -->
1
  <?php
2
+ $header_id = get_post_meta( $post_id, tribe( 'tickets.handler' )->key_image_header, true );
3
  $header_id = ! empty( $header_id ) ? $header_id : '';
4
  $header_img = '';
5
  $header_filename = '';
28
  <div class="tribe-tickets-image-upload">
29
  <div class="input_block">
30
  <span class="ticket_form_label"><?php esc_html_e( 'Ticket header image:', 'event-tickets' ); ?></span>
31
+ <p class="description">
32
+ <?php esc_html_e( 'Select an image from your Media Library to display on emailed tickets. For best results, use a .jpg, .png, or .gif at least 1160px wide.', 'event-tickets' ); ?>
33
+ </p>
34
  </div>
35
+ <input
36
+ type="button"
37
+ class="button"
38
+ name="tribe-tickets[settings][header_image]"
39
+ id="tribe_ticket_header_image"
40
+ value="<?php esc_html_e( 'Select an Image', 'event-tickets' ); ?>"
41
+ />
42
+
43
+ <span id="tribe_tickets_image_preview_filename" class="<?php echo ! empty( $header_filename )? esc_attr( '-active' ): ''; ?>">
44
+ <span class="dashicons dashicons-format-image"></span>
45
+ <span class="filename"><?php echo esc_html( $header_filename ); ?></span>
46
+ </span>
47
  </div>
48
  <div class="tribe-tickets-image-preview">
49
+ <a class="tribe_preview" id="tribe_ticket_header_preview">
50
+ <?php
51
+ // Can't escape - mixed html
52
+ echo $header_img;
53
+ ?>
54
+ </a>
55
+ <p class="description">
56
+ <a href="#" id="tribe_ticket_header_remove"><?php esc_html_e( 'Remove', 'event-tickets' ); ?></a>
57
+ </p>
58
 
59
+ <input
60
+ type="hidden"
61
+ id="tribe_ticket_header_image_id"
62
+ class="settings_field"
63
+ name="tribe-tickets[settings][header_image_id]"
64
+ value="<?php echo esc_attr( $header_id ); ?>"
65
+ />
66
  </div>
67
  </section>
68
 
69
  <input type="button" id="tribe_settings_form_save" name="tribe_settings_form_save" value="<?php esc_attr_e( 'Save settings', 'event-tickets' ); ?>" class="button-primary" />
70
  <input type="button" id="tribe_settings_form_cancel" name="tribe_settings_form_cancel" value="<?php esc_attr_e( 'Cancel', 'event-tickets' ); ?>" class="button-secondary" />
71
+ </div>
src/admin-views/{edit_admin_panel.php → editor/panel/ticket.php} RENAMED
@@ -1,15 +1,20 @@
1
  <?php
2
- $timepicker_step = 30;
3
- if ( class_exists( 'Tribe__Events__Main' ) ) {
4
- $timepicker_step = (int) tribe( 'tec.admin.event-meta-box' )->get_timepicker_step( 'start' );
5
  }
6
 
7
- $timepicker_round = '00:00:00';
 
 
 
 
 
 
 
 
 
8
 
9
- $start_date_errors = array(
10
- 'is-required' => __( 'Start sale date cannot be empty.', 'event-tickets' ),
11
- 'is-greater-or-equal-to' => __( 'Start sale date cannot be greater than End Sale date', 'event-tickets' ),
12
- );
13
  ?>
14
 
15
  <div id="tribe_panel_edit" class="ticket_panel panel_edit tribe-validation" aria-hidden="true">
@@ -20,8 +25,9 @@ $start_date_errors = array(
20
  * @since 4.6
21
  *
22
  * @param int Post ID
 
23
  */
24
- do_action( 'tribe_events_tickets_pre_edit', $post_id );
25
  ?>
26
 
27
  <div id="ticket_form" class="ticket_form tribe_sectionheader">
@@ -79,7 +85,7 @@ $start_date_errors = array(
79
  name='ticket_name'
80
  class="ticket_field ticket_form_right"
81
  size='25'
82
- value=''
83
  data-validation-is-required
84
  data-validation-error="<?php esc_attr_e( 'Ticket Type is a required field.', 'event-tickets' ); ?>"
85
  />
@@ -95,6 +101,7 @@ $start_date_errors = array(
95
  value="<?php echo esc_attr( $class ); ?>"
96
  class="ticket_field ticket_provider"
97
  tabindex="-1"
 
98
  >
99
  <span>
100
  <?php
@@ -117,14 +124,16 @@ $start_date_errors = array(
117
  * @since 4.6
118
  *
119
  * @param int Post ID
120
- * @param null Ticket ID
121
  */
122
- do_action( 'tribe_events_tickets_metabox_edit_main', $post_id, null ); ?>
123
  </section>
124
 
125
  <div class="accordion">
126
- <?php require_once( 'tickets-advanced.php' ); ?>
127
- <?php require_once( 'tickets-history.php' ); ?>
 
 
128
  <?php
129
  /**
130
  * Allows for the insertion of additional content sections into the ticket edit form accordion
@@ -132,9 +141,9 @@ $start_date_errors = array(
132
  * @since 4.6
133
  *
134
  * @param int Post ID
135
- * @param null Ticket ID
136
  */
137
- do_action( 'tribe_events_tickets_metabox_edit_accordion_content', $post_id, null );
138
  ?>
139
  </div>
140
 
@@ -145,11 +154,18 @@ $start_date_errors = array(
145
  * @since 4.6
146
  *
147
  * @param int Post ID
 
148
  */
149
- do_action( 'tribe_events_tickets_post_accordion', $post_id );
150
  ?>
151
  <div class="ticket_bottom">
152
- <input type="hidden" name="ticket_id" id="ticket_id" class="ticket_field" />
 
 
 
 
 
 
153
  <input
154
  type="button"
155
  id="ticket_form_save"
@@ -168,7 +184,13 @@ $start_date_errors = array(
168
  data-depends="#Tribe__Tickets__RSVP_radio"
169
  data-condition-is-checked
170
  />
171
- <input type="button" id="ticket_form_cancel" class="button-secondary" name="ticket_form_cancel" value="<?php esc_attr_e( 'Cancel', 'event-tickets' ); ?>" />
 
 
 
 
 
 
172
 
173
  <?php
174
  /**
@@ -177,8 +199,9 @@ $start_date_errors = array(
177
  * @since 4.6
178
  *
179
  * @param int Post ID
 
180
  */
181
- do_action( 'tribe_events_tickets_bottom', $post_id );
182
  ?>
183
 
184
  <div id="ticket_bottom_right">
@@ -189,12 +212,12 @@ $start_date_errors = array(
189
  * @since 4.6
190
  *
191
  * @param int Post ID
 
192
  */
193
- do_action( 'tribe_events_tickets_bottom_right', $post_id );
194
  ?>
195
  </div>
196
  </div>
197
-
198
- </div><!-- #ticket_form_table -->
199
- </div><!-- #ticket_form -->
200
- </div><!-- #tribe_panel_edit -->
1
  <?php
2
+ if ( ! isset( $post_id ) ) {
3
+ $post_id = get_the_ID();
 
4
  }
5
 
6
+ if ( ! isset( $ticket_id ) ) {
7
+ $provider = null;
8
+ $provider_class = null;
9
+ $ticket_id = null;
10
+ $ticket = null;
11
+ } else {
12
+ $provider = tribe_tickets_get_ticket_provider( $ticket_id );
13
+ $provider_class = get_class( $provider );
14
+ $ticket = $provider->get_ticket( $post_id, $ticket_id );
15
+ }
16
 
17
+ $modules = Tribe__Tickets__Tickets::modules();
 
 
 
18
  ?>
19
 
20
  <div id="tribe_panel_edit" class="ticket_panel panel_edit tribe-validation" aria-hidden="true">
25
  * @since 4.6
26
  *
27
  * @param int Post ID
28
+ * @param int Ticket ID
29
  */
30
+ do_action( 'tribe_events_tickets_pre_edit', $post_id, $ticket_id );
31
  ?>
32
 
33
  <div id="ticket_form" class="ticket_form tribe_sectionheader">
85
  name='ticket_name'
86
  class="ticket_field ticket_form_right"
87
  size='25'
88
+ value="<?php echo esc_attr( $ticket ? $ticket->name : null ); ?>"
89
  data-validation-is-required
90
  data-validation-error="<?php esc_attr_e( 'Ticket Type is a required field.', 'event-tickets' ); ?>"
91
  />
101
  value="<?php echo esc_attr( $class ); ?>"
102
  class="ticket_field ticket_provider"
103
  tabindex="-1"
104
+ <?php checked( true, $provider_class ? $provider_class === $class : false ); ?>
105
  >
106
  <span>
107
  <?php
124
  * @since 4.6
125
  *
126
  * @param int Post ID
127
+ * @param int Ticket ID
128
  */
129
+ do_action( 'tribe_events_tickets_metabox_edit_main', $post_id, $ticket_id ); ?>
130
  </section>
131
 
132
  <div class="accordion">
133
+ <?php tribe( 'tickets.admin.views' )->template( 'editor/fieldset/advanced', array( 'post_id' => $post_id, 'ticket_id' => $ticket_id ) ); ?>
134
+
135
+ <?php tribe( 'tickets.admin.views' )->template( 'editor/fieldset/history', array( 'post_id' => $post_id, 'ticket_id' => $ticket_id ) ); ?>
136
+
137
  <?php
138
  /**
139
  * Allows for the insertion of additional content sections into the ticket edit form accordion
141
  * @since 4.6
142
  *
143
  * @param int Post ID
144
+ * @param int Ticket ID
145
  */
146
+ do_action( 'tribe_events_tickets_metabox_edit_accordion_content', $post_id, $ticket_id );
147
  ?>
148
  </div>
149
 
154
  * @since 4.6
155
  *
156
  * @param int Post ID
157
+ * @param int Ticket ID
158
  */
159
+ do_action( 'tribe_events_tickets_post_accordion', $post_id, $ticket_id );
160
  ?>
161
  <div class="ticket_bottom">
162
+ <input
163
+ type="hidden"
164
+ name="ticket_id"
165
+ id="ticket_id"
166
+ class="ticket_field"
167
+ value="<?php echo esc_attr( $ticket_id ); ?>"
168
+ />
169
  <input
170
  type="button"
171
  id="ticket_form_save"
184
  data-depends="#Tribe__Tickets__RSVP_radio"
185
  data-condition-is-checked
186
  />
187
+ <input
188
+ type="button"
189
+ id="ticket_form_cancel"
190
+ class="button-secondary"
191
+ name="ticket_form_cancel"
192
+ value="<?php esc_attr_e( 'Cancel', 'event-tickets' ); ?>"
193
+ />
194
 
195
  <?php
196
  /**
199
  * @since 4.6
200
  *
201
  * @param int Post ID
202
+ * @param int Ticket ID
203
  */
204
+ do_action( 'tribe_events_tickets_bottom', $post_id, $ticket_id );
205
  ?>
206
 
207
  <div id="ticket_bottom_right">
212
  * @since 4.6
213
  *
214
  * @param int Post ID
215
+ * @param int Ticket ID
216
  */
217
+ do_action( 'tribe_events_tickets_bottom_right', $post_id, $ticket_id );
218
  ?>
219
  </div>
220
  </div>
221
+ </div>
222
+ </div>
223
+ </div>
 
src/admin-views/meta-box.php DELETED
@@ -1,36 +0,0 @@
1
- <?php
2
- /**
3
- * @var WP_Post $post
4
- * @var bool $show_global_stock
5
- * @var Tribe__Tickets__Global_Stock $global_stock
6
- */
7
-
8
- // Don't load directly
9
- if ( ! defined( 'ABSPATH' ) ) {
10
- die( '-1' );
11
- }
12
- $post_id = get_the_ID();
13
-
14
- $modules = Tribe__Tickets__Tickets::modules();
15
-
16
- $attendees_url = tribe( 'tickets.handler' )->get_attendee_report_link( get_post( $post_id ) );
17
- ?>
18
-
19
- <div class="tribe-tickets-editor-blocker">
20
- <span class="spinner"></span>
21
- </div>
22
-
23
- <div id="event_tickets" class="eventtable" aria-live="polite">
24
- <?php
25
- wp_nonce_field( 'tribe-tickets-meta-box', 'tribe-tickets-post-settings' );
26
-
27
- // the main panel
28
- require_once( 'base_admin_panel.php' );
29
-
30
- // the add/edit panel
31
- require_once( 'edit_admin_panel.php' );
32
-
33
- // the settings panel
34
- require_once( 'settings_admin_panel.php' );
35
- ?>
36
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/admin-views/rsvp-metabox-capacity.php CHANGED
@@ -4,7 +4,7 @@
4
  data-condition-is-checked
5
  >
6
  <label
7
- for="Tribe__Tickets__RSVP_stock"
8
  class="ticket_form_label ticket_form_left"
9
  >
10
  <?php esc_html_e( 'Capacity:', 'event-tickets' ); ?>
4
  data-condition-is-checked
5
  >
6
  <label
7
+ for="Tribe__Tickets__RSVP_capacity"
8
  class="ticket_form_label ticket_form_left"
9
  >
10
  <?php esc_html_e( 'Capacity:', 'event-tickets' ); ?>
src/resources/css/rsvp.css CHANGED
@@ -197,6 +197,10 @@
197
  font-size: 90%;
198
  }
199
 
 
 
 
 
200
  /* Tickets Table */
201
 
202
  .tribe-events-tickets {
197
  font-size: 90%;
198
  }
199
 
200
+ .tribe-link-view-attendee {
201
+ margin: 15px 0;
202
+ }
203
+
204
  /* Tickets Table */
205
 
206
  .tribe-events-tickets {
src/resources/css/rsvp.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-rsvp{padding:20px 0}.tribe-tickets-meta-row{display:none}.tribe-tickets-has-rsvp .tribe-tickets-meta-row{display:table-row}.tribe-tickets-attendee{padding:10px}.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee table,.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee td,.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee tr,.tribe-events-tickets .tribe-tickets-attendee table,.tribe-events-tickets .tribe-tickets-attendee td,.tribe-events-tickets .tribe-tickets-attendee tr{border:0}.tribe-rsvp-message-display .tribe-rsvp-messages{display:block}.tribe-rsvp-messages{display:none;padding:10px 10px 5px}.tribe-rsvp-message{border-radius:3px;border-style:solid;border-width:1px;font-size:12px;margin:0 0 5px;padding:0 .6em}.tribe-rsvp-message-success{background-color:#ffffe0;border-color:#e6db55}.tribe-rsvp-message-error{background-color:#ffebe8;border-color:#c00}.tribe-ticket-quantity{width:100%}.tickets-unavailable{font-style:italic}.tribe-rsvp-list{list-style:none;padding:0;margin:0}.tribe-rsvp-list>.tribe-item{min-height:105px;padding:20px;border:1px solid #ededed;border-bottom:0}.tribe-rsvp-list>.tribe-item:last-child{border-bottom:1px solid #ededed;margin-bottom:20px}.tribe-rsvp-list>.tribe-item.tribe-disabled{background-color:#efefef;border-color:#ddd;color:#717171}.tribe-rsvp-list>.tribe-item.tribe-disabled:last-child{border-bottom-color:#ddd}.tribe-rsvp-list>.tribe-item .tribe-answer{float:right;display:inline-block}.tribe-rsvp-list>.tribe-item table{border:0;margin:0}.tribe-rsvp-list>.tribe-item td{border:0}.list-attendee{color:#999;display:inline-block;letter-spacing:1px;text-transform:uppercase}.tribe-submit-tickets-form{margin-top:20px}.user-details{margin:0 0 1.5em}.user-details p{margin:0 0 .5em}.tribe-answer{line-height:2}.tribe-answer .type-label{margin-bottom:0;padding-right:.5em}.tribe-answer label{display:block}.tribe-answer select{background:#fff;border:1px solid #ddd;height:30px;line-height:1;margin-left:5px}.tribe-rsvp h2{margin-bottom:20px;line-height:1.2}.event-tickets-meta-label{font-weight:700;margin:0 1em 0 0}.tribe-theme-parent-twentysixteen .comment-content a,.tribe-theme-parent-twentysixteen .entry-content a,.tribe-theme-parent-twentysixteen .entry-footer a:hover,.tribe-theme-parent-twentysixteen .entry-summary a,.tribe-theme-parent-twentysixteen .logged-in-as a,.tribe-theme-parent-twentysixteen .pingback .comment-body>a,.tribe-theme-parent-twentysixteen .site-info a:hover,.tribe-theme-parent-twentysixteen .taxonomy-description a,.tribe-theme-parent-twentysixteen .textwidget a,.tribe-theme-twentysixteen .comment-content a,.tribe-theme-twentysixteen .entry-content a,.tribe-theme-twentysixteen .entry-footer a:hover,.tribe-theme-twentysixteen .entry-summary a,.tribe-theme-twentysixteen .logged-in-as a,.tribe-theme-twentysixteen .pingback .comment-body>a,.tribe-theme-twentysixteen .site-info a:hover,.tribe-theme-twentysixteen .taxonomy-description a,.tribe-theme-twentysixteen .textwidget a{box-shadow:none}.tribe-events-tickets-title.tribe--rsvp{margin:0}.tribe-events-style-full.tribe-events-style-theme h2.tribe-events-tickets-title{font-size:90%}.tribe-events-tickets{background:#f8f8f8;border:0;border-radius:3px;position:relative}.tribe-events-tickets .woocommerce.add-to-cart,.tribe-events-tickets table,.tribe-events-tickets td,.tribe-events-tickets th{border:0}.tribe-events-tickets td{padding:8px 10px}.tribe-events-tickets .woocommerce.add-to-cart{padding:16px}.tribe-events-tickets .tickets_description,.tribe-events-tickets .tickets_name,.tribe-events-tickets .tickets_price,.tribe-events-tickets .woocommerce{border-bottom:1px solid #dfdfdf}.tribe-events-tickets .woocommerce .quantity input{background-color:#fff;border-radius:3px;margin-bottom:5px;padding:5px 10px;text-align:left;width:4.375em}.tribe-events-tickets .tribe-link-tickets-message{background:hsla(0,0%,78%,.8);bottom:0;left:0;position:absolute;right:0;text-align:center;top:0}.tribe-events-tickets .tribe-link-tickets-message .no-javascript-msg{left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:90%}.tribe-events-tickets .tribe-tickets-remaining{color:#777;display:block;font-size:11px}.tribe-events-tickets .tribe-tickets-attendees-list-optout label{color:#777;font-size:13px}.tribe-events-tickets .tribe-tickets-attendees-list-optout input[type=checkbox]+label,.tribe-events-tickets .tribe-tickets-attendees-list-optout input[type=radio]+label{display:inline-block}.tribe-events-tickets .tickets_description,.tribe-events-tickets .tickets_name,.tribe-events-tickets .tickets_name p,.tribe-events-tickets .tickets_price{border-bottom:1px solid #dfdfdf;color:#464646;font-size:15px;padding:16px 10px}.tribe-events-tickets input[type=date],.tribe-events-tickets input[type=datetime-local],.tribe-events-tickets input[type=email],.tribe-events-tickets input[type=month],.tribe-events-tickets input[type=number],.tribe-events-tickets input[type=password],.tribe-events-tickets input[type=search],.tribe-events-tickets input[type=tel],.tribe-events-tickets input[type=text],.tribe-events-tickets input[type=time],.tribe-events-tickets input[type=url],.tribe-events-tickets input[type=week],.tribe-events-tickets select,.tribe-events-tickets textarea{background:#fff}.tribe-events-tickets header{height:auto}.tribe-events-tickets-rsvp .tribe-ticket.quantity{border-bottom:1px solid #dfdfdf;width:192px}.tribe-events-tickets-rsvp .tribe-ticket.quantity input{margin-bottom:5px;padding:5px 10px;width:4.375em}
1
+ .tribe-rsvp{padding:20px 0}.tribe-tickets-meta-row{display:none}.tribe-tickets-has-rsvp .tribe-tickets-meta-row{display:table-row}.tribe-tickets-attendee{padding:10px}.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee table,.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee td,.tribe-events-style-full .tribe-events-tickets .tribe-tickets-attendee tr,.tribe-events-tickets .tribe-tickets-attendee table,.tribe-events-tickets .tribe-tickets-attendee td,.tribe-events-tickets .tribe-tickets-attendee tr{border:0}.tribe-rsvp-message-display .tribe-rsvp-messages{display:block}.tribe-rsvp-messages{display:none;padding:10px 10px 5px}.tribe-rsvp-message{border-radius:3px;border-style:solid;border-width:1px;font-size:12px;margin:0 0 5px;padding:0 .6em}.tribe-rsvp-message-success{background-color:#ffffe0;border-color:#e6db55}.tribe-rsvp-message-error{background-color:#ffebe8;border-color:#c00}.tribe-ticket-quantity{width:100%}.tickets-unavailable{font-style:italic}.tribe-rsvp-list{list-style:none;padding:0;margin:0}.tribe-rsvp-list>.tribe-item{min-height:105px;padding:20px;border:1px solid #ededed;border-bottom:0}.tribe-rsvp-list>.tribe-item:last-child{border-bottom:1px solid #ededed;margin-bottom:20px}.tribe-rsvp-list>.tribe-item.tribe-disabled{background-color:#efefef;border-color:#ddd;color:#717171}.tribe-rsvp-list>.tribe-item.tribe-disabled:last-child{border-bottom-color:#ddd}.tribe-rsvp-list>.tribe-item .tribe-answer{float:right;display:inline-block}.tribe-rsvp-list>.tribe-item table{border:0;margin:0}.tribe-rsvp-list>.tribe-item td{border:0}.list-attendee{color:#999;display:inline-block;letter-spacing:1px;text-transform:uppercase}.tribe-submit-tickets-form{margin-top:20px}.user-details{margin:0 0 1.5em}.user-details p{margin:0 0 .5em}.tribe-answer{line-height:2}.tribe-answer .type-label{margin-bottom:0;padding-right:.5em}.tribe-answer label{display:block}.tribe-answer select{background:#fff;border:1px solid #ddd;height:30px;line-height:1;margin-left:5px}.tribe-rsvp h2{margin-bottom:20px;line-height:1.2}.event-tickets-meta-label{font-weight:700;margin:0 1em 0 0}.tribe-theme-parent-twentysixteen .comment-content a,.tribe-theme-parent-twentysixteen .entry-content a,.tribe-theme-parent-twentysixteen .entry-footer a:hover,.tribe-theme-parent-twentysixteen .entry-summary a,.tribe-theme-parent-twentysixteen .logged-in-as a,.tribe-theme-parent-twentysixteen .pingback .comment-body>a,.tribe-theme-parent-twentysixteen .site-info a:hover,.tribe-theme-parent-twentysixteen .taxonomy-description a,.tribe-theme-parent-twentysixteen .textwidget a,.tribe-theme-twentysixteen .comment-content a,.tribe-theme-twentysixteen .entry-content a,.tribe-theme-twentysixteen .entry-footer a:hover,.tribe-theme-twentysixteen .entry-summary a,.tribe-theme-twentysixteen .logged-in-as a,.tribe-theme-twentysixteen .pingback .comment-body>a,.tribe-theme-twentysixteen .site-info a:hover,.tribe-theme-twentysixteen .taxonomy-description a,.tribe-theme-twentysixteen .textwidget a{box-shadow:none}.tribe-events-tickets-title.tribe--rsvp{margin:0}.tribe-events-style-full.tribe-events-style-theme h2.tribe-events-tickets-title{font-size:90%}.tribe-link-view-attendee{margin:15px 0}.tribe-events-tickets{background:#f8f8f8;border:0;border-radius:3px;position:relative}.tribe-events-tickets .woocommerce.add-to-cart,.tribe-events-tickets table,.tribe-events-tickets td,.tribe-events-tickets th{border:0}.tribe-events-tickets td{padding:8px 10px}.tribe-events-tickets .woocommerce.add-to-cart{padding:16px}.tribe-events-tickets .tickets_description,.tribe-events-tickets .tickets_name,.tribe-events-tickets .tickets_price,.tribe-events-tickets .woocommerce{border-bottom:1px solid #dfdfdf}.tribe-events-tickets .woocommerce .quantity input{background-color:#fff;border-radius:3px;margin-bottom:5px;padding:5px 10px;text-align:left;width:4.375em}.tribe-events-tickets .tribe-link-tickets-message{background:hsla(0,0%,78%,.8);bottom:0;left:0;position:absolute;right:0;text-align:center;top:0}.tribe-events-tickets .tribe-link-tickets-message .no-javascript-msg{left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:90%}.tribe-events-tickets .tribe-tickets-remaining{color:#777;display:block;font-size:11px}.tribe-events-tickets .tribe-tickets-attendees-list-optout label{color:#777;font-size:13px}.tribe-events-tickets .tribe-tickets-attendees-list-optout input[type=checkbox]+label,.tribe-events-tickets .tribe-tickets-attendees-list-optout input[type=radio]+label{display:inline-block}.tribe-events-tickets .tickets_description,.tribe-events-tickets .tickets_name,.tribe-events-tickets .tickets_name p,.tribe-events-tickets .tickets_price{border-bottom:1px solid #dfdfdf;color:#464646;font-size:15px;padding:16px 10px}.tribe-events-tickets input[type=date],.tribe-events-tickets input[type=datetime-local],.tribe-events-tickets input[type=email],.tribe-events-tickets input[type=month],.tribe-events-tickets input[type=number],.tribe-events-tickets input[type=password],.tribe-events-tickets input[type=search],.tribe-events-tickets input[type=tel],.tribe-events-tickets input[type=text],.tribe-events-tickets input[type=time],.tribe-events-tickets input[type=url],.tribe-events-tickets input[type=week],.tribe-events-tickets select,.tribe-events-tickets textarea{background:#fff}.tribe-events-tickets header{height:auto}.tribe-events-tickets-rsvp .tribe-ticket.quantity{border-bottom:1px solid #dfdfdf;width:192px}.tribe-events-tickets-rsvp .tribe-ticket.quantity input{margin-bottom:5px;padding:5px 10px;width:4.375em}
src/resources/css/tickets-refresh.css CHANGED
@@ -437,6 +437,7 @@ p.description {
437
  #settings_global_capacity_edit {
438
  background-color: #fff;
439
  border: 1px solid #b4b9be;
 
440
  font-size: inherit;
441
  margin-left: -5px;
442
  }
437
  #settings_global_capacity_edit {
438
  background-color: #fff;
439
  border: 1px solid #b4b9be;
440
+ float: left;
441
  font-size: inherit;
442
  margin-left: -5px;
443
  }
src/resources/css/tickets-refresh.min.css CHANGED
@@ -1 +1 @@
1
- .screen_reader_text{clip:rect(0 0 0 0);clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}#poststuff .inside{margin-top:12px}.tribe-tickets-editor-blocker{background:hsla(0,0%,100%,.7);bottom:0;display:none;left:0;position:absolute;right:0;top:0;z-index:100000}.tribe-tickets-editor-blocker .spinner{left:50%;margin-left:-10px;margin-top:-10px;position:absolute;top:50%;z-index:100404}.tribe-tickets-editor-history-list{margin-left:20px}#event_tickets{position:relative}#event_tickets fieldset{border:0;padding:0;margin:0}#event_tickets .ticket_form_left{font-weight:700}#event_tickets label{font-weight:400}#event_tickets input[type=color].ticket_form_right,#event_tickets input[type=date].ticket_form_right,#event_tickets input[type=datetime-local].ticket_form_right,#event_tickets input[type=datetime].ticket_form_right,#event_tickets input[type=email].ticket_form_right,#event_tickets input[type=month].ticket_form_right,#event_tickets input[type=number].ticket_form_right,#event_tickets input[type=password].ticket_form_right,#event_tickets input[type=range].ticket_form_right,#event_tickets input[type=search].ticket_form_right,#event_tickets input[type=tel].ticket_form_right,#event_tickets input[type=text].ticket_form_right,#event_tickets input[type=time].ticket_form_right,#event_tickets input[type=url].ticket_form_right,#event_tickets input[type=week].ticket_form_right,#event_tickets label.ticket_form_right,#event_tickets textarea.ticket_form_right{display:block}#event_tickets .tribe-description-small{font-size:.95em;margin-top:5px;color:#888}.ticket_panel{border:1px solid #a3a3a3;border-radius:5px;box-sizing:border-box;opacity:1;position:relative;padding:8px;visibility:visible;width:100%;will-change:transform}.ticket_panel[aria-hidden=true]{opacity:0;position:absolute;visibility:hidden}.ticket_panel section{margin:2em 0}.ticket_panel #tribe-tickets-image{margin-top:.5em}.ticket_panel.panel_base{border:0;padding:.5em 0 0}.ticket_panel.panel_edit{border:0}.ticket_panel.panel_settings h4{margin:0}.ticket_panel.panel_settings .settings_main{margin-bottom:0;margin-top:0}.ticket_panel.panel_settings .settings_main p{font-size:inherit}.ticket_panel h4,.ticket_title{text-transform:uppercase}.ticket_title{margin-top:0}.ticket_list_container{margin-bottom:20px}.tribe_no_capacity{margin:0}.ticket_delete{color:#a00}.ticket_delete:hover{color:#dc3232}#settings_form_toggle{margin-top:1em}.global_capacity_edit_button{background:none;border:0;color:#ccc;cursor:pointer;padding:0}.tribe-button-icon:before{font-family:dashicons;font-size:1.25em;left:-.25em;position:relative;vertical-align:middle}.tribe-button-icon .tribe-hidden{display:none}.tribe-button-icon.tribe-button-icon-plus:before{content:"\f132"}.tribe-button-icon.tribe-button-icon-edit:before{content:"\f464"}.tribe-button-icon.tribe-button-icon-settings:before{content:"\f111";top:-2px}.tribe-tickets-image-preview{margin-top:2em;max-width:200px}#tribe_ticket_header_image{margin-right:2em;vertical-align:baseline}#tribe_tickets_image_preview_filename{display:none;font-weight:700}#tribe_tickets_image_preview_filename.-active{display:inline}#tribe_tickets_image_preview_filename .dashicons{vertical-align:text-bottom}#tribe_tickets_image_preview_filename .filename{margin-left:.5em}.ticket_table_intro .button-secondary{float:right;margin-bottom:15px;margin-left:5px}.ticket_table_intro #ticket_form_total_capacity{display:inline-block;line-height:28px;position:relative}.ticket_table_intro #ticket_form_total_capacity .tooltip{background-color:#efefef;border-radius:3px;border:1px solid #a3a3a3;display:none;margin-left:.5em;padding:.5em;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:1}.ticket_table_intro #ticket_form_total_capacity:hover .tooltip{display:block}.ticket_table_intro #ticket_form_total_capacity .tooltip{left:100%;top:53%;white-space:nowrap}.input_block{margin-bottom:1em;position:relative}.input_block .ticket_form_left{display:block;box-sizing:border-box;float:left;margin:0;padding-left:0;padding-right:1em}.input_block input,.input_block textarea{max-width:calc(100% - 132px)}.input_block .ticket_field.hasDatepicker{border-radius:3px;font-size:13px;margin-bottom:0}.input_block .input_block,.input_block .ticket_form_right{display:block;margin-top:0}.input_block .input_block:last-child,.input_block .ticket_form_right:last-child{margin-bottom:0}.input_block .input_block{margin-top:1em}.input_block legend+.input_block{margin-top:0}.input_block .tribe_stock_block{padding-left:calc(20px + .4em)}.input_block .tribe_stock_block.tribe-active{padding-top:1em}.input_block label.ticket_form_right{margin-bottom:1em}.input_block .tribe_block_label{display:block}.input_block .ticket_stock_total{color:#666;font-style:italic;margin-left:1em}#ticket_form .input_block .ticket_stock_total_value{margin-right:0}.input_block .tribe-timepicker{width:6em}#tribe_ticket_provider_wrapper{clip:rect(0 0 0 0);clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}#event_tickets{font-size:12px}h4.ticket_form_title{font-size:1.2em;margin-top:0}#ticket_form input[type=checkbox],#ticket_form input[type=radio]{margin-right:.4em}.tribe_soft_note,p.description{color:#a3a3a3;font-size:inherit;font-style:normal}#ticket_form .ticket_advanced.history._show span:first-child,#ticket_form .ticket_advanced.history .toggle-history span:nth-child(2),#ticket_form .ticket_advanced.history ul{display:none}#ticket_form .ticket_advanced.history._show span:nth-child(2){display:inline}#ticket_form .ticket_advanced.history._show ul{display:block}.ticket_bottom{margin-top:1em}.tribe_preview{cursor:pointer}#ticket_form .tooltip_container{position:relative;display:inline;vertical-align:middle}#ticket_form .tooltip_container .tooltip{background-color:#efefef;border-radius:3px;border:1px solid #a3a3a3;display:none;margin-left:.5em;padding:.5em;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:1}#ticket_form .tooltip_container:hover .tooltip{display:block}#ticket_form .tooltip_container .tooltip{background-color:#efefef;left:100%;margin:0;width:200px}#settings_global_capacity_edit{background-color:#fff;border:1px solid #b4b9be;font-size:inherit;margin-left:-5px}#settings_global_capacity_edit:disabled{background-color:transparent;border:0;box-shadow:none;color:#555}#ticket_form .original_stock_cap span{margin-right:0}@media (min-width:782px){.ticket_panel{padding:16px}.input_block .input_block,.input_block .ticket_form_right{margin-left:132px}#ticket_bottom_right{float:right}}@media (min-width:400px){#settings_form_toggle{float:right;margin-top:0}}@media screen and (max-width:520px){.ticket_table_intro #ticket_form_total_capacity{width:100%}}@media screen and (max-width:782px){.ticket_table_intro #ticket_form_total_capacity .tooltip{left:auto;margin-top:5px;position:relative;top:auto;-webkit-transform:none;transform:none;width:100%}.input_block .ticket_form_left{float:none;display:inline-block;padding:0 0 6px}.input_block .tribe_stock_block{padding-left:36px}.input_block .tribe_stock_block.tribe-active{padding-top:5px}#ticket_form .tooltip_container .tooltip{left:auto;margin-top:5px;position:relative;top:auto;-webkit-transform:none;transform:none;width:100%}}@media (max-width:782px){#ticket_bottom_right{margin-top:1em}}@media screen and (max-width:390px){#ticket_form .tooltip_container{display:none}}
1
+ .screen_reader_text{clip:rect(0 0 0 0);clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}#poststuff .inside{margin-top:12px}.tribe-tickets-editor-blocker{background:hsla(0,0%,100%,.7);bottom:0;display:none;left:0;position:absolute;right:0;top:0;z-index:100000}.tribe-tickets-editor-blocker .spinner{left:50%;margin-left:-10px;margin-top:-10px;position:absolute;top:50%;z-index:100404}.tribe-tickets-editor-history-list{margin-left:20px}#event_tickets{position:relative}#event_tickets fieldset{border:0;padding:0;margin:0}#event_tickets .ticket_form_left{font-weight:700}#event_tickets label{font-weight:400}#event_tickets input[type=color].ticket_form_right,#event_tickets input[type=date].ticket_form_right,#event_tickets input[type=datetime-local].ticket_form_right,#event_tickets input[type=datetime].ticket_form_right,#event_tickets input[type=email].ticket_form_right,#event_tickets input[type=month].ticket_form_right,#event_tickets input[type=number].ticket_form_right,#event_tickets input[type=password].ticket_form_right,#event_tickets input[type=range].ticket_form_right,#event_tickets input[type=search].ticket_form_right,#event_tickets input[type=tel].ticket_form_right,#event_tickets input[type=text].ticket_form_right,#event_tickets input[type=time].ticket_form_right,#event_tickets input[type=url].ticket_form_right,#event_tickets input[type=week].ticket_form_right,#event_tickets label.ticket_form_right,#event_tickets textarea.ticket_form_right{display:block}#event_tickets .tribe-description-small{font-size:.95em;margin-top:5px;color:#888}.ticket_panel{border:1px solid #a3a3a3;border-radius:5px;box-sizing:border-box;opacity:1;position:relative;padding:8px;visibility:visible;width:100%;will-change:transform}.ticket_panel[aria-hidden=true]{opacity:0;position:absolute;visibility:hidden}.ticket_panel section{margin:2em 0}.ticket_panel #tribe-tickets-image{margin-top:.5em}.ticket_panel.panel_base{border:0;padding:.5em 0 0}.ticket_panel.panel_edit{border:0}.ticket_panel.panel_settings h4{margin:0}.ticket_panel.panel_settings .settings_main{margin-bottom:0;margin-top:0}.ticket_panel.panel_settings .settings_main p{font-size:inherit}.ticket_panel h4,.ticket_title{text-transform:uppercase}.ticket_title{margin-top:0}.ticket_list_container{margin-bottom:20px}.tribe_no_capacity{margin:0}.ticket_delete{color:#a00}.ticket_delete:hover{color:#dc3232}#settings_form_toggle{margin-top:1em}.global_capacity_edit_button{background:none;border:0;color:#ccc;cursor:pointer;padding:0}.tribe-button-icon:before{font-family:dashicons;font-size:1.25em;left:-.25em;position:relative;vertical-align:middle}.tribe-button-icon .tribe-hidden{display:none}.tribe-button-icon.tribe-button-icon-plus:before{content:"\f132"}.tribe-button-icon.tribe-button-icon-edit:before{content:"\f464"}.tribe-button-icon.tribe-button-icon-settings:before{content:"\f111";top:-2px}.tribe-tickets-image-preview{margin-top:2em;max-width:200px}#tribe_ticket_header_image{margin-right:2em;vertical-align:baseline}#tribe_tickets_image_preview_filename{display:none;font-weight:700}#tribe_tickets_image_preview_filename.-active{display:inline}#tribe_tickets_image_preview_filename .dashicons{vertical-align:text-bottom}#tribe_tickets_image_preview_filename .filename{margin-left:.5em}.ticket_table_intro .button-secondary{float:right;margin-bottom:15px;margin-left:5px}.ticket_table_intro #ticket_form_total_capacity{display:inline-block;line-height:28px;position:relative}.ticket_table_intro #ticket_form_total_capacity .tooltip{background-color:#efefef;border-radius:3px;border:1px solid #a3a3a3;display:none;margin-left:.5em;padding:.5em;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:1}.ticket_table_intro #ticket_form_total_capacity:hover .tooltip{display:block}.ticket_table_intro #ticket_form_total_capacity .tooltip{left:100%;top:53%;white-space:nowrap}.input_block{margin-bottom:1em;position:relative}.input_block .ticket_form_left{display:block;box-sizing:border-box;float:left;margin:0;padding-left:0;padding-right:1em}.input_block input,.input_block textarea{max-width:calc(100% - 132px)}.input_block .ticket_field.hasDatepicker{border-radius:3px;font-size:13px;margin-bottom:0}.input_block .input_block,.input_block .ticket_form_right{display:block;margin-top:0}.input_block .input_block:last-child,.input_block .ticket_form_right:last-child{margin-bottom:0}.input_block .input_block{margin-top:1em}.input_block legend+.input_block{margin-top:0}.input_block .tribe_stock_block{padding-left:calc(20px + .4em)}.input_block .tribe_stock_block.tribe-active{padding-top:1em}.input_block label.ticket_form_right{margin-bottom:1em}.input_block .tribe_block_label{display:block}.input_block .ticket_stock_total{color:#666;font-style:italic;margin-left:1em}#ticket_form .input_block .ticket_stock_total_value{margin-right:0}.input_block .tribe-timepicker{width:6em}#tribe_ticket_provider_wrapper{clip:rect(0 0 0 0);clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}#event_tickets{font-size:12px}h4.ticket_form_title{font-size:1.2em;margin-top:0}#ticket_form input[type=checkbox],#ticket_form input[type=radio]{margin-right:.4em}.tribe_soft_note,p.description{color:#a3a3a3;font-size:inherit;font-style:normal}#ticket_form .ticket_advanced.history._show span:first-child,#ticket_form .ticket_advanced.history .toggle-history span:nth-child(2),#ticket_form .ticket_advanced.history ul{display:none}#ticket_form .ticket_advanced.history._show span:nth-child(2){display:inline}#ticket_form .ticket_advanced.history._show ul{display:block}.ticket_bottom{margin-top:1em}.tribe_preview{cursor:pointer}#ticket_form .tooltip_container{position:relative;display:inline;vertical-align:middle}#ticket_form .tooltip_container .tooltip{background-color:#efefef;border-radius:3px;border:1px solid #a3a3a3;display:none;margin-left:.5em;padding:.5em;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:1}#ticket_form .tooltip_container:hover .tooltip{display:block}#ticket_form .tooltip_container .tooltip{background-color:#efefef;left:100%;margin:0;width:200px}#settings_global_capacity_edit{background-color:#fff;border:1px solid #b4b9be;float:left;font-size:inherit;margin-left:-5px}#settings_global_capacity_edit:disabled{background-color:transparent;border:0;box-shadow:none;color:#555}#ticket_form .original_stock_cap span{margin-right:0}@media (min-width:782px){.ticket_panel{padding:16px}.input_block .input_block,.input_block .ticket_form_right{margin-left:132px}#ticket_bottom_right{float:right}}@media (min-width:400px){#settings_form_toggle{float:right;margin-top:0}}@media screen and (max-width:520px){.ticket_table_intro #ticket_form_total_capacity{width:100%}}@media screen and (max-width:782px){.ticket_table_intro #ticket_form_total_capacity .tooltip{left:auto;margin-top:5px;position:relative;top:auto;-webkit-transform:none;transform:none;width:100%}.input_block .ticket_form_left{float:none;display:inline-block;padding:0 0 6px}.input_block .tribe_stock_block{padding-left:36px}.input_block .tribe_stock_block.tribe-active{padding-top:5px}#ticket_form .tooltip_container .tooltip{left:auto;margin-top:5px;position:relative;top:auto;-webkit-transform:none;transform:none;width:100%}}@media (max-width:782px){#ticket_bottom_right{margin-top:1em}}@media screen and (max-width:390px){#ticket_form .tooltip_container{display:none}}
src/resources/css/tickets-tables.css CHANGED
@@ -68,10 +68,11 @@
68
  font-size: 1.8em;
69
  margin-right: 10px;
70
  position: relative;
 
71
  }
72
 
73
- .tribe-tickets-editor-table .Tribe__Tickets__RSVP .tribe-handle {
74
- display: none;
75
  }
76
 
77
  .tribe-tickets-editor-table .tribe-mobile-only {
@@ -179,8 +180,8 @@
179
  width: 100%;
180
  }
181
 
182
- .tribe-tickets-editor-table.capacity_list td:first-child,
183
- .tribe-tickets-editor-table.capacity_list td[colspan="2"] {
184
  width: 100%;
185
  }
186
 
68
  font-size: 1.8em;
69
  margin-right: 10px;
70
  position: relative;
71
+ display: none;
72
  }
73
 
74
+ .tribe-tickets-editor-table .ui-sortable td.column-primary .tribe-handle {
75
+ display: block;
76
  }
77
 
78
  .tribe-tickets-editor-table .tribe-mobile-only {
180
  width: 100%;
181
  }
182
 
183
+ .tribe-tickets-editor-table.tribe-tickets-editor-capacity-table td:first-child,
184
+ .tribe-tickets-editor-table.tribe-tickets-editor-capacity-table td[colspan="2"] {
185
  width: 100%;
186
  }
187
 
src/resources/css/tickets-tables.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-tickets-editor-table{border-radius:3px;border-spacing:0;border:1px solid #ccc;margin:20px 0}.tribe-tickets-editor-table thead{background-color:#f9f9f9;border-bottom:1px solid #ccc}.tribe-tickets-editor-table tbody.ui-sortable:after,.tribe-tickets-editor-table tbody.ui-sortable:before{content:"";display:table-row;height:2px;width:100%}.tribe-tickets-editor-table tr{background-color:#fff}.tribe-tickets-editor-table tr td{border-bottom:1px solid #ccc}.tribe-tickets-editor-table tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.tribe-tickets-editor-table tr:first-child td:first-child{border-top-left-radius:3px}.tribe-tickets-editor-table tr:first-child td:last-child{border-top-right-radius:3px}.tribe-tickets-editor-table tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.tribe-tickets-editor-table tr:last-child td:first-child{border-bottom-left-radius:3px}.tribe-tickets-editor-table tr:last-child td:last-child{border-bottom-right-radius:3px}.tribe-tickets-editor-table td.column-primary .tribe-handle{color:#ccc;cursor:pointer;font-size:1.8em;margin-right:10px;position:relative}.tribe-tickets-editor-table .tribe-mobile-only,.tribe-tickets-editor-table .Tribe__Tickets__RSVP .tribe-handle{display:none}.tribe-tickets-editor-table .ticket_edit{width:100px}.tribe-tickets-editor-table .global_capacity_edit_button,.tribe-tickets-editor-table .ticket_edit_button{background:none;border:0;color:#ccc;cursor:pointer;padding:0}.tribe-tickets-editor-table .global_capacity_edit_button:hover,.tribe-tickets-editor-table .ticket_edit_button:hover{color:#00a0d2}.tribe-tickets-editor-table .global_capacity_edit_button .global_capacity_edit_text,.tribe-tickets-editor-table .global_capacity_edit_button .ticket_edit_text,.tribe-tickets-editor-table .ticket_edit_button .global_capacity_edit_text,.tribe-tickets-editor-table .ticket_edit_button .ticket_edit_text{font-size:0}.tribe-tickets-editor-table .global_capacity_edit_button .global_capacity_edit_text:before,.tribe-tickets-editor-table .global_capacity_edit_button .ticket_edit_text:before,.tribe-tickets-editor-table .ticket_edit_button .global_capacity_edit_text:before,.tribe-tickets-editor-table .ticket_edit_button .ticket_edit_text:before{content:"\f464";font-family:dashicons;font-size:x-large;vertical-align:top}.tribe-tickets-editor-table .global_capacity_edit_button{vertical-align:middle}#tribe_panel_settings .tribe-tickets-editor-table tbody tr{box-shadow:none}#tribe_panel_settings .tribe-tickets-editor-table tbody tr td{border-bottom:1px solid #ccc}#tribe_panel_settings .tribe-tickets-editor-table tbody tr:last-child td,#tribe_panel_settings .tribe-tickets-editor-table tbody tr:nth-last-child(2) td{border-bottom:0}#tribe_panel_settings .tribe-tickets-editor-table tbody tr:last-child td{border-top:1px dashed #ccc}.tribe-tickets-editor-table .tribe_capacity_table_ticket_list{color:#ccc}.tribe-tickets-editor-table .settings_total_global_stock{font-size:inherit;margin-left:-5px}.tribe-tickets-editor-table .settings_total_global_stock:disabled{background:none;border:0;box-shadow:none}@media screen and (max-width:782px){.tribe-tickets-editor-table .tribe-mobile-only{display:inline-block}.tribe-tickets-editor-table .tribe-mobile-hidden{display:none}.tribe-tickets-editor-table td.ticket_edit{position:absolute;right:0;top:0;width:37px}.tribe-tickets-editor-table tr{position:relative;border-bottom:1px solid #ccc}.tribe-tickets-editor-table th:not(.column-primary){display:none}.tribe-tickets-editor-table.capacity_list td:first-child,.tribe-tickets-editor-table.capacity_list td[colspan="2"],.tribe-tickets-editor-table thead th.column-primary{width:100%}.tribe-tickets-editor-table tr td{border:0;box-sizing:border-box;display:block;float:left;min-height:36px;padding:6px;position:relative;width:50%}.tribe-tickets-editor-table .is-expanded{display:block;overflow:hidden}}
1
+ .tribe-tickets-editor-table{border-radius:3px;border-spacing:0;border:1px solid #ccc;margin:20px 0}.tribe-tickets-editor-table thead{background-color:#f9f9f9;border-bottom:1px solid #ccc}.tribe-tickets-editor-table tbody.ui-sortable:after,.tribe-tickets-editor-table tbody.ui-sortable:before{content:"";display:table-row;height:2px;width:100%}.tribe-tickets-editor-table tr{background-color:#fff}.tribe-tickets-editor-table tr td{border-bottom:1px solid #ccc}.tribe-tickets-editor-table tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.tribe-tickets-editor-table tr:first-child td:first-child{border-top-left-radius:3px}.tribe-tickets-editor-table tr:first-child td:last-child{border-top-right-radius:3px}.tribe-tickets-editor-table tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.tribe-tickets-editor-table tr:last-child td:first-child{border-bottom-left-radius:3px}.tribe-tickets-editor-table tr:last-child td:last-child{border-bottom-right-radius:3px}.tribe-tickets-editor-table td.column-primary .tribe-handle{color:#ccc;cursor:pointer;font-size:1.8em;margin-right:10px;position:relative;display:none}.tribe-tickets-editor-table .ui-sortable td.column-primary .tribe-handle{display:block}.tribe-tickets-editor-table .tribe-mobile-only{display:none}.tribe-tickets-editor-table .ticket_edit{width:100px}.tribe-tickets-editor-table .global_capacity_edit_button,.tribe-tickets-editor-table .ticket_edit_button{background:none;border:0;color:#ccc;cursor:pointer;padding:0}.tribe-tickets-editor-table .global_capacity_edit_button:hover,.tribe-tickets-editor-table .ticket_edit_button:hover{color:#00a0d2}.tribe-tickets-editor-table .global_capacity_edit_button .global_capacity_edit_text,.tribe-tickets-editor-table .global_capacity_edit_button .ticket_edit_text,.tribe-tickets-editor-table .ticket_edit_button .global_capacity_edit_text,.tribe-tickets-editor-table .ticket_edit_button .ticket_edit_text{font-size:0}.tribe-tickets-editor-table .global_capacity_edit_button .global_capacity_edit_text:before,.tribe-tickets-editor-table .global_capacity_edit_button .ticket_edit_text:before,.tribe-tickets-editor-table .ticket_edit_button .global_capacity_edit_text:before,.tribe-tickets-editor-table .ticket_edit_button .ticket_edit_text:before{content:"\f464";font-family:dashicons;font-size:x-large;vertical-align:top}.tribe-tickets-editor-table .global_capacity_edit_button{vertical-align:middle}#tribe_panel_settings .tribe-tickets-editor-table tbody tr{box-shadow:none}#tribe_panel_settings .tribe-tickets-editor-table tbody tr td{border-bottom:1px solid #ccc}#tribe_panel_settings .tribe-tickets-editor-table tbody tr:last-child td,#tribe_panel_settings .tribe-tickets-editor-table tbody tr:nth-last-child(2) td{border-bottom:0}#tribe_panel_settings .tribe-tickets-editor-table tbody tr:last-child td{border-top:1px dashed #ccc}.tribe-tickets-editor-table .tribe_capacity_table_ticket_list{color:#ccc}.tribe-tickets-editor-table .settings_total_global_stock{font-size:inherit;margin-left:-5px}.tribe-tickets-editor-table .settings_total_global_stock:disabled{background:none;border:0;box-shadow:none}@media screen and (max-width:782px){.tribe-tickets-editor-table .tribe-mobile-only{display:inline-block}.tribe-tickets-editor-table .tribe-mobile-hidden{display:none}.tribe-tickets-editor-table td.ticket_edit{position:absolute;right:0;top:0;width:37px}.tribe-tickets-editor-table tr{position:relative;border-bottom:1px solid #ccc}.tribe-tickets-editor-table th:not(.column-primary){display:none}.tribe-tickets-editor-table.tribe-tickets-editor-capacity-table td:first-child,.tribe-tickets-editor-table.tribe-tickets-editor-capacity-table td[colspan="2"],.tribe-tickets-editor-table thead th.column-primary{width:100%}.tribe-tickets-editor-table tr td{border:0;box-sizing:border-box;display:block;float:left;min-height:36px;padding:6px;position:relative;width:50%}.tribe-tickets-editor-table .is-expanded{display:block;overflow:hidden}}
src/resources/css/tickets.css CHANGED
@@ -8,8 +8,9 @@
8
  * @see: http://moderntribe.github.io/products-engineering/css/
9
  */
10
 
11
- /* = WooTickets Admin Styles
12
- ============================================= */
 
13
 
14
  #ticket_form input[type=radio] {
15
  margin-right: 5px;
8
  * @see: http://moderntribe.github.io/products-engineering/css/
9
  */
10
 
11
+ .tribe-tickets-column-attendees-link {
12
+ display: inline-block;
13
+ }
14
 
15
  #ticket_form input[type=radio] {
16
  margin-right: 5px;
src/resources/css/tickets.min.css CHANGED
@@ -1 +1 @@
1
- #ticket_form input[type=radio]{margin-right:5px}#ticket_form span.datetime_seperator{margin-left:10px}.ticket_list h4{border-bottom:1px solid #e5e5e5;padding-bottom:6px;text-transform:uppercase}.ticket_list h4 a{font-size:11px;font-weight:400;text-transform:none}.ticket_list tr:hover td div.ticket_controls{visibility:visible}.ticket_list tr td{padding:10px;vertical-align:middle}.ticket_list tr td div.ticket_controls{visibility:hidden}.ticket_name p:first-child{font-weight:700}#tribe_ticket_header_preview img{height:auto!important;max-width:95%!important}#tribe_ticket_header_remove,.ticket_time{display:none}.tribe-tickets-remaining{font-size:10px}.eventtable{margin:0;padding-top:0;width:100%}#event_tickets,.eventtable.ticket_list.eventForm{table-layout:fixed}.tribe-theme-twentyfifteen .tribe-events-tickets input[type=number]{padding:.375em;width:100%}
1
+ .tribe-tickets-column-attendees-link{display:inline-block}#ticket_form input[type=radio]{margin-right:5px}#ticket_form span.datetime_seperator{margin-left:10px}.ticket_list h4{border-bottom:1px solid #e5e5e5;padding-bottom:6px;text-transform:uppercase}.ticket_list h4 a{font-size:11px;font-weight:400;text-transform:none}.ticket_list tr:hover td div.ticket_controls{visibility:visible}.ticket_list tr td{padding:10px;vertical-align:middle}.ticket_list tr td div.ticket_controls{visibility:hidden}.ticket_name p:first-child{font-weight:700}#tribe_ticket_header_preview img{height:auto!important;max-width:95%!important}#tribe_ticket_header_remove,.ticket_time{display:none}.tribe-tickets-remaining{font-size:10px}.eventtable{margin:0;padding-top:0;width:100%}#event_tickets,.eventtable.ticket_list.eventForm{table-layout:fixed}.tribe-theme-twentyfifteen .tribe-events-tickets input[type=number]{padding:.375em;width:100%}
src/resources/js/accordion.js CHANGED
@@ -21,6 +21,8 @@
21
  callback.call( scope, i, array[i] ); // passes back stuff we need
22
  }
23
  };
 
 
24
 
25
  var accordionContent = accordion.getElementsByClassName( 'accordion-content' );
26
  var accordionHeader = accordion.getElementsByClassName( 'accordion-header' );
21
  callback.call( scope, i, array[i] ); // passes back stuff we need
22
  }
23
  };
24
+ // set ARIA role
25
+ accordion.setAttribute( 'role', 'tablist' );
26
 
27
  var accordionContent = accordion.getElementsByClassName( 'accordion-content' );
28
  var accordionHeader = accordion.getElementsByClassName( 'accordion-header' );
src/resources/js/accordion.min.js CHANGED
@@ -1 +1 @@
1
- !function(){"use strict";var t=0;window.MTAccordion=function(e,a){if("undefined"==typeof e.target)return!1;var i=document.querySelector(e.target);if(i){var r=function(t,e,a){for(var i=0,r=t.length;i<r;i++)e.call(a,i,t[i])},n=i.getElementsByClassName("accordion-content"),s=i.getElementsByClassName("accordion-header");t++,r(s,function(e,a){function i(t){var e=a.nextElementSibling,i=e.getElementsByClassName("accordion-label")[0];a.classList.toggle("is-active"),e.classList.toggle("is-active"),i.setAttribute("tabindex",-1),i.focus(),e.classList.contains("is-active")?(r.setAttribute("aria-selected","true"),r.setAttribute("aria-expanded","true"),e.setAttribute("aria-hidden","false")):(r.setAttribute("aria-selected","false"),r.setAttribute("aria-expanded","false"),e.setAttribute("aria-hidden","true")),t.preventDefault()}var r=a;e++,"tab"!==r.getAttribute("role")&&(r.setAttribute("id","tab"+t+"-"+e),r.setAttribute("aria-selected","false"),r.setAttribute("aria-expanded","false"),r.setAttribute("aria-controls","panel"+t+"-"+e),r.setAttribute("role","tab"),r.addEventListener("click",i))}),r(n,function(e,a){var i=a;e++,"tabpanel"!==i.getAttribute("role")&&(i.setAttribute("id","panel"+t+"-"+e),i.setAttribute("aria-hidden","true"),i.setAttribute("aria-labelledby","tab"+t+"-"+e),i.setAttribute("role","tabpanel"))}),"function"==typeof a&&a.call()}},document.onreadystatechange=function(){"interactive"===document.readyState&&window.MTAccordion({target:".accordion"})}}();
1
+ !function(){"use strict";var t=0;window.MTAccordion=function(e,a){if("undefined"==typeof e.target)return!1;var i=document.querySelector(e.target);if(i){var r=function(t,e,a){for(var i=0,r=t.length;i<r;i++)e.call(a,i,t[i])};i.setAttribute("role","tablist");var n=i.getElementsByClassName("accordion-content"),s=i.getElementsByClassName("accordion-header");t++,r(s,function(e,a){function i(t){var e=a.nextElementSibling,i=e.getElementsByClassName("accordion-label")[0];a.classList.toggle("is-active"),e.classList.toggle("is-active"),i.setAttribute("tabindex",-1),i.focus(),e.classList.contains("is-active")?(r.setAttribute("aria-selected","true"),r.setAttribute("aria-expanded","true"),e.setAttribute("aria-hidden","false")):(r.setAttribute("aria-selected","false"),r.setAttribute("aria-expanded","false"),e.setAttribute("aria-hidden","true")),t.preventDefault()}var r=a;e++,"tab"!==r.getAttribute("role")&&(r.setAttribute("id","tab"+t+"-"+e),r.setAttribute("aria-selected","false"),r.setAttribute("aria-expanded","false"),r.setAttribute("aria-controls","panel"+t+"-"+e),r.setAttribute("role","tab"),r.addEventListener("click",i))}),r(n,function(e,a){var i=a;e++,"tabpanel"!==i.getAttribute("role")&&(i.setAttribute("id","panel"+t+"-"+e),i.setAttribute("aria-hidden","true"),i.setAttribute("aria-labelledby","tab"+t+"-"+e),i.setAttribute("role","tabpanel"))}),"function"==typeof a&&a.call()}},document.onreadystatechange=function(){"interactive"===document.readyState&&window.MTAccordion({target:".accordion"})}}();
src/resources/js/tickets-attendees.js CHANGED
@@ -124,7 +124,7 @@ var tribe_event_tickets_attendees = tribe_event_tickets_attendees || {};
124
  var obj = jQuery( this );
125
 
126
  var params = {
127
- action : 'tribe-ticket-checkin-' + obj.attr( 'data-provider' ),
128
  provider: obj.attr( 'data-provider' ),
129
  order_ID: obj.attr( 'data-attendee-id' ),
130
  nonce : Attendees.checkin_nonce
@@ -156,7 +156,7 @@ var tribe_event_tickets_attendees = tribe_event_tickets_attendees || {};
156
  var obj = jQuery( this );
157
 
158
  var params = {
159
- action : 'tribe-ticket-uncheckin-' + obj.attr( 'data-provider' ),
160
  provider: obj.attr( 'data-provider' ),
161
  order_ID: obj.attr( 'data-attendee-id' ),
162
  nonce : Attendees.uncheckin_nonce
124
  var obj = jQuery( this );
125
 
126
  var params = {
127
+ action : 'tribe-ticket-checkin',
128
  provider: obj.attr( 'data-provider' ),
129
  order_ID: obj.attr( 'data-attendee-id' ),
130
  nonce : Attendees.checkin_nonce
156
  var obj = jQuery( this );
157
 
158
  var params = {
159
+ action : 'tribe-ticket-uncheckin',
160
  provider: obj.attr( 'data-provider' ),
161
  order_ID: obj.attr( 'data-attendee-id' ),
162
  nonce : Attendees.uncheckin_nonce
src/resources/js/tickets-attendees.min.js CHANGED
@@ -1 +1 @@
1
- var tribe_event_tickets_attendees=tribe_event_tickets_attendees||{};!function(t,e){function n(){function n(e){t.isArray(e)||(e=[e]);var n=parseInt(.7*t(window).width());n=n>800?800:n;var i=parseInt(.9*t(window).height());i=i>800?800:i;var r="&ticket_ids="+e.join("|")+"&width="+n+"&height="+i,a=Attendees.move_url.replace("&TB_",r+"&TB_");tb_show(null,a,!1)}if("undefined"!=typeof AttendeesPointer&&null!==AttendeesPointer){options=t.extend(AttendeesPointer.options,{close:function(){t.post(ajaxurl,{pointer:AttendeesPointer.pointer_id,action:"dismiss-wp-pointer"})},open:function(t,e){e.pointer.css({top:parseInt(e.pointer.css("top").replace("px",""),10)+5}).find(".wp-pointer-arrow").css({right:"50px",left:"auto"}),e.element.on({click:function(){e.element.pointer("close")}})}});t(AttendeesPointer.target).pointer(options).pointer("open").pointer("widget")}t("input.print").on("click",function(){t(window).trigger("attendees-report-before-print.tribe-tickets");var e=t("table.wp-list-table.attendees"),n=e.find("thead th:visible").length,i=e.find("th,td"),r=2;i.css({width:100/(n-r)+"%"}),window.print(),i.css({width:""}),t(window).trigger("attendees-report-after-print.tribe-tickets")});var i=t(document.getElementById("filter_attendee"));i.on("keydown",function(t){if(13===t.keyCode)return!1}),i.on("keyup paste",function(){var e=jQuery(this).val().toLowerCase();t("#the-list").find("tr").each(function(){var n=t(this),i=n.find("td.status");if(t(n).hasClass("event-tickets-meta-row"))return void t(n).removeClass("event-tickets-meta-toggle-open");if(t(n).hasClass("event-tickets-meta-toggle-open")&&t(n).removeClass("event-tickets-meta-toggle-open"),!i.length)return void n.hide();var r=n.children("td.status").text().toLowerCase().trim(),a=n.children("td.ticket").text().toLowerCase().trim(),o=n.children("td.security").text().toLowerCase().trim(),c=0===a.indexOf(e)||0===r.indexOf(e)||0===r.indexOf("#"+e)||0===o.indexOf(e),s=n.find(".purchaser_name").text().toLowerCase().trim(),d=0===s.indexOf(e)||s.indexOf(" "+e)>1;c||d?n.show():n.hide()})}),t(".tribe-attendees-email").on({submit:function(e){t(".tribe-attendees-email").hide(),t(document.getElementById("tribe-loading")).show()}}),t(".tickets_checkin").click(function(e){var n=jQuery(this),i={action:"tribe-ticket-checkin-"+n.attr("data-provider"),provider:n.attr("data-provider"),order_ID:n.attr("data-attendee-id"),nonce:Attendees.checkin_nonce};n.attr("data-event-id")&&(i.event_ID=n.attr("data-event-id")),t.post(ajaxurl,i,function(e){e.success&&(n.closest("tr").addClass("tickets_checked"),t("#total_checkedin").text(parseInt(t("#total_checkedin").text())+1))},"json"),e.preventDefault()}),t(".tickets_uncheckin").click(function(e){var n=jQuery(this),i={action:"tribe-ticket-uncheckin-"+n.attr("data-provider"),provider:n.attr("data-provider"),order_ID:n.attr("data-attendee-id"),nonce:Attendees.uncheckin_nonce};n.attr("data-event-id")&&(i.event_ID=n.attr("data-event-id")),t.post(ajaxurl,i,function(e){e.success&&(n.closest("tr").removeClass("tickets_checked"),t("#total_checkedin").text(parseInt(t("#total_checkedin").text())-1))},"json"),e.preventDefault()}),t("table.wp-list-table").on("click",".row-actions .move-ticket",function(e){var i=t(this).parents("tr").find('input[name="attendee[]"]').val().match(/^[0-9]+/);return i&&n(i),e.stopPropagation(),!1}),t("#doaction, #doaction2").click(function(e){var i;switch(t(e.currentTarget).attr("id")){case"doaction":i="action";break;case"doaction2":i="action2"}if("undefined"!=typeof i&&"move"===t('select[name="'+i+'"]').val()){var r=jQuery('input[name="attendee[]"]:checked');if(r.length){var a=[];r.each(function(){var e=t(this).val().match(/^[0-9]+/);e&&a.push(e.toString())}),n(a)}else alert(Attendees.cannot_move);return e.stopPropagation(),!1}}),function(){var n=t(".ticket-history"),i=t(".hide-ticket-history");i.hide(),n.click(function(n){function i(){var n={action:"get_ticket_history",check:c,ticket_id:o};t.post(ajaxurl,n,function(n){if("undefined"!=typeof n.data&&"string"==typeof n.data.html){var i=r.parents("tr"),c=e.count_columns(i),s=t('<tr id="ticket-history-'+o+'"> <td colspan="'+c+'">'+n.data.html+"</td></tr>");s.hide().insertAfter(i).slideDown(),r.hide(),a.show()}})}var r=t(this),a=r.siblings(".hide-ticket-history"),o=parseInt(r.data("ticket-id"),10),c=r.data("check");if(o&&c){var s=t(document.getElementById("ticket-history-"+o));return s.length?(s.show(),r.hide(),a.show()):i(),n.stopPropagation(),!1}}),i.click(function(e){var n=t(this),i=n.siblings(".ticket-history"),r=parseInt(i.data("ticket-id"),10);t(document.getElementById("ticket-history-"+r)).hide(),i.show(),n.hide()})}()}e.count_columns=function(e){var n=0,i=e.find("td, th");return i.length?(i.each(function(){var e=parseInt(t(this).attr("colspan"),10);e=e>1?e-1:0,n+=1+e}),n):0},e.remove_tickets=function(e){t("#the-list").find("tr").each(function(){var n=t(this),i=n.find(".check-column").find("input").val();if("string"==typeof i){var r=i.match(/^[0-9]+/);r.length&&-1!==e.indexOf(parseInt(r[0],10))&&n.remove()}})},t(document).ready(n)}(jQuery,tribe_event_tickets_attendees);
1
+ var tribe_event_tickets_attendees=tribe_event_tickets_attendees||{};!function(t,e){function n(){function n(e){t.isArray(e)||(e=[e]);var n=parseInt(.7*t(window).width());n=n>800?800:n;var i=parseInt(.9*t(window).height());i=i>800?800:i;var r="&ticket_ids="+e.join("|")+"&width="+n+"&height="+i,o=Attendees.move_url.replace("&TB_",r+"&TB_");tb_show(null,o,!1)}if("undefined"!=typeof AttendeesPointer&&null!==AttendeesPointer){options=t.extend(AttendeesPointer.options,{close:function(){t.post(ajaxurl,{pointer:AttendeesPointer.pointer_id,action:"dismiss-wp-pointer"})},open:function(t,e){e.pointer.css({top:parseInt(e.pointer.css("top").replace("px",""),10)+5}).find(".wp-pointer-arrow").css({right:"50px",left:"auto"}),e.element.on({click:function(){e.element.pointer("close")}})}});t(AttendeesPointer.target).pointer(options).pointer("open").pointer("widget")}t("input.print").on("click",function(){t(window).trigger("attendees-report-before-print.tribe-tickets");var e=t("table.wp-list-table.attendees"),n=e.find("thead th:visible").length,i=e.find("th,td"),r=2;i.css({width:100/(n-r)+"%"}),window.print(),i.css({width:""}),t(window).trigger("attendees-report-after-print.tribe-tickets")});var i=t(document.getElementById("filter_attendee"));i.on("keydown",function(t){if(13===t.keyCode)return!1}),i.on("keyup paste",function(){var e=jQuery(this).val().toLowerCase();t("#the-list").find("tr").each(function(){var n=t(this),i=n.find("td.status");if(t(n).hasClass("event-tickets-meta-row"))return void t(n).removeClass("event-tickets-meta-toggle-open");if(t(n).hasClass("event-tickets-meta-toggle-open")&&t(n).removeClass("event-tickets-meta-toggle-open"),!i.length)return void n.hide();var r=n.children("td.status").text().toLowerCase().trim(),o=n.children("td.ticket").text().toLowerCase().trim(),a=n.children("td.security").text().toLowerCase().trim(),c=0===o.indexOf(e)||0===r.indexOf(e)||0===r.indexOf("#"+e)||0===a.indexOf(e),s=n.find(".purchaser_name").text().toLowerCase().trim(),d=0===s.indexOf(e)||s.indexOf(" "+e)>1;c||d?n.show():n.hide()})}),t(".tribe-attendees-email").on({submit:function(e){t(".tribe-attendees-email").hide(),t(document.getElementById("tribe-loading")).show()}}),t(".tickets_checkin").click(function(e){var n=jQuery(this),i={action:"tribe-ticket-checkin",provider:n.attr("data-provider"),order_ID:n.attr("data-attendee-id"),nonce:Attendees.checkin_nonce};n.attr("data-event-id")&&(i.event_ID=n.attr("data-event-id")),t.post(ajaxurl,i,function(e){e.success&&(n.closest("tr").addClass("tickets_checked"),t("#total_checkedin").text(parseInt(t("#total_checkedin").text())+1))},"json"),e.preventDefault()}),t(".tickets_uncheckin").click(function(e){var n=jQuery(this),i={action:"tribe-ticket-uncheckin",provider:n.attr("data-provider"),order_ID:n.attr("data-attendee-id"),nonce:Attendees.uncheckin_nonce};n.attr("data-event-id")&&(i.event_ID=n.attr("data-event-id")),t.post(ajaxurl,i,function(e){e.success&&(n.closest("tr").removeClass("tickets_checked"),t("#total_checkedin").text(parseInt(t("#total_checkedin").text())-1))},"json"),e.preventDefault()}),t("table.wp-list-table").on("click",".row-actions .move-ticket",function(e){var i=t(this).parents("tr").find('input[name="attendee[]"]').val().match(/^[0-9]+/);return i&&n(i),e.stopPropagation(),!1}),t("#doaction, #doaction2").click(function(e){var i;switch(t(e.currentTarget).attr("id")){case"doaction":i="action";break;case"doaction2":i="action2"}if("undefined"!=typeof i&&"move"===t('select[name="'+i+'"]').val()){var r=jQuery('input[name="attendee[]"]:checked');if(r.length){var o=[];r.each(function(){var e=t(this).val().match(/^[0-9]+/);e&&o.push(e.toString())}),n(o)}else alert(Attendees.cannot_move);return e.stopPropagation(),!1}}),function(){var n=t(".ticket-history"),i=t(".hide-ticket-history");i.hide(),n.click(function(n){function i(){var n={action:"get_ticket_history",check:c,ticket_id:a};t.post(ajaxurl,n,function(n){if("undefined"!=typeof n.data&&"string"==typeof n.data.html){var i=r.parents("tr"),c=e.count_columns(i),s=t('<tr id="ticket-history-'+a+'"> <td colspan="'+c+'">'+n.data.html+"</td></tr>");s.hide().insertAfter(i).slideDown(),r.hide(),o.show()}})}var r=t(this),o=r.siblings(".hide-ticket-history"),a=parseInt(r.data("ticket-id"),10),c=r.data("check");if(a&&c){var s=t(document.getElementById("ticket-history-"+a));return s.length?(s.show(),r.hide(),o.show()):i(),n.stopPropagation(),!1}}),i.click(function(e){var n=t(this),i=n.siblings(".ticket-history"),r=parseInt(i.data("ticket-id"),10);t(document.getElementById("ticket-history-"+r)).hide(),i.show(),n.hide()})}()}e.count_columns=function(e){var n=0,i=e.find("td, th");return i.length?(i.each(function(){var e=parseInt(t(this).attr("colspan"),10);e=e>1?e-1:0,n+=1+e}),n):0},e.remove_tickets=function(e){t("#the-list").find("tr").each(function(){var n=t(this),i=n.find(".check-column").find("input").val();if("string"==typeof i){var r=i.match(/^[0-9]+/);r.length&&-1!==e.indexOf(parseInt(r[0],10))&&n.remove()}})},t(document).ready(n)}(jQuery,tribe_event_tickets_attendees);
src/resources/js/tickets-tables.js CHANGED
@@ -1,14 +1,17 @@
1
- ( function( window, $ ) {
2
- var $table = $( document.getElementById( 'tribe_ticket_list_table' ) ).find( '.tribe-tickets-editor-table-tickets-body' );
3
- var $tribe_tickets = $( document.getElementById( 'tribetickets' ) );
 
4
 
 
 
5
  /**
6
  * Implemnts jQuery drag-n-drop for the ticket table.
7
  * Stores order in the #tickets_order field.
8
  *
9
  * @param jQuery object $element parent element to make sortable ( var $table above )
10
  */
11
- function make_sortable( $element ) {
12
  // If we don't have at least 2 sortable items, don't sort.
13
  if ( 2 > $element.find( 'tr:not(.Tribe__Tickets__RSVP)' ).length ) {
14
  return;
@@ -33,6 +36,10 @@
33
  handle: '.tribe-handle',
34
  helper: fixHelper,
35
  update: function( event, ui ) {
 
 
 
 
36
  var $tbody = $( this );
37
  var $items = $tbody.children( 'tr' );
38
 
@@ -40,39 +47,39 @@
40
  var $item = $( item );
41
  $item.find( '.tribe-ticket-field-order' ).val( k );
42
  } );
 
 
 
 
43
  }
44
  } );
 
45
  $element.disableSelection();
46
  $element.find( '.table-header' ).disableSelection();
47
  $element.sortable( 'option', 'disabled', false );
48
- }
 
 
 
 
49
 
50
- function tribe_toggle_sortable() {
51
  if ( window.matchMedia( '( min-width: 786px )' ).matches ) {
52
  if ( ! $table.hasClass( 'ui-sortable' ) ) {
53
- make_sortable( $table );
54
  } else {
55
  $table.sortable( 'enable' );
56
  }
57
- } else {
58
- if ( $table.hasClass( 'ui-sortable' ) ) {
59
- $table.sortable( 'disable' );
60
- }
61
  }
62
- }
63
 
64
  $( document ).ready( function () {
65
  // trigger once at start
66
- tribe_toggle_sortable();
67
 
68
  // disable/init depending on screen size
69
- var maybeSortable = _.debounce( tribe_toggle_sortable, 300 );
70
  $( window ).resize( maybeSortable );
71
-
72
- $tribe_tickets.on( 'tribe-tickets-refresh-tables', function( data ) {
73
- $table = $( document.getElementById( 'tribe_ticket_list_table' ) ).find( '.tribe-tickets-editor-table-tickets-body' );
74
- // trigger on table refresh
75
- tribe_toggle_sortable();
76
- });
77
- });
78
- })( window, jQuery );
1
+ // For compatibility purposes we add this
2
+ if ( 'undefined' === typeof tribe.tickets ) {
3
+ tribe.tickets = {};
4
+ }
5
 
6
+ tribe.tickets.table = {};
7
+ ( function( window, $, obj ) {
8
  /**
9
  * Implemnts jQuery drag-n-drop for the ticket table.
10
  * Stores order in the #tickets_order field.
11
  *
12
  * @param jQuery object $element parent element to make sortable ( var $table above )
13
  */
14
+ obj.make_sortable = function( $element ) {
15
  // If we don't have at least 2 sortable items, don't sort.
16
  if ( 2 > $element.find( 'tr:not(.Tribe__Tickets__RSVP)' ).length ) {
17
  return;
36
  handle: '.tribe-handle',
37
  helper: fixHelper,
38
  update: function( event, ui ) {
39
+ if ( tribe.tickets.editor ) {
40
+ $( window ).off( 'beforeunload.tribe' );
41
+ }
42
+
43
  var $tbody = $( this );
44
  var $items = $tbody.children( 'tr' );
45
 
47
  var $item = $( item );
48
  $item.find( '.tribe-ticket-field-order' ).val( k );
49
  } );
50
+
51
+ if ( tribe.tickets.editor ) {
52
+ $( window ).on( 'beforeunload.tribe', tribe.tickets.editor.beforeUnload );
53
+ }
54
  }
55
  } );
56
+
57
  $element.disableSelection();
58
  $element.find( '.table-header' ).disableSelection();
59
  $element.sortable( 'option', 'disabled', false );
60
+ };
61
+
62
+ obj.toggle_sortable = function() {
63
+ var $table = $( document.getElementById( 'tribe_ticket_list_table' ) ).find( '.tribe-tickets-editor-table-tickets-body' );
64
+ var $tribe_tickets = $( document.getElementById( 'tribetickets' ) );
65
 
 
66
  if ( window.matchMedia( '( min-width: 786px )' ).matches ) {
67
  if ( ! $table.hasClass( 'ui-sortable' ) ) {
68
+ obj.make_sortable( $table );
69
  } else {
70
  $table.sortable( 'enable' );
71
  }
72
+ } else if ( $table.hasClass( 'ui-sortable' ) ) {
73
+ $table.sortable( 'disable' );
 
 
74
  }
75
+ };
76
 
77
  $( document ).ready( function () {
78
  // trigger once at start
79
+ obj.toggle_sortable();
80
 
81
  // disable/init depending on screen size
82
+ var maybeSortable = _.debounce( obj.toggle_sortable, 300 );
83
  $( window ).resize( maybeSortable );
84
+ } );
85
+ } )( window, jQuery, tribe.tickets.table );
 
 
 
 
 
 
src/resources/js/tickets-tables.min.js CHANGED
@@ -1 +1 @@
1
- !function(e,t){function i(e){if(!(2>e.find("tr:not(.Tribe__Tickets__RSVP)").length)){var i=function(e,i){return i.children().each(function(){t(this).width(t(this).outerWidth(!0))}),i};e.sortable({axis:"y",containment:"parent",opacity:.7,tolerance:"cursor",cursor:"move",items:"tr:not(.Tribe__Tickets__RSVP)",forcePlaceholderSize:!0,handle:".tribe-handle",helper:i,update:function(e,i){var n=t(this),r=n.children("tr");r.each(function(e,i){var n=t(i);n.find(".tribe-ticket-field-order").val(e)})}}),e.disableSelection(),e.find(".table-header").disableSelection(),e.sortable("option","disabled",!1)}}function n(){e.matchMedia("( min-width: 786px )").matches?r.hasClass("ui-sortable")?r.sortable("enable"):i(r):r.hasClass("ui-sortable")&&r.sortable("disable")}var r=t(document.getElementById("tribe_ticket_list_table")).find(".tribe-tickets-editor-table-tickets-body"),a=t(document.getElementById("tribetickets"));t(document).ready(function(){n();var i=_.debounce(n,300);t(e).resize(i),a.on("tribe-tickets-refresh-tables",function(e){r=t(document.getElementById("tribe_ticket_list_table")).find(".tribe-tickets-editor-table-tickets-body"),n()})})}(window,jQuery);
1
+ "undefined"==typeof tribe.tickets&&(tribe.tickets={}),tribe.tickets.table={},function(e,t,i){i.make_sortable=function(i){if(!(2>i.find("tr:not(.Tribe__Tickets__RSVP)").length)){var r=function(e,i){return i.children().each(function(){t(this).width(t(this).outerWidth(!0))}),i};i.sortable({axis:"y",containment:"parent",opacity:.7,tolerance:"cursor",cursor:"move",items:"tr:not(.Tribe__Tickets__RSVP)",forcePlaceholderSize:!0,handle:".tribe-handle",helper:r,update:function(i,r){tribe.tickets.editor&&t(e).off("beforeunload.tribe");var o=t(this),a=o.children("tr");a.each(function(e,i){var r=t(i);r.find(".tribe-ticket-field-order").val(e)}),tribe.tickets.editor&&t(e).on("beforeunload.tribe",tribe.tickets.editor.beforeUnload)}}),i.disableSelection(),i.find(".table-header").disableSelection(),i.sortable("option","disabled",!1)}},i.toggle_sortable=function(){var r=t(document.getElementById("tribe_ticket_list_table")).find(".tribe-tickets-editor-table-tickets-body");t(document.getElementById("tribetickets"));e.matchMedia("( min-width: 786px )").matches?r.hasClass("ui-sortable")?r.sortable("enable"):i.make_sortable(r):r.hasClass("ui-sortable")&&r.sortable("disable")},t(document).ready(function(){i.toggle_sortable();var r=_.debounce(i.toggle_sortable,300);t(e).resize(r)})}(window,jQuery,tribe.tickets.table);
src/resources/js/tickets.js CHANGED
@@ -1,40 +1,35 @@
 
 
 
 
 
 
 
1
  var ticketHeaderImage = window.ticketHeaderImage || {};
2
 
3
- (function( window, $, undefined ) {
4
  'use strict';
5
 
6
  // base elements
7
- var $body = $( 'html, body' );
8
- var $document = $( document );
9
- var $tribe_tickets = $( document.getElementById( 'tribetickets' ) );
10
 
11
  // Bail if we don't have what we need
12
  if ( 0 === $tribe_tickets.length ) {
13
  return;
14
  }
15
 
16
- var $tickets_container = $( document.getElementById( 'event_tickets' ) );
17
- var $post_id = $( document.getElementById( 'post_ID' ) );
18
- var $publish = $( document.getElementById( 'publish' ) );
19
-
20
- var $metaboxBlocker = $tribe_tickets.find( '.tribe-tickets-editor-blocker' );
21
- var $spinner = $tribe_tickets.find( '.spinner' );
22
 
23
  // panels
24
- var $panels = $( document.getElementById( 'event_tickets' ) ).find( '.ticket_panel' );
25
- var $base_panel = $( document.getElementById( 'tribe_panel_base' ) );
26
- var $edit_panel = $( document.getElementById( 'tribe_panel_edit' ) );
27
- var $settings_panel = $( document.getElementById( 'tribe_panel_settings' ) );
28
-
29
- // date elements
30
- var $event_pickers = $( document.getElementById( 'tribe-event-datepickers' ) );
31
- var $ticket_start_date = $( document.getElementById( 'ticket_start_date' ) );
32
- var $ticket_end_date = $( document.getElementById( 'ticket_end_date' ) );
33
- var $ticket_start_time = $( document.getElementById( 'ticket_start_time' ) );
34
- var $ticket_end_time = $( document.getElementById( 'ticket_end_time' ) );
35
- var startofweek = 0;
36
- // misc ticket elements
37
- var $ticket_image_preview = $( document.getElementById( 'tribe_ticket_header_preview' ) );
38
 
39
  // Datepicker and Timepicker variables
40
  var datepickerFormats = [
@@ -52,7 +47,6 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
52
  'dd.mm.yy'
53
  ];
54
  var dateFormat = datepickerFormats[0];
55
- var time_format = 'HH:mmA';
56
 
57
  var changeEventCapacity = function( event, eventCapacity ) {
58
  if ( 'undefined' === typeof eventCapacity ) {
@@ -86,46 +80,6 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
86
  $capacityValue.text( eventCapacity );
87
  };
88
 
89
- function format_date( date, use_base_format ) {
90
- if ( 'undefined' === typeof date ) {
91
- // An empty string will give us now() below
92
- date = '';
93
- }
94
-
95
- var localFormat = dateFormat;
96
- if ( true === use_base_format ) {
97
- localFormat = datepickerFormats[0];
98
- }
99
-
100
- localFormat = localFormat.toUpperCase().replace( 'YY', 'YYYY' );
101
-
102
- return moment( date, localFormat ).format( dateFormat.toUpperCase().replace( 'YY', 'YYYY' ) );
103
- }
104
-
105
- function format_time( date ) {
106
- if ( 'undefined' === typeof date ) {
107
- // An empty string will give us now() below
108
- date = '';
109
- }
110
-
111
- // Passing in the format allows us to only provide a time portion
112
- // (no need fo a Date() object) but this does make it a bit brittle
113
- return moment( date, time_format ).format( time_format );
114
- }
115
-
116
- /**
117
- * Returns the currently selected default ticketing provider.
118
- * Defaults to RSVP if something fails
119
- *
120
- * @since 4.6
121
- *
122
- * @return string
123
- */
124
- function get_default_provider() {
125
- var $checked_provider = $( 'input[name=default_ticket_provider]', '#tribe_panel_settings' ).filter( ':checked' );
126
- return ( $checked_provider.length > 0 ) ? $checked_provider.val() : 'Tribe__Tickets__RSVP';
127
- }
128
-
129
  /**
130
  * Sets the ticket edit form provider to the currently selected default ticketing provider.
131
  * Defaults to RSVP if something fails
@@ -136,8 +90,10 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
136
  * @return void
137
  */
138
  function set_default_provider_radio( force_rsvp ) {
139
- force_rsvp = 'undefined' !== typeof force_rsvp;
140
- var $checked_provider = $( 'input[name="default_ticket_provider"]', '#tribe_panel_settings' ).filter( ':checked' );
 
 
141
  var provider_id = 'Tribe__Tickets__RSVP_radio';
142
 
143
  if ( ! force_rsvp && $checked_provider.length > 0 ) {
@@ -148,37 +104,68 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
148
  }
149
 
150
  /**
151
- * When a ticket type is edited we should (re-)establish the UI for showing
152
- * and hiding its history, if it has one.
153
  */
154
- function show_hide_ticket_type_history() {
155
- var $history = $tribe_tickets.find( '.ticket_advanced.history' );
156
 
157
- if ( ! $history.length ) {
158
- return;
 
 
159
  }
160
 
161
- $history.on( 'click', '.toggle-history', function( e ) {
162
- e.preventDefault();
163
- if ( $history.hasClass( '_show' ) ) {
164
- $history.removeClass( '_show' );
165
- } else {
166
- $history.addClass( '_show' );
167
- }
168
- } );
169
- }
170
 
171
- /**
172
- * Returns the current global capacity (via the settings panel)
173
- *
174
- * @since 4.6
175
- *
176
- * @return {number}
177
- */
178
- function get_global_cap() {
179
- var $global_capacity_edit = $( document.getElementById( 'settings_global_capacity_edit' ) );
180
- return ( 0 < $global_capacity_edit.length && 0 < $global_capacity_edit.val() ) ? $global_capacity_edit.val() : 0;
181
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
 
183
  /**
184
  * Switch from one panel to another
@@ -186,18 +173,19 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
186
  * @param object ($base_panel) $panel jQuery object containing the panel we want to switch to
187
  * @return void
188
  */
189
- function show_panel( e, $panel ) {
190
- if ( e ) {
191
- e.preventDefault();
192
- }
193
 
194
- // this way if we don't pass a panel, it works like a 'reset'
195
- if ( 'undefined' === typeof $panel ) {
 
 
 
196
  $panel = $base_panel;
197
  }
198
 
199
  // First, hide them all!
200
- $panels.each( function() {
201
  $( this ).attr( 'aria-hidden', true );
202
  } );
203
 
@@ -205,162 +193,171 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
205
  $panel.attr( 'aria-hidden', false );
206
 
207
  if ( ! $panel.is( $base_panel ) ) {
208
- $( window ).on( 'beforeunload.tribe', beforeUnload );
209
  } else {
210
  $( window ).off( 'beforeunload.tribe' );
211
  }
212
  }
213
 
214
- /**
215
- * Refreshes the base and settings panels when we've changed something
216
- *
217
- * @since 4.6
218
- *
219
- * @param string optional notice to prepend to the ticket table
220
- * @param bool (true) flag for panel swap
221
- * @return void
222
- */
223
- function refresh_panels( notice, swap ) {
224
- // make sure we have this for later (default to true)
225
- swap = 'undefined' === typeof swap;
226
 
227
- var $orders = $base_panel.find( '.tribe-ticket-field-order' );
228
  var params = {
229
- action : 'tribe-ticket-refresh-panels',
230
- notice : notice,
231
- post_ID : $post_id.val(),
232
- data : $orders.serialize(),
233
- nonce : TribeTickets.add_ticket_nonce
 
234
  };
235
 
236
- if ( 'settings-cancel' === notice ) {
237
- params.action = 'tribe-ticket-refresh-settings';
238
- }
239
-
240
  $.post(
241
  ajaxurl,
242
  params,
243
  function( response ) {
244
- // Ticket table
245
- if ( response.data.ticket_table && '' != response.data.ticket_table ) {
246
- // remove old ticket table
247
- var $ticket_table = $( document.getElementById( 'ticket_list_wrapper' ) );
248
-
249
- if ( 0 === $ticket_table.length ) {
250
- // if it's not there, create it :(
251
- var $container = $( '.tribe_sectionheader.ticket_list_container' );
252
- $ticket_table = $( '<div>', {id: "ticket_list_wrapper"});
253
- $container.append( $ticket_table );
254
-
255
- if ( $container.hasClass( 'tribe_no_capacity' ) ) {
256
- $container.removeClass( 'tribe_no_capacity' );
257
- }
258
- }
259
 
260
- $ticket_table.empty();
 
 
 
 
261
 
262
- // create new ticket table (and notice)
263
- var $new_table = $( '<div>' );
264
- $new_table.html( response.data.ticket_table );
 
265
 
266
- // insert new ticket table
267
- $ticket_table.append( $new_table );
268
- }
269
 
270
- // Settings table
271
- if ( 'undefined' !== typeof response.data.capacity_table ) {
272
- $( document.getElementById( 'tribe_expanded_capacity_table' ) ).replaceWith( response.data.capacity_table );
273
- }
 
 
 
 
274
 
275
- // Settings table
276
- if ( 'undefined' !== typeof response.data.settings_panel ) {
277
- var $newSettingsPanel = $( response.data.settings_panel );
278
- $settings_panel.replaceWith( $newSettingsPanel );
 
 
 
279
 
280
- // replaces the global variable
281
- $settings_panel = $newSettingsPanel;
282
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
283
 
284
- // Total Capacity line
285
- if ( 'undefined' !== typeof response.data.total_capacity ) {
286
- var $current_cap_line = $( document.getElementById( 'ticket_form_total_capacity' ) );
287
- if ( 0 < $current_cap_line.length ) {
288
- $current_cap_line.replaceWith( response.data.total_capacity );
289
- } else {
290
- var $wrap = $( '<div class="ticket_table_intro">' );
291
- $wrap.append( response.data.total_capacity );
292
- $( '.ticket_list_container' ).removeClass( 'tribe_no_capacity' ).prepend( $wrap );
293
  }
294
- }
 
 
 
295
 
296
- // Set Provider radio on ticket form
297
- set_default_provider_radio();
 
 
 
298
  }
299
- ).complete( function( response ) {
300
- $tribe_tickets.trigger( 'tribe-tickets-refresh-tables', response.data );
 
 
 
 
301
 
302
- if ( swap ) {
303
- show_panel();
 
304
  }
305
  } );
306
- }
307
 
308
- /**
309
- * If the user attempts to nav away without saving global stock setting
310
- * changes then try to bring this to their attention!
311
- */
312
- var beforeUnload = function( event ) {
313
- var returnValue = false;
314
 
315
- // If we are not on the base panel we alert the user about leaving
316
- // NOTE: This custom message will only work for Chrome < 51, Opera < 38, Firefox < 44, and Safari < 9.1
317
- if ( 'true' === $base_panel.attr( 'aria-hidden' ) ) {
318
- returnValue = tribe_global_stock_admin_ui.nav_away_msg;
319
- }
320
 
321
- event.returnValue = returnValue;
 
322
 
323
- // We can't trigger a confirm() dialog from within this action but returning
324
- // a string should achieve effectively the same result
325
- return returnValue;
326
- };
327
 
328
- ticketHeaderImage = {
329
- // Call this from the upload button to initiate the upload frame.
330
- uploader: function() {
331
- var frame = wp.media( {
332
- title : HeaderImageData.title,
333
- multiple: false,
334
- library : { type: 'image' },
335
- button : { text: HeaderImageData.button }
336
- } );
337
 
338
- // Handle results from media manager.
339
- frame.on( 'close', function() {
340
- var attachments = frame.state().get( 'selection' ).toJSON();
341
- if ( attachments.length ) {
342
- ticketHeaderImage.render( attachments[0] );
343
- }
344
- } );
345
 
346
- frame.open();
347
- return false;
348
- },
349
- // Output Image preview and populate widget form.
350
- render : function( attachment ) {
351
- $ticket_image_preview.html( ticketHeaderImage.imgHTML( attachment ) );
352
- $( document.getElementById( 'tribe_ticket_header_image_id' ) ).val( attachment.id );
353
- $( document.getElementById( 'tribe_ticket_header_remove' ) ).show();
354
- $( document.getElementById( 'tribe_tickets_image_preview_filename' ) ).show().find( '.filename' ).text( attachment.filename );
355
- },
356
- // Render html for the image.
357
- imgHTML : function( attachment ) {
358
- var img_html = '<img src="' + attachment.url + '" ';
359
- img_html += 'width="' + attachment.width + '" ';
360
- img_html += 'height="' + attachment.height + '" ';
361
- img_html += '/>';
362
- return img_html;
363
- }
364
  };
365
 
366
  $document.ajaxSend( function( event, jqxhr, settings ) {
@@ -410,173 +407,107 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
410
  $spinner.addClass( 'is-active' );
411
  }
412
  },
 
413
 
414
- /**
415
- * Clears the Form fields the correct way
416
- *
417
- * @return {void}
418
- */
419
- 'clear.tribe': function() {
420
- var $textFields = $edit_panel.find( 'input:not(:button):not(:radio):not(:checkbox):not([type="hidden"]), textarea' );
421
- var $checkFields = $edit_panel.find( 'input:checkbox, input:radio' );
422
- var $idField = $edit_panel.find( '#ticket_id' );
423
-
424
- // some fields may have a default value we don't want to lose after clearing the form
425
- $edit_panel.find( 'input[data-default-value]' ).each( function() {
426
- var $current_field = $( this );
427
- $current_field.val( $current_field.data( 'default-value' ) );
428
- } );
429
-
430
- // Reset the min/max datepicker settings so that they aren't inherited by the next ticket that is edited
431
- $ticket_start_date.datepicker( 'option', 'maxDate', null )
432
- $ticket_start_date.val( '' )
433
- $ticket_start_date.trigger( 'change' );
434
 
435
- $ticket_start_time.val( '' );
436
- $ticket_start_time.trigger( 'change' );
 
 
437
 
438
- // event end date, time
439
- $ticket_end_date.datepicker( 'option', 'minDate', null );
440
- $ticket_end_date.val( '' );
441
- $ticket_end_date.trigger( 'change' );
442
 
443
- $ticket_end_time.val( '' );
444
- $ticket_end_time.trigger( 'change' );
 
445
 
446
- $edit_panel.find( '#ticket_price' ).removeProp( 'disabled' )
447
- .siblings( '.no-update-message' ).html( '' ).hide()
448
- .end().siblings( '.description' ).show();
 
 
 
449
 
450
- $( document.getElementById( 'tribe-tickets-attendee-sortables' ) ).empty();
 
451
 
452
- $( '.accordion-content.is-active' ).removeClass( 'is-active' );
 
 
453
 
454
- $( document.getElementById( 'ticket_bottom_right' ) ).empty();
 
 
 
455
 
456
- $edit_panel.find( '.accordion-header, .accordion-content' ).removeClass( 'is-active' );
 
457
 
458
- $textFields.val( '' ).trigger( 'change' );
459
- $checkFields.prop( 'checked', false ).trigger( 'change' );
460
- $idField.val( '' ).trigger( 'change' );
461
- $edit_panel.find( '.tribe-tickets-editor-history-container' ).remove();
462
- },
463
 
464
- /**
465
- * When the edit ticket form fields have completed loading we can setup
466
- * other UI features as needed.
467
- */
468
- 'edit-tickets-complete.tribe': function() {
469
- show_hide_ticket_type_history();
470
- }
471
  } );
472
 
473
- /* "Settings" button action */
474
- $document.on( 'click', '#settings_form_toggle', function( e ) {
475
- show_panel( e, $settings_panel );
476
- } );
 
 
 
 
 
477
 
478
- /* Settings "Cancel" button action */
479
- $document.on( 'click', '#tribe_settings_form_cancel', function( e ) {
480
- refresh_panels( 'settings-cancel' );
 
 
 
 
481
  } );
482
 
483
- /* "Save Settings" button action */
484
- $document.on( 'click', '#tribe_settings_form_save', function( e ) {
485
- e.preventDefault();
 
486
 
487
- // Do this first to prevent weirdness with global capacity
488
- var $global_capacity_edit = $( document.getElementById( 'settings_global_capacity_edit' ) )
489
- if ( false === $global_capacity_edit.prop( 'disabled' ) ) {
490
- $global_capacity_edit.blur();
491
- $global_capacity_edit.prop( 'disabled', true );
492
- }
493
 
494
- var form_data = $settings_panel.find( '.settings_field' ).serialize();
495
- var params = {
496
- action : 'tribe-ticket-save-settings',
497
- formdata: form_data,
498
- post_ID : $post_id.val(),
499
- nonce : TribeTickets.add_ticket_nonce
 
500
  };
501
 
502
  $.post(
503
  ajaxurl,
504
  params,
505
  function( response ) {
506
- $tribe_tickets.trigger( 'saved-image.tribe', response );
507
- if ( response.success ) {
508
- refresh_panels( 'settings' );
509
  }
 
 
510
  },
511
  'json'
512
  );
513
- } );
514
-
515
- /* "Add ticket" button action */
516
- $document.on( 'click', '.ticket_form_toggle', function( e ) {
517
- e.preventDefault();
518
- var $default_provider = get_default_provider();
519
- var global_cap = get_global_cap();
520
- var start_date;
521
- var start_time;
522
- var end_date;
523
- var end_time;
524
- var $maxCapacity = $( '.tribe-ticket-capacity-max' );
525
- var $capacityValue = $maxCapacity.find( '.tribe-ticket-capacity-value' );
526
-
527
- $tribe_tickets.trigger( 'clear.tribe' );
528
-
529
- if ( 'rsvp_form_toggle' === $( this ).closest( 'button' ).attr( 'id' ) ) {
530
- set_default_provider_radio( true );
531
- } else {
532
- set_default_provider_radio();
533
- // Only want to do this if we're setting up a ticket - as opposed to an RSVP
534
- $( document.getElementById( $default_provider + '_' + tribe_ticket_vars.stock_mode ) ).prop( 'checked', true );
535
- $( document.getElementById( $default_provider + '_global_capacity' ) ).val( global_cap );
536
-
537
- if ( 0 !== global_cap && '' !== global_cap ) {
538
- $( document.getElementById( $default_provider + '_global_stock_block') ).find( '.global_capacity-wrapper' ).addClass( 'screen-reader-text' );
539
- } else {
540
- $( document.getElementById( $default_provider + '_global_stock_block') ).find( '.global_capacity-wrapper' ).removeClass( 'screen-reader-text' );
541
- }
542
-
543
- changeEventCapacity( e, global_cap );
544
- }
545
-
546
- $edit_panel.find( '.tribe-dependency' ).trigger( 'verify.dependency' );
547
-
548
- $( document.getElementById( 'tribe_tickets_show_description' ) ).prop( 'checked', true );
549
-
550
- // Hide the sale price field - it doesn't apply for new tickets
551
- $( document.getElementById( 'ticket_sale_price' ) ).closest( '.input_block' ).hide();
552
 
553
- // We have to trigger this after verify.dependency, as it enables this field and we want it disabled
554
- if ( 'ticket_form_toggle' === $( this ).attr( 'id' ) && 0 < global_cap ) {
555
- $( document.getElementById( $default_provider + '_global_capacity' ) ).prop( 'disabled', true );
556
- }
557
-
558
- $( '.tribe-tickets-attendee-saved-fields' ).show();
559
-
560
- show_panel( e, $edit_panel );
561
- } );
562
-
563
- /* Ticket "Cancel" button action */
564
- $document.on( 'click', '#ticket_form_cancel', function( e ) {
565
- refresh_panels();
566
- $tribe_tickets.trigger( 'clear.tribe' );
567
- } );
568
-
569
- /* Change global stock type if we've put a value in global_stock_cap */
570
- $document.on( 'change', '.tribe-ticket-field-capacity', function( e ) {
571
- var $this = $( this );
572
- var $globalField = $this.parents( '.input_block' ).eq( 0 ).find( '.tribe-ticket-field-mode' );
573
-
574
- // Bail if we have any value on Stock Cap
575
- if ( ! $this.val() ) {
576
- return;
577
- }
578
-
579
- $globalField.val( 'capped' );
580
  } );
581
 
582
  /* "Save Ticket" button action */
@@ -591,12 +522,13 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
591
  return;
592
  }
593
 
594
- $tribe_tickets.trigger( 'save-ticket.tribe', e );
 
595
  var $orders = $base_panel.find( '.tribe-ticket-field-order' );
596
  var params = {
597
- action : 'tribe-ticket-add-' + $( 'input[name=ticket_provider]:checked' ).val(),
598
- formdata : $form.find( '.ticket_field' ).serialize(),
599
- post_ID : $post_id.val(),
600
  nonce : TribeTickets.add_ticket_nonce,
601
  menu_order: $orders.length,
602
  is_admin : $( 'body' ).hasClass( 'wp-admin' )
@@ -606,292 +538,61 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
606
  ajaxurl,
607
  params,
608
  function( response ) {
609
- $tribe_tickets.trigger( 'saved-ticket.tribe', response );
610
-
611
- if ( response.success ) {
612
- refresh_panels( 'ticket' );
613
  }
 
 
614
  },
615
  'json'
616
  );
617
  } );
618
 
619
  /* "Delete Ticket" link action */
620
- $document.on( 'click', '.ticket_delete', function( e ) {
621
  if ( ! confirm( tribe_ticket_notices.confirm_alert ) ) {
622
  return false;
623
  }
624
 
625
- e.preventDefault();
626
 
627
- $tribe_tickets.trigger( 'delete-ticket.tribe', e );
628
 
629
  var deleted_ticket_id = $( this ).attr( 'attr-ticket-id' );
630
 
631
  var params = {
632
- action : 'tribe-ticket-delete-' + $( this ).attr( 'attr-provider' ),
633
- post_ID : $post_id.val(),
634
  ticket_id: deleted_ticket_id,
635
- nonce : TribeTickets.remove_ticket_nonce
 
636
  };
637
 
638
  $.post(
639
  ajaxurl,
640
  params,
641
  function( response ) {
642
- $tribe_tickets.trigger( 'deleted-ticket.tribe', response );
643
-
644
- if ( response.success ) {
645
- // remove deleted ticket from table
646
- var $deleted_row = $( document.getElementById( 'tribe_ticket_list_table' ) ).find( '[data-ticket-order-id="order_' + deleted_ticket_id + '"]' );
647
- $deleted_row.remove();
648
-
649
- refresh_panels( 'delete' );
650
-
651
- show_panel( e );
652
- }
653
- },
654
- 'json'
655
- );
656
- } );
657
-
658
- /* "Edit Ticket" link action */
659
- $document.on( 'click', '.ticket_edit_button', function( e ) {
660
- e.preventDefault();
661
-
662
- var ticket_id = this.getAttribute( 'data-ticket-id' );
663
-
664
- var params = {
665
- action : 'tribe-ticket-edit-' + this.getAttribute( 'data-provider' ),
666
- post_ID : $post_id.val(),
667
- ticket_id: ticket_id,
668
- nonce : TribeTickets.edit_ticket_nonce,
669
- is_admin : $( 'body' ).hasClass( 'wp-admin' )
670
- };
671
-
672
- $.post(
673
- ajaxurl,
674
- params,
675
- function( response ) {
676
- if ( ! response ) {
677
  return;
678
  }
679
 
680
- var regularPrice = response.data.price;
681
- var salePrice = regularPrice;
682
- var onSale = false;
683
- var provider_class = response.data.provider_class;
684
- var start_date;
685
- var start_time;
686
- var end_date;
687
- var end_time;
688
-
689
- var $maxCapacity = $( '.tribe-ticket-capacity-max' );
690
- var $capacityValue = $maxCapacity.find( '.tribe-ticket-capacity-value' );
691
-
692
- // trigger a change event on the provider radio input so the advanced fields can be re-initialized
693
- $( 'input:radio[name=ticket_provider]' ).filter( '[value=' + response.data.provider_class + ']' ).click();
694
- $( 'input[name=ticket_provider]:radio' ).change();
695
-
696
- // Capacity/Stock
697
- if ( response.data.global_stock_mode ) {
698
- switch ( response.data.global_stock_mode ) {
699
- case 'global':
700
- $( document.getElementById( provider_class + '_global' ) )
701
- .prop( 'checked', true )
702
- .val( 'global' );
703
-
704
- $( document.getElementById( provider_class + '_global_capacity' ) )
705
- .attr( 'placeholder', response.data.event_capacity )
706
- .val( response.data.event_capacity )
707
- .prop( 'disabled', true );
708
-
709
- $( document.getElementById( provider_class + '_global_stock_cap' ) ).val( '' );
710
-
711
- changeEventCapacity( e, response.data.event_capacity );
712
-
713
- break;
714
- case 'capped':
715
- $( document.getElementById( provider_class + '_global' ) )
716
- .prop( 'checked', true )
717
- .val( 'capped' );
718
-
719
- $( document.getElementById( provider_class + '_global_capacity' ) )
720
- .attr( 'placeholder', response.data.event_capacity )
721
- .val( response.data.event_capacity )
722
- .prop( 'disabled', true );
723
-
724
- $( document.getElementById( provider_class + '_global_stock_cap' ) ).val( response.data.capacity );
725
-
726
- changeEventCapacity( e, response.data.event_capacity );
727
-
728
- break;
729
- case 'own':
730
- $( document.getElementById( provider_class + '_own' ) ).prop( 'checked', true );
731
- if ( -1 != response.data.capacity ) {
732
- $( document.getElementById( provider_class + '_capacity' ) ).val( response.data.capacity );
733
- }
734
- break;
735
- default:
736
- // Just in case
737
- $( document.getElementById( provider_class + '_unlimited' ) ).prop( 'checked', true );
738
- $( document.getElementById( provider_class + '_global_stock_cap' ) ).val( '' );
739
- }
740
-
741
-
742
- } else {
743
- $( document.getElementById( response.data.provider_class + '_unlimited' ) ).prop( 'checked', true );
744
- $( document.querySelectorAll( '.ticket_stock' ) ).val( response.data.original_stock );
745
- }
746
-
747
- $( 'input[name=ticket_global_stock]:radio' ).change();
748
-
749
- $( document.getElementById( 'ticket_id' ) ).val( response.data.ID );
750
- $( document.getElementById( 'ticket_name' ) ).val( response.data.name );
751
- $( document.getElementById( 'ticket_description' ) ).val( response.data.description );
752
-
753
- // Compare against 0 for backwards compatibility.
754
- if ( response.data.show_description || 1 === parseInt( response.data.show_description, 10 ) ) {
755
- $( document.getElementById( 'tribe_tickets_show_description' ) ).prop( 'checked', true );
756
- } else {
757
- $( document.getElementById( 'tribe_tickets_show_description' ) ).removeAttr( 'checked' );
758
- }
759
-
760
- if ( response.data.start_date ) {
761
- start_date = format_date( response.data.start_date, true );
762
- } else if ( undefined !== $( document.getElementById( 'EventStartDate' ) ).val() ) {
763
- start_date = format_date( $( document.getElementById( 'EventStartDate' ) ).val() );
764
- }
765
-
766
- if ( response.data.start_time ) {
767
- start_time = format_time( response.data.start_time );
768
- } else if ( undefined !== $( document.getElementById( 'EventStartTime' ) ).val() ) {
769
- start_time = format_time( $( document.getElementById( 'EventStartTime' ) ).val() );
770
- }
771
-
772
- if ( start_date ) {
773
- $ticket_start_date.val( start_date ).trigger( 'change' );
774
- }
775
-
776
- if ( start_time ) {
777
- $ticket_start_time.val( start_time ).trigger( 'change' );
778
- }
779
-
780
- if ( response.data.end_date ) {
781
- end_date = format_date( response.data.end_date, true );
782
- } else if ( undefined !== $( document.getElementById( 'EventEndDate' ) ).val() ) {
783
- end_date = format_date( $( document.getElementById( 'EventEndDate' ) ).val() );
784
- }
785
-
786
- if ( response.data.end_time ) {
787
- end_time = format_time( response.data.end_time );
788
- } else if ( undefined !== $( document.getElementById( 'EventEndTime' ) ).val() ) {
789
- end_time = format_time( $( document.getElementById( 'EventEndTime' ) ).val() );
790
- }
791
-
792
- if ( end_date ) {
793
- $ticket_end_date.val( end_date ).trigger( 'change' );
794
- }
795
-
796
- if ( end_time ) {
797
- $ticket_end_time.val( end_time ).trigger( 'change' );
798
- }
799
-
800
- $( document.getElementById( 'advanced_fields' ) ).empty( '' ).append( response.data.advanced_fields );
801
-
802
- // set the prices
803
- if ( 'undefined' !== typeof response.data.on_sale && response.data.on_sale ) {
804
- onSale = true;
805
- regularPrice = response.data.regular_price;
806
- }
807
-
808
- var $ticket_price = $tribe_tickets.find( '#ticket_price' );
809
- $ticket_price.val( regularPrice );
810
-
811
- if ( 'undefined' !== typeof response.data.disallow_update_price_message ) {
812
- $ticket_price.siblings( '.no-update-message' ).html( response.data.disallow_update_price_message );
813
- } else {
814
- $ticket_price.siblings( '.no-update-message' ).html( '' );
815
- }
816
-
817
- if ( 'undefined' !== typeof response.data.can_update_price && ! response.data.can_update_price ) {
818
- $ticket_price.prop( 'disabled', 'disabled' );
819
- $ticket_price.siblings( '.description' ).hide();
820
- $ticket_price.siblings( '.no-update-message' ).show();
821
- } else {
822
- $ticket_price.removeProp( 'disabled' );
823
- $ticket_price.siblings( '.description' ).show();
824
- $ticket_price.siblings( '.no-update-message' ).hide();
825
- }
826
-
827
- // History Content
828
- if ( 'undefined' !== typeof response.data.history ) {
829
- var $historyContent = $( response.data.history );
830
-
831
- $edit_panel.find( '.accordion' ).append( $historyContent );
832
- window.MTAccordion( {
833
- target: '.accordion', // ID (or class) of accordion container
834
- } );
835
- } else {
836
- $edit_panel.find( '.tribe-tickets-editor-history-container' ).remove();
837
- }
838
-
839
- var $sale_field = $( document.getElementById( 'ticket_sale_price' ) );
840
- var $sale_container = $sale_field.closest( '.input_block' )
841
-
842
- if ( onSale ) {
843
- $sale_field.prop( 'readonly', false ).val( salePrice ).prop( 'readonly', true );
844
- $sale_container.show();
845
- } else {
846
- $sale_container.hide();
847
- }
848
-
849
- if ( 'undefined' !== typeof response.data.purchase_limit && response.data.purchase_limit ) {
850
- $( document.getElementById( 'ticket_purchase_limit' ) ).val( response.data.purchase_limit );
851
- }
852
-
853
- if ( response.data.sku ) {
854
- $( document.querySelectorAll( '.sku_input' ) ).val( response.data.sku );
855
- }
856
-
857
- $( document.getElementById( 'tribe-tickets-attendee-sortables' ) ).empty();
858
-
859
- if ( 'undefined' !== typeof response.data.attendee_fields && response.data.attendee_fields ) {
860
- $( document.getElementById( 'tribe-tickets-attendee-sortables' ) ).html( response.data.attendee_fields );
861
- $( '.tribe-tickets-attendee-saved-fields' ).hide();
862
- } else {
863
- $( '.tribe-tickets-attendee-saved-fields' ).show();
864
- }
865
-
866
- if ( 'undefined' !== typeof response.data.controls && response.data.controls ) {
867
- $( document.getElementById( 'ticket_bottom_right' ) ).html( response.data.controls );
868
- }
869
-
870
- $tribe_tickets.find( '.tribe-bumpdown-trigger' ).bumpdown();
871
-
872
- $( 'a#ticket_form_toggle' ).hide();
873
-
874
- $edit_panel.find( '.tribe-dependency' ).trigger( 'verify.dependency' );
875
  },
876
  'json'
877
- ).always( function( response ) {
878
- $tribe_tickets.trigger( 'edit-tickets-complete.tribe' );
879
-
880
- // re-trigger all dependencies
881
- $edit_panel.find( '.tribe-dependency' ).trigger( 'verify.dependency' );
882
 
883
- if ( response.data.event_capacity ) {
884
- $( document.getElementById( response.data.provider_class + '_global_capacity' ) ).prop( 'disabled', true );
885
- }
 
886
 
887
- show_panel( e, $edit_panel );
888
- } );
889
- } );
 
890
 
891
- /* Handle editing global capacity from the settings panel */
892
- $document.on( 'click', '#global_capacity_edit_button', function( e ) {
893
- e.preventDefault();
894
- $( document.getElementById( 'settings_global_capacity_edit' ) ).prop( 'disabled', false ).focus();
895
  } );
896
 
897
  $document.on( 'keyup', '#ticket_price', function ( e ) {
@@ -913,31 +614,49 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
913
  ticketHeaderImage.uploader( '', '' );
914
  } );
915
 
 
 
 
 
 
 
 
 
 
 
 
 
 
916
  /* Handle saving changes to capacity from Settings form */
917
- $document.on( 'blur', '#settings_global_capacity_edit', function() {
 
 
 
 
 
 
 
 
918
  var $capacity = $( this );
919
- var capacity = $capacity.val();
 
 
920
 
921
- if ( '' === capacity ) {
 
922
  $capacity.val( 0 );
923
  capacity = 0;
924
  }
925
 
926
- var params = {
927
- action : 'tribe-events-edit-global-capacity',
928
- post_ID : $post_id.val(),
929
- capacity : capacity,
930
- nonce : TribeTickets.edit_ticket_nonce
931
- };
932
 
933
- $.post(
934
- ajaxurl,
935
- params,
936
- function( response ) {
937
- $( document.getElementById('settings_global_capacity_edit') ).prop( 'disabled', true );
938
- refresh_panels( null, false );
939
- }
940
- );
941
  } );
942
 
943
  /* Track changes to the global stock level on the ticket edit form. */
@@ -956,9 +675,6 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
956
  }
957
  } );
958
 
959
- /** Track changes to the global stock level on the Settings form. */
960
- $document.on( 'change', '#tribe-tickets-global-stock-level', changeEventCapacity );
961
-
962
  /* Remove header image action */
963
  $document.on( 'click', '#tribe_ticket_header_remove', function( e ) {
964
  e.preventDefault();
@@ -966,108 +682,10 @@ var ticketHeaderImage = window.ticketHeaderImage || {};
966
  $( document.getElementById( 'tribe_ticket_header_remove' ) ).hide();
967
  $( document.getElementById( 'tribe_tickets_image_preview_filename' ) ).hide().find( '.filename' ).text( '' );
968
  $( document.getElementById( 'tribe_ticket_header_image_id' ) ).val( '' );
969
-
970
  } );
971
 
972
  $document.ready( function() {
973
- if ( $event_pickers.length ) {
974
- startofweek = $event_pickers.data( 'startofweek' );
975
- }
976
-
977
- if ( 'undefined' !== typeof tribe_dynamic_help_text ) {
978
- var indexDatepickerFormat = $.isNumeric( tribe_dynamic_help_text.datepicker_format_index ) ? tribe_dynamic_help_text.datepicker_format_index : 0;
979
- dateFormat = datepickerFormats[ indexDatepickerFormat ];
980
- }
981
-
982
- var datepickerOpts = {
983
- dateFormat : dateFormat,
984
- showAnim : 'fadeIn',
985
- changeMonth : true,
986
- changeYear : true,
987
- numberOfMonths : 3,
988
- firstDay : startofweek,
989
- showButtonPanel: false,
990
- onChange : function() {
991
- },
992
- beforeShow : function( element, object ) {
993
- object.input.data( 'prevDate', object.input.datepicker( 'getDate' ) );
994
-
995
- // Capture the datepicker div here; it's dynamically generated so best to grab here instead of elsewhere.
996
- var $dpDiv = $( object.dpDiv );
997
-
998
- // "Namespace" our CSS a bit so that our custom jquery-ui-datepicker styles don't interfere with other plugins'/themes'.
999
- $dpDiv.addClass( 'tribe-ui-datepicker' );
1000
-
1001
- // @todo Look into making this also compatible with ACF
1002
- // $event_details.trigger( 'tribe.ui-datepicker-div-beforeshow', [ object ] );
1003
-
1004
- $dpDiv.attrchange({
1005
- trackValues : true,
1006
- callback : function( attr ) {
1007
- // This is a non-ideal, but very reliable way to look for the closing of the ui-datepicker box,
1008
- // since onClose method is often included by other plugins, including Events Calender PRO.
1009
- if (
1010
- attr.newValue.indexOf( 'display: none' ) >= 0 ||
1011
- attr.newValue.indexOf( 'display:none' ) >= 0
1012
- ) {
1013
- $dpDiv.removeClass( 'tribe-ui-datepicker' );
1014
-
1015
- // @todo Look into making this also compatible with ACF
1016
- // $event_details.trigger( 'tribe.ui-datepicker-div-closed', [ object ] );
1017
- }
1018
- }
1019
- });
1020
- },
1021
- onSelect : function( dateText, inst ) {
1022
- var the_date = $.datepicker.parseDate( dateFormat, dateText );
1023
-
1024
- if ( inst.id === 'ticket_start_date' ) {
1025
- $ticket_end_date.datepicker( 'option', 'minDate', the_date );
1026
- } else {
1027
- $ticket_start_date.datepicker( 'option', 'maxDate', the_date );
1028
- }
1029
- }
1030
- };
1031
-
1032
- $.extend( datepickerOpts, tribe_l10n_datatables.datepicker );
1033
-
1034
- var $timepickers = $tribe_tickets.find( '.tribe-timepicker:not(.ui-timepicker-input)' );
1035
- tribe_timepickers.setup_timepickers( $timepickers );
1036
-
1037
- $ticket_start_date.datepicker( datepickerOpts ).datepicker( 'option', 'defaultDate', $( document.getElementById( 'EventStartDate' ) ).val() ).keyup( function( e ) {
1038
- if ( e.keyCode === 8 || e.keyCode === 46 ) {
1039
- $.datepicker._clearDate( this );
1040
- }
1041
- } );
1042
-
1043
- $ticket_end_date.datepicker( datepickerOpts ).datepicker( 'option', 'defaultDate', $( document.getElementById( 'EventEndDate' ) ).val() ).keyup( function( e ) {
1044
- if ( e.keyCode === 8 || e.keyCode === 46 ) {
1045
- $.datepicker._clearDate( this );
1046
- }
1047
- } );
1048
-
1049
- if ( $ticket_image_preview.find( 'img' ).length ) {
1050
- $( document.getElementById( 'tribe_ticket_header_remove' ) ).show();
1051
-
1052
- var $tiximg = $ticket_image_preview.find( 'img' );
1053
- $tiximg.removeAttr( 'width' ).removeAttr( 'height' );
1054
-
1055
- if ( $tribe_tickets.width() < $tiximg.width() ) {
1056
- $tiximg.css( 'width', '95%' );
1057
- }
1058
- }
1059
-
1060
- // prompt user to save changes in ticket meta box if ticket meta box is not showing the base panel
1061
- $publish.on( 'click.tribe-ticket-editing-in-progress', function( e ) {
1062
- if (
1063
- 'true' === $base_panel.attr( 'aria-hidden' )
1064
- && ! confirm( $base_panel.data( 'save-prompt' ) )
1065
- ) {
1066
- return false;
1067
- }
1068
-
1069
- $( window ).off( 'beforeunload.tribe' );
1070
- } );
1071
  } );
1072
 
1073
- } )( window, jQuery );
1
+ // For compatibility purposes we add this
2
+ if ( 'undefined' === typeof tribe.tickets ) {
3
+ tribe.tickets = {};
4
+ }
5
+
6
+ tribe.tickets.editor = {};
7
+
8
  var ticketHeaderImage = window.ticketHeaderImage || {};
9
 
10
+ (function( window, $, obj ) {
11
  'use strict';
12
 
13
  // base elements
14
+ var $body = $( 'html, body' );
15
+ var $document = $( document );
16
+ var $tribe_tickets = $( document.getElementById( 'tribetickets' ) );
17
 
18
  // Bail if we don't have what we need
19
  if ( 0 === $tribe_tickets.length ) {
20
  return;
21
  }
22
 
23
+ var $tickets_container = $( document.getElementById( 'event_tickets' ) );
24
+ var $post_id = $( document.getElementById( 'post_ID' ) );
25
+ var $publish = $( document.getElementById( 'publish' ) );
26
+ var $metaboxBlocker = $tribe_tickets.find( '.tribe-tickets-editor-blocker' );
27
+ var $spinner = $tribe_tickets.find( '.spinner' );
 
28
 
29
  // panels
30
+ var $base_panel = $( document.getElementById( 'tribe_panel_base' ) );
31
+ var $edit_panel = $( document.getElementById( 'tribe_panel_edit' ) );
32
+ var $settings_panel = $( document.getElementById( 'tribe_panel_settings' ) );
 
 
 
 
 
 
 
 
 
 
 
33
 
34
  // Datepicker and Timepicker variables
35
  var datepickerFormats = [
47
  'dd.mm.yy'
48
  ];
49
  var dateFormat = datepickerFormats[0];
 
50
 
51
  var changeEventCapacity = function( event, eventCapacity ) {
52
  if ( 'undefined' === typeof eventCapacity ) {
80
  $capacityValue.text( eventCapacity );
81
  };
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  /**
84
  * Sets the ticket edit form provider to the currently selected default ticketing provider.
85
  * Defaults to RSVP if something fails
90
  * @return void
91
  */
92
  function set_default_provider_radio( force_rsvp ) {
93
+ if ( 'undefined' === typeof force_rsvp ) {
94
+ force_rsvp = true;
95
+ }
96
+ var $checked_provider = $tribe_tickets.find( '.tribe-ticket-editor-field-default_provider' ).filter( ':checked' );
97
  var provider_id = 'Tribe__Tickets__RSVP_radio';
98
 
99
  if ( ! force_rsvp && $checked_provider.length > 0 ) {
104
  }
105
 
106
  /**
107
+ * If the user attempts to nav away without saving global stock setting
108
+ * changes then try to bring this to their attention!
109
  */
110
+ obj.beforeUnload = function( event ) {
111
+ var returnValue = false;
112
 
113
+ // If we are not on the base panel we alert the user about leaving
114
+ // NOTE: This custom message will only work for Chrome < 51, Opera < 38, Firefox < 44, and Safari < 9.1
115
+ if ( 'true' === $base_panel.attr( 'aria-hidden' ) ) {
116
+ returnValue = tribe_global_stock_admin_ui.nav_away_msg;
117
  }
118
 
119
+ event.returnValue = returnValue;
 
 
 
 
 
 
 
 
120
 
121
+ // We can't trigger a confirm() dialog from within this action but returning
122
+ // a string should achieve effectively the same result
123
+ return returnValue;
124
+ };
125
+
126
+ ticketHeaderImage = {
127
+ // Call this from the upload button to initiate the upload frame.
128
+ uploader: function() {
129
+ var frame = wp.media( {
130
+ title : HeaderImageData.title,
131
+ multiple: false,
132
+ library : { type: 'image' },
133
+ button : { text: HeaderImageData.button }
134
+ } );
135
+
136
+ // Handle results from media manager.
137
+ frame.on( 'close', function() {
138
+ var attachments = frame.state().get( 'selection' ).toJSON();
139
+ if ( attachments.length ) {
140
+ ticketHeaderImage.render( attachments[0] );
141
+ }
142
+ } );
143
+
144
+ frame.open();
145
+ return false;
146
+ },
147
+ // Output Image preview and populate widget form.
148
+ render : function( attachment ) {
149
+ $( document.getElementById( 'tribe_ticket_header_preview' ) ).html( ticketHeaderImage.imgHTML( attachment ) );
150
+ $( document.getElementById( 'tribe_ticket_header_image_id' ) ).val( attachment.id );
151
+ $( document.getElementById( 'tribe_ticket_header_remove' ) ).show();
152
+ $( document.getElementById( 'tribe_tickets_image_preview_filename' ) ).show().find( '.filename' ).text( attachment.filename );
153
+ },
154
+ // Render html for the image.
155
+ imgHTML : function( attachment ) {
156
+ var img_html = '<img src="' + attachment.url + '" ';
157
+ img_html += 'width="' + attachment.width + '" ';
158
+ img_html += 'height="' + attachment.height + '" ';
159
+ img_html += '/>';
160
+ return img_html;
161
+ }
162
+ };
163
+
164
+ obj.panels = {
165
+ list: '#tribe_panel_base',
166
+ ticket: '#tribe_panel_edit',
167
+ settings: '#tribe_panel_settings',
168
+ };
169
 
170
  /**
171
  * Switch from one panel to another
173
  * @param object ($base_panel) $panel jQuery object containing the panel we want to switch to
174
  * @return void
175
  */
176
+ obj.swapPanel = function( panel ) {
177
+ var $panel;
 
 
178
 
179
+ if ( panel instanceof jQuery ) {
180
+ $panel = panel;
181
+ } else if ( 'undefined' !== typeof obj.panels[ panel ] ) {
182
+ $panel = $( obj.panels[ panel ] );
183
+ } else {
184
  $panel = $base_panel;
185
  }
186
 
187
  // First, hide them all!
188
+ $tribe_tickets.find( '.ticket_panel' ).each( function() {
189
  $( this ).attr( 'aria-hidden', true );
190
  } );
191
 
193
  $panel.attr( 'aria-hidden', false );
194
 
195
  if ( ! $panel.is( $base_panel ) ) {
196
+ $( window ).on( 'beforeunload.tribe', obj.beforeUnload );
197
  } else {
198
  $( window ).off( 'beforeunload.tribe' );
199
  }
200
  }
201
 
202
+ obj.fetchPanels = function( data, swapTo ) {
203
+ if ( 'undefined' === typeof data ) {
204
+ data = [];
205
+ }
 
 
 
 
 
 
 
 
206
 
 
207
  var params = {
208
+ action : 'tribe-ticket-panels',
209
+ notice : false,
210
+ post_id : $post_id.val(),
211
+ nonce : TribeTickets.add_ticket_nonce,
212
+ data : data,
213
+ is_admin: $( 'body' ).hasClass( 'wp-admin' )
214
  };
215
 
 
 
 
 
216
  $.post(
217
  ajaxurl,
218
  params,
219
  function( response ) {
220
+ if ( ! response.success ) {
221
+ return;
222
+ }
223
+
224
+ obj.refreshPanels( response.data, swapTo );
225
+ },
226
+ 'json'
227
+ );
228
+ };
 
 
 
 
 
 
229
 
230
+ obj.refreshPanels = function ( panels, swapTo ) {
231
+ // After this point is safe to assume we have a valid set of panels
232
+ $base_panel = $( panels.list );
233
+ $edit_panel = $( panels.ticket );
234
+ $settings_panel = $( panels.settings );
235
 
236
+ // Rplace the old ones
237
+ $tribe_tickets.find( obj.panels.list ).replaceWith( $base_panel );
238
+ $tribe_tickets.find( obj.panels.ticket ).replaceWith( $edit_panel );
239
+ $tribe_tickets.find( obj.panels.settings ).replaceWith( $settings_panel );
240
 
241
+ // Makes sure the Panels are Ready for interaction
242
+ obj.setupPanels();
 
243
 
244
+ // At the end always swap panels (deafults to base/list)
245
+ obj.swapPanel( swapTo );
246
+ };
247
+
248
+ obj.setupPanels = function() {
249
+ window.MTAccordion( {
250
+ target: '.accordion', // ID (or class) of accordion container
251
+ } );
252
 
253
+ // date elements
254
+ var $event_pickers = $( document.getElementById( 'tribe-event-datepickers' ) );
255
+ var $ticket_start_date = $( document.getElementById( 'ticket_start_date' ) );
256
+ var $ticket_end_date = $( document.getElementById( 'ticket_end_date' ) );
257
+ var $ticket_start_time = $( document.getElementById( 'ticket_start_time' ) );
258
+ var $ticket_end_time = $( document.getElementById( 'ticket_end_time' ) );
259
+ var startofweek = 0;
260
 
261
+ if ( $event_pickers.length ) {
262
+ startofweek = $event_pickers.data( 'startofweek' );
263
+ }
264
+
265
+ if ( 'undefined' !== typeof tribe_dynamic_help_text ) {
266
+ var indexDatepickerFormat = $.isNumeric( tribe_dynamic_help_text.datepicker_format_index ) ? tribe_dynamic_help_text.datepicker_format_index : 0;
267
+ dateFormat = datepickerFormats[ indexDatepickerFormat ];
268
+ }
269
+
270
+ var datepickerOpts = {
271
+ dateFormat : dateFormat,
272
+ showAnim : 'fadeIn',
273
+ changeMonth : true,
274
+ changeYear : true,
275
+ numberOfMonths : 3,
276
+ firstDay : startofweek,
277
+ showButtonPanel: false,
278
+ onChange : function() {
279
+ },
280
+ beforeShow : function( element, object ) {
281
+ object.input.data( 'prevDate', object.input.datepicker( 'getDate' ) );
282
+
283
+ // Capture the datepicker div here; it's dynamically generated so best to grab here instead of elsewhere.
284
+ var $dpDiv = $( object.dpDiv );
285
+
286
+ // "Namespace" our CSS a bit so that our custom jquery-ui-datepicker styles don't interfere with other plugins'/themes'.
287
+ $dpDiv.addClass( 'tribe-ui-datepicker' );
288
+
289
+ // @todo Look into making this also compatible with ACF
290
+ // $event_details.trigger( 'tribe.ui-datepicker-div-beforeshow', [ object ] );
291
+
292
+ $dpDiv.attrchange({
293
+ trackValues : true,
294
+ callback : function( attr ) {
295
+ // This is a non-ideal, but very reliable way to look for the closing of the ui-datepicker box,
296
+ // since onClose method is often included by other plugins, including Events Calender PRO.
297
+ if (
298
+ attr.newValue.indexOf( 'display: none' ) >= 0 ||
299
+ attr.newValue.indexOf( 'display:none' ) >= 0
300
+ ) {
301
+ $dpDiv.removeClass( 'tribe-ui-datepicker' );
302
 
303
+ // @todo Look into making this also compatible with ACF
304
+ // $event_details.trigger( 'tribe.ui-datepicker-div-closed', [ object ] );
305
+ }
 
 
 
 
 
 
306
  }
307
+ });
308
+ },
309
+ onSelect : function( dateText, inst ) {
310
+ var the_date = $.datepicker.parseDate( dateFormat, dateText );
311
 
312
+ if ( inst.id === 'ticket_start_date' ) {
313
+ $ticket_end_date.datepicker( 'option', 'minDate', the_date );
314
+ } else {
315
+ $ticket_start_date.datepicker( 'option', 'maxDate', the_date );
316
+ }
317
  }
318
+ };
319
+
320
+ $.extend( datepickerOpts, tribe_l10n_datatables.datepicker );
321
+
322
+ var $timepickers = $tribe_tickets.find( '.tribe-timepicker:not(.ui-timepicker-input)' );
323
+ tribe_timepickers.setup_timepickers( $timepickers );
324
 
325
+ $ticket_start_date.datepicker( datepickerOpts ).datepicker( 'option', 'defaultDate', $( document.getElementById( 'EventStartDate' ) ).val() ).keyup( function( e ) {
326
+ if ( e.keyCode === 8 || e.keyCode === 46 ) {
327
+ $.datepicker._clearDate( this );
328
  }
329
  } );
 
330
 
331
+ $ticket_end_date.datepicker( datepickerOpts ).datepicker( 'option', 'defaultDate', $( document.getElementById( 'EventEndDate' ) ).val() ).keyup( function( e ) {
332
+ if ( e.keyCode === 8 || e.keyCode === 46 ) {
333
+ $.datepicker._clearDate( this );
334
+ }
335
+ } );
 
336
 
337
+ if ( $( document.getElementById( 'tribe_ticket_header_preview' ) ).find( 'img' ).length ) {
338
+ $( document.getElementById( 'tribe_ticket_header_remove' ) ).show();
 
 
 
339
 
340
+ var $tiximg = $( document.getElementById( 'tribe_ticket_header_preview' ) ).find( 'img' );
341
+ $tiximg.removeAttr( 'width' ).removeAttr( 'height' );
342
 
343
+ if ( $tribe_tickets.width() < $tiximg.width() ) {
344
+ $tiximg.css( 'width', '95%' );
345
+ }
346
+ }
347
 
348
+ // Setup Drag and Drop
349
+ if (
350
+ tribe.tickets.table
351
+ && 0 !== $base_panel.find( 'tribe-tickets-editor-table-tickets-body tr' ).length
352
+ ) {
353
+ tribe.tickets.table.toggle_sortable();
354
+ }
 
 
355
 
356
+ $tribe_tickets.find( tribe.validation.selectors.item ).validation();
 
 
 
 
 
 
357
 
358
+ // Make sure we display the correct Fields and things
359
+ $tribe_tickets.find( '.tribe-dependent' ).dependency();
360
+ $tribe_tickets.find( '.tribe-dependency' ).trigger( 'verify.dependency' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  };
362
 
363
  $document.ajaxSend( function( event, jqxhr, settings ) {
407
  $spinner.addClass( 'is-active' );
408
  }
409
  },
410
+ } );
411
 
412
+ /**
413
+ * When Hitting the Publish button we remove our beforeunload
414
+ */
415
+ $publish.on( 'click', function ( event ) {
416
+ $( window ).off( 'beforeunload.tribe' );
417
+ } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
418
 
419
+ /* "Settings" button action */
420
+ $document.on( 'click', '#settings_form_toggle', function( event ) {
421
+ // Prevent Form Submit on button click
422
+ event.preventDefault();
423
 
424
+ // Fetches as fresh set of panels
425
+ obj.fetchPanels( null, 'settings' );
 
 
426
 
427
+ // Make it safe that it wont submit
428
+ return false;
429
+ } );
430
 
431
+ /**
432
+ * Cancel buttons, which refresh and swap to list
433
+ */
434
+ $document.on( 'click', '#tribe_settings_form_cancel, #ticket_form_cancel', function( event ) {
435
+ // Prevent Form Submit on button click
436
+ event.preventDefault();
437
 
438
+ // Fetches as fresh set of panels
439
+ obj.fetchPanels( null, 'list' );
440
 
441
+ // Make it safe that it wont submit
442
+ return false;
443
+ } );
444
 
445
+ /* "Save Settings" button action */
446
+ $document.on( 'click', '#tribe_settings_form_save', function( event ) {
447
+ // Prevent Form Submit on button click
448
+ event.preventDefault();
449
 
450
+ // Fetches form data from this panel
451
+ var formData = $settings_panel.find( 'input,textarea' ).serialize();
452
 
453
+ // Save and Refresh the Panels
454
+ obj.fetchPanels( formData, 'list' );
 
 
 
455
 
456
+ // Make it safe that it wont submit
457
+ return false;
 
 
 
 
 
458
  } );
459
 
460
+ /* "Add ticket" button action */
461
+ $document.on( 'click', '.ticket_form_toggle', function( event ) {
462
+ // Prevent Form Submit on button click
463
+ event.preventDefault();
464
+
465
+ // Where we clicked
466
+ var $button = $( this );
467
+
468
+ set_default_provider_radio( 'rsvp_form_toggle' === $button.attr( 'id' ) );
469
 
470
+ // Triggers Dependency
471
+ $edit_panel.find( '.tribe-dependency' ).trigger( 'verify.dependency' );
472
+
473
+ obj.swapPanel( 'ticket' );
474
+
475
+ // Make it safe that it wont submit
476
+ return false;
477
  } );
478
 
479
+ /* "Edit Ticket" link action */
480
+ $document.on( 'click', '.ticket_edit_button', function( event ) {
481
+ // Prevent Form Submit on button click
482
+ event.preventDefault();
483
 
484
+ // Where we clicked
485
+ var $button = $( this );
 
 
 
 
486
 
487
+ // Prep the Params for the Request
488
+ var params = {
489
+ action : 'tribe-ticket-edit',
490
+ post_id : $post_id.val(),
491
+ ticket_id: $button.data( 'ticketId' ),
492
+ nonce : TribeTickets.edit_ticket_nonce,
493
+ is_admin : $( 'body' ).hasClass( 'wp-admin' )
494
  };
495
 
496
  $.post(
497
  ajaxurl,
498
  params,
499
  function( response ) {
500
+ if ( ! response.success ) {
501
+ return;
 
502
  }
503
+
504
+ obj.refreshPanels( response.data, 'ticket' );
505
  },
506
  'json'
507
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
508
 
509
+ // Make it safe that it wont submit
510
+ return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
511
  } );
512
 
513
  /* "Save Ticket" button action */
522
  return;
523
  }
524
 
525
+ $tribe_tickets.trigger( 'pre-save-ticket.tribe', e );
526
+
527
  var $orders = $base_panel.find( '.tribe-ticket-field-order' );
528
  var params = {
529
+ action : 'tribe-ticket-add',
530
+ data : $edit_panel.find( 'input,textarea' ).serialize(),
531
+ post_id : $post_id.val(),
532
  nonce : TribeTickets.add_ticket_nonce,
533
  menu_order: $orders.length,
534
  is_admin : $( 'body' ).hasClass( 'wp-admin' )
538
  ajaxurl,
539
  params,
540
  function( response ) {
541
+ if ( ! response.success ) {
542
+ return;
 
 
543
  }
544
+
545
+ obj.refreshPanels( response.data );
546
  },
547
  'json'
548
  );
549
  } );
550
 
551
  /* "Delete Ticket" link action */
552
+ $document.on( 'click', '.ticket_delete', function( event ) {
553
  if ( ! confirm( tribe_ticket_notices.confirm_alert ) ) {
554
  return false;
555
  }
556
 
557
+ event.preventDefault();
558
 
559
+ $tribe_tickets.trigger( 'delete-ticket.tribe', event );
560
 
561
  var deleted_ticket_id = $( this ).attr( 'attr-ticket-id' );
562
 
563
  var params = {
564
+ action : 'tribe-ticket-delete',
565
+ post_id : $post_id.val(),
566
  ticket_id: deleted_ticket_id,
567
+ nonce : TribeTickets.remove_ticket_nonce,
568
+ is_admin : $( 'body' ).hasClass( 'wp-admin' )
569
  };
570
 
571
  $.post(
572
  ajaxurl,
573
  params,
574
  function( response ) {
575
+ if ( ! response.success ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
576
  return;
577
  }
578
 
579
+ obj.refreshPanels( response.data );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
580
  },
581
  'json'
582
+ );
583
+ } );
 
 
 
584
 
585
+ /* Change global stock type if we've put a value in global_stock_cap */
586
+ $document.on( 'change', '.tribe-ticket-field-capacity', function( e ) {
587
+ var $this = $( this );
588
+ var $globalField = $this.parents( '.input_block' ).eq( 0 ).find( '.tribe-ticket-field-mode' );
589
 
590
+ // Bail if we have any value on Stock Cap
591
+ if ( ! $this.val() ) {
592
+ return;
593
+ }
594
 
595
+ $globalField.val( 'capped' );
 
 
 
596
  } );
597
 
598
  $document.on( 'keyup', '#ticket_price', function ( e ) {
614
  ticketHeaderImage.uploader( '', '' );
615
  } );
616
 
617
+ $document.on( 'focus', '#settings_global_capacity_edit', function() {
618
+ var $capacity = $( this );
619
+ var nonSharedCapacity = 0;
620
+ var $capacities = $( '.tribe-tickets-editor-capacity-table' ).find( '[data-capacity]' );
621
+
622
+ $capacities.each( function() {
623
+ var $item = $( this );
624
+ nonSharedCapacity = nonSharedCapacity + parseInt( $item.data( 'capacity' ), 10 );
625
+ } );
626
+
627
+ $capacity.data( 'nonSharedCapacity', nonSharedCapacity );
628
+ } );
629
+
630
  /* Handle saving changes to capacity from Settings form */
631
+ $document.on( 'blur change', '#settings_global_capacity_edit', function() {
632
+ var $totalRow = $( '.tribe-tickets-editor-table-row-capacity-total' );
633
+ var totalCapacity = parseInt( $totalRow.data( 'totalCapacity' ), 10 );
634
+
635
+ // We just bail if we are dealing with any unlimited
636
+ if ( -1 === totalCapacity ) {
637
+ return;
638
+ }
639
+
640
  var $capacity = $( this );
641
+ var $total = $totalRow.find( '.tribe-tickets-editor-total-capacity' );
642
+ var capacity = parseInt( $capacity.val(), 10 );
643
+ var nonSharedCapacity = $capacity.data( 'nonSharedCapacity' );
644
 
645
+ // Prevent Fails with empty stuff
646
+ if ( '' === capacity || 0 > capacity ) {
647
  $capacity.val( 0 );
648
  capacity = 0;
649
  }
650
 
651
+ var total = nonSharedCapacity + capacity;
 
 
 
 
 
652
 
653
+ $total.text( total );
654
+ } );
655
+
656
+ /* Handle editing global capacity from the settings panel */
657
+ $document.on( 'click', '#global_capacity_edit_button', function( e ) {
658
+ e.preventDefault();
659
+ $( document.getElementById( 'settings_global_capacity_edit' ) ).prop( 'disabled', false ).focus();
 
660
  } );
661
 
662
  /* Track changes to the global stock level on the ticket edit form. */
675
  }
676
  } );
677
 
 
 
 
678
  /* Remove header image action */
679
  $document.on( 'click', '#tribe_ticket_header_remove', function( e ) {
680
  e.preventDefault();
682
  $( document.getElementById( 'tribe_ticket_header_remove' ) ).hide();
683
  $( document.getElementById( 'tribe_tickets_image_preview_filename' ) ).hide().find( '.filename' ).text( '' );
684
  $( document.getElementById( 'tribe_ticket_header_image_id' ) ).val( '' );
 
685
  } );
686
 
687
  $document.ready( function() {
688
+ obj.setupPanels();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
689
  } );
690
 
691
+ } )( window, jQuery, tribe.tickets.editor );
src/resources/js/tickets.min.js CHANGED
@@ -1 +1 @@
1
- var ticketHeaderImage=window.ticketHeaderImage||{};!function(e,t,a){"use strict";function i(e,t){"undefined"==typeof e&&(e="");var a=T;return!0===t&&(a=C[0]),a=a.toUpperCase().replace("YY","YYYY"),moment(e,a).format(T.toUpperCase().replace("YY","YYYY"))}function n(e){return"undefined"==typeof e&&(e=""),moment(e,j).format(j)}function d(){var e=t("input[name=default_ticket_provider]","#tribe_panel_settings").filter(":checked");return e.length>0?e.val():"Tribe__Tickets__RSVP"}function c(e){e="undefined"!=typeof e;var a=t('input[name="default_ticket_provider"]',"#tribe_panel_settings").filter(":checked"),i="Tribe__Tickets__RSVP_radio";!e&&a.length>0&&(i=a.val()+"_radio"),t(document.getElementById(i)).prop("checked",!0).trigger("change")}function r(){var e=_.find(".ticket_advanced.history");e.length&&e.on("click",".toggle-history",function(t){t.preventDefault(),e.hasClass("_show")?e.removeClass("_show"):e.addClass("_show")})}function o(){var e=t(document.getElementById("settings_global_capacity_edit"));return 0<e.length&&0<e.val()?e.val():0}function l(a,i){a&&a.preventDefault(),"undefined"==typeof i&&(i=v),k.each(function(){t(this).attr("aria-hidden",!0)}),i.attr("aria-hidden",!1),i.is(v)?t(e).off("beforeunload.tribe"):t(e).on("beforeunload.tribe",Y)}function s(e,a){a="undefined"==typeof a;var i=v.find(".tribe-ticket-field-order"),n={action:"tribe-ticket-refresh-panels",notice:e,post_ID:m.val(),data:i.serialize(),nonce:TribeTickets.add_ticket_nonce};"settings-cancel"===e&&(n.action="tribe-ticket-refresh-settings"),t.post(ajaxurl,n,function(e){if(e.data.ticket_table&&""!=e.data.ticket_table){var a=t(document.getElementById("ticket_list_wrapper"));if(0===a.length){var i=t(".tribe_sectionheader.ticket_list_container");a=t("<div>",{id:"ticket_list_wrapper"}),i.append(a),i.hasClass("tribe_no_capacity")&&i.removeClass("tribe_no_capacity")}a.empty();var n=t("<div>");n.html(e.data.ticket_table),a.append(n)}if("undefined"!=typeof e.data.capacity_table&&t(document.getElementById("tribe_expanded_capacity_table")).replaceWith(e.data.capacity_table),"undefined"!=typeof e.data.settings_panel){var d=t(e.data.settings_panel);b.replaceWith(d),b=d}if("undefined"!=typeof e.data.total_capacity){var r=t(document.getElementById("ticket_form_total_capacity"));if(0<r.length)r.replaceWith(e.data.total_capacity);else{var o=t('<div class="ticket_table_intro">');o.append(e.data.total_capacity),t(".ticket_list_container").removeClass("tribe_no_capacity").prepend(o)}}c()}).complete(function(e){_.trigger("tribe-tickets-refresh-tables",e.data),a&&l()})}var p=(t("html, body"),t(document)),_=t(document.getElementById("tribetickets"));if(0!==_.length){var m=(t(document.getElementById("event_tickets")),t(document.getElementById("post_ID"))),g=t(document.getElementById("publish")),u=_.find(".tribe-tickets-editor-blocker"),f=_.find(".spinner"),k=t(document.getElementById("event_tickets")).find(".ticket_panel"),v=t(document.getElementById("tribe_panel_base")),y=t(document.getElementById("tribe_panel_edit")),b=t(document.getElementById("tribe_panel_settings")),h=t(document.getElementById("tribe-event-datepickers")),I=t(document.getElementById("ticket_start_date")),E=t(document.getElementById("ticket_end_date")),B=t(document.getElementById("ticket_start_time")),w=t(document.getElementById("ticket_end_time")),D=0,x=t(document.getElementById("tribe_ticket_header_preview")),C=["yy-mm-dd","m/d/yy","mm/dd/yy","d/m/yy","dd/mm/yy","m-d-yy","mm-dd-yy","d-m-yy","dd-mm-yy","yy.mm.dd","mm.dd.yy","dd.mm.yy"],T=C[0],j="HH:mmA",S=function(e,i){if("undefined"==typeof i){var n=t(this);i=n.val()}if(a!==i){i||(i=0),i=parseInt(i,10);var d=t(".tribe-ticket-capacity-max"),c=d.find(".tribe-ticket-capacity-value"),r=t('.tribe-ticket-field-capacity[name="tribe-ticket[capacity]"]');r.attr("placeholder",i),i?r.attr("max",i):i=0,c.text(i)}},Y=function(e){var t=!1;return"true"===v.attr("aria-hidden")&&(t=tribe_global_stock_admin_ui.nav_away_msg),e.returnValue=t,t};ticketHeaderImage={uploader:function(){var e=wp.media({title:HeaderImageData.title,multiple:!1,library:{type:"image"},button:{text:HeaderImageData.button}});return e.on("close",function(){var t=e.state().get("selection").toJSON();t.length&&ticketHeaderImage.render(t[0])}),e.open(),!1},render:function(e){x.html(ticketHeaderImage.imgHTML(e)),t(document.getElementById("tribe_ticket_header_image_id")).val(e.id),t(document.getElementById("tribe_ticket_header_remove")).show(),t(document.getElementById("tribe_tickets_image_preview_filename")).show().find(".filename").text(e.filename)},imgHTML:function(e){var t='<img src="'+e.url+'" ';return t+='width="'+e.width+'" ',t+='height="'+e.height+'" ',t+="/>"}},p.ajaxSend(function(e,a,i){"string"===t.type(i.data)&&-1!==i.data.indexOf("action=tribe-ticket")&&_.trigger("spin.tribe","start")}),p.ajaxComplete(function(e,a,i){"string"===t.type(i.data)&&-1!==i.data.indexOf("action=tribe-ticket")&&_.trigger("spin.tribe","stop")}),p.on({"spin.tribe":function(e,a){("undefined"==typeof a||t.inArray(a,["start","stop"]))&&(a="stop"),"stop"===a?(u.hide(),f.removeClass("is-active")):(u.show(),f.addClass("is-active"))},"clear.tribe":function(){var e=y.find('input:not(:button):not(:radio):not(:checkbox):not([type="hidden"]), textarea'),a=y.find("input:checkbox, input:radio"),i=y.find("#ticket_id");y.find("input[data-default-value]").each(function(){var e=t(this);e.val(e.data("default-value"))}),I.datepicker("option","maxDate",null),I.val(""),I.trigger("change"),B.val(""),B.trigger("change"),E.datepicker("option","minDate",null),E.val(""),E.trigger("change"),w.val(""),w.trigger("change"),y.find("#ticket_price").removeProp("disabled").siblings(".no-update-message").html("").hide().end().siblings(".description").show(),t(document.getElementById("tribe-tickets-attendee-sortables")).empty(),t(".accordion-content.is-active").removeClass("is-active"),t(document.getElementById("ticket_bottom_right")).empty(),y.find(".accordion-header, .accordion-content").removeClass("is-active"),e.val("").trigger("change"),a.prop("checked",!1).trigger("change"),i.val("").trigger("change"),y.find(".tribe-tickets-editor-history-container").remove()},"edit-tickets-complete.tribe":function(){r()}}),p.on("click","#settings_form_toggle",function(e){l(e,b)}),p.on("click","#tribe_settings_form_cancel",function(e){s("settings-cancel")}),p.on("click","#tribe_settings_form_save",function(e){e.preventDefault();var a=t(document.getElementById("settings_global_capacity_edit"));!1===a.prop("disabled")&&(a.blur(),a.prop("disabled",!0));var i=b.find(".settings_field").serialize(),n={action:"tribe-ticket-save-settings",formdata:i,post_ID:m.val(),nonce:TribeTickets.add_ticket_nonce};t.post(ajaxurl,n,function(e){_.trigger("saved-image.tribe",e),e.success&&s("settings")},"json")}),p.on("click",".ticket_form_toggle",function(e){e.preventDefault();var a=d(),i=o(),n=t(".tribe-ticket-capacity-max");n.find(".tribe-ticket-capacity-value");_.trigger("clear.tribe"),"rsvp_form_toggle"===t(this).closest("button").attr("id")?c(!0):(c(),t(document.getElementById(a+"_"+tribe_ticket_vars.stock_mode)).prop("checked",!0),t(document.getElementById(a+"_global_capacity")).val(i),0!==i&&""!==i?t(document.getElementById(a+"_global_stock_block")).find(".global_capacity-wrapper").addClass("screen-reader-text"):t(document.getElementById(a+"_global_stock_block")).find(".global_capacity-wrapper").removeClass("screen-reader-text"),S(e,i)),y.find(".tribe-dependency").trigger("verify.dependency"),t(document.getElementById("tribe_tickets_show_description")).prop("checked",!0),t(document.getElementById("ticket_sale_price")).closest(".input_block").hide(),"ticket_form_toggle"===t(this).attr("id")&&0<i&&t(document.getElementById(a+"_global_capacity")).prop("disabled",!0),t(".tribe-tickets-attendee-saved-fields").show(),l(e,y)}),p.on("click","#ticket_form_cancel",function(e){s(),_.trigger("clear.tribe")}),p.on("change",".tribe-ticket-field-capacity",function(e){var a=t(this),i=a.parents(".input_block").eq(0).find(".tribe-ticket-field-mode");a.val()&&i.val("capped")}),p.on("click.tribe",'[name="ticket_form_save"]',function(e){var a=t(document.getElementById("ticket_form_table"));if(a.trigger("validation.tribe"),!tribe.validation.hasErrors(a)){_.trigger("save-ticket.tribe",e);var i=v.find(".tribe-ticket-field-order"),n={action:"tribe-ticket-add-"+t("input[name=ticket_provider]:checked").val(),formdata:a.find(".ticket_field").serialize(),post_ID:m.val(),nonce:TribeTickets.add_ticket_nonce,menu_order:i.length,is_admin:t("body").hasClass("wp-admin")};t.post(ajaxurl,n,function(e){_.trigger("saved-ticket.tribe",e),e.success&&s("ticket")},"json")}}),p.on("click",".ticket_delete",function(e){if(!confirm(tribe_ticket_notices.confirm_alert))return!1;e.preventDefault(),_.trigger("delete-ticket.tribe",e);var a=t(this).attr("attr-ticket-id"),i={action:"tribe-ticket-delete-"+t(this).attr("attr-provider"),post_ID:m.val(),ticket_id:a,nonce:TribeTickets.remove_ticket_nonce};t.post(ajaxurl,i,function(i){if(_.trigger("deleted-ticket.tribe",i),i.success){var n=t(document.getElementById("tribe_ticket_list_table")).find('[data-ticket-order-id="order_'+a+'"]');n.remove(),s("delete"),l(e)}},"json")}),p.on("click",".ticket_edit_button",function(d){d.preventDefault();var c=this.getAttribute("data-ticket-id"),r={action:"tribe-ticket-edit-"+this.getAttribute("data-provider"),post_ID:m.val(),ticket_id:c,nonce:TribeTickets.edit_ticket_nonce,is_admin:t("body").hasClass("wp-admin")};t.post(ajaxurl,r,function(c){if(c){var r,o,l,s,p=c.data.price,m=p,g=!1,u=c.data.provider_class,f=t(".tribe-ticket-capacity-max");f.find(".tribe-ticket-capacity-value");if(t("input:radio[name=ticket_provider]").filter("[value="+c.data.provider_class+"]").click(),t("input[name=ticket_provider]:radio").change(),c.data.global_stock_mode)switch(c.data.global_stock_mode){case"global":t(document.getElementById(u+"_global")).prop("checked",!0).val("global"),t(document.getElementById(u+"_global_capacity")).attr("placeholder",c.data.event_capacity).val(c.data.event_capacity).prop("disabled",!0),t(document.getElementById(u+"_global_stock_cap")).val(""),S(d,c.data.event_capacity);break;case"capped":t(document.getElementById(u+"_global")).prop("checked",!0).val("capped"),t(document.getElementById(u+"_global_capacity")).attr("placeholder",c.data.event_capacity).val(c.data.event_capacity).prop("disabled",!0),t(document.getElementById(u+"_global_stock_cap")).val(c.data.capacity),S(d,c.data.event_capacity);break;case"own":t(document.getElementById(u+"_own")).prop("checked",!0),-1!=c.data.capacity&&t(document.getElementById(u+"_capacity")).val(c.data.capacity);break;default:t(document.getElementById(u+"_unlimited")).prop("checked",!0),t(document.getElementById(u+"_global_stock_cap")).val("")}else t(document.getElementById(c.data.provider_class+"_unlimited")).prop("checked",!0),t(document.querySelectorAll(".ticket_stock")).val(c.data.original_stock);t("input[name=ticket_global_stock]:radio").change(),t(document.getElementById("ticket_id")).val(c.data.ID),t(document.getElementById("ticket_name")).val(c.data.name),t(document.getElementById("ticket_description")).val(c.data.description),c.data.show_description||1===parseInt(c.data.show_description,10)?t(document.getElementById("tribe_tickets_show_description")).prop("checked",!0):t(document.getElementById("tribe_tickets_show_description")).removeAttr("checked"),c.data.start_date?r=i(c.data.start_date,!0):a!==t(document.getElementById("EventStartDate")).val()&&(r=i(t(document.getElementById("EventStartDate")).val())),c.data.start_time?o=n(c.data.start_time):a!==t(document.getElementById("EventStartTime")).val()&&(o=n(t(document.getElementById("EventStartTime")).val())),r&&I.val(r).trigger("change"),o&&B.val(o).trigger("change"),c.data.end_date?l=i(c.data.end_date,!0):a!==t(document.getElementById("EventEndDate")).val()&&(l=i(t(document.getElementById("EventEndDate")).val())),c.data.end_time?s=n(c.data.end_time):a!==t(document.getElementById("EventEndTime")).val()&&(s=n(t(document.getElementById("EventEndTime")).val())),l&&E.val(l).trigger("change"),s&&w.val(s).trigger("change"),t(document.getElementById("advanced_fields")).empty("").append(c.data.advanced_fields),"undefined"!=typeof c.data.on_sale&&c.data.on_sale&&(g=!0,p=c.data.regular_price);var k=_.find("#ticket_price");if(k.val(p),"undefined"!=typeof c.data.disallow_update_price_message?k.siblings(".no-update-message").html(c.data.disallow_update_price_message):k.siblings(".no-update-message").html(""),"undefined"==typeof c.data.can_update_price||c.data.can_update_price?(k.removeProp("disabled"),k.siblings(".description").show(),k.siblings(".no-update-message").hide()):(k.prop("disabled","disabled"),k.siblings(".description").hide(),k.siblings(".no-update-message").show()),"undefined"!=typeof c.data.history){var v=t(c.data.history);y.find(".accordion").append(v),e.MTAccordion({target:".accordion"})}else y.find(".tribe-tickets-editor-history-container").remove();var b=t(document.getElementById("ticket_sale_price")),h=b.closest(".input_block");g?(b.prop("readonly",!1).val(m).prop("readonly",!0),h.show()):h.hide(),"undefined"!=typeof c.data.purchase_limit&&c.data.purchase_limit&&t(document.getElementById("ticket_purchase_limit")).val(c.data.purchase_limit),c.data.sku&&t(document.querySelectorAll(".sku_input")).val(c.data.sku),t(document.getElementById("tribe-tickets-attendee-sortables")).empty(),"undefined"!=typeof c.data.attendee_fields&&c.data.attendee_fields?(t(document.getElementById("tribe-tickets-attendee-sortables")).html(c.data.attendee_fields),t(".tribe-tickets-attendee-saved-fields").hide()):t(".tribe-tickets-attendee-saved-fields").show(),"undefined"!=typeof c.data.controls&&c.data.controls&&t(document.getElementById("ticket_bottom_right")).html(c.data.controls),_.find(".tribe-bumpdown-trigger").bumpdown(),t("a#ticket_form_toggle").hide(),y.find(".tribe-dependency").trigger("verify.dependency")}},"json").always(function(e){_.trigger("edit-tickets-complete.tribe"),y.find(".tribe-dependency").trigger("verify.dependency"),e.data.event_capacity&&t(document.getElementById(e.data.provider_class+"_global_capacity")).prop("disabled",!0),l(d,y)})}),p.on("click","#global_capacity_edit_button",function(e){e.preventDefault(),t(document.getElementById("settings_global_capacity_edit")).prop("disabled",!1).focus()}),p.on("keyup","#ticket_price",function(e){e.preventDefault();var a=price_format.decimal,i=new RegExp("[^-0-9%\\"+a+"]+","gi"),n=t(this).val(),d=n.replace(i,"");n!==d&&t(this).val(d)}),p.on("click","#tribe_ticket_header_image, #tribe_ticket_header_preview",function(e){e.preventDefault(),ticketHeaderImage.uploader("","")}),p.on("blur","#settings_global_capacity_edit",function(){var e=t(this),a=e.val();""===a&&(e.val(0),a=0);var i={action:"tribe-events-edit-global-capacity",post_ID:m.val(),capacity:a,nonce:TribeTickets.edit_ticket_nonce};t.post(ajaxurl,i,function(e){t(document.getElementById("settings_global_capacity_edit")).prop("disabled",!0),s(null,!1)})}),p.on("blur",'[name="tribe-ticket[event_capacity]"]',S),p.on("change",'[name="tribe-ticket[capacity]"]',function(e){var a=t(this),i=parseInt(a.attr("max"),10),n=parseInt(a.val(),10);i&&i<n&&a.val(i)}),p.on("change","#tribe-tickets-global-stock-level",S),p.on("click","#tribe_ticket_header_remove",function(e){e.preventDefault(),t(document.getElementById("tribe_ticket_header_preview")).html(""),t(document.getElementById("tribe_ticket_header_remove")).hide(),t(document.getElementById("tribe_tickets_image_preview_filename")).hide().find(".filename").text(""),t(document.getElementById("tribe_ticket_header_image_id")).val("")}),p.ready(function(){if(h.length&&(D=h.data("startofweek")),"undefined"!=typeof tribe_dynamic_help_text){var a=t.isNumeric(tribe_dynamic_help_text.datepicker_format_index)?tribe_dynamic_help_text.datepicker_format_index:0;T=C[a]}var i={dateFormat:T,showAnim:"fadeIn",changeMonth:!0,changeYear:!0,numberOfMonths:3,firstDay:D,showButtonPanel:!1,onChange:function(){},beforeShow:function(e,a){a.input.data("prevDate",a.input.datepicker("getDate"));var i=t(a.dpDiv);i.addClass("tribe-ui-datepicker"),i.attrchange({trackValues:!0,callback:function(e){(e.newValue.indexOf("display: none")>=0||e.newValue.indexOf("display:none")>=0)&&i.removeClass("tribe-ui-datepicker")}})},onSelect:function(e,a){var i=t.datepicker.parseDate(T,e);"ticket_start_date"===a.id?E.datepicker("option","minDate",i):I.datepicker("option","maxDate",i)}};t.extend(i,tribe_l10n_datatables.datepicker);var n=_.find(".tribe-timepicker:not(.ui-timepicker-input)");if(tribe_timepickers.setup_timepickers(n),I.datepicker(i).datepicker("option","defaultDate",t(document.getElementById("EventStartDate")).val()).keyup(function(e){8!==e.keyCode&&46!==e.keyCode||t.datepicker._clearDate(this)}),E.datepicker(i).datepicker("option","defaultDate",t(document.getElementById("EventEndDate")).val()).keyup(function(e){8!==e.keyCode&&46!==e.keyCode||t.datepicker._clearDate(this)}),x.find("img").length){t(document.getElementById("tribe_ticket_header_remove")).show();var d=x.find("img");d.removeAttr("width").removeAttr("height"),_.width()<d.width()&&d.css("width","95%")}g.on("click.tribe-ticket-editing-in-progress",function(a){return!("true"===v.attr("aria-hidden")&&!confirm(v.data("save-prompt")))&&void t(e).off("beforeunload.tribe")})})}}(window,jQuery);
1
+ "undefined"==typeof tribe.tickets&&(tribe.tickets={}),tribe.tickets.editor={};var ticketHeaderImage=window.ticketHeaderImage||{};!function(e,t,i){"use strict";function n(e){"undefined"==typeof e&&(e=!0);var i=r.find(".tribe-ticket-editor-field-default_provider").filter(":checked"),n="Tribe__Tickets__RSVP_radio";!e&&i.length>0&&(n=i.val()+"_radio"),t(document.getElementById(n)).prop("checked",!0).trigger("change")}var a=(t("html, body"),t(document)),r=t(document.getElementById("tribetickets"));if(0!==r.length){var d=(t(document.getElementById("event_tickets")),t(document.getElementById("post_ID"))),c=t(document.getElementById("publish")),o=r.find(".tribe-tickets-editor-blocker"),l=r.find(".spinner"),s=t(document.getElementById("tribe_panel_base")),p=t(document.getElementById("tribe_panel_edit")),m=t(document.getElementById("tribe_panel_settings")),_=["yy-mm-dd","m/d/yy","mm/dd/yy","d/m/yy","dd/mm/yy","m-d-yy","mm-dd-yy","d-m-yy","dd-mm-yy","yy.mm.dd","mm.dd.yy","dd.mm.yy"],f=_[0],u=function(e,i){if("undefined"==typeof i){var n=t(this);i=n.val()}if(void 0!==i){i||(i=0),i=parseInt(i,10);var a=t(".tribe-ticket-capacity-max"),r=a.find(".tribe-ticket-capacity-value"),d=t('.tribe-ticket-field-capacity[name="tribe-ticket[capacity]"]');d.attr("placeholder",i),i?d.attr("max",i):i=0,r.text(i)}};i.beforeUnload=function(e){var t=!1;return"true"===s.attr("aria-hidden")&&(t=tribe_global_stock_admin_ui.nav_away_msg),e.returnValue=t,t},ticketHeaderImage={uploader:function(){var e=wp.media({title:HeaderImageData.title,multiple:!1,library:{type:"image"},button:{text:HeaderImageData.button}});return e.on("close",function(){var t=e.state().get("selection").toJSON();t.length&&ticketHeaderImage.render(t[0])}),e.open(),!1},render:function(e){t(document.getElementById("tribe_ticket_header_preview")).html(ticketHeaderImage.imgHTML(e)),t(document.getElementById("tribe_ticket_header_image_id")).val(e.id),t(document.getElementById("tribe_ticket_header_remove")).show(),t(document.getElementById("tribe_tickets_image_preview_filename")).show().find(".filename").text(e.filename)},imgHTML:function(e){var t='<img src="'+e.url+'" ';return t+='width="'+e.width+'" ',t+='height="'+e.height+'" ',t+="/>"}},i.panels={list:"#tribe_panel_base",ticket:"#tribe_panel_edit",settings:"#tribe_panel_settings"},i.swapPanel=function(n){var a;a=n instanceof jQuery?n:"undefined"!=typeof i.panels[n]?t(i.panels[n]):s,r.find(".ticket_panel").each(function(){t(this).attr("aria-hidden",!0)}),a.attr("aria-hidden",!1),a.is(s)?t(e).off("beforeunload.tribe"):t(e).on("beforeunload.tribe",i.beforeUnload)},i.fetchPanels=function(e,n){"undefined"==typeof e&&(e=[]);var a={action:"tribe-ticket-panels",notice:!1,post_id:d.val(),nonce:TribeTickets.add_ticket_nonce,data:e,is_admin:t("body").hasClass("wp-admin")};t.post(ajaxurl,a,function(e){e.success&&i.refreshPanels(e.data,n)},"json")},i.refreshPanels=function(e,n){s=t(e.list),p=t(e.ticket),m=t(e.settings),r.find(i.panels.list).replaceWith(s),r.find(i.panels.ticket).replaceWith(p),r.find(i.panels.settings).replaceWith(m),i.setupPanels(),i.swapPanel(n)},i.setupPanels=function(){e.MTAccordion({target:".accordion"});var i=t(document.getElementById("tribe-event-datepickers")),n=t(document.getElementById("ticket_start_date")),a=t(document.getElementById("ticket_end_date")),d=(t(document.getElementById("ticket_start_time")),t(document.getElementById("ticket_end_time")),0);if(i.length&&(d=i.data("startofweek")),"undefined"!=typeof tribe_dynamic_help_text){var c=t.isNumeric(tribe_dynamic_help_text.datepicker_format_index)?tribe_dynamic_help_text.datepicker_format_index:0;f=_[c]}var o={dateFormat:f,showAnim:"fadeIn",changeMonth:!0,changeYear:!0,numberOfMonths:3,firstDay:d,showButtonPanel:!1,onChange:function(){},beforeShow:function(e,i){i.input.data("prevDate",i.input.datepicker("getDate"));var n=t(i.dpDiv);n.addClass("tribe-ui-datepicker"),n.attrchange({trackValues:!0,callback:function(e){(e.newValue.indexOf("display: none")>=0||e.newValue.indexOf("display:none")>=0)&&n.removeClass("tribe-ui-datepicker")}})},onSelect:function(e,i){var r=t.datepicker.parseDate(f,e);"ticket_start_date"===i.id?a.datepicker("option","minDate",r):n.datepicker("option","maxDate",r)}};t.extend(o,tribe_l10n_datatables.datepicker);var l=r.find(".tribe-timepicker:not(.ui-timepicker-input)");if(tribe_timepickers.setup_timepickers(l),n.datepicker(o).datepicker("option","defaultDate",t(document.getElementById("EventStartDate")).val()).keyup(function(e){8!==e.keyCode&&46!==e.keyCode||t.datepicker._clearDate(this)}),a.datepicker(o).datepicker("option","defaultDate",t(document.getElementById("EventEndDate")).val()).keyup(function(e){8!==e.keyCode&&46!==e.keyCode||t.datepicker._clearDate(this)}),t(document.getElementById("tribe_ticket_header_preview")).find("img").length){t(document.getElementById("tribe_ticket_header_remove")).show();var p=t(document.getElementById("tribe_ticket_header_preview")).find("img");p.removeAttr("width").removeAttr("height"),r.width()<p.width()&&p.css("width","95%")}tribe.tickets.table&&0!==s.find("tribe-tickets-editor-table-tickets-body tr").length&&tribe.tickets.table.toggle_sortable(),r.find(tribe.validation.selectors.item).validation(),r.find(".tribe-dependent").dependency(),r.find(".tribe-dependency").trigger("verify.dependency")},a.ajaxSend(function(e,i,n){"string"===t.type(n.data)&&-1!==n.data.indexOf("action=tribe-ticket")&&r.trigger("spin.tribe","start")}),a.ajaxComplete(function(e,i,n){"string"===t.type(n.data)&&-1!==n.data.indexOf("action=tribe-ticket")&&r.trigger("spin.tribe","stop")}),a.on({"spin.tribe":function(e,i){("undefined"==typeof i||t.inArray(i,["start","stop"]))&&(i="stop"),"stop"===i?(o.hide(),l.removeClass("is-active")):(o.show(),l.addClass("is-active"))}}),c.on("click",function(i){t(e).off("beforeunload.tribe")}),a.on("click","#settings_form_toggle",function(e){return e.preventDefault(),i.fetchPanels(null,"settings"),!1}),a.on("click","#tribe_settings_form_cancel, #ticket_form_cancel",function(e){return e.preventDefault(),i.fetchPanels(null,"list"),!1}),a.on("click","#tribe_settings_form_save",function(e){e.preventDefault();var t=m.find("input,textarea").serialize();return i.fetchPanels(t,"list"),!1}),a.on("click",".ticket_form_toggle",function(e){e.preventDefault();var a=t(this);return n("rsvp_form_toggle"===a.attr("id")),p.find(".tribe-dependency").trigger("verify.dependency"),i.swapPanel("ticket"),!1}),a.on("click",".ticket_edit_button",function(e){e.preventDefault();var n=t(this),a={action:"tribe-ticket-edit",post_id:d.val(),ticket_id:n.data("ticketId"),nonce:TribeTickets.edit_ticket_nonce,is_admin:t("body").hasClass("wp-admin")};return t.post(ajaxurl,a,function(e){e.success&&i.refreshPanels(e.data,"ticket")},"json"),!1}),a.on("click.tribe",'[name="ticket_form_save"]',function(e){var n=t(document.getElementById("ticket_form_table"));if(n.trigger("validation.tribe"),!tribe.validation.hasErrors(n)){r.trigger("pre-save-ticket.tribe",e);var a=s.find(".tribe-ticket-field-order"),c={action:"tribe-ticket-add",data:p.find("input,textarea").serialize(),post_id:d.val(),nonce:TribeTickets.add_ticket_nonce,menu_order:a.length,is_admin:t("body").hasClass("wp-admin")};t.post(ajaxurl,c,function(e){e.success&&i.refreshPanels(e.data)},"json")}}),a.on("click",".ticket_delete",function(e){if(!confirm(tribe_ticket_notices.confirm_alert))return!1;e.preventDefault(),r.trigger("delete-ticket.tribe",e);var n=t(this).attr("attr-ticket-id"),a={action:"tribe-ticket-delete",post_id:d.val(),ticket_id:n,nonce:TribeTickets.remove_ticket_nonce,is_admin:t("body").hasClass("wp-admin")};t.post(ajaxurl,a,function(e){e.success&&i.refreshPanels(e.data)},"json")}),a.on("change",".tribe-ticket-field-capacity",function(e){var i=t(this),n=i.parents(".input_block").eq(0).find(".tribe-ticket-field-mode");i.val()&&n.val("capped")}),a.on("keyup","#ticket_price",function(e){e.preventDefault();var i=price_format.decimal,n=new RegExp("[^-0-9%\\"+i+"]+","gi"),a=t(this).val(),r=a.replace(n,"");a!==r&&t(this).val(r)}),a.on("click","#tribe_ticket_header_image, #tribe_ticket_header_preview",function(e){e.preventDefault(),ticketHeaderImage.uploader("","")}),a.on("focus","#settings_global_capacity_edit",function(){var e=t(this),i=0,n=t(".tribe-tickets-editor-capacity-table").find("[data-capacity]");n.each(function(){var e=t(this);i+=parseInt(e.data("capacity"),10)}),e.data("nonSharedCapacity",i)}),a.on("blur change","#settings_global_capacity_edit",function(){var e=t(".tribe-tickets-editor-table-row-capacity-total"),i=parseInt(e.data("totalCapacity"),10);if(-1!==i){var n=t(this),a=e.find(".tribe-tickets-editor-total-capacity"),r=parseInt(n.val(),10),d=n.data("nonSharedCapacity");(""===r||0>r)&&(n.val(0),r=0);var c=d+r;a.text(c)}}),a.on("click","#global_capacity_edit_button",function(e){e.preventDefault(),t(document.getElementById("settings_global_capacity_edit")).prop("disabled",!1).focus()}),a.on("blur",'[name="tribe-ticket[event_capacity]"]',u),a.on("change",'[name="tribe-ticket[capacity]"]',function(e){var i=t(this),n=parseInt(i.attr("max"),10),a=parseInt(i.val(),10);n&&n<a&&i.val(n)}),a.on("click","#tribe_ticket_header_remove",function(e){e.preventDefault(),t(document.getElementById("tribe_ticket_header_preview")).html(""),t(document.getElementById("tribe_ticket_header_remove")).hide(),t(document.getElementById("tribe_tickets_image_preview_filename")).hide().find(".filename").text(""),t(document.getElementById("tribe_ticket_header_image_id")).val("")}),a.ready(function(){i.setupPanels()})}}(window,jQuery,tribe.tickets.editor);
src/resources/postcss/rsvp.pcss CHANGED
@@ -194,6 +194,10 @@
194
  }
195
  }
196
 
 
 
 
 
197
  /* Tickets Table */
198
  .tribe-events-tickets {
199
  background: var(--table-background-color);
194
  }
195
  }
196
 
197
+ .tribe-link-view-attendee {
198
+ margin: 15px 0;
199
+ }
200
+
201
  /* Tickets Table */
202
  .tribe-events-tickets {
203
  background: var(--table-background-color);
src/resources/postcss/tickets-refresh.pcss CHANGED
@@ -505,6 +505,7 @@ p.description {
505
  #settings_global_capacity_edit {
506
  background-color: #fff;
507
  border: 1px solid #b4b9be;
 
508
  font-size: inherit;
509
  margin-left: -5px;
510
 
505
  #settings_global_capacity_edit {
506
  background-color: #fff;
507
  border: 1px solid #b4b9be;
508
+ float: left;
509
  font-size: inherit;
510
  margin-left: -5px;
511
 
src/resources/postcss/tickets-tables.pcss CHANGED
@@ -65,12 +65,15 @@
65
  font-size: 1.8em;
66
  margin-right: 10px;
67
  position: relative;
 
68
  }
69
  }
70
 
71
- .Tribe__Tickets__RSVP {
72
- .tribe-handle {
73
- display: none;
 
 
74
  }
75
  }
76
 
@@ -176,7 +179,7 @@
176
  width: 100%;
177
  }
178
 
179
- &.capacity_list {
180
  td:first-child,
181
  td[colspan="2"] {
182
  width: 100%;
65
  font-size: 1.8em;
66
  margin-right: 10px;
67
  position: relative;
68
+ display: none;
69
  }
70
  }
71
 
72
+ .ui-sortable {
73
+ td.column-primary {
74
+ .tribe-handle {
75
+ display: block;
76
+ }
77
  }
78
  }
79
 
179
  width: 100%;
180
  }
181
 
182
+ &.tribe-tickets-editor-capacity-table {
183
  td:first-child,
184
  td[colspan="2"] {
185
  width: 100%;
src/resources/postcss/tickets.pcss CHANGED
@@ -1,5 +1,6 @@
1
- /* = WooTickets Admin Styles
2
- ============================================= */
 
3
 
4
  #ticket_form {
5
  input[type=radio] {
1
+ .tribe-tickets-column-attendees-link {
2
+ display: inline-block;
3
+ }
4
 
5
  #ticket_form {
6
  input[type=radio] {
src/template-tags/tickets.php CHANGED
@@ -407,9 +407,9 @@ if ( ! function_exists( 'tribe_tickets_get_ticket_stock_message' ) ) {
407
  if ( -1 === $available ) {
408
  $status_counts[] = sprintf( esc_html__( '%s %d', 'event-tickets' ), esc_html( $sold_label ), esc_html( $sold ) );
409
  } elseif ( $is_global ) {
410
- $status_counts[] = sprintf( _x( '%1$d Remaining of shared capacity', 'ticket shared capacity message (remaining stock)', 'event-tickets' ), $available );
411
  } else {
412
- $status_counts[] = sprintf( _x( '%1$d Remaining', 'ticket stock message (remaining stock)', 'event-tickets' ), $available );
413
  }
414
  }
415
 
@@ -706,6 +706,72 @@ if ( ! function_exists( 'tribe_tickets_has_meta_fields' ) ) {
706
  }
707
  }
708
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
709
  /**
710
  * Returns the capacity for a given Post
711
  *
407
  if ( -1 === $available ) {
408
  $status_counts[] = sprintf( esc_html__( '%s %d', 'event-tickets' ), esc_html( $sold_label ), esc_html( $sold ) );
409
  } elseif ( $is_global ) {
410
+ $status_counts[] = sprintf( _x( '%1$d Remaining of shared capacity', 'ticket shared capacity message (remaining stock)', 'event-tickets' ), tribe_tickets_get_readable_amount( $available ) );
411
  } else {
412
+ $status_counts[] = sprintf( _x( '%1$d Remaining', 'ticket stock message (remaining stock)', 'event-tickets' ), tribe_tickets_get_readable_amount( $available ) );
413
  }
414
  }
415
 
706
  }
707
  }
708
 
709
+ /**
710
+ * Updates a given Object Capacity
711
+ *
712
+ * @since TBD
713
+ *
714
+ * @param int $object Post We are trying to save capacity
715
+ *
716
+ * @return int|false
717
+ */
718
+ function tribe_tickets_delete_capacity( $object ) {
719
+
720
+ if ( ! $object instanceof WP_Post ) {
721
+ $object = get_post( $object );
722
+ }
723
+
724
+ if ( ! $object instanceof WP_Post ) {
725
+ return false;
726
+ }
727
+
728
+ $deleted = delete_post_meta( $object->ID, tribe( 'tickets.handler' )->key_capacity );
729
+
730
+ if ( ! $deleted ) {
731
+ return $deleted;
732
+ }
733
+
734
+ // We only apply these when we are talking about event-like posts
735
+ if ( tribe_tickets_post_type_enabled( $object->post_type ) ) {
736
+ $shared_cap_object = new Tribe__Tickets__Global_Stock( $object->ID );
737
+ $shared_cap_object->disable();
738
+
739
+ // This is mostly to make sure
740
+ delete_post_meta( $object->ID, Tribe__Tickets__Global_Stock::GLOBAL_STOCK_LEVEL );
741
+ delete_post_meta( $object->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_MODE );
742
+ delete_post_meta( $object->ID, Tribe__Tickets__Global_Stock::TICKET_STOCK_CAP );
743
+ }
744
+
745
+ return $deleted;
746
+ }
747
+
748
+ /**
749
+ * Updates a given Object Capacity
750
+ *
751
+ * @since TBD
752
+ *
753
+ * @param int $object Post We are trying to save capacity
754
+ * @param int $capacty How much we are trying to update the capacity to
755
+ *
756
+ * @return int|false
757
+ */
758
+ function tribe_tickets_update_capacity( $object, $capacity ) {
759
+ if ( ! is_numeric( $capacity ) ) {
760
+ return false;
761
+ }
762
+
763
+ if ( ! $object instanceof WP_Post ) {
764
+ $object = get_post( $object );
765
+ }
766
+
767
+ if ( ! $object instanceof WP_Post ) {
768
+ return false;
769
+ }
770
+
771
+ // Do the actual Updating of the Meta value
772
+ return update_post_meta( $object->ID, tribe( 'tickets.handler' )->key_capacity, $capacity );
773
+ }
774
+
775
  /**
776
  * Returns the capacity for a given Post
777
  *
src/views/tickets/email.php CHANGED
@@ -15,8 +15,7 @@
15
  * 'ticket_id'
16
  * 'security_code')
17
  *
18
- * @package TribeEventsCalendar
19
- * @version 4.6
20
  *
21
  */
22
  ?>
@@ -237,7 +236,7 @@
237
  }
238
 
239
  $event = get_post( $ticket['event_id'] );
240
- $header_id = tribe( 'tickets.handler' )->get_header_image_id( $ticket['event_id'] );
241
  $header_img = false;
242
  if ( ! empty( $header_id ) ) {
243
  $header_img = wp_get_attachment_image_src( $header_id, 'full' );
15
  * 'ticket_id'
16
  * 'security_code')
17
  *
18
+ * @version 4.6.1
 
19
  *
20
  */
21
  ?>
236
  }
237
 
238
  $event = get_post( $ticket['event_id'] );
239
+ $header_id = get_post_meta( $ticket['event_id'], tribe( 'tickets.handler' )->key_image_header, true );
240
  $header_img = false;
241
  if ( ! empty( $header_id ) ) {
242
  $header_img = wp_get_attachment_image_src( $header_id, 'full' );
src/views/tickets/orders-link.php CHANGED
@@ -6,9 +6,7 @@
6
  *
7
  * Override this template in your own theme by creating a file at [your-theme]/tribe-events/tickets/orders-link.php
8
  *
9
- * @package TribeEventsCalendar
10
- * @version 4.5.5
11
- *
12
  */
13
 
14
  if ( ! defined( 'ABSPATH' ) ) {
@@ -56,6 +54,6 @@ $message = sprintf( esc_html__( 'You have %s for this %s.', 'event-tickets' ),
56
  $message .= ' <a href="' . esc_url( $link ) . '">' . sprintf( esc_html__( 'View your %s', 'event-tickets' ), $this->get_description_rsvp_ticket( $event_id, $user_id, true ) ) . '</a>';
57
  ?>
58
 
59
- <div class="tribe-link-tickets-message">
60
  <?php echo $message; ?>
61
  </div>
6
  *
7
  * Override this template in your own theme by creating a file at [your-theme]/tribe-events/tickets/orders-link.php
8
  *
9
+ * @version 4.6.1
 
 
10
  */
11
 
12
  if ( ! defined( 'ABSPATH' ) ) {
54
  $message .= ' <a href="' . esc_url( $link ) . '">' . sprintf( esc_html__( 'View your %s', 'event-tickets' ), $this->get_description_rsvp_ticket( $event_id, $user_id, true ) ) . '</a>';
55
  ?>
56
 
57
+ <div class="tribe-link-view-attendee">
58
  <?php echo $message; ?>
59
  </div>