The Events Calendar - Version 5.1.4

Version Description

= [5.0] =

Please see the changelog for the complete list of changes in this release. Previous versions of The Events Calendar are not cross-compatible with 5.X add-ons. Remember to always make a backup of your database and files before updating!

Download this release

Release Info

Developer bordoni
Plugin Icon The Events Calendar
Version 5.1.4
Comparing to
See all releases

Code changes from version 5.1.3 to 5.1.4

Files changed (80) hide show
  1. common/lang/tribe-common.pot +24 -24
  2. common/src/Tribe/Assets.php +2 -2
  3. common/src/Tribe/DB_Lock.php +352 -0
  4. common/src/Tribe/Image/Uploader.php +8 -5
  5. common/src/Tribe/Main.php +6 -1
  6. common/src/Tribe/Promoter/Connector.php +38 -10
  7. common/src/Tribe/Repository.php +1 -1
  8. common/src/Tribe/Repository/Usage_Error.php +19 -3
  9. common/src/Tribe/Rewrite.php +5 -0
  10. common/src/Tribe/Service_Providers/Body_Classes.php +85 -0
  11. common/src/Tribe/Service_Providers/Crons.php +37 -0
  12. common/src/Tribe/Traits/With_DB_Lock.php +50 -0
  13. common/src/Tribe/Utils/Body_Classes.php +349 -0
  14. common/src/functions/template-tags/html.php +4 -0
  15. common/src/resources/js/dependency.js +9 -2
  16. common/src/resources/js/dependency.min.js +1 -1
  17. common/src/resources/js/dropdowns.js +1 -1
  18. common/vendor/autoload.php +1 -1
  19. common/vendor/autoload_52.php +1 -1
  20. common/vendor/composer/autoload_classmap.php +5 -0
  21. common/vendor/composer/autoload_real.php +4 -4
  22. common/vendor/composer/autoload_real_52.php +3 -3
  23. common/vendor/composer/autoload_static.php +10 -5
  24. data_collection_disclosure.html +0 -32
  25. lang/the-events-calendar-da_DK.mo +0 -0
  26. lang/the-events-calendar-de_CH.mo +0 -0
  27. lang/the-events-calendar-de_DE.mo +0 -0
  28. lang/the-events-calendar-en_AU.mo +0 -0
  29. lang/the-events-calendar-en_CA.mo +0 -0
  30. lang/the-events-calendar-en_GB.mo +0 -0
  31. lang/the-events-calendar-en_NZ.mo +0 -0
  32. lang/the-events-calendar-en_ZA.mo +0 -0
  33. lang/the-events-calendar-es_ES.mo +0 -0
  34. lang/the-events-calendar-es_MX.mo +0 -0
  35. lang/the-events-calendar-es_VE.mo +0 -0
  36. lang/the-events-calendar-fi.mo +0 -0
  37. lang/the-events-calendar-fr_FR.mo +0 -0
  38. lang/the-events-calendar-gl_ES.mo +0 -0
  39. lang/the-events-calendar-hu_HU.mo +0 -0
  40. lang/the-events-calendar-it_IT.mo +0 -0
  41. lang/the-events-calendar-ja.mo +0 -0
  42. lang/the-events-calendar-nb_NO.mo +0 -0
  43. lang/the-events-calendar-nl_NL.mo +0 -0
  44. lang/the-events-calendar-nn_NO.mo +0 -0
  45. lang/the-events-calendar-pt_BR.mo +0 -0
  46. lang/the-events-calendar-pt_PT.mo +0 -0
  47. lang/the-events-calendar-ro_RO.mo +0 -0
  48. lang/the-events-calendar-ru_RU.mo +0 -0
  49. lang/the-events-calendar-sl_SI.mo +0 -0
  50. lang/the-events-calendar-sq.mo +0 -0
  51. lang/the-events-calendar-sv_SE.mo +0 -0
  52. lang/the-events-calendar-tr_TR.mo +0 -0
  53. lang/the-events-calendar-uk.mo +0 -0
  54. lang/the-events-calendar-zh_CN.mo +0 -0
  55. lang/the-events-calendar.pot +280 -258
  56. readme.txt +12 -1
  57. site_owner_data_collection_statement.html +0 -48
  58. src/Tribe/Admin/Notice/Marketing.php +47 -0
  59. src/Tribe/Aggregator/API/Import.php +14 -2
  60. src/Tribe/Aggregator/Page.php +12 -7
  61. src/Tribe/Aggregator/Record/Abstract.php +10 -8
  62. src/Tribe/Aggregator/Record/Activity.php +6 -5
  63. src/Tribe/Aggregator/Record/CSV.php +15 -1
  64. src/Tribe/Aggregator/Service.php +44 -0
  65. src/Tribe/Aggregator/Tabs/New.php +14 -0
  66. src/Tribe/Main.php +9 -1
  67. src/Tribe/Service_Providers/First_Boot.php +75 -0
  68. src/Tribe/Template/Single_Event.php +21 -0
  69. src/Tribe/Views/V2/Hooks.php +71 -7
  70. src/Tribe/Views/V2/Template/Page.php +2 -2
  71. src/Tribe/Views/V2/Template_Bootstrap.php +51 -12
  72. src/Tribe/Views/V2/Theme_Compatibility.php +44 -3
  73. src/admin-views/privacy.php +3 -3
  74. src/functions/template-tags/orm.php +1 -1
  75. src/views/modules/bar.php +1 -1
  76. the-events-calendar.php +1 -1
  77. vendor/autoload.php +1 -1
  78. vendor/composer/autoload_classmap.php +1 -0
  79. vendor/composer/autoload_real.php +4 -4
  80. vendor/composer/autoload_static.php +5 -4
common/lang/tribe-common.pot CHANGED
@@ -4,11 +4,11 @@ msgid ""
4
  msgstr ""
5
  "Project-Id-Version: Tribe Common 4.12.4\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
- "POT-Creation-Date: 2020-06-19 04:15:31+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: 2020-06-19 04:15\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
@@ -1861,87 +1861,87 @@ msgstr ""
1861
  msgid "Full debug (all events)"
1862
  msgstr ""
1863
 
1864
- #: src/Tribe/Main.php:313
1865
  msgid ": activate to sort column ascending"
1866
  msgstr ""
1867
 
1868
- #: src/Tribe/Main.php:314
1869
  msgid ": activate to sort column descending"
1870
  msgstr ""
1871
 
1872
- #: src/Tribe/Main.php:316
1873
  msgid "Show _MENU_ entries"
1874
  msgstr ""
1875
 
1876
- #: src/Tribe/Main.php:317
1877
  msgid "No data available in table"
1878
  msgstr ""
1879
 
1880
- #: src/Tribe/Main.php:318
1881
  msgid "Showing _START_ to _END_ of _TOTAL_ entries"
1882
  msgstr ""
1883
 
1884
- #: src/Tribe/Main.php:319
1885
  msgid "Showing 0 to 0 of 0 entries"
1886
  msgstr ""
1887
 
1888
- #: src/Tribe/Main.php:320
1889
  msgid "(filtered from _MAX_ total entries)"
1890
  msgstr ""
1891
 
1892
- #: src/Tribe/Main.php:321
1893
  msgid "No matching records found"
1894
  msgstr ""
1895
 
1896
- #: src/Tribe/Main.php:322
1897
  msgid "Search:"
1898
  msgstr ""
1899
 
1900
- #: src/Tribe/Main.php:323
1901
  msgid "All items on this page were selected. "
1902
  msgstr ""
1903
 
1904
- #: src/Tribe/Main.php:324
1905
  msgid "Select all pages"
1906
  msgstr ""
1907
 
1908
- #: src/Tribe/Main.php:325
1909
  msgid "Clear Selection."
1910
  msgstr ""
1911
 
1912
- #: src/Tribe/Main.php:327
1913
  msgid "All"
1914
  msgstr ""
1915
 
1916
- #: src/Tribe/Main.php:328 src/Tribe/Main.php:345
1917
  msgid "Next"
1918
  msgstr ""
1919
 
1920
- #: src/Tribe/Main.php:329
1921
  msgid "Previous"
1922
  msgstr ""
1923
 
1924
- #: src/Tribe/Main.php:334
1925
  msgid ": Selected %d rows"
1926
  msgstr ""
1927
 
1928
- #: src/Tribe/Main.php:335
1929
  msgid ": Selected 1 row"
1930
  msgstr ""
1931
 
1932
- #: src/Tribe/Main.php:346
1933
  msgid "Prev"
1934
  msgstr ""
1935
 
1936
- #: src/Tribe/Main.php:347 src/Tribe/Main.php:349
1937
  msgid "Today"
1938
  msgstr ""
1939
 
1940
- #: src/Tribe/Main.php:348
1941
  msgid "Done"
1942
  msgstr ""
1943
 
1944
- #: src/Tribe/Main.php:350
1945
  msgid "Clear"
1946
  msgstr ""
1947
 
@@ -2988,7 +2988,7 @@ msgstr ""
2988
  msgid "Hide the following settings tabs on every site:"
2989
  msgstr ""
2990
 
2991
- #: src/functions/template-tags/html.php:99
2992
  msgctxt "The associated field is required."
2993
  msgid "(required)"
2994
  msgstr ""
4
  msgstr ""
5
  "Project-Id-Version: Tribe Common 4.12.4\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
+ "POT-Creation-Date: 2020-06-19 04:50:44+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: 2020-06-19 04:50\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
1861
  msgid "Full debug (all events)"
1862
  msgstr ""
1863
 
1864
+ #: src/Tribe/Main.php:315
1865
  msgid ": activate to sort column ascending"
1866
  msgstr ""
1867
 
1868
+ #: src/Tribe/Main.php:316
1869
  msgid ": activate to sort column descending"
1870
  msgstr ""
1871
 
1872
+ #: src/Tribe/Main.php:318
1873
  msgid "Show _MENU_ entries"
1874
  msgstr ""
1875
 
1876
+ #: src/Tribe/Main.php:319
1877
  msgid "No data available in table"
1878
  msgstr ""
1879
 
1880
+ #: src/Tribe/Main.php:320
1881
  msgid "Showing _START_ to _END_ of _TOTAL_ entries"
1882
  msgstr ""
1883
 
1884
+ #: src/Tribe/Main.php:321
1885
  msgid "Showing 0 to 0 of 0 entries"
1886
  msgstr ""
1887
 
1888
+ #: src/Tribe/Main.php:322
1889
  msgid "(filtered from _MAX_ total entries)"
1890
  msgstr ""
1891
 
1892
+ #: src/Tribe/Main.php:323
1893
  msgid "No matching records found"
1894
  msgstr ""
1895
 
1896
+ #: src/Tribe/Main.php:324
1897
  msgid "Search:"
1898
  msgstr ""
1899
 
1900
+ #: src/Tribe/Main.php:325
1901
  msgid "All items on this page were selected. "
1902
  msgstr ""
1903
 
1904
+ #: src/Tribe/Main.php:326
1905
  msgid "Select all pages"
1906
  msgstr ""
1907
 
1908
+ #: src/Tribe/Main.php:327
1909
  msgid "Clear Selection."
1910
  msgstr ""
1911
 
1912
+ #: src/Tribe/Main.php:329
1913
  msgid "All"
1914
  msgstr ""
1915
 
1916
+ #: src/Tribe/Main.php:330 src/Tribe/Main.php:347
1917
  msgid "Next"
1918
  msgstr ""
1919
 
1920
+ #: src/Tribe/Main.php:331
1921
  msgid "Previous"
1922
  msgstr ""
1923
 
1924
+ #: src/Tribe/Main.php:336
1925
  msgid ": Selected %d rows"
1926
  msgstr ""
1927
 
1928
+ #: src/Tribe/Main.php:337
1929
  msgid ": Selected 1 row"
1930
  msgstr ""
1931
 
1932
+ #: src/Tribe/Main.php:348
1933
  msgid "Prev"
1934
  msgstr ""
1935
 
1936
+ #: src/Tribe/Main.php:349 src/Tribe/Main.php:351
1937
  msgid "Today"
1938
  msgstr ""
1939
 
1940
+ #: src/Tribe/Main.php:350
1941
  msgid "Done"
1942
  msgstr ""
1943
 
1944
+ #: src/Tribe/Main.php:352
1945
  msgid "Clear"
1946
  msgstr ""
1947
 
2988
  msgid "Hide the following settings tabs on every site:"
2989
  msgstr ""
2990
 
2991
+ #: src/functions/template-tags/html.php:101
2992
  msgctxt "The associated field is required."
2993
  msgid "(required)"
2994
  msgstr ""
common/src/Tribe/Assets.php CHANGED
@@ -201,7 +201,7 @@ class Tribe__Assets {
201
  }
202
 
203
  /**
204
- * Allows developers to hook-in and prevent an asset from been loaded.
205
  *
206
  * @since 4.3
207
  *
@@ -211,7 +211,7 @@ class Tribe__Assets {
211
  $enqueue = apply_filters( 'tribe_asset_enqueue', $enqueue, $asset );
212
 
213
  /**
214
- * Allows developers to hook-in and prevent an asset from been loaded
215
  *
216
  * @since 4.3
217
  *
201
  }
202
 
203
  /**
204
+ * Allows developers to hook-in and prevent an asset from being loaded.
205
  *
206
  * @since 4.3
207
  *
211
  $enqueue = apply_filters( 'tribe_asset_enqueue', $enqueue, $asset );
212
 
213
  /**
214
+ * Allows developers to hook-in and prevent an asset from being loaded.
215
  *
216
  * @since 4.3
217
  *
common/src/Tribe/DB_Lock.php ADDED
@@ -0,0 +1,352 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Manages database locks using MySQL fucntions or queries.
4
+ *
5
+ * The MySQL functions used by this class are `GET_LOCK`, `IS_FREE_LOCK` and `RELEASE_LOCK`.
6
+ * The functions are part of MySQL 5.6 and in line with WordPress minimum requirement of MySQL version (5.6).
7
+ *
8
+ * @see https://dev.mysql.com/doc/refman/5.6/en/locking-functions.html#function_get-lock
9
+ *
10
+ * @since TBD
11
+ *
12
+ * @package Tribe
13
+ */
14
+
15
+ namespace Tribe;
16
+
17
+ /**
18
+ * Class DB_Lock
19
+ *
20
+ * @since TBD
21
+ *
22
+ * @package Tribe
23
+ */
24
+ class DB_Lock {
25
+
26
+ /**
27
+ * The prefix of the options used to manage the database lock without use of MySQL functions
28
+ * in the options table.
29
+ *
30
+ * @since TBD
31
+ *
32
+ * @var string
33
+ */
34
+ public static $db_lock_option_prefix = 'tribe_db_lock_';
35
+
36
+ /**
37
+ * A map, shared among all instance of this trait in the session, of the currently held locks the
38
+ * time the locks where acquired, a UNIX timestamp w/ micro-seconds.
39
+ *
40
+ * @since TBD
41
+ *
42
+ * @var array<string,float>
43
+ */
44
+ protected static $held_db_locks = [];
45
+
46
+ /**
47
+ * Prunes the stale locks stored in the options table.
48
+ *
49
+ * @since TBD
50
+ *
51
+ * @return int|false The number of pruned locks, or `false` to indicate the query to prune the locks generated
52
+ * an error (logged).
53
+ */
54
+ public static function prune_stale_db_locks() {
55
+ global $wpdb;
56
+ $prefix = static::$db_lock_option_prefix;
57
+ $affected_rows = $wpdb->query(
58
+ "DELETE FROM {$wpdb->options}
59
+ WHERE option_name LIKE '{$prefix}%'
60
+ AND option_value < ( UNIX_TIMESTAMP() - 86400 )"
61
+ );
62
+
63
+ if ( false === $affected_rows ) {
64
+ $log_data = [
65
+ 'message' => 'Error while trying to prune stale db locks.',
66
+ 'error' => $wpdb->last_error
67
+ ];
68
+ do_action( 'tribe_log', 'error', __CLASS__, $log_data );
69
+
70
+ return false;
71
+ }
72
+
73
+ return (int) $affected_rows;
74
+ }
75
+
76
+ /**
77
+ * Acquires a db lock.
78
+ *
79
+ * To ensure back-compatibility with MySQL 5.6, the lock will hash the lock key using SHA1.
80
+ *
81
+ * @since TBD
82
+ *
83
+ * @param string $lock_key The name of the db lock key to acquire.
84
+ *
85
+ * @return bool Whether the lock acquisition was successful or not.
86
+ */
87
+ public function acquire_db_lock( $lock_key ) {
88
+ /**
89
+ * Filters the timeout, in seconds, of the database lock acquisition attempts.
90
+ *
91
+ * The timeout will not be used when locks are managed using queries in place of
92
+ * MySQL functions.
93
+ *
94
+ * @since TBD
95
+ *
96
+ * @param int $timeout The timeout, in seconds, of the lock acquisition attempt.
97
+ * @param string $lock_key The lock key the target of the acquisition attempt.
98
+ * @param static $this The object that's trying to acquire the lock by means of the trait.
99
+ */
100
+ $timeout = apply_filters( 'tribe_db_lock_timeout', 3, $lock_key, $this );
101
+
102
+ if ( $this->manage_db_lock_w_mysql_functions() ) {
103
+ return $this->acquire_db_lock_w_mysql_functions( $lock_key, $timeout );
104
+ }
105
+
106
+ return $this->acquire_db_lock_w_queries( $lock_key );
107
+ }
108
+
109
+ /**
110
+ * Returns whether the traits should try to acquire and release locks using MySQL `GET_LOCK` and `RELEASE_LOCK`
111
+ * functions or not.
112
+ *
113
+ * If not, then the trait will manage the locks by means of direct SQL queries on the options table.
114
+ *
115
+ * @since TBD
116
+ *
117
+ * @return bool Whether the trait should use MySQL functions to manage the locks, or not.
118
+ */
119
+ protected function manage_db_lock_w_mysql_functions() {
120
+ /**
121
+ * Filters whether the database lock should be acquired using the `GET_LOCK` and `RELEASE_LOCK`
122
+ * MySQL functions or not.
123
+ *
124
+ * If the filter returns a falsy value, then the trait will attempt to manage locks using `SELECT`
125
+ * and `UPDATE` queries on the options table.
126
+ *
127
+ * @since TBD
128
+ */
129
+ return tribe_is_truthy( apply_filters( 'tribe_db_lock_use_msyql_functions', true ) );
130
+ }
131
+
132
+ /**
133
+ * Tries to acquire the database lock using MySQL functions (`GET_LOCK` and `IS_FREE_LOCK`).
134
+ *
135
+ * @since TBD
136
+ *
137
+ * @param string $lock_key The lock key to try and acquire the lock for.
138
+ * @param int $timeout The timeout, in seconds, to try and acquire the lock.
139
+ *
140
+ * @return bool Whether the lock was acquired or not.
141
+ */
142
+ protected function acquire_db_lock_w_mysql_functions( $lock_key, $timeout ) {
143
+ /*
144
+ * On MySQL 5.6 if a session (a db connection) fires two requests of `GET_LOCK`, the lock is
145
+ * implicitly released and re-acquired.
146
+ * While this will not cause issues in the context of different db sessions (e.g. two diff. PHP
147
+ * processes competing for a lock), it would cause issues when the lock acquisition is attempted
148
+ * in the context of the same PHP process.
149
+ * To avoid a read-what-you-write issue in the context of the same request, we check if the lock is
150
+ * free, using `IS_FREE_LOCK` first.
151
+ */
152
+
153
+ global $wpdb;
154
+
155
+ $free = $wpdb->get_var(
156
+ $wpdb->prepare( 'SELECT IS_FREE_LOCK( SHA1( %s ) )', $lock_key )
157
+ );
158
+
159
+ if ( ! $free ) {
160
+ return false;
161
+ }
162
+
163
+ $acquired = $wpdb->get_var(
164
+ $wpdb->prepare( 'SELECT GET_LOCK( SHA1( %s ),%d )', $lock_key, $timeout )
165
+
166
+ );
167
+
168
+ if ( false === $acquired ) {
169
+ // Only log errors, a failure to acquire lock is not an error.
170
+ $log_data = [
171
+ 'message' => 'Error while trying to acquire lock.',
172
+ 'key' => $lock_key,
173
+ 'error' => $wpdb->last_error
174
+ ];
175
+ do_action( 'tribe_log', 'error', __CLASS__, $log_data );
176
+
177
+ return false;
178
+ }
179
+
180
+ return true;
181
+ }
182
+
183
+ /**
184
+ * Tries to acquire the lock using SQL queries.
185
+ *
186
+ * This kind of lock does not support timeout to avoid sieging the MySQL server during processes
187
+ * that are most likely already stressing it. Either the lock is available the moment it's required or not.
188
+ * The method leverages `INSERT IGNORE` that it's available on MySQL 5.6 and is atomic provided one of the values
189
+ * we're trying to insert is UNIQUE or PRIMARY: `option_name` is UNIQUE in the `options` table.
190
+ *
191
+ * @since TBD
192
+ *
193
+ * @param string $lock_key The lock key to try and acquire the lock for.
194
+ *
195
+ * @return bool Whether the lock was acquired or not.
196
+ */
197
+ protected function acquire_db_lock_w_queries( $lock_key ) {
198
+ global $wpdb;
199
+ $option_name = $this->get_db_lock_option_name( $lock_key );
200
+ $lock_time = microtime( true );
201
+
202
+ //phpcs:disable
203
+ $rows_affected = $wpdb->query(
204
+ $wpdb->prepare( "INSERT IGNORE INTO {$wpdb->options}
205
+ (option_name, option_value, autoload)
206
+ VALUES
207
+ (%s, %s, 'no')",
208
+ $option_name,
209
+ $lock_time
210
+ )
211
+ );
212
+ //phpcs:enable
213
+
214
+ if ( false === $rows_affected ) {
215
+ $log_data = [
216
+ 'message' => 'Error while trying to acquire lock with database.',
217
+ 'key' => $lock_key,
218
+ 'option_name' => $option_name,
219
+ 'error' => $wpdb->last_error,
220
+ ];
221
+ do_action( 'tribe_log', 'error', __CLASS__, $log_data );
222
+
223
+ return false;
224
+ }
225
+
226
+ /*
227
+ * The `wpdb::query()` method will return the number of affected rows when using `INSERT`.
228
+ * 1 row affected means we could INSERT and have the lock, 0 rows affected means we could not INSERT
229
+ * and have not the lock.
230
+ */
231
+
232
+ if ( $rows_affected ) {
233
+ self::$held_db_locks[ $lock_key ] = $lock_time;
234
+ }
235
+
236
+ return (bool) $rows_affected;
237
+ }
238
+
239
+ /**
240
+ * Returns the option name used to manage the lock for a key in the options table.
241
+ *
242
+ * @since TBD
243
+ *
244
+ * @param string $lock_key The lock key to build the option name for.
245
+ *
246
+ * @return string The name of the option that will be used to manage the lock for the specified key in the
247
+ * options table.
248
+ */
249
+ public function get_db_lock_option_name( $lock_key ) {
250
+ return self::$db_lock_option_prefix . $lock_key;
251
+ }
252
+
253
+ /**
254
+ * Releases the database lock of the record.
255
+ *
256
+ * Release a not held db lock will return `null`, not `false`.
257
+ *
258
+ * @since TBD
259
+ *
260
+ * @param string $lock_key The name of the lock to release.
261
+ *
262
+ * @return bool Whether the lock was correctly released or not.
263
+ */
264
+ public function release_db_lock( $lock_key ) {
265
+ if ( $this->manage_db_lock_w_mysql_functions() ) {
266
+ return $this->release_db_lock_w_mysql_functions( $lock_key );
267
+ }
268
+
269
+ return $this->release_db_lock_w_queries( $lock_key );
270
+ }
271
+
272
+ /**
273
+ * Releases a DB lock held by the current database session (`$wpdb` instance) by
274
+ * using the MySQL `RELEASE_LOCK` function.
275
+ *
276
+ * @since TBD
277
+ *
278
+ * @param string $lock_key The lock key to release the lock for.
279
+ *
280
+ * @return bool Whether the lock was correctly released or not.
281
+ */
282
+ protected function release_db_lock_w_mysql_functions( $lock_key ) {
283
+ global $wpdb;
284
+
285
+ $released = $wpdb->query(
286
+ $wpdb->prepare( "SELECT RELEASE_LOCK( SHA1( %s ) )", $lock_key )
287
+ );
288
+
289
+ if ( false === $released ) {
290
+ $log_data = [
291
+ 'message' => 'Error while trying to release lock.',
292
+ 'key' => $lock_key,
293
+ 'error' => $wpdb->last_error
294
+ ];
295
+ do_action( 'tribe_log', 'error', __CLASS__, $log_data );
296
+
297
+ return false;
298
+ }
299
+
300
+ return true;
301
+ }
302
+
303
+ /**
304
+ * Releases a lock using SQL queries.
305
+ *
306
+ * Note: differently from the `release_db_lock_w_mysql_functions`, this method will release the lock
307
+ * even if the current session is not the one holding the lock.
308
+ * To protect from this the trait uses a map of registered locks and when the locks where registered.
309
+ *
310
+ * @since TBD
311
+ *
312
+ * @param string $lock_key The lock key to release the lock for.
313
+ *
314
+ * @return bool Whether the lock was released or not, errors will be logged, a `false` value is returned if
315
+ * the lock was not held to begin with.
316
+ */
317
+ protected function release_db_lock_w_queries( $lock_key ) {
318
+ if ( ! isset( self::$held_db_locks[ $lock_key ] ) ) {
319
+ // Avoid sessions that do nothold the lock to release it.
320
+ return false;
321
+ }
322
+
323
+ global $wpdb;
324
+ $option_name = $this->get_db_lock_option_name( $lock_key );
325
+ //phpcs:disable
326
+ $rows_affected = $wpdb->delete(
327
+ $wpdb->options,
328
+ [ 'option_name' => $option_name ],
329
+ [ '%s' ]
330
+ );
331
+ //phpcs:enable
332
+
333
+ if ( false === $rows_affected ) {
334
+ $log_data = [
335
+ 'message' => 'Error while trying to release lock with database.',
336
+ 'key' => $lock_key,
337
+ 'option_name' => $option_name,
338
+ 'error' => $wpdb->last_error,
339
+ ];
340
+ do_action( 'tribe_log', 'error', __CLASS__, $log_data );
341
+
342
+ return false;
343
+ }
344
+
345
+ if ( $rows_affected ) {
346
+ // Lock successfully released.
347
+ unset( self::$held_db_locks[ $lock_key ] );
348
+ }
349
+
350
+ return (bool) $rows_affected;
351
+ }
352
+ }
common/src/Tribe/Image/Uploader.php CHANGED
@@ -153,11 +153,14 @@ class Tribe__Image__Uploader {
153
  }
154
 
155
  // Upload file into WP and leave WP handle the resize and such.
156
- $attachment_id = media_handle_sideload( [
157
- 'name' => $this->create_file_name( $file ),
158
- 'tmp_name' => $file,
159
- 'post_mime_type' => 'image',
160
- ] );
 
 
 
161
 
162
  // Remove the temporary file as is no longer required at this point.
163
  if ( ! $is_local && file_exists( $file ) ) {
153
  }
154
 
155
  // Upload file into WP and leave WP handle the resize and such.
156
+ $attachment_id = media_handle_sideload(
157
+ [
158
+ 'name' => $this->create_file_name( $file ),
159
+ 'tmp_name' => $file,
160
+ 'post_mime_type' => 'image',
161
+ ],
162
+ 0
163
+ );
164
 
165
  // Remove the temporary file as is no longer required at this point.
166
  if ( ! $is_local && file_exists( $file ) ) {
common/src/Tribe/Main.php CHANGED
@@ -4,6 +4,8 @@
4
  */
5
 
6
  // Don't load directly
 
 
7
  if ( ! defined( 'ABSPATH' ) ) {
8
  die( '-1' );
9
  }
@@ -17,7 +19,7 @@ class Tribe__Main {
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
- const VERSION = '4.12.4';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
@@ -611,6 +613,7 @@ class Tribe__Main {
611
  tribe_singleton( 'context', 'Tribe__Context' );
612
  tribe_singleton( 'post-transient', 'Tribe__Post_Transient' );
613
  tribe_singleton( 'db', 'Tribe__Db' );
 
614
  tribe_singleton( 'freemius', 'Tribe__Freemius' );
615
 
616
  tribe_singleton( Tribe__Dependency::class, Tribe__Dependency::class );
@@ -630,7 +633,9 @@ class Tribe__Main {
630
  tribe_register_provider( Tribe\Service_Providers\Dialog::class );
631
  tribe_register_provider( Tribe\Service_Providers\PUE::class );
632
  tribe_register_provider( Tribe\Service_Providers\Shortcodes::class );
 
633
  tribe_register_provider( Tribe\Log\Service_Provider::class );
 
634
  }
635
 
636
  /**
4
  */
5
 
6
  // Don't load directly
7
+ use Tribe\DB_Lock;
8
+
9
  if ( ! defined( 'ABSPATH' ) ) {
10
  die( '-1' );
11
  }
19
  const OPTIONNAME = 'tribe_events_calendar_options';
20
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
21
 
22
+ const VERSION = '4.12.5';
23
 
24
  const FEED_URL = 'https://theeventscalendar.com/feed/';
25
 
613
  tribe_singleton( 'context', 'Tribe__Context' );
614
  tribe_singleton( 'post-transient', 'Tribe__Post_Transient' );
615
  tribe_singleton( 'db', 'Tribe__Db' );
616
+ tribe_singleton( 'db-lock', DB_Lock::class );
617
  tribe_singleton( 'freemius', 'Tribe__Freemius' );
618
 
619
  tribe_singleton( Tribe__Dependency::class, Tribe__Dependency::class );
633
  tribe_register_provider( Tribe\Service_Providers\Dialog::class );
634
  tribe_register_provider( Tribe\Service_Providers\PUE::class );
635
  tribe_register_provider( Tribe\Service_Providers\Shortcodes::class );
636
+ tribe_register_provider( Tribe\Service_Providers\Body_Classes::class );
637
  tribe_register_provider( Tribe\Log\Service_Provider::class );
638
+ tribe_register_provider( Tribe\Service_Providers\Crons::class );
639
  }
640
 
641
  /**
common/src/Tribe/Promoter/Connector.php CHANGED
@@ -50,14 +50,14 @@ class Tribe__Promoter__Connector {
50
 
51
  $payload = [
52
  'clientSecret' => $secret_key,
53
- 'licenseKey' => $license_key,
54
- 'userId' => $user_id,
55
  ];
56
 
57
  $token = \Firebase\JWT\JWT::encode( $payload, $promoter_key );
58
 
59
  $response = $this->make_call( $url, [
60
- 'body' => [ 'token' => $token ],
61
  'sslverify' => false,
62
  ] );
63
 
@@ -91,7 +91,7 @@ class Tribe__Promoter__Connector {
91
  $url = $this->base_url() . 'connect/auth';
92
 
93
  $response = $this->make_call( $url, [
94
- 'body' => [ 'token' => $token ],
95
  'sslverify' => false,
96
  ] );
97
 
@@ -200,11 +200,25 @@ class Tribe__Promoter__Connector {
200
  $url = $this->base_url() . 'connect/notify';
201
 
202
  $args = [
203
- 'body' => [ 'token' => $token ],
204
  'sslverify' => false,
 
205
  ];
206
 
207
- $this->make_call( $url, $args );
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  }
209
 
210
  /**
@@ -215,7 +229,7 @@ class Tribe__Promoter__Connector {
215
  * @return mixed
216
  */
217
  protected function get_secret_key() {
218
- $secret_key = get_option( 'tribe_promoter_auth_key' );
219
 
220
  /**
221
  * @since 4.9.12
@@ -228,19 +242,33 @@ class Tribe__Promoter__Connector {
228
  /**
229
  * Make the call to the remote endpoint.
230
  *
231
- * @param string $url URL to send data to.
 
232
  * @param array $args Data to send.
233
  *
 
 
234
  * @return string|false The response body or false if not successful.
235
  *
236
- * @since 4.9
237
  */
238
  private function make_call( $url, $args ) {
239
  $response = wp_remote_post( $url, $args );
240
  $code = wp_remote_retrieve_response_code( $response );
241
  $body = wp_remote_retrieve_body( $response );
242
 
243
- if ( is_wp_error( $response ) || $code > 299 ) {
 
 
 
 
 
 
 
 
 
 
 
 
244
  return false;
245
  }
246
 
50
 
51
  $payload = [
52
  'clientSecret' => $secret_key,
53
+ 'licenseKey' => $license_key,
54
+ 'userId' => $user_id,
55
  ];
56
 
57
  $token = \Firebase\JWT\JWT::encode( $payload, $promoter_key );
58
 
59
  $response = $this->make_call( $url, [
60
+ 'body' => [ 'token' => $token ],
61
  'sslverify' => false,
62
  ] );
63
 
91
  $url = $this->base_url() . 'connect/auth';
92
 
93
  $response = $this->make_call( $url, [
94
+ 'body' => [ 'token' => $token ],
95
  'sslverify' => false,
96
  ] );
97
 
200
  $url = $this->base_url() . 'connect/notify';
201
 
202
  $args = [
203
+ 'body' => [ 'token' => $token ],
204
  'sslverify' => false,
205
+ 'timeout' => 15,
206
  ];
207
 
208
+ /**
209
+ * Allow to customize the number of maximum number of retries per call to notify promoter.
210
+ *
211
+ * @since TBD
212
+ *
213
+ * @param int $max_attempts The maximum number of retries if the response was a failure.
214
+ */
215
+ $max_attempts = apply_filters( 'tribe_promoter_max_retries_on_failure', 3 );
216
+
217
+ $attempts = 0;
218
+
219
+ do {
220
+ $result = $this->make_call( $url, $args );
221
+ } while ( false === $result && ++$attempts < $max_attempts );
222
  }
223
 
224
  /**
229
  * @return mixed
230
  */
231
  protected function get_secret_key() {
232
+ $secret_key = get_option( 'tribe_promoter_auth_key' );
233
 
234
  /**
235
  * @since 4.9.12
242
  /**
243
  * Make the call to the remote endpoint.
244
  *
245
+ * @since 4.9
246
+ *
247
  * @param array $args Data to send.
248
  *
249
+ * @param string $url URL to send data to.
250
+ *
251
  * @return string|false The response body or false if not successful.
252
  *
 
253
  */
254
  private function make_call( $url, $args ) {
255
  $response = wp_remote_post( $url, $args );
256
  $code = wp_remote_retrieve_response_code( $response );
257
  $body = wp_remote_retrieve_body( $response );
258
 
259
+ if ( $code > 299 || is_wp_error( $response ) ) {
260
+ do_action(
261
+ 'tribe_log',
262
+ 'warning',
263
+ __METHOD__,
264
+ [
265
+ 'url' => $url,
266
+ 'args' => $args,
267
+ 'response' => $response,
268
+ 'response_code' => $code,
269
+ ]
270
+ );
271
+
272
  return false;
273
  }
274
 
common/src/Tribe/Repository.php CHANGED
@@ -1512,7 +1512,7 @@ abstract class Tribe__Repository
1512
  */
1513
  public function set( $key, $value ) {
1514
  if ( ! is_string( $key ) ) {
1515
- throw Tribe__Repository__Usage_Error::because_udpate_key_should_be_a_string( $this );
1516
  }
1517
 
1518
  $this->updates[ $key ] = $value;
1512
  */
1513
  public function set( $key, $value ) {
1514
  if ( ! is_string( $key ) ) {
1515
+ throw Tribe__Repository__Usage_Error::because_update_key_should_be_a_string( $this );
1516
  }
1517
 
1518
  $this->updates[ $key ] = $value;
common/src/Tribe/Repository/Usage_Error.php CHANGED
@@ -75,19 +75,35 @@ class Tribe__Repository__Usage_Error extends Exception {
75
  public static function because_this_field_cannot_be_updated( $key, $object ) {
76
  $class = get_class( $object );
77
 
78
- return new self( "The {$class} class does not allow udpating the {$key} field; allow it by decorating or extending this class." );
79
  }
80
 
81
  /**
 
82
  * Indicates that the `set` method of the Update repository is being used incorrectly.
83
  *
84
- * @since 4.7.19
 
 
85
  *
86
  * @param Tribe__Repository__Update_Interface $object
87
  *
88
  * @return Tribe__Repository__Usage_Error A ready to throw instance of the class.
89
  */
90
  public static function because_udpate_key_should_be_a_string( $object ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  $class = get_class( $object );
92
 
93
  return new self( 'The key used in the `set` method should be a string; if you want to set multiple fields at once use the `set_args` method.' );
@@ -205,7 +221,7 @@ class Tribe__Repository__Usage_Error extends Exception {
205
  * @return Tribe__Repository__Usage_Error A ready to throw instance of the class.
206
  */
207
  public static function because_this_comparison_operator_requires_an_value_of_type( $operator, $filter, $type ) {
208
- return new self( "You are trying to use a comparison opearator ({$operator}) in the filter {$filter} that requires a value of type {$type}." );
209
  }
210
 
211
  /**
75
  public static function because_this_field_cannot_be_updated( $key, $object ) {
76
  $class = get_class( $object );
77
 
78
+ return new self( "The {$class} class does not allow updating the {$key} field; allow it by decorating or extending this class." );
79
  }
80
 
81
  /**
82
+ * "Sugar" method to correct a typo in a public method name.
83
  * Indicates that the `set` method of the Update repository is being used incorrectly.
84
  *
85
+ * @since TBD
86
+ *
87
+ * @TODO: perhaps we should deprecate this at some point?
88
  *
89
  * @param Tribe__Repository__Update_Interface $object
90
  *
91
  * @return Tribe__Repository__Usage_Error A ready to throw instance of the class.
92
  */
93
  public static function because_udpate_key_should_be_a_string( $object ) {
94
+ return self::because_update_key_should_be_a_string( $object );
95
+ }
96
+
97
+ /**
98
+ * Indicates that the `set` method of the Update repository is being used incorrectly.
99
+ *
100
+ * @since 4.7.19
101
+ *
102
+ * @param Tribe__Repository__Update_Interface $object
103
+ *
104
+ * @return Tribe__Repository__Usage_Error A ready to throw instance of the class.
105
+ */
106
+ public static function because_update_key_should_be_a_string( $object ) {
107
  $class = get_class( $object );
108
 
109
  return new self( 'The key used in the `set` method should be a string; if you want to set multiple fields at once use the `set_args` method.' );
221
  * @return Tribe__Repository__Usage_Error A ready to throw instance of the class.
222
  */
223
  public static function because_this_comparison_operator_requires_an_value_of_type( $operator, $filter, $type ) {
224
+ return new self( "You are trying to use a comparison operator ({$operator}) in the filter {$filter} that requires a value of type {$type}." );
225
  }
226
 
227
  /**
common/src/Tribe/Rewrite.php CHANGED
@@ -872,6 +872,11 @@ class Tribe__Rewrite {
872
  $perma_query_vars = [];
873
  $url_components = parse_url($url);
874
  $url_path = Arr::get( $url_components, 'path', '/' );
 
 
 
 
 
875
  $url_query = Arr::get( $url_components, 'query', '' );
876
  parse_str( $url_query, $url_query_vars );
877
  // Look for matches, removing leading `/` char.
872
  $perma_query_vars = [];
873
  $url_components = parse_url($url);
874
  $url_path = Arr::get( $url_components, 'path', '/' );
875
+ $site_path = parse_url( home_url(), PHP_URL_PATH );
876
+ if ( ! ( empty( $site_path ) && '/' !== $site_path ) ) {
877
+ // The current site is in a sub-directory: the site path should be dropped from the request path.
878
+ $url_path = str_replace( $site_path, '', $url_path );
879
+ }
880
  $url_query = Arr::get( $url_components, 'query', '' );
881
  parse_str( $url_query, $url_query_vars );
882
  // Look for matches, removing leading `/` char.
common/src/Tribe/Service_Providers/Body_Classes.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Tribe\Service_Providers;
4
+
5
+ use Tribe\Utils\Body_Classes as Body_Class_Object;
6
+
7
+ /**
8
+ * Class Body_Classes
9
+ *
10
+ * @since TBD
11
+ *
12
+ * Handles the registration and creation of our async process handlers.
13
+ */
14
+ class Body_Classes extends \tad_DI52_ServiceProvider {
15
+
16
+ /**
17
+ * Binds and sets up implementations.
18
+ *
19
+ * @since TBD
20
+ */
21
+ public function register() {
22
+ tribe_singleton( Body_Class_Object::class, Body_Class_Object::class );
23
+
24
+ /**
25
+ * Allows plugins to hook into the register action to register views, etc.
26
+ *
27
+ * @since TBD
28
+ *
29
+ * @param Tribe\Service_Providers\Dialog $dialog
30
+ */
31
+ do_action( 'tribe_body_classes_register', $this );
32
+
33
+ $this->hooks();
34
+ }
35
+
36
+ /**
37
+ * Set up hooks for classes.
38
+ *
39
+ * @since TBD
40
+ */
41
+ private function hooks() {
42
+ add_filter( 'body_class', [ $this, 'add_body_classes' ] );
43
+ add_filter( 'admin_body_class', [ $this, 'add_admin_body_classes' ] );
44
+
45
+ /**
46
+ * Allows plugins to hook into the hooks action to register their own hooks.
47
+ *
48
+ * @since TBD
49
+ *
50
+ * @param Tribe\Service_Providers\Dialog $dialog
51
+ */
52
+ do_action( 'tribe_body_classes_hooks', $this );
53
+ }
54
+
55
+ /**
56
+ * Hook in and add FE body classes.
57
+ *
58
+ * @since TBD
59
+ *
60
+ * @param array $classes An array of body class names.
61
+ * @return array The modified array of body class names.
62
+ */
63
+ public function add_body_classes( $classes = [] ) {
64
+ /** @var Body_Class_Object $body_classes */
65
+ $body_classes = tribe( Body_Class_Object::class );
66
+
67
+ return $body_classes->add_body_classes( $classes );
68
+ }
69
+
70
+ /**
71
+ * Hook in and add admin body classes.
72
+ *
73
+ * @since TBD
74
+ *
75
+ * @param array $classes An array of body class names.
76
+ * @return array The modified array of body class names.
77
+ */
78
+ public function add_admin_body_classes( $classes = [] ) {
79
+ /** @var Body_Class_Object $body_classes */
80
+ $body_classes = tribe( Body_Class_Object::class );
81
+
82
+ return $body_classes->add_admin_body_classes( $classes );
83
+ }
84
+
85
+ }
common/src/Tribe/Service_Providers/Crons.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Handles common cron functions.
4
+ *
5
+ * @since TBD
6
+ *
7
+ * @package Tribe\Service_Providers
8
+ */
9
+
10
+ namespace Tribe\Service_Providers;
11
+
12
+ use Tribe\DB_Lock;
13
+
14
+ /**
15
+ * Class Crons
16
+ *
17
+ * @since TBD
18
+ *
19
+ * @package Tribe\Service_Providers
20
+ */
21
+ class Crons extends \tad_DI52_ServiceProvider {
22
+
23
+ /**
24
+ * Registers the filters required by the provider to manage cron processes.
25
+ *
26
+ * @since TBD
27
+ */
28
+ public function register() {
29
+ // Schedule a cron event happening once a day.
30
+ if ( ! wp_get_schedule( 'tribe_daily_cron' ) ) {
31
+ wp_schedule_event( time(), 'daily', 'tribe_daily_cron' );
32
+ }
33
+
34
+ // Register actions that should happen on that hook.
35
+ add_action( 'tribe_daily_cron', [ DB_Lock::class, 'prune_stale_db_locks' ] );
36
+ }
37
+ }
common/src/Tribe/Traits/With_DB_Lock.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Provides methods to acquire and release a database (SQL) lock using the `Tribe\DB_Lock` class.
4
+ *
5
+ * @since TBD
6
+ *
7
+ * @package Tribe\Traits
8
+ */
9
+
10
+ namespace Tribe\Traits;
11
+
12
+ /**
13
+ * Trait With_Db_Lock
14
+ *
15
+ * @since TBD
16
+ *
17
+ * @package Tribe\Traits
18
+ */
19
+ trait With_DB_Lock {
20
+
21
+ /**
22
+ * Acquires a db lock.
23
+ *
24
+ * To ensure back-compatibility with MySQL 5.6, the lock will hash the lock key using SHA1.
25
+ *
26
+ * @since TBD
27
+ *
28
+ * @param string $lock_key The name of the db lock key to acquire.
29
+ *
30
+ * @return bool Whether the lock acquisition was successful or not.
31
+ */
32
+ private function acquire_db_lock( $lock_key ) {
33
+ return tribe( 'db-lock' )->acquire_db_lock( $lock_key );
34
+ }
35
+
36
+ /**
37
+ * Releases the database lock of the record.
38
+ *
39
+ * Release a not held db lock will return `null`, not `false`.
40
+ *
41
+ * @since TBD
42
+ *
43
+ * @param string $lock_key The name of the lock to release.
44
+ *
45
+ * @return bool Whether the lock was correctly released or not.
46
+ */
47
+ private function release_db_lock( $lock_key ) {
48
+ return tribe( 'db-lock' )->release_db_lock( $lock_key );
49
+ }
50
+ }
common/src/Tribe/Utils/Body_Classes.php ADDED
@@ -0,0 +1,349 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class used to manage and add body classes via a queue across our plugins.
4
+ *
5
+ * @since TBD
6
+ */
7
+ namespace Tribe\Utils;
8
+
9
+ use Tribe\Utils\Element_Classes;
10
+
11
+ /**
12
+ * Body_Classes class
13
+ *
14
+ * @since TBD
15
+ */
16
+ class Body_Classes {
17
+ /**
18
+ * Stores all the classes.
19
+ * In the format: ['class' => true, 'class => false ]
20
+ *
21
+ * @var array<string,bool>
22
+ */
23
+ protected $classes = [];
24
+
25
+ /**
26
+ * Stores all the admin classes.
27
+ * In the format: ['class' => true, 'class => false ]
28
+ *
29
+ * @var array<string,bool>
30
+ */
31
+ protected $admin_classes = [];
32
+
33
+ /**
34
+ * Queue-aware method to get the classes array.
35
+ * Returns the array of classes to add.
36
+ *
37
+ * @since TBD
38
+ *
39
+ * @param string $queue The queue we want to get 'admin', 'display', 'all'.
40
+ * @return array<string,bool> A map of the classes for the queue.
41
+ */
42
+ public function get_classes( $queue = 'display' ) {
43
+ switch( $queue ) {
44
+ case 'admin':
45
+ return $this->admin_classes;
46
+ break;
47
+ case 'all':
48
+ return array_merge( $this->classes, $this->admin_classes );
49
+ break;
50
+ default:
51
+ return $this->classes;
52
+ break;
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Returns the array of classnames to add
58
+ *
59
+ * @since TBD
60
+ *
61
+ * @param string $queue The queue we want to get 'admin', 'display', 'all'.
62
+ * @return array<string> The list of class names.
63
+ */
64
+ public function get_class_names( $queue = 'display' ) {
65
+ $classes = $this->get_classes( $queue );
66
+
67
+ return array_keys(
68
+ array_filter(
69
+ $classes,
70
+ static function( $v ) {
71
+ return $v;
72
+ },
73
+ ARRAY_FILTER_USE_KEY
74
+ )
75
+ );
76
+ }
77
+
78
+ /**
79
+ * Checks if a class is in the queue,
80
+ * wether it's going to be added or not.
81
+ *
82
+ * @since TBD
83
+ *
84
+ * @param string $class The class we are checking for.
85
+ * @param string $queue The queue we want to check 'admin', 'display', 'all'
86
+ * @return boolean Whether a class exists or not in the queue.
87
+ */
88
+ public function class_exists( $class, $queue = 'display' ) {
89
+ $classes = $this->get_classes( $queue );
90
+
91
+ return array_key_exists( $class, $classes );
92
+ }
93
+
94
+ /**
95
+ * Checks if a class is in the queue and going to be added.
96
+ *
97
+ * @since TBD
98
+ *
99
+ * @param string $class The class we are checking for.
100
+ * @param string $queue The queue we want to check 'admin', 'display', 'all'
101
+ * @return boolean Whether a class is currently queued or not.
102
+ */
103
+ public function class_is_enqueued( $class, $queue = 'display' ) {
104
+ $classes = $this->get_classes( $queue );
105
+ if ( ! $this->class_exists( $class ) ) {
106
+ return false;
107
+ }
108
+
109
+ return $classes[ $class ];
110
+ }
111
+
112
+ /**
113
+ * Dequeues a class.
114
+ *
115
+ * @since TBD
116
+ *
117
+ * @param string $class
118
+ * @param string $queue The queue we want to alter 'admin', 'display', 'all'
119
+ * @return boolean
120
+ */
121
+ public function dequeue_class( $class, $queue = 'display' ) {
122
+ if ( ! $this->class_exists( $class ) ) {
123
+ return false;
124
+ }
125
+
126
+ if ( 'admin' !== $queue ) {
127
+ $this->classes[ $class ] = false;
128
+ }
129
+
130
+ if ( 'display' !== $queue ) {
131
+ $this->admin_classes[ $class ] = false;
132
+ }
133
+
134
+ return true;
135
+
136
+ }
137
+
138
+ /**
139
+ * Enqueues a class.
140
+ *
141
+ * @since TBD
142
+ *
143
+ * @param string $class
144
+ * @param string $queue The queue we want to alter 'admin', 'display', 'all'
145
+ * @return false
146
+ */
147
+ public function enqueue_class( $class, $queue = 'display' ) {
148
+ if ( ! $this->class_exists( $class ) ) {
149
+ return false;
150
+ }
151
+
152
+ if ( 'admin' !== $queue ) {
153
+ $this->classes[ $class ] = true;
154
+ }
155
+
156
+ if ( 'display' !== $queue ) {
157
+ $this->admin_classes[ $class ] = true;
158
+ }
159
+
160
+ return true;
161
+ }
162
+
163
+ /**
164
+ * Add a single class to the queue.
165
+ *
166
+ * @since TBD
167
+ *
168
+ * @param string $class The class to add.
169
+ * @param string $queue The queue we want to alter 'admin', 'display', 'all'
170
+ * @return void
171
+ */
172
+ public function add_class( $class, $queue = 'display' ) {
173
+ if ( empty( $class ) ) {
174
+ return;
175
+ }
176
+
177
+ if ( is_array( $class ) ) {
178
+ $this->add_classes( $class, $queue );
179
+ } elseif ( $this->should_add_body_class_to_queue( $class, $queue ) ) {
180
+
181
+ $class = sanitize_html_class( $class );
182
+
183
+ if ( 'admin' !== $queue ) {
184
+ $this->classes[ $class ] = true ;
185
+ }
186
+
187
+ if ( 'display' !== $queue ) {
188
+ $this->admin_classes[ $class ] = true ;
189
+ }
190
+
191
+ }
192
+ }
193
+
194
+ /**
195
+ * Add an array of classes to the queue.
196
+ *
197
+ * @since TBD
198
+ *
199
+ * @param array<string> $class The classes to add.
200
+ * @return void
201
+ */
202
+ public function add_classes( array $classes, $queue = 'display' ) {
203
+ foreach ( $classes as $key => $value ) {
204
+ // If the classes are passed as class => bool, only add ones set to true.
205
+ if ( is_bool( $value ) && false !== $value ) {
206
+ $this->add_class( $key, $queue );
207
+ } else {
208
+ $this->add_class( $value, $queue );
209
+ }
210
+ }
211
+ }
212
+
213
+ /**
214
+ * Remove a single class from the queue.
215
+ *
216
+ * @since TBD
217
+ *
218
+ * @param string $class The class to remove.
219
+ * @return void
220
+ */
221
+ public function remove_class( $class, $queue = 'display' ) {
222
+ if ( 'admin' !== $queue ) {
223
+ $this->classes = array_filter(
224
+ $this->classes,
225
+ static function( $k ) use ( $class ) {
226
+ return $k !== $class;
227
+ },
228
+ ARRAY_FILTER_USE_KEY
229
+ );
230
+ }
231
+
232
+ if ( 'display' !== $queue ) {
233
+ $this->admin_classes = array_filter(
234
+ $this->admin_classes,
235
+ static function( $k ) use ( $class ) {
236
+ return $k !== $class;
237
+ },
238
+ ARRAY_FILTER_USE_KEY
239
+ );
240
+ }
241
+ }
242
+
243
+ /**
244
+ * Remove an array of classes from the queue.
245
+ *
246
+ * @since TBD
247
+ *
248
+ * @param array<string> $classes The classes to remove.
249
+ * @return void
250
+ */
251
+ public function remove_classes( array $classes, $queue = 'display' ) {
252
+ if ( empty( $classes ) || ! is_array( $classes) ) {
253
+ return;
254
+ }
255
+
256
+ foreach ( $classes as $class ) {
257
+ $this->remove_class( $class, $queue );
258
+ }
259
+ }
260
+
261
+ /**
262
+ * Adds the enqueued classes to the body class array.
263
+ *
264
+ * @since TBD
265
+ *
266
+ * @param array<string> $classes An array of body class names.
267
+ * @return void
268
+ */
269
+ public function add_body_classes( $classes = [] ) {
270
+ // Make sure they should be added.
271
+ if( ! $this->should_add_body_classes( $this->get_class_names(), (array) $classes, 'display' ) ) {
272
+ return $classes;
273
+ }
274
+
275
+ $element_classes = new Element_Classes( $this->get_class_names() );
276
+
277
+ return array_merge( $classes, $element_classes->get_classes() );
278
+ }
279
+
280
+ /**
281
+ * Adds the enqueued classes to the body class array.
282
+ *
283
+ * @since TBD
284
+ *
285
+ * @param array<string> $classes An array of body class names.
286
+ *
287
+ * @return array|false Current list of admin body classes if added, otherwise false.
288
+ */
289
+ public function add_admin_body_classes( $classes ) {
290
+ $classes = explode( ' ', $classes );
291
+ // Make sure they should be added.
292
+ if ( ! $this->should_add_body_classes( $this->get_class_names( 'admin' ), (array) $classes, 'admin' ) ) {
293
+ return false;
294
+ }
295
+
296
+ $element_classes = new Element_Classes( $this->get_class_names( 'admin' ) );
297
+
298
+ return implode( ' ', array_merge( $classes, $element_classes->get_classes() ) );
299
+
300
+ }
301
+
302
+ /**
303
+ * Should a individual class be added to the queue.
304
+ *
305
+ * @since TBD
306
+ *
307
+ * @param string $class The body class we wish to add.
308
+ *
309
+ * @return boolean Whether to add tribe body classes to the queue.
310
+ */
311
+ private function should_add_body_class_to_queue( $class, $queue = 'display' ) {
312
+ /**
313
+ * Filter whether to add the body class to the queue or not.
314
+ *
315
+ * @since TBD
316
+ *
317
+ * @param boolean $add Whether to add the class to the queue or not.
318
+ * @param array $class The array of body class names to add.
319
+ * @param string $queue The queue we want to get 'admin', 'display', 'all'.
320
+ */
321
+ return (bool) apply_filters( 'tribe_body_class_should_add_to_queue', false, $class, $queue );
322
+ }
323
+
324
+ /**
325
+ * Logic for whether the body classes, as a whole, should be added.
326
+ *
327
+ * @since TBD
328
+ *
329
+ * @param array $add_classes An array of body class names to add.
330
+ * @param array $existing_classes An array of existing body class names from WP.
331
+ * @param string $queue The queue we want to get 'admin', 'display', 'all'.
332
+ *
333
+ * @return boolean Whether to add tribe body classes.
334
+ */
335
+ private function should_add_body_classes( array $add_classes, array $existing_classes, $queue ) {
336
+ /**
337
+ * Filter whether to add tribe body classes or not.
338
+ *
339
+ * @since TBD
340
+ *
341
+ * @param boolean $add Whether to add classes or not.
342
+ * @param array $add_classes The array of body class names to add.
343
+ * @param array $existing_classes An array of existing body class names from WP.
344
+ * @param string $queue The queue we want to get 'admin', 'display', 'all'.
345
+ *
346
+ */
347
+ return (bool)apply_filters( 'tribe_body_classes_should_add', false, $queue, $add_classes, $existing_classes );
348
+ }
349
+ }
common/src/functions/template-tags/html.php CHANGED
@@ -64,6 +64,8 @@ function tribe_attributes() {
64
  /**
65
  * Get attributes for required fields.
66
  *
 
 
67
  * @since 4.10.0
68
  *
69
  * @param boolean $required If the field is required.
@@ -110,6 +112,8 @@ function tribe_required_label( $required, $echo = true ) {
110
  /**
111
  * Get attributes for disabled fields.
112
  *
 
 
113
  * @since 4.10.0
114
  *
115
  * @param boolean $disabled If the field is disabled.
64
  /**
65
  * Get attributes for required fields.
66
  *
67
+ * @deprecated TBD
68
+ *
69
  * @since 4.10.0
70
  *
71
  * @param boolean $required If the field is required.
112
  /**
113
  * Get attributes for disabled fields.
114
  *
115
+ * @deprecated TBD
116
+ *
117
  * @since 4.10.0
118
  *
119
  * @param boolean $disabled If the field is disabled.
common/src/resources/js/dependency.js CHANGED
@@ -28,6 +28,7 @@
28
  active: '.tribe-active',
29
  dependency: '.tribe-dependency',
30
  dependencyVerified: '.tribe-dependency-verified',
 
31
  fields: 'input, select, textarea',
32
  advanced_fields: '.select2-container',
33
  linked: '.tribe-dependent-linked'
@@ -180,7 +181,10 @@
180
  $dependent.filter( obj.selectors.fields ).prop( 'disabled', false );
181
  }
182
 
183
- $dependent.find( obj.selectors.fields ).prop( 'disabled', false );
 
 
 
184
 
185
  if ( 'undefined' !== typeof $().select2 ) {
186
  $dependent.find( '.tribe-dropdown, .tribe-ea-dropdown' ).select2().prop( 'disabled', false );
@@ -194,7 +198,10 @@
194
  }
195
 
196
  if ( ! $dependent.data( 'dependency-dont-disable' ) ) {
197
- $dependent.find( obj.selectors.fields ).prop( 'disabled', true );
 
 
 
198
  }
199
 
200
  if ( 'undefined' !== typeof $().select2 ) {
28
  active: '.tribe-active',
29
  dependency: '.tribe-dependency',
30
  dependencyVerified: '.tribe-dependency-verified',
31
+ dependencyManualControl: '[data-dependency-manual-control]',
32
  fields: 'input, select, textarea',
33
  advanced_fields: '.select2-container',
34
  linked: '.tribe-dependent-linked'
181
  $dependent.filter( obj.selectors.fields ).prop( 'disabled', false );
182
  }
183
 
184
+ $dependent
185
+ .find( obj.selectors.fields )
186
+ .not( obj.selectors.dependencyManualControl )
187
+ .prop( 'disabled', false );
188
 
189
  if ( 'undefined' !== typeof $().select2 ) {
190
  $dependent.find( '.tribe-dropdown, .tribe-ea-dropdown' ).select2().prop( 'disabled', false );
198
  }
199
 
200
  if ( ! $dependent.data( 'dependency-dont-disable' ) ) {
201
+ $dependent
202
+ .find( obj.selectors.fields )
203
+ .not( obj.selectors.dependencyManualControl )
204
+ .prop( 'disabled', true );
205
  }
206
 
207
  if ( 'undefined' !== typeof $().select2 ) {
common/src/resources/js/dependency.min.js CHANGED
@@ -1 +1 @@
1
- !function(e,n,d){"use strict";var i=e(document),t=e(window);d.selectors={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"},d.constraintConditions={condition:function(e,d){return n.isArray(d)?-1!==d.indexOf(e):e==d},not_condition:function(e,d){return n.isArray(d)?-1===d.indexOf(e):e!=d},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,d){return!(!d.is(":checkbox")&&!d.is(":radio"))&&d.is(":checked")},is_not_checked:function(e,n,d){return!(!d.is(":checkbox")&&!d.is(":radio"))&&!d.is(":checked")}},d.verify=function(t){var o=e(this),c="#"+o.attr("id"),a=o.val();if(c){if(o.is(":radio")){var s=e("[name='"+o.attr("name")+"']");s.not(d.selectors.linked).on("change",function(){s.trigger("verify.dependency")}).addClass(d.selectors.linked.replace(".",""))}var r=i.find('[data-depends="'+c+'"]').not(".select2-container");0!==r.length&&(r.each(function(i,t){var c=e(t);if(c.is("[data-dependent-parent]")){var s=c.data("dependentParent"),r=c.closest(s);if(0===r.length)return void console.warn("Dependency: `data-dependent-parent` has bad selector",c);c=r.find(t)}var l={condition:!!c.is("[data-condition]")&&c.data("condition"),not_condition:!!c.is("[data-condition-not]")&&c.data("conditionNot"),is_not_empty:c.data("conditionIsNotEmpty")||c.is("[data-condition-is-not-empty]")||c.data("conditionNotEmpty")||c.is("[data-condition-not-empty]"),is_empty:c.data("conditionIsEmpty")||c.is("[data-condition-is-empty]")||c.data("conditionEmpty")||c.is("[data-condition-empty]"),is_numeric:c.data("conditionIsNumeric")||c.is("[data-condition-is-numeric]")||c.data("conditionNumeric")||c.is("[data-condition-numeric]"),is_not_numeric:c.data("conditionIsNotNumeric")||c.is("[data-condition-is-not-numeric]"),is_checked:c.data("conditionIsChecked")||c.is("[data-condition-is-checked]")||c.data("conditionChecked")||c.is("[data-condition-checked]"),is_not_checked:c.data("conditionIsNotChecked")||c.is("[data-condition-is-not-checked]")||c.data("conditionNotChecked")||c.is("[data-condition-not-checked]")},p=d.selectors.active.replace(".",""),u=c.is("[data-dependency-check-disabled]"),f=c.is("[data-dependency-always-visible]"),y=!u&&o.is(":disabled"),h=c.data("condition-relation")||"or";l=n.pick(l,function(e){return!1!==e}),("or"===h?n.reduce(l,function(e,n,i){return e||d.constraintConditions[i](a,n,o)},!1):n.reduce(l,function(e,n,i){return e&&d.constraintConditions[i](a,n,o)},!0))&&!y?(c.is(".tribe-dropdown, .tribe-ea-dropdown")?(c.select2().data("select2").$container.addClass(p),c.select2().data("select2").$container.is(":hidden")&&c.select2().data("select2").$container.show()):(c.addClass(p),c.is(":hidden")&&c.show()),f&&c.filter(d.selectors.fields).prop("disabled",!1),c.find(d.selectors.fields).prop("disabled",!1),void 0!==e().select2&&c.find(".tribe-dropdown, .tribe-ea-dropdown").select2().prop("disabled",!1)):(c.removeClass(p),c.is(":visible")&&c.hide(),c.data("dependency-dont-disable")||c.find(d.selectors.fields).prop("disabled",!0),void 0!==e().select2&&c.find(".tribe-dropdown, .tribe-ea-dropdown").select2().prop("disabled",!0),c.is(".tribe-dropdown, .tribe-ea-dropdown")&&c.select2().data("select2").$container.removeClass(p),f&&(c.addClass(p).show(),c.filter(d.selectors.fields).prop("disabled",!0),c.is(".tribe-dropdown, .tribe-ea-dropdown")&&c.select2().data("select2").$container.addClass(p).show()));var v=c.find(d.selectors.dependency);v.length>0&&v.trigger("change")}),o.addClass(d.selectors.dependencyVerified.className()))}},d.setup=function(n){var i=e(d.selectors.dependent);i.length&&i.dependency();var t=e(d.selectors.dependency);t.not(d.selectors.dependencyVerified).length&&t.trigger("verify.dependency")},e.fn.dependency=function(){return this.each(function(){var n=e(this),i=n.data("depends"),t=e(i);t.length&&(t.get(0).created||(t.addClass(d.selectors.dependency.replace(".","")).data("dependent",n),t.get(0).created=!0))})},i.on("setup.dependency",d.setup),i.off("change.dependency verify.dependency",d.selectors.dependency),i.on({"verify.dependency":d.verify,"change.dependency":d.verify},d.selectors.dependency),i.ready(d.setup),t.on("load",d.setup)}(jQuery,window.underscore||window._,{});
1
+ !function(e,n,d){"use strict";var t=e(document),i=e(window);d.selectors={dependent:".tribe-dependent",active:".tribe-active",dependency:".tribe-dependency",dependencyVerified:".tribe-dependency-verified",dependencyManualControl:"[data-dependency-manual-control]",fields:"input, select, textarea",advanced_fields:".select2-container",linked:".tribe-dependent-linked"},d.constraintConditions={condition:function(e,d){return n.isArray(d)?-1!==d.indexOf(e):e==d},not_condition:function(e,d){return n.isArray(d)?-1===d.indexOf(e):e!=d},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,d){return!(!d.is(":checkbox")&&!d.is(":radio"))&&d.is(":checked")},is_not_checked:function(e,n,d){return!(!d.is(":checkbox")&&!d.is(":radio"))&&!d.is(":checked")}},d.verify=function(i){var o=e(this),c="#"+o.attr("id"),a=o.val();if(c){if(o.is(":radio")){var s=e("[name='"+o.attr("name")+"']");s.not(d.selectors.linked).on("change",function(){s.trigger("verify.dependency")}).addClass(d.selectors.linked.replace(".",""))}var r=t.find('[data-depends="'+c+'"]').not(".select2-container");0!==r.length&&(r.each(function(t,i){var c=e(i);if(c.is("[data-dependent-parent]")){var s=c.data("dependentParent"),r=c.closest(s);if(0===r.length)return void console.warn("Dependency: `data-dependent-parent` has bad selector",c);c=r.find(i)}var l={condition:!!c.is("[data-condition]")&&c.data("condition"),not_condition:!!c.is("[data-condition-not]")&&c.data("conditionNot"),is_not_empty:c.data("conditionIsNotEmpty")||c.is("[data-condition-is-not-empty]")||c.data("conditionNotEmpty")||c.is("[data-condition-not-empty]"),is_empty:c.data("conditionIsEmpty")||c.is("[data-condition-is-empty]")||c.data("conditionEmpty")||c.is("[data-condition-empty]"),is_numeric:c.data("conditionIsNumeric")||c.is("[data-condition-is-numeric]")||c.data("conditionNumeric")||c.is("[data-condition-numeric]"),is_not_numeric:c.data("conditionIsNotNumeric")||c.is("[data-condition-is-not-numeric]"),is_checked:c.data("conditionIsChecked")||c.is("[data-condition-is-checked]")||c.data("conditionChecked")||c.is("[data-condition-checked]"),is_not_checked:c.data("conditionIsNotChecked")||c.is("[data-condition-is-not-checked]")||c.data("conditionNotChecked")||c.is("[data-condition-not-checked]")},p=d.selectors.active.replace(".",""),u=c.is("[data-dependency-check-disabled]"),f=c.is("[data-dependency-always-visible]"),y=!u&&o.is(":disabled"),h=c.data("condition-relation")||"or";l=n.pick(l,function(e){return!1!==e}),("or"===h?n.reduce(l,function(e,n,t){return e||d.constraintConditions[t](a,n,o)},!1):n.reduce(l,function(e,n,t){return e&&d.constraintConditions[t](a,n,o)},!0))&&!y?(c.is(".tribe-dropdown, .tribe-ea-dropdown")?(c.select2().data("select2").$container.addClass(p),c.select2().data("select2").$container.is(":hidden")&&c.select2().data("select2").$container.show()):(c.addClass(p),c.is(":hidden")&&c.show()),f&&c.filter(d.selectors.fields).prop("disabled",!1),c.find(d.selectors.fields).not(d.selectors.dependencyManualControl).prop("disabled",!1),void 0!==e().select2&&c.find(".tribe-dropdown, .tribe-ea-dropdown").select2().prop("disabled",!1)):(c.removeClass(p),c.is(":visible")&&c.hide(),c.data("dependency-dont-disable")||c.find(d.selectors.fields).not(d.selectors.dependencyManualControl).prop("disabled",!0),void 0!==e().select2&&c.find(".tribe-dropdown, .tribe-ea-dropdown").select2().prop("disabled",!0),c.is(".tribe-dropdown, .tribe-ea-dropdown")&&c.select2().data("select2").$container.removeClass(p),f&&(c.addClass(p).show(),c.filter(d.selectors.fields).prop("disabled",!0),c.is(".tribe-dropdown, .tribe-ea-dropdown")&&c.select2().data("select2").$container.addClass(p).show()));var m=c.find(d.selectors.dependency);m.length>0&&m.trigger("change")}),o.addClass(d.selectors.dependencyVerified.className()))}},d.setup=function(n){var t=e(d.selectors.dependent);t.length&&t.dependency();var i=e(d.selectors.dependency);i.not(d.selectors.dependencyVerified).length&&i.trigger("verify.dependency")},e.fn.dependency=function(){return this.each(function(){var n=e(this),t=n.data("depends"),i=e(t);i.length&&(i.get(0).created||(i.addClass(d.selectors.dependency.replace(".","")).data("dependent",n),i.get(0).created=!0))})},t.on("setup.dependency",d.setup),t.off("change.dependency verify.dependency",d.selectors.dependency),t.on({"verify.dependency":d.verify,"change.dependency":d.verify},d.selectors.dependency),t.ready(d.setup),i.on("load",d.setup)}(jQuery,window.underscore||window._,{});
common/src/resources/js/dropdowns.js CHANGED
@@ -346,7 +346,7 @@ var tribe_dropdowns = window.tribe_dropdowns || {};
346
 
347
  // For AJAX we reset the data
348
  args.data = { results: [] };
349
-
350
  // Format for Parents breadcrumbs
351
  args.formatResult = function ( item, container, query ) {
352
  if ( 'undefined' !== typeof item.breadcrumbs ) {
346
 
347
  // For AJAX we reset the data
348
  args.data = { results: [] };
349
+
350
  // Format for Parents breadcrumbs
351
  args.formatResult = function ( item, container, query ) {
352
  if ( 'undefined' !== typeof item.breadcrumbs ) {
common/vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitb7a03a552e906f6215dc4a8307d1a5c9::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit4ded90334d7b7eeec791d5003dd56ebc::getLoader();
common/vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInit5cbffd146fef652170a5e2e911478771::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInit127f93d4ea4f9c466e35208466663897::getLoader();
common/vendor/composer/autoload_classmap.php CHANGED
@@ -114,6 +114,7 @@ return array(
114
  'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/DummyTest.php',
115
  'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
116
  'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php',
 
117
  'Tribe\\Dialog\\View' => $baseDir . '/src/Tribe/Dialog/View.php',
118
  'Tribe\\Log\\Action_Logger' => $baseDir . '/src/Tribe/Log/Action_Logger.php',
119
  'Tribe\\Log\\Canonical_Formatter' => $baseDir . '/src/Tribe/Log/Canonical_Formatter.php',
@@ -124,6 +125,8 @@ return array(
124
  'Tribe\\PUE\\Update_Prevention' => $baseDir . '/src/Tribe/PUE/Update_Prevention.php',
125
  'Tribe\\Repository\\Core_Read_Interface' => $baseDir . '/src/Tribe/Repository/Core_Read_Interface.php',
126
  'Tribe\\Repository\\Filter_Validation' => $baseDir . '/src/Tribe/Repository/Filter_Validation.php',
 
 
127
  'Tribe\\Service_Providers\\Dialog' => $baseDir . '/src/Tribe/Service_Providers/Dialog.php',
128
  'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
129
  'Tribe\\Service_Providers\\Shortcodes' => $baseDir . '/src/Tribe/Service_Providers/Shortcodes.php',
@@ -133,7 +136,9 @@ return array(
133
  'Tribe\\Shortcode\\Shortcode_Interface' => $baseDir . '/src/Tribe/Shortcode/Shortcode_Interface.php',
134
  'Tribe\\Tooltip\\View' => $baseDir . '/src/Tribe/Tooltip/View.php',
135
  'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
 
136
  'Tribe\\Traits\\With_Meta_Updates_Handling' => $baseDir . '/src/Tribe/Traits/With_Meta_Updates_Handling.php',
 
137
  'Tribe\\Utils\\Collection_Interface' => $baseDir . '/src/Tribe/Utils/Collection_Interface.php',
138
  'Tribe\\Utils\\Collection_Trait' => $baseDir . '/src/Tribe/Utils/Collection_Trait.php',
139
  'Tribe\\Utils\\Date_I18n' => $baseDir . '/src/Tribe/Utils/Date_I18n.php',
114
  'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/DummyTest.php',
115
  'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
116
  'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php',
117
+ 'Tribe\\DB_Lock' => $baseDir . '/src/Tribe/DB_Lock.php',
118
  'Tribe\\Dialog\\View' => $baseDir . '/src/Tribe/Dialog/View.php',
119
  'Tribe\\Log\\Action_Logger' => $baseDir . '/src/Tribe/Log/Action_Logger.php',
120
  'Tribe\\Log\\Canonical_Formatter' => $baseDir . '/src/Tribe/Log/Canonical_Formatter.php',
125
  'Tribe\\PUE\\Update_Prevention' => $baseDir . '/src/Tribe/PUE/Update_Prevention.php',
126
  'Tribe\\Repository\\Core_Read_Interface' => $baseDir . '/src/Tribe/Repository/Core_Read_Interface.php',
127
  'Tribe\\Repository\\Filter_Validation' => $baseDir . '/src/Tribe/Repository/Filter_Validation.php',
128
+ 'Tribe\\Service_Providers\\Body_Classes' => $baseDir . '/src/Tribe/Service_Providers/Body_Classes.php',
129
+ 'Tribe\\Service_Providers\\Crons' => $baseDir . '/src/Tribe/Service_Providers/Crons.php',
130
  'Tribe\\Service_Providers\\Dialog' => $baseDir . '/src/Tribe/Service_Providers/Dialog.php',
131
  'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
132
  'Tribe\\Service_Providers\\Shortcodes' => $baseDir . '/src/Tribe/Service_Providers/Shortcodes.php',
136
  'Tribe\\Shortcode\\Shortcode_Interface' => $baseDir . '/src/Tribe/Shortcode/Shortcode_Interface.php',
137
  'Tribe\\Tooltip\\View' => $baseDir . '/src/Tribe/Tooltip/View.php',
138
  'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
139
+ 'Tribe\\Traits\\With_DB_Lock' => $baseDir . '/src/Tribe/Traits/With_DB_Lock.php',
140
  'Tribe\\Traits\\With_Meta_Updates_Handling' => $baseDir . '/src/Tribe/Traits/With_Meta_Updates_Handling.php',
141
+ 'Tribe\\Utils\\Body_Classes' => $baseDir . '/src/Tribe/Utils/Body_Classes.php',
142
  'Tribe\\Utils\\Collection_Interface' => $baseDir . '/src/Tribe/Utils/Collection_Interface.php',
143
  'Tribe\\Utils\\Collection_Trait' => $baseDir . '/src/Tribe/Utils/Collection_Trait.php',
144
  'Tribe\\Utils\\Date_I18n' => $baseDir . '/src/Tribe/Utils/Date_I18n.php',
common/vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitb7a03a552e906f6215dc4a8307d1a5c9
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInitb7a03a552e906f6215dc4a8307d1a5c9
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInitb7a03a552e906f6215dc4a8307d1a5c9', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInitb7a03a552e906f6215dc4a8307d1a5c9', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInitb7a03a552e906f6215dc4a8307d1a5c9::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit4ded90334d7b7eeec791d5003dd56ebc
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit4ded90334d7b7eeec791d5003dd56ebc', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit4ded90334d7b7eeec791d5003dd56ebc', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit4ded90334d7b7eeec791d5003dd56ebc::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
common/vendor/composer/autoload_real_52.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
- class ComposerAutoloaderInit5cbffd146fef652170a5e2e911478771 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit5cbffd146fef652170a5e2e911478771 {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit5cbffd146fef652170a5e2e911478771', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit5cbffd146fef652170a5e2e911478771', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
+ class ComposerAutoloaderInit127f93d4ea4f9c466e35208466663897 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit127f93d4ea4f9c466e35208466663897', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit127f93d4ea4f9c466e35208466663897', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
common/vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInitb7a03a552e906f6215dc4a8307d1a5c9
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
@@ -170,6 +170,7 @@ class ComposerStaticInitb7a03a552e906f6215dc4a8307d1a5c9
170
  'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/DummyTest.php',
171
  'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
172
  'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php',
 
173
  'Tribe\\Dialog\\View' => __DIR__ . '/../..' . '/src/Tribe/Dialog/View.php',
174
  'Tribe\\Log\\Action_Logger' => __DIR__ . '/../..' . '/src/Tribe/Log/Action_Logger.php',
175
  'Tribe\\Log\\Canonical_Formatter' => __DIR__ . '/../..' . '/src/Tribe/Log/Canonical_Formatter.php',
@@ -180,6 +181,8 @@ class ComposerStaticInitb7a03a552e906f6215dc4a8307d1a5c9
180
  'Tribe\\PUE\\Update_Prevention' => __DIR__ . '/../..' . '/src/Tribe/PUE/Update_Prevention.php',
181
  'Tribe\\Repository\\Core_Read_Interface' => __DIR__ . '/../..' . '/src/Tribe/Repository/Core_Read_Interface.php',
182
  'Tribe\\Repository\\Filter_Validation' => __DIR__ . '/../..' . '/src/Tribe/Repository/Filter_Validation.php',
 
 
183
  'Tribe\\Service_Providers\\Dialog' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Dialog.php',
184
  'Tribe\\Service_Providers\\PUE' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/PUE.php',
185
  'Tribe\\Service_Providers\\Shortcodes' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Shortcodes.php',
@@ -189,7 +192,9 @@ class ComposerStaticInitb7a03a552e906f6215dc4a8307d1a5c9
189
  'Tribe\\Shortcode\\Shortcode_Interface' => __DIR__ . '/../..' . '/src/Tribe/Shortcode/Shortcode_Interface.php',
190
  'Tribe\\Tooltip\\View' => __DIR__ . '/../..' . '/src/Tribe/Tooltip/View.php',
191
  'Tribe\\Traits\\Cache_User' => __DIR__ . '/../..' . '/src/Tribe/Traits/Cache_User.php',
 
192
  'Tribe\\Traits\\With_Meta_Updates_Handling' => __DIR__ . '/../..' . '/src/Tribe/Traits/With_Meta_Updates_Handling.php',
 
193
  'Tribe\\Utils\\Collection_Interface' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Interface.php',
194
  'Tribe\\Utils\\Collection_Trait' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Trait.php',
195
  'Tribe\\Utils\\Date_I18n' => __DIR__ . '/../..' . '/src/Tribe/Utils/Date_I18n.php',
@@ -214,10 +219,10 @@ class ComposerStaticInitb7a03a552e906f6215dc4a8307d1a5c9
214
  public static function getInitializer(ClassLoader $loader)
215
  {
216
  return \Closure::bind(function () use ($loader) {
217
- $loader->prefixLengthsPsr4 = ComposerStaticInitb7a03a552e906f6215dc4a8307d1a5c9::$prefixLengthsPsr4;
218
- $loader->prefixDirsPsr4 = ComposerStaticInitb7a03a552e906f6215dc4a8307d1a5c9::$prefixDirsPsr4;
219
- $loader->prefixesPsr0 = ComposerStaticInitb7a03a552e906f6215dc4a8307d1a5c9::$prefixesPsr0;
220
- $loader->classMap = ComposerStaticInitb7a03a552e906f6215dc4a8307d1a5c9::$classMap;
221
 
222
  }, null, ClassLoader::class);
223
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit4ded90334d7b7eeec791d5003dd56ebc
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
170
  'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/DummyTest.php',
171
  'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
172
  'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php',
173
+ 'Tribe\\DB_Lock' => __DIR__ . '/../..' . '/src/Tribe/DB_Lock.php',
174
  'Tribe\\Dialog\\View' => __DIR__ . '/../..' . '/src/Tribe/Dialog/View.php',
175
  'Tribe\\Log\\Action_Logger' => __DIR__ . '/../..' . '/src/Tribe/Log/Action_Logger.php',
176
  'Tribe\\Log\\Canonical_Formatter' => __DIR__ . '/../..' . '/src/Tribe/Log/Canonical_Formatter.php',
181
  'Tribe\\PUE\\Update_Prevention' => __DIR__ . '/../..' . '/src/Tribe/PUE/Update_Prevention.php',
182
  'Tribe\\Repository\\Core_Read_Interface' => __DIR__ . '/../..' . '/src/Tribe/Repository/Core_Read_Interface.php',
183
  'Tribe\\Repository\\Filter_Validation' => __DIR__ . '/../..' . '/src/Tribe/Repository/Filter_Validation.php',
184
+ 'Tribe\\Service_Providers\\Body_Classes' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Body_Classes.php',
185
+ 'Tribe\\Service_Providers\\Crons' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Crons.php',
186
  'Tribe\\Service_Providers\\Dialog' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Dialog.php',
187
  'Tribe\\Service_Providers\\PUE' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/PUE.php',
188
  'Tribe\\Service_Providers\\Shortcodes' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Shortcodes.php',
192
  'Tribe\\Shortcode\\Shortcode_Interface' => __DIR__ . '/../..' . '/src/Tribe/Shortcode/Shortcode_Interface.php',
193
  'Tribe\\Tooltip\\View' => __DIR__ . '/../..' . '/src/Tribe/Tooltip/View.php',
194
  'Tribe\\Traits\\Cache_User' => __DIR__ . '/../..' . '/src/Tribe/Traits/Cache_User.php',
195
+ 'Tribe\\Traits\\With_DB_Lock' => __DIR__ . '/../..' . '/src/Tribe/Traits/With_DB_Lock.php',
196
  'Tribe\\Traits\\With_Meta_Updates_Handling' => __DIR__ . '/../..' . '/src/Tribe/Traits/With_Meta_Updates_Handling.php',
197
+ 'Tribe\\Utils\\Body_Classes' => __DIR__ . '/../..' . '/src/Tribe/Utils/Body_Classes.php',
198
  'Tribe\\Utils\\Collection_Interface' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Interface.php',
199
  'Tribe\\Utils\\Collection_Trait' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Trait.php',
200
  'Tribe\\Utils\\Date_I18n' => __DIR__ . '/../..' . '/src/Tribe/Utils/Date_I18n.php',
219
  public static function getInitializer(ClassLoader $loader)
220
  {
221
  return \Closure::bind(function () use ($loader) {
222
+ $loader->prefixLengthsPsr4 = ComposerStaticInit4ded90334d7b7eeec791d5003dd56ebc::$prefixLengthsPsr4;
223
+ $loader->prefixDirsPsr4 = ComposerStaticInit4ded90334d7b7eeec791d5003dd56ebc::$prefixDirsPsr4;
224
+ $loader->prefixesPsr0 = ComposerStaticInit4ded90334d7b7eeec791d5003dd56ebc::$prefixesPsr0;
225
+ $loader->classMap = ComposerStaticInit4ded90334d7b7eeec791d5003dd56ebc::$classMap;
226
 
227
  }, null, ClassLoader::class);
228
  }
data_collection_disclosure.html DELETED
@@ -1,32 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <title>Modern Tribe's Data Collection Disclosure Statement | The Events Calendar + Event Aggregator</title>
6
- <meta name="description" content="Modern Tribe's Data Collection Statement for The Events Calendar Plugin with Event Aggregator Import Service">
7
- <meta name="author" content="Modern Tribe, Inc.">
8
- <meta name="copyright" content="Modern Tribe, Inc.">
9
- <style>
10
- html{background-color:#FFFFFF;color:#383838;}
11
- ::-moz-selection{background:#444444;color:#DDDDDD;}
12
- ::selection{background:#444444;color:#DDDDDD;}
13
- body{margin: 0 auto;padding: 0;max-width: 650px;font-family:Helvetica,Arial,sans-serif}
14
- body>*{padding-left: 20px;padding-right: 20px;}
15
- a{color:#0e9fd6;}
16
- h2,h3,footer {color: #fff;background-color: #0e9fd6;margin: 0;padding: 20px;}
17
- ul,ol{margin-left: 20px;}
18
- footer a{color:#fff;}
19
- </style>
20
- </head>
21
- <body>
22
- <h2>The Events Calendar (and Event Aggregator) | Data Collection Disclosure Statement</h2>
23
- <p>Modern Tribe, Inc (<a href="https://m.tri.be/1a3x">theeventscalendar.com</a>) goes to great length to protect the data we collect and store from your customer account as well as through your usage of our plugin(s) and services. You may review our <a href="https://m.tri.be/1a3y">Privacy Policy</a> at any time.</p>
24
- <p>Upon activating a paid license for Event Aggregator (contained within The Events Calendar plugin), the following information may be collected: Install domain, License key, WP Version, PHP Version, MySQL Version, Theme info, Site language, User language, Site public status, WP_DEBUG status, Site Timezone, Multisite status, Network activated status, Number of all active sites in multisite</p>
25
- <p>While importing events through our Event Aggregator server, we store the data fetched from origin sources, which may include organizer and venue details accessible to you through API keys only, via caching. After a short period of time (est. 12 hours - 7 days), data is automatically deleted on our servers as we've completed processing data to your website.</p>
26
- <p>If you reach out to our Support Team, in certain situations, we may request that you to send us your "System Info" in order to assist. Upon doing so, your System Info, your name, and email address is collected during this process.</p>
27
- <p>In addition, we use third party services within certain plugins, such as The Events Calendar, Events Calendar PRO, and Event Tickets. These services include Google Maps as well as PayPal (when you setup and connect these within our plugins). It’s important to note that your use of these third party services fall under their own privacy and data collection policies, which are separate from our own.</p>
28
- <p><b>Please note, we do not collect nor do we store any data on your own visitors and end-users.</b> The data collected through your own use of our plugin is entirely contained within your own WordPress installation and database.</p>
29
- <p>For your benefit—and to save you some time—we’ve crafted a <a href="site_owner_data_collection_statement.html">short and simple disclosure</a> you can use within your own Privacy Policy. This disclosure addresses the data collection you are conducting on your end-users through the use of our plugin. Please review this separate data collection statement at your convenience and if you (and/or your Attorney) feels it’s worth adding a provision to your own policy statement, you are welcome to use it as an addition to your disclosure statement(s). We cannot however, provide any support or guidance with regards to your own policy statements and data collection methods.</p>
30
- <footer>©2018 <a href="https://m.tri.be/1a3x">Modern Tribe Inc.</a></footer>
31
- </body>
32
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lang/the-events-calendar-da_DK.mo CHANGED
Binary file
lang/the-events-calendar-de_CH.mo CHANGED
Binary file
lang/the-events-calendar-de_DE.mo CHANGED
Binary file
lang/the-events-calendar-en_AU.mo CHANGED
Binary file
lang/the-events-calendar-en_CA.mo CHANGED
Binary file
lang/the-events-calendar-en_GB.mo CHANGED
Binary file
lang/the-events-calendar-en_NZ.mo CHANGED
Binary file
lang/the-events-calendar-en_ZA.mo CHANGED
Binary file
lang/the-events-calendar-es_ES.mo CHANGED
Binary file
lang/the-events-calendar-es_MX.mo CHANGED
Binary file
lang/the-events-calendar-es_VE.mo CHANGED
Binary file
lang/the-events-calendar-fi.mo CHANGED
Binary file
lang/the-events-calendar-fr_FR.mo CHANGED
Binary file
lang/the-events-calendar-gl_ES.mo CHANGED
Binary file
lang/the-events-calendar-hu_HU.mo CHANGED
Binary file
lang/the-events-calendar-it_IT.mo CHANGED
Binary file
lang/the-events-calendar-ja.mo CHANGED
Binary file
lang/the-events-calendar-nb_NO.mo CHANGED
Binary file
lang/the-events-calendar-nl_NL.mo CHANGED
Binary file
lang/the-events-calendar-nn_NO.mo CHANGED
Binary file
lang/the-events-calendar-pt_BR.mo CHANGED
Binary file
lang/the-events-calendar-pt_PT.mo CHANGED
Binary file
lang/the-events-calendar-ro_RO.mo CHANGED
Binary file
lang/the-events-calendar-ru_RU.mo CHANGED
Binary file
lang/the-events-calendar-sl_SI.mo CHANGED
Binary file
lang/the-events-calendar-sq.mo CHANGED
Binary file
lang/the-events-calendar-sv_SE.mo CHANGED
Binary file
lang/the-events-calendar-tr_TR.mo CHANGED
Binary file
lang/the-events-calendar-uk.mo CHANGED
Binary file
lang/the-events-calendar-zh_CN.mo CHANGED
Binary file
lang/the-events-calendar.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the The Events Calendar package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: The Events Calendar 5.1.3\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/the-events-"
7
  "calendar\n"
8
- "POT-Creation-Date: 2020-06-22 04:15:20+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "PO-Revision-Date: 2020-06-22 04:15\n"
13
  "Last-Translator: \n"
14
  "Language-Team: \n"
15
 
@@ -47,7 +47,7 @@ msgstr ""
47
  msgid "%s"
48
  msgstr ""
49
 
50
- #: src/Tribe/Admin/Bar/Default_Configurator.php:45 src/Tribe/Main.php:4166
51
  #: src/admin-views/tribe-options-upgrade.php:20
52
  msgid "View Calendar"
53
  msgstr ""
@@ -57,8 +57,8 @@ msgid "Add %s"
57
  msgstr ""
58
 
59
  #: src/Tribe/Admin/Bar/Default_Configurator.php:62
60
- #: src/Tribe/Linked_Posts/Chooser_Meta_Box.php:211 src/Tribe/Main.php:2037
61
- #: src/Tribe/Main.php:5262 src/Tribe/Main.php:5309 src/Tribe/Organizer.php:93
62
  #: src/Tribe/Venue.php:112
63
  msgid "Edit %s"
64
  msgstr ""
@@ -69,7 +69,7 @@ msgstr ""
69
  msgid "Import"
70
  msgstr ""
71
 
72
- #: src/Tribe/Admin/Bar/Default_Configurator.php:89 src/Tribe/Main.php:4214
73
  msgid "Settings"
74
  msgstr ""
75
 
@@ -77,43 +77,56 @@ msgstr ""
77
  msgid "Help"
78
  msgstr ""
79
 
80
- #: src/Tribe/Admin/Notice/Marketing.php:74
81
  msgctxt "2018 user survey"
82
  msgid "take the survey now"
83
  msgstr ""
84
 
85
- #: src/Tribe/Admin/Notice/Marketing.php:78
86
  msgctxt "2018 user survey"
87
  msgid ""
88
  "<strong>The Events Calendar Annual Survey:</strong> share your feedback with "
89
  "our team—%1$s!"
90
  msgstr ""
91
 
92
- #: src/Tribe/Admin/Notice/Marketing.php:91
93
  msgid "<strong>The Events Calendar & Gutenberg</strong>"
94
  msgstr ""
95
 
96
- #: src/Tribe/Admin/Notice/Marketing.php:95
97
  msgid ""
98
  "WordPress 5.0 is coming soon, and with it, the arrival of the new block "
99
  "editor interface."
100
  msgstr ""
101
 
102
- #: src/Tribe/Admin/Notice/Marketing.php:100
103
  msgid ""
104
  "Get up to speed with our comprehensive Guide to Gutenberg ebook, then see "
105
  "how events and tickets will behave in the block editor by installing our "
106
  "free Events Gutenberg extension."
107
  msgstr ""
108
 
109
- #: src/Tribe/Admin/Notice/Marketing.php:106
110
  msgid "Download the eBook"
111
  msgstr ""
112
 
113
- #: src/Tribe/Admin/Notice/Marketing.php:114
114
  msgid "Try Events Gutenberg"
115
  msgstr ""
116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
117
  #: src/Tribe/Admin/Notice/Timezones.php:149
118
  #: src/Tribe/Editor/Compatibility.php:131 src/Tribe/Google/Maps_API_Key.php:77
119
  msgid "Read more"
@@ -154,7 +167,7 @@ msgid ""
154
  "refresh and try again."
155
  msgstr ""
156
 
157
- #: src/Tribe/Admin_List.php:246 src/Tribe/Main.php:2056
158
  msgid "%s Categories"
159
  msgstr ""
160
 
@@ -176,7 +189,7 @@ msgid "All %s"
176
  msgstr ""
177
 
178
  #: src/Tribe/Aggregator/API/Origins.php:36
179
- #: src/Tribe/Aggregator/Admin_Bar.php:97 src/Tribe/Aggregator/Service.php:849
180
  msgid "CSV File"
181
  msgstr ""
182
 
@@ -273,7 +286,7 @@ msgid ""
273
  "The image associated with your event could not be attached to the event."
274
  msgstr ""
275
 
276
- #: src/Tribe/Aggregator/Errors.php:46 src/Tribe/Aggregator/Service.php:713
277
  msgid ""
278
  "The daily limit of %d import requests to the Event Aggregator service has "
279
  "been reached. Please try again later."
@@ -545,15 +558,15 @@ msgstr ""
545
  msgid "Events Import"
546
  msgstr ""
547
 
548
- #: src/Tribe/Aggregator/Page.php:412
549
  msgid "Facebook Events"
550
  msgstr ""
551
 
552
- #: src/Tribe/Aggregator/Page.php:416
553
  msgid "iCal Importer"
554
  msgstr ""
555
 
556
- #: src/Tribe/Aggregator/Page.php:425
557
  msgid ""
558
  "It looks like you are using our legacy plugin, %1$s, along with our new "
559
  "Event Aggregator service. Event Aggregator includes all the features of the "
@@ -567,7 +580,7 @@ msgid_plural ""
567
  msgstr[0] ""
568
  msgstr[1] ""
569
 
570
- #: src/Tribe/Aggregator/Page.php:438
571
  msgid "Manage Active Plugins"
572
  msgstr ""
573
 
@@ -649,17 +662,17 @@ msgid ""
649
  "the import halting."
650
  msgstr ""
651
 
652
- #: src/Tribe/Aggregator/Record/CSV.php:75
653
  #: src/admin-views/aggregator/settings.php:606
654
  #: src/deprecated/Tribe__Events__Importer__Admin_Page.php:239
655
  msgid "CSV"
656
  msgstr ""
657
 
658
- #: src/Tribe/Aggregator/Record/CSV.php:116
659
  msgid "Unknown Column "
660
  msgstr ""
661
 
662
- #: src/Tribe/Aggregator/Record/CSV.php:225
663
  #: src/deprecated/Tribe__Events__Importer__Admin_Page.php:358
664
  msgid "The following fields are required for a successful import:"
665
  msgstr ""
@@ -1029,27 +1042,27 @@ msgid ""
1029
  "be understood. Please try again."
1030
  msgstr ""
1031
 
1032
- #: src/Tribe/Aggregator/Service.php:685
1033
  msgid "the UID part of the iCalendar Specification"
1034
  msgstr ""
1035
 
1036
- #: src/Tribe/Aggregator/Service.php:690
1037
  msgid "read more about Facebook restrictions in our knowledgebase"
1038
  msgstr ""
1039
 
1040
- #: src/Tribe/Aggregator/Service.php:695
1041
  msgid "https://m.tri.be/1afb"
1042
  msgstr ""
1043
 
1044
- #: src/Tribe/Aggregator/Service.php:700
1045
  msgid "Sorry, but something went wrong. Please try again."
1046
  msgstr ""
1047
 
1048
- #: src/Tribe/Aggregator/Service.php:701
1049
  msgid "Events could not be imported. The import parameters were invalid."
1050
  msgstr ""
1051
 
1052
- #: src/Tribe/Aggregator/Service.php:702
1053
  msgid ""
1054
  "Events cannot be imported because Eventbrite has returned an error. This "
1055
  "could mean that the event ID does not exist, the event or source is marked "
@@ -1059,98 +1072,98 @@ msgid ""
1059
  "in our knowledgebase</a>."
1060
  msgstr ""
1061
 
1062
- #: src/Tribe/Aggregator/Service.php:703
1063
  msgid "No upcoming Eventbrite events found."
1064
  msgstr ""
1065
 
1066
- #: src/Tribe/Aggregator/Service.php:704
1067
  msgid "The URL provided could not be reached."
1068
  msgstr ""
1069
 
1070
- #: src/Tribe/Aggregator/Service.php:705
1071
  msgid "The URL provided failed to load."
1072
  msgstr ""
1073
 
1074
- #: src/Tribe/Aggregator/Service.php:706
1075
  msgid "The image associated with your event could not be imported."
1076
  msgstr ""
1077
 
1078
- #: src/Tribe/Aggregator/Service.php:707
1079
  msgid ""
1080
  "The image associated with your event is not accessible with your API key."
1081
  msgstr ""
1082
 
1083
- #: src/Tribe/Aggregator/Service.php:708
1084
  msgid ""
1085
  "The import failed for an unknown reason. Please try again. If the problem "
1086
  "persists, please contact support."
1087
  msgstr ""
1088
 
1089
- #: src/Tribe/Aggregator/Service.php:709
1090
  msgid ""
1091
  "Events could not be imported. The URL provided did not have events in the "
1092
  "proper format."
1093
  msgstr ""
1094
 
1095
- #: src/Tribe/Aggregator/Service.php:710
1096
  msgid ""
1097
  "The file provided could not be opened. Please confirm that it is a properly "
1098
  "formatted .ics file."
1099
  msgstr ""
1100
 
1101
- #: src/Tribe/Aggregator/Service.php:711
1102
  msgid "Your Meetup API key is invalid."
1103
  msgstr ""
1104
 
1105
- #: src/Tribe/Aggregator/Service.php:712
1106
  msgid ""
1107
  "Event Aggregator cannot reach Meetup.com because you exceeded the request "
1108
  "limit for your Meetup API key."
1109
  msgstr ""
1110
 
1111
- #: src/Tribe/Aggregator/Service.php:715
1112
  msgid "The import is in progress."
1113
  msgstr ""
1114
 
1115
- #: src/Tribe/Aggregator/Service.php:717
1116
  msgid "The import will be starting soon."
1117
  msgstr ""
1118
 
1119
- #: src/Tribe/Aggregator/Service.php:719
1120
  msgid "Success"
1121
  msgstr ""
1122
 
1123
- #: src/Tribe/Aggregator/Service.php:720
1124
  msgid "Import created"
1125
  msgstr ""
1126
 
1127
- #: src/Tribe/Aggregator/Service.php:721
1128
  msgid "Successfully fetched Eventbrite Token"
1129
  msgstr ""
1130
 
1131
- #: src/Tribe/Aggregator/Service.php:722
1132
  msgid "Successfully loaded import origins"
1133
  msgstr ""
1134
 
1135
- #: src/Tribe/Aggregator/Service.php:723
1136
  msgid "Import is complete"
1137
  msgstr ""
1138
 
1139
- #: src/Tribe/Aggregator/Service.php:724
1140
  msgid "Import queued"
1141
  msgstr ""
1142
 
1143
- #: src/Tribe/Aggregator/Service.php:725
1144
  msgid "Events could not be imported. The URL provided could not be reached."
1145
  msgstr ""
1146
 
1147
- #: src/Tribe/Aggregator/Service.php:726
1148
  msgid ""
1149
  "The requested source does not have any upcoming and published events "
1150
  "matching the search criteria."
1151
  msgstr ""
1152
 
1153
- #: src/Tribe/Aggregator/Service.php:728
1154
  msgctxt ""
1155
  "The placeholder is for the localized version of the iCal UID specification "
1156
  "link"
@@ -1162,7 +1175,7 @@ msgid ""
1162
  "help them more quickly resolve their feed's UID issue."
1163
  msgstr ""
1164
 
1165
- #: src/Tribe/Aggregator/Service.php:737
1166
  msgctxt ""
1167
  "The placeholder is for the localized version of the iCal UID specification "
1168
  "link"
@@ -1174,33 +1187,33 @@ msgid ""
1174
  "help them more quickly resolve their feed's UID issue."
1175
  msgstr ""
1176
 
1177
- #: src/Tribe/Aggregator/Service.php:743
1178
  msgid "Successfully fetched Facebook Token"
1179
  msgstr ""
1180
 
1181
- #: src/Tribe/Aggregator/Service.php:744
1182
  msgid "Successfully connected to Eventbrite"
1183
  msgstr ""
1184
 
1185
- #: src/Tribe/Aggregator/Service.php:745
1186
  msgid "Successfully disconnected Eventbrite"
1187
  msgstr ""
1188
 
1189
- #: src/Tribe/Aggregator/Service.php:746
1190
  msgid "Successfully marked event for import from Eventbrite"
1191
  msgstr ""
1192
 
1193
- #: src/Tribe/Aggregator/Service.php:747
1194
  msgid "Successfully synced event to Eventbrite"
1195
  msgstr ""
1196
 
1197
- #: src/Tribe/Aggregator/Service.php:748
1198
  msgid ""
1199
  "The import being fetched is not queued up for importing. Please try the "
1200
  "import again."
1201
  msgstr ""
1202
 
1203
- #: src/Tribe/Aggregator/Service.php:750
1204
  msgctxt "Placeholder used for the facebook restriction link"
1205
  msgid ""
1206
  "Events cannot be imported because Facebook has returned an error. This could "
@@ -1209,76 +1222,76 @@ msgid ""
1209
  "You can %1$s."
1210
  msgstr ""
1211
 
1212
- #: src/Tribe/Aggregator/Service.php:757
1213
  msgid "Events cannot be imported because we received an error from Facebook: "
1214
  msgstr ""
1215
 
1216
- #: src/Tribe/Aggregator/Service.php:758
1217
  msgid ""
1218
  "Events cannot be imported because we received an error from Eventbrite: "
1219
  msgstr ""
1220
 
1221
- #: src/Tribe/Aggregator/Service.php:759
1222
  msgid ""
1223
  "Event cannot be synced to Eventbrite because we received an error from "
1224
  "Eventbrite."
1225
  msgstr ""
1226
 
1227
- #: src/Tribe/Aggregator/Service.php:760
1228
  msgid "Eventbrite token is not valid."
1229
  msgstr ""
1230
 
1231
- #: src/Tribe/Aggregator/Service.php:761 src/Tribe/Aggregator/Service.php:764
1232
  msgid "Eventbrite parsed object is empty."
1233
  msgstr ""
1234
 
1235
- #: src/Tribe/Aggregator/Service.php:762
1236
  msgid "Eventbrite parsed object type is empty."
1237
  msgstr ""
1238
 
1239
- #: src/Tribe/Aggregator/Service.php:763
1240
  msgid "Eventbrite parsed object ID is empty."
1241
  msgstr ""
1242
 
1243
- #: src/Tribe/Aggregator/Service.php:765
1244
  msgid "Eventbrite event not found."
1245
  msgstr ""
1246
 
1247
- #: src/Tribe/Aggregator/Service.php:766
1248
  msgid "Eventbrite organizer not found."
1249
  msgstr ""
1250
 
1251
- #: src/Tribe/Aggregator/Service.php:767
1252
  msgid "Eventbrite venue not found."
1253
  msgstr ""
1254
 
1255
- #: src/Tribe/Aggregator/Service.php:768
1256
  msgid "Eventbrite user not found."
1257
  msgstr ""
1258
 
1259
- #: src/Tribe/Aggregator/Service.php:769
1260
  msgid "Eventbrite sync data invalid."
1261
  msgstr ""
1262
 
1263
- #: src/Tribe/Aggregator/Service.php:770
1264
  msgid ""
1265
  "You do not have an active connection to Eventbrite through your account and "
1266
  "Event Aggregator."
1267
  msgstr ""
1268
 
1269
- #: src/Tribe/Aggregator/Service.php:771
1270
  msgid "Webhook not registered properly."
1271
  msgstr ""
1272
 
1273
- #: src/Tribe/Aggregator/Service.php:772
1274
  msgid "This webhook action is not currently supported."
1275
  msgstr ""
1276
 
1277
- #: src/Tribe/Aggregator/Service.php:773
1278
  msgid "Event not owned, you cannot edit it."
1279
  msgstr ""
1280
 
1281
- #: src/Tribe/Aggregator/Service.php:775
1282
  msgctxt "Placeholder used for the meetup API changes"
1283
  msgid ""
1284
  "Meetup is no longer supporting API keys, and will restrict access using your "
@@ -1287,7 +1300,7 @@ msgid ""
1287
  "%1$s"
1288
  msgstr ""
1289
 
1290
- #: src/Tribe/Aggregator/Service.php:783
1291
  msgctxt ""
1292
  "Placeholder used for the meetup API changes link when the KEY is plain"
1293
  msgid ""
@@ -1297,13 +1310,13 @@ msgid ""
1297
  "%1$s."
1298
  msgstr ""
1299
 
1300
- #: src/Tribe/Aggregator/Service.php:790
1301
  msgid ""
1302
  "You do not have an active connection to Meetup through your account and "
1303
  "Event Aggregator."
1304
  msgstr ""
1305
 
1306
- #: src/Tribe/Aggregator/Service.php:807
1307
  msgid "Unknown service message"
1308
  msgstr ""
1309
 
@@ -1472,129 +1485,136 @@ msgid_plural "%1$d new images were imported."
1472
  msgstr[0] ""
1473
  msgstr[1] ""
1474
 
1475
- #: src/Tribe/Aggregator/Tabs/New.php:289
 
 
 
 
 
 
 
1476
  msgid "No %1$s were imported or updated."
1477
  msgstr ""
1478
 
1479
- #: src/Tribe/Aggregator/Tabs/New.php:297
1480
  msgid "View all %s"
1481
  msgstr ""
1482
 
1483
- #: src/Tribe/Aggregator/Tabs/New.php:307
1484
  msgid "%1$d new venue was imported."
1485
  msgid_plural "%1$d new venues were imported."
1486
  msgstr[0] ""
1487
  msgstr[1] ""
1488
 
1489
- #: src/Tribe/Aggregator/Tabs/New.php:311
1490
  msgid "View your event venues"
1491
  msgstr ""
1492
 
1493
- #: src/Tribe/Aggregator/Tabs/New.php:319
1494
  msgid "%1$d new organizer was imported."
1495
  msgid_plural "%1$d new organizers were imported."
1496
  msgstr[0] ""
1497
  msgstr[1] ""
1498
 
1499
- #: src/Tribe/Aggregator/Tabs/New.php:323
1500
  msgid "View your event organizers"
1501
  msgstr ""
1502
 
1503
- #: src/Tribe/Aggregator/Tabs/New.php:332
1504
  msgid "%1$d new event category was created."
1505
  msgid_plural "%1$d new event categories were created."
1506
  msgstr[0] ""
1507
  msgstr[1] ""
1508
 
1509
- #: src/Tribe/Aggregator/Tabs/New.php:336
1510
  msgid "View your event categories"
1511
  msgstr ""
1512
 
1513
- #: src/Tribe/Aggregator/Tabs/New.php:344
1514
  msgid "%1$d new event tag was created."
1515
  msgid_plural "%1$d new event tags were created."
1516
  msgstr[0] ""
1517
  msgstr[1] ""
1518
 
1519
- #: src/Tribe/Aggregator/Tabs/New.php:348
1520
  msgid "View your event tags"
1521
  msgstr ""
1522
 
1523
- #: src/Tribe/Aggregator/Tabs/New.php:359
1524
  msgid "Import complete!"
1525
  msgstr ""
1526
 
1527
- #: src/Tribe/Aggregator/Tabs/New.php:361
1528
  msgid "Your scheduled import was saved and the first import is complete!"
1529
  msgstr ""
1530
 
1531
- #: src/Tribe/Aggregator/Tabs/New.php:365
1532
  msgctxt "separator between date and time"
1533
  msgid " at "
1534
  msgstr ""
1535
 
1536
- #: src/Tribe/Aggregator/Tabs/New.php:372
1537
  msgid "The next import is scheduled for %1$s."
1538
  msgstr ""
1539
 
1540
- #: src/Tribe/Aggregator/Tabs/New.php:376
1541
  msgid "View your scheduled imports."
1542
  msgstr ""
1543
 
1544
- #: src/Tribe/Aggregator/Tabs/New.php:388
1545
  msgid "Invalid credential save request"
1546
  msgstr ""
1547
 
1548
- #: src/Tribe/Aggregator/Tabs/New.php:398
1549
  msgid "Invalid credential save nonce"
1550
  msgstr ""
1551
 
1552
- #: src/Tribe/Aggregator/Tabs/New.php:407
1553
  msgid "The Meetup API key is required."
1554
  msgstr ""
1555
 
1556
- #: src/Tribe/Aggregator/Tabs/New.php:416
1557
  msgid "Credentials have been saved"
1558
  msgstr ""
1559
 
1560
- #: src/Tribe/Aggregator/Tabs/New.php:423
1561
  msgid "Unable to save credentials"
1562
  msgstr ""
1563
 
1564
- #: src/Tribe/Aggregator/Tabs/New.php:510
1565
  msgid "Import Using Event Aggregator"
1566
  msgstr ""
1567
 
1568
- #: src/Tribe/Aggregator/Tabs/New.php:512
1569
  msgid ""
1570
  "With Event Aggregator, you can import events from iCalendar, Google, and "
1571
  "Meetup.com in a jiffy."
1572
  msgstr ""
1573
 
1574
- #: src/Tribe/Aggregator/Tabs/New.php:515
1575
  msgid "Buy It Now"
1576
  msgstr ""
1577
 
1578
- #: src/Tribe/Aggregator/Tabs/New.php:517 src/Tribe/Aggregator/Tabs/New.php:524
1579
  #: src/admin-views/aggregator/banners/eventbrite-upsell.php:19
1580
  msgid "opens in a new window"
1581
  msgstr ""
1582
 
1583
- #: src/Tribe/Aggregator/Tabs/New.php:522
1584
  msgid "Learn More"
1585
  msgstr ""
1586
 
1587
- #: src/Tribe/Aggregator/Tabs/New.php:570
1588
  msgid "Your Event Aggregator license is expired."
1589
  msgstr ""
1590
 
1591
- #: src/Tribe/Aggregator/Tabs/New.php:571
1592
  msgid ""
1593
  "Renew your license in order to import events from iCalendar, Google, or "
1594
  "Meetup."
1595
  msgstr ""
1596
 
1597
- #: src/Tribe/Aggregator/Tabs/New.php:574
1598
  msgid "Renew your Event Aggregator license"
1599
  msgstr ""
1600
 
@@ -2042,10 +2062,10 @@ msgid "Event Organizers"
2042
  msgstr ""
2043
 
2044
  #: src/Tribe/Editor/Template.php:70 src/Tribe/Template/Embed.php:59
2045
- #: src/Tribe/Template/Single_Event.php:119
2046
- #: src/Tribe/Views/V2/Template_Bootstrap.php:135
2047
- #: src/Tribe/Views/V2/Template_Bootstrap.php:175
2048
- #: src/Tribe/Views/V2/Template_Bootstrap.php:429
2049
  msgid "This %s has passed."
2050
  msgstr ""
2051
 
@@ -2644,202 +2664,202 @@ msgstr ""
2644
  msgid "Upcoming Events"
2645
  msgstr ""
2646
 
2647
- #. #-#-#-#-# the-events-calendar.pot (The Events Calendar 5.1.3) #-#-#-#-#
2648
  #. Plugin Name of the plugin/theme
2649
- #: src/Tribe/Main.php:937 src/Tribe/Main.php:1392 src/Tribe/Privacy.php:29
2650
  #: src/functions/template-tags/general.php:1373 the-events-calendar.php:57
2651
  msgid "The Events Calendar"
2652
  msgstr ""
2653
 
2654
- #: src/Tribe/Main.php:944
2655
  msgid "month"
2656
  msgstr ""
2657
 
2658
- #: src/Tribe/Main.php:945
2659
  msgid "list"
2660
  msgstr ""
2661
 
2662
- #: src/Tribe/Main.php:946
2663
  msgid "upcoming"
2664
  msgstr ""
2665
 
2666
- #: src/Tribe/Main.php:947
2667
  msgid "past"
2668
  msgstr ""
2669
 
2670
- #: src/Tribe/Main.php:948
2671
  msgid "day"
2672
  msgstr ""
2673
 
2674
- #: src/Tribe/Main.php:949
2675
  msgid "today"
2676
  msgstr ""
2677
 
2678
- #: src/Tribe/Main.php:950
2679
  msgctxt "featured events slug"
2680
  msgid "featured"
2681
  msgstr ""
2682
 
2683
- #: src/Tribe/Main.php:951
2684
  msgctxt "all events slug"
2685
  msgid "all"
2686
  msgstr ""
2687
 
2688
- #: src/Tribe/Main.php:975
2689
  msgid "Initializing Tribe Events on %s"
2690
  msgstr ""
2691
 
2692
- #: src/Tribe/Main.php:1033 src/Tribe/Main.php:1035
2693
  msgid "Welcome to The Events Calendar!"
2694
  msgstr ""
2695
 
2696
- #: src/Tribe/Main.php:1181
2697
  msgid ""
2698
  "The %3$s \"%1$s\" uses the \"/%2$s\" slug: the Events Calendar plugin will "
2699
  "show its calendar in place of the page."
2700
  msgstr ""
2701
 
2702
- #: src/Tribe/Main.php:1184
2703
  msgid "Ask the site administrator to edit the %s slug"
2704
  msgstr ""
2705
 
2706
- #: src/Tribe/Main.php:1186
2707
  msgid "Edit the %s slug"
2708
  msgstr ""
2709
 
2710
- #: src/Tribe/Main.php:1190
2711
  msgid " ask the site administrator to set a different Events URL slug."
2712
  msgstr ""
2713
 
2714
- #: src/Tribe/Main.php:1195
2715
  msgid "edit Events settings."
2716
  msgstr ""
2717
 
2718
- #: src/Tribe/Main.php:1198
2719
  msgid "%1$s or %2$s"
2720
  msgstr ""
2721
 
2722
- #: src/Tribe/Main.php:1267
2723
  msgid "Upgrade your calendar views"
2724
  msgstr ""
2725
 
2726
- #: src/Tribe/Main.php:1303
2727
  msgid "Upgrade"
2728
  msgstr ""
2729
 
2730
- #: src/Tribe/Main.php:1352 src/admin-views/admin-welcome-message.php:19
2731
  msgid "New User Primer"
2732
  msgstr ""
2733
 
2734
- #: src/Tribe/Main.php:1354
2735
  msgid ""
2736
  "We are committed to helping make your calendar spectacular and have a wealth "
2737
  "of resources available, including a handy %s to get your calendar up and "
2738
  "running."
2739
  msgstr ""
2740
 
2741
- #: src/Tribe/Main.php:1365
2742
  msgid "Support for The Events Calendar"
2743
  msgstr ""
2744
 
2745
- #: src/Tribe/Main.php:1368
2746
  msgid ""
2747
  "%s: A thorough walkthrough of The Events Calendar and the settings that are "
2748
  "available to you."
2749
  msgstr ""
2750
 
2751
- #: src/Tribe/Main.php:1368
2752
  msgid "Settings overview"
2753
  msgstr ""
2754
 
2755
- #: src/Tribe/Main.php:1370
2756
  msgid ""
2757
  "%s: A complete look at the features you can expect to see right out of the "
2758
  "box as well as how to use them."
2759
  msgstr ""
2760
 
2761
- #: src/Tribe/Main.php:1370
2762
  msgid "Features overview"
2763
  msgstr ""
2764
 
2765
- #: src/Tribe/Main.php:1372
2766
  msgid ""
2767
  "%s: Our most comprehensive outline for customizing the calendar to suit your "
2768
  "needs, including custom layouts and styles."
2769
  msgstr ""
2770
 
2771
- #: src/Tribe/Main.php:1372 src/admin-views/admin-welcome-message.php:21
2772
  msgid "Themer's Guide"
2773
  msgstr ""
2774
 
2775
- #: src/Tribe/Main.php:1374
2776
  msgid ""
2777
  "%s: An overview of the default templates and styles that are included in the "
2778
  "plugin, as well as how to change them."
2779
  msgstr ""
2780
 
2781
- #: src/Tribe/Main.php:1374
2782
  msgid "Using stylesheets and page templates"
2783
  msgstr ""
2784
 
2785
- #: src/Tribe/Main.php:1376
2786
  msgid ""
2787
  "%s: Do you see an issue with your calendar? Go here first to find where it’s "
2788
  "coming from and how to fix it."
2789
  msgstr ""
2790
 
2791
- #: src/Tribe/Main.php:1376
2792
  msgid "Troubleshooting common problems"
2793
  msgstr ""
2794
 
2795
- #: src/Tribe/Main.php:1378
2796
  msgid ""
2797
  "%s: Code and guides for customizing your calendar in useful and interesting "
2798
  "ways."
2799
  msgstr ""
2800
 
2801
- #: src/Tribe/Main.php:1378
2802
  msgid "Customizing the Events plugins"
2803
  msgstr ""
2804
 
2805
- #: src/Tribe/Main.php:1393
2806
  msgid "Events Tickets"
2807
  msgstr ""
2808
 
2809
- #: src/Tribe/Main.php:1394
2810
  msgid ""
2811
  "If you have tried the above steps and are still having trouble, you can post "
2812
  "a new thread to our WordPress.org forums for %1$s or %2$s. Our support staff "
2813
  "monitors these forums once a week and would be happy to assist you there. "
2814
  msgstr ""
2815
 
2816
- #: src/Tribe/Main.php:1396 src/Tribe/Main.php:1404
2817
  msgid "premium support on our website"
2818
  msgstr ""
2819
 
2820
- #: src/Tribe/Main.php:1397
2821
  msgid ""
2822
  "<strong>Looking for more immediate support?</strong> We offer %s with the "
2823
  "purchase of any of our premium plugins. Pick up a license and you can post "
2824
  "there directly and expect a response within 24-48 hours during weekdays"
2825
  msgstr ""
2826
 
2827
- #: src/Tribe/Main.php:1401
2828
  msgid "open-source forum on WordPress.org"
2829
  msgstr ""
2830
 
2831
- #: src/Tribe/Main.php:1402
2832
  msgid ""
2833
  "If you have tried the above steps and are still having trouble, you can post "
2834
  "a new thread to our %s. Our support staff monitors these forums once a week "
2835
  "and would be happy to assist you there."
2836
  msgstr ""
2837
 
2838
- #: src/Tribe/Main.php:1405
2839
  msgid "Events Calendar PRO"
2840
  msgstr ""
2841
 
2842
- #: src/Tribe/Main.php:1406
2843
  msgid ""
2844
  "<strong>Looking for more immediate support?</strong> We offer %1$s with the "
2845
  "purchase of any of our premium plugins (like %2$s). Pick up a license and "
@@ -2847,427 +2867,427 @@ msgid ""
2847
  "weekdays."
2848
  msgstr ""
2849
 
2850
- #: src/Tribe/Main.php:1410
2851
  msgid "post a thread"
2852
  msgstr ""
2853
 
2854
- #: src/Tribe/Main.php:1411
2855
  msgid ""
2856
  "If you have a valid license for one of our paid plugins, you can %s in our "
2857
  "premium support forums. Our support team monitors the forums and will "
2858
  "respond to your thread within 24-48 hours (during the week)."
2859
  msgstr ""
2860
 
2861
- #: src/Tribe/Main.php:1454
2862
  #: src/deprecated/Tribe__Events__Importer__Admin_Page.php:207
2863
  #: src/functions/template-tags/general.php:95
2864
  msgid "Events"
2865
  msgstr ""
2866
 
2867
- #: src/Tribe/Main.php:1462 src/admin-views/aggregator/tabs/import-form.php:227
2868
  #: src/admin-views/aggregator/tabs/import-form.php:239
2869
  #: src/functions/template-tags/general.php:63
2870
  msgid "Event"
2871
  msgstr ""
2872
 
2873
- #: src/Tribe/Main.php:1679
2874
  msgid ""
2875
  "Sorry, The Events Calendar requires WordPress %s or higher. Please upgrade "
2876
  "your WordPress install."
2877
  msgstr ""
2878
 
2879
- #: src/Tribe/Main.php:1682
2880
  msgid ""
2881
  "Sorry, The Events Calendar requires PHP %s or higher. Talk to your Web host "
2882
  "about moving you to a newer version of PHP."
2883
  msgstr ""
2884
 
2885
- #: src/Tribe/Main.php:1714
2886
  msgid ""
2887
  "To continue using The Events Calendar, please install the latest version of"
2888
  msgstr ""
2889
 
2890
- #: src/Tribe/Main.php:1716 src/Tribe/Main.php:1717
2891
  msgid "Event Tickets"
2892
  msgstr ""
2893
 
2894
- #: src/Tribe/Main.php:1752
2895
  msgid ""
2896
  "It appears as if the tribe-common libraries cannot be found! The directory "
2897
  "should be in the \"common/\" directory in the events calendar plugin."
2898
  msgstr ""
2899
 
2900
- #: src/Tribe/Main.php:1988 src/Tribe/Main.php:2447
2901
  msgid "category"
2902
  msgstr ""
2903
 
2904
- #: src/Tribe/Main.php:2002 src/Tribe/Main.php:2446
2905
  msgid "tag"
2906
  msgstr ""
2907
 
2908
- #: src/Tribe/Main.php:2035 src/Tribe/Organizer.php:91 src/Tribe/Venue.php:110
2909
  msgid "Add New"
2910
  msgstr ""
2911
 
2912
- #: src/Tribe/Main.php:2036 src/Tribe/Main.php:2173 src/Tribe/Main.php:2174
2913
  #: src/Tribe/Organizer.php:92 src/Tribe/Venue.php:111
2914
  msgid "Add New %s"
2915
  msgstr ""
2916
 
2917
- #: src/Tribe/Main.php:2038 src/Tribe/Organizer.php:94 src/Tribe/Venue.php:113
2918
  msgid "New %s"
2919
  msgstr ""
2920
 
2921
- #: src/Tribe/Main.php:2039 src/Tribe/Organizer.php:95 src/Tribe/Venue.php:114
2922
  #: src/views/month/single-day.php:26
2923
  msgid "View %s"
2924
  msgstr ""
2925
 
2926
- #: src/Tribe/Main.php:2040 src/Tribe/Organizer.php:96 src/Tribe/Venue.php:115
2927
  msgid "Search %s"
2928
  msgstr ""
2929
 
2930
- #: src/Tribe/Main.php:2041 src/Tribe/Organizer.php:97 src/Tribe/Venue.php:116
2931
  msgid "No %s found"
2932
  msgstr ""
2933
 
2934
- #: src/Tribe/Main.php:2042 src/Tribe/Organizer.php:98 src/Tribe/Venue.php:117
2935
  msgid "No %s found in Trash"
2936
  msgstr ""
2937
 
2938
- #: src/Tribe/Main.php:2043 src/Tribe/Main.php:2130 src/Tribe/Main.php:2150
2939
  #: src/Tribe/Organizer.php:99 src/Tribe/Venue.php:118
2940
  msgid "%s published."
2941
  msgstr ""
2942
 
2943
- #: src/Tribe/Main.php:2044 src/Tribe/Organizer.php:100 src/Tribe/Venue.php:119
2944
  msgid "%s published privately."
2945
  msgstr ""
2946
 
2947
- #: src/Tribe/Main.php:2045 src/Tribe/Organizer.php:101 src/Tribe/Venue.php:120
2948
  msgid "%s reverted to draft."
2949
  msgstr ""
2950
 
2951
- #: src/Tribe/Main.php:2046 src/Tribe/Organizer.php:102 src/Tribe/Venue.php:121
2952
  msgid "%s scheduled."
2953
  msgstr ""
2954
 
2955
- #: src/Tribe/Main.php:2047 src/Tribe/Main.php:2089 src/Tribe/Main.php:2124
2956
- #: src/Tribe/Main.php:2127 src/Tribe/Main.php:2144 src/Tribe/Main.php:2147
2957
  #: src/Tribe/Organizer.php:103 src/Tribe/Venue.php:122
2958
  msgid "%s updated."
2959
  msgstr ""
2960
 
2961
- #: src/Tribe/Main.php:2057
2962
  msgid "%s Category"
2963
  msgstr ""
2964
 
2965
- #: src/Tribe/Main.php:2058
2966
  msgid "Search %s Categories"
2967
  msgstr ""
2968
 
2969
- #: src/Tribe/Main.php:2059
2970
  msgid "All %s Categories"
2971
  msgstr ""
2972
 
2973
- #: src/Tribe/Main.php:2060
2974
  msgid "Parent %s Category"
2975
  msgstr ""
2976
 
2977
- #: src/Tribe/Main.php:2061
2978
  msgid "Parent %s Category:"
2979
  msgstr ""
2980
 
2981
- #: src/Tribe/Main.php:2062
2982
  msgid "Edit %s Category"
2983
  msgstr ""
2984
 
2985
- #: src/Tribe/Main.php:2063
2986
  msgid "Update %s Category"
2987
  msgstr ""
2988
 
2989
- #: src/Tribe/Main.php:2064
2990
  msgid "Add New %s Category"
2991
  msgstr ""
2992
 
2993
- #: src/Tribe/Main.php:2065
2994
  msgid "New %s Category Name"
2995
  msgstr ""
2996
 
2997
- #: src/Tribe/Main.php:2082
2998
  msgid "%1$s updated. %2$sView %1$s%3$s"
2999
  msgstr ""
3000
 
3001
- #: src/Tribe/Main.php:2087 src/Tribe/Main.php:2125 src/Tribe/Main.php:2145
3002
  msgid "Custom field updated."
3003
  msgstr ""
3004
 
3005
- #: src/Tribe/Main.php:2088 src/Tribe/Main.php:2126 src/Tribe/Main.php:2146
3006
  msgid "Custom field deleted."
3007
  msgstr ""
3008
 
3009
  #. translators: %s: date and time of the revision
3010
- #: src/Tribe/Main.php:2091 src/Tribe/Main.php:2129
3011
  msgid "%1$s restored to revision from %2$s"
3012
  msgstr ""
3013
 
3014
- #: src/Tribe/Main.php:2093
3015
  msgid "%1$s published. %2$sView %3$s"
3016
  msgstr ""
3017
 
3018
- #: src/Tribe/Main.php:2098 src/Tribe/Main.php:2131 src/Tribe/Main.php:2151
3019
  msgid "%s saved."
3020
  msgstr ""
3021
 
3022
- #: src/Tribe/Main.php:2100
3023
  msgid "%1$s submitted. %2$sPreview %3$s"
3024
  msgstr ""
3025
 
3026
- #: src/Tribe/Main.php:2106
3027
  msgid "%1$s scheduled for: %2$s. %3$sPreview %4$s"
3028
  msgstr ""
3029
 
3030
  #. translators: Publish box date format, see http://php.net/date
3031
- #: src/Tribe/Main.php:2109 src/Tribe/Main.php:2137 src/Tribe/Main.php:2157
3032
  msgid "M j, Y @ G:i"
3033
  msgstr ""
3034
 
3035
- #: src/Tribe/Main.php:2115
3036
  msgid "%1$s draft updated. %2$sPreview %3$s"
3037
  msgstr ""
3038
 
3039
- #: src/Tribe/Main.php:2132 src/Tribe/Main.php:2152
3040
  msgid "%s submitted."
3041
  msgstr ""
3042
 
3043
- #: src/Tribe/Main.php:2134 src/Tribe/Main.php:2154
3044
  msgid "%1$s scheduled for: %2$s."
3045
  msgstr ""
3046
 
3047
- #: src/Tribe/Main.php:2139 src/Tribe/Main.php:2159
3048
  msgid "%s draft updated."
3049
  msgstr ""
3050
 
3051
  #. translators: %s: date and time of the revision
3052
- #: src/Tribe/Main.php:2149
3053
  msgid "%s restored to revision from %s"
3054
  msgstr ""
3055
 
3056
- #: src/Tribe/Main.php:2203
3057
  msgid ""
3058
  "Without a defined location your event will not display a %sGoogle Rich "
3059
  "Snippet%s on the search results."
3060
  msgstr ""
3061
 
3062
- #: src/Tribe/Main.php:2448
3063
  msgid "page"
3064
  msgstr ""
3065
 
3066
- #: src/Tribe/Main.php:2449 src/functions/template-tags/general.php:79
3067
  msgid "event"
3068
  msgstr ""
3069
 
3070
- #: src/Tribe/Main.php:2450 src/functions/template-tags/general.php:111
3071
  msgid "events"
3072
  msgstr ""
3073
 
3074
- #: src/Tribe/Main.php:2451
3075
  msgid "all"
3076
  msgstr ""
3077
 
3078
- #: src/Tribe/Main.php:2833
3079
  msgid " (View Full %1$s Description Here: %2$s)"
3080
  msgstr ""
3081
 
3082
- #: src/Tribe/Main.php:3612 src/Tribe/Main.php:3647
3083
  #: src/functions/template-tags/day.php:157
3084
  #: src/functions/template-tags/day.php:178
3085
  msgid "Date out of range."
3086
  msgstr ""
3087
 
3088
- #: src/Tribe/Main.php:3689
3089
  msgid "%s Options"
3090
  msgstr ""
3091
 
3092
- #: src/Tribe/Main.php:3698 src/Tribe/Main.php:3711
3093
  msgid "%s Information"
3094
  msgstr ""
3095
 
3096
- #: src/Tribe/Main.php:4040
3097
  msgid "Support"
3098
  msgstr ""
3099
 
3100
- #: src/Tribe/Main.php:4043
3101
  msgid "View All Add-Ons"
3102
  msgstr ""
3103
 
3104
- #: src/Tribe/Main.php:4063
3105
  msgid "News from Modern Tribe"
3106
  msgstr ""
3107
 
3108
- #: src/Tribe/Main.php:4108
3109
  msgid "Additional Functionality"
3110
  msgstr ""
3111
 
3112
- #: src/Tribe/Main.php:4113
3113
  msgid ""
3114
  "Looking for additional functionality including recurring events, ticket "
3115
  "sales, publicly submitted events, new views and more?"
3116
  msgstr ""
3117
 
3118
- #: src/Tribe/Main.php:4114
3119
  msgid "Check out the %savailable add-ons%s."
3120
  msgstr ""
3121
 
3122
- #: src/Tribe/Main.php:4215
3123
  msgid "Calendar"
3124
  msgstr ""
3125
 
3126
- #: src/Tribe/Main.php:4231
3127
  msgid "List"
3128
  msgstr ""
3129
 
3130
- #: src/Tribe/Main.php:4249
3131
  msgid "Month"
3132
  msgstr ""
3133
 
3134
- #: src/Tribe/Main.php:4266 src/admin-views/aggregator/fields/schedule.php:43
3135
  #: src/admin-views/aggregator/fields/schedule.php:61
3136
  msgid "Day"
3137
  msgstr ""
3138
 
3139
- #: src/Tribe/Main.php:4289
3140
  msgid "Search for %s by Keyword."
3141
  msgstr ""
3142
 
3143
- #: src/Tribe/Main.php:4292
3144
  #: src/views/v2/components/events-bar/search-button.php:25
3145
  msgid "Search"
3146
  msgstr ""
3147
 
3148
- #: src/Tribe/Main.php:4293
3149
  msgid "Keyword"
3150
  msgstr ""
3151
 
3152
- #: src/Tribe/Main.php:4310
3153
  msgid "4 digit year hyphen 2 digit month hyphen 2 digit day"
3154
  msgstr ""
3155
 
3156
- #: src/Tribe/Main.php:4311
3157
  msgid "1 digit month slash 1 digit day slash 4 digit year"
3158
  msgstr ""
3159
 
3160
- #: src/Tribe/Main.php:4312
3161
  msgid "2 digit month slash 2 digit day slash 4 digit year"
3162
  msgstr ""
3163
 
3164
- #: src/Tribe/Main.php:4313
3165
  msgid "1 digit day slash 1 digit month slash 4 digit year"
3166
  msgstr ""
3167
 
3168
- #: src/Tribe/Main.php:4314
3169
  msgid "2 digit day slash 2 digit month slash 4 digit year"
3170
  msgstr ""
3171
 
3172
- #: src/Tribe/Main.php:4315
3173
  msgid "1 digit month hyphen 1 digit day hyphen 4 digit year"
3174
  msgstr ""
3175
 
3176
- #: src/Tribe/Main.php:4316
3177
  msgid "1 digit month hyphen 2 digit day hyphen 4 digit year"
3178
  msgstr ""
3179
 
3180
- #: src/Tribe/Main.php:4317
3181
  msgid "1 digit day hyphen 1 digit month hyphen 4 digit year"
3182
  msgstr ""
3183
 
3184
- #: src/Tribe/Main.php:4318
3185
  msgid "2 digit day hyphen 2 digit month hyphen 4 digit year"
3186
  msgstr ""
3187
 
3188
- #: src/Tribe/Main.php:4319
3189
  msgid "4 digit year dot 2 digit month dot 2 digit day"
3190
  msgstr ""
3191
 
3192
- #: src/Tribe/Main.php:4320
3193
  msgid "2 digit month dot 2 digit day dot 4 digit year"
3194
  msgstr ""
3195
 
3196
- #: src/Tribe/Main.php:4321
3197
  msgid "2 digit day dot 2 digit month dot 4 digit year"
3198
  msgstr ""
3199
 
3200
- #: src/Tribe/Main.php:4325
3201
  msgid "4 digit year hyphen 2 digit month"
3202
  msgstr ""
3203
 
3204
- #: src/Tribe/Main.php:4326 src/Tribe/Main.php:4328
3205
  msgid "1 digit month slash 4 digit year"
3206
  msgstr ""
3207
 
3208
- #: src/Tribe/Main.php:4327 src/Tribe/Main.php:4329
3209
  msgid "2 digit month slash 4 digit year"
3210
  msgstr ""
3211
 
3212
- #: src/Tribe/Main.php:4330 src/Tribe/Main.php:4331 src/Tribe/Main.php:4332
3213
  msgid "1 digit month hyphen 4 digit year"
3214
  msgstr ""
3215
 
3216
- #: src/Tribe/Main.php:4333
3217
  msgid "2 digit month hyphen 4 digit year"
3218
  msgstr ""
3219
 
3220
- #: src/Tribe/Main.php:4334
3221
  msgid "4 digit year dot 2 digit month"
3222
  msgstr ""
3223
 
3224
- #: src/Tribe/Main.php:4335 src/Tribe/Main.php:4336
3225
  msgid "2 digit month dot 4 digit year"
3226
  msgstr ""
3227
 
3228
- #: src/Tribe/Main.php:4365 src/Tribe/Main.php:4402
3229
  #: src/admin-views/aggregator/origins/refine.php:7
3230
  msgid "Date"
3231
  msgstr ""
3232
 
3233
- #: src/Tribe/Main.php:4367
3234
  msgid "Search for %s by Date. Please use the format %s."
3235
  msgstr ""
3236
 
3237
- #: src/Tribe/Main.php:4380
3238
  msgid "%s In"
3239
  msgstr ""
3240
 
3241
- #: src/Tribe/Main.php:4382
3242
  msgid "Search for %s by month. Please use the format %s."
3243
  msgstr ""
3244
 
3245
- #: src/Tribe/Main.php:4385
3246
  msgid "%s From"
3247
  msgstr ""
3248
 
3249
- #: src/Tribe/Main.php:4388
3250
  msgid "Day Of"
3251
  msgstr ""
3252
 
3253
- #: src/Tribe/Main.php:4468
3254
  msgid "Once Every 30 Mins"
3255
  msgstr ""
3256
 
3257
- #: src/Tribe/Main.php:5195
3258
  msgid ""
3259
  "Your version of The Events Calendar is not up-to-date with one of your The "
3260
  "Events Calendar add-ons. Please %supdate now.%s"
3261
  msgstr ""
3262
 
3263
- #: src/Tribe/Main.php:5207
3264
  msgid ""
3265
  "The following plugins are out of date: %1$s. All add-ons contain "
3266
  "dependencies on The Events Calendar and will not function properly unless "
3267
  "paired with the right version. %2$sLearn More%3$s."
3268
  msgstr ""
3269
 
3270
- #: src/Tribe/Main.php:5246 src/Tribe/Main.php:5303
3271
  msgid "Use Saved %s:"
3272
  msgstr ""
3273
 
@@ -4682,15 +4702,15 @@ msgstr ""
4682
  msgid "Unnamed Venue"
4683
  msgstr ""
4684
 
4685
- #: src/Tribe/Views/V2/Hooks.php:430
4686
  msgid "We recommend a 16:9 aspect ratio for featured images."
4687
  msgstr ""
4688
 
4689
- #: src/Tribe/Views/V2/Hooks.php:497
4690
  msgid "Recommended for all sites using the updated calendar views."
4691
  msgstr ""
4692
 
4693
- #: src/Tribe/Views/V2/Hooks.php:512
4694
  msgid "The Events Calendar - View V2"
4695
  msgstr ""
4696
 
@@ -6336,13 +6356,15 @@ msgid ""
6336
  msgstr ""
6337
 
6338
  #: src/admin-views/privacy.php:49
6339
- msgid "We make use of certain API keys, in order to provide specific features."
6340
  msgstr ""
6341
 
6342
  #: src/admin-views/privacy.php:51
6343
  msgid ""
6344
- "These API keys may include the following third party services: Google Maps, "
6345
- "Meetup, PayPal, and Eventbrite (API key, auth URL and Client Secret)."
 
 
6346
  msgstr ""
6347
 
6348
  #: src/admin-views/privacy.php:53
2
  # This file is distributed under the same license as the The Events Calendar package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: The Events Calendar 5.1.4\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/the-events-"
7
  "calendar\n"
8
+ "POT-Creation-Date: 2020-06-24 04:02:13+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2020-06-24 04:02\n"
13
  "Last-Translator: \n"
14
  "Language-Team: \n"
15
 
47
  msgid "%s"
48
  msgstr ""
49
 
50
+ #: src/Tribe/Admin/Bar/Default_Configurator.php:45 src/Tribe/Main.php:4174
51
  #: src/admin-views/tribe-options-upgrade.php:20
52
  msgid "View Calendar"
53
  msgstr ""
57
  msgstr ""
58
 
59
  #: src/Tribe/Admin/Bar/Default_Configurator.php:62
60
+ #: src/Tribe/Linked_Posts/Chooser_Meta_Box.php:211 src/Tribe/Main.php:2045
61
+ #: src/Tribe/Main.php:5270 src/Tribe/Main.php:5317 src/Tribe/Organizer.php:93
62
  #: src/Tribe/Venue.php:112
63
  msgid "Edit %s"
64
  msgstr ""
69
  msgid "Import"
70
  msgstr ""
71
 
72
+ #: src/Tribe/Admin/Bar/Default_Configurator.php:89 src/Tribe/Main.php:4222
73
  msgid "Settings"
74
  msgstr ""
75
 
77
  msgid "Help"
78
  msgstr ""
79
 
80
+ #: src/Tribe/Admin/Notice/Marketing.php:101
81
  msgctxt "2018 user survey"
82
  msgid "take the survey now"
83
  msgstr ""
84
 
85
+ #: src/Tribe/Admin/Notice/Marketing.php:105
86
  msgctxt "2018 user survey"
87
  msgid ""
88
  "<strong>The Events Calendar Annual Survey:</strong> share your feedback with "
89
  "our team—%1$s!"
90
  msgstr ""
91
 
92
+ #: src/Tribe/Admin/Notice/Marketing.php:118
93
  msgid "<strong>The Events Calendar & Gutenberg</strong>"
94
  msgstr ""
95
 
96
+ #: src/Tribe/Admin/Notice/Marketing.php:122
97
  msgid ""
98
  "WordPress 5.0 is coming soon, and with it, the arrival of the new block "
99
  "editor interface."
100
  msgstr ""
101
 
102
+ #: src/Tribe/Admin/Notice/Marketing.php:127
103
  msgid ""
104
  "Get up to speed with our comprehensive Guide to Gutenberg ebook, then see "
105
  "how events and tickets will behave in the block editor by installing our "
106
  "free Events Gutenberg extension."
107
  msgstr ""
108
 
109
+ #: src/Tribe/Admin/Notice/Marketing.php:133
110
  msgid "Download the eBook"
111
  msgstr ""
112
 
113
+ #: src/Tribe/Admin/Notice/Marketing.php:141
114
  msgid "Try Events Gutenberg"
115
  msgstr ""
116
 
117
+ #: src/Tribe/Admin/Notice/Marketing.php:158
118
+ msgid "Virtual Events for The Events Calendar"
119
+ msgstr ""
120
+
121
+ #. translators: the placeholder is for the link to the Virtual Events for The
122
+ #. Events Calendar information and download page.
123
+ #: src/Tribe/Admin/Notice/Marketing.php:163
124
+ msgctxt "Virtual Events Announcement Banner"
125
+ msgid ""
126
+ "🎉 Just launched: %s! Identify events as virtual events, Zoom integration, "
127
+ "hidden livestream links and more."
128
+ msgstr ""
129
+
130
  #: src/Tribe/Admin/Notice/Timezones.php:149
131
  #: src/Tribe/Editor/Compatibility.php:131 src/Tribe/Google/Maps_API_Key.php:77
132
  msgid "Read more"
167
  "refresh and try again."
168
  msgstr ""
169
 
170
+ #: src/Tribe/Admin_List.php:246 src/Tribe/Main.php:2064
171
  msgid "%s Categories"
172
  msgstr ""
173
 
189
  msgstr ""
190
 
191
  #: src/Tribe/Aggregator/API/Origins.php:36
192
+ #: src/Tribe/Aggregator/Admin_Bar.php:97 src/Tribe/Aggregator/Service.php:893
193
  msgid "CSV File"
194
  msgstr ""
195
 
286
  "The image associated with your event could not be attached to the event."
287
  msgstr ""
288
 
289
+ #: src/Tribe/Aggregator/Errors.php:46 src/Tribe/Aggregator/Service.php:757
290
  msgid ""
291
  "The daily limit of %d import requests to the Event Aggregator service has "
292
  "been reached. Please try again later."
558
  msgid "Events Import"
559
  msgstr ""
560
 
561
+ #: src/Tribe/Aggregator/Page.php:417
562
  msgid "Facebook Events"
563
  msgstr ""
564
 
565
+ #: src/Tribe/Aggregator/Page.php:421
566
  msgid "iCal Importer"
567
  msgstr ""
568
 
569
+ #: src/Tribe/Aggregator/Page.php:430
570
  msgid ""
571
  "It looks like you are using our legacy plugin, %1$s, along with our new "
572
  "Event Aggregator service. Event Aggregator includes all the features of the "
580
  msgstr[0] ""
581
  msgstr[1] ""
582
 
583
+ #: src/Tribe/Aggregator/Page.php:443
584
  msgid "Manage Active Plugins"
585
  msgstr ""
586
 
662
  "the import halting."
663
  msgstr ""
664
 
665
+ #: src/Tribe/Aggregator/Record/CSV.php:79
666
  #: src/admin-views/aggregator/settings.php:606
667
  #: src/deprecated/Tribe__Events__Importer__Admin_Page.php:239
668
  msgid "CSV"
669
  msgstr ""
670
 
671
+ #: src/Tribe/Aggregator/Record/CSV.php:120
672
  msgid "Unknown Column "
673
  msgstr ""
674
 
675
+ #: src/Tribe/Aggregator/Record/CSV.php:229
676
  #: src/deprecated/Tribe__Events__Importer__Admin_Page.php:358
677
  msgid "The following fields are required for a successful import:"
678
  msgstr ""
1042
  "be understood. Please try again."
1043
  msgstr ""
1044
 
1045
+ #: src/Tribe/Aggregator/Service.php:729
1046
  msgid "the UID part of the iCalendar Specification"
1047
  msgstr ""
1048
 
1049
+ #: src/Tribe/Aggregator/Service.php:734
1050
  msgid "read more about Facebook restrictions in our knowledgebase"
1051
  msgstr ""
1052
 
1053
+ #: src/Tribe/Aggregator/Service.php:739
1054
  msgid "https://m.tri.be/1afb"
1055
  msgstr ""
1056
 
1057
+ #: src/Tribe/Aggregator/Service.php:744
1058
  msgid "Sorry, but something went wrong. Please try again."
1059
  msgstr ""
1060
 
1061
+ #: src/Tribe/Aggregator/Service.php:745
1062
  msgid "Events could not be imported. The import parameters were invalid."
1063
  msgstr ""
1064
 
1065
+ #: src/Tribe/Aggregator/Service.php:746
1066
  msgid ""
1067
  "Events cannot be imported because Eventbrite has returned an error. This "
1068
  "could mean that the event ID does not exist, the event or source is marked "
1072
  "in our knowledgebase</a>."
1073
  msgstr ""
1074
 
1075
+ #: src/Tribe/Aggregator/Service.php:747
1076
  msgid "No upcoming Eventbrite events found."
1077
  msgstr ""
1078
 
1079
+ #: src/Tribe/Aggregator/Service.php:748
1080
  msgid "The URL provided could not be reached."
1081
  msgstr ""
1082
 
1083
+ #: src/Tribe/Aggregator/Service.php:749
1084
  msgid "The URL provided failed to load."
1085
  msgstr ""
1086
 
1087
+ #: src/Tribe/Aggregator/Service.php:750
1088
  msgid "The image associated with your event could not be imported."
1089
  msgstr ""
1090
 
1091
+ #: src/Tribe/Aggregator/Service.php:751
1092
  msgid ""
1093
  "The image associated with your event is not accessible with your API key."
1094
  msgstr ""
1095
 
1096
+ #: src/Tribe/Aggregator/Service.php:752
1097
  msgid ""
1098
  "The import failed for an unknown reason. Please try again. If the problem "
1099
  "persists, please contact support."
1100
  msgstr ""
1101
 
1102
+ #: src/Tribe/Aggregator/Service.php:753
1103
  msgid ""
1104
  "Events could not be imported. The URL provided did not have events in the "
1105
  "proper format."
1106
  msgstr ""
1107
 
1108
+ #: src/Tribe/Aggregator/Service.php:754
1109
  msgid ""
1110
  "The file provided could not be opened. Please confirm that it is a properly "
1111
  "formatted .ics file."
1112
  msgstr ""
1113
 
1114
+ #: src/Tribe/Aggregator/Service.php:755
1115
  msgid "Your Meetup API key is invalid."
1116
  msgstr ""
1117
 
1118
+ #: src/Tribe/Aggregator/Service.php:756
1119
  msgid ""
1120
  "Event Aggregator cannot reach Meetup.com because you exceeded the request "
1121
  "limit for your Meetup API key."
1122
  msgstr ""
1123
 
1124
+ #: src/Tribe/Aggregator/Service.php:759
1125
  msgid "The import is in progress."
1126
  msgstr ""
1127
 
1128
+ #: src/Tribe/Aggregator/Service.php:761
1129
  msgid "The import will be starting soon."
1130
  msgstr ""
1131
 
1132
+ #: src/Tribe/Aggregator/Service.php:763
1133
  msgid "Success"
1134
  msgstr ""
1135
 
1136
+ #: src/Tribe/Aggregator/Service.php:764
1137
  msgid "Import created"
1138
  msgstr ""
1139
 
1140
+ #: src/Tribe/Aggregator/Service.php:765
1141
  msgid "Successfully fetched Eventbrite Token"
1142
  msgstr ""
1143
 
1144
+ #: src/Tribe/Aggregator/Service.php:766
1145
  msgid "Successfully loaded import origins"
1146
  msgstr ""
1147
 
1148
+ #: src/Tribe/Aggregator/Service.php:767
1149
  msgid "Import is complete"
1150
  msgstr ""
1151
 
1152
+ #: src/Tribe/Aggregator/Service.php:768
1153
  msgid "Import queued"
1154
  msgstr ""
1155
 
1156
+ #: src/Tribe/Aggregator/Service.php:769
1157
  msgid "Events could not be imported. The URL provided could not be reached."
1158
  msgstr ""
1159
 
1160
+ #: src/Tribe/Aggregator/Service.php:770
1161
  msgid ""
1162
  "The requested source does not have any upcoming and published events "
1163
  "matching the search criteria."
1164
  msgstr ""
1165
 
1166
+ #: src/Tribe/Aggregator/Service.php:772
1167
  msgctxt ""
1168
  "The placeholder is for the localized version of the iCal UID specification "
1169
  "link"
1175
  "help them more quickly resolve their feed's UID issue."
1176
  msgstr ""
1177
 
1178
+ #: src/Tribe/Aggregator/Service.php:781
1179
  msgctxt ""
1180
  "The placeholder is for the localized version of the iCal UID specification "
1181
  "link"
1187
  "help them more quickly resolve their feed's UID issue."
1188
  msgstr ""
1189
 
1190
+ #: src/Tribe/Aggregator/Service.php:787
1191
  msgid "Successfully fetched Facebook Token"
1192
  msgstr ""
1193
 
1194
+ #: src/Tribe/Aggregator/Service.php:788
1195
  msgid "Successfully connected to Eventbrite"
1196
  msgstr ""
1197
 
1198
+ #: src/Tribe/Aggregator/Service.php:789
1199
  msgid "Successfully disconnected Eventbrite"
1200
  msgstr ""
1201
 
1202
+ #: src/Tribe/Aggregator/Service.php:790
1203
  msgid "Successfully marked event for import from Eventbrite"
1204
  msgstr ""
1205
 
1206
+ #: src/Tribe/Aggregator/Service.php:791
1207
  msgid "Successfully synced event to Eventbrite"
1208
  msgstr ""
1209
 
1210
+ #: src/Tribe/Aggregator/Service.php:792
1211
  msgid ""
1212
  "The import being fetched is not queued up for importing. Please try the "
1213
  "import again."
1214
  msgstr ""
1215
 
1216
+ #: src/Tribe/Aggregator/Service.php:794
1217
  msgctxt "Placeholder used for the facebook restriction link"
1218
  msgid ""
1219
  "Events cannot be imported because Facebook has returned an error. This could "
1222
  "You can %1$s."
1223
  msgstr ""
1224
 
1225
+ #: src/Tribe/Aggregator/Service.php:801
1226
  msgid "Events cannot be imported because we received an error from Facebook: "
1227
  msgstr ""
1228
 
1229
+ #: src/Tribe/Aggregator/Service.php:802
1230
  msgid ""
1231
  "Events cannot be imported because we received an error from Eventbrite: "
1232
  msgstr ""
1233
 
1234
+ #: src/Tribe/Aggregator/Service.php:803
1235
  msgid ""
1236
  "Event cannot be synced to Eventbrite because we received an error from "
1237
  "Eventbrite."
1238
  msgstr ""
1239
 
1240
+ #: src/Tribe/Aggregator/Service.php:804
1241
  msgid "Eventbrite token is not valid."
1242
  msgstr ""
1243
 
1244
+ #: src/Tribe/Aggregator/Service.php:805 src/Tribe/Aggregator/Service.php:808
1245
  msgid "Eventbrite parsed object is empty."
1246
  msgstr ""
1247
 
1248
+ #: src/Tribe/Aggregator/Service.php:806
1249
  msgid "Eventbrite parsed object type is empty."
1250
  msgstr ""
1251
 
1252
+ #: src/Tribe/Aggregator/Service.php:807
1253
  msgid "Eventbrite parsed object ID is empty."
1254
  msgstr ""
1255
 
1256
+ #: src/Tribe/Aggregator/Service.php:809
1257
  msgid "Eventbrite event not found."
1258
  msgstr ""
1259
 
1260
+ #: src/Tribe/Aggregator/Service.php:810
1261
  msgid "Eventbrite organizer not found."
1262
  msgstr ""
1263
 
1264
+ #: src/Tribe/Aggregator/Service.php:811
1265
  msgid "Eventbrite venue not found."
1266
  msgstr ""
1267
 
1268
+ #: src/Tribe/Aggregator/Service.php:812
1269
  msgid "Eventbrite user not found."
1270
  msgstr ""
1271
 
1272
+ #: src/Tribe/Aggregator/Service.php:813
1273
  msgid "Eventbrite sync data invalid."
1274
  msgstr ""
1275
 
1276
+ #: src/Tribe/Aggregator/Service.php:814
1277
  msgid ""
1278
  "You do not have an active connection to Eventbrite through your account and "
1279
  "Event Aggregator."
1280
  msgstr ""
1281
 
1282
+ #: src/Tribe/Aggregator/Service.php:815
1283
  msgid "Webhook not registered properly."
1284
  msgstr ""
1285
 
1286
+ #: src/Tribe/Aggregator/Service.php:816
1287
  msgid "This webhook action is not currently supported."
1288
  msgstr ""
1289
 
1290
+ #: src/Tribe/Aggregator/Service.php:817
1291
  msgid "Event not owned, you cannot edit it."
1292
  msgstr ""
1293
 
1294
+ #: src/Tribe/Aggregator/Service.php:819
1295
  msgctxt "Placeholder used for the meetup API changes"
1296
  msgid ""
1297
  "Meetup is no longer supporting API keys, and will restrict access using your "
1300
  "%1$s"
1301
  msgstr ""
1302
 
1303
+ #: src/Tribe/Aggregator/Service.php:827
1304
  msgctxt ""
1305
  "Placeholder used for the meetup API changes link when the KEY is plain"
1306
  msgid ""
1310
  "%1$s."
1311
  msgstr ""
1312
 
1313
+ #: src/Tribe/Aggregator/Service.php:834
1314
  msgid ""
1315
  "You do not have an active connection to Meetup through your account and "
1316
  "Event Aggregator."
1317
  msgstr ""
1318
 
1319
+ #: src/Tribe/Aggregator/Service.php:851
1320
  msgid "Unknown service message"
1321
  msgstr ""
1322
 
1485
  msgstr[0] ""
1486
  msgstr[1] ""
1487
 
1488
+ #. translators: %1$d is replaced with a number of scheduled images.
1489
+ #: src/Tribe/Aggregator/Tabs/New.php:291
1490
+ msgid "%1$d new image was scheduled for import."
1491
+ msgid_plural "%1$d new images were scheduled for import."
1492
+ msgstr[0] ""
1493
+ msgstr[1] ""
1494
+
1495
+ #: src/Tribe/Aggregator/Tabs/New.php:303
1496
  msgid "No %1$s were imported or updated."
1497
  msgstr ""
1498
 
1499
+ #: src/Tribe/Aggregator/Tabs/New.php:311
1500
  msgid "View all %s"
1501
  msgstr ""
1502
 
1503
+ #: src/Tribe/Aggregator/Tabs/New.php:321
1504
  msgid "%1$d new venue was imported."
1505
  msgid_plural "%1$d new venues were imported."
1506
  msgstr[0] ""
1507
  msgstr[1] ""
1508
 
1509
+ #: src/Tribe/Aggregator/Tabs/New.php:325
1510
  msgid "View your event venues"
1511
  msgstr ""
1512
 
1513
+ #: src/Tribe/Aggregator/Tabs/New.php:333
1514
  msgid "%1$d new organizer was imported."
1515
  msgid_plural "%1$d new organizers were imported."
1516
  msgstr[0] ""
1517
  msgstr[1] ""
1518
 
1519
+ #: src/Tribe/Aggregator/Tabs/New.php:337
1520
  msgid "View your event organizers"
1521
  msgstr ""
1522
 
1523
+ #: src/Tribe/Aggregator/Tabs/New.php:346
1524
  msgid "%1$d new event category was created."
1525
  msgid_plural "%1$d new event categories were created."
1526
  msgstr[0] ""
1527
  msgstr[1] ""
1528
 
1529
+ #: src/Tribe/Aggregator/Tabs/New.php:350
1530
  msgid "View your event categories"
1531
  msgstr ""
1532
 
1533
+ #: src/Tribe/Aggregator/Tabs/New.php:358
1534
  msgid "%1$d new event tag was created."
1535
  msgid_plural "%1$d new event tags were created."
1536
  msgstr[0] ""
1537
  msgstr[1] ""
1538
 
1539
+ #: src/Tribe/Aggregator/Tabs/New.php:362
1540
  msgid "View your event tags"
1541
  msgstr ""
1542
 
1543
+ #: src/Tribe/Aggregator/Tabs/New.php:373
1544
  msgid "Import complete!"
1545
  msgstr ""
1546
 
1547
+ #: src/Tribe/Aggregator/Tabs/New.php:375
1548
  msgid "Your scheduled import was saved and the first import is complete!"
1549
  msgstr ""
1550
 
1551
+ #: src/Tribe/Aggregator/Tabs/New.php:379
1552
  msgctxt "separator between date and time"
1553
  msgid " at "
1554
  msgstr ""
1555
 
1556
+ #: src/Tribe/Aggregator/Tabs/New.php:386
1557
  msgid "The next import is scheduled for %1$s."
1558
  msgstr ""
1559
 
1560
+ #: src/Tribe/Aggregator/Tabs/New.php:390
1561
  msgid "View your scheduled imports."
1562
  msgstr ""
1563
 
1564
+ #: src/Tribe/Aggregator/Tabs/New.php:402
1565
  msgid "Invalid credential save request"
1566
  msgstr ""
1567
 
1568
+ #: src/Tribe/Aggregator/Tabs/New.php:412
1569
  msgid "Invalid credential save nonce"
1570
  msgstr ""
1571
 
1572
+ #: src/Tribe/Aggregator/Tabs/New.php:421
1573
  msgid "The Meetup API key is required."
1574
  msgstr ""
1575
 
1576
+ #: src/Tribe/Aggregator/Tabs/New.php:430
1577
  msgid "Credentials have been saved"
1578
  msgstr ""
1579
 
1580
+ #: src/Tribe/Aggregator/Tabs/New.php:437
1581
  msgid "Unable to save credentials"
1582
  msgstr ""
1583
 
1584
+ #: src/Tribe/Aggregator/Tabs/New.php:524
1585
  msgid "Import Using Event Aggregator"
1586
  msgstr ""
1587
 
1588
+ #: src/Tribe/Aggregator/Tabs/New.php:526
1589
  msgid ""
1590
  "With Event Aggregator, you can import events from iCalendar, Google, and "
1591
  "Meetup.com in a jiffy."
1592
  msgstr ""
1593
 
1594
+ #: src/Tribe/Aggregator/Tabs/New.php:529
1595
  msgid "Buy It Now"
1596
  msgstr ""
1597
 
1598
+ #: src/Tribe/Aggregator/Tabs/New.php:531 src/Tribe/Aggregator/Tabs/New.php:538
1599
  #: src/admin-views/aggregator/banners/eventbrite-upsell.php:19
1600
  msgid "opens in a new window"
1601
  msgstr ""
1602
 
1603
+ #: src/Tribe/Aggregator/Tabs/New.php:536
1604
  msgid "Learn More"
1605
  msgstr ""
1606
 
1607
+ #: src/Tribe/Aggregator/Tabs/New.php:584
1608
  msgid "Your Event Aggregator license is expired."
1609
  msgstr ""
1610
 
1611
+ #: src/Tribe/Aggregator/Tabs/New.php:585
1612
  msgid ""
1613
  "Renew your license in order to import events from iCalendar, Google, or "
1614
  "Meetup."
1615
  msgstr ""
1616
 
1617
+ #: src/Tribe/Aggregator/Tabs/New.php:588
1618
  msgid "Renew your Event Aggregator license"
1619
  msgstr ""
1620
 
2062
  msgstr ""
2063
 
2064
  #: src/Tribe/Editor/Template.php:70 src/Tribe/Template/Embed.php:59
2065
+ #: src/Tribe/Template/Single_Event.php:121
2066
+ #: src/Tribe/Views/V2/Template_Bootstrap.php:136
2067
+ #: src/Tribe/Views/V2/Template_Bootstrap.php:176
2068
+ #: src/Tribe/Views/V2/Template_Bootstrap.php:468
2069
  msgid "This %s has passed."
2070
  msgstr ""
2071
 
2664
  msgid "Upcoming Events"
2665
  msgstr ""
2666
 
2667
+ #. #-#-#-#-# the-events-calendar.pot (The Events Calendar 5.1.4) #-#-#-#-#
2668
  #. Plugin Name of the plugin/theme
2669
+ #: src/Tribe/Main.php:945 src/Tribe/Main.php:1400 src/Tribe/Privacy.php:29
2670
  #: src/functions/template-tags/general.php:1373 the-events-calendar.php:57
2671
  msgid "The Events Calendar"
2672
  msgstr ""
2673
 
2674
+ #: src/Tribe/Main.php:952
2675
  msgid "month"
2676
  msgstr ""
2677
 
2678
+ #: src/Tribe/Main.php:953
2679
  msgid "list"
2680
  msgstr ""
2681
 
2682
+ #: src/Tribe/Main.php:954
2683
  msgid "upcoming"
2684
  msgstr ""
2685
 
2686
+ #: src/Tribe/Main.php:955
2687
  msgid "past"
2688
  msgstr ""
2689
 
2690
+ #: src/Tribe/Main.php:956
2691
  msgid "day"
2692
  msgstr ""
2693
 
2694
+ #: src/Tribe/Main.php:957
2695
  msgid "today"
2696
  msgstr ""
2697
 
2698
+ #: src/Tribe/Main.php:958
2699
  msgctxt "featured events slug"
2700
  msgid "featured"
2701
  msgstr ""
2702
 
2703
+ #: src/Tribe/Main.php:959
2704
  msgctxt "all events slug"
2705
  msgid "all"
2706
  msgstr ""
2707
 
2708
+ #: src/Tribe/Main.php:983
2709
  msgid "Initializing Tribe Events on %s"
2710
  msgstr ""
2711
 
2712
+ #: src/Tribe/Main.php:1041 src/Tribe/Main.php:1043
2713
  msgid "Welcome to The Events Calendar!"
2714
  msgstr ""
2715
 
2716
+ #: src/Tribe/Main.php:1189
2717
  msgid ""
2718
  "The %3$s \"%1$s\" uses the \"/%2$s\" slug: the Events Calendar plugin will "
2719
  "show its calendar in place of the page."
2720
  msgstr ""
2721
 
2722
+ #: src/Tribe/Main.php:1192
2723
  msgid "Ask the site administrator to edit the %s slug"
2724
  msgstr ""
2725
 
2726
+ #: src/Tribe/Main.php:1194
2727
  msgid "Edit the %s slug"
2728
  msgstr ""
2729
 
2730
+ #: src/Tribe/Main.php:1198
2731
  msgid " ask the site administrator to set a different Events URL slug."
2732
  msgstr ""
2733
 
2734
+ #: src/Tribe/Main.php:1203
2735
  msgid "edit Events settings."
2736
  msgstr ""
2737
 
2738
+ #: src/Tribe/Main.php:1206
2739
  msgid "%1$s or %2$s"
2740
  msgstr ""
2741
 
2742
+ #: src/Tribe/Main.php:1275
2743
  msgid "Upgrade your calendar views"
2744
  msgstr ""
2745
 
2746
+ #: src/Tribe/Main.php:1311
2747
  msgid "Upgrade"
2748
  msgstr ""
2749
 
2750
+ #: src/Tribe/Main.php:1360 src/admin-views/admin-welcome-message.php:19
2751
  msgid "New User Primer"
2752
  msgstr ""
2753
 
2754
+ #: src/Tribe/Main.php:1362
2755
  msgid ""
2756
  "We are committed to helping make your calendar spectacular and have a wealth "
2757
  "of resources available, including a handy %s to get your calendar up and "
2758
  "running."
2759
  msgstr ""
2760
 
2761
+ #: src/Tribe/Main.php:1373
2762
  msgid "Support for The Events Calendar"
2763
  msgstr ""
2764
 
2765
+ #: src/Tribe/Main.php:1376
2766
  msgid ""
2767
  "%s: A thorough walkthrough of The Events Calendar and the settings that are "
2768
  "available to you."
2769
  msgstr ""
2770
 
2771
+ #: src/Tribe/Main.php:1376
2772
  msgid "Settings overview"
2773
  msgstr ""
2774
 
2775
+ #: src/Tribe/Main.php:1378
2776
  msgid ""
2777
  "%s: A complete look at the features you can expect to see right out of the "
2778
  "box as well as how to use them."
2779
  msgstr ""
2780
 
2781
+ #: src/Tribe/Main.php:1378
2782
  msgid "Features overview"
2783
  msgstr ""
2784
 
2785
+ #: src/Tribe/Main.php:1380
2786
  msgid ""
2787
  "%s: Our most comprehensive outline for customizing the calendar to suit your "
2788
  "needs, including custom layouts and styles."
2789
  msgstr ""
2790
 
2791
+ #: src/Tribe/Main.php:1380 src/admin-views/admin-welcome-message.php:21
2792
  msgid "Themer's Guide"
2793
  msgstr ""
2794
 
2795
+ #: src/Tribe/Main.php:1382
2796
  msgid ""
2797
  "%s: An overview of the default templates and styles that are included in the "
2798
  "plugin, as well as how to change them."
2799
  msgstr ""
2800
 
2801
+ #: src/Tribe/Main.php:1382
2802
  msgid "Using stylesheets and page templates"
2803
  msgstr ""
2804
 
2805
+ #: src/Tribe/Main.php:1384
2806
  msgid ""
2807
  "%s: Do you see an issue with your calendar? Go here first to find where it’s "
2808
  "coming from and how to fix it."
2809
  msgstr ""
2810
 
2811
+ #: src/Tribe/Main.php:1384
2812
  msgid "Troubleshooting common problems"
2813
  msgstr ""
2814
 
2815
+ #: src/Tribe/Main.php:1386
2816
  msgid ""
2817
  "%s: Code and guides for customizing your calendar in useful and interesting "
2818
  "ways."
2819
  msgstr ""
2820
 
2821
+ #: src/Tribe/Main.php:1386
2822
  msgid "Customizing the Events plugins"
2823
  msgstr ""
2824
 
2825
+ #: src/Tribe/Main.php:1401
2826
  msgid "Events Tickets"
2827
  msgstr ""
2828
 
2829
+ #: src/Tribe/Main.php:1402
2830
  msgid ""
2831
  "If you have tried the above steps and are still having trouble, you can post "
2832
  "a new thread to our WordPress.org forums for %1$s or %2$s. Our support staff "
2833
  "monitors these forums once a week and would be happy to assist you there. "
2834
  msgstr ""
2835
 
2836
+ #: src/Tribe/Main.php:1404 src/Tribe/Main.php:1412
2837
  msgid "premium support on our website"
2838
  msgstr ""
2839
 
2840
+ #: src/Tribe/Main.php:1405
2841
  msgid ""
2842
  "<strong>Looking for more immediate support?</strong> We offer %s with the "
2843
  "purchase of any of our premium plugins. Pick up a license and you can post "
2844
  "there directly and expect a response within 24-48 hours during weekdays"
2845
  msgstr ""
2846
 
2847
+ #: src/Tribe/Main.php:1409
2848
  msgid "open-source forum on WordPress.org"
2849
  msgstr ""
2850
 
2851
+ #: src/Tribe/Main.php:1410
2852
  msgid ""
2853
  "If you have tried the above steps and are still having trouble, you can post "
2854
  "a new thread to our %s. Our support staff monitors these forums once a week "
2855
  "and would be happy to assist you there."
2856
  msgstr ""
2857
 
2858
+ #: src/Tribe/Main.php:1413
2859
  msgid "Events Calendar PRO"
2860
  msgstr ""
2861
 
2862
+ #: src/Tribe/Main.php:1414
2863
  msgid ""
2864
  "<strong>Looking for more immediate support?</strong> We offer %1$s with the "
2865
  "purchase of any of our premium plugins (like %2$s). Pick up a license and "
2867
  "weekdays."
2868
  msgstr ""
2869
 
2870
+ #: src/Tribe/Main.php:1418
2871
  msgid "post a thread"
2872
  msgstr ""
2873
 
2874
+ #: src/Tribe/Main.php:1419
2875
  msgid ""
2876
  "If you have a valid license for one of our paid plugins, you can %s in our "
2877
  "premium support forums. Our support team monitors the forums and will "
2878
  "respond to your thread within 24-48 hours (during the week)."
2879
  msgstr ""
2880
 
2881
+ #: src/Tribe/Main.php:1462
2882
  #: src/deprecated/Tribe__Events__Importer__Admin_Page.php:207
2883
  #: src/functions/template-tags/general.php:95
2884
  msgid "Events"
2885
  msgstr ""
2886
 
2887
+ #: src/Tribe/Main.php:1470 src/admin-views/aggregator/tabs/import-form.php:227
2888
  #: src/admin-views/aggregator/tabs/import-form.php:239
2889
  #: src/functions/template-tags/general.php:63
2890
  msgid "Event"
2891
  msgstr ""
2892
 
2893
+ #: src/Tribe/Main.php:1687
2894
  msgid ""
2895
  "Sorry, The Events Calendar requires WordPress %s or higher. Please upgrade "
2896
  "your WordPress install."
2897
  msgstr ""
2898
 
2899
+ #: src/Tribe/Main.php:1690
2900
  msgid ""
2901
  "Sorry, The Events Calendar requires PHP %s or higher. Talk to your Web host "
2902
  "about moving you to a newer version of PHP."
2903
  msgstr ""
2904
 
2905
+ #: src/Tribe/Main.php:1722
2906
  msgid ""
2907
  "To continue using The Events Calendar, please install the latest version of"
2908
  msgstr ""
2909
 
2910
+ #: src/Tribe/Main.php:1724 src/Tribe/Main.php:1725
2911
  msgid "Event Tickets"
2912
  msgstr ""
2913
 
2914
+ #: src/Tribe/Main.php:1760
2915
  msgid ""
2916
  "It appears as if the tribe-common libraries cannot be found! The directory "
2917
  "should be in the \"common/\" directory in the events calendar plugin."
2918
  msgstr ""
2919
 
2920
+ #: src/Tribe/Main.php:1996 src/Tribe/Main.php:2455
2921
  msgid "category"
2922
  msgstr ""
2923
 
2924
+ #: src/Tribe/Main.php:2010 src/Tribe/Main.php:2454
2925
  msgid "tag"
2926
  msgstr ""
2927
 
2928
+ #: src/Tribe/Main.php:2043 src/Tribe/Organizer.php:91 src/Tribe/Venue.php:110
2929
  msgid "Add New"
2930
  msgstr ""
2931
 
2932
+ #: src/Tribe/Main.php:2044 src/Tribe/Main.php:2181 src/Tribe/Main.php:2182
2933
  #: src/Tribe/Organizer.php:92 src/Tribe/Venue.php:111
2934
  msgid "Add New %s"
2935
  msgstr ""
2936
 
2937
+ #: src/Tribe/Main.php:2046 src/Tribe/Organizer.php:94 src/Tribe/Venue.php:113
2938
  msgid "New %s"
2939
  msgstr ""
2940
 
2941
+ #: src/Tribe/Main.php:2047 src/Tribe/Organizer.php:95 src/Tribe/Venue.php:114
2942
  #: src/views/month/single-day.php:26
2943
  msgid "View %s"
2944
  msgstr ""
2945
 
2946
+ #: src/Tribe/Main.php:2048 src/Tribe/Organizer.php:96 src/Tribe/Venue.php:115
2947
  msgid "Search %s"
2948
  msgstr ""
2949
 
2950
+ #: src/Tribe/Main.php:2049 src/Tribe/Organizer.php:97 src/Tribe/Venue.php:116
2951
  msgid "No %s found"
2952
  msgstr ""
2953
 
2954
+ #: src/Tribe/Main.php:2050 src/Tribe/Organizer.php:98 src/Tribe/Venue.php:117
2955
  msgid "No %s found in Trash"
2956
  msgstr ""
2957
 
2958
+ #: src/Tribe/Main.php:2051 src/Tribe/Main.php:2138 src/Tribe/Main.php:2158
2959
  #: src/Tribe/Organizer.php:99 src/Tribe/Venue.php:118
2960
  msgid "%s published."
2961
  msgstr ""
2962
 
2963
+ #: src/Tribe/Main.php:2052 src/Tribe/Organizer.php:100 src/Tribe/Venue.php:119
2964
  msgid "%s published privately."
2965
  msgstr ""
2966
 
2967
+ #: src/Tribe/Main.php:2053 src/Tribe/Organizer.php:101 src/Tribe/Venue.php:120
2968
  msgid "%s reverted to draft."
2969
  msgstr ""
2970
 
2971
+ #: src/Tribe/Main.php:2054 src/Tribe/Organizer.php:102 src/Tribe/Venue.php:121
2972
  msgid "%s scheduled."
2973
  msgstr ""
2974
 
2975
+ #: src/Tribe/Main.php:2055 src/Tribe/Main.php:2097 src/Tribe/Main.php:2132
2976
+ #: src/Tribe/Main.php:2135 src/Tribe/Main.php:2152 src/Tribe/Main.php:2155
2977
  #: src/Tribe/Organizer.php:103 src/Tribe/Venue.php:122
2978
  msgid "%s updated."
2979
  msgstr ""
2980
 
2981
+ #: src/Tribe/Main.php:2065
2982
  msgid "%s Category"
2983
  msgstr ""
2984
 
2985
+ #: src/Tribe/Main.php:2066
2986
  msgid "Search %s Categories"
2987
  msgstr ""
2988
 
2989
+ #: src/Tribe/Main.php:2067
2990
  msgid "All %s Categories"
2991
  msgstr ""
2992
 
2993
+ #: src/Tribe/Main.php:2068
2994
  msgid "Parent %s Category"
2995
  msgstr ""
2996
 
2997
+ #: src/Tribe/Main.php:2069
2998
  msgid "Parent %s Category:"
2999
  msgstr ""
3000
 
3001
+ #: src/Tribe/Main.php:2070
3002
  msgid "Edit %s Category"
3003
  msgstr ""
3004
 
3005
+ #: src/Tribe/Main.php:2071
3006
  msgid "Update %s Category"
3007
  msgstr ""
3008
 
3009
+ #: src/Tribe/Main.php:2072
3010
  msgid "Add New %s Category"
3011
  msgstr ""
3012
 
3013
+ #: src/Tribe/Main.php:2073
3014
  msgid "New %s Category Name"
3015
  msgstr ""
3016
 
3017
+ #: src/Tribe/Main.php:2090
3018
  msgid "%1$s updated. %2$sView %1$s%3$s"
3019
  msgstr ""
3020
 
3021
+ #: src/Tribe/Main.php:2095 src/Tribe/Main.php:2133 src/Tribe/Main.php:2153
3022
  msgid "Custom field updated."
3023
  msgstr ""
3024
 
3025
+ #: src/Tribe/Main.php:2096 src/Tribe/Main.php:2134 src/Tribe/Main.php:2154
3026
  msgid "Custom field deleted."
3027
  msgstr ""
3028
 
3029
  #. translators: %s: date and time of the revision
3030
+ #: src/Tribe/Main.php:2099 src/Tribe/Main.php:2137
3031
  msgid "%1$s restored to revision from %2$s"
3032
  msgstr ""
3033
 
3034
+ #: src/Tribe/Main.php:2101
3035
  msgid "%1$s published. %2$sView %3$s"
3036
  msgstr ""
3037
 
3038
+ #: src/Tribe/Main.php:2106 src/Tribe/Main.php:2139 src/Tribe/Main.php:2159
3039
  msgid "%s saved."
3040
  msgstr ""
3041
 
3042
+ #: src/Tribe/Main.php:2108
3043
  msgid "%1$s submitted. %2$sPreview %3$s"
3044
  msgstr ""
3045
 
3046
+ #: src/Tribe/Main.php:2114
3047
  msgid "%1$s scheduled for: %2$s. %3$sPreview %4$s"
3048
  msgstr ""
3049
 
3050
  #. translators: Publish box date format, see http://php.net/date
3051
+ #: src/Tribe/Main.php:2117 src/Tribe/Main.php:2145 src/Tribe/Main.php:2165
3052
  msgid "M j, Y @ G:i"
3053
  msgstr ""
3054
 
3055
+ #: src/Tribe/Main.php:2123
3056
  msgid "%1$s draft updated. %2$sPreview %3$s"
3057
  msgstr ""
3058
 
3059
+ #: src/Tribe/Main.php:2140 src/Tribe/Main.php:2160
3060
  msgid "%s submitted."
3061
  msgstr ""
3062
 
3063
+ #: src/Tribe/Main.php:2142 src/Tribe/Main.php:2162
3064
  msgid "%1$s scheduled for: %2$s."
3065
  msgstr ""
3066
 
3067
+ #: src/Tribe/Main.php:2147 src/Tribe/Main.php:2167
3068
  msgid "%s draft updated."
3069
  msgstr ""
3070
 
3071
  #. translators: %s: date and time of the revision
3072
+ #: src/Tribe/Main.php:2157
3073
  msgid "%s restored to revision from %s"
3074
  msgstr ""
3075
 
3076
+ #: src/Tribe/Main.php:2211
3077
  msgid ""
3078
  "Without a defined location your event will not display a %sGoogle Rich "
3079
  "Snippet%s on the search results."
3080
  msgstr ""
3081
 
3082
+ #: src/Tribe/Main.php:2456
3083
  msgid "page"
3084
  msgstr ""
3085
 
3086
+ #: src/Tribe/Main.php:2457 src/functions/template-tags/general.php:79
3087
  msgid "event"
3088
  msgstr ""
3089
 
3090
+ #: src/Tribe/Main.php:2458 src/functions/template-tags/general.php:111
3091
  msgid "events"
3092
  msgstr ""
3093
 
3094
+ #: src/Tribe/Main.php:2459
3095
  msgid "all"
3096
  msgstr ""
3097
 
3098
+ #: src/Tribe/Main.php:2841
3099
  msgid " (View Full %1$s Description Here: %2$s)"
3100
  msgstr ""
3101
 
3102
+ #: src/Tribe/Main.php:3620 src/Tribe/Main.php:3655
3103
  #: src/functions/template-tags/day.php:157
3104
  #: src/functions/template-tags/day.php:178
3105
  msgid "Date out of range."
3106
  msgstr ""
3107
 
3108
+ #: src/Tribe/Main.php:3697
3109
  msgid "%s Options"
3110
  msgstr ""
3111
 
3112
+ #: src/Tribe/Main.php:3706 src/Tribe/Main.php:3719
3113
  msgid "%s Information"
3114
  msgstr ""
3115
 
3116
+ #: src/Tribe/Main.php:4048
3117
  msgid "Support"
3118
  msgstr ""
3119
 
3120
+ #: src/Tribe/Main.php:4051
3121
  msgid "View All Add-Ons"
3122
  msgstr ""
3123
 
3124
+ #: src/Tribe/Main.php:4071
3125
  msgid "News from Modern Tribe"
3126
  msgstr ""
3127
 
3128
+ #: src/Tribe/Main.php:4116
3129
  msgid "Additional Functionality"
3130
  msgstr ""
3131
 
3132
+ #: src/Tribe/Main.php:4121
3133
  msgid ""
3134
  "Looking for additional functionality including recurring events, ticket "
3135
  "sales, publicly submitted events, new views and more?"
3136
  msgstr ""
3137
 
3138
+ #: src/Tribe/Main.php:4122
3139
  msgid "Check out the %savailable add-ons%s."
3140
  msgstr ""
3141
 
3142
+ #: src/Tribe/Main.php:4223
3143
  msgid "Calendar"
3144
  msgstr ""
3145
 
3146
+ #: src/Tribe/Main.php:4239
3147
  msgid "List"
3148
  msgstr ""
3149
 
3150
+ #: src/Tribe/Main.php:4257
3151
  msgid "Month"
3152
  msgstr ""
3153
 
3154
+ #: src/Tribe/Main.php:4274 src/admin-views/aggregator/fields/schedule.php:43
3155
  #: src/admin-views/aggregator/fields/schedule.php:61
3156
  msgid "Day"
3157
  msgstr ""
3158
 
3159
+ #: src/Tribe/Main.php:4297
3160
  msgid "Search for %s by Keyword."
3161
  msgstr ""
3162
 
3163
+ #: src/Tribe/Main.php:4300
3164
  #: src/views/v2/components/events-bar/search-button.php:25
3165
  msgid "Search"
3166
  msgstr ""
3167
 
3168
+ #: src/Tribe/Main.php:4301
3169
  msgid "Keyword"
3170
  msgstr ""
3171
 
3172
+ #: src/Tribe/Main.php:4318
3173
  msgid "4 digit year hyphen 2 digit month hyphen 2 digit day"
3174
  msgstr ""
3175
 
3176
+ #: src/Tribe/Main.php:4319
3177
  msgid "1 digit month slash 1 digit day slash 4 digit year"
3178
  msgstr ""
3179
 
3180
+ #: src/Tribe/Main.php:4320
3181
  msgid "2 digit month slash 2 digit day slash 4 digit year"
3182
  msgstr ""
3183
 
3184
+ #: src/Tribe/Main.php:4321
3185
  msgid "1 digit day slash 1 digit month slash 4 digit year"
3186
  msgstr ""
3187
 
3188
+ #: src/Tribe/Main.php:4322
3189
  msgid "2 digit day slash 2 digit month slash 4 digit year"
3190
  msgstr ""
3191
 
3192
+ #: src/Tribe/Main.php:4323
3193
  msgid "1 digit month hyphen 1 digit day hyphen 4 digit year"
3194
  msgstr ""
3195
 
3196
+ #: src/Tribe/Main.php:4324
3197
  msgid "1 digit month hyphen 2 digit day hyphen 4 digit year"
3198
  msgstr ""
3199
 
3200
+ #: src/Tribe/Main.php:4325
3201
  msgid "1 digit day hyphen 1 digit month hyphen 4 digit year"
3202
  msgstr ""
3203
 
3204
+ #: src/Tribe/Main.php:4326
3205
  msgid "2 digit day hyphen 2 digit month hyphen 4 digit year"
3206
  msgstr ""
3207
 
3208
+ #: src/Tribe/Main.php:4327
3209
  msgid "4 digit year dot 2 digit month dot 2 digit day"
3210
  msgstr ""
3211
 
3212
+ #: src/Tribe/Main.php:4328
3213
  msgid "2 digit month dot 2 digit day dot 4 digit year"
3214
  msgstr ""
3215
 
3216
+ #: src/Tribe/Main.php:4329
3217
  msgid "2 digit day dot 2 digit month dot 4 digit year"
3218
  msgstr ""
3219
 
3220
+ #: src/Tribe/Main.php:4333
3221
  msgid "4 digit year hyphen 2 digit month"
3222
  msgstr ""
3223
 
3224
+ #: src/Tribe/Main.php:4334 src/Tribe/Main.php:4336
3225
  msgid "1 digit month slash 4 digit year"
3226
  msgstr ""
3227
 
3228
+ #: src/Tribe/Main.php:4335 src/Tribe/Main.php:4337
3229
  msgid "2 digit month slash 4 digit year"
3230
  msgstr ""
3231
 
3232
+ #: src/Tribe/Main.php:4338 src/Tribe/Main.php:4339 src/Tribe/Main.php:4340
3233
  msgid "1 digit month hyphen 4 digit year"
3234
  msgstr ""
3235
 
3236
+ #: src/Tribe/Main.php:4341
3237
  msgid "2 digit month hyphen 4 digit year"
3238
  msgstr ""
3239
 
3240
+ #: src/Tribe/Main.php:4342
3241
  msgid "4 digit year dot 2 digit month"
3242
  msgstr ""
3243
 
3244
+ #: src/Tribe/Main.php:4343 src/Tribe/Main.php:4344
3245
  msgid "2 digit month dot 4 digit year"
3246
  msgstr ""
3247
 
3248
+ #: src/Tribe/Main.php:4373 src/Tribe/Main.php:4410
3249
  #: src/admin-views/aggregator/origins/refine.php:7
3250
  msgid "Date"
3251
  msgstr ""
3252
 
3253
+ #: src/Tribe/Main.php:4375
3254
  msgid "Search for %s by Date. Please use the format %s."
3255
  msgstr ""
3256
 
3257
+ #: src/Tribe/Main.php:4388
3258
  msgid "%s In"
3259
  msgstr ""
3260
 
3261
+ #: src/Tribe/Main.php:4390
3262
  msgid "Search for %s by month. Please use the format %s."
3263
  msgstr ""
3264
 
3265
+ #: src/Tribe/Main.php:4393
3266
  msgid "%s From"
3267
  msgstr ""
3268
 
3269
+ #: src/Tribe/Main.php:4396
3270
  msgid "Day Of"
3271
  msgstr ""
3272
 
3273
+ #: src/Tribe/Main.php:4476
3274
  msgid "Once Every 30 Mins"
3275
  msgstr ""
3276
 
3277
+ #: src/Tribe/Main.php:5203
3278
  msgid ""
3279
  "Your version of The Events Calendar is not up-to-date with one of your The "
3280
  "Events Calendar add-ons. Please %supdate now.%s"
3281
  msgstr ""
3282
 
3283
+ #: src/Tribe/Main.php:5215
3284
  msgid ""
3285
  "The following plugins are out of date: %1$s. All add-ons contain "
3286
  "dependencies on The Events Calendar and will not function properly unless "
3287
  "paired with the right version. %2$sLearn More%3$s."
3288
  msgstr ""
3289
 
3290
+ #: src/Tribe/Main.php:5254 src/Tribe/Main.php:5311
3291
  msgid "Use Saved %s:"
3292
  msgstr ""
3293
 
4702
  msgid "Unnamed Venue"
4703
  msgstr ""
4704
 
4705
+ #: src/Tribe/Views/V2/Hooks.php:484
4706
  msgid "We recommend a 16:9 aspect ratio for featured images."
4707
  msgstr ""
4708
 
4709
+ #: src/Tribe/Views/V2/Hooks.php:561
4710
  msgid "Recommended for all sites using the updated calendar views."
4711
  msgstr ""
4712
 
4713
+ #: src/Tribe/Views/V2/Hooks.php:576
4714
  msgid "The Events Calendar - View V2"
4715
  msgstr ""
4716
 
6356
  msgstr ""
6357
 
6358
  #: src/admin-views/privacy.php:49
6359
+ msgid "We make use of certain APIs, in order to provide specific features."
6360
  msgstr ""
6361
 
6362
  #: src/admin-views/privacy.php:51
6363
  msgid ""
6364
+ "These APIs may include the following third party services: Google Maps (API "
6365
+ "key), Meetup (OAuth token), PayPal (email, Client ID, Client Secret), "
6366
+ "Eventbrite (API key, auth URL, Client Secret), and Zoom (email, Client ID, "
6367
+ "Client Secret)."
6368
  msgstr ""
6369
 
6370
  #: src/admin-views/privacy.php:53
readme.txt CHANGED
@@ -4,7 +4,7 @@ Contributors: ModernTribe, borkweb, barry.hughes, bordoni, brianjessee, aguseo,
4
  Tags: events, calendar, event, venue, organizer, dates, date, google maps, conference, workshop, concert, meeting, seminar, summit, class, modern tribe, tribe, widget
5
  Donate link: https://m.tri.be/29
6
  Requires at least: 4.9.14
7
- Stable tag: 5.1.3
8
  Tested up to: 5.4.2
9
  Requires PHP: 5.6
10
  License: GPLv2 or later
@@ -222,6 +222,17 @@ Remember to always make a backup of your database and files before updating!
222
 
223
  == Changelog ==
224
 
 
 
 
 
 
 
 
 
 
 
 
225
  = [5.1.3] 2020-06-22 =
226
 
227
  * Tweak - Add new filter `tribe_events_filter_views_v2_plural_events_label` to customize the label in V2 views. [VE-9]
4
  Tags: events, calendar, event, venue, organizer, dates, date, google maps, conference, workshop, concert, meeting, seminar, summit, class, modern tribe, tribe, widget
5
  Donate link: https://m.tri.be/29
6
  Requires at least: 4.9.14
7
+ Stable tag: 5.1.4
8
  Tested up to: 5.4.2
9
  Requires PHP: 5.6
10
  License: GPLv2 or later
222
 
223
  == Changelog ==
224
 
225
+ = [5.1.4] 2020-06-24 =
226
+
227
+ * Tweak - Improve fresh install experience by setting the default template to the Events one [TEC-3453]
228
+ * Tweak - Create a new method to request an update back to EA imports to mark imports as completed on EA server [TEC-3476]
229
+ * Tweak - Add a new filter `tribe_aggregator_service_put_pue_licenses` to enable external sources the option to add additional PUE attached to the request. [TEC-3476]
230
+ * Tweak - Prevent lastest-past from showing in the front end view selector in new installs [TEC-3450]
231
+ * Tweak - On a fresh install set the enabled views to list, month, and day and set the default view to list to stop erroneous error entries [TEC-3451]
232
+ * Tweak - Add a new "scheduled" status for the activity reporter of imports from EA [TEC-3475]
233
+ * Tweak - Add admin notice for Virtual Events. [TEC-3620]
234
+ * Language - 3 new strings added, 246 updated, 1 fuzzied, and 1 obsoleted
235
+
236
  = [5.1.3] 2020-06-22 =
237
 
238
  * Tweak - Add new filter `tribe_events_filter_views_v2_plural_events_label` to customize the label in V2 views. [VE-9]
site_owner_data_collection_statement.html DELETED
@@ -1,48 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <title>The Events Calendar (and Event Aggregator) | Modern Tribe's Site Owner Data Collection Statement</title>
6
- <meta name="description" content="Modern Tribe's Site Owner Data Collection Statement for The Events Calendar Plugin">
7
- <meta name="author" content="Modern Tribe, Inc.">
8
- <meta name="copyright" content="Modern Tribe, Inc.">
9
- <style>
10
- html{background-color:#FFFFFF;color:#383838;}
11
- ::-moz-selection{background:#444444;color:#DDDDDD;}
12
- ::selection{background:#444444;color:#DDDDDD;}
13
- body{margin: 0 auto;padding: 0;max-width: 650px;font-family:Helvetica,Arial,sans-serif}
14
- body>*{padding-left: 20px;padding-right: 20px;}
15
- a{color:#0e9fd6;}
16
- h2,h3,footer {color: #fff;background-color: #0e9fd6;margin: 0;padding: 20px;}
17
- ul,ol{margin-left: 20px;}
18
- footer a{color:#fff;}
19
- </style>
20
- </head>
21
- <body>
22
- <h2>The Events Calendar (and Event Aggregator) | Site Owner Data Collection Statement</h2>
23
- <p><a href="https://m.tri.be/1a3x">Modern Tribe, Inc</a> goes to great lengths to protect your data. To that end, you may review our <a href="https://m.tri.be/1a3y">Privacy Policy</a> at any time.</p>
24
- <p>We understand that you may have similar commitments to your own users, so we're providing the following data policy statement for your use.</p>
25
- <p>You can use this statement to help your users better understand what types of data may be collected through the direct usage of our plugins, including The Events Calendar plugin and Event Aggregator (a service we provide that you can optionally configure The Events Calendar to connect with).</p>
26
- <p>We hope that the statement will be useful to you when you form your own policy statements and you are permitted to copy and amend it as you see fit. However, it’s important to note that:</p>
27
- <ul>
28
- <li>We strongly recommend you consult with your Attorney before using it</li>
29
- <li>We cannot provide any support or guidance with regards to your own policy statements and data collection methods</li>
30
- </ul>
31
- <h3>Policy Statement</h3>
32
- <p>Through the usage of The Events Calendar plugin, the following information may be collected and stored within your website’s database:</p>
33
- <ul>
34
- <li>Venue information: name, address, city, country, state, postal code, phone, website</li>
35
- <li>Organizer information: name, phone, website, email</li>
36
- <li>Event information: website, cost, description, date, time, image</li>
37
- <li>Other: API keys if supplied (including for Google Maps)</li>
38
- </ul>
39
- <p>If you also use Event Aggregator via The Events Calendar, the following information may be collected and stored within your website’s database:</p>
40
- <ul>
41
- <li>All data present within a CSV or ICS file and external URLs (for events, venues, organizers, and tickets)</li>
42
- <li>The data that Event Aggregator can import is the same independent of import origin</li>
43
- <li>Import origin data (URL from where events are being imported - such as Eventbrite, MeetUp, other compatible URL sources, and more, which can include similar or same data as listed above)</li>
44
- <li>Facebook and Meetup API keys</li>
45
- </ul>
46
- <footer>©2018 <a href="https://m.tri.be/1a3x">Modern Tribe Inc.</a></footer>
47
- </body>
48
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/Tribe/Admin/Notice/Marketing.php CHANGED
@@ -7,6 +7,7 @@ class Tribe__Events__Admin__Notice__Marketing {
7
  * Register marketing notices.
8
  *
9
  * @since 4.6.17
 
10
  */
11
  public function hook() {
12
  tribe_notice(
@@ -31,6 +32,17 @@ class Tribe__Events__Admin__Notice__Marketing {
31
  array( $this, 'should_display_gutenberg' )
32
  );
33
 
 
 
 
 
 
 
 
 
 
 
 
34
  }
35
 
36
  /**
@@ -60,6 +72,21 @@ class Tribe__Events__Admin__Notice__Marketing {
60
  return $today >= $start && $today <= $end;
61
  }
62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  /**
64
  * HTML for the notice for sites using UTC Timezones.
65
  *
@@ -117,4 +144,24 @@ class Tribe__Events__Admin__Notice__Marketing {
117
  return $notice;
118
  }
119
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  }
7
  * Register marketing notices.
8
  *
9
  * @since 4.6.17
10
+ * @since TBD - add Virtual Events Notice.
11
  */
12
  public function hook() {
13
  tribe_notice(
32
  array( $this, 'should_display_gutenberg' )
33
  );
34
 
35
+ tribe_notice(
36
+ 'tribe-virtual-events',
37
+ array( $this, 'virtual_events_notice' ),
38
+ array(
39
+ 'dismiss' => 1,
40
+ 'type' => 'warning',
41
+ 'wrap' => 'p',
42
+ ),
43
+ array( $this, 'should_display_virtual_events' )
44
+ );
45
+
46
  }
47
 
48
  /**
72
  return $today >= $start && $today <= $end;
73
  }
74
 
75
+ /**
76
+ * Check if we should display the Virtual Events Notice.
77
+ *
78
+ * @since TBD
79
+ *
80
+ * @return bool Whether to display the notice.
81
+ */
82
+ public function should_display_virtual_events() {
83
+ $today = date_create()->format( 'Y-m-d' );
84
+ $start = '2020-06-21';
85
+ $end = '2020-07-08';
86
+
87
+ return $today >= $start && $today <= $end;
88
+ }
89
+
90
  /**
91
  * HTML for the notice for sites using UTC Timezones.
92
  *
144
  return $notice;
145
  }
146
 
147
+ /**
148
+ * Announcement Notice for Virtual Events.
149
+ *
150
+ * @since TBD
151
+ *
152
+ * @return string The notice html.
153
+ */
154
+ public function virtual_events_notice() {
155
+ $link = sprintf(
156
+ '<a href="%1$s" target="_blank">%2$s</a>',
157
+ esc_url( 'http://m.tri.be/1aky' ),
158
+ esc_html__( 'Virtual Events for The Events Calendar', 'the-events-calendar' )
159
+ );
160
+
161
+ return sprintf(
162
+ /* translators: the placeholder is for the link to the Virtual Events for The Events Calendar information and download page. */
163
+ _x( '🎉 Just launched: %s! Identify events as virtual events, Zoom integration, hidden livestream links and more.', 'Virtual Events Announcement Banner', 'the-events-calendar' ),
164
+ $link
165
+ );
166
+ }
167
  }
src/Tribe/Aggregator/API/Import.php CHANGED
@@ -107,9 +107,21 @@ class Tribe__Events__Aggregator__API__Import extends Tribe__Events__Aggregator__
107
  * @return stdClass|WP_Error
108
  */
109
  public function create( $args ) {
110
- $response = $this->service->post_import( $args );
 
111
 
112
- return $response;
 
 
 
 
 
 
 
 
 
 
 
113
  }
114
 
115
  /**
107
  * @return stdClass|WP_Error
108
  */
109
  public function create( $args ) {
110
+ return $this->service->post_import( $args );
111
+ }
112
 
113
+ /**
114
+ * Update the details of an existing import into EA server.
115
+ *
116
+ * @since TBD
117
+ *
118
+ * @param $import_id string The ID of the import to be updated.
119
+ * @param $args array An key, value array representing the values to update on the EA server.
120
+ *
121
+ * @return object|stdClass|string|WP_Error Response from EA server.
122
+ */
123
+ public function update( $import_id, $args ) {
124
+ return $this->service->update_import( $import_id, $args );
125
  }
126
 
127
  /**
src/Tribe/Aggregator/Page.php CHANGED
@@ -310,12 +310,13 @@ class Tribe__Events__Aggregator__Page {
310
  /**
311
  * A very simple method to include a Aggregator Template, allowing filtering and additions using hooks.
312
  *
313
- * @param string $name Which file we are talking about including
314
- * @param array $data Any context data you need to expose to this file
315
- * @param boolean $echo If we should also print the Template
 
316
  * @return string Final Content HTML
317
  */
318
- public function template( $name, $data = array(), $echo = true ) {
319
  // Clean this Variable
320
  $name = array_map( 'sanitize_title_with_dashes', (array) explode( '/', $name ) );
321
 
@@ -325,9 +326,13 @@ class Tribe__Events__Aggregator__Page {
325
  /**
326
  * A more Specific Filter that will include the template name
327
  *
328
- * @param string $file Complete path to include the PHP File
329
- * @param string $name Template name
330
- * @param array $data The Data that will be used on this template
 
 
 
 
331
  */
332
  $file = apply_filters( 'tribe_aggregator_template_file', $file, $name, $data );
333
 
310
  /**
311
  * A very simple method to include a Aggregator Template, allowing filtering and additions using hooks.
312
  *
313
+ * @param string $name Which file we are talking about including-
314
+ * @param array $data Any context data you need to expose to this file.
315
+ * @param boolean $echo If we should also print the Template.
316
+ *
317
  * @return string Final Content HTML
318
  */
319
+ public function template( $name, $data = [], $echo = true ) {
320
  // Clean this Variable
321
  $name = array_map( 'sanitize_title_with_dashes', (array) explode( '/', $name ) );
322
 
326
  /**
327
  * A more Specific Filter that will include the template name
328
  *
329
+ * @since 4.3
330
+ *
331
+ * @param string $file Complete path to include the PHP File.
332
+ * @param array $name Template name.
333
+ * @param array $data The Data that will be used on this template.
334
+ *
335
+ * @return string $file Complete path to include the PHP File
336
  */
337
  $file = apply_filters( 'tribe_aggregator_template_file', $file, $name, $data );
338
 
src/Tribe/Aggregator/Record/Abstract.php CHANGED
@@ -2539,15 +2539,21 @@ abstract class Tribe__Events__Aggregator__Record__Abstract {
2539
  * @return bool Whether the image was attached to the event or not.
2540
  */
2541
  public function import_event_image( $event, $activity ) {
 
 
 
 
 
2542
  /**
2543
  * Whether the event image should be imported and attached or not.
2544
  *
2545
  * @since 4.6.9
2546
  *
2547
- * @param bool $import_event_image Defaults to `true`
2548
- * @param array $event The event post ID
2549
- * @param string $image_url The URL to the image that should be imported
2550
- * @param Tribe__Events__Aggregator__Record__Activity $activity The importer activity so far
 
2551
  */
2552
  $import_event_image = apply_filters( 'tribe_aggregator_import_event_image', true, $event, $activity );
2553
 
@@ -2555,10 +2561,6 @@ abstract class Tribe__Events__Aggregator__Record__Abstract {
2555
  return false;
2556
  }
2557
 
2558
- if ( empty( $event['ID'] ) || ! tribe_is_event( $event['ID'] ) ) {
2559
- return false;
2560
- }
2561
-
2562
  if ( is_object( $event['image'] ) ) {
2563
  $image = $this->import_aggregator_image( $event );
2564
  } else {
2539
  * @return bool Whether the image was attached to the event or not.
2540
  */
2541
  public function import_event_image( $event, $activity ) {
2542
+ // If this is not a valid event no need for additional work.
2543
+ if ( empty( $event['ID'] ) || ! tribe_is_event( $event['ID'] ) ) {
2544
+ return false;
2545
+ }
2546
+
2547
  /**
2548
  * Whether the event image should be imported and attached or not.
2549
  *
2550
  * @since 4.6.9
2551
  *
2552
+ * @param bool $import_event_image Defaults to `true`.
2553
+ * @param array $event The event post ID.
2554
+ * @param Tribe__Events__Aggregator__Record__Activity $activity The importer activity so far.
2555
+ *
2556
+ * @return bool Either to import or not the image of the event.
2557
  */
2558
  $import_event_image = apply_filters( 'tribe_aggregator_import_event_image', true, $event, $activity );
2559
 
2561
  return false;
2562
  }
2563
 
 
 
 
 
2564
  if ( is_object( $event['image'] ) ) {
2565
  $image = $this->import_aggregator_image( $event );
2566
  } else {
src/Tribe/Aggregator/Record/Activity.php CHANGED
@@ -42,11 +42,12 @@ class Tribe__Events__Aggregator__Record__Activity {
42
  * Creates an easy way to test valid Actions
43
  * @var array
44
  */
45
- private static $actions = array(
46
- 'created' => array(),
47
- 'updated' => array(),
48
- 'skipped' => array(),
49
- );
 
50
 
51
  public function __construct() {
52
  // The items are registered on the wakeup to avoid saving unnecessary data
42
  * Creates an easy way to test valid Actions
43
  * @var array
44
  */
45
+ private static $actions = [
46
+ 'created' => [],
47
+ 'updated' => [],
48
+ 'skipped' => [],
49
+ 'scheduled' => [],
50
+ ];
51
 
52
  public function __construct() {
53
  // The items are registered on the wakeup to avoid saving unnecessary data
src/Tribe/Aggregator/Record/CSV.php CHANGED
@@ -1,6 +1,10 @@
1
  <?php
2
 
 
 
3
  class Tribe__Events__Aggregator__Record__CSV extends Tribe__Events__Aggregator__Record__Abstract {
 
 
4
  private $state = '';
5
  private $output = '';
6
  private $messages = array();
@@ -341,6 +345,13 @@ class Tribe__Events__Aggregator__Record__CSV extends Tribe__Events__Aggregator__
341
  }
342
 
343
  public function continue_import() {
 
 
 
 
 
 
 
344
  $importer = $this->get_importer();
345
  $importer->is_aggregator = true;
346
  $importer->aggregator_record = $this;
@@ -399,6 +410,9 @@ class Tribe__Events__Aggregator__Record__CSV extends Tribe__Events__Aggregator__
399
  $new_offset = $importer->import_complete() ? -1 : $importer->get_last_completed_row();
400
  update_option( 'tribe_events_importer_offset', $new_offset );
401
 
 
 
 
402
  if ( -1 === $new_offset ) {
403
  do_action( 'tribe_events_csv_import_complete' );
404
  }
@@ -458,4 +472,4 @@ class Tribe__Events__Aggregator__Record__CSV extends Tribe__Events__Aggregator__
458
  private function clean_up_after_import() {
459
  Tribe__Events__Importer__File_Uploader::clear_old_files();
460
  }
461
- }
1
  <?php
2
 
3
+ use Tribe\Traits\With_DB_Lock;
4
+
5
  class Tribe__Events__Aggregator__Record__CSV extends Tribe__Events__Aggregator__Record__Abstract {
6
+ use With_DB_Lock;
7
+
8
  private $state = '';
9
  private $output = '';
10
  private $messages = array();
345
  }
346
 
347
  public function continue_import() {
348
+
349
+ $lock_key = 'tribe_ea_csv_import_' . $this->id;
350
+
351
+ if ( ! $this->acquire_db_lock( $lock_key ) ) {
352
+ return $this->meta['activity'];
353
+ }
354
+
355
  $importer = $this->get_importer();
356
  $importer->is_aggregator = true;
357
  $importer->aggregator_record = $this;
410
  $new_offset = $importer->import_complete() ? -1 : $importer->get_last_completed_row();
411
  update_option( 'tribe_events_importer_offset', $new_offset );
412
 
413
+ $lock_key = 'tribe_ea_csv_import_' . $this->id;
414
+ $this->release_db_lock( $lock_key );
415
+
416
  if ( -1 === $new_offset ) {
417
  do_action( 'tribe_events_csv_import_complete' );
418
  }
472
  private function clean_up_after_import() {
473
  Tribe__Events__Importer__File_Uploader::clear_old_files();
474
  }
475
+ }
src/Tribe/Aggregator/Service.php CHANGED
@@ -526,6 +526,50 @@ class Tribe__Events__Aggregator__Service {
526
  return $this->post( 'import', $args );
527
  }
528
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
529
  /**
530
  * Fetches an image from the Event Aggregator service
531
  *
526
  return $this->post( 'import', $args );
527
  }
528
 
529
+ /**
530
+ * Update the details of an existing import into EA server.
531
+ *
532
+ * @since TBD
533
+ *
534
+ * @param $import_id string The ID of the import to be updated.
535
+ * @param $args array An key, value array representing the values to update on the EA server.
536
+ *
537
+ * @return object|stdClass|string|WP_Error Response from EA server.
538
+ */
539
+ public function update_import( $import_id, $args ) {
540
+ $api = $this->api();
541
+
542
+ // if the user doesn't have a license key, don't bother hitting the service.
543
+ if ( is_wp_error( $api ) ) {
544
+ return $api;
545
+ }
546
+
547
+ /**
548
+ * Allow any external sources (plugins) to add licenses attached to the call to the EA server as part
549
+ * of an array on licenses, useful when you have different products accessing EA server.
550
+ *
551
+ * @since TBD
552
+ *
553
+ * @param bool|string $pue_key PUE key
554
+ * @param array $args Arguments to queue the import
555
+ * @param self $record Which record we are dealing with
556
+ */
557
+ $licenses = apply_filters( 'tribe_aggregator_service_put_pue_licenses', [], $args, $this );
558
+
559
+ // If we have a key we add that to the Arguments.
560
+ if ( ! empty( $licenses ) ) {
561
+ $args['licenses'] = $licenses;
562
+ }
563
+
564
+ return $this->post(
565
+ "import/{$import_id}",
566
+ [
567
+ 'body' => $args,
568
+ 'method' => 'PUT',
569
+ ]
570
+ );
571
+ }
572
+
573
  /**
574
  * Fetches an image from the Event Aggregator service
575
  *
src/Tribe/Aggregator/Tabs/New.php CHANGED
@@ -284,6 +284,20 @@ class Tribe__Events__Aggregator__Tabs__New extends Tribe__Events__Aggregator__Ta
284
  );
285
  }
286
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
  if ( $queue && ! $messages ) {
288
  $messages['success'][] = sprintf(
289
  __( 'No %1$s were imported or updated.', 'the-events-calendar' ),
284
  );
285
  }
286
 
287
+ $images_scheduled = $queue->activity->get( 'images', 'scheduled' );
288
+ if ( ! empty( $images_scheduled ) ) {
289
+ $messages['success'][] = sprintf(
290
+ // translators: %1$d is replaced with a number of scheduled images.
291
+ _n(
292
+ '%1$d new image was scheduled for import.',
293
+ '%1$d new images were scheduled for import.',
294
+ $queue->activity->count( 'images', 'scheduled' ),
295
+ 'the-events-calendar'
296
+ ),
297
+ $queue->activity->count( 'images', 'scheduled' )
298
+ );
299
+ }
300
+
301
  if ( $queue && ! $messages ) {
302
  $messages['success'][] = sprintf(
303
  __( 'No %1$s were imported or updated.', 'the-events-calendar' ),
src/Tribe/Main.php CHANGED
@@ -5,6 +5,8 @@
5
 
6
  // Don't load directly
7
 
 
 
8
  if ( ! defined( 'ABSPATH' ) ) {
9
  die( '-1' );
10
  }
@@ -33,7 +35,7 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
33
  const VENUE_POST_TYPE = 'tribe_venue';
34
  const ORGANIZER_POST_TYPE = 'tribe_organizer';
35
 
36
- const VERSION = '5.1.3';
37
 
38
  /**
39
  * Min Pro Addon
@@ -632,10 +634,16 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
632
  tribe_singleton( 'tec.customizer.widget', new Tribe__Events__Customizer__Widget() );
633
  }
634
 
 
 
 
635
  /**
636
  * Allows other plugins and services to override/change the bound implementations.
637
  */
638
  do_action( 'tribe_events_bound_implementations' );
 
 
 
639
  }
640
 
641
  /**
5
 
6
  // Don't load directly
7
 
8
+ use Tribe\DB_Lock;
9
+
10
  if ( ! defined( 'ABSPATH' ) ) {
11
  die( '-1' );
12
  }
35
  const VENUE_POST_TYPE = 'tribe_venue';
36
  const ORGANIZER_POST_TYPE = 'tribe_organizer';
37
 
38
+ const VERSION = '5.1.4';
39
 
40
  /**
41
  * Min Pro Addon
634
  tribe_singleton( 'tec.customizer.widget', new Tribe__Events__Customizer__Widget() );
635
  }
636
 
637
+ // First boot.
638
+ tribe_register_provider( Tribe\Events\Service_Providers\First_Boot::class );
639
+
640
  /**
641
  * Allows other plugins and services to override/change the bound implementations.
642
  */
643
  do_action( 'tribe_events_bound_implementations' );
644
+
645
+ // Database locks.
646
+ tribe_singleton( 'db-lock', DB_Lock::class );
647
  }
648
 
649
  /**
src/Tribe/Service_Providers/First_Boot.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Handles the set up of The Events Calendar plugin on first boot (fresh install) only.
4
+ *
5
+ * In place of scattering defaults in redundant checks in the code, this provider should group anything
6
+ * that fits into a "fresh install".
7
+ * The provider will not hook any filter if The Events Calendar did init already.
8
+ *
9
+ * @since TBD
10
+ *
11
+ * @package Tribe\Events\Service_Providers
12
+ */
13
+
14
+ namespace Tribe\Events\Service_Providers;
15
+
16
+ /**
17
+ * Class First_Boot
18
+ *
19
+ * @since TBD
20
+ *
21
+ * @package Tribe\Events\Service_Providers
22
+ */
23
+ class First_Boot extends \tad_DI52_ServiceProvider {
24
+
25
+ /**
26
+ * Hooks the filters required to set up The Events Calendar after a fresh install.
27
+ *
28
+ * @since TBD
29
+ */
30
+ public function register() {
31
+ $options = \Tribe__Settings_Manager::get_options();
32
+
33
+ if ( ! empty( $options['did_init'] ) ) {
34
+ // If we did init already, bail.
35
+ return;
36
+ }
37
+
38
+ add_action( 'tribe_events_bound_implementations', [ $this, 'set_default_options' ] );
39
+
40
+ /**
41
+ * Fires on The Events Calendar first boot.
42
+ *
43
+ * @since TBD
44
+ */
45
+ do_action( 'tribe_events_first_boot' );
46
+ }
47
+
48
+ /**
49
+ * Sets up The Events Calendar default options on first boot.
50
+ *
51
+ * @since TBD
52
+ */
53
+ public function set_default_options() {
54
+ $options = \Tribe__Settings_Manager::get_options();
55
+
56
+ $options['did_init'] = true;
57
+
58
+ if ( ! isset( $options['tribeEventsTemplate'] ) ) {
59
+ // Set the Events Template default to "Default Events Template".
60
+ $options['tribeEventsTemplate'] = '';
61
+ }
62
+
63
+ if ( ! isset( $options['tribeEnableViews'] ) ) {
64
+ // Set the Enabled Views to List, Month, and Day.
65
+ $options['tribeEnableViews'] = [ 'list', 'month', 'day' ];
66
+ }
67
+
68
+ if ( ! isset( $options['viewOption'] ) ) {
69
+ // Set the Default View to List.
70
+ $options['viewOption'] = 'list';
71
+ }
72
+
73
+ \Tribe__Settings_Manager::set_options( $options );
74
+ }
75
+ }
src/Tribe/Template/Single_Event.php CHANGED
@@ -35,6 +35,8 @@ if ( ! class_exists( 'Tribe__Events__Template__Single_Event' ) ) {
35
  // Print JSON-LD markup on the `wp_head`
36
  add_action( 'wp_head', array( Tribe__Events__JSON_LD__Event::instance(), 'markup' ) );
37
 
 
 
38
  }
39
 
40
  /**
@@ -119,5 +121,24 @@ if ( ! class_exists( 'Tribe__Events__Template__Single_Event' ) ) {
119
  Tribe__Notices::set_notice( 'event-past', sprintf( esc_html__( 'This %s has passed.', 'the-events-calendar' ), $events_label_singular_lowercase ) );
120
  }
121
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  }
123
  }
35
  // Print JSON-LD markup on the `wp_head`
36
  add_action( 'wp_head', array( Tribe__Events__JSON_LD__Event::instance(), 'markup' ) );
37
 
38
+ // Add hook for body classes.
39
+ add_filter( 'tribe_body_classes_should_add', [ $this, 'body_classes_should_add' ], 10, 2 );
40
  }
41
 
42
  /**
121
  Tribe__Notices::set_notice( 'event-past', sprintf( esc_html__( 'This %s has passed.', 'the-events-calendar' ), $events_label_singular_lowercase ) );
122
  }
123
  }
124
+
125
+ /**
126
+ * Hook into filter and add our logic for adding body classes.
127
+ *
128
+ * @since TBD
129
+ *
130
+ * @param boolean $add Whether to add classes or not.
131
+ * @param string $queue The queue we want to get 'admin', 'display', 'all'.
132
+ *
133
+ * @return boolean Whether body classes should be added or not.
134
+ */
135
+ public function body_classes_should_add( $add, $queue ) {
136
+ // If we're on the front end and doing an event query, add classes.
137
+ if ( 'admin' !== $queue && tribe_is_event_query() ) {
138
+ return true;
139
+ }
140
+
141
+ return $add;
142
+ }
143
  }
144
  }
src/Tribe/Views/V2/Hooks.php CHANGED
@@ -55,6 +55,7 @@ class Hooks extends \tad_DI52_ServiceProvider {
55
  protected function add_actions() {
56
  add_action( 'rest_api_init', [ $this, 'register_rest_endpoints' ] );
57
  add_action( 'tribe_common_loaded', [ $this, 'on_tribe_common_loaded' ], 1 );
 
58
  add_action( 'wp_head', [ $this, 'on_wp_head' ], 1000 );
59
  add_action( 'tribe_events_pre_rewrite', [ $this, 'on_tribe_events_pre_rewrite' ] );
60
  add_action( 'wp_enqueue_scripts', [ $this, 'action_disable_assets_v1' ], 0 );
@@ -76,7 +77,9 @@ class Hooks extends \tad_DI52_ServiceProvider {
76
  add_filter( 'template_include', [ $this, 'filter_template_include' ], 50 );
77
  add_filter( 'embed_template', [ $this, 'filter_template_include' ], 50 );
78
  add_filter( 'posts_pre_query', [ $this, 'filter_posts_pre_query' ], 20, 2 );
79
- add_filter( 'body_class', [ $this, 'filter_body_class' ] );
 
 
80
  add_filter( 'query_vars', [ $this, 'filter_query_vars' ], 15 );
81
  add_filter( 'tribe_rewrite_canonical_query_args', [ $this, 'filter_map_canonical_query_args' ], 15, 3 );
82
  add_filter( 'admin_post_thumbnail_html', [ $this, 'filter_admin_post_thumbnail_html' ] );
@@ -113,7 +116,7 @@ class Hooks extends \tad_DI52_ServiceProvider {
113
 
114
  /**
115
  * Includes includes edge cases for filtering when we need to manually overwrite theme's read
116
- * more link when excerpt is cut programatically.
117
  *
118
  * @see tribe_events_get_the_excerpt
119
  *
@@ -299,13 +302,64 @@ class Hooks extends \tad_DI52_ServiceProvider {
299
  *
300
  * @return array $classes
301
  */
302
- public function filter_body_class( $classes ) {
303
- $classes = $this->container->make( Theme_Compatibility::class )->filter_add_body_classes( $classes );
304
  $classes = $this->container->make( Template_Bootstrap::class )->filter_add_body_classes( $classes );
305
 
306
  return $classes;
307
  }
308
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
309
  /**
310
  * Filter the plural events label for Featured V2 Views.
311
  *
@@ -435,13 +489,23 @@ class Hooks extends \tad_DI52_ServiceProvider {
435
  *
436
  * @since 4.9.13
437
  *
438
- * @param mixed $redirect_url URL which we will redirect to.
 
 
 
439
  *
440
  * @return string A redirection URL, or `false` to prevent redirection.
441
  */
442
  public function filter_redirect_canonical( $redirect_url = null, $original_url = null ) {
443
- if ( trailingslashit( $original_url ) === trailingslashit( $redirect_url ) ) {
444
- return $redirect_url;
 
 
 
 
 
 
 
445
  }
446
 
447
  $context = tribe_context();
55
  protected function add_actions() {
56
  add_action( 'rest_api_init', [ $this, 'register_rest_endpoints' ] );
57
  add_action( 'tribe_common_loaded', [ $this, 'on_tribe_common_loaded' ], 1 );
58
+ add_action( 'parse_query', [ $this, 'add_body_classes' ], 55 );
59
  add_action( 'wp_head', [ $this, 'on_wp_head' ], 1000 );
60
  add_action( 'tribe_events_pre_rewrite', [ $this, 'on_tribe_events_pre_rewrite' ] );
61
  add_action( 'wp_enqueue_scripts', [ $this, 'action_disable_assets_v1' ], 0 );
77
  add_filter( 'template_include', [ $this, 'filter_template_include' ], 50 );
78
  add_filter( 'embed_template', [ $this, 'filter_template_include' ], 50 );
79
  add_filter( 'posts_pre_query', [ $this, 'filter_posts_pre_query' ], 20, 2 );
80
+ add_filter( 'body_class', [ $this, 'filter_body_classes' ] );
81
+ add_filter( 'tribe_body_class_should_add_to_queue', [ $this, 'body_class_should_add_to_queue' ], 10, 3 );
82
+ add_filter( 'tribe_body_classes_should_add', [ $this, 'body_classes_should_add' ], 10, 3 );
83
  add_filter( 'query_vars', [ $this, 'filter_query_vars' ], 15 );
84
  add_filter( 'tribe_rewrite_canonical_query_args', [ $this, 'filter_map_canonical_query_args' ], 15, 3 );
85
  add_filter( 'admin_post_thumbnail_html', [ $this, 'filter_admin_post_thumbnail_html' ] );
116
 
117
  /**
118
  * Includes includes edge cases for filtering when we need to manually overwrite theme's read
119
+ * more link when excerpt is cut programmatically.
120
  *
121
  * @see tribe_events_get_the_excerpt
122
  *
302
  *
303
  * @return array $classes
304
  */
305
+ public function filter_body_classes( $classes ) {
 
306
  $classes = $this->container->make( Template_Bootstrap::class )->filter_add_body_classes( $classes );
307
 
308
  return $classes;
309
  }
310
 
311
+ /**
312
+ * Add body classes.
313
+ *
314
+ * @since TBD
315
+ *
316
+ * @return void
317
+ */
318
+ public function add_body_classes() {
319
+ $this->container->make( Theme_Compatibility::class )->add_body_classes();
320
+ $this->container->make( Template_Bootstrap::class )->add_body_classes();
321
+ }
322
+
323
+ /**
324
+ * Contains hooks to the logic for if this object's classes should be added to the queue.
325
+ *
326
+ * @since TBD
327
+ *
328
+ * @param boolean $add Whether to add the class to the queue or not.
329
+ * @param array $class The array of body class names to add.
330
+ * @param string $queue The queue we want to get 'admin', 'display', 'all'.
331
+ * @return boolean
332
+ */
333
+ public function body_class_should_add_to_queue( $add, $class, $queue ) {
334
+ $add = $this->container->make( Template_Bootstrap::class )->should_add_body_class_to_queue( $add, $class, $queue );
335
+ $add = $this->container->make( Theme_Compatibility::class )->should_add_body_class_to_queue( $add, $class, $queue );
336
+
337
+ return $add;
338
+ }
339
+
340
+ /**
341
+ * Logic for if body classes should be added.
342
+ *
343
+ * @since TBD
344
+ *
345
+ * @param boolean $add Whether to add classes or not.
346
+ * @param string $queue The queue we want to get 'admin', 'display', 'all'.
347
+ *
348
+ * @return boolean Whether to add classes or not.
349
+ */
350
+ public function body_classes_should_add( $add, $queue ) {
351
+ $context = tribe_context();
352
+
353
+ if (
354
+ $context->get( 'event_post_type', false )
355
+ || $context->get( 'shortcode', false )
356
+ ) {
357
+ return true;
358
+ }
359
+
360
+ return $add;
361
+ }
362
+
363
  /**
364
  * Filter the plural events label for Featured V2 Views.
365
  *
489
  *
490
  * @since 4.9.13
491
  *
492
+ * @param mixed $redirect_url URL which we will redirect to.
493
+ * @param string|int $original_url The original URL if this method runs on the `redirect_canonical` filter, else
494
+ * the redirect status (e.g. `301`) if this method runs in the context of the
495
+ * `wp_redirect` filter.
496
  *
497
  * @return string A redirection URL, or `false` to prevent redirection.
498
  */
499
  public function filter_redirect_canonical( $redirect_url = null, $original_url = null ) {
500
+ if ( doing_filter( 'redirect_canonical' ) ) {
501
+ /*
502
+ * If we're not running in the context of the `redirect_canonical` filter, skip this check
503
+ * as it would happen between a string (`$redirect_url`) and an integer (the redirect HTTP
504
+ * status code).
505
+ */
506
+ if ( trailingslashit( $original_url ) === trailingslashit( $redirect_url ) ) {
507
+ return $redirect_url;
508
+ }
509
  }
510
 
511
  $context = tribe_context();
src/Tribe/Views/V2/Template/Page.php CHANGED
@@ -360,12 +360,12 @@ class Page {
360
  $should_hijack = false;
361
  }
362
 
363
- // Dont hijack event based.
364
  if ( 'event' === tribe( Template_Bootstrap::class )->get_template_setting() ) {
365
  $should_hijack = false;
366
  }
367
 
368
- // We dont want the main Query.
369
  if ( ! $query->is_main_query() ) {
370
  $should_hijack = false;
371
  }
360
  $should_hijack = false;
361
  }
362
 
363
+ // Don't hijack event based.
364
  if ( 'event' === tribe( Template_Bootstrap::class )->get_template_setting() ) {
365
  $should_hijack = false;
366
  }
367
 
368
+ // We don't want the main Query.
369
  if ( ! $query->is_main_query() ) {
370
  $should_hijack = false;
371
  }
src/Tribe/Views/V2/Template_Bootstrap.php CHANGED
@@ -10,6 +10,7 @@
10
  */
11
  namespace Tribe\Events\Views\V2;
12
 
 
13
  use Tribe__Events__Main as TEC;
14
  use Tribe__Events__Templates as V1_Event_Templates;
15
  use Tribe__Notices;
@@ -198,7 +199,7 @@ class Template_Bootstrap {
198
  *
199
  * @since 5.0.0
200
  *
201
- * @param string $pre_html Allow pre-filtering the HTML that we will boostrap.
202
  * @param string $view_slug The slug of the View that will be built, based on the context.
203
  * @param \Tribe__Context $context Tribe context used to setup the view.
204
  * @param \WP_Query $query The current WP Query object.
@@ -334,7 +335,7 @@ class Template_Bootstrap {
334
  *
335
  * @param string $template The template located by WordPress.
336
  *
337
- * @return string Path to the File that initalizes the template
338
  */
339
  public function filter_template_include( $template ) {
340
  $query = tribe_get_global_query_object();
@@ -371,23 +372,61 @@ class Template_Bootstrap {
371
  $setting = $this->get_template_setting();
372
  $template = $this->get_template_object()->get_path();
373
 
374
- if ( 'page' === $setting ) {
375
- $classes[] = 'page-template-' . sanitize_title( $template );
 
 
 
376
 
377
- if ( ! is_tax() ) {
378
- $key = array_search( 'archive', $classes );
379
 
380
- if ( false !== $key ) {
381
- unset( $classes[ $key ] );
382
- }
383
  }
384
- } else {
385
- $classes[] = 'tribe-events-page-template';
386
  }
387
 
388
  return $classes;
389
  }
390
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
391
  /**
392
  * Filter the template file in case we're in single event
393
  * and we need to use the theme overrides.
@@ -407,7 +446,7 @@ class Template_Bootstrap {
407
 
408
  $template_name = end( $name );
409
 
410
- // Bail when we dont are not loading 'default-template'.
411
  if ( 'default-template' !== $template_name ) {
412
  return $file;
413
  }
10
  */
11
  namespace Tribe\Events\Views\V2;
12
 
13
+ use Tribe\Utils\Body_Classes;
14
  use Tribe__Events__Main as TEC;
15
  use Tribe__Events__Templates as V1_Event_Templates;
16
  use Tribe__Notices;
199
  *
200
  * @since 5.0.0
201
  *
202
+ * @param string $pre_html Allow pre-filtering the HTML that we will bootstrap.
203
  * @param string $view_slug The slug of the View that will be built, based on the context.
204
  * @param \Tribe__Context $context Tribe context used to setup the view.
205
  * @param \WP_Query $query The current WP Query object.
335
  *
336
  * @param string $template The template located by WordPress.
337
  *
338
+ * @return string Path to the File that initializes the template
339
  */
340
  public function filter_template_include( $template ) {
341
  $query = tribe_get_global_query_object();
372
  $setting = $this->get_template_setting();
373
  $template = $this->get_template_object()->get_path();
374
 
375
+ if ( 'page' !== $setting ) {
376
+ return $classes;
377
+ }
378
+
379
+ $classes[] = 'page-template-' . sanitize_title( $template );
380
 
381
+ if ( ! is_tax() ) {
382
+ $key = array_search( 'archive', $classes );
383
 
384
+ if ( false !== $key ) {
385
+ unset( $classes[ $key ] );
 
386
  }
 
 
387
  }
388
 
389
  return $classes;
390
  }
391
 
392
+ /**
393
+ * Contains the logic for if this object's classes should be added to the queue.
394
+ *
395
+ * @since TBD
396
+ *
397
+ * @param boolean $add Whether to add the class to the queue or not.
398
+ * @param array $class The array of body class names to add.
399
+ * @param string $queue The queue we want to get 'admin', 'display', 'all'.
400
+
401
+ * @return boolean Whether body classes should be added or not.
402
+ */
403
+ public function should_add_body_class_to_queue( $add, $class, $queue ) {
404
+ if ( 'admin' === $queue ) {
405
+ return $add;
406
+ }
407
+
408
+ if ( 'tribe-events-page-template' === $class ) {
409
+ $setting = $this->get_template_setting();
410
+
411
+ if ( 'page' !== $setting ) {
412
+ return true;
413
+ }
414
+ }
415
+
416
+ return $add;
417
+ }
418
+
419
+ /**
420
+ * Add body classes.
421
+ *
422
+ * @since TBD
423
+ *
424
+ * @return void
425
+ */
426
+ public function add_body_classes() {
427
+ tribe( Body_Classes::class )->add_class( 'tribe-events-page-template' );
428
+ }
429
+
430
  /**
431
  * Filter the template file in case we're in single event
432
  * and we need to use the theme overrides.
446
 
447
  $template_name = end( $name );
448
 
449
+ // Bail when we don't are not loading 'default-template'.
450
  if ( 'default-template' !== $template_name ) {
451
  return $file;
452
  }
src/Tribe/Views/V2/Theme_Compatibility.php CHANGED
@@ -12,6 +12,7 @@ namespace Tribe\Events\Views\V2;
12
 
13
  use Tribe\Events\Views\V2\Template_Bootstrap;
14
  use Tribe__Container as Container;
 
15
 
16
  class Theme_Compatibility {
17
  /**
@@ -64,6 +65,8 @@ class Theme_Compatibility {
64
  * @return array $classes
65
  */
66
  public function filter_add_body_classes( array $classes ) {
 
 
67
  if ( ! tribe( Template_Bootstrap::class )->should_load() ) {
68
  return $classes;
69
  }
@@ -75,6 +78,44 @@ class Theme_Compatibility {
75
  return array_merge( $classes, $this->get_body_classes() );
76
  }
77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  /**
79
  * Fetches the correct class strings for theme and child theme if available.
80
  *
@@ -103,15 +144,15 @@ class Theme_Compatibility {
103
  }
104
 
105
  /**
106
- * Returns a list of themes registred for compatibility with our Views.
107
  *
108
  * @since 4.9.4
109
  *
110
- * @return array An array of the themes registred.
111
  */
112
  public function get_registered_themes() {
113
  /**
114
- * Filters the list of themes that are registred for compatibility.
115
  *
116
  * @since 4.9.4
117
  *
12
 
13
  use Tribe\Events\Views\V2\Template_Bootstrap;
14
  use Tribe__Container as Container;
15
+ use Tribe\Utils\Body_Classes;
16
 
17
  class Theme_Compatibility {
18
  /**
65
  * @return array $classes
66
  */
67
  public function filter_add_body_classes( array $classes ) {
68
+ _deprecated_function( __FUNCTION__, 'TBD', 'Theme_Compatibility::add_body_classes()' );
69
+
70
  if ( ! tribe( Template_Bootstrap::class )->should_load() ) {
71
  return $classes;
72
  }
78
  return array_merge( $classes, $this->get_body_classes() );
79
  }
80
 
81
+ /**
82
+ * Contains the logic for if this object's classes should be added to the queue.
83
+ *
84
+ * @since TBD
85
+ *
86
+ * @param boolean $add Whether to add the class to the queue or not.
87
+ * @param array $class The array of body class names to add.
88
+ * @param string $queue The queue we want to get 'admin', 'display', 'all'.
89
+
90
+ * @return boolean Whether body classes should be added or not.
91
+ */
92
+ public function should_add_body_class_to_queue( $add, $class, $queue ) {
93
+ if (
94
+ 'admin' === $queue
95
+ || ! tribe( Template_Bootstrap::class )->should_load()
96
+ || ! $this->is_compatibility_required()
97
+ ) {
98
+ return $add;
99
+ }
100
+
101
+ if ( in_array( $class, $this->get_body_classes() ) ) {
102
+ return true;
103
+ }
104
+
105
+ return $add;
106
+ }
107
+
108
+ /**
109
+ * Add body classes.
110
+ *
111
+ * @since TBD
112
+ *
113
+ * @return void
114
+ */
115
+ public function add_body_classes() {
116
+ tribe( Body_Classes::class )->add_classes( $this->get_body_classes() );
117
+ }
118
+
119
  /**
120
  * Fetches the correct class strings for theme and child theme if available.
121
  *
144
  }
145
 
146
  /**
147
+ * Returns a list of themes registered for compatibility with our Views.
148
  *
149
  * @since 4.9.4
150
  *
151
+ * @return array An array of the themes registered.
152
  */
153
  public function get_registered_themes() {
154
  /**
155
+ * Filters the list of themes that are registered for compatibility.
156
  *
157
  * @since 4.9.4
158
  *
src/admin-views/privacy.php CHANGED
@@ -46,9 +46,9 @@ if ( ! defined( 'ABSPATH' ) ) {
46
 
47
  <p class="privacy-policy-tutorial"><strong><?php esc_html_e( 'Suggested text:', 'event-tickets' ); ?></strong></p>
48
 
49
- <p><?php esc_html_e( 'We make use of certain API keys, in order to provide specific features.', 'the-events-calendar' ); ?></p>
50
 
51
- <p><?php esc_html_e( 'These API keys may include the following third party services: Google Maps, Meetup, PayPal, and Eventbrite (API key, auth URL and Client Secret).', 'the-events-calendar' ); ?></p>
52
 
53
  <h3 class="privacy-policy-tutorial"><?php esc_html_e( 'How Long You Retain this Data', 'the-events-calendar' ); ?></h3>
54
 
@@ -62,4 +62,4 @@ if ( ! defined( 'ABSPATH' ) ) {
62
 
63
  <p class="privacy-policy-tutorial"><?php esc_html_e( 'If you have extended our plugin(s) to send data to a third-party service such as Eventbrite, Google Maps, or PayPal, user information may be passed to these external services. These services may be located abroad.', 'the-events-calendar' ); ?></p>
64
 
65
- </div>
46
 
47
  <p class="privacy-policy-tutorial"><strong><?php esc_html_e( 'Suggested text:', 'event-tickets' ); ?></strong></p>
48
 
49
+ <p><?php esc_html_e( 'We make use of certain APIs, in order to provide specific features.', 'the-events-calendar' ); ?></p>
50
 
51
+ <p><?php esc_html_e( 'These APIs may include the following third party services: Google Maps (API key), Meetup (OAuth token), PayPal (email, Client ID, Client Secret), Eventbrite (API key, auth URL, Client Secret), and Zoom (email, Client ID, Client Secret).', 'the-events-calendar' ); ?></p>
52
 
53
  <h3 class="privacy-policy-tutorial"><?php esc_html_e( 'How Long You Retain this Data', 'the-events-calendar' ); ?></h3>
54
 
62
 
63
  <p class="privacy-policy-tutorial"><?php esc_html_e( 'If you have extended our plugin(s) to send data to a third-party service such as Eventbrite, Google Maps, or PayPal, user information may be passed to these external services. These services may be located abroad.', 'the-events-calendar' ); ?></p>
64
 
65
+ </div>
src/functions/template-tags/orm.php CHANGED
@@ -29,7 +29,7 @@ if ( ! function_exists( 'tribe_events' ) ) {
29
  * Filters the map relating event repository slugs to service container bindings.
30
  *
31
  * @since 4.9
32
- * @since 4.9.13 Added additional call arguements support.
33
  *
34
  * @param array $map A map in the shape [ <repository_slug> => <service_name> ]
35
  * @param string $repository The currently requested implementation.
29
  * Filters the map relating event repository slugs to service container bindings.
30
  *
31
  * @since 4.9
32
+ * @since 4.9.13 Added additional call arguments support.
33
  *
34
  * @param array $map A map in the shape [ <repository_slug> => <service_name> ]
35
  * @param string $repository The currently requested implementation.
src/views/modules/bar.php CHANGED
@@ -4,7 +4,7 @@
4
  * Renders our events navigation bar used across our views
5
  *
6
  * $filters and $views variables are loaded in and coming from
7
- * the show funcion in: lib/Bar.php
8
  *
9
  * Override this template in your own theme by creating a file at:
10
  *
4
  * Renders our events navigation bar used across our views
5
  *
6
  * $filters and $views variables are loaded in and coming from
7
+ * the show function in: lib/Bar.php
8
  *
9
  * Override this template in your own theme by creating a file at:
10
  *
the-events-calendar.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Plugin Name: The Events Calendar
4
  * Description: The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events. Beautiful. Solid. Awesome.
5
- * Version: 5.1.3
6
  * Author: Modern Tribe, Inc.
7
  * Author URI: http://m.tri.be/1x
8
  * Text Domain: the-events-calendar
2
  /**
3
  * Plugin Name: The Events Calendar
4
  * Description: The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events. Beautiful. Solid. Awesome.
5
+ * Version: 5.1.4
6
  * Author: Modern Tribe, Inc.
7
  * Author URI: http://m.tri.be/1x
8
  * Text Domain: the-events-calendar
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit23076ebc2cf146f0ef909dd3f78ac31a::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit08ada974fcfe93d170fabf937c6505d7::getLoader();
vendor/composer/autoload_classmap.php CHANGED
@@ -15,6 +15,7 @@ return array(
15
  'Tribe\\Events\\Models\\Post_Types\\Event' => $baseDir . '/src/Tribe/Models/Post_Types/Event.php',
16
  'Tribe\\Events\\Models\\Post_Types\\Venue' => $baseDir . '/src/Tribe/Models/Post_Types/Venue.php',
17
  'Tribe\\Events\\Service_Providers\\Context' => $baseDir . '/src/Tribe/Service_Providers/Context.php',
 
18
  'Tribe\\Events\\Views\\V2\\Assets' => $baseDir . '/src/Tribe/Views/V2/Assets.php',
19
  'Tribe\\Events\\Views\\V2\\Hooks' => $baseDir . '/src/Tribe/Views/V2/Hooks.php',
20
  'Tribe\\Events\\Views\\V2\\Implementation_Error' => $baseDir . '/src/Tribe/Views/V2/Implementation_Error.php',
15
  'Tribe\\Events\\Models\\Post_Types\\Event' => $baseDir . '/src/Tribe/Models/Post_Types/Event.php',
16
  'Tribe\\Events\\Models\\Post_Types\\Venue' => $baseDir . '/src/Tribe/Models/Post_Types/Venue.php',
17
  'Tribe\\Events\\Service_Providers\\Context' => $baseDir . '/src/Tribe/Service_Providers/Context.php',
18
+ 'Tribe\\Events\\Service_Providers\\First_Boot' => $baseDir . '/src/Tribe/Service_Providers/First_Boot.php',
19
  'Tribe\\Events\\Views\\V2\\Assets' => $baseDir . '/src/Tribe/Views/V2/Assets.php',
20
  'Tribe\\Events\\Views\\V2\\Hooks' => $baseDir . '/src/Tribe/Views/V2/Hooks.php',
21
  'Tribe\\Events\\Views\\V2\\Implementation_Error' => $baseDir . '/src/Tribe/Views/V2/Implementation_Error.php',
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit23076ebc2cf146f0ef909dd3f78ac31a
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit23076ebc2cf146f0ef909dd3f78ac31a
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit23076ebc2cf146f0ef909dd3f78ac31a', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit23076ebc2cf146f0ef909dd3f78ac31a', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit23076ebc2cf146f0ef909dd3f78ac31a::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit08ada974fcfe93d170fabf937c6505d7
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit08ada974fcfe93d170fabf937c6505d7', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit08ada974fcfe93d170fabf937c6505d7', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit08ada974fcfe93d170fabf937c6505d7::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit23076ebc2cf146f0ef909dd3f78ac31a
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
@@ -30,6 +30,7 @@ class ComposerStaticInit23076ebc2cf146f0ef909dd3f78ac31a
30
  'Tribe\\Events\\Models\\Post_Types\\Event' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Event.php',
31
  'Tribe\\Events\\Models\\Post_Types\\Venue' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Venue.php',
32
  'Tribe\\Events\\Service_Providers\\Context' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Context.php',
 
33
  'Tribe\\Events\\Views\\V2\\Assets' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Assets.php',
34
  'Tribe\\Events\\Views\\V2\\Hooks' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Hooks.php',
35
  'Tribe\\Events\\Views\\V2\\Implementation_Error' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Implementation_Error.php',
@@ -82,9 +83,9 @@ class ComposerStaticInit23076ebc2cf146f0ef909dd3f78ac31a
82
  public static function getInitializer(ClassLoader $loader)
83
  {
84
  return \Closure::bind(function () use ($loader) {
85
- $loader->prefixLengthsPsr4 = ComposerStaticInit23076ebc2cf146f0ef909dd3f78ac31a::$prefixLengthsPsr4;
86
- $loader->prefixDirsPsr4 = ComposerStaticInit23076ebc2cf146f0ef909dd3f78ac31a::$prefixDirsPsr4;
87
- $loader->classMap = ComposerStaticInit23076ebc2cf146f0ef909dd3f78ac31a::$classMap;
88
 
89
  }, null, ClassLoader::class);
90
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit08ada974fcfe93d170fabf937c6505d7
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
30
  'Tribe\\Events\\Models\\Post_Types\\Event' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Event.php',
31
  'Tribe\\Events\\Models\\Post_Types\\Venue' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Venue.php',
32
  'Tribe\\Events\\Service_Providers\\Context' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Context.php',
33
+ 'Tribe\\Events\\Service_Providers\\First_Boot' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/First_Boot.php',
34
  'Tribe\\Events\\Views\\V2\\Assets' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Assets.php',
35
  'Tribe\\Events\\Views\\V2\\Hooks' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Hooks.php',
36
  'Tribe\\Events\\Views\\V2\\Implementation_Error' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Implementation_Error.php',
83
  public static function getInitializer(ClassLoader $loader)
84
  {
85
  return \Closure::bind(function () use ($loader) {
86
+ $loader->prefixLengthsPsr4 = ComposerStaticInit08ada974fcfe93d170fabf937c6505d7::$prefixLengthsPsr4;
87
+ $loader->prefixDirsPsr4 = ComposerStaticInit08ada974fcfe93d170fabf937c6505d7::$prefixDirsPsr4;
88
+ $loader->classMap = ComposerStaticInit08ada974fcfe93d170fabf937c6505d7::$classMap;
89
 
90
  }, null, ClassLoader::class);
91
  }