The Events Calendar - Version 5.1.0.2

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.0.2
Comparing to
See all releases

Code changes from version 5.6.0 to 5.1.0.2

Files changed (270) hide show
  1. common/lang/tribe-common-af.mo +0 -0
  2. common/lang/tribe-common-ar.mo +0 -0
  3. common/lang/tribe-common-bg_BG.mo +0 -0
  4. common/lang/tribe-common-ca.mo +0 -0
  5. common/lang/tribe-common-cs_CZ.mo +0 -0
  6. common/lang/tribe-common-da_DK.mo +0 -0
  7. common/lang/tribe-common-de_DE.mo +0 -0
  8. common/lang/tribe-common-el.mo +0 -0
  9. common/lang/tribe-common-en_GB.mo +0 -0
  10. common/lang/tribe-common-es_ES.mo +0 -0
  11. common/lang/tribe-common-et.mo +0 -0
  12. common/lang/tribe-common-fi.mo +0 -0
  13. common/lang/tribe-common-fr_CA.mo +0 -0
  14. common/lang/tribe-common-fr_FR.mo +0 -0
  15. common/lang/tribe-common-hu_HU.mo +0 -0
  16. common/lang/tribe-common-id_ID.mo +0 -0
  17. common/lang/tribe-common-is_IS.mo +0 -0
  18. common/lang/tribe-common-it_IT.mo +0 -0
  19. common/lang/tribe-common-ja.mo +0 -0
  20. common/lang/tribe-common-lt_LT.mo +0 -0
  21. common/lang/tribe-common-lv.mo +0 -0
  22. common/lang/tribe-common-nb_NO.mo +0 -0
  23. common/lang/tribe-common-nl_NL.mo +0 -0
  24. common/lang/tribe-common-pl_PL.mo +0 -0
  25. common/lang/tribe-common-pt_BR.mo +0 -0
  26. common/lang/tribe-common-pt_PT.mo +0 -0
  27. common/lang/tribe-common-ro_RO.mo +0 -0
  28. common/lang/tribe-common-ru_RU.mo +0 -0
  29. common/lang/tribe-common-sk_SK.mo +0 -0
  30. common/lang/tribe-common-sl_SI.mo +0 -0
  31. common/lang/tribe-common-sr_RS.mo +0 -0
  32. common/lang/tribe-common-sv_SE.mo +0 -0
  33. common/lang/tribe-common-tr_TR.mo +0 -0
  34. common/lang/tribe-common-zh_CN.mo +0 -0
  35. common/lang/tribe-common-zh_TW.mo +0 -0
  36. common/lang/tribe-common.pot +541 -926
  37. common/node_modules/mt-a11y-dialog/a11y-dialog.min.js +0 -1
  38. common/src/Tribe/Admin/Activation_Page.php +16 -51
  39. common/src/Tribe/Admin/Help_Page.php +110 -133
  40. common/src/Tribe/Admin/Live_Date_Preview.php +5 -5
  41. common/src/Tribe/Admin/Notice/Marketing.php +116 -87
  42. common/src/Tribe/Admin/Notice/Php_Version.php +4 -4
  43. common/src/Tribe/Admin/Notice/Plugin_Download.php +8 -8
  44. common/src/Tribe/Admin/Notice/Plugin_Upgrade_Notice.php +1 -1
  45. common/src/Tribe/Admin/Notice/WP_Version.php +0 -87
  46. common/src/Tribe/Admin/Notices.php +72 -177
  47. common/src/Tribe/Ajax/Dropdown.php +41 -131
  48. common/src/Tribe/Ajax/Operations.php +2 -2
  49. common/src/Tribe/App_Shop.php +25 -175
  50. common/src/Tribe/Asset/Data.php +67 -67
  51. common/src/Tribe/Assets.php +40 -204
  52. common/src/Tribe/Assets_Pipeline.php +4 -29
  53. common/src/Tribe/Autoloader.php +6 -23
  54. common/src/Tribe/Cache.php +8 -48
  55. common/src/Tribe/Cache_Listener.php +139 -182
  56. common/src/Tribe/Changelog_Reader.php +2 -2
  57. common/src/Tribe/Context.php +18 -37
  58. common/src/Tribe/Context/locations.php +0 -16
  59. common/src/Tribe/Cost_Utils.php +22 -27
  60. common/src/Tribe/Credits.php +8 -8
  61. common/src/Tribe/Customizer.php +77 -179
  62. common/src/Tribe/Customizer/Control.php +0 -20
  63. common/src/Tribe/Customizer/Controls/Heading.php +0 -52
  64. common/src/Tribe/Customizer/Section.php +10 -10
  65. common/src/Tribe/DB_Lock.php +0 -352
  66. common/src/Tribe/Data.php +1 -1
  67. common/src/Tribe/Date_Utils.php +40 -40
  68. common/src/Tribe/Debug.php +1 -1
  69. common/src/Tribe/Debug_Bar/Panels/Context.php +2 -2
  70. common/src/Tribe/Debug_Bar/Panels/Json_Ld.php +2 -2
  71. common/src/Tribe/Dependency.php +16 -16
  72. common/src/Tribe/Deprecation.php +16 -16
  73. common/src/Tribe/Dialog/View.php +0 -12
  74. common/src/Tribe/Documentation/Swagger/Cost_Details_Definition_Provider.php +15 -15
  75. common/src/Tribe/Documentation/Swagger/Date_Details_Definition_Provider.php +22 -22
  76. common/src/Tribe/Documentation/Swagger/Image_Definition_Provider.php +18 -18
  77. common/src/Tribe/Documentation/Swagger/Image_Size_Definition_Provider.php +17 -17
  78. common/src/Tribe/Documentation/Swagger/Term_Definition_Provider.php +32 -32
  79. common/src/Tribe/Duplicate/Post.php +14 -14
  80. common/src/Tribe/Duplicate/Strategy/Base.php +1 -1
  81. common/src/Tribe/Duplicate/Strategy/Like.php +2 -2
  82. common/src/Tribe/Duplicate/Strategy_Factory.php +3 -3
  83. common/src/Tribe/Editor.php +9 -11
  84. common/src/Tribe/Editor/Assets.php +43 -94
  85. common/src/Tribe/Editor/Blocks/Abstract.php +12 -8
  86. common/src/Tribe/Editor/Blocks/Interface.php +1 -1
  87. common/src/Tribe/Editor/Configuration.php +25 -30
  88. common/src/Tribe/Editor/Meta.php +24 -24
  89. common/src/Tribe/Editor/Provider.php +2 -2
  90. common/src/Tribe/Editor/Utils.php +2 -2
  91. common/src/Tribe/Error.php +4 -4
  92. common/src/Tribe/Exception.php +1 -1
  93. common/src/Tribe/Extension.php +17 -65
  94. common/src/Tribe/Extension_Loader.php +7 -11
  95. common/src/Tribe/Field.php +52 -56
  96. common/src/Tribe/Image/Uploader.php +5 -8
  97. common/src/Tribe/JSON_LD/Abstract.php +14 -14
  98. common/src/Tribe/Languages/Locations.php +8 -32
  99. common/src/Tribe/Languages/Recaptcha_Map.php +2 -2
  100. common/src/Tribe/Log.php +15 -14
  101. common/src/Tribe/Log/Action_Logger.php +1 -1
  102. common/src/Tribe/Log/Admin.php +23 -23
  103. common/src/Tribe/Log/Canonical_Formatter.php +5 -78
  104. common/src/Tribe/Log/File_Logger.php +12 -6
  105. common/src/Tribe/Log/Logger.php +1 -1
  106. common/src/Tribe/Log/Null_Logger.php +4 -4
  107. common/src/Tribe/Log/README.md +29 -29
  108. common/src/Tribe/Log/Service_Provider.php +1 -29
  109. common/src/Tribe/Main.php +12 -20
  110. common/src/Tribe/Meta/Chunker.php +34 -34
  111. common/src/Tribe/Notices.php +1 -1
  112. common/src/Tribe/PUE/Checker.php +6 -14
  113. common/src/Tribe/PUE/Notices.php +16 -16
  114. common/src/Tribe/PUE/Package_Handler.php +1 -1
  115. common/src/Tribe/PUE/Plugin_Info.php +4 -4
  116. common/src/Tribe/PUE/Update_Prevention.php +5 -5
  117. common/src/Tribe/PUE/Utility.php +3 -3
  118. common/src/Tribe/Plugin_Meta_Links.php +8 -8
  119. common/src/Tribe/Plugins.php +0 -32
  120. common/src/Tribe/Plugins_API.php +112 -197
  121. common/src/Tribe/Post_History.php +4 -4
  122. common/src/Tribe/Process/Handler.php +1 -1
  123. common/src/Tribe/Promise.php +3 -3
  124. common/src/Tribe/Promoter/Auth.php +48 -46
  125. common/src/Tribe/Promoter/Connector.php +17 -32
  126. common/src/Tribe/Promoter/PUE.php +7 -5
  127. common/src/Tribe/Promoter/View.php +1 -1
  128. common/src/Tribe/REST/Main.php +3 -3
  129. common/src/Tribe/REST/Post_Repository.php +12 -16
  130. common/src/Tribe/Repository.php +172 -137
  131. common/src/Tribe/Repository/Core_Read_Interface.php +5 -5
  132. common/src/Tribe/Repository/Decorator.php +5 -5
  133. common/src/Tribe/Repository/Query_Filters.php +101 -101
  134. common/src/Tribe/Repository/Usage_Error.php +3 -19
  135. common/src/Tribe/Rewrite.php +18 -42
  136. common/src/Tribe/Service_Providers/Body_Classes.php +0 -86
  137. common/src/Tribe/Service_Providers/Crons.php +0 -37
  138. common/src/Tribe/Service_Providers/Debug_Bar.php +6 -6
  139. common/src/Tribe/Service_Providers/Dialog.php +1 -1
  140. common/src/Tribe/Service_Providers/Processes.php +11 -11
  141. common/src/Tribe/Service_Providers/Promoter.php +17 -21
  142. common/src/Tribe/Service_Providers/Shortcodes.php +2 -43
  143. common/src/Tribe/Service_Providers/Widgets.php +0 -77
  144. common/src/Tribe/Settings.php +27 -27
  145. common/src/Tribe/Settings_Manager.php +17 -23
  146. common/src/Tribe/Settings_Tab.php +13 -13
  147. common/src/Tribe/Shortcode/Manager.php +0 -75
  148. common/src/Tribe/Shortcode/Shortcode_Abstract.php +55 -85
  149. common/src/Tribe/Shortcode/Shortcode_Interface.php +31 -44
  150. common/src/Tribe/Shortcode/Utils.php +0 -45
  151. common/src/Tribe/Simple_Table.php +3 -3
  152. common/src/Tribe/Support.php +28 -33
  153. common/src/Tribe/Support/Obfuscator.php +2 -2
  154. common/src/Tribe/Support/Template_Checker.php +7 -6
  155. common/src/Tribe/Support/Template_Checker_Report.php +2 -2
  156. common/src/Tribe/Tabbed_View.php +7 -7
  157. common/src/Tribe/Tabbed_View/Tab.php +6 -6
  158. common/src/Tribe/Template.php +165 -645
  159. common/src/Tribe/Template_Factory.php +3 -3
  160. common/src/Tribe/Template_Part_Cache.php +3 -3
  161. common/src/Tribe/Templates.php +1 -1
  162. common/src/Tribe/Terms.php +1 -1
  163. common/src/Tribe/Timezones.php +8 -7
  164. common/src/Tribe/Tracker.php +18 -35
  165. common/src/Tribe/Traits/With_DB_Lock.php +0 -50
  166. common/src/Tribe/Traits/With_Meta_Updates_Handling.php +0 -66
  167. common/src/Tribe/Traits/With_Post_Attribute_Detection.php +0 -82
  168. common/src/Tribe/Updater.php +4 -4
  169. common/src/Tribe/Utils/Array.php +0 -225
  170. common/src/Tribe/Utils/Body_Classes.php +0 -350
  171. common/src/Tribe/Utils/Callback.php +8 -8
  172. common/src/Tribe/Utils/Collection.php +1 -1
  173. common/src/Tribe/Utils/Color.php +9 -9
  174. common/src/Tribe/Utils/Coordinates_Provider.php +3 -3
  175. common/src/Tribe/Utils/Element_Attributes.php +0 -241
  176. common/src/Tribe/Utils/Element_Classes.php +1 -1
  177. common/src/Tribe/Utils/Global_ID.php +9 -9
  178. common/src/Tribe/Utils/JSON.php +3 -3
  179. common/src/Tribe/Utils/Paths.php +0 -75
  180. common/src/Tribe/Utils/Plugins.php +3 -3
  181. common/src/Tribe/Utils/Post_Collection.php +2 -243
  182. common/src/Tribe/Utils/Post_Root_Pool.php +2 -2
  183. common/src/Tribe/Utils/Strings.php +0 -65
  184. common/src/Tribe/Utils/Taxonomy.php +0 -126
  185. common/src/Tribe/Validate.php +6 -6
  186. common/src/Tribe/Validator/Base.php +1 -1
  187. common/src/Tribe/View_Helpers.php +10 -10
  188. common/src/Tribe/Widget/Manager.php +0 -97
  189. common/src/Tribe/Widget/Widget_Abstract.php +0 -874
  190. common/src/Tribe/Widget/Widget_Interface.php +0 -331
  191. common/src/admin-views/app-shop.php +80 -191
  192. common/src/admin-views/notices/tribe-bf-2018-et.php +20 -0
  193. common/src/admin-views/notices/tribe-bf-2018-general.php +20 -0
  194. common/src/admin-views/notices/tribe-bf-2018-tec.php +20 -0
  195. common/src/admin-views/notices/tribe-bf-general.php +0 -22
  196. common/src/admin-views/notices/tribe-gutenberg-release.php +21 -0
  197. common/src/admin-views/tabbed-view/tabbed-view.php +1 -13
  198. common/src/admin-views/tribe-options-display.php +47 -48
  199. common/src/admin-views/tribe-options-general.php +5 -8
  200. common/src/admin-views/tribe-options-help.php +12 -42
  201. common/src/admin-views/tribe-options-licenses.php +17 -17
  202. common/src/admin-views/tribe-options-network.php +16 -16
  203. common/src/admin-views/widgets/components/fields.php +0 -43
  204. common/src/admin-views/widgets/components/fields/checkbox.php +0 -42
  205. common/src/admin-views/widgets/components/fields/dropdown.php +0 -53
  206. common/src/admin-views/widgets/components/fields/fieldset.php +0 -39
  207. common/src/admin-views/widgets/components/fields/number.php +0 -47
  208. common/src/admin-views/widgets/components/fields/radio.php +0 -43
  209. common/src/admin-views/widgets/components/fields/section.php +0 -40
  210. common/src/admin-views/widgets/components/fields/text.php +0 -41
  211. common/src/admin-views/widgets/components/form.php +0 -31
  212. common/src/functions/query.php +1 -42
  213. common/src/functions/template-tags/date.php +7 -7
  214. common/src/functions/template-tags/general.php +13 -58
  215. common/src/functions/template-tags/html.php +1 -125
  216. common/src/functions/template-tags/post.php +2 -5
  217. common/src/functions/utils.php +73 -247
  218. common/src/resources/css/app-shop.min.css +1 -1
  219. common/src/resources/css/app/elements.min.css +1 -1
  220. common/src/resources/css/common-full.min.css +1 -1
  221. common/src/resources/css/common-skeleton.min.css +1 -1
  222. common/src/resources/css/datatables.min.css +1 -1
  223. common/src/resources/css/dialog.min.css +1 -1
  224. common/src/resources/css/tribe-common-admin.min.css +1 -1
  225. common/src/resources/images/app-shop-banner.jpg +0 -0
  226. common/src/resources/images/app-shop-community-tickets.jpg +0 -0
  227. common/src/resources/images/app-shop-community.jpg +0 -0
  228. common/src/resources/images/app-shop-eventbrite.jpg +0 -0
  229. common/src/resources/images/app-shop-filter-bar.jpg +0 -0
  230. common/src/resources/images/app-shop-ical.jpg +0 -0
  231. common/src/resources/images/app-shop-image-widget-plus.jpg +0 -0
  232. common/src/resources/images/app-shop-pro.jpg +0 -0
  233. common/src/resources/images/app-shop-promoter.jpg +0 -0
  234. common/src/resources/images/app-shop-tickets-plus.jpg +0 -0
  235. common/src/resources/images/donate-link-screenshot.png +0 -0
  236. common/src/resources/images/gutenberg-admin-notice-TEC.png +0 -0
  237. common/src/resources/images/gutenberg-admin-notice-tickets.png +0 -0
  238. common/src/resources/images/header/all-solutions.jpg +0 -0
  239. common/src/resources/images/header/bundles.jpg +0 -0
  240. common/src/resources/images/header/extensions.jpg +0 -0
  241. common/src/resources/images/header/welcome-desktop-et.jpg +0 -0
  242. common/src/resources/images/header/welcome-desktop-etplus.jpg +0 -0
  243. common/src/resources/images/header/welcome-desktop.jpg +0 -0
  244. common/src/resources/images/header/welcome-mobile-et.jpg +0 -0
  245. common/src/resources/images/header/welcome-mobile-etplus.jpg +0 -0
  246. common/src/resources/images/header/welcome-mobile.jpg +0 -0
  247. common/src/resources/images/icons/caret-down.svg +1 -1
  248. common/src/resources/images/icons/caret-up.svg +1 -1
  249. common/src/resources/images/icons/horns-white.svg +0 -1
  250. common/src/resources/images/icons/horns.svg +0 -1
  251. common/src/resources/images/icons/list.svg +1 -1
  252. common/src/resources/images/icons/map.svg +1 -1
  253. common/src/resources/images/icons/photo.svg +1 -1
  254. common/src/resources/images/icons/sale-burst.svg +0 -12
  255. common/src/resources/images/logo/bundle-community-manager.svg +0 -1
  256. common/src/resources/images/logo/bundle-event-importer.svg +0 -1
  257. common/src/resources/images/logo/bundle-event-marketing.svg +0 -1
  258. common/src/resources/images/logo/bundle-ultimate.svg +0 -1
  259. common/src/resources/images/logo/bundle-virtual-events.svg +0 -1
  260. common/src/resources/images/logo/community-events.svg +0 -1
  261. common/src/resources/images/logo/community-tickets.svg +0 -1
  262. common/src/resources/images/logo/event-aggregator.svg +0 -1
  263. common/src/resources/images/logo/event-tickets-plus.svg +0 -1
  264. common/src/resources/images/logo/event-tickets.svg +0 -1
  265. common/src/resources/images/logo/eventbrite-tickets.svg +0 -1
  266. common/src/resources/images/logo/events-calendar-pro.svg +0 -1
  267. common/src/resources/images/logo/filterbar.svg +0 -1
  268. common/src/resources/images/logo/image-widget-plus.svg +0 -1
  269. common/src/resources/images/logo/promoter.svg +0 -1
  270. common/src/resources/images/logo/tec-brand.svg +0 -1
common/lang/tribe-common-af.mo CHANGED
Binary file
common/lang/tribe-common-ar.mo CHANGED
Binary file
common/lang/tribe-common-bg_BG.mo CHANGED
Binary file
common/lang/tribe-common-ca.mo CHANGED
Binary file
common/lang/tribe-common-cs_CZ.mo CHANGED
Binary file
common/lang/tribe-common-da_DK.mo CHANGED
Binary file
common/lang/tribe-common-de_DE.mo CHANGED
Binary file
common/lang/tribe-common-el.mo CHANGED
Binary file
common/lang/tribe-common-en_GB.mo CHANGED
Binary file
common/lang/tribe-common-es_ES.mo CHANGED
Binary file
common/lang/tribe-common-et.mo CHANGED
Binary file
common/lang/tribe-common-fi.mo CHANGED
Binary file
common/lang/tribe-common-fr_CA.mo CHANGED
Binary file
common/lang/tribe-common-fr_FR.mo CHANGED
Binary file
common/lang/tribe-common-hu_HU.mo CHANGED
Binary file
common/lang/tribe-common-id_ID.mo CHANGED
Binary file
common/lang/tribe-common-is_IS.mo CHANGED
Binary file
common/lang/tribe-common-it_IT.mo CHANGED
Binary file
common/lang/tribe-common-ja.mo CHANGED
Binary file
common/lang/tribe-common-lt_LT.mo CHANGED
Binary file
common/lang/tribe-common-lv.mo CHANGED
Binary file
common/lang/tribe-common-nb_NO.mo CHANGED
Binary file
common/lang/tribe-common-nl_NL.mo CHANGED
Binary file
common/lang/tribe-common-pl_PL.mo ADDED
Binary file
common/lang/tribe-common-pt_BR.mo CHANGED
Binary file
common/lang/tribe-common-pt_PT.mo CHANGED
Binary file
common/lang/tribe-common-ro_RO.mo CHANGED
Binary file
common/lang/tribe-common-ru_RU.mo CHANGED
Binary file
common/lang/tribe-common-sk_SK.mo CHANGED
Binary file
common/lang/tribe-common-sl_SI.mo CHANGED
Binary file
common/lang/tribe-common-sr_RS.mo CHANGED
Binary file
common/lang/tribe-common-sv_SE.mo CHANGED
Binary file
common/lang/tribe-common-tr_TR.mo CHANGED
Binary file
common/lang/tribe-common-zh_CN.mo CHANGED
Binary file
common/lang/tribe-common-zh_TW.mo CHANGED
Binary file
common/lang/tribe-common.pot CHANGED
@@ -1,34 +1,34 @@
1
- # Copyright (C) 2021 Modern Tribe
2
  # This file is distributed under the same license as the Tribe Common package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Tribe Common 4.13.0\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
- "POT-Creation-Date: 2021-03-19 04:39:34+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: 2021-03-19 04:39\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
15
- #: src/Tribe/Admin/Activation_Page.php:106
16
  msgid "Go to plugins page"
17
  msgstr ""
18
 
19
- #: src/Tribe/Admin/Activation_Page.php:106
20
  msgid "Return to Plugins page"
21
  msgstr ""
22
 
23
- #: src/Tribe/Admin/Activation_Page.php:114
24
  msgid "Go to WordPress Updates page"
25
  msgstr ""
26
 
27
- #: src/Tribe/Admin/Activation_Page.php:114
28
  msgid "Return to WordPress Updates"
29
  msgstr ""
30
 
31
- #: src/Tribe/Admin/Help_Page.php:56 src/admin-views/tribe-options-help.php:80
32
  msgid "Copy to clipboard"
33
  msgstr ""
34
 
@@ -40,9 +40,7 @@ msgstr ""
40
  msgid "Press \"Cmd + C\" to copy"
41
  msgstr ""
42
 
43
- #. #-#-#-#-# tribe-common.pot (Tribe Common 4.13.0) #-#-#-#-#
44
- #. Author of the plugin/theme
45
- #: src/Tribe/Admin/Help_Page.php:79 src/Tribe/Customizer.php:625
46
  #: src/Tribe/Plugins_API.php:25
47
  msgid "The Events Calendar"
48
  msgstr ""
@@ -53,128 +51,124 @@ msgid ""
53
  "easily share your events."
54
  msgstr ""
55
 
56
- #: src/Tribe/Admin/Help_Page.php:98 src/Tribe/Plugins_API.php:76
57
  msgid "Event Tickets"
58
  msgstr ""
59
 
60
- #: src/Tribe/Admin/Help_Page.php:102
61
  msgid ""
62
  "Events Tickets is a carefully crafted, extensible plugin that lets you "
63
  "easily sell tickets for your events."
64
  msgstr ""
65
 
66
- #: src/Tribe/Admin/Help_Page.php:117
67
  msgid "Advanced Post Manager"
68
  msgstr ""
69
 
70
- #: src/Tribe/Admin/Help_Page.php:121
71
  msgid ""
72
  "Turbo charge your posts admin for any custom post type with sortable filters "
73
  "and columns, and auto-registration of metaboxes."
74
  msgstr ""
75
 
76
- #: src/Tribe/Admin/Help_Page.php:199
77
  msgid " and "
78
  msgstr ""
79
 
80
- #: src/Tribe/Admin/Help_Page.php:223
81
  msgid "Events Calendar PRO"
82
  msgstr ""
83
 
84
- #: src/Tribe/Admin/Help_Page.php:232 src/Tribe/Plugins_API.php:179
85
  msgid "Eventbrite Tickets"
86
  msgstr ""
87
 
88
- #: src/Tribe/Admin/Help_Page.php:240 src/Tribe/Plugins_API.php:144
89
  msgid "Community Events"
90
  msgstr ""
91
 
92
- #: src/Tribe/Admin/Help_Page.php:248 src/Tribe/Plugins_API.php:42
93
  msgid "Event Aggregator"
94
  msgstr ""
95
 
96
- #: src/Tribe/Admin/Help_Page.php:258 src/Tribe/Plugins_API.php:127
97
  msgid "Filter Bar"
98
  msgstr ""
99
 
100
- #: src/Tribe/Admin/Help_Page.php:266 src/Tribe/Plugins_API.php:213
101
- msgid "Virtual Events"
102
- msgstr ""
103
-
104
- #: src/Tribe/Admin/Help_Page.php:274 src/Tribe/Plugins_API.php:93
105
  msgid "Event Tickets Plus"
106
  msgstr ""
107
 
108
- #: src/Tribe/Admin/Help_Page.php:283 src/Tribe/Plugins_API.php:161
109
  msgid "Community Tickets"
110
  msgstr ""
111
 
112
- #: src/Tribe/Admin/Help_Page.php:444
113
  msgctxt "not available"
114
  msgid "n/a"
115
  msgstr ""
116
 
117
- #: src/Tribe/Admin/Help_Page.php:452
118
  msgid "You need to upgrade!"
119
  msgstr ""
120
 
121
- #: src/Tribe/Admin/Help_Page.php:452 src/Tribe/Admin/Help_Page.php:827
122
  msgid "You are up to date!"
123
  msgstr ""
124
 
125
- #: src/Tribe/Admin/Help_Page.php:817
126
  msgid "Activate %s"
127
  msgstr ""
128
 
129
- #: src/Tribe/Admin/Help_Page.php:817
130
  msgid "Activate Plugin"
131
  msgstr ""
132
 
133
- #: src/Tribe/Admin/Help_Page.php:825
134
  msgid "Upgrade Plugin"
135
  msgstr ""
136
 
137
- #: src/Tribe/Admin/Help_Page.php:841
138
  msgid "Install %s"
139
  msgstr ""
140
 
141
- #: src/Tribe/Admin/Help_Page.php:841
142
  msgid "Install Plugin"
143
  msgstr ""
144
 
145
- #: src/Tribe/Admin/Help_Page.php:858
146
  msgid "Latest Version:"
147
  msgstr ""
148
 
149
- #: src/Tribe/Admin/Help_Page.php:861
150
  msgid "Requires:"
151
  msgstr ""
152
 
153
- #: src/Tribe/Admin/Help_Page.php:862
154
  msgid "WordPress "
155
  msgstr ""
156
 
157
- #: src/Tribe/Admin/Help_Page.php:864
158
  msgid "Active Users:"
159
  msgstr ""
160
 
161
- #: src/Tribe/Admin/Help_Page.php:867
162
  msgid "Rating:"
163
  msgstr ""
164
 
165
- #: src/Tribe/Admin/Help_Page.php:890
166
  msgid "Premium Add-Ons"
167
  msgstr ""
168
 
169
- #: src/Tribe/Admin/Help_Page.php:896
170
  msgid "Plugin Active"
171
  msgstr ""
172
 
173
- #: src/Tribe/Admin/Help_Page.php:898
174
  msgid "Plugin Inactive"
175
  msgstr ""
176
 
177
- #: src/Tribe/Admin/Help_Page.php:903
178
  msgid "Visit the Add-on Page"
179
  msgstr ""
180
 
@@ -221,175 +215,27 @@ msgid ""
221
  "compatible version of The Events Calendar. %2$s"
222
  msgstr ""
223
 
224
- #: src/Tribe/Admin/Notice/WP_Version.php:79
225
- msgid ""
226
- "You are using WordPress 5.7 which included a major jQuery update that may "
227
- "cause compatibility issues with past versions of The Events Calendar, Event "
228
- "Tickets and other plugins."
229
- msgstr ""
230
-
231
- #: src/Tribe/Admin/Notice/WP_Version.php:81
232
- msgid ""
233
- "WordPress 5.7 includes a major jQuery update that may cause compatibility "
234
- "issues with past versions of The Events Calendar, Event Tickets and other "
235
- "plugins."
236
- msgstr ""
237
-
238
- #: src/Tribe/Admin/Notice/WP_Version.php:83
239
- msgid "Read more."
240
- msgstr ""
241
-
242
  #: src/Tribe/Ajax/Dropdown.php:38
243
  msgid "Cannot look for Terms without a taxonomy"
244
  msgstr ""
245
 
246
- #: src/Tribe/Ajax/Dropdown.php:266
247
  msgid "Missing data source for this dropdown"
248
  msgstr ""
249
 
250
- #: src/Tribe/Ajax/Dropdown.php:279
251
  msgid "Empty data set for this dropdown"
252
  msgstr ""
253
 
254
- #: src/Tribe/Ajax/Dropdown.php:332
255
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
256
  msgstr ""
257
 
258
  #: src/Tribe/App_Shop.php:50 src/Tribe/App_Shop.php:51
259
- #: src/Tribe/App_Shop.php:82
260
  msgid "Event Add-Ons"
261
  msgstr ""
262
 
263
- #: src/Tribe/App_Shop.php:175
264
- msgid "Events Marketing Bundle"
265
- msgstr ""
266
-
267
- #: src/Tribe/App_Shop.php:178 src/Tribe/App_Shop.php:202
268
- #: src/Tribe/App_Shop.php:221 src/Tribe/App_Shop.php:234
269
- msgid "Save over 20%"
270
- msgstr ""
271
-
272
- #: src/Tribe/App_Shop.php:179
273
- msgid "Ticket sales, attendee management, and email marketing for your events"
274
- msgstr ""
275
-
276
- #: src/Tribe/App_Shop.php:187
277
- msgid "Event Importer Bundle"
278
- msgstr ""
279
-
280
- #: src/Tribe/App_Shop.php:190
281
- msgid "Save over 25%"
282
- msgstr ""
283
-
284
- #: src/Tribe/App_Shop.php:191
285
- msgid ""
286
- "Fill your calendar with events from across the web, including Google "
287
- "Calendar, Meetup, and more."
288
- msgstr ""
289
-
290
- #: src/Tribe/App_Shop.php:199
291
- msgid "Virtual Events Marketing Bundle"
292
- msgstr ""
293
-
294
- #: src/Tribe/App_Shop.php:203
295
- msgid "Streamline your online events and increase revenue."
296
- msgstr ""
297
-
298
- #: src/Tribe/App_Shop.php:211
299
- msgid "Sell tickets and earn revenue for online events"
300
- msgstr ""
301
-
302
- #: src/Tribe/App_Shop.php:212 src/Tribe/Plugins_API.php:218
303
- msgid "Zoom integration"
304
- msgstr ""
305
-
306
- #: src/Tribe/App_Shop.php:213
307
- msgid "Automated emails optimized for virtual events"
308
- msgstr ""
309
-
310
- #: src/Tribe/App_Shop.php:214
311
- msgid "Add recurring events"
312
- msgstr ""
313
-
314
- #: src/Tribe/App_Shop.php:218
315
- msgid "Community Manager Bundle"
316
- msgstr ""
317
-
318
- #: src/Tribe/App_Shop.php:222
319
- msgid ""
320
- "Handle event submissions with ticket sales and everything you need to build "
321
- "a robust community."
322
- msgstr ""
323
-
324
- #: src/Tribe/App_Shop.php:231
325
- msgid "Ultimate Bundle"
326
- msgstr ""
327
-
328
- #: src/Tribe/App_Shop.php:235
329
- msgid "All of our premium events management plugins at a deep discount."
330
- msgstr ""
331
-
332
- #: src/Tribe/App_Shop.php:262
333
- msgid "Website URL CTA"
334
- msgstr ""
335
-
336
- #: src/Tribe/App_Shop.php:265
337
- msgid ""
338
- "Create a strong call-to-action for attendees to \"Join Webinar\" instead of "
339
- "only sharing a website address."
340
- msgstr ""
341
-
342
- #: src/Tribe/App_Shop.php:268
343
- msgid "Link Directly to Webinar"
344
- msgstr ""
345
-
346
- #: src/Tribe/App_Shop.php:271
347
- msgid ""
348
- "When users click on the event title, they’ll be taken right to the source of "
349
- "your event, offering a direct route to join."
350
- msgstr ""
351
-
352
- #: src/Tribe/App_Shop.php:274
353
- msgid "Events Happening Now"
354
- msgstr ""
355
-
356
- #: src/Tribe/App_Shop.php:277
357
- msgid ""
358
- "Use this shortcode to display events that are currently in progress, like "
359
- "webinars and livestreams."
360
- msgstr ""
361
-
362
- #: src/Tribe/App_Shop.php:280
363
- msgid "Custom Venue Links"
364
- msgstr ""
365
-
366
- #: src/Tribe/App_Shop.php:283
367
- msgid ""
368
- "Turn the venue name for your event into a clickable URL — a great way to "
369
- "link directly to a venue’s website or a virtual meeting."
370
- msgstr ""
371
-
372
- #: src/Tribe/App_Shop.php:286
373
- msgid "Adjust Label"
374
- msgstr ""
375
-
376
- #: src/Tribe/App_Shop.php:289
377
- msgid ""
378
- "Change \"Events\" to \"Webinars,\" or \"Venues\" to \"Livestream,\" or "
379
- "\"Organizers\" to \"Hosts.\" Tailor your calendar for virtual events and "
380
- "meetings."
381
- msgstr ""
382
-
383
- #: src/Tribe/App_Shop.php:292
384
- msgid "Reach Attendees"
385
- msgstr ""
386
-
387
- #: src/Tribe/App_Shop.php:295
388
- msgid ""
389
- "From registration to attendance history, view every step of the event "
390
- "lifecycle with this HubSpot integration."
391
- msgstr ""
392
-
393
  #: src/Tribe/Cost_Utils.php:114
394
  msgid "Free"
395
  msgstr ""
@@ -406,7 +252,7 @@ msgstr ""
406
  msgid "Rate %1$sEvent Tickets%2$s %3$s"
407
  msgstr ""
408
 
409
- #: src/Tribe/Customizer.php:626
410
  msgid ""
411
  "Use the following panel of your customizer to change the styling of your "
412
  "Calendar and Event pages."
@@ -414,7 +260,7 @@ msgstr ""
414
 
415
  #: src/Tribe/Debug_Bar/Panels/Context.php:22
416
  #: src/Tribe/Debug_Bar/Panels/Context.php:50
417
- msgid "The Events Calendar Context"
418
  msgstr ""
419
 
420
  #: src/Tribe/Debug_Bar/Panels/Context.php:53
@@ -447,34 +293,34 @@ msgstr ""
447
 
448
  #: src/Tribe/Debug_Bar/Panels/Json_Ld.php:21
449
  #: src/Tribe/Debug_Bar/Panels/Json_Ld.php:40
450
- msgid "The Events Calendar JSON-LD Data"
451
  msgstr ""
452
 
453
- #: src/Tribe/Dialog/View.php:157
454
  msgid "Open the modal window"
455
  msgstr ""
456
 
457
- #: src/Tribe/Dialog/View.php:158
458
  msgid "Close this modal window"
459
  msgstr ""
460
 
461
- #: src/Tribe/Dialog/View.php:228
462
  msgid "Cancel"
463
  msgstr ""
464
 
465
- #: src/Tribe/Dialog/View.php:229
466
  msgid "Confirm"
467
  msgstr ""
468
 
469
- #: src/Tribe/Dialog/View.php:296
470
  msgid "OK"
471
  msgstr ""
472
 
473
- #: src/Tribe/Dialog/View.php:366
474
  msgid "Open the dialog window"
475
  msgstr ""
476
 
477
- #: src/Tribe/Dialog/View.php:381
478
  msgid "Close this dialog window"
479
  msgstr ""
480
 
@@ -590,31 +436,29 @@ msgstr ""
590
  msgid "A list of links to the term own, archive and parent REST URL"
591
  msgstr ""
592
 
593
- #: src/Tribe/Editor/Blocks/Abstract.php:123
594
  msgid "Problem loading the block, please remove this block to restart."
595
  msgstr ""
596
 
597
  #. translators: %s: duration
598
- #: src/Tribe/Editor/Configuration.php:94
599
  msgid "%s from now"
600
  msgstr ""
601
 
602
  #. translators: %s: duration
603
- #: src/Tribe/Editor/Configuration.php:96
604
  msgid "%s ago"
605
  msgstr ""
606
 
607
- #: src/Tribe/Editor/Configuration.php:100
608
- #: src/Tribe/Editor/Configuration.php:103
609
  msgid "g:i a"
610
  msgstr ""
611
 
612
- #: src/Tribe/Editor/Configuration.php:101
613
- #: src/Tribe/Editor/Configuration.php:103
614
  msgid "F j, Y"
615
  msgstr ""
616
 
617
- #: src/Tribe/Editor/Configuration.php:102
618
  msgid "F j"
619
  msgstr ""
620
 
@@ -634,7 +478,7 @@ msgstr ""
634
  msgid "Tutorial"
635
  msgstr ""
636
 
637
- #: src/Tribe/Extension.php:406
638
  msgid ""
639
  "Unable to run Tribe Extensions. Your website host is running PHP 5.2 or "
640
  "older, and has likely disabled or misconfigured debug_backtrace(). You, or "
@@ -642,1206 +486,1197 @@ msgid ""
642
  "debug_backtrace() for Tribe Extensions to work."
643
  msgstr ""
644
 
645
- #: src/Tribe/Extension.php:421
646
- msgctxt "extension disallowed"
647
- msgid ""
648
- "This extension has been programmatically disallowed. The most common reason "
649
- "is due to another The Events Calendar plugin having absorbed or replaced "
650
- "this extension's functionality. This extension plugin has been deactivated, "
651
- "and you should likely delete it."
652
- msgstr ""
653
-
654
- #: src/Tribe/Field.php:234
655
  msgid "Invalid field type specified"
656
  msgstr ""
657
 
658
- #: src/Tribe/Field.php:544
659
  msgid "No radio options specified"
660
  msgstr ""
661
 
662
- #: src/Tribe/Field.php:580
663
  msgid "No checkbox options specified"
664
  msgstr ""
665
 
666
- #: src/Tribe/Field.php:642
667
  msgid "No select options specified"
668
  msgstr ""
669
 
670
- #: src/Tribe/Languages/Locations.php:79
671
  msgid "United States"
672
  msgstr ""
673
 
674
- #: src/Tribe/Languages/Locations.php:80
675
  msgid "Afghanistan"
676
  msgstr ""
677
 
678
- #: src/Tribe/Languages/Locations.php:81
679
  msgid "Åland Islands"
680
  msgstr ""
681
 
682
- #: src/Tribe/Languages/Locations.php:82
683
  msgid "Albania"
684
  msgstr ""
685
 
686
- #: src/Tribe/Languages/Locations.php:83
687
  msgid "Algeria"
688
  msgstr ""
689
 
690
- #: src/Tribe/Languages/Locations.php:84
691
  msgid "American Samoa"
692
  msgstr ""
693
 
694
- #: src/Tribe/Languages/Locations.php:85
695
  msgid "Andorra"
696
  msgstr ""
697
 
698
- #: src/Tribe/Languages/Locations.php:86
699
  msgid "Angola"
700
  msgstr ""
701
 
702
- #: src/Tribe/Languages/Locations.php:87
703
  msgid "Anguilla"
704
  msgstr ""
705
 
706
- #: src/Tribe/Languages/Locations.php:88
707
  msgid "Antarctica"
708
  msgstr ""
709
 
710
- #: src/Tribe/Languages/Locations.php:89
711
  msgid "Antigua and Barbuda"
712
  msgstr ""
713
 
714
- #: src/Tribe/Languages/Locations.php:90
715
  msgid "Argentina"
716
  msgstr ""
717
 
718
- #: src/Tribe/Languages/Locations.php:91
719
  msgid "Armenia"
720
  msgstr ""
721
 
722
- #: src/Tribe/Languages/Locations.php:92
723
  msgid "Aruba"
724
  msgstr ""
725
 
726
- #: src/Tribe/Languages/Locations.php:93
727
  msgid "Australia"
728
  msgstr ""
729
 
730
- #: src/Tribe/Languages/Locations.php:94
731
  msgid "Austria"
732
  msgstr ""
733
 
734
- #: src/Tribe/Languages/Locations.php:95
735
  msgid "Azerbaijan"
736
  msgstr ""
737
 
738
- #: src/Tribe/Languages/Locations.php:96
739
  msgid "Bahamas"
740
  msgstr ""
741
 
742
- #: src/Tribe/Languages/Locations.php:97
743
  msgid "Bahrain"
744
  msgstr ""
745
 
746
- #: src/Tribe/Languages/Locations.php:98
747
  msgid "Bangladesh"
748
  msgstr ""
749
 
750
- #: src/Tribe/Languages/Locations.php:99
751
  msgid "Barbados"
752
  msgstr ""
753
 
754
- #: src/Tribe/Languages/Locations.php:100
755
  msgid "Belarus"
756
  msgstr ""
757
 
758
- #: src/Tribe/Languages/Locations.php:101
759
  msgid "Belgium"
760
  msgstr ""
761
 
762
- #: src/Tribe/Languages/Locations.php:102
763
  msgid "Belize"
764
  msgstr ""
765
 
766
- #: src/Tribe/Languages/Locations.php:103
767
  msgid "Benin"
768
  msgstr ""
769
 
770
- #: src/Tribe/Languages/Locations.php:104
771
  msgid "Bermuda"
772
  msgstr ""
773
 
774
- #: src/Tribe/Languages/Locations.php:105
775
  msgid "Bhutan"
776
  msgstr ""
777
 
778
- #: src/Tribe/Languages/Locations.php:106
779
  msgid "Bolivia"
780
  msgstr ""
781
 
782
- #: src/Tribe/Languages/Locations.php:107
783
  msgid "Bosnia and Herzegovina"
784
  msgstr ""
785
 
786
- #: src/Tribe/Languages/Locations.php:108
787
  msgid "Botswana"
788
  msgstr ""
789
 
790
- #: src/Tribe/Languages/Locations.php:109
791
  msgid "Bouvet Island"
792
  msgstr ""
793
 
794
- #: src/Tribe/Languages/Locations.php:110
795
  msgid "Brazil"
796
  msgstr ""
797
 
798
- #: src/Tribe/Languages/Locations.php:111
799
  msgid "British Indian Ocean Territory"
800
  msgstr ""
801
 
802
- #: src/Tribe/Languages/Locations.php:112
803
  msgid "Brunei Darussalam"
804
  msgstr ""
805
 
806
- #: src/Tribe/Languages/Locations.php:113
807
  msgid "Bulgaria"
808
  msgstr ""
809
 
810
- #: src/Tribe/Languages/Locations.php:114
811
  msgid "Burkina Faso"
812
  msgstr ""
813
 
814
- #: src/Tribe/Languages/Locations.php:115
815
  msgid "Burundi"
816
  msgstr ""
817
 
818
- #: src/Tribe/Languages/Locations.php:116
819
  msgid "Cambodia"
820
  msgstr ""
821
 
822
- #: src/Tribe/Languages/Locations.php:117
823
  msgid "Cameroon"
824
  msgstr ""
825
 
826
- #: src/Tribe/Languages/Locations.php:118
827
  msgid "Canada"
828
  msgstr ""
829
 
830
- #: src/Tribe/Languages/Locations.php:119
831
  msgid "Cape Verde"
832
  msgstr ""
833
 
834
- #: src/Tribe/Languages/Locations.php:120
835
  msgid "Cayman Islands"
836
  msgstr ""
837
 
838
- #: src/Tribe/Languages/Locations.php:121
839
  msgid "Central African Republic"
840
  msgstr ""
841
 
842
- #: src/Tribe/Languages/Locations.php:122
843
  msgid "Chad"
844
  msgstr ""
845
 
846
- #: src/Tribe/Languages/Locations.php:123
847
  msgid "Chile"
848
  msgstr ""
849
 
850
- #: src/Tribe/Languages/Locations.php:124
851
  msgid "China"
852
  msgstr ""
853
 
854
- #: src/Tribe/Languages/Locations.php:125
855
  msgid "Christmas Island"
856
  msgstr ""
857
 
858
- #: src/Tribe/Languages/Locations.php:126
859
  msgid "Cocos (Keeling) Islands"
860
  msgstr ""
861
 
862
- #: src/Tribe/Languages/Locations.php:127
863
  msgid "Collectivity of Saint Martin"
864
  msgstr ""
865
 
866
- #: src/Tribe/Languages/Locations.php:128
867
  msgid "Colombia"
868
  msgstr ""
869
 
870
- #: src/Tribe/Languages/Locations.php:129
871
  msgid "Comoros"
872
  msgstr ""
873
 
874
- #: src/Tribe/Languages/Locations.php:130
875
  msgid "Congo"
876
  msgstr ""
877
 
878
- #: src/Tribe/Languages/Locations.php:131
879
  msgid "Congo, Democratic Republic of the"
880
  msgstr ""
881
 
882
- #: src/Tribe/Languages/Locations.php:132
883
  msgid "Cook Islands"
884
  msgstr ""
885
 
886
- #: src/Tribe/Languages/Locations.php:133
887
  msgid "Costa Rica"
888
  msgstr ""
889
 
890
- #: src/Tribe/Languages/Locations.php:134
891
  msgid "Côte d'Ivoire"
892
  msgstr ""
893
 
894
- #: src/Tribe/Languages/Locations.php:135
895
  msgid "Croatia (Local Name: Hrvatska)"
896
  msgstr ""
897
 
898
- #: src/Tribe/Languages/Locations.php:136
899
  msgid "Cuba"
900
  msgstr ""
901
 
902
- #: src/Tribe/Languages/Locations.php:137
903
  msgid "Curaçao"
904
  msgstr ""
905
 
906
- #: src/Tribe/Languages/Locations.php:138
907
  msgid "Cyprus"
908
  msgstr ""
909
 
910
- #: src/Tribe/Languages/Locations.php:139
911
  msgid "Czech Republic"
912
  msgstr ""
913
 
914
- #: src/Tribe/Languages/Locations.php:140
915
  msgid "Denmark"
916
  msgstr ""
917
 
918
- #: src/Tribe/Languages/Locations.php:141
919
  msgid "Djibouti"
920
  msgstr ""
921
 
922
- #: src/Tribe/Languages/Locations.php:142
923
  msgid "Dominica"
924
  msgstr ""
925
 
926
- #: src/Tribe/Languages/Locations.php:143
927
  msgid "Dominican Republic"
928
  msgstr ""
929
 
930
- #: src/Tribe/Languages/Locations.php:144
931
  msgid "East Timor"
932
  msgstr ""
933
 
934
- #: src/Tribe/Languages/Locations.php:145
935
  msgid "Ecuador"
936
  msgstr ""
937
 
938
- #: src/Tribe/Languages/Locations.php:146
939
  msgid "Egypt"
940
  msgstr ""
941
 
942
- #: src/Tribe/Languages/Locations.php:147
943
  msgid "El Salvador"
944
  msgstr ""
945
 
946
- #: src/Tribe/Languages/Locations.php:148
947
  msgid "Equatorial Guinea"
948
  msgstr ""
949
 
950
- #: src/Tribe/Languages/Locations.php:149
951
  msgid "Eritrea"
952
  msgstr ""
953
 
954
- #: src/Tribe/Languages/Locations.php:150
955
  msgid "Estonia"
956
  msgstr ""
957
 
958
- #: src/Tribe/Languages/Locations.php:151
959
  msgid "Ethiopia"
960
  msgstr ""
961
 
962
- #: src/Tribe/Languages/Locations.php:152
963
  msgid "Falkland Islands (Malvinas)"
964
  msgstr ""
965
 
966
- #: src/Tribe/Languages/Locations.php:153
967
  msgid "Faroe Islands"
968
  msgstr ""
969
 
970
- #: src/Tribe/Languages/Locations.php:154
971
  msgid "Fiji"
972
  msgstr ""
973
 
974
- #: src/Tribe/Languages/Locations.php:155
975
  msgid "Finland"
976
  msgstr ""
977
 
978
- #: src/Tribe/Languages/Locations.php:156
979
  msgid "France"
980
  msgstr ""
981
 
982
- #: src/Tribe/Languages/Locations.php:157
983
  msgid "French Guiana"
984
  msgstr ""
985
 
986
- #: src/Tribe/Languages/Locations.php:158
987
  msgid "French Polynesia"
988
  msgstr ""
989
 
990
- #: src/Tribe/Languages/Locations.php:159
991
  msgid "French Southern Territories"
992
  msgstr ""
993
 
994
- #: src/Tribe/Languages/Locations.php:160
995
  msgid "Gabon"
996
  msgstr ""
997
 
998
- #: src/Tribe/Languages/Locations.php:161
999
  msgid "Gambia"
1000
  msgstr ""
1001
 
1002
- #: src/Tribe/Languages/Locations.php:162
1003
  msgctxt "The country"
1004
  msgid "Georgia"
1005
  msgstr ""
1006
 
1007
- #: src/Tribe/Languages/Locations.php:163
1008
  msgid "Germany"
1009
  msgstr ""
1010
 
1011
- #: src/Tribe/Languages/Locations.php:164
1012
  msgid "Ghana"
1013
  msgstr ""
1014
 
1015
- #: src/Tribe/Languages/Locations.php:165
1016
  msgid "Gibraltar"
1017
  msgstr ""
1018
 
1019
- #: src/Tribe/Languages/Locations.php:166
1020
  msgid "Greece"
1021
  msgstr ""
1022
 
1023
- #: src/Tribe/Languages/Locations.php:167
1024
  msgid "Greenland"
1025
  msgstr ""
1026
 
1027
- #: src/Tribe/Languages/Locations.php:168
1028
  msgid "Grenada"
1029
  msgstr ""
1030
 
1031
- #: src/Tribe/Languages/Locations.php:169
1032
  msgid "Guadeloupe"
1033
  msgstr ""
1034
 
1035
- #: src/Tribe/Languages/Locations.php:170
1036
  msgid "Guam"
1037
  msgstr ""
1038
 
1039
- #: src/Tribe/Languages/Locations.php:171
1040
  msgid "Guatemala"
1041
  msgstr ""
1042
 
1043
- #: src/Tribe/Languages/Locations.php:172
1044
  msgid "Guinea"
1045
  msgstr ""
1046
 
1047
- #: src/Tribe/Languages/Locations.php:173
1048
  msgid "Guinea-Bissau"
1049
  msgstr ""
1050
 
1051
- #: src/Tribe/Languages/Locations.php:174
1052
  msgid "Guyana"
1053
  msgstr ""
1054
 
1055
- #: src/Tribe/Languages/Locations.php:175
1056
  msgid "Haiti"
1057
  msgstr ""
1058
 
1059
- #: src/Tribe/Languages/Locations.php:176
1060
  msgid "Heard and McDonald Islands"
1061
  msgstr ""
1062
 
1063
- #: src/Tribe/Languages/Locations.php:177
1064
  msgid "Holy See (Vatican City State)"
1065
  msgstr ""
1066
 
1067
- #: src/Tribe/Languages/Locations.php:178
1068
  msgid "Honduras"
1069
  msgstr ""
1070
 
1071
- #: src/Tribe/Languages/Locations.php:179
1072
  msgid "Hong Kong"
1073
  msgstr ""
1074
 
1075
- #: src/Tribe/Languages/Locations.php:180
1076
  msgid "Hungary"
1077
  msgstr ""
1078
 
1079
- #: src/Tribe/Languages/Locations.php:181
1080
  msgid "Iceland"
1081
  msgstr ""
1082
 
1083
- #: src/Tribe/Languages/Locations.php:182
1084
  msgid "India"
1085
  msgstr ""
1086
 
1087
- #: src/Tribe/Languages/Locations.php:183
1088
  msgid "Indonesia"
1089
  msgstr ""
1090
 
1091
- #: src/Tribe/Languages/Locations.php:184
1092
  msgid "Iran, Islamic Republic of"
1093
  msgstr ""
1094
 
1095
- #: src/Tribe/Languages/Locations.php:185
1096
  msgid "Iraq"
1097
  msgstr ""
1098
 
1099
- #: src/Tribe/Languages/Locations.php:186
1100
  msgid "Ireland"
1101
  msgstr ""
1102
 
1103
- #: src/Tribe/Languages/Locations.php:187
1104
  msgid "Israel"
1105
  msgstr ""
1106
 
1107
- #: src/Tribe/Languages/Locations.php:188
1108
  msgid "Italy"
1109
  msgstr ""
1110
 
1111
- #: src/Tribe/Languages/Locations.php:189
1112
  msgid "Jamaica"
1113
  msgstr ""
1114
 
1115
- #: src/Tribe/Languages/Locations.php:190
1116
  msgid "Japan"
1117
  msgstr ""
1118
 
1119
- #: src/Tribe/Languages/Locations.php:191
1120
  msgid "Jordan"
1121
  msgstr ""
1122
 
1123
- #: src/Tribe/Languages/Locations.php:192
1124
  msgid "Kazakhstan"
1125
  msgstr ""
1126
 
1127
- #: src/Tribe/Languages/Locations.php:193
1128
  msgid "Kenya"
1129
  msgstr ""
1130
 
1131
- #: src/Tribe/Languages/Locations.php:194
1132
  msgid "Kiribati"
1133
  msgstr ""
1134
 
1135
- #: src/Tribe/Languages/Locations.php:195
1136
  msgid "Korea, Democratic People's Republic of"
1137
  msgstr ""
1138
 
1139
- #: src/Tribe/Languages/Locations.php:196
1140
  msgid "Korea, Republic of"
1141
  msgstr ""
1142
 
1143
- #: src/Tribe/Languages/Locations.php:197
1144
  msgid "Kuwait"
1145
  msgstr ""
1146
 
1147
- #: src/Tribe/Languages/Locations.php:198
1148
  msgid "Kyrgyzstan"
1149
  msgstr ""
1150
 
1151
- #: src/Tribe/Languages/Locations.php:199
1152
  msgid "Lao People's Democratic Republic"
1153
  msgstr ""
1154
 
1155
- #: src/Tribe/Languages/Locations.php:200
1156
  msgid "Latvia"
1157
  msgstr ""
1158
 
1159
- #: src/Tribe/Languages/Locations.php:201
1160
  msgid "Lebanon"
1161
  msgstr ""
1162
 
1163
- #: src/Tribe/Languages/Locations.php:202
1164
  msgid "Lesotho"
1165
  msgstr ""
1166
 
1167
- #: src/Tribe/Languages/Locations.php:203
1168
  msgid "Liberia"
1169
  msgstr ""
1170
 
1171
- #: src/Tribe/Languages/Locations.php:204
1172
  msgid "Libya"
1173
  msgstr ""
1174
 
1175
- #: src/Tribe/Languages/Locations.php:205
1176
  msgid "Liechtenstein"
1177
  msgstr ""
1178
 
1179
- #: src/Tribe/Languages/Locations.php:206
1180
  msgid "Lithuania"
1181
  msgstr ""
1182
 
1183
- #: src/Tribe/Languages/Locations.php:207
1184
  msgid "Luxembourg"
1185
  msgstr ""
1186
 
1187
- #: src/Tribe/Languages/Locations.php:208
1188
  msgid "Macau"
1189
  msgstr ""
1190
 
1191
- #: src/Tribe/Languages/Locations.php:209
1192
  msgid "Madagascar"
1193
  msgstr ""
1194
 
1195
- #: src/Tribe/Languages/Locations.php:210
1196
  msgid "Malawi"
1197
  msgstr ""
1198
 
1199
- #: src/Tribe/Languages/Locations.php:211
1200
  msgid "Malaysia"
1201
  msgstr ""
1202
 
1203
- #: src/Tribe/Languages/Locations.php:212
1204
  msgid "Maldives"
1205
  msgstr ""
1206
 
1207
- #: src/Tribe/Languages/Locations.php:213
1208
  msgid "Mali"
1209
  msgstr ""
1210
 
1211
- #: src/Tribe/Languages/Locations.php:214
1212
  msgid "Malta"
1213
  msgstr ""
1214
 
1215
- #: src/Tribe/Languages/Locations.php:215
1216
  msgid "Marshall Islands"
1217
  msgstr ""
1218
 
1219
- #: src/Tribe/Languages/Locations.php:216
1220
  msgid "Martinique"
1221
  msgstr ""
1222
 
1223
- #: src/Tribe/Languages/Locations.php:217
1224
  msgid "Mauritania"
1225
  msgstr ""
1226
 
1227
- #: src/Tribe/Languages/Locations.php:218
1228
  msgid "Mauritius"
1229
  msgstr ""
1230
 
1231
- #: src/Tribe/Languages/Locations.php:219
1232
  msgid "Mayotte"
1233
  msgstr ""
1234
 
1235
- #: src/Tribe/Languages/Locations.php:220
1236
  msgid "Mexico"
1237
  msgstr ""
1238
 
1239
- #: src/Tribe/Languages/Locations.php:221
1240
  msgid "Micronesia, Federated States of"
1241
  msgstr ""
1242
 
1243
- #: src/Tribe/Languages/Locations.php:222
1244
  msgid "Moldova, Republic of"
1245
  msgstr ""
1246
 
1247
- #: src/Tribe/Languages/Locations.php:223
1248
  msgid "Monaco"
1249
  msgstr ""
1250
 
1251
- #: src/Tribe/Languages/Locations.php:224
1252
  msgid "Mongolia"
1253
  msgstr ""
1254
 
1255
- #: src/Tribe/Languages/Locations.php:225
1256
  msgid "Montenegro"
1257
  msgstr ""
1258
 
1259
- #: src/Tribe/Languages/Locations.php:226
1260
  msgid "Montserrat"
1261
  msgstr ""
1262
 
1263
- #: src/Tribe/Languages/Locations.php:227
1264
  msgid "Morocco"
1265
  msgstr ""
1266
 
1267
- #: src/Tribe/Languages/Locations.php:228
1268
  msgid "Mozambique"
1269
  msgstr ""
1270
 
1271
- #: src/Tribe/Languages/Locations.php:229
1272
  msgid "Myanmar"
1273
  msgstr ""
1274
 
1275
- #: src/Tribe/Languages/Locations.php:230
1276
  msgid "Namibia"
1277
  msgstr ""
1278
 
1279
- #: src/Tribe/Languages/Locations.php:231
1280
  msgid "Nauru"
1281
  msgstr ""
1282
 
1283
- #: src/Tribe/Languages/Locations.php:232
1284
  msgid "Nepal"
1285
  msgstr ""
1286
 
1287
- #: src/Tribe/Languages/Locations.php:233
1288
  msgid "Netherlands"
1289
  msgstr ""
1290
 
1291
- #: src/Tribe/Languages/Locations.php:234
1292
  msgid "New Caledonia"
1293
  msgstr ""
1294
 
1295
- #: src/Tribe/Languages/Locations.php:235
1296
  msgid "New Zealand"
1297
  msgstr ""
1298
 
1299
- #: src/Tribe/Languages/Locations.php:236
1300
  msgid "Nicaragua"
1301
  msgstr ""
1302
 
1303
- #: src/Tribe/Languages/Locations.php:237
1304
  msgid "Niger"
1305
  msgstr ""
1306
 
1307
- #: src/Tribe/Languages/Locations.php:238
1308
  msgid "Nigeria"
1309
  msgstr ""
1310
 
1311
- #: src/Tribe/Languages/Locations.php:239
1312
  msgid "Niue"
1313
  msgstr ""
1314
 
1315
- #: src/Tribe/Languages/Locations.php:240
1316
  msgid "Norfolk Island"
1317
  msgstr ""
1318
 
1319
- #: src/Tribe/Languages/Locations.php:241
1320
  msgid "North Macedonia"
1321
  msgstr ""
1322
 
1323
- #: src/Tribe/Languages/Locations.php:242
1324
  msgid "Northern Mariana Islands"
1325
  msgstr ""
1326
 
1327
- #: src/Tribe/Languages/Locations.php:243
1328
  msgid "Norway"
1329
  msgstr ""
1330
 
1331
- #: src/Tribe/Languages/Locations.php:244
1332
  msgid "Oman"
1333
  msgstr ""
1334
 
1335
- #: src/Tribe/Languages/Locations.php:245
1336
  msgid "Pakistan"
1337
  msgstr ""
1338
 
1339
- #: src/Tribe/Languages/Locations.php:246
1340
  msgid "Palau"
1341
  msgstr ""
1342
 
1343
- #: src/Tribe/Languages/Locations.php:247
1344
  msgid "Panama"
1345
  msgstr ""
1346
 
1347
- #: src/Tribe/Languages/Locations.php:248
1348
  msgid "Papua New Guinea"
1349
  msgstr ""
1350
 
1351
- #: src/Tribe/Languages/Locations.php:249
1352
  msgid "Paraguay"
1353
  msgstr ""
1354
 
1355
- #: src/Tribe/Languages/Locations.php:250
1356
  msgid "Peru"
1357
  msgstr ""
1358
 
1359
- #: src/Tribe/Languages/Locations.php:251
1360
  msgid "Philippines"
1361
  msgstr ""
1362
 
1363
- #: src/Tribe/Languages/Locations.php:252
1364
  msgid "Pitcairn"
1365
  msgstr ""
1366
 
1367
- #: src/Tribe/Languages/Locations.php:253
1368
  msgid "Poland"
1369
  msgstr ""
1370
 
1371
- #: src/Tribe/Languages/Locations.php:254
1372
  msgid "Portugal"
1373
  msgstr ""
1374
 
1375
- #: src/Tribe/Languages/Locations.php:255
1376
  msgid "Puerto Rico"
1377
  msgstr ""
1378
 
1379
- #: src/Tribe/Languages/Locations.php:256
1380
  msgid "Qatar"
1381
  msgstr ""
1382
 
1383
- #: src/Tribe/Languages/Locations.php:257
1384
  msgid "Reunion"
1385
  msgstr ""
1386
 
1387
- #: src/Tribe/Languages/Locations.php:258
1388
  msgid "Romania"
1389
  msgstr ""
1390
 
1391
- #: src/Tribe/Languages/Locations.php:259
1392
  msgid "Russian Federation"
1393
  msgstr ""
1394
 
1395
- #: src/Tribe/Languages/Locations.php:260
1396
  msgid "Rwanda"
1397
  msgstr ""
1398
 
1399
- #: src/Tribe/Languages/Locations.php:261
1400
  msgid "Saint Barthélemy"
1401
  msgstr ""
1402
 
1403
- #: src/Tribe/Languages/Locations.php:262
1404
  msgid "Saint Helena"
1405
  msgstr ""
1406
 
1407
- #: src/Tribe/Languages/Locations.php:263
1408
  msgid "Saint Kitts and Nevis"
1409
  msgstr ""
1410
 
1411
- #: src/Tribe/Languages/Locations.php:264
1412
  msgid "Saint Lucia"
1413
  msgstr ""
1414
 
1415
- #: src/Tribe/Languages/Locations.php:265
1416
  msgid "Saint Pierre and Miquelon"
1417
  msgstr ""
1418
 
1419
- #: src/Tribe/Languages/Locations.php:266
1420
  msgid "Saint Vincent and The Grenadines"
1421
  msgstr ""
1422
 
1423
- #: src/Tribe/Languages/Locations.php:267
1424
  msgid "Samoa"
1425
  msgstr ""
1426
 
1427
- #: src/Tribe/Languages/Locations.php:268
1428
  msgid "San Marino"
1429
  msgstr ""
1430
 
1431
- #: src/Tribe/Languages/Locations.php:269
1432
  msgid "São Tomé and Príncipe"
1433
  msgstr ""
1434
 
1435
- #: src/Tribe/Languages/Locations.php:270
1436
  msgid "Saudi Arabia"
1437
  msgstr ""
1438
 
1439
- #: src/Tribe/Languages/Locations.php:271
1440
  msgid "Senegal"
1441
  msgstr ""
1442
 
1443
- #: src/Tribe/Languages/Locations.php:272
1444
  msgid "Serbia"
1445
  msgstr ""
1446
 
1447
- #: src/Tribe/Languages/Locations.php:273
1448
  msgid "Seychelles"
1449
  msgstr ""
1450
 
1451
- #: src/Tribe/Languages/Locations.php:274
1452
  msgid "Sierra Leone"
1453
  msgstr ""
1454
 
1455
- #: src/Tribe/Languages/Locations.php:275
1456
  msgid "Singapore"
1457
  msgstr ""
1458
 
1459
- #: src/Tribe/Languages/Locations.php:276
1460
  msgid "Sint Maarten"
1461
  msgstr ""
1462
 
1463
- #: src/Tribe/Languages/Locations.php:277
1464
  msgid "Slovakia (Slovak Republic)"
1465
  msgstr ""
1466
 
1467
- #: src/Tribe/Languages/Locations.php:278
1468
  msgid "Slovenia"
1469
  msgstr ""
1470
 
1471
- #: src/Tribe/Languages/Locations.php:279
1472
  msgid "Solomon Islands"
1473
  msgstr ""
1474
 
1475
- #: src/Tribe/Languages/Locations.php:280
1476
  msgid "Somalia"
1477
  msgstr ""
1478
 
1479
- #: src/Tribe/Languages/Locations.php:281
1480
  msgid "South Africa"
1481
  msgstr ""
1482
 
1483
- #: src/Tribe/Languages/Locations.php:282
1484
  msgid "South Georgia, South Sandwich Islands"
1485
  msgstr ""
1486
 
1487
- #: src/Tribe/Languages/Locations.php:283
1488
  msgid "Spain"
1489
  msgstr ""
1490
 
1491
- #: src/Tribe/Languages/Locations.php:284
1492
  msgid "Sri Lanka"
1493
  msgstr ""
1494
 
1495
- #: src/Tribe/Languages/Locations.php:285
1496
  msgid "Sudan"
1497
  msgstr ""
1498
 
1499
- #: src/Tribe/Languages/Locations.php:286
1500
  msgid "Suriname"
1501
  msgstr ""
1502
 
1503
- #: src/Tribe/Languages/Locations.php:287
1504
  msgid "Svalbard and Jan Mayen Islands"
1505
  msgstr ""
1506
 
1507
- #: src/Tribe/Languages/Locations.php:288
1508
  msgid "Swaziland"
1509
  msgstr ""
1510
 
1511
- #: src/Tribe/Languages/Locations.php:289
1512
  msgid "Sweden"
1513
  msgstr ""
1514
 
1515
- #: src/Tribe/Languages/Locations.php:290
1516
  msgid "Switzerland"
1517
  msgstr ""
1518
 
1519
- #: src/Tribe/Languages/Locations.php:291
1520
  msgid "Syrian Arab Republic"
1521
  msgstr ""
1522
 
1523
- #: src/Tribe/Languages/Locations.php:292
1524
  msgid "Taiwan"
1525
  msgstr ""
1526
 
1527
- #: src/Tribe/Languages/Locations.php:293
1528
  msgid "Tajikistan"
1529
  msgstr ""
1530
 
1531
- #: src/Tribe/Languages/Locations.php:294
1532
  msgid "Tanzania, United Republic of"
1533
  msgstr ""
1534
 
1535
- #: src/Tribe/Languages/Locations.php:295
1536
  msgid "Thailand"
1537
  msgstr ""
1538
 
1539
- #: src/Tribe/Languages/Locations.php:296
1540
  msgid "Togo"
1541
  msgstr ""
1542
 
1543
- #: src/Tribe/Languages/Locations.php:297
1544
  msgid "Tokelau"
1545
  msgstr ""
1546
 
1547
- #: src/Tribe/Languages/Locations.php:298
1548
  msgid "Tonga"
1549
  msgstr ""
1550
 
1551
- #: src/Tribe/Languages/Locations.php:299
1552
  msgid "Trinidad and Tobago"
1553
  msgstr ""
1554
 
1555
- #: src/Tribe/Languages/Locations.php:300
1556
  msgid "Tunisia"
1557
  msgstr ""
1558
 
1559
- #: src/Tribe/Languages/Locations.php:301
1560
  msgid "Turkey"
1561
  msgstr ""
1562
 
1563
- #: src/Tribe/Languages/Locations.php:302
1564
  msgid "Turkmenistan"
1565
  msgstr ""
1566
 
1567
- #: src/Tribe/Languages/Locations.php:303
1568
  msgid "Turks and Caicos Islands"
1569
  msgstr ""
1570
 
1571
- #: src/Tribe/Languages/Locations.php:304
1572
  msgid "Tuvalu"
1573
  msgstr ""
1574
 
1575
- #: src/Tribe/Languages/Locations.php:305
1576
  msgid "Uganda"
1577
  msgstr ""
1578
 
1579
- #: src/Tribe/Languages/Locations.php:306
1580
  msgid "Ukraine"
1581
  msgstr ""
1582
 
1583
- #: src/Tribe/Languages/Locations.php:307
1584
  msgid "United Arab Emirates"
1585
  msgstr ""
1586
 
1587
- #: src/Tribe/Languages/Locations.php:308
1588
  msgid "United Kingdom"
1589
  msgstr ""
1590
 
1591
- #: src/Tribe/Languages/Locations.php:309
1592
  msgid "United States Minor Outlying Islands"
1593
  msgstr ""
1594
 
1595
- #: src/Tribe/Languages/Locations.php:310
1596
  msgid "Uruguay"
1597
  msgstr ""
1598
 
1599
- #: src/Tribe/Languages/Locations.php:311
1600
  msgid "Uzbekistan"
1601
  msgstr ""
1602
 
1603
- #: src/Tribe/Languages/Locations.php:312
1604
  msgid "Vanuatu"
1605
  msgstr ""
1606
 
1607
- #: src/Tribe/Languages/Locations.php:313
1608
  msgid "Venezuela"
1609
  msgstr ""
1610
 
1611
- #: src/Tribe/Languages/Locations.php:314
1612
  msgid "Viet Nam"
1613
  msgstr ""
1614
 
1615
- #: src/Tribe/Languages/Locations.php:315
1616
  msgid "Virgin Islands (British)"
1617
  msgstr ""
1618
 
1619
- #: src/Tribe/Languages/Locations.php:316
1620
  msgid "Virgin Islands (U.S.)"
1621
  msgstr ""
1622
 
1623
- #: src/Tribe/Languages/Locations.php:317
1624
  msgid "Wallis and Futuna Islands"
1625
  msgstr ""
1626
 
1627
- #: src/Tribe/Languages/Locations.php:318
1628
  msgid "Western Sahara"
1629
  msgstr ""
1630
 
1631
- #: src/Tribe/Languages/Locations.php:319
1632
  msgid "Yemen"
1633
  msgstr ""
1634
 
1635
- #: src/Tribe/Languages/Locations.php:320
1636
  msgid "Zambia"
1637
  msgstr ""
1638
 
1639
- #: src/Tribe/Languages/Locations.php:321
1640
  msgid "Zimbabwe"
1641
  msgstr ""
1642
 
1643
- #: src/Tribe/Languages/Locations.php:348
1644
  msgid "Alabama"
1645
  msgstr ""
1646
 
1647
- #: src/Tribe/Languages/Locations.php:349
1648
  msgid "Alaska"
1649
  msgstr ""
1650
 
1651
- #: src/Tribe/Languages/Locations.php:350
1652
  msgid "Arizona"
1653
  msgstr ""
1654
 
1655
- #: src/Tribe/Languages/Locations.php:351
1656
  msgid "Arkansas"
1657
  msgstr ""
1658
 
1659
- #: src/Tribe/Languages/Locations.php:352
1660
  msgid "California"
1661
  msgstr ""
1662
 
1663
- #: src/Tribe/Languages/Locations.php:353
1664
  msgid "Colorado"
1665
  msgstr ""
1666
 
1667
- #: src/Tribe/Languages/Locations.php:354
1668
  msgid "Connecticut"
1669
  msgstr ""
1670
 
1671
- #: src/Tribe/Languages/Locations.php:355
1672
  msgid "Delaware"
1673
  msgstr ""
1674
 
1675
- #: src/Tribe/Languages/Locations.php:356
1676
  msgid "District of Columbia"
1677
  msgstr ""
1678
 
1679
- #: src/Tribe/Languages/Locations.php:357
1680
  msgid "Florida"
1681
  msgstr ""
1682
 
1683
- #: src/Tribe/Languages/Locations.php:358
1684
  msgctxt "The US state Georgia"
1685
  msgid "Georgia"
1686
  msgstr ""
1687
 
1688
- #: src/Tribe/Languages/Locations.php:359
1689
  msgid "Hawaii"
1690
  msgstr ""
1691
 
1692
- #: src/Tribe/Languages/Locations.php:360
1693
  msgid "Idaho"
1694
  msgstr ""
1695
 
1696
- #: src/Tribe/Languages/Locations.php:361
1697
  msgid "Illinois"
1698
  msgstr ""
1699
 
1700
- #: src/Tribe/Languages/Locations.php:362
1701
  msgid "Indiana"
1702
  msgstr ""
1703
 
1704
- #: src/Tribe/Languages/Locations.php:363
1705
  msgid "Iowa"
1706
  msgstr ""
1707
 
1708
- #: src/Tribe/Languages/Locations.php:364
1709
  msgid "Kansas"
1710
  msgstr ""
1711
 
1712
- #: src/Tribe/Languages/Locations.php:365
1713
  msgid "Kentucky"
1714
  msgstr ""
1715
 
1716
- #: src/Tribe/Languages/Locations.php:366
1717
  msgid "Louisiana"
1718
  msgstr ""
1719
 
1720
- #: src/Tribe/Languages/Locations.php:367
1721
  msgid "Maine"
1722
  msgstr ""
1723
 
1724
- #: src/Tribe/Languages/Locations.php:368
1725
  msgid "Maryland"
1726
  msgstr ""
1727
 
1728
- #: src/Tribe/Languages/Locations.php:369
1729
  msgid "Massachusetts"
1730
  msgstr ""
1731
 
1732
- #: src/Tribe/Languages/Locations.php:370
1733
  msgid "Michigan"
1734
  msgstr ""
1735
 
1736
- #: src/Tribe/Languages/Locations.php:371
1737
  msgid "Minnesota"
1738
  msgstr ""
1739
 
1740
- #: src/Tribe/Languages/Locations.php:372
1741
  msgid "Mississippi"
1742
  msgstr ""
1743
 
1744
- #: src/Tribe/Languages/Locations.php:373
1745
  msgid "Missouri"
1746
  msgstr ""
1747
 
1748
- #: src/Tribe/Languages/Locations.php:374
1749
  msgid "Montana"
1750
  msgstr ""
1751
 
1752
- #: src/Tribe/Languages/Locations.php:375
1753
  msgid "Nebraska"
1754
  msgstr ""
1755
 
1756
- #: src/Tribe/Languages/Locations.php:376
1757
  msgid "Nevada"
1758
  msgstr ""
1759
 
1760
- #: src/Tribe/Languages/Locations.php:377
1761
  msgid "New Hampshire"
1762
  msgstr ""
1763
 
1764
- #: src/Tribe/Languages/Locations.php:378
1765
  msgid "New Jersey"
1766
  msgstr ""
1767
 
1768
- #: src/Tribe/Languages/Locations.php:379
1769
  msgid "New Mexico"
1770
  msgstr ""
1771
 
1772
- #: src/Tribe/Languages/Locations.php:380
1773
  msgid "New York"
1774
  msgstr ""
1775
 
1776
- #: src/Tribe/Languages/Locations.php:381
1777
  msgid "North Carolina"
1778
  msgstr ""
1779
 
1780
- #: src/Tribe/Languages/Locations.php:382
1781
  msgid "North Dakota"
1782
  msgstr ""
1783
 
1784
- #: src/Tribe/Languages/Locations.php:383
1785
  msgid "Ohio"
1786
  msgstr ""
1787
 
1788
- #: src/Tribe/Languages/Locations.php:384
1789
  msgid "Oklahoma"
1790
  msgstr ""
1791
 
1792
- #: src/Tribe/Languages/Locations.php:385
1793
  msgid "Oregon"
1794
  msgstr ""
1795
 
1796
- #: src/Tribe/Languages/Locations.php:386
1797
  msgid "Pennsylvania"
1798
  msgstr ""
1799
 
1800
- #: src/Tribe/Languages/Locations.php:387
1801
  msgid "Rhode Island"
1802
  msgstr ""
1803
 
1804
- #: src/Tribe/Languages/Locations.php:388
1805
  msgid "South Carolina"
1806
  msgstr ""
1807
 
1808
- #: src/Tribe/Languages/Locations.php:389
1809
  msgid "South Dakota"
1810
  msgstr ""
1811
 
1812
- #: src/Tribe/Languages/Locations.php:390
1813
  msgid "Tennessee"
1814
  msgstr ""
1815
 
1816
- #: src/Tribe/Languages/Locations.php:391
1817
  msgid "Texas"
1818
  msgstr ""
1819
 
1820
- #: src/Tribe/Languages/Locations.php:392
1821
  msgid "Utah"
1822
  msgstr ""
1823
 
1824
- #: src/Tribe/Languages/Locations.php:393
1825
  msgid "Vermont"
1826
  msgstr ""
1827
 
1828
- #: src/Tribe/Languages/Locations.php:394
1829
  msgid "Virginia"
1830
  msgstr ""
1831
 
1832
- #: src/Tribe/Languages/Locations.php:395
1833
  msgid "Washington"
1834
  msgstr ""
1835
 
1836
- #: src/Tribe/Languages/Locations.php:396
1837
  msgid "West Virginia"
1838
  msgstr ""
1839
 
1840
- #: src/Tribe/Languages/Locations.php:397
1841
  msgid "Wisconsin"
1842
  msgstr ""
1843
 
1844
- #: src/Tribe/Languages/Locations.php:398
1845
  msgid "Wyoming"
1846
  msgstr ""
1847
 
@@ -1867,107 +1702,107 @@ msgstr ""
1867
  msgid "Null logger (will log nothing)"
1868
  msgstr ""
1869
 
1870
- #: src/Tribe/Log.php:288
1871
  msgid "Cannot set %s as the current logging engine"
1872
  msgstr ""
1873
 
1874
- #: src/Tribe/Log.php:387
1875
  msgid "Disabled"
1876
  msgstr ""
1877
 
1878
- #: src/Tribe/Log.php:388
1879
  msgid "Only errors"
1880
  msgstr ""
1881
 
1882
- #: src/Tribe/Log.php:389
1883
  msgid "Warnings and errors"
1884
  msgstr ""
1885
 
1886
- #: src/Tribe/Log.php:390
1887
  msgid "Full debug (all events)"
1888
  msgstr ""
1889
 
1890
- #: src/Tribe/Main.php:310
1891
  msgid ": activate to sort column ascending"
1892
  msgstr ""
1893
 
1894
- #: src/Tribe/Main.php:311
1895
  msgid ": activate to sort column descending"
1896
  msgstr ""
1897
 
1898
- #: src/Tribe/Main.php:313
1899
  msgid "Show _MENU_ entries"
1900
  msgstr ""
1901
 
1902
- #: src/Tribe/Main.php:314
1903
  msgid "No data available in table"
1904
  msgstr ""
1905
 
1906
- #: src/Tribe/Main.php:315
1907
  msgid "Showing _START_ to _END_ of _TOTAL_ entries"
1908
  msgstr ""
1909
 
1910
- #: src/Tribe/Main.php:316
1911
  msgid "Showing 0 to 0 of 0 entries"
1912
  msgstr ""
1913
 
1914
- #: src/Tribe/Main.php:317
1915
  msgid "(filtered from _MAX_ total entries)"
1916
  msgstr ""
1917
 
1918
- #: src/Tribe/Main.php:318
1919
  msgid "No matching records found"
1920
  msgstr ""
1921
 
1922
- #: src/Tribe/Main.php:319
1923
  msgid "Search:"
1924
  msgstr ""
1925
 
1926
- #: src/Tribe/Main.php:320
1927
  msgid "All items on this page were selected. "
1928
  msgstr ""
1929
 
1930
- #: src/Tribe/Main.php:321
1931
  msgid "Select all pages"
1932
  msgstr ""
1933
 
1934
- #: src/Tribe/Main.php:322
1935
  msgid "Clear Selection."
1936
  msgstr ""
1937
 
1938
- #: src/Tribe/Main.php:324
1939
  msgid "All"
1940
  msgstr ""
1941
 
1942
- #: src/Tribe/Main.php:325 src/Tribe/Main.php:342
1943
  msgid "Next"
1944
  msgstr ""
1945
 
1946
- #: src/Tribe/Main.php:326
1947
  msgid "Previous"
1948
  msgstr ""
1949
 
1950
- #: src/Tribe/Main.php:331
1951
  msgid ": Selected %d rows"
1952
  msgstr ""
1953
 
1954
- #: src/Tribe/Main.php:332
1955
  msgid ": Selected 1 row"
1956
  msgstr ""
1957
 
1958
- #: src/Tribe/Main.php:343
1959
  msgid "Prev"
1960
  msgstr ""
1961
 
1962
- #: src/Tribe/Main.php:344 src/Tribe/Main.php:346
1963
  msgid "Today"
1964
  msgstr ""
1965
 
1966
- #: src/Tribe/Main.php:345
1967
  msgid "Done"
1968
  msgstr ""
1969
 
1970
- #: src/Tribe/Main.php:347
1971
  msgid "Clear"
1972
  msgstr ""
1973
 
@@ -2006,68 +1841,68 @@ msgstr ""
2006
  msgid "License key(s) updated."
2007
  msgstr ""
2008
 
2009
- #: src/Tribe/PUE/Checker.php:907
2010
  msgid ""
2011
  "Hmmm... something's wrong with this validator. Please contact %ssupport%s."
2012
  msgstr ""
2013
 
2014
- #: src/Tribe/PUE/Checker.php:920
2015
  msgid "unknown date"
2016
  msgstr ""
2017
 
2018
- #: src/Tribe/PUE/Checker.php:926
2019
  msgid "Sorry, key validation server is not available."
2020
  msgstr ""
2021
 
2022
- #: src/Tribe/PUE/Checker.php:946
2023
  msgid "Valid Key! Expires on %s"
2024
  msgstr ""
2025
 
2026
- #: src/Tribe/PUE/Checker.php:951
2027
  msgid "Thanks for setting up a valid key. It will expire on %s"
2028
  msgstr ""
2029
 
2030
- #: src/Tribe/PUE/Checker.php:978 src/Tribe/PUE/Notices.php:342
2031
  msgid "Renew Your License Now"
2032
  msgstr ""
2033
 
2034
- #: src/Tribe/PUE/Checker.php:980 src/Tribe/PUE/Notices.php:344
2035
  msgid " (opens in a new window)"
2036
  msgstr ""
2037
 
2038
- #: src/Tribe/PUE/Checker.php:997
2039
  msgid "Please refresh the page and try your request again."
2040
  msgstr ""
2041
 
2042
- #: src/Tribe/PUE/Checker.php:1017
2043
  msgid ""
2044
  "There is an update for %s. You'll need to %scheck your license%s to have "
2045
  "access to updates, downloads, and support."
2046
  msgstr ""
2047
 
2048
- #: src/Tribe/PUE/Checker.php:1074
2049
  msgid ""
2050
  "There is an update for %s. %sRenew your license%s to get access to bug "
2051
  "fixes, security updates, and new features."
2052
  msgstr ""
2053
 
2054
- #: src/Tribe/PUE/Checker.php:1104
2055
  msgid "Update now to version %s."
2056
  msgstr ""
2057
 
2058
- #: src/Tribe/PUE/Checker.php:1115
2059
  msgid "There is a new version of %1$s available. %2$s"
2060
  msgstr ""
2061
 
2062
- #: src/Tribe/PUE/Checker.php:1696
2063
  msgid "A valid license has been entered by your network administrator."
2064
  msgstr ""
2065
 
2066
- #: src/Tribe/PUE/Checker.php:1697
2067
  msgid "No license entered. Consult your network administrator."
2068
  msgstr ""
2069
 
2070
- #: src/Tribe/PUE/Checker.php:1698
2071
  msgid "Expired license. Consult your network administrator."
2072
  msgstr ""
2073
 
@@ -2121,270 +1956,120 @@ msgid ""
2121
  "%4$s"
2122
  msgstr ""
2123
 
2124
- #: src/Tribe/Plugins.php:147
2125
- msgid ""
2126
- "Using this function before \"plugins_loaded\" action has fired can return "
2127
- "unreliable results."
2128
- msgstr ""
2129
-
2130
  #: src/Tribe/Plugins_API.php:28
2131
- msgid "Our flagship free calendar"
2132
- msgstr ""
2133
-
2134
- #: src/Tribe/Plugins_API.php:30 src/Tribe/Plugins_API.php:48
2135
- msgid "Customizable"
2136
- msgstr ""
2137
-
2138
- #: src/Tribe/Plugins_API.php:31
2139
- msgid "Import & export events"
2140
- msgstr ""
2141
-
2142
- #: src/Tribe/Plugins_API.php:32
2143
- msgid "Timezone support"
2144
- msgstr ""
2145
-
2146
- #: src/Tribe/Plugins_API.php:33
2147
- msgid "Multiple views"
2148
- msgstr ""
2149
-
2150
- #: src/Tribe/Plugins_API.php:45
2151
- msgid "Automated imports for your calendar"
2152
- msgstr ""
2153
-
2154
- #: src/Tribe/Plugins_API.php:47
2155
- msgid "Schedule automated imports"
2156
- msgstr ""
2157
-
2158
- #: src/Tribe/Plugins_API.php:49
2159
- msgid "Works with Google Calendar, Meetup, and more"
2160
- msgstr ""
2161
-
2162
- #: src/Tribe/Plugins_API.php:50
2163
- msgid "Refine by date, location, or keyword"
2164
- msgstr ""
2165
-
2166
- #: src/Tribe/Plugins_API.php:59
2167
- msgid "Events Calendar Pro"
2168
- msgstr ""
2169
-
2170
- #: src/Tribe/Plugins_API.php:62
2171
- msgid "Power up your calendar with Pro"
2172
- msgstr ""
2173
-
2174
- #: src/Tribe/Plugins_API.php:64
2175
- msgid "Premium support"
2176
- msgstr ""
2177
-
2178
- #: src/Tribe/Plugins_API.php:65
2179
- msgid "Recurring events"
2180
- msgstr ""
2181
-
2182
- #: src/Tribe/Plugins_API.php:66
2183
- msgid "Additional views"
2184
- msgstr ""
2185
-
2186
- #: src/Tribe/Plugins_API.php:67
2187
- msgid "Shortcodes"
2188
- msgstr ""
2189
-
2190
- #: src/Tribe/Plugins_API.php:79
2191
- msgid "Manage ticketing and RSVPs"
2192
- msgstr ""
2193
-
2194
- #: src/Tribe/Plugins_API.php:81
2195
- msgid "Add tickets and RSVP to any post"
2196
- msgstr ""
2197
-
2198
- #: src/Tribe/Plugins_API.php:82
2199
- msgid "Paypal integration"
2200
- msgstr ""
2201
-
2202
- #: src/Tribe/Plugins_API.php:83
2203
- msgid "Attendee reports"
2204
- msgstr ""
2205
-
2206
- #: src/Tribe/Plugins_API.php:84
2207
- msgid "Customizable ticket template"
2208
- msgstr ""
2209
-
2210
- #: src/Tribe/Plugins_API.php:96
2211
- msgid "Monetize your events"
2212
  msgstr ""
2213
 
2214
- #: src/Tribe/Plugins_API.php:98
2215
- msgid "Custom registration fields"
 
 
 
 
 
 
2216
  msgstr ""
2217
 
2218
- #: src/Tribe/Plugins_API.php:99
2219
- msgid "WooCommerce compatibility"
 
 
 
 
2220
  msgstr ""
2221
 
2222
- #: src/Tribe/Plugins_API.php:100
2223
- msgid "Ticket scanning with mobile app"
 
 
 
 
2224
  msgstr ""
2225
 
2226
- #: src/Tribe/Plugins_API.php:101
2227
- msgid "Custom attendee registration fields"
 
 
 
 
 
 
2228
  msgstr ""
2229
 
2230
- #: src/Tribe/Plugins_API.php:110 src/Tribe/Promoter/PUE.php:28
2231
  #: src/views/promoter/auth.php:30 src/views/promoter/auth.php:74
2232
  msgid "Promoter"
2233
  msgstr ""
2234
 
2235
- #: src/Tribe/Plugins_API.php:113
2236
- msgid "An email marketing solution for events and the people running them"
2237
- msgstr ""
2238
-
2239
- #: src/Tribe/Plugins_API.php:115
2240
- msgid "Automate email touchpoints"
2241
- msgstr ""
2242
-
2243
- #: src/Tribe/Plugins_API.php:116
2244
- msgid "Customize email templates"
2245
- msgstr ""
2246
-
2247
- #: src/Tribe/Plugins_API.php:117
2248
- msgid "Streamline your email process"
2249
- msgstr ""
2250
-
2251
- #: src/Tribe/Plugins_API.php:118
2252
- msgid "Segment your attendee lists"
2253
- msgstr ""
2254
-
2255
- #: src/Tribe/Plugins_API.php:130
2256
- msgid "Help users find exactly the right event"
2257
- msgstr ""
2258
-
2259
- #: src/Tribe/Plugins_API.php:132
2260
- msgid "Configurable set of filters"
2261
- msgstr ""
2262
-
2263
- #: src/Tribe/Plugins_API.php:133
2264
- msgid "Horizontal or vertical"
2265
- msgstr ""
2266
-
2267
- #: src/Tribe/Plugins_API.php:134
2268
- msgid "Filter category, price, and more"
2269
- msgstr ""
2270
-
2271
- #: src/Tribe/Plugins_API.php:135
2272
- msgid "Filter distance (for Events Calendar Pro)"
2273
- msgstr ""
2274
-
2275
- #: src/Tribe/Plugins_API.php:147
2276
- msgid "Users submit events to your calendar"
2277
- msgstr ""
2278
-
2279
- #: src/Tribe/Plugins_API.php:149
2280
- msgid "Publishing Control"
2281
- msgstr ""
2282
-
2283
- #: src/Tribe/Plugins_API.php:150
2284
- msgid "Event Submission Form"
2285
- msgstr ""
2286
-
2287
- #: src/Tribe/Plugins_API.php:151
2288
- msgid "Registered User Settings"
2289
- msgstr ""
2290
-
2291
- #: src/Tribe/Plugins_API.php:152
2292
- msgid "Email notifications"
2293
- msgstr ""
2294
-
2295
- #: src/Tribe/Plugins_API.php:164
2296
- msgid "Run your own events marketplace"
2297
- msgstr ""
2298
-
2299
- #: src/Tribe/Plugins_API.php:166
2300
- msgid "Users submit events and sell tickets"
2301
  msgstr ""
2302
 
2303
- #: src/Tribe/Plugins_API.php:167
2304
- msgid "Split commission with users"
 
 
 
 
 
 
2305
  msgstr ""
2306
 
2307
- #: src/Tribe/Plugins_API.php:168
2308
- msgid "No admin access required"
 
 
 
 
 
 
2309
  msgstr ""
2310
 
2311
- #: src/Tribe/Plugins_API.php:169
2312
- msgid "Sales reporting"
 
 
 
 
2313
  msgstr ""
2314
 
2315
- #: src/Tribe/Plugins_API.php:171
2316
  msgctxt "Names of required plugins for Community Tickets"
2317
  msgid "Event Tickets Plus and Community Events"
2318
  msgstr ""
2319
 
2320
- #: src/Tribe/Plugins_API.php:182
2321
- msgid "Unite the power of TEC with the ticketing of Eventbrite"
2322
- msgstr ""
2323
-
2324
- #: src/Tribe/Plugins_API.php:184
2325
- msgid "Manage tickets from WordPress"
2326
- msgstr ""
2327
-
2328
- #: src/Tribe/Plugins_API.php:185
2329
- msgid "Ticket availability automatically updates"
2330
- msgstr ""
2331
-
2332
- #: src/Tribe/Plugins_API.php:186
2333
- msgid "Integrated with your events on Eventbrite"
2334
- msgstr ""
2335
-
2336
- #: src/Tribe/Plugins_API.php:187
2337
- msgid "Automatically import your events"
2338
  msgstr ""
2339
 
2340
- #: src/Tribe/Plugins_API.php:196
2341
  msgid "Image Widget Plus"
2342
  msgstr ""
2343
 
2344
- #: src/Tribe/Plugins_API.php:199
2345
- msgid "Beautiful display options for your favorite photos."
2346
- msgstr ""
2347
-
2348
- #: src/Tribe/Plugins_API.php:201
2349
- msgid "Multi-Image Support"
2350
- msgstr ""
2351
-
2352
- #: src/Tribe/Plugins_API.php:202
2353
- msgid "Lightbox"
2354
- msgstr ""
2355
-
2356
- #: src/Tribe/Plugins_API.php:203
2357
- msgid "Slideshow"
2358
- msgstr ""
2359
-
2360
- #: src/Tribe/Plugins_API.php:204
2361
- msgid "Random Images"
2362
- msgstr ""
2363
-
2364
- #: src/Tribe/Plugins_API.php:216
2365
- msgid "Features to optimize your calendar for virtual events."
2366
- msgstr ""
2367
-
2368
- #: src/Tribe/Plugins_API.php:219
2369
- msgid "Virtual event labels"
2370
- msgstr ""
2371
-
2372
- #: src/Tribe/Plugins_API.php:220
2373
- msgid "Status control for canceled or postponed events"
2374
- msgstr ""
2375
-
2376
- #: src/Tribe/Plugins_API.php:221
2377
- msgid "Embed livestreams and videos"
2378
  msgstr ""
2379
 
2380
  #: src/Tribe/Process/Queue.php:1024
2381
  msgid "Every %d Minutes"
2382
  msgstr ""
2383
 
2384
- #: src/Tribe/Promoter/Auth.php:41
2385
- msgid "Promoter Key"
2386
- msgstr ""
2387
-
2388
  #: src/Tribe/Settings.php:177 src/Tribe/Settings.php:241
2389
  #: src/Tribe/Settings.php:242
2390
  msgid "Events"
@@ -2454,16 +2139,16 @@ msgstr ""
2454
  msgid "Display"
2455
  msgstr ""
2456
 
2457
- #: src/Tribe/Settings_Manager.php:259
2458
  msgid "Network"
2459
  msgstr ""
2460
 
2461
- #: src/Tribe/Settings_Manager.php:293
2462
  #: src/admin-views/tribe-options-licenses.php:57
2463
  msgid "Licenses"
2464
  msgstr ""
2465
 
2466
- #: src/Tribe/Settings_Manager.php:323
2467
  msgid "Help"
2468
  msgstr ""
2469
 
@@ -2517,26 +2202,26 @@ msgstr ""
2517
 
2518
  #: src/Tribe/Support.php:318
2519
  msgid ""
2520
- "Yes, automatically share my system information with The Events Calendar's "
2521
- "support team"
2522
  msgstr ""
2523
 
2524
  #: src/Tribe/Support.php:319
2525
  msgid ""
2526
- "Your system information will only be used by The Events Calendar's support "
2527
- "team. All information is stored securely. We do not share this information "
2528
- "with any third parties."
2529
  msgstr ""
2530
 
2531
  #: src/Tribe/Support.php:338 src/Tribe/Support.php:343
2532
  msgid "Invalid Key"
2533
  msgstr ""
2534
 
2535
- #: src/Tribe/Support.php:376 src/Tribe/Support.php:402
2536
  msgid "Permission Error"
2537
  msgstr ""
2538
 
2539
- #: src/Tribe/Support.php:390
2540
  msgid "Unique System Info Key Generated"
2541
  msgstr ""
2542
 
@@ -2652,99 +2337,24 @@ msgstr ""
2652
  msgid "Select a Country:"
2653
  msgstr ""
2654
 
2655
- #: src/Tribe/Widget/Widget_Abstract.php:185
2656
- msgid "Widget"
2657
  msgstr ""
2658
 
2659
- #: src/admin-views/app-shop.php:24
2660
- msgid "The Events Calendar brand logo"
2661
  msgstr ""
2662
 
2663
- #: src/admin-views/app-shop.php:29
2664
- msgid "All Solutions"
2665
  msgstr ""
2666
 
2667
- #: src/admin-views/app-shop.php:30
2668
- msgid "Save with Bundles"
2669
  msgstr ""
2670
 
2671
  #: src/admin-views/app-shop.php:31
2672
- msgid "Extensions"
2673
- msgstr ""
2674
-
2675
- #: src/admin-views/app-shop.php:40 src/admin-views/app-shop.php:102
2676
- #: src/admin-views/app-shop.php:160
2677
- msgid "Shapes and lines for visual interest"
2678
- msgstr ""
2679
-
2680
- #: src/admin-views/app-shop.php:46
2681
- msgid "One calendar. Countless ways to make it your own."
2682
- msgstr ""
2683
-
2684
- #: src/admin-views/app-shop.php:47
2685
- msgid ""
2686
- "Calendars, ticketing, and powerful WordPress tools to manage your events "
2687
- "from start to finish."
2688
- msgstr ""
2689
-
2690
- #: src/admin-views/app-shop.php:49
2691
- msgid "Already Installed"
2692
- msgstr ""
2693
-
2694
- #: src/admin-views/app-shop.php:55 src/admin-views/app-shop.php:112
2695
- #: src/admin-views/app-shop.php:134
2696
- msgid "TEC Logo"
2697
- msgstr ""
2698
-
2699
- #: src/admin-views/app-shop.php:59
2700
- msgid "Active"
2701
- msgstr ""
2702
-
2703
- #: src/admin-views/app-shop.php:61 src/admin-views/app-shop.php:170
2704
- msgid "FREE"
2705
- msgstr ""
2706
-
2707
- #: src/admin-views/app-shop.php:86
2708
- msgid "Manage"
2709
- msgstr ""
2710
-
2711
- #: src/admin-views/app-shop.php:88
2712
- msgid "Learn More"
2713
- msgstr ""
2714
-
2715
- #: src/admin-views/app-shop.php:106
2716
- msgid "The plugins you need at one discounted price"
2717
- msgstr ""
2718
-
2719
- #: src/admin-views/app-shop.php:107
2720
- msgid ""
2721
- "We've packaged our most popular plugins into bundles jam-packed with value."
2722
- msgstr ""
2723
-
2724
- #: src/admin-views/app-shop.php:119 src/admin-views/app-shop.php:146
2725
- msgid "Save With A Bundle"
2726
- msgstr ""
2727
-
2728
- #: src/admin-views/app-shop.php:125
2729
- msgid "Includes"
2730
- msgstr ""
2731
-
2732
- #: src/admin-views/app-shop.php:164
2733
- msgid "Free extensions to power up your plugins"
2734
- msgstr ""
2735
-
2736
- #: src/admin-views/app-shop.php:165
2737
- msgid ""
2738
- "Extensions are quick solutions our team came up with to solve specific "
2739
- "issues you may need. (Note - extensions are not covered by our support team.)"
2740
- msgstr ""
2741
-
2742
- #: src/admin-views/app-shop.php:179
2743
- msgid "Download"
2744
- msgstr ""
2745
-
2746
- #: src/admin-views/app-shop.php:183
2747
- msgid "Browse Extensions"
2748
  msgstr ""
2749
 
2750
  #: src/admin-views/event-log.php:21
@@ -2767,35 +2377,35 @@ msgstr ""
2767
  msgid "Download log"
2768
  msgstr ""
2769
 
2770
- #: src/admin-views/tribe-options-display.php:23
2771
  msgid "Date Format Settings"
2772
  msgstr ""
2773
 
2774
- #: src/admin-views/tribe-options-display.php:29
2775
  msgid ""
2776
  "The following three fields accept the date format options available to the "
2777
  "PHP %1$s function. <a href=\"%2$s\" target=\"_blank\">Learn how to make your "
2778
  "own date format here</a>."
2779
  msgstr ""
2780
 
2781
- #: src/admin-views/tribe-options-display.php:37
2782
  msgid "Compact Date Format"
2783
  msgstr ""
2784
 
2785
- #: src/admin-views/tribe-options-display.php:38
2786
  msgid ""
2787
  "Select the date format used for elements with minimal space, such as in "
2788
  "datepickers."
2789
  msgstr ""
2790
 
2791
- #: src/admin-views/tribe-options-general.php:14
2792
  msgid ""
2793
- "Thank you for using Event Tickets! All of us at The Events Calendar "
2794
- "sincerely appreciate your support and we're excited to see you using our "
2795
- "plugins. Check out our handy %1$sNew User Primer%2$s to get started."
2796
  msgstr ""
2797
 
2798
- #: src/admin-views/tribe-options-general.php:19
2799
  msgid ""
2800
  "Optimize your site's event listings with %1$sThe Events Calendar%2$s, our "
2801
  "free calendar plugin. Looking for additional functionality including "
@@ -2803,41 +2413,41 @@ msgid ""
2803
  "our %3$spremium add-ons%4$s."
2804
  msgstr ""
2805
 
2806
- #: src/admin-views/tribe-options-general.php:24
2807
  msgid ""
2808
  "Looking for additional functionality including recurring events, custom "
2809
  "meta, community events, ticket sales and more?"
2810
  msgstr ""
2811
 
2812
- #: src/admin-views/tribe-options-general.php:24
2813
  msgid "Check out the available add-ons"
2814
  msgstr ""
2815
 
2816
- #: src/admin-views/tribe-options-general.php:29
2817
  msgid "We hope our plugin is helping you out."
2818
  msgstr ""
2819
 
2820
- #: src/admin-views/tribe-options-general.php:34
2821
  msgid ""
2822
- "Are you thinking \"Wow, this plugin is amazing! I should say thanks to The "
2823
- "Events Calendar for all their hard work.\" The greatest thanks we could ask "
2824
- "for is recognition. Add a small text-only link at the bottom of your "
2825
- "calendar pointing to The Events Calendar project."
2826
  msgstr ""
2827
 
2828
- #: src/admin-views/tribe-options-general.php:34
2829
  msgid "See an example of the link"
2830
  msgstr ""
2831
 
2832
- #: src/admin-views/tribe-options-general.php:39
2833
  msgid "Show The Events Calendar link"
2834
  msgstr ""
2835
 
2836
- #: src/admin-views/tribe-options-general.php:57
2837
  msgid "Debug mode"
2838
  msgstr ""
2839
 
2840
- #: src/admin-views/tribe-options-general.php:59
2841
  msgid ""
2842
  "Enable this option to log debug information. By default this will log to "
2843
  "your server PHP error log. If you'd like to see the log messages in your "
@@ -2845,14 +2455,14 @@ msgid ""
2845
  "\" tab in the debug output."
2846
  msgstr ""
2847
 
2848
- #: src/admin-views/tribe-options-general.php:63
2849
  msgid "Debug Bar Plugin"
2850
  msgstr ""
2851
 
2852
  #: src/admin-views/tribe-options-help.php:11
2853
  msgid ""
2854
- "Thank you for using %s! All of us at The Events Calendar sincerely "
2855
- "appreciate your support and we’re excited to see you using our plugins."
2856
  msgstr ""
2857
 
2858
  #: src/admin-views/tribe-options-help.php:14
@@ -2893,28 +2503,28 @@ msgid ""
2893
  "steps:"
2894
  msgstr ""
2895
 
2896
- #: src/admin-views/tribe-options-help.php:33
2897
  msgid ""
2898
  "%s. All of the common (and not-so-common) answers to questions we see are "
2899
  "here. It’s often the fastest path to finding an answer!"
2900
  msgstr ""
2901
 
2902
- #: src/admin-views/tribe-options-help.php:37
2903
  msgid "Check our Knowledgebase"
2904
  msgstr ""
2905
 
2906
- #: src/admin-views/tribe-options-help.php:43
2907
  msgid ""
2908
  "%s. Testing for an existing conflict is the best start for in-depth "
2909
  "troubleshooting. We will often ask you to follow these steps when opening a "
2910
  "new thread, so doing this ahead of time will be super helpful."
2911
  msgstr ""
2912
 
2913
- #: src/admin-views/tribe-options-help.php:47
2914
  msgid "Test for a theme or plugin conflict"
2915
  msgstr ""
2916
 
2917
- #: src/admin-views/tribe-options-help.php:53
2918
  msgid ""
2919
  "%s. There are very few issues we haven’t seen and it’s likely another user "
2920
  "has already asked your question and gotten an answer from our support staff. "
@@ -2922,25 +2532,25 @@ msgid ""
2922
  "for anyone to search and review."
2923
  msgstr ""
2924
 
2925
- #: src/admin-views/tribe-options-help.php:57
2926
  msgid "Search our support help desk"
2927
  msgstr ""
2928
 
2929
- #: src/admin-views/tribe-options-help.php:67
2930
  msgid ""
2931
  "Please note that all hands-on support is provided via the help desk. You can "
2932
  "email or tweet at us… ​but we will probably point you back to the help desk 😄"
2933
  msgstr ""
2934
 
2935
- #: src/admin-views/tribe-options-help.php:68
2936
  msgid "Read more about our support policy"
2937
  msgstr ""
2938
 
2939
- #: src/admin-views/tribe-options-help.php:71
2940
  msgid "System Information"
2941
  msgstr ""
2942
 
2943
- #: src/admin-views/tribe-options-help.php:72
2944
  msgid ""
2945
  "The details of your calendar plugin and settings is often needed for you or "
2946
  "our staff to help troubleshoot an issue. Please opt-in below to "
@@ -2948,19 +2558,19 @@ msgid ""
2948
  "allow us to assist you faster if you post in our help desk."
2949
  msgstr ""
2950
 
2951
- #: src/admin-views/tribe-options-help.php:82
2952
  msgid "Recent Template Changes"
2953
  msgstr ""
2954
 
2955
- #: src/admin-views/tribe-options-help.php:85
2956
  msgid "Event Log"
2957
  msgstr ""
2958
 
2959
- #: src/admin-views/tribe-options-help.php:104
2960
  msgid "News and Tutorials"
2961
  msgstr ""
2962
 
2963
- #: src/admin-views/tribe-options-help.php:110
2964
  msgid "More..."
2965
  msgstr ""
2966
 
@@ -3018,15 +2628,15 @@ msgstr ""
3018
 
3019
  #: src/admin-views/tribe-options-network.php:19
3020
  msgid ""
3021
- "This is where all of the global network settings for The Events Calendar can "
3022
- "be modified."
3023
  msgstr ""
3024
 
3025
  #: src/admin-views/tribe-options-network.php:27
3026
  msgid "Hide the following settings tabs on every site:"
3027
  msgstr ""
3028
 
3029
- #: src/functions/template-tags/html.php:101
3030
  msgctxt "The associated field is required."
3031
  msgid "(required)"
3032
  msgstr ""
@@ -3084,6 +2694,11 @@ msgstr ""
3084
  msgid "An event settings framework for managing shared options"
3085
  msgstr ""
3086
 
 
 
 
 
3087
  #. Author URI of the plugin/theme
3088
- msgid "http://evnt.is/1x"
3089
  msgstr ""
 
1
+ # Copyright (C) 2020 Modern Tribe
2
  # This file is distributed under the same license as the Tribe Common package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Tribe Common 4.12.0\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
+ "POT-Creation-Date: 2020-04-24 02:58:48+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-04-24 02:58\n"
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
15
+ #: src/Tribe/Admin/Activation_Page.php:84
16
  msgid "Go to plugins page"
17
  msgstr ""
18
 
19
+ #: src/Tribe/Admin/Activation_Page.php:84
20
  msgid "Return to Plugins page"
21
  msgstr ""
22
 
23
+ #: src/Tribe/Admin/Activation_Page.php:92
24
  msgid "Go to WordPress Updates page"
25
  msgstr ""
26
 
27
+ #: src/Tribe/Admin/Activation_Page.php:92
28
  msgid "Return to WordPress Updates"
29
  msgstr ""
30
 
31
+ #: src/Tribe/Admin/Help_Page.php:56 src/admin-views/tribe-options-help.php:50
32
  msgid "Copy to clipboard"
33
  msgstr ""
34
 
40
  msgid "Press \"Cmd + C\" to copy"
41
  msgstr ""
42
 
43
+ #: src/Tribe/Admin/Help_Page.php:79 src/Tribe/Customizer.php:563
 
 
44
  #: src/Tribe/Plugins_API.php:25
45
  msgid "The Events Calendar"
46
  msgstr ""
51
  "easily share your events."
52
  msgstr ""
53
 
54
+ #: src/Tribe/Admin/Help_Page.php:95 src/Tribe/Plugins_API.php:57
55
  msgid "Event Tickets"
56
  msgstr ""
57
 
58
+ #: src/Tribe/Admin/Help_Page.php:99
59
  msgid ""
60
  "Events Tickets is a carefully crafted, extensible plugin that lets you "
61
  "easily sell tickets for your events."
62
  msgstr ""
63
 
64
+ #: src/Tribe/Admin/Help_Page.php:111
65
  msgid "Advanced Post Manager"
66
  msgstr ""
67
 
68
+ #: src/Tribe/Admin/Help_Page.php:115
69
  msgid ""
70
  "Turbo charge your posts admin for any custom post type with sortable filters "
71
  "and columns, and auto-registration of metaboxes."
72
  msgstr ""
73
 
74
+ #: src/Tribe/Admin/Help_Page.php:190
75
  msgid " and "
76
  msgstr ""
77
 
78
+ #: src/Tribe/Admin/Help_Page.php:214 src/Tribe/Plugins_API.php:43
79
  msgid "Events Calendar PRO"
80
  msgstr ""
81
 
82
+ #: src/Tribe/Admin/Help_Page.php:223 src/Tribe/Plugins_API.php:121
83
  msgid "Eventbrite Tickets"
84
  msgstr ""
85
 
86
+ #: src/Tribe/Admin/Help_Page.php:231 src/Tribe/Plugins_API.php:100
87
  msgid "Community Events"
88
  msgstr ""
89
 
90
+ #: src/Tribe/Admin/Help_Page.php:239 src/Tribe/Plugins_API.php:34
91
  msgid "Event Aggregator"
92
  msgstr ""
93
 
94
+ #: src/Tribe/Admin/Help_Page.php:247 src/Tribe/Plugins_API.php:90
95
  msgid "Filter Bar"
96
  msgstr ""
97
 
98
+ #: src/Tribe/Admin/Help_Page.php:255 src/Tribe/Plugins_API.php:66
 
 
 
 
99
  msgid "Event Tickets Plus"
100
  msgstr ""
101
 
102
+ #: src/Tribe/Admin/Help_Page.php:264 src/Tribe/Plugins_API.php:110
103
  msgid "Community Tickets"
104
  msgstr ""
105
 
106
+ #: src/Tribe/Admin/Help_Page.php:425
107
  msgctxt "not available"
108
  msgid "n/a"
109
  msgstr ""
110
 
111
+ #: src/Tribe/Admin/Help_Page.php:433
112
  msgid "You need to upgrade!"
113
  msgstr ""
114
 
115
+ #: src/Tribe/Admin/Help_Page.php:433 src/Tribe/Admin/Help_Page.php:808
116
  msgid "You are up to date!"
117
  msgstr ""
118
 
119
+ #: src/Tribe/Admin/Help_Page.php:798
120
  msgid "Activate %s"
121
  msgstr ""
122
 
123
+ #: src/Tribe/Admin/Help_Page.php:798
124
  msgid "Activate Plugin"
125
  msgstr ""
126
 
127
+ #: src/Tribe/Admin/Help_Page.php:806
128
  msgid "Upgrade Plugin"
129
  msgstr ""
130
 
131
+ #: src/Tribe/Admin/Help_Page.php:822
132
  msgid "Install %s"
133
  msgstr ""
134
 
135
+ #: src/Tribe/Admin/Help_Page.php:822
136
  msgid "Install Plugin"
137
  msgstr ""
138
 
139
+ #: src/Tribe/Admin/Help_Page.php:839
140
  msgid "Latest Version:"
141
  msgstr ""
142
 
143
+ #: src/Tribe/Admin/Help_Page.php:842 src/admin-views/app-shop.php:77
144
  msgid "Requires:"
145
  msgstr ""
146
 
147
+ #: src/Tribe/Admin/Help_Page.php:843
148
  msgid "WordPress "
149
  msgstr ""
150
 
151
+ #: src/Tribe/Admin/Help_Page.php:845
152
  msgid "Active Users:"
153
  msgstr ""
154
 
155
+ #: src/Tribe/Admin/Help_Page.php:848
156
  msgid "Rating:"
157
  msgstr ""
158
 
159
+ #: src/Tribe/Admin/Help_Page.php:867
160
  msgid "Premium Add-Ons"
161
  msgstr ""
162
 
163
+ #: src/Tribe/Admin/Help_Page.php:873
164
  msgid "Plugin Active"
165
  msgstr ""
166
 
167
+ #: src/Tribe/Admin/Help_Page.php:875
168
  msgid "Plugin Inactive"
169
  msgstr ""
170
 
171
+ #: src/Tribe/Admin/Help_Page.php:880
172
  msgid "Visit the Add-on Page"
173
  msgstr ""
174
 
215
  "compatible version of The Events Calendar. %2$s"
216
  msgstr ""
217
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  #: src/Tribe/Ajax/Dropdown.php:38
219
  msgid "Cannot look for Terms without a taxonomy"
220
  msgstr ""
221
 
222
+ #: src/Tribe/Ajax/Dropdown.php:180
223
  msgid "Missing data source for this dropdown"
224
  msgstr ""
225
 
226
+ #: src/Tribe/Ajax/Dropdown.php:193
227
  msgid "Empty data set for this dropdown"
228
  msgstr ""
229
 
230
+ #: src/Tribe/Ajax/Dropdown.php:243
231
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
232
  msgstr ""
233
 
234
  #: src/Tribe/App_Shop.php:50 src/Tribe/App_Shop.php:51
235
+ #: src/Tribe/App_Shop.php:72
236
  msgid "Event Add-Ons"
237
  msgstr ""
238
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  #: src/Tribe/Cost_Utils.php:114
240
  msgid "Free"
241
  msgstr ""
252
  msgid "Rate %1$sEvent Tickets%2$s %3$s"
253
  msgstr ""
254
 
255
+ #: src/Tribe/Customizer.php:564
256
  msgid ""
257
  "Use the following panel of your customizer to change the styling of your "
258
  "Calendar and Event pages."
260
 
261
  #: src/Tribe/Debug_Bar/Panels/Context.php:22
262
  #: src/Tribe/Debug_Bar/Panels/Context.php:50
263
+ msgid "Modern Tribe Context"
264
  msgstr ""
265
 
266
  #: src/Tribe/Debug_Bar/Panels/Context.php:53
293
 
294
  #: src/Tribe/Debug_Bar/Panels/Json_Ld.php:21
295
  #: src/Tribe/Debug_Bar/Panels/Json_Ld.php:40
296
+ msgid "Modern Tribe JSON-LD Data"
297
  msgstr ""
298
 
299
+ #: src/Tribe/Dialog/View.php:153
300
  msgid "Open the modal window"
301
  msgstr ""
302
 
303
+ #: src/Tribe/Dialog/View.php:154
304
  msgid "Close this modal window"
305
  msgstr ""
306
 
307
+ #: src/Tribe/Dialog/View.php:222
308
  msgid "Cancel"
309
  msgstr ""
310
 
311
+ #: src/Tribe/Dialog/View.php:223
312
  msgid "Confirm"
313
  msgstr ""
314
 
315
+ #: src/Tribe/Dialog/View.php:288
316
  msgid "OK"
317
  msgstr ""
318
 
319
+ #: src/Tribe/Dialog/View.php:355
320
  msgid "Open the dialog window"
321
  msgstr ""
322
 
323
+ #: src/Tribe/Dialog/View.php:369
324
  msgid "Close this dialog window"
325
  msgstr ""
326
 
436
  msgid "A list of links to the term own, archive and parent REST URL"
437
  msgstr ""
438
 
439
+ #: src/Tribe/Editor/Blocks/Abstract.php:127
440
  msgid "Problem loading the block, please remove this block to restart."
441
  msgstr ""
442
 
443
  #. translators: %s: duration
444
+ #: src/Tribe/Editor/Configuration.php:89
445
  msgid "%s from now"
446
  msgstr ""
447
 
448
  #. translators: %s: duration
449
+ #: src/Tribe/Editor/Configuration.php:91
450
  msgid "%s ago"
451
  msgstr ""
452
 
453
+ #: src/Tribe/Editor/Configuration.php:95 src/Tribe/Editor/Configuration.php:98
 
454
  msgid "g:i a"
455
  msgstr ""
456
 
457
+ #: src/Tribe/Editor/Configuration.php:96 src/Tribe/Editor/Configuration.php:98
 
458
  msgid "F j, Y"
459
  msgstr ""
460
 
461
+ #: src/Tribe/Editor/Configuration.php:97
462
  msgid "F j"
463
  msgstr ""
464
 
478
  msgid "Tutorial"
479
  msgstr ""
480
 
481
+ #: src/Tribe/Extension.php:377
482
  msgid ""
483
  "Unable to run Tribe Extensions. Your website host is running PHP 5.2 or "
484
  "older, and has likely disabled or misconfigured debug_backtrace(). You, or "
486
  "debug_backtrace() for Tribe Extensions to work."
487
  msgstr ""
488
 
489
+ #: src/Tribe/Field.php:233
 
 
 
 
 
 
 
 
 
490
  msgid "Invalid field type specified"
491
  msgstr ""
492
 
493
+ #: src/Tribe/Field.php:541
494
  msgid "No radio options specified"
495
  msgstr ""
496
 
497
+ #: src/Tribe/Field.php:577
498
  msgid "No checkbox options specified"
499
  msgstr ""
500
 
501
+ #: src/Tribe/Field.php:638
502
  msgid "No select options specified"
503
  msgstr ""
504
 
505
+ #: src/Tribe/Languages/Locations.php:55
506
  msgid "United States"
507
  msgstr ""
508
 
509
+ #: src/Tribe/Languages/Locations.php:56
510
  msgid "Afghanistan"
511
  msgstr ""
512
 
513
+ #: src/Tribe/Languages/Locations.php:57
514
  msgid "&Aring;land Islands"
515
  msgstr ""
516
 
517
+ #: src/Tribe/Languages/Locations.php:58
518
  msgid "Albania"
519
  msgstr ""
520
 
521
+ #: src/Tribe/Languages/Locations.php:59
522
  msgid "Algeria"
523
  msgstr ""
524
 
525
+ #: src/Tribe/Languages/Locations.php:60
526
  msgid "American Samoa"
527
  msgstr ""
528
 
529
+ #: src/Tribe/Languages/Locations.php:61
530
  msgid "Andorra"
531
  msgstr ""
532
 
533
+ #: src/Tribe/Languages/Locations.php:62
534
  msgid "Angola"
535
  msgstr ""
536
 
537
+ #: src/Tribe/Languages/Locations.php:63
538
  msgid "Anguilla"
539
  msgstr ""
540
 
541
+ #: src/Tribe/Languages/Locations.php:64
542
  msgid "Antarctica"
543
  msgstr ""
544
 
545
+ #: src/Tribe/Languages/Locations.php:65
546
  msgid "Antigua and Barbuda"
547
  msgstr ""
548
 
549
+ #: src/Tribe/Languages/Locations.php:66
550
  msgid "Argentina"
551
  msgstr ""
552
 
553
+ #: src/Tribe/Languages/Locations.php:67
554
  msgid "Armenia"
555
  msgstr ""
556
 
557
+ #: src/Tribe/Languages/Locations.php:68
558
  msgid "Aruba"
559
  msgstr ""
560
 
561
+ #: src/Tribe/Languages/Locations.php:69
562
  msgid "Australia"
563
  msgstr ""
564
 
565
+ #: src/Tribe/Languages/Locations.php:70
566
  msgid "Austria"
567
  msgstr ""
568
 
569
+ #: src/Tribe/Languages/Locations.php:71
570
  msgid "Azerbaijan"
571
  msgstr ""
572
 
573
+ #: src/Tribe/Languages/Locations.php:72
574
  msgid "Bahamas"
575
  msgstr ""
576
 
577
+ #: src/Tribe/Languages/Locations.php:73
578
  msgid "Bahrain"
579
  msgstr ""
580
 
581
+ #: src/Tribe/Languages/Locations.php:74
582
  msgid "Bangladesh"
583
  msgstr ""
584
 
585
+ #: src/Tribe/Languages/Locations.php:75
586
  msgid "Barbados"
587
  msgstr ""
588
 
589
+ #: src/Tribe/Languages/Locations.php:76
590
  msgid "Belarus"
591
  msgstr ""
592
 
593
+ #: src/Tribe/Languages/Locations.php:77
594
  msgid "Belgium"
595
  msgstr ""
596
 
597
+ #: src/Tribe/Languages/Locations.php:78
598
  msgid "Belize"
599
  msgstr ""
600
 
601
+ #: src/Tribe/Languages/Locations.php:79
602
  msgid "Benin"
603
  msgstr ""
604
 
605
+ #: src/Tribe/Languages/Locations.php:80
606
  msgid "Bermuda"
607
  msgstr ""
608
 
609
+ #: src/Tribe/Languages/Locations.php:81
610
  msgid "Bhutan"
611
  msgstr ""
612
 
613
+ #: src/Tribe/Languages/Locations.php:82
614
  msgid "Bolivia"
615
  msgstr ""
616
 
617
+ #: src/Tribe/Languages/Locations.php:83
618
  msgid "Bosnia and Herzegovina"
619
  msgstr ""
620
 
621
+ #: src/Tribe/Languages/Locations.php:84
622
  msgid "Botswana"
623
  msgstr ""
624
 
625
+ #: src/Tribe/Languages/Locations.php:85
626
  msgid "Bouvet Island"
627
  msgstr ""
628
 
629
+ #: src/Tribe/Languages/Locations.php:86
630
  msgid "Brazil"
631
  msgstr ""
632
 
633
+ #: src/Tribe/Languages/Locations.php:87
634
  msgid "British Indian Ocean Territory"
635
  msgstr ""
636
 
637
+ #: src/Tribe/Languages/Locations.php:88
638
  msgid "Brunei Darussalam"
639
  msgstr ""
640
 
641
+ #: src/Tribe/Languages/Locations.php:89
642
  msgid "Bulgaria"
643
  msgstr ""
644
 
645
+ #: src/Tribe/Languages/Locations.php:90
646
  msgid "Burkina Faso"
647
  msgstr ""
648
 
649
+ #: src/Tribe/Languages/Locations.php:91
650
  msgid "Burundi"
651
  msgstr ""
652
 
653
+ #: src/Tribe/Languages/Locations.php:92
654
  msgid "Cambodia"
655
  msgstr ""
656
 
657
+ #: src/Tribe/Languages/Locations.php:93
658
  msgid "Cameroon"
659
  msgstr ""
660
 
661
+ #: src/Tribe/Languages/Locations.php:94
662
  msgid "Canada"
663
  msgstr ""
664
 
665
+ #: src/Tribe/Languages/Locations.php:95
666
  msgid "Cape Verde"
667
  msgstr ""
668
 
669
+ #: src/Tribe/Languages/Locations.php:96
670
  msgid "Cayman Islands"
671
  msgstr ""
672
 
673
+ #: src/Tribe/Languages/Locations.php:97
674
  msgid "Central African Republic"
675
  msgstr ""
676
 
677
+ #: src/Tribe/Languages/Locations.php:98
678
  msgid "Chad"
679
  msgstr ""
680
 
681
+ #: src/Tribe/Languages/Locations.php:99
682
  msgid "Chile"
683
  msgstr ""
684
 
685
+ #: src/Tribe/Languages/Locations.php:100
686
  msgid "China"
687
  msgstr ""
688
 
689
+ #: src/Tribe/Languages/Locations.php:101
690
  msgid "Christmas Island"
691
  msgstr ""
692
 
693
+ #: src/Tribe/Languages/Locations.php:102
694
  msgid "Cocos (Keeling) Islands"
695
  msgstr ""
696
 
697
+ #: src/Tribe/Languages/Locations.php:103
698
  msgid "Collectivity of Saint Martin"
699
  msgstr ""
700
 
701
+ #: src/Tribe/Languages/Locations.php:104
702
  msgid "Colombia"
703
  msgstr ""
704
 
705
+ #: src/Tribe/Languages/Locations.php:105
706
  msgid "Comoros"
707
  msgstr ""
708
 
709
+ #: src/Tribe/Languages/Locations.php:106
710
  msgid "Congo"
711
  msgstr ""
712
 
713
+ #: src/Tribe/Languages/Locations.php:107
714
  msgid "Congo, Democratic Republic of the"
715
  msgstr ""
716
 
717
+ #: src/Tribe/Languages/Locations.php:108
718
  msgid "Cook Islands"
719
  msgstr ""
720
 
721
+ #: src/Tribe/Languages/Locations.php:109
722
  msgid "Costa Rica"
723
  msgstr ""
724
 
725
+ #: src/Tribe/Languages/Locations.php:110
726
  msgid "C&ocirc;te d'Ivoire"
727
  msgstr ""
728
 
729
+ #: src/Tribe/Languages/Locations.php:111
730
  msgid "Croatia (Local Name: Hrvatska)"
731
  msgstr ""
732
 
733
+ #: src/Tribe/Languages/Locations.php:112
734
  msgid "Cuba"
735
  msgstr ""
736
 
737
+ #: src/Tribe/Languages/Locations.php:113
738
  msgid "Cura&ccedil;ao"
739
  msgstr ""
740
 
741
+ #: src/Tribe/Languages/Locations.php:114
742
  msgid "Cyprus"
743
  msgstr ""
744
 
745
+ #: src/Tribe/Languages/Locations.php:115
746
  msgid "Czech Republic"
747
  msgstr ""
748
 
749
+ #: src/Tribe/Languages/Locations.php:116
750
  msgid "Denmark"
751
  msgstr ""
752
 
753
+ #: src/Tribe/Languages/Locations.php:117
754
  msgid "Djibouti"
755
  msgstr ""
756
 
757
+ #: src/Tribe/Languages/Locations.php:118
758
  msgid "Dominica"
759
  msgstr ""
760
 
761
+ #: src/Tribe/Languages/Locations.php:119
762
  msgid "Dominican Republic"
763
  msgstr ""
764
 
765
+ #: src/Tribe/Languages/Locations.php:120
766
  msgid "East Timor"
767
  msgstr ""
768
 
769
+ #: src/Tribe/Languages/Locations.php:121
770
  msgid "Ecuador"
771
  msgstr ""
772
 
773
+ #: src/Tribe/Languages/Locations.php:122
774
  msgid "Egypt"
775
  msgstr ""
776
 
777
+ #: src/Tribe/Languages/Locations.php:123
778
  msgid "El Salvador"
779
  msgstr ""
780
 
781
+ #: src/Tribe/Languages/Locations.php:124
782
  msgid "Equatorial Guinea"
783
  msgstr ""
784
 
785
+ #: src/Tribe/Languages/Locations.php:125
786
  msgid "Eritrea"
787
  msgstr ""
788
 
789
+ #: src/Tribe/Languages/Locations.php:126
790
  msgid "Estonia"
791
  msgstr ""
792
 
793
+ #: src/Tribe/Languages/Locations.php:127
794
  msgid "Ethiopia"
795
  msgstr ""
796
 
797
+ #: src/Tribe/Languages/Locations.php:128
798
  msgid "Falkland Islands (Malvinas)"
799
  msgstr ""
800
 
801
+ #: src/Tribe/Languages/Locations.php:129
802
  msgid "Faroe Islands"
803
  msgstr ""
804
 
805
+ #: src/Tribe/Languages/Locations.php:130
806
  msgid "Fiji"
807
  msgstr ""
808
 
809
+ #: src/Tribe/Languages/Locations.php:131
810
  msgid "Finland"
811
  msgstr ""
812
 
813
+ #: src/Tribe/Languages/Locations.php:132
814
  msgid "France"
815
  msgstr ""
816
 
817
+ #: src/Tribe/Languages/Locations.php:133
818
  msgid "French Guiana"
819
  msgstr ""
820
 
821
+ #: src/Tribe/Languages/Locations.php:134
822
  msgid "French Polynesia"
823
  msgstr ""
824
 
825
+ #: src/Tribe/Languages/Locations.php:135
826
  msgid "French Southern Territories"
827
  msgstr ""
828
 
829
+ #: src/Tribe/Languages/Locations.php:136
830
  msgid "Gabon"
831
  msgstr ""
832
 
833
+ #: src/Tribe/Languages/Locations.php:137
834
  msgid "Gambia"
835
  msgstr ""
836
 
837
+ #: src/Tribe/Languages/Locations.php:138
838
  msgctxt "The country"
839
  msgid "Georgia"
840
  msgstr ""
841
 
842
+ #: src/Tribe/Languages/Locations.php:139
843
  msgid "Germany"
844
  msgstr ""
845
 
846
+ #: src/Tribe/Languages/Locations.php:140
847
  msgid "Ghana"
848
  msgstr ""
849
 
850
+ #: src/Tribe/Languages/Locations.php:141
851
  msgid "Gibraltar"
852
  msgstr ""
853
 
854
+ #: src/Tribe/Languages/Locations.php:142
855
  msgid "Greece"
856
  msgstr ""
857
 
858
+ #: src/Tribe/Languages/Locations.php:143
859
  msgid "Greenland"
860
  msgstr ""
861
 
862
+ #: src/Tribe/Languages/Locations.php:144
863
  msgid "Grenada"
864
  msgstr ""
865
 
866
+ #: src/Tribe/Languages/Locations.php:145
867
  msgid "Guadeloupe"
868
  msgstr ""
869
 
870
+ #: src/Tribe/Languages/Locations.php:146
871
  msgid "Guam"
872
  msgstr ""
873
 
874
+ #: src/Tribe/Languages/Locations.php:147
875
  msgid "Guatemala"
876
  msgstr ""
877
 
878
+ #: src/Tribe/Languages/Locations.php:148
879
  msgid "Guinea"
880
  msgstr ""
881
 
882
+ #: src/Tribe/Languages/Locations.php:149
883
  msgid "Guinea-Bissau"
884
  msgstr ""
885
 
886
+ #: src/Tribe/Languages/Locations.php:150
887
  msgid "Guyana"
888
  msgstr ""
889
 
890
+ #: src/Tribe/Languages/Locations.php:151
891
  msgid "Haiti"
892
  msgstr ""
893
 
894
+ #: src/Tribe/Languages/Locations.php:152
895
  msgid "Heard and McDonald Islands"
896
  msgstr ""
897
 
898
+ #: src/Tribe/Languages/Locations.php:153
899
  msgid "Holy See (Vatican City State)"
900
  msgstr ""
901
 
902
+ #: src/Tribe/Languages/Locations.php:154
903
  msgid "Honduras"
904
  msgstr ""
905
 
906
+ #: src/Tribe/Languages/Locations.php:155
907
  msgid "Hong Kong"
908
  msgstr ""
909
 
910
+ #: src/Tribe/Languages/Locations.php:156
911
  msgid "Hungary"
912
  msgstr ""
913
 
914
+ #: src/Tribe/Languages/Locations.php:157
915
  msgid "Iceland"
916
  msgstr ""
917
 
918
+ #: src/Tribe/Languages/Locations.php:158
919
  msgid "India"
920
  msgstr ""
921
 
922
+ #: src/Tribe/Languages/Locations.php:159
923
  msgid "Indonesia"
924
  msgstr ""
925
 
926
+ #: src/Tribe/Languages/Locations.php:160
927
  msgid "Iran, Islamic Republic of"
928
  msgstr ""
929
 
930
+ #: src/Tribe/Languages/Locations.php:161
931
  msgid "Iraq"
932
  msgstr ""
933
 
934
+ #: src/Tribe/Languages/Locations.php:162
935
  msgid "Ireland"
936
  msgstr ""
937
 
938
+ #: src/Tribe/Languages/Locations.php:163
939
  msgid "Israel"
940
  msgstr ""
941
 
942
+ #: src/Tribe/Languages/Locations.php:164
943
  msgid "Italy"
944
  msgstr ""
945
 
946
+ #: src/Tribe/Languages/Locations.php:165
947
  msgid "Jamaica"
948
  msgstr ""
949
 
950
+ #: src/Tribe/Languages/Locations.php:166
951
  msgid "Japan"
952
  msgstr ""
953
 
954
+ #: src/Tribe/Languages/Locations.php:167
955
  msgid "Jordan"
956
  msgstr ""
957
 
958
+ #: src/Tribe/Languages/Locations.php:168
959
  msgid "Kazakhstan"
960
  msgstr ""
961
 
962
+ #: src/Tribe/Languages/Locations.php:169
963
  msgid "Kenya"
964
  msgstr ""
965
 
966
+ #: src/Tribe/Languages/Locations.php:170
967
  msgid "Kiribati"
968
  msgstr ""
969
 
970
+ #: src/Tribe/Languages/Locations.php:171
971
  msgid "Korea, Democratic People's Republic of"
972
  msgstr ""
973
 
974
+ #: src/Tribe/Languages/Locations.php:172
975
  msgid "Korea, Republic of"
976
  msgstr ""
977
 
978
+ #: src/Tribe/Languages/Locations.php:173
979
  msgid "Kuwait"
980
  msgstr ""
981
 
982
+ #: src/Tribe/Languages/Locations.php:174
983
  msgid "Kyrgyzstan"
984
  msgstr ""
985
 
986
+ #: src/Tribe/Languages/Locations.php:175
987
  msgid "Lao People's Democratic Republic"
988
  msgstr ""
989
 
990
+ #: src/Tribe/Languages/Locations.php:176
991
  msgid "Latvia"
992
  msgstr ""
993
 
994
+ #: src/Tribe/Languages/Locations.php:177
995
  msgid "Lebanon"
996
  msgstr ""
997
 
998
+ #: src/Tribe/Languages/Locations.php:178
999
  msgid "Lesotho"
1000
  msgstr ""
1001
 
1002
+ #: src/Tribe/Languages/Locations.php:179
1003
  msgid "Liberia"
1004
  msgstr ""
1005
 
1006
+ #: src/Tribe/Languages/Locations.php:180
1007
  msgid "Libya"
1008
  msgstr ""
1009
 
1010
+ #: src/Tribe/Languages/Locations.php:181
1011
  msgid "Liechtenstein"
1012
  msgstr ""
1013
 
1014
+ #: src/Tribe/Languages/Locations.php:182
1015
  msgid "Lithuania"
1016
  msgstr ""
1017
 
1018
+ #: src/Tribe/Languages/Locations.php:183
1019
  msgid "Luxembourg"
1020
  msgstr ""
1021
 
1022
+ #: src/Tribe/Languages/Locations.php:184
1023
  msgid "Macau"
1024
  msgstr ""
1025
 
1026
+ #: src/Tribe/Languages/Locations.php:185
1027
  msgid "Madagascar"
1028
  msgstr ""
1029
 
1030
+ #: src/Tribe/Languages/Locations.php:186
1031
  msgid "Malawi"
1032
  msgstr ""
1033
 
1034
+ #: src/Tribe/Languages/Locations.php:187
1035
  msgid "Malaysia"
1036
  msgstr ""
1037
 
1038
+ #: src/Tribe/Languages/Locations.php:188
1039
  msgid "Maldives"
1040
  msgstr ""
1041
 
1042
+ #: src/Tribe/Languages/Locations.php:189
1043
  msgid "Mali"
1044
  msgstr ""
1045
 
1046
+ #: src/Tribe/Languages/Locations.php:190
1047
  msgid "Malta"
1048
  msgstr ""
1049
 
1050
+ #: src/Tribe/Languages/Locations.php:191
1051
  msgid "Marshall Islands"
1052
  msgstr ""
1053
 
1054
+ #: src/Tribe/Languages/Locations.php:192
1055
  msgid "Martinique"
1056
  msgstr ""
1057
 
1058
+ #: src/Tribe/Languages/Locations.php:193
1059
  msgid "Mauritania"
1060
  msgstr ""
1061
 
1062
+ #: src/Tribe/Languages/Locations.php:194
1063
  msgid "Mauritius"
1064
  msgstr ""
1065
 
1066
+ #: src/Tribe/Languages/Locations.php:195
1067
  msgid "Mayotte"
1068
  msgstr ""
1069
 
1070
+ #: src/Tribe/Languages/Locations.php:196
1071
  msgid "Mexico"
1072
  msgstr ""
1073
 
1074
+ #: src/Tribe/Languages/Locations.php:197
1075
  msgid "Micronesia, Federated States of"
1076
  msgstr ""
1077
 
1078
+ #: src/Tribe/Languages/Locations.php:198
1079
  msgid "Moldova, Republic of"
1080
  msgstr ""
1081
 
1082
+ #: src/Tribe/Languages/Locations.php:199
1083
  msgid "Monaco"
1084
  msgstr ""
1085
 
1086
+ #: src/Tribe/Languages/Locations.php:200
1087
  msgid "Mongolia"
1088
  msgstr ""
1089
 
1090
+ #: src/Tribe/Languages/Locations.php:201
1091
  msgid "Montenegro"
1092
  msgstr ""
1093
 
1094
+ #: src/Tribe/Languages/Locations.php:202
1095
  msgid "Montserrat"
1096
  msgstr ""
1097
 
1098
+ #: src/Tribe/Languages/Locations.php:203
1099
  msgid "Morocco"
1100
  msgstr ""
1101
 
1102
+ #: src/Tribe/Languages/Locations.php:204
1103
  msgid "Mozambique"
1104
  msgstr ""
1105
 
1106
+ #: src/Tribe/Languages/Locations.php:205
1107
  msgid "Myanmar"
1108
  msgstr ""
1109
 
1110
+ #: src/Tribe/Languages/Locations.php:206
1111
  msgid "Namibia"
1112
  msgstr ""
1113
 
1114
+ #: src/Tribe/Languages/Locations.php:207
1115
  msgid "Nauru"
1116
  msgstr ""
1117
 
1118
+ #: src/Tribe/Languages/Locations.php:208
1119
  msgid "Nepal"
1120
  msgstr ""
1121
 
1122
+ #: src/Tribe/Languages/Locations.php:209
1123
  msgid "Netherlands"
1124
  msgstr ""
1125
 
1126
+ #: src/Tribe/Languages/Locations.php:210
1127
  msgid "New Caledonia"
1128
  msgstr ""
1129
 
1130
+ #: src/Tribe/Languages/Locations.php:211
1131
  msgid "New Zealand"
1132
  msgstr ""
1133
 
1134
+ #: src/Tribe/Languages/Locations.php:212
1135
  msgid "Nicaragua"
1136
  msgstr ""
1137
 
1138
+ #: src/Tribe/Languages/Locations.php:213
1139
  msgid "Niger"
1140
  msgstr ""
1141
 
1142
+ #: src/Tribe/Languages/Locations.php:214
1143
  msgid "Nigeria"
1144
  msgstr ""
1145
 
1146
+ #: src/Tribe/Languages/Locations.php:215
1147
  msgid "Niue"
1148
  msgstr ""
1149
 
1150
+ #: src/Tribe/Languages/Locations.php:216
1151
  msgid "Norfolk Island"
1152
  msgstr ""
1153
 
1154
+ #: src/Tribe/Languages/Locations.php:217
1155
  msgid "North Macedonia"
1156
  msgstr ""
1157
 
1158
+ #: src/Tribe/Languages/Locations.php:218
1159
  msgid "Northern Mariana Islands"
1160
  msgstr ""
1161
 
1162
+ #: src/Tribe/Languages/Locations.php:219
1163
  msgid "Norway"
1164
  msgstr ""
1165
 
1166
+ #: src/Tribe/Languages/Locations.php:220
1167
  msgid "Oman"
1168
  msgstr ""
1169
 
1170
+ #: src/Tribe/Languages/Locations.php:221
1171
  msgid "Pakistan"
1172
  msgstr ""
1173
 
1174
+ #: src/Tribe/Languages/Locations.php:222
1175
  msgid "Palau"
1176
  msgstr ""
1177
 
1178
+ #: src/Tribe/Languages/Locations.php:223
1179
  msgid "Panama"
1180
  msgstr ""
1181
 
1182
+ #: src/Tribe/Languages/Locations.php:224
1183
  msgid "Papua New Guinea"
1184
  msgstr ""
1185
 
1186
+ #: src/Tribe/Languages/Locations.php:225
1187
  msgid "Paraguay"
1188
  msgstr ""
1189
 
1190
+ #: src/Tribe/Languages/Locations.php:226
1191
  msgid "Peru"
1192
  msgstr ""
1193
 
1194
+ #: src/Tribe/Languages/Locations.php:227
1195
  msgid "Philippines"
1196
  msgstr ""
1197
 
1198
+ #: src/Tribe/Languages/Locations.php:228
1199
  msgid "Pitcairn"
1200
  msgstr ""
1201
 
1202
+ #: src/Tribe/Languages/Locations.php:229
1203
  msgid "Poland"
1204
  msgstr ""
1205
 
1206
+ #: src/Tribe/Languages/Locations.php:230
1207
  msgid "Portugal"
1208
  msgstr ""
1209
 
1210
+ #: src/Tribe/Languages/Locations.php:231
1211
  msgid "Puerto Rico"
1212
  msgstr ""
1213
 
1214
+ #: src/Tribe/Languages/Locations.php:232
1215
  msgid "Qatar"
1216
  msgstr ""
1217
 
1218
+ #: src/Tribe/Languages/Locations.php:233
1219
  msgid "Reunion"
1220
  msgstr ""
1221
 
1222
+ #: src/Tribe/Languages/Locations.php:234
1223
  msgid "Romania"
1224
  msgstr ""
1225
 
1226
+ #: src/Tribe/Languages/Locations.php:235
1227
  msgid "Russian Federation"
1228
  msgstr ""
1229
 
1230
+ #: src/Tribe/Languages/Locations.php:236
1231
  msgid "Rwanda"
1232
  msgstr ""
1233
 
1234
+ #: src/Tribe/Languages/Locations.php:237
1235
  msgid "Saint Barth&eacute;lemy"
1236
  msgstr ""
1237
 
1238
+ #: src/Tribe/Languages/Locations.php:238
1239
  msgid "Saint Helena"
1240
  msgstr ""
1241
 
1242
+ #: src/Tribe/Languages/Locations.php:239
1243
  msgid "Saint Kitts and Nevis"
1244
  msgstr ""
1245
 
1246
+ #: src/Tribe/Languages/Locations.php:240
1247
  msgid "Saint Lucia"
1248
  msgstr ""
1249
 
1250
+ #: src/Tribe/Languages/Locations.php:241
1251
  msgid "Saint Pierre and Miquelon"
1252
  msgstr ""
1253
 
1254
+ #: src/Tribe/Languages/Locations.php:242
1255
  msgid "Saint Vincent and The Grenadines"
1256
  msgstr ""
1257
 
1258
+ #: src/Tribe/Languages/Locations.php:243
1259
  msgid "Samoa"
1260
  msgstr ""
1261
 
1262
+ #: src/Tribe/Languages/Locations.php:244
1263
  msgid "San Marino"
1264
  msgstr ""
1265
 
1266
+ #: src/Tribe/Languages/Locations.php:245
1267
  msgid "S&atilde;o Tom&eacute; and Pr&iacute;ncipe"
1268
  msgstr ""
1269
 
1270
+ #: src/Tribe/Languages/Locations.php:246
1271
  msgid "Saudi Arabia"
1272
  msgstr ""
1273
 
1274
+ #: src/Tribe/Languages/Locations.php:247
1275
  msgid "Senegal"
1276
  msgstr ""
1277
 
1278
+ #: src/Tribe/Languages/Locations.php:248
1279
  msgid "Serbia"
1280
  msgstr ""
1281
 
1282
+ #: src/Tribe/Languages/Locations.php:249
1283
  msgid "Seychelles"
1284
  msgstr ""
1285
 
1286
+ #: src/Tribe/Languages/Locations.php:250
1287
  msgid "Sierra Leone"
1288
  msgstr ""
1289
 
1290
+ #: src/Tribe/Languages/Locations.php:251
1291
  msgid "Singapore"
1292
  msgstr ""
1293
 
1294
+ #: src/Tribe/Languages/Locations.php:252
1295
  msgid "Sint Maarten"
1296
  msgstr ""
1297
 
1298
+ #: src/Tribe/Languages/Locations.php:253
1299
  msgid "Slovakia (Slovak Republic)"
1300
  msgstr ""
1301
 
1302
+ #: src/Tribe/Languages/Locations.php:254
1303
  msgid "Slovenia"
1304
  msgstr ""
1305
 
1306
+ #: src/Tribe/Languages/Locations.php:255
1307
  msgid "Solomon Islands"
1308
  msgstr ""
1309
 
1310
+ #: src/Tribe/Languages/Locations.php:256
1311
  msgid "Somalia"
1312
  msgstr ""
1313
 
1314
+ #: src/Tribe/Languages/Locations.php:257
1315
  msgid "South Africa"
1316
  msgstr ""
1317
 
1318
+ #: src/Tribe/Languages/Locations.php:258
1319
  msgid "South Georgia, South Sandwich Islands"
1320
  msgstr ""
1321
 
1322
+ #: src/Tribe/Languages/Locations.php:259
1323
  msgid "Spain"
1324
  msgstr ""
1325
 
1326
+ #: src/Tribe/Languages/Locations.php:260
1327
  msgid "Sri Lanka"
1328
  msgstr ""
1329
 
1330
+ #: src/Tribe/Languages/Locations.php:261
1331
  msgid "Sudan"
1332
  msgstr ""
1333
 
1334
+ #: src/Tribe/Languages/Locations.php:262
1335
  msgid "Suriname"
1336
  msgstr ""
1337
 
1338
+ #: src/Tribe/Languages/Locations.php:263
1339
  msgid "Svalbard and Jan Mayen Islands"
1340
  msgstr ""
1341
 
1342
+ #: src/Tribe/Languages/Locations.php:264
1343
  msgid "Swaziland"
1344
  msgstr ""
1345
 
1346
+ #: src/Tribe/Languages/Locations.php:265
1347
  msgid "Sweden"
1348
  msgstr ""
1349
 
1350
+ #: src/Tribe/Languages/Locations.php:266
1351
  msgid "Switzerland"
1352
  msgstr ""
1353
 
1354
+ #: src/Tribe/Languages/Locations.php:267
1355
  msgid "Syrian Arab Republic"
1356
  msgstr ""
1357
 
1358
+ #: src/Tribe/Languages/Locations.php:268
1359
  msgid "Taiwan"
1360
  msgstr ""
1361
 
1362
+ #: src/Tribe/Languages/Locations.php:269
1363
  msgid "Tajikistan"
1364
  msgstr ""
1365
 
1366
+ #: src/Tribe/Languages/Locations.php:270
1367
  msgid "Tanzania, United Republic of"
1368
  msgstr ""
1369
 
1370
+ #: src/Tribe/Languages/Locations.php:271
1371
  msgid "Thailand"
1372
  msgstr ""
1373
 
1374
+ #: src/Tribe/Languages/Locations.php:272
1375
  msgid "Togo"
1376
  msgstr ""
1377
 
1378
+ #: src/Tribe/Languages/Locations.php:273
1379
  msgid "Tokelau"
1380
  msgstr ""
1381
 
1382
+ #: src/Tribe/Languages/Locations.php:274
1383
  msgid "Tonga"
1384
  msgstr ""
1385
 
1386
+ #: src/Tribe/Languages/Locations.php:275
1387
  msgid "Trinidad and Tobago"
1388
  msgstr ""
1389
 
1390
+ #: src/Tribe/Languages/Locations.php:276
1391
  msgid "Tunisia"
1392
  msgstr ""
1393
 
1394
+ #: src/Tribe/Languages/Locations.php:277
1395
  msgid "Turkey"
1396
  msgstr ""
1397
 
1398
+ #: src/Tribe/Languages/Locations.php:278
1399
  msgid "Turkmenistan"
1400
  msgstr ""
1401
 
1402
+ #: src/Tribe/Languages/Locations.php:279
1403
  msgid "Turks and Caicos Islands"
1404
  msgstr ""
1405
 
1406
+ #: src/Tribe/Languages/Locations.php:280
1407
  msgid "Tuvalu"
1408
  msgstr ""
1409
 
1410
+ #: src/Tribe/Languages/Locations.php:281
1411
  msgid "Uganda"
1412
  msgstr ""
1413
 
1414
+ #: src/Tribe/Languages/Locations.php:282
1415
  msgid "Ukraine"
1416
  msgstr ""
1417
 
1418
+ #: src/Tribe/Languages/Locations.php:283
1419
  msgid "United Arab Emirates"
1420
  msgstr ""
1421
 
1422
+ #: src/Tribe/Languages/Locations.php:284
1423
  msgid "United Kingdom"
1424
  msgstr ""
1425
 
1426
+ #: src/Tribe/Languages/Locations.php:285
1427
  msgid "United States Minor Outlying Islands"
1428
  msgstr ""
1429
 
1430
+ #: src/Tribe/Languages/Locations.php:286
1431
  msgid "Uruguay"
1432
  msgstr ""
1433
 
1434
+ #: src/Tribe/Languages/Locations.php:287
1435
  msgid "Uzbekistan"
1436
  msgstr ""
1437
 
1438
+ #: src/Tribe/Languages/Locations.php:288
1439
  msgid "Vanuatu"
1440
  msgstr ""
1441
 
1442
+ #: src/Tribe/Languages/Locations.php:289
1443
  msgid "Venezuela"
1444
  msgstr ""
1445
 
1446
+ #: src/Tribe/Languages/Locations.php:290
1447
  msgid "Viet Nam"
1448
  msgstr ""
1449
 
1450
+ #: src/Tribe/Languages/Locations.php:291
1451
  msgid "Virgin Islands (British)"
1452
  msgstr ""
1453
 
1454
+ #: src/Tribe/Languages/Locations.php:292
1455
  msgid "Virgin Islands (U.S.)"
1456
  msgstr ""
1457
 
1458
+ #: src/Tribe/Languages/Locations.php:293
1459
  msgid "Wallis and Futuna Islands"
1460
  msgstr ""
1461
 
1462
+ #: src/Tribe/Languages/Locations.php:294
1463
  msgid "Western Sahara"
1464
  msgstr ""
1465
 
1466
+ #: src/Tribe/Languages/Locations.php:295
1467
  msgid "Yemen"
1468
  msgstr ""
1469
 
1470
+ #: src/Tribe/Languages/Locations.php:296
1471
  msgid "Zambia"
1472
  msgstr ""
1473
 
1474
+ #: src/Tribe/Languages/Locations.php:297
1475
  msgid "Zimbabwe"
1476
  msgstr ""
1477
 
1478
+ #: src/Tribe/Languages/Locations.php:324
1479
  msgid "Alabama"
1480
  msgstr ""
1481
 
1482
+ #: src/Tribe/Languages/Locations.php:325
1483
  msgid "Alaska"
1484
  msgstr ""
1485
 
1486
+ #: src/Tribe/Languages/Locations.php:326
1487
  msgid "Arizona"
1488
  msgstr ""
1489
 
1490
+ #: src/Tribe/Languages/Locations.php:327
1491
  msgid "Arkansas"
1492
  msgstr ""
1493
 
1494
+ #: src/Tribe/Languages/Locations.php:328
1495
  msgid "California"
1496
  msgstr ""
1497
 
1498
+ #: src/Tribe/Languages/Locations.php:329
1499
  msgid "Colorado"
1500
  msgstr ""
1501
 
1502
+ #: src/Tribe/Languages/Locations.php:330
1503
  msgid "Connecticut"
1504
  msgstr ""
1505
 
1506
+ #: src/Tribe/Languages/Locations.php:331
1507
  msgid "Delaware"
1508
  msgstr ""
1509
 
1510
+ #: src/Tribe/Languages/Locations.php:332
1511
  msgid "District of Columbia"
1512
  msgstr ""
1513
 
1514
+ #: src/Tribe/Languages/Locations.php:333
1515
  msgid "Florida"
1516
  msgstr ""
1517
 
1518
+ #: src/Tribe/Languages/Locations.php:334
1519
  msgctxt "The US state Georgia"
1520
  msgid "Georgia"
1521
  msgstr ""
1522
 
1523
+ #: src/Tribe/Languages/Locations.php:335
1524
  msgid "Hawaii"
1525
  msgstr ""
1526
 
1527
+ #: src/Tribe/Languages/Locations.php:336
1528
  msgid "Idaho"
1529
  msgstr ""
1530
 
1531
+ #: src/Tribe/Languages/Locations.php:337
1532
  msgid "Illinois"
1533
  msgstr ""
1534
 
1535
+ #: src/Tribe/Languages/Locations.php:338
1536
  msgid "Indiana"
1537
  msgstr ""
1538
 
1539
+ #: src/Tribe/Languages/Locations.php:339
1540
  msgid "Iowa"
1541
  msgstr ""
1542
 
1543
+ #: src/Tribe/Languages/Locations.php:340
1544
  msgid "Kansas"
1545
  msgstr ""
1546
 
1547
+ #: src/Tribe/Languages/Locations.php:341
1548
  msgid "Kentucky"
1549
  msgstr ""
1550
 
1551
+ #: src/Tribe/Languages/Locations.php:342
1552
  msgid "Louisiana"
1553
  msgstr ""
1554
 
1555
+ #: src/Tribe/Languages/Locations.php:343
1556
  msgid "Maine"
1557
  msgstr ""
1558
 
1559
+ #: src/Tribe/Languages/Locations.php:344
1560
  msgid "Maryland"
1561
  msgstr ""
1562
 
1563
+ #: src/Tribe/Languages/Locations.php:345
1564
  msgid "Massachusetts"
1565
  msgstr ""
1566
 
1567
+ #: src/Tribe/Languages/Locations.php:346
1568
  msgid "Michigan"
1569
  msgstr ""
1570
 
1571
+ #: src/Tribe/Languages/Locations.php:347
1572
  msgid "Minnesota"
1573
  msgstr ""
1574
 
1575
+ #: src/Tribe/Languages/Locations.php:348
1576
  msgid "Mississippi"
1577
  msgstr ""
1578
 
1579
+ #: src/Tribe/Languages/Locations.php:349
1580
  msgid "Missouri"
1581
  msgstr ""
1582
 
1583
+ #: src/Tribe/Languages/Locations.php:350
1584
  msgid "Montana"
1585
  msgstr ""
1586
 
1587
+ #: src/Tribe/Languages/Locations.php:351
1588
  msgid "Nebraska"
1589
  msgstr ""
1590
 
1591
+ #: src/Tribe/Languages/Locations.php:352
1592
  msgid "Nevada"
1593
  msgstr ""
1594
 
1595
+ #: src/Tribe/Languages/Locations.php:353
1596
  msgid "New Hampshire"
1597
  msgstr ""
1598
 
1599
+ #: src/Tribe/Languages/Locations.php:354
1600
  msgid "New Jersey"
1601
  msgstr ""
1602
 
1603
+ #: src/Tribe/Languages/Locations.php:355
1604
  msgid "New Mexico"
1605
  msgstr ""
1606
 
1607
+ #: src/Tribe/Languages/Locations.php:356
1608
  msgid "New York"
1609
  msgstr ""
1610
 
1611
+ #: src/Tribe/Languages/Locations.php:357
1612
  msgid "North Carolina"
1613
  msgstr ""
1614
 
1615
+ #: src/Tribe/Languages/Locations.php:358
1616
  msgid "North Dakota"
1617
  msgstr ""
1618
 
1619
+ #: src/Tribe/Languages/Locations.php:359
1620
  msgid "Ohio"
1621
  msgstr ""
1622
 
1623
+ #: src/Tribe/Languages/Locations.php:360
1624
  msgid "Oklahoma"
1625
  msgstr ""
1626
 
1627
+ #: src/Tribe/Languages/Locations.php:361
1628
  msgid "Oregon"
1629
  msgstr ""
1630
 
1631
+ #: src/Tribe/Languages/Locations.php:362
1632
  msgid "Pennsylvania"
1633
  msgstr ""
1634
 
1635
+ #: src/Tribe/Languages/Locations.php:363
1636
  msgid "Rhode Island"
1637
  msgstr ""
1638
 
1639
+ #: src/Tribe/Languages/Locations.php:364
1640
  msgid "South Carolina"
1641
  msgstr ""
1642
 
1643
+ #: src/Tribe/Languages/Locations.php:365
1644
  msgid "South Dakota"
1645
  msgstr ""
1646
 
1647
+ #: src/Tribe/Languages/Locations.php:366
1648
  msgid "Tennessee"
1649
  msgstr ""
1650
 
1651
+ #: src/Tribe/Languages/Locations.php:367
1652
  msgid "Texas"
1653
  msgstr ""
1654
 
1655
+ #: src/Tribe/Languages/Locations.php:368
1656
  msgid "Utah"
1657
  msgstr ""
1658
 
1659
+ #: src/Tribe/Languages/Locations.php:369
1660
  msgid "Vermont"
1661
  msgstr ""
1662
 
1663
+ #: src/Tribe/Languages/Locations.php:370
1664
  msgid "Virginia"
1665
  msgstr ""
1666
 
1667
+ #: src/Tribe/Languages/Locations.php:371
1668
  msgid "Washington"
1669
  msgstr ""
1670
 
1671
+ #: src/Tribe/Languages/Locations.php:372
1672
  msgid "West Virginia"
1673
  msgstr ""
1674
 
1675
+ #: src/Tribe/Languages/Locations.php:373
1676
  msgid "Wisconsin"
1677
  msgstr ""
1678
 
1679
+ #: src/Tribe/Languages/Locations.php:374
1680
  msgid "Wyoming"
1681
  msgstr ""
1682
 
1702
  msgid "Null logger (will log nothing)"
1703
  msgstr ""
1704
 
1705
+ #: src/Tribe/Log.php:289
1706
  msgid "Cannot set %s as the current logging engine"
1707
  msgstr ""
1708
 
1709
+ #: src/Tribe/Log.php:388
1710
  msgid "Disabled"
1711
  msgstr ""
1712
 
1713
+ #: src/Tribe/Log.php:389
1714
  msgid "Only errors"
1715
  msgstr ""
1716
 
1717
+ #: src/Tribe/Log.php:390
1718
  msgid "Warnings and errors"
1719
  msgstr ""
1720
 
1721
+ #: src/Tribe/Log.php:391
1722
  msgid "Full debug (all events)"
1723
  msgstr ""
1724
 
1725
+ #: src/Tribe/Main.php:313
1726
  msgid ": activate to sort column ascending"
1727
  msgstr ""
1728
 
1729
+ #: src/Tribe/Main.php:314
1730
  msgid ": activate to sort column descending"
1731
  msgstr ""
1732
 
1733
+ #: src/Tribe/Main.php:316
1734
  msgid "Show _MENU_ entries"
1735
  msgstr ""
1736
 
1737
+ #: src/Tribe/Main.php:317
1738
  msgid "No data available in table"
1739
  msgstr ""
1740
 
1741
+ #: src/Tribe/Main.php:318
1742
  msgid "Showing _START_ to _END_ of _TOTAL_ entries"
1743
  msgstr ""
1744
 
1745
+ #: src/Tribe/Main.php:319
1746
  msgid "Showing 0 to 0 of 0 entries"
1747
  msgstr ""
1748
 
1749
+ #: src/Tribe/Main.php:320
1750
  msgid "(filtered from _MAX_ total entries)"
1751
  msgstr ""
1752
 
1753
+ #: src/Tribe/Main.php:321
1754
  msgid "No matching records found"
1755
  msgstr ""
1756
 
1757
+ #: src/Tribe/Main.php:322
1758
  msgid "Search:"
1759
  msgstr ""
1760
 
1761
+ #: src/Tribe/Main.php:323
1762
  msgid "All items on this page were selected. "
1763
  msgstr ""
1764
 
1765
+ #: src/Tribe/Main.php:324
1766
  msgid "Select all pages"
1767
  msgstr ""
1768
 
1769
+ #: src/Tribe/Main.php:325
1770
  msgid "Clear Selection."
1771
  msgstr ""
1772
 
1773
+ #: src/Tribe/Main.php:327
1774
  msgid "All"
1775
  msgstr ""
1776
 
1777
+ #: src/Tribe/Main.php:328 src/Tribe/Main.php:345
1778
  msgid "Next"
1779
  msgstr ""
1780
 
1781
+ #: src/Tribe/Main.php:329
1782
  msgid "Previous"
1783
  msgstr ""
1784
 
1785
+ #: src/Tribe/Main.php:334
1786
  msgid ": Selected %d rows"
1787
  msgstr ""
1788
 
1789
+ #: src/Tribe/Main.php:335
1790
  msgid ": Selected 1 row"
1791
  msgstr ""
1792
 
1793
+ #: src/Tribe/Main.php:346
1794
  msgid "Prev"
1795
  msgstr ""
1796
 
1797
+ #: src/Tribe/Main.php:347 src/Tribe/Main.php:349
1798
  msgid "Today"
1799
  msgstr ""
1800
 
1801
+ #: src/Tribe/Main.php:348
1802
  msgid "Done"
1803
  msgstr ""
1804
 
1805
+ #: src/Tribe/Main.php:350
1806
  msgid "Clear"
1807
  msgstr ""
1808
 
1841
  msgid "License key(s) updated."
1842
  msgstr ""
1843
 
1844
+ #: src/Tribe/PUE/Checker.php:899
1845
  msgid ""
1846
  "Hmmm... something's wrong with this validator. Please contact %ssupport%s."
1847
  msgstr ""
1848
 
1849
+ #: src/Tribe/PUE/Checker.php:912
1850
  msgid "unknown date"
1851
  msgstr ""
1852
 
1853
+ #: src/Tribe/PUE/Checker.php:918
1854
  msgid "Sorry, key validation server is not available."
1855
  msgstr ""
1856
 
1857
+ #: src/Tribe/PUE/Checker.php:938
1858
  msgid "Valid Key! Expires on %s"
1859
  msgstr ""
1860
 
1861
+ #: src/Tribe/PUE/Checker.php:943
1862
  msgid "Thanks for setting up a valid key. It will expire on %s"
1863
  msgstr ""
1864
 
1865
+ #: src/Tribe/PUE/Checker.php:970 src/Tribe/PUE/Notices.php:342
1866
  msgid "Renew Your License Now"
1867
  msgstr ""
1868
 
1869
+ #: src/Tribe/PUE/Checker.php:972 src/Tribe/PUE/Notices.php:344
1870
  msgid " (opens in a new window)"
1871
  msgstr ""
1872
 
1873
+ #: src/Tribe/PUE/Checker.php:989
1874
  msgid "Please refresh the page and try your request again."
1875
  msgstr ""
1876
 
1877
+ #: src/Tribe/PUE/Checker.php:1009
1878
  msgid ""
1879
  "There is an update for %s. You'll need to %scheck your license%s to have "
1880
  "access to updates, downloads, and support."
1881
  msgstr ""
1882
 
1883
+ #: src/Tribe/PUE/Checker.php:1066
1884
  msgid ""
1885
  "There is an update for %s. %sRenew your license%s to get access to bug "
1886
  "fixes, security updates, and new features."
1887
  msgstr ""
1888
 
1889
+ #: src/Tribe/PUE/Checker.php:1096
1890
  msgid "Update now to version %s."
1891
  msgstr ""
1892
 
1893
+ #: src/Tribe/PUE/Checker.php:1107
1894
  msgid "There is a new version of %1$s available. %2$s"
1895
  msgstr ""
1896
 
1897
+ #: src/Tribe/PUE/Checker.php:1688
1898
  msgid "A valid license has been entered by your network administrator."
1899
  msgstr ""
1900
 
1901
+ #: src/Tribe/PUE/Checker.php:1689
1902
  msgid "No license entered. Consult your network administrator."
1903
  msgstr ""
1904
 
1905
+ #: src/Tribe/PUE/Checker.php:1690
1906
  msgid "Expired license. Consult your network administrator."
1907
  msgstr ""
1908
 
1956
  "%4$s"
1957
  msgstr ""
1958
 
 
 
 
 
 
 
1959
  #: src/Tribe/Plugins_API.php:28
1960
+ msgid ""
1961
+ "Create an events calendar and manage it with ease. The Events Calendar "
1962
+ "plugin provides professional-level quality and features backed by a team you "
1963
+ "can trust."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1964
  msgstr ""
1965
 
1966
+ #: src/Tribe/Plugins_API.php:37
1967
+ msgid ""
1968
+ "Event Aggregator adds massive import functionality to your calendar. Before "
1969
+ "you know it, you’ll be importing events from Meetup, Eventbrite, Google "
1970
+ "Calendar, iCalendar, and other URLs with ease. Schedule imports to run "
1971
+ "automatically behind-the-scenes or run them manually when you’re ready. Go "
1972
+ "ahead and import to your heart’s content—Event Aggregator hooks you up with "
1973
+ "a central dashboard in the admin to make managing your imports a breeze."
1974
  msgstr ""
1975
 
1976
+ #: src/Tribe/Plugins_API.php:48
1977
+ msgid ""
1978
+ "The Events Calendar PRO is a paid Add-On to our open source WordPress plugin "
1979
+ "%1$sThe Events Calendar%2$s. PRO offers a whole host of calendar features "
1980
+ "including recurring events, custom event attributes, saved venues and "
1981
+ "organizers, venue pages, advanced event admin and lots more."
1982
  msgstr ""
1983
 
1984
+ #: src/Tribe/Plugins_API.php:60
1985
+ msgid ""
1986
+ "Event Tickets provides a simple way for visitors to RSVP to your events. As "
1987
+ "a standalone plugin, it enables you to add RSVP functionality to posts or "
1988
+ "pages. When paired with The Events Calendar, you can add that same RSVP "
1989
+ "functionality directly to your event listings."
1990
  msgstr ""
1991
 
1992
+ #: src/Tribe/Plugins_API.php:71
1993
+ msgid ""
1994
+ "Event Tickets Plus allows you to sell tickets to your events using "
1995
+ "WooCommerce, Easy Digital Downloads, or our built in Tribe Commerce tool. "
1996
+ "Add tickets to your posts and pages, or add %1$sThe Events Calendar%2$s and "
1997
+ "sell tickets from your event listings. Create custom registration forms, "
1998
+ "manage attendees, use custom capacity options, and more. Guest check in is "
1999
+ "easy with QR codes and our custom scanning app."
2000
  msgstr ""
2001
 
2002
+ #: src/Tribe/Plugins_API.php:80 src/Tribe/Promoter/PUE.php:28
2003
  #: src/views/promoter/auth.php:30 src/views/promoter/auth.php:74
2004
  msgid "Promoter"
2005
  msgstr ""
2006
 
2007
+ #: src/Tribe/Plugins_API.php:84
2008
+ msgid ""
2009
+ "With Promoter, you’ll connect with your community via email through every "
2010
+ "stage of your event, bolster event attendance, and manage notifications more "
2011
+ "efficiently than ever. Increase event attendance and engagement by "
2012
+ "automatically sending reminders for on-sale dates, event times and more."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2013
  msgstr ""
2014
 
2015
+ #: src/Tribe/Plugins_API.php:94
2016
+ msgid ""
2017
+ "It is awesome that your calendar is <em>THE PLACE</em> to get hooked up with "
2018
+ "prime choice ways to spend time. You have more events than Jabba the Hutt "
2019
+ "has rolls. Too bad visitors are hiring a personal assistant to go through "
2020
+ "all the choices. Ever wish you could just filter the calendar to only show "
2021
+ "events in walking distance, on a weekend, that are free? BOOM. Now you can. "
2022
+ "Introducing… the Filter Bar."
2023
  msgstr ""
2024
 
2025
+ #: src/Tribe/Plugins_API.php:104
2026
+ msgid ""
2027
+ "Accept user-submitted events on your site! With Community Events, you can "
2028
+ "accept public submissions or require account sign-on. Settings give you the "
2029
+ "options to save as a draft or publish automatically, enable categories and "
2030
+ "tags, and choose whether users can edit/manage their own events or simply "
2031
+ "submit. Best of all - setup is easy! Just activate, configure the options, "
2032
+ "and off you go."
2033
  msgstr ""
2034
 
2035
+ #: src/Tribe/Plugins_API.php:114
2036
+ msgid ""
2037
+ "Enable Community Events organizers to offer tickets to their events. You can "
2038
+ "set flexible payment and fee options. They can even check-in attendees to "
2039
+ "their events! All of this managed from the front-end of your site without "
2040
+ "ever needing to grant access to your admin"
2041
  msgstr ""
2042
 
2043
+ #: src/Tribe/Plugins_API.php:115
2044
  msgctxt "Names of required plugins for Community Tickets"
2045
  msgid "Event Tickets Plus and Community Events"
2046
  msgstr ""
2047
 
2048
+ #: src/Tribe/Plugins_API.php:126
2049
+ msgid ""
2050
+ "The Eventbrite Tickets add-on allows you to create & sell tickets through "
2051
+ "The Events Calendar using the power of %1$sEventbrite%2$s. Whether you’re "
2052
+ "creating your ticket on the WordPress dashboard or importing the details of "
2053
+ "an already-existing event from %1$sEventbrite.com%2$s, this add-on brings "
2054
+ "the power of the Eventbrite API to your calendar."
 
 
 
 
 
 
 
 
 
 
 
2055
  msgstr ""
2056
 
2057
+ #: src/Tribe/Plugins_API.php:135
2058
  msgid "Image Widget Plus"
2059
  msgstr ""
2060
 
2061
+ #: src/Tribe/Plugins_API.php:139
2062
+ msgid ""
2063
+ "Take your image widgets to the next level with Image Widget Plus! We've "
2064
+ "taken the simple functionality of our basic Image Widget and amped it up "
2065
+ "with several popular feature requests - multiple image support, slideshow, "
2066
+ "lightbox, and random image - all backed by a full year of premium support."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2067
  msgstr ""
2068
 
2069
  #: src/Tribe/Process/Queue.php:1024
2070
  msgid "Every %d Minutes"
2071
  msgstr ""
2072
 
 
 
 
 
2073
  #: src/Tribe/Settings.php:177 src/Tribe/Settings.php:241
2074
  #: src/Tribe/Settings.php:242
2075
  msgid "Events"
2139
  msgid "Display"
2140
  msgstr ""
2141
 
2142
+ #: src/Tribe/Settings_Manager.php:254
2143
  msgid "Network"
2144
  msgstr ""
2145
 
2146
+ #: src/Tribe/Settings_Manager.php:288
2147
  #: src/admin-views/tribe-options-licenses.php:57
2148
  msgid "Licenses"
2149
  msgstr ""
2150
 
2151
+ #: src/Tribe/Settings_Manager.php:318
2152
  msgid "Help"
2153
  msgstr ""
2154
 
2202
 
2203
  #: src/Tribe/Support.php:318
2204
  msgid ""
2205
+ "Yes, automatically share my system information with the Modern Tribe support "
2206
+ "team"
2207
  msgstr ""
2208
 
2209
  #: src/Tribe/Support.php:319
2210
  msgid ""
2211
+ "Your system information will only be used by the Modern Tribe support team. "
2212
+ "All information is stored securely. We do not share this information with "
2213
+ "any third parties."
2214
  msgstr ""
2215
 
2216
  #: src/Tribe/Support.php:338 src/Tribe/Support.php:343
2217
  msgid "Invalid Key"
2218
  msgstr ""
2219
 
2220
+ #: src/Tribe/Support.php:371 src/Tribe/Support.php:397
2221
  msgid "Permission Error"
2222
  msgstr ""
2223
 
2224
+ #: src/Tribe/Support.php:385
2225
  msgid "Unique System Info Key Generated"
2226
  msgstr ""
2227
 
2337
  msgid "Select a Country:"
2338
  msgstr ""
2339
 
2340
+ #: src/admin-views/app-shop.php:4
2341
+ msgid "Events Add-Ons"
2342
  msgstr ""
2343
 
2344
+ #: src/admin-views/app-shop.php:5
2345
+ msgid "Browse All Add-Ons"
2346
  msgstr ""
2347
 
2348
+ #: src/admin-views/app-shop.php:26
2349
+ msgid "Buy This Add-On"
2350
  msgstr ""
2351
 
2352
+ #: src/admin-views/app-shop.php:29
2353
+ msgid "Installed Add-Ons"
2354
  msgstr ""
2355
 
2356
  #: src/admin-views/app-shop.php:31
2357
+ msgid "Installed"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2358
  msgstr ""
2359
 
2360
  #: src/admin-views/event-log.php:21
2377
  msgid "Download log"
2378
  msgstr ""
2379
 
2380
+ #: src/admin-views/tribe-options-display.php:22
2381
  msgid "Date Format Settings"
2382
  msgstr ""
2383
 
2384
+ #: src/admin-views/tribe-options-display.php:28
2385
  msgid ""
2386
  "The following three fields accept the date format options available to the "
2387
  "PHP %1$s function. <a href=\"%2$s\" target=\"_blank\">Learn how to make your "
2388
  "own date format here</a>."
2389
  msgstr ""
2390
 
2391
+ #: src/admin-views/tribe-options-display.php:36
2392
  msgid "Compact Date Format"
2393
  msgstr ""
2394
 
2395
+ #: src/admin-views/tribe-options-display.php:37
2396
  msgid ""
2397
  "Select the date format used for elements with minimal space, such as in "
2398
  "datepickers."
2399
  msgstr ""
2400
 
2401
+ #: src/admin-views/tribe-options-general.php:10
2402
  msgid ""
2403
+ "Thank you for using Event Tickets! All of us at Modern Tribe sincerely "
2404
+ "appreciate your support and we're excited to see you using our plugins. "
2405
+ "Check out our handy %1$sNew User Primer%2$s to get started."
2406
  msgstr ""
2407
 
2408
+ #: src/admin-views/tribe-options-general.php:15
2409
  msgid ""
2410
  "Optimize your site's event listings with %1$sThe Events Calendar%2$s, our "
2411
  "free calendar plugin. Looking for additional functionality including "
2413
  "our %3$spremium add-ons%4$s."
2414
  msgstr ""
2415
 
2416
+ #: src/admin-views/tribe-options-general.php:20
2417
  msgid ""
2418
  "Looking for additional functionality including recurring events, custom "
2419
  "meta, community events, ticket sales and more?"
2420
  msgstr ""
2421
 
2422
+ #: src/admin-views/tribe-options-general.php:20
2423
  msgid "Check out the available add-ons"
2424
  msgstr ""
2425
 
2426
+ #: src/admin-views/tribe-options-general.php:25
2427
  msgid "We hope our plugin is helping you out."
2428
  msgstr ""
2429
 
2430
+ #: src/admin-views/tribe-options-general.php:30
2431
  msgid ""
2432
+ "Are you thinking \"Wow, this plugin is amazing! I should say thanks to "
2433
+ "Modern Tribe for all their hard work.\" The greatest thanks we could ask for "
2434
+ "is recognition. Add a small text-only link at the bottom of your calendar "
2435
+ "pointing to The Events Calendar project."
2436
  msgstr ""
2437
 
2438
+ #: src/admin-views/tribe-options-general.php:30
2439
  msgid "See an example of the link"
2440
  msgstr ""
2441
 
2442
+ #: src/admin-views/tribe-options-general.php:35
2443
  msgid "Show The Events Calendar link"
2444
  msgstr ""
2445
 
2446
+ #: src/admin-views/tribe-options-general.php:53
2447
  msgid "Debug mode"
2448
  msgstr ""
2449
 
2450
+ #: src/admin-views/tribe-options-general.php:55
2451
  msgid ""
2452
  "Enable this option to log debug information. By default this will log to "
2453
  "your server PHP error log. If you'd like to see the log messages in your "
2455
  "\" tab in the debug output."
2456
  msgstr ""
2457
 
2458
+ #: src/admin-views/tribe-options-general.php:59
2459
  msgid "Debug Bar Plugin"
2460
  msgstr ""
2461
 
2462
  #: src/admin-views/tribe-options-help.php:11
2463
  msgid ""
2464
+ "Thank you for using %s! All of us at Modern Tribe sincerely appreciate your "
2465
+ "support and we’re excited to see you using our plugins."
2466
  msgstr ""
2467
 
2468
  #: src/admin-views/tribe-options-help.php:14
2503
  "steps:"
2504
  msgstr ""
2505
 
2506
+ #: src/admin-views/tribe-options-help.php:31
2507
  msgid ""
2508
  "%s. All of the common (and not-so-common) answers to questions we see are "
2509
  "here. It’s often the fastest path to finding an answer!"
2510
  msgstr ""
2511
 
2512
+ #: src/admin-views/tribe-options-help.php:31
2513
  msgid "Check our Knowledgebase"
2514
  msgstr ""
2515
 
2516
+ #: src/admin-views/tribe-options-help.php:32
2517
  msgid ""
2518
  "%s. Testing for an existing conflict is the best start for in-depth "
2519
  "troubleshooting. We will often ask you to follow these steps when opening a "
2520
  "new thread, so doing this ahead of time will be super helpful."
2521
  msgstr ""
2522
 
2523
+ #: src/admin-views/tribe-options-help.php:32
2524
  msgid "Test for a theme or plugin conflict"
2525
  msgstr ""
2526
 
2527
+ #: src/admin-views/tribe-options-help.php:33
2528
  msgid ""
2529
  "%s. There are very few issues we haven’t seen and it’s likely another user "
2530
  "has already asked your question and gotten an answer from our support staff. "
2532
  "for anyone to search and review."
2533
  msgstr ""
2534
 
2535
+ #: src/admin-views/tribe-options-help.php:33
2536
  msgid "Search our support help desk"
2537
  msgstr ""
2538
 
2539
+ #: src/admin-views/tribe-options-help.php:37
2540
  msgid ""
2541
  "Please note that all hands-on support is provided via the help desk. You can "
2542
  "email or tweet at us… ​but we will probably point you back to the help desk 😄"
2543
  msgstr ""
2544
 
2545
+ #: src/admin-views/tribe-options-help.php:38
2546
  msgid "Read more about our support policy"
2547
  msgstr ""
2548
 
2549
+ #: src/admin-views/tribe-options-help.php:41
2550
  msgid "System Information"
2551
  msgstr ""
2552
 
2553
+ #: src/admin-views/tribe-options-help.php:42
2554
  msgid ""
2555
  "The details of your calendar plugin and settings is often needed for you or "
2556
  "our staff to help troubleshoot an issue. Please opt-in below to "
2558
  "allow us to assist you faster if you post in our help desk."
2559
  msgstr ""
2560
 
2561
+ #: src/admin-views/tribe-options-help.php:52
2562
  msgid "Recent Template Changes"
2563
  msgstr ""
2564
 
2565
+ #: src/admin-views/tribe-options-help.php:55
2566
  msgid "Event Log"
2567
  msgstr ""
2568
 
2569
+ #: src/admin-views/tribe-options-help.php:74
2570
  msgid "News and Tutorials"
2571
  msgstr ""
2572
 
2573
+ #: src/admin-views/tribe-options-help.php:80
2574
  msgid "More..."
2575
  msgstr ""
2576
 
2628
 
2629
  #: src/admin-views/tribe-options-network.php:19
2630
  msgid ""
2631
+ "This is where all of the global network settings for Modern Tribe's The "
2632
+ "Events Calendar can be modified."
2633
  msgstr ""
2634
 
2635
  #: src/admin-views/tribe-options-network.php:27
2636
  msgid "Hide the following settings tabs on every site:"
2637
  msgstr ""
2638
 
2639
+ #: src/functions/template-tags/html.php:70
2640
  msgctxt "The associated field is required."
2641
  msgid "(required)"
2642
  msgstr ""
2694
  msgid "An event settings framework for managing shared options"
2695
  msgstr ""
2696
 
2697
+ #. Author of the plugin/theme
2698
+ msgid "Modern Tribe, Inc."
2699
+ msgstr ""
2700
+
2701
  #. Author URI of the plugin/theme
2702
+ msgid "http://m.tri.be/1x"
2703
  msgstr ""
2704
+
common/node_modules/mt-a11y-dialog/a11y-dialog.min.js DELETED
@@ -1 +0,0 @@
1
- !function(t){"use strict";function e(t){if(this.options=h({appendTarget:"",bodyLock:!0,closeButtonAriaLabel:"Close this dialog window",closeButtonClasses:"a11y-dialog__close-button",contentClasses:"a11y-dialog__content",effect:"none",effectSpeed:300,effectEasing:"ease-in-out",overlayClasses:"a11y-dialog__overlay",overlayClickCloses:!0,trigger:null,wrapperClasses:"a11y-dialog"},t),this._rendered=!1,this._show=this.show.bind(this),this._hide=this.hide.bind(this),this._maintainFocus=this._maintainFocus.bind(this),this._bindKeypress=this._bindKeypress.bind(this),this.trigger=a(this.options.trigger)?o(this.options.trigger,!0,document,!0):this.options.trigger,this.node=null,!this.trigger)return void console.warn("Lookup for a11y target node failed.");this._listeners={},this.create()}function i(t){var e=[],i=t.length;for(i;i--;e.unshift(t[i]));return e}function o(t,e,o,n){o||(o=document);var s=n?t:'[data-js="'+t+'"]',r=o.querySelectorAll(s);return e&&(r=i(r)),r}function n(t,e){return i((e||document).querySelectorAll(t))}function s(t){var e=d(t);e.length&&e[0].focus()}function r(t,e){e.parentNode.insertBefore(t,e.nextElementSibling)}function d(t){return n(p.join(","),t).filter(function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)})}function a(t){return"[object String]"===Object.prototype.toString.call(t)}function h(t,e){return Object.keys(e).forEach(function(i){t[i]=e[i]}),t}function c(t,e){var i=d(t),o=i.indexOf(document.activeElement);e.shiftKey&&0===o?(i[i.length-1].focus(),e.preventDefault()):e.shiftKey||o!==i.length-1||(i[0].focus(),e.preventDefault())}function l(){g=b.scrollTop,document.body.classList.add("a11y-dialog__body-locked"),document.body.style.position="fixed",document.body.style.width="100%",document.body.style.marginTop="-"+g+"px"}function u(){document.body.style.marginTop="",document.body.style.position="",document.body.style.width="",b.scrollTop=g,document.body.classList.remove("a11y-dialog__body-locked")}var f,p=["a[href]","area[href]","input:not([disabled])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","iframe","object","embed","[contenteditable]",'[tabindex]:not([tabindex^="-"])'],y=function(){var t=/(android)/i.test(navigator.userAgent),e=!!window.chrome,i="undefined"!=typeof InstallTrigger,o=document.documentMode,n=!o&&!!window.StyleMedia,s=!!navigator.userAgent.match(/(iPod|iPhone|iPad)/i),r=!!navigator.userAgent.match(/(iPod|iPhone)/i),d=!!window.opera||navigator.userAgent.indexOf(" OPR/")>=0;return{android:t,chrome:e,edge:n,firefox:i,ie:o,ios:s,iosMobile:r,opera:d,safari:Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0||!e&&!d&&"undefined"!==window.webkitAudioContext,os:navigator.platform}}(),g=0,b=y.ie||y.firefox||y.chrome&&!y.edge?document.documentElement:document.body;e.prototype.create=function(){return this.shown=!1,this.trigger.forEach(function(t){t.addEventListener("click",this._show)}.bind(this)),this._fire("create"),this},e.prototype.render=function(t){var e=o(this.trigger[0].dataset.content)[0];if(!e)return this;var i=document.createElement("div");i.setAttribute("aria-hidden","true"),i.classList.add(this.options.wrapperClasses),i.innerHTML='<div data-js="a11y-overlay" tabindex="-1" class="'+this.options.overlayClasses+'"></div>\n <div class="'+this.options.contentClasses+'" role="dialog">\n <div role="document">\n <button data-js="a11y-close-button" class="'+this.options.closeButtonClasses+'" type="button" aria-label="'+this.options.closeButtonAriaLabel+'" ></button>\n '+e.innerHTML+" </div>\n </div>";var n=this.trigger;return this.options.appendTarget.length&&(n=document.querySelectorAll(this.options.appendTarget)[0]||this.trigger),r(i,n),this.node=i,this.overlay=o("a11y-overlay",!1,this.node)[0],this.closeButton=o("a11y-close-button",!1,this.node)[0],this.options.overlayClickCloses&&this.overlay.addEventListener("click",this._hide),this.closeButton.addEventListener("click",this._hide),this._rendered=!0,this._fire("render",t),this},e.prototype.show=function(t){return this.shown?this:(this._rendered||this.render(t),this._rendered?(this.shown=!0,this._applyOpenEffect(),this.node.setAttribute("aria-hidden","false"),this.options.bodyLock&&l(),f=document.activeElement,s(this.node),document.body.addEventListener("focus",this._maintainFocus,!0),document.addEventListener("keydown",this._bindKeypress),this._fire("show",t),this):this)},e.prototype.hide=function(t){return this.shown?(this.shown=!1,"none"===this.options.effect&&this.node.setAttribute("aria-hidden","true"),this._applyCloseEffect(),this.options.bodyLock&&u(),f&&f.focus(),document.body.removeEventListener("focus",this._maintainFocus,!0),document.removeEventListener("keydown",this._bindKeypress),this._fire("hide",t),this):this},e.prototype.destroy=function(){return this.hide(),this.trigger.forEach(function(t){t.removeEventListener("click",this._show)}.bind(this)),this._rendered&&(this.options.overlayClickCloses&&this.overlay.removeEventListener("click",this._hide),this.closeButton.removeEventListener("click",this._hide)),this._fire("destroy"),this._listeners={},this},e.prototype.on=function(t,e){return void 0===this._listeners[t]&&(this._listeners[t]=[]),this._listeners[t].push(e),this},e.prototype.off=function(t,e){var i=this._listeners[t].indexOf(e);return i>-1&&this._listeners[t].splice(i,1),this},e.prototype._fire=function(t,e){(this._listeners[t]||[]).forEach(function(t){t(this.node,e)}.bind(this))},e.prototype._bindKeypress=function(t){this.shown&&27===t.which&&(t.preventDefault(),this.hide()),this.shown&&9===t.which&&c(this.node,t)},e.prototype._maintainFocus=function(t){this.shown&&!this.node.contains(t.target)&&s(this.node)},e.prototype._applyOpenEffect=function(){var t=this;setTimeout(function(){t.node.classList.add("a11y-dialog--open")},50),"fade"===this.options.effect&&(this.node.style.opacity="0",this.node.style.transition="opacity "+this.options.effectSpeed+"ms "+this.options.effectEasing,setTimeout(function(){t.node.style.opacity="1"},50))},e.prototype._applyCloseEffect=function(){var t=this;this.node.classList.remove("a11y-dialog--open"),"fade"===this.options.effect?(this.node.style.opacity="0",setTimeout(function(){t.node.style.transition="",t.node.setAttribute("aria-hidden","true")},this.options.effectSpeed)):"css"===this.options.effect&&setTimeout(function(){t.node.setAttribute("aria-hidden","true")},this.options.effectSpeed)},"undefined"!=typeof module&&void 0!==module.exports?module.exports=e:"function"==typeof define&&define.amd?define("A11yDialog",[],function(){return e}):"object"==typeof t&&(t.A11yDialog=e)}("undefined"!=typeof global?global:window);
 
common/src/Tribe/Admin/Activation_Page.php CHANGED
@@ -3,7 +3,7 @@
3
  * Shows a welcome or update message after the plugin is installed/updated.
4
  */
5
  class Tribe__Admin__Activation_Page {
6
- protected $args = [];
7
  public $update_slug = 'update-message-';
8
  public $welcome_slug = 'welcome-message-';
9
  protected $current_context = '';
@@ -24,8 +24,8 @@ class Tribe__Admin__Activation_Page {
24
  * @type string $welcome_page_template
25
  * }
26
  */
27
- public function __construct( array $args = [] ) {
28
- $this->args = wp_parse_args( $args, [
29
  'slug' => '',
30
  'activation_transient' => '',
31
  'version' => '',
@@ -35,36 +35,14 @@ class Tribe__Admin__Activation_Page {
35
  'update_page_template' => '',
36
  'welcome_page_title' => '',
37
  'welcome_page_template' => '',
38
- ] );
39
 
40
- $this->update_slug .= $this->args['slug'];
41
  $this->welcome_slug .= $this->args['slug'];
42
 
43
  $this->hooks();
44
  }
45
 
46
- /**
47
- * Determines if we are currently on the Welcome page.
48
- *
49
- * @since 4.12.11
50
- *
51
- * @return bool
52
- */
53
- public function is_welcome_page() {
54
- return isset( $_GET[ $this->welcome_slug ] );
55
- }
56
-
57
- /**
58
- * Determines if we are currently on the update page.
59
- *
60
- * @since 4.12.11
61
- *
62
- * @return bool
63
- */
64
- public function is_update_page() {
65
- return isset( $_GET[ $this->update_slug ] );
66
- }
67
-
68
  /**
69
  * Listen for opportunities to show update and welcome splash pages.
70
  */
@@ -76,11 +54,11 @@ class Tribe__Admin__Activation_Page {
76
  return;
77
  }
78
 
79
- add_action( 'admin_init', [ $this, 'maybe_redirect' ], 10, 0 );
80
- add_action( 'admin_menu', [ $this, 'register_page' ], 100, 0 ); // come in after the default page is registered
81
 
82
- add_action( 'update_plugin_complete_actions', [ $this, 'update_complete_actions' ], 15, 2 );
83
- add_action( 'update_bulk_plugins_complete_actions', [ $this, 'update_complete_actions' ], 15, 2 );
84
  }
85
 
86
  /**
@@ -92,7 +70,7 @@ class Tribe__Admin__Activation_Page {
92
  * @return array The filtered Links
93
  */
94
  public function update_complete_actions( $actions, $plugin ) {
95
- $plugins = [];
96
 
97
  if ( ! empty( $_GET['plugins'] ) ) {
98
  $plugins = explode( ',', esc_attr( $_GET['plugins'] ) );
@@ -221,7 +199,7 @@ class Tribe__Admin__Activation_Page {
221
  * Disused since TEC PR 88 (targeting Tribe__Events__Activation_Page,
222
  * which this class was derived from).
223
  *
224
- * @see https://github.com/the-events-calendar/the-events-calendar/pull/88
225
  *
226
  * @todo decide whether to reinstate or remove
227
  */
@@ -257,25 +235,12 @@ class Tribe__Admin__Activation_Page {
257
  $this->current_context = 'welcome';
258
  } elseif ( isset( $_GET[ $this->update_slug ] ) ) {
259
  $this->current_context = 'update';
260
- } else {
261
- return;
262
  }
263
 
264
- $this->disable_default_settings_page();
265
- add_filter( 'admin_body_class', [ $this, 'admin_body_class' ] );
266
- add_action( Tribe__Settings::instance()->admin_page, [ $this, 'display_page' ] );
267
- }
268
-
269
- /**
270
- * Hooked to admin_body_class to add a class for the update or welcome page
271
- *
272
- * @param string $classes a space separated string of classes to be added to body
273
- *
274
- * @return string
275
- */
276
- public function admin_body_class( $classes ) {
277
- $classes .= ' tribe-' . $this->current_context;
278
- return $classes;
279
  }
280
 
281
  /**
@@ -283,7 +248,7 @@ class Tribe__Admin__Activation_Page {
283
  * in the Events > Settings slot instead, for this request only).
284
  */
285
  protected function disable_default_settings_page() {
286
- remove_action( Tribe__Settings::instance()->admin_page, [ Tribe__Settings::instance(), 'generatePage' ] );
287
  }
288
 
289
  /**
3
  * Shows a welcome or update message after the plugin is installed/updated.
4
  */
5
  class Tribe__Admin__Activation_Page {
6
+ protected $args = array();
7
  public $update_slug = 'update-message-';
8
  public $welcome_slug = 'welcome-message-';
9
  protected $current_context = '';
24
  * @type string $welcome_page_template
25
  * }
26
  */
27
+ public function __construct( array $args = array() ) {
28
+ $this->args = wp_parse_args( $args, array(
29
  'slug' => '',
30
  'activation_transient' => '',
31
  'version' => '',
35
  'update_page_template' => '',
36
  'welcome_page_title' => '',
37
  'welcome_page_template' => '',
38
+ ) );
39
 
40
+ $this->update_slug .= $this->args['slug'];
41
  $this->welcome_slug .= $this->args['slug'];
42
 
43
  $this->hooks();
44
  }
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  /**
47
  * Listen for opportunities to show update and welcome splash pages.
48
  */
54
  return;
55
  }
56
 
57
+ add_action( 'admin_init', array( $this, 'maybe_redirect' ), 10, 0 );
58
+ add_action( 'admin_menu', array( $this, 'register_page' ), 100, 0 ); // come in after the default page is registered
59
 
60
+ add_action( 'update_plugin_complete_actions', array( $this, 'update_complete_actions' ), 15, 2 );
61
+ add_action( 'update_bulk_plugins_complete_actions', array( $this, 'update_complete_actions' ), 15, 2 );
62
  }
63
 
64
  /**
70
  * @return array The filtered Links
71
  */
72
  public function update_complete_actions( $actions, $plugin ) {
73
+ $plugins = array();
74
 
75
  if ( ! empty( $_GET['plugins'] ) ) {
76
  $plugins = explode( ',', esc_attr( $_GET['plugins'] ) );
199
  * Disused since TEC PR 88 (targeting Tribe__Events__Activation_Page,
200
  * which this class was derived from).
201
  *
202
+ * @see https://github.com/moderntribe/the-events-calendar/pull/88
203
  *
204
  * @todo decide whether to reinstate or remove
205
  */
235
  $this->current_context = 'welcome';
236
  } elseif ( isset( $_GET[ $this->update_slug ] ) ) {
237
  $this->current_context = 'update';
 
 
238
  }
239
 
240
+ if ( ! empty( $this->current_context ) ) {
241
+ $this->disable_default_settings_page();
242
+ add_action( Tribe__Settings::instance()->admin_page, array( $this, 'display_page' ) );
243
+ }
 
 
 
 
 
 
 
 
 
 
 
244
  }
245
 
246
  /**
248
  * in the Events > Settings slot instead, for this request only).
249
  */
250
  protected function disable_default_settings_page() {
251
+ remove_action( Tribe__Settings::instance()->admin_page, array( Tribe__Settings::instance(), 'generatePage' ) );
252
  }
253
 
254
  /**
common/src/Tribe/Admin/Help_Page.php CHANGED
@@ -72,59 +72,50 @@ class Tribe__Admin__Help_Page {
72
  * @return array
73
  */
74
  public function get_plugins( $plugin_name = null, $is_active = true ) {
75
- $plugins = [];
76
 
77
- $plugins['the-events-calendar'] = [
78
  'name' => 'the-events-calendar',
79
  'title' => esc_html__( 'The Events Calendar', 'tribe-common' ),
80
  'repo' => 'https://wordpress.org/plugins/the-events-calendar/',
81
  'forum' => 'https://wordpress.org/support/plugin/the-events-calendar/',
82
  'stars_url' => 'https://wordpress.org/support/plugin/the-events-calendar/reviews/?filter=5',
83
- 'description' => esc_html__(
84
- 'The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events.',
85
- 'tribe-common'
86
- ),
87
  'is_active' => false,
88
  'version' => null,
89
- ];
90
 
91
  if ( class_exists( 'Tribe__Events__Main' ) ) {
92
  $plugins['the-events-calendar']['version'] = Tribe__Events__Main::VERSION;
93
  $plugins['the-events-calendar']['is_active'] = true;
94
  }
95
 
96
- $plugins['event-tickets'] = [
97
  'name' => 'event-tickets',
98
  'title' => esc_html__( 'Event Tickets', 'tribe-common' ),
99
  'repo' => 'https://wordpress.org/plugins/event-tickets/',
100
  'forum' => 'https://wordpress.org/support/plugin/event-tickets',
101
  'stars_url' => 'https://wordpress.org/support/plugin/event-tickets/reviews/?filter=5',
102
- 'description' => esc_html__(
103
- 'Events Tickets is a carefully crafted, extensible plugin that lets you easily sell tickets for your events.',
104
- 'tribe-common'
105
- ),
106
  'is_active' => false,
107
  'version' => null,
108
- ];
109
 
110
  if ( class_exists( 'Tribe__Tickets__Main' ) ) {
111
  $plugins['event-tickets']['version'] = Tribe__Tickets__Main::VERSION;
112
  $plugins['event-tickets']['is_active'] = true;
113
  }
114
 
115
- $plugins['advanced-post-manager'] = [
116
  'name' => 'advanced-post-manager',
117
  'title' => esc_html__( 'Advanced Post Manager', 'tribe-common' ),
118
  'repo' => 'https://wordpress.org/plugins/advanced-post-manager/',
119
  'forum' => 'https://wordpress.org/support/plugin/advanced-post-manager/',
120
  'stars_url' => 'https://wordpress.org/support/plugin/advanced-post-manager/reviews/?filter=5',
121
- 'description' => esc_html__(
122
- 'Turbo charge your posts admin for any custom post type with sortable filters and columns, and auto-registration of metaboxes.',
123
- 'tribe-common'
124
- ),
125
  'is_active' => false,
126
  'version' => null,
127
- ];
128
 
129
  if ( class_exists( 'Tribe_APM' ) ) {
130
  $plugins['advanced-post-manager']['version'] = 1;
@@ -165,7 +156,7 @@ class Tribe__Admin__Help_Page {
165
  public function get_plugin_forum_links( $is_active = true ) {
166
  $plugins = $this->get_plugins( null, $is_active );
167
 
168
- $list = [];
169
  foreach ( $plugins as $plugin ) {
170
  $list[] = '<a href="' . esc_url( $plugin['forum'] ) . '" target="_blank">' . $plugin['title'] . '</a>';
171
  }
@@ -216,75 +207,65 @@ class Tribe__Admin__Help_Page {
216
  * @return array
217
  */
218
  public function get_addons( $plugin = null, $is_active = null, $is_important = null ) {
219
- $addons = [];
220
-
221
- $addons['events-calendar-pro'] = [
222
- 'id' => 'events-calendar-pro',
223
- 'title' => esc_html__( 'Events Calendar PRO', 'tribe-common' ),
224
- 'link' => 'http://evnt.is/dr',
225
- 'plugin' => [ 'the-events-calendar' ],
226
- 'is_active' => class_exists( 'Tribe__Events__Pro__Main' ),
227
  'is_important' => true,
228
- ];
229
 
230
- $addons['eventbrite-tickets'] = [
231
  'id' => 'eventbrite-tickets',
232
  'title' => esc_html__( 'Eventbrite Tickets', 'tribe-common' ),
233
- 'link' => 'http://evnt.is/ds',
234
- 'plugin' => [ 'the-events-calendar' ],
235
  'is_active' => class_exists( 'Tribe__Events__Tickets__Eventbrite__Main' ),
236
- ];
237
 
238
- $addons['community-events'] = [
239
  'id' => 'community-events',
240
  'title' => esc_html__( 'Community Events', 'tribe-common' ),
241
- 'link' => 'http://evnt.is/dt',
242
- 'plugin' => [ 'the-events-calendar' ],
243
  'is_active' => class_exists( 'Tribe__Events__Community__Main' ),
244
- ];
245
 
246
- $addons['event-aggregator'] = [
247
  'id' => 'event-aggregator',
248
  'title' => esc_html__( 'Event Aggregator', 'tribe-common' ),
249
- 'link' => 'http://evnt.is/19mk',
250
- 'plugin' => [ 'the-events-calendar' ],
251
- 'is_active' => class_exists( 'Tribe__Events__Aggregator' ) && tribe(
252
- 'events-aggregator.main'
253
- )->is_service_active(),
254
- ];
255
-
256
- $addons['events-filter-bar'] = [
257
  'id' => 'events-filter-bar',
258
  'title' => esc_html__( 'Filter Bar', 'tribe-common' ),
259
- 'link' => 'http://evnt.is/hu',
260
- 'plugin' => [ 'the-events-calendar' ],
261
  'is_active' => class_exists( 'Tribe__Events__Filterbar__View' ),
262
- ];
263
-
264
- $addons['events-virtual'] = [
265
- 'id' => 'events-virtual',
266
- 'title' => esc_html__( 'Virtual Events', 'tribe-common' ),
267
- 'link' => 'http://evnt.is/1alb',
268
- 'plugin' => [ 'the-events-calendar' ],
269
- 'is_active' => class_exists( '\Tribe\Events\Virtual\Plugin' ),
270
- ];
271
-
272
- $addons['event-tickets-plus'] = [
273
- 'id' => 'event-tickets-plus',
274
- 'title' => esc_html__( 'Event Tickets Plus', 'tribe-common' ),
275
- 'link' => 'http://evnt.is/18wa',
276
- 'plugin' => [ 'event-tickets' ],
277
- 'is_active' => class_exists( 'Tribe__Tickets_Plus__Main' ),
278
  'is_important' => true,
279
- ];
280
 
281
- $addons['event-community-tickets'] = [
282
  'id' => 'event-community-tickets',
283
  'title' => esc_html__( 'Community Tickets', 'tribe-common' ),
284
- 'link' => 'http://evnt.is/18m2',
285
- 'plugin' => [ 'event-tickets' ],
286
  'is_active' => class_exists( 'Tribe__Events__Community__Tickets__Main' ),
287
- ];
288
 
289
  /**
290
  * Filter the array of premium addons upsold on the sidebar of the Settings > Help tab
@@ -299,7 +280,7 @@ class Tribe__Admin__Help_Page {
299
  }
300
 
301
  // Allow for easily grab the addons for a plugin
302
- $filtered = [];
303
  foreach ( $addons as $id => $addon ) {
304
  if ( ! is_null( $plugin ) && ! in_array( $plugin, (array) $addon['plugin'] ) ) {
305
  continue;
@@ -329,10 +310,10 @@ class Tribe__Admin__Help_Page {
329
 
330
  public function is_active( $should_be_active ) {
331
  $plugins = $this->get_plugins( null, true );
332
- $addons = $this->get_addons( null, true );
333
 
334
- $actives = array_merge( $plugins, $addons );
335
- $is_active = [];
336
 
337
  foreach ( $actives as $id => $active ) {
338
  if ( in_array( $id, (array) $should_be_active ) ) {
@@ -353,11 +334,11 @@ class Tribe__Admin__Help_Page {
353
  * @return string Link with the GA arguments
354
  */
355
  public function get_ga_link( $link = null, $relative = true ) {
356
- $query_args = [
357
  'utm_source' => 'helptab',
358
  'utm_medium' => 'plugin-tec',
359
  'utm_campaign' => 'in-app',
360
- ];
361
 
362
  if ( true === $relative ) {
363
  $link = trailingslashit( Tribe__Main::$tec_url . $link );
@@ -367,15 +348,15 @@ class Tribe__Admin__Help_Page {
367
  }
368
 
369
  /**
370
- * Gets the Feed items from The Events Calendar's Blog
371
  *
372
  * @since 4.0
373
  *
374
  * @return array Feed Title and Link
375
  */
376
  public function get_feed_items() {
377
- $news_rss = fetch_feed( Tribe__Main::FEED_URL );
378
- $news_feed = [];
379
 
380
  if ( ! is_wp_error( $news_rss ) ) {
381
  /**
@@ -387,10 +368,10 @@ class Tribe__Admin__Help_Page {
387
  $rss_items = $news_rss->get_items( 0, $maxitems );
388
  if ( $maxitems > 0 ) {
389
  foreach ( $rss_items as $item ) {
390
- $item = [
391
  'title' => esc_html( $item->get_title() ),
392
  'link' => esc_url( $item->get_permalink() ),
393
- ];
394
  $news_feed[] = $item;
395
  }
396
  }
@@ -428,16 +409,16 @@ class Tribe__Admin__Help_Page {
428
  }
429
 
430
  // Fetch the data
431
- $data = plugins_api( 'plugin_information', [
432
- 'slug' => $plugin->name,
433
- 'is_ssl' => is_ssl(),
434
- 'fields' => [
435
- 'banners' => true,
436
- 'reviews' => true,
437
- 'downloaded' => true,
438
- 'active_installs' => true,
439
- ],
440
- ] );
441
 
442
  if ( ! is_wp_error( $data ) ) {
443
  // Format Downloaded Infomation
@@ -498,13 +479,13 @@ class Tribe__Admin__Help_Page {
498
  }
499
 
500
  // Only add List Item if is a UL or OL
501
- if ( in_array( $line['type'], [ 'ul', 'ol' ] ) ) {
502
  $text .= '<li>' . "\n";
503
  }
504
 
505
  $text .= $this->get_content_html( $item );
506
 
507
- if ( in_array( $line['type'], [ 'ul', 'ol' ] ) ) {
508
  $text .= '</li>' . "\n";
509
  }
510
  }
@@ -526,7 +507,7 @@ class Tribe__Admin__Help_Page {
526
  * @access private
527
  * @var array
528
  */
529
- private $sections = [];
530
 
531
  /**
532
  * Incremented with each method call, then stored in $section->uid.
@@ -584,7 +565,7 @@ class Tribe__Admin__Help_Page {
584
  // Everytime you call this we will add this up
585
  self::$section_count++;
586
 
587
- $possible_types = (array) apply_filters( 'tribe_help_available_section_types', [ 'default', 'box' ] );
588
 
589
  // Set a Default type
590
  if ( empty( $type ) || ! in_array( $type, $possible_types ) ) {
@@ -592,21 +573,21 @@ class Tribe__Admin__Help_Page {
592
  }
593
 
594
  // Create the section and Sanitize the values to avoid having to do it later
595
- $section = (object) [
596
- 'id' => sanitize_html_class( $id ),
597
- 'title' => esc_html( $title ),
598
- 'priority' => absint( $priority ),
599
- 'type' => sanitize_html_class( $type ),
600
 
601
- // This Method Unique count integer used for ordering with priority
602
- 'unique_call_order' => self::$section_count,
603
 
604
- // Counter for ordering Content
605
- 'content_count' => 0,
606
 
607
- // Setup the Base for the content to come
608
- 'content' => [],
609
- ];
610
 
611
  $this->sections[ $section->id ] = $section;
612
 
@@ -625,7 +606,7 @@ class Tribe__Admin__Help_Page {
625
  *
626
  * @return object The content item added
627
  */
628
- public function add_section_content( $section_id, $content, $priority = 10, $arguments = [] ) {
629
  $section_id = sanitize_html_class( $section_id );
630
 
631
  // Check if the section exists
@@ -670,13 +651,13 @@ class Tribe__Admin__Help_Page {
670
  public function remove_section( $section_id ) {
671
  if (
672
  ! isset( $this->sections[ $section_id ] ) &&
673
- ! in_array( (object) [ 'id' => $section_id ], $this->sections, true )
674
  ) {
675
  // There are no sections to remove, so false
676
  return false;
677
  }
678
 
679
- $removed = [];
680
  foreach ( $this->sections as $id => $section ) {
681
  if ( ! is_numeric( $id ) && ! is_numeric( $section_id ) && ! empty( $section->id ) ) {
682
  if ( $section->id === $section_id ) {
@@ -730,9 +711,9 @@ class Tribe__Admin__Help_Page {
730
  }
731
 
732
  // Sort by Priority
733
- uasort( $sections, [ $this, 'by_priority' ] );
734
 
735
- $html = [];
736
 
737
  foreach ( $sections as $index => $section ) {
738
  $section = (object) $section;
@@ -755,7 +736,7 @@ class Tribe__Admin__Help_Page {
755
  $section = apply_filters( 'tribe_help_section_' . $section->id, $section, $this );
756
 
757
  // Sort by Priority
758
- uasort( $section->content, [ $this, 'by_priority' ] );
759
 
760
  $html[ $section->id . '-start' ] = '<div id="tribe-' . sanitize_html_class( $section->id ) . '" class="tribe-help-section clearfix tribe-section-type-' . sanitize_html_class( $section->type ) . '">';
761
 
@@ -806,20 +787,20 @@ class Tribe__Admin__Help_Page {
806
  $plugin_exists = isset( $plugins[ $status['file'] ] );
807
 
808
  if ( 'install' !== $status['status'] && ! $plugin_active ) {
809
- $args = [
810
- 'action' => 'activate',
811
- 'plugin' => $status['file'],
812
  'plugin_status' => 'all',
813
- 'paged' => 1,
814
- 's' => '',
815
- ];
816
  $activate_url = wp_nonce_url( add_query_arg( $args, 'plugins.php' ), 'activate-plugin_' . $status['file'] );
817
  $link = '<a class="button" href="' . $activate_url . '" aria-label="' . esc_attr( sprintf( esc_attr__( 'Activate %s', 'tribe-common' ), $plugin->name ) ) . '">' . esc_html__( 'Activate Plugin', 'tribe-common' ) . '</a>';
818
  } elseif ( 'update_available' === $status['status'] ) {
819
- $args = [
820
  'action' => 'upgrade-plugin',
821
  'plugin' => $status['file'],
822
- ];
823
  $update_url = wp_nonce_url( add_query_arg( $args, 'update.php' ), 'upgrade-plugin_' . $status['file'] );
824
 
825
  $link = '<a class="button" href="' . $update_url . '">' . esc_html__( 'Upgrade Plugin', 'tribe-common' ) . '</a>';
@@ -830,13 +811,13 @@ class Tribe__Admin__Help_Page {
830
 
831
  if ( ! isset( $link ) ) {
832
  if ( $api_data ) {
833
- $args = [
834
  'tab' => 'plugin-information',
835
  'plugin' => $plugin->name,
836
  'TB_iframe' => true,
837
  'width' => 772,
838
  'height' => 600,
839
- ];
840
  $iframe_url = add_query_arg( $args, admin_url( '/plugin-install.php' ) );
841
  $link = '<a class="button thickbox" href="' . $iframe_url . '" aria-label="' . esc_attr( sprintf( esc_attr__( 'Install %s', 'tribe-common' ), $plugin->name ) ) . '">' . esc_html__( 'Install Plugin', 'tribe-common' ) . '</a>';
842
  } else {
@@ -865,17 +846,13 @@ class Tribe__Admin__Help_Page {
865
  <dd><?php echo esc_html( number_format( $api_data->active_installs ) ); ?>+</dd>
866
 
867
  <dt><?php esc_html_e( 'Rating:', 'tribe-common' ); ?></dt>
868
- <dd>
869
- <a href="<?php echo esc_url( $plugin->stars_url ); ?>" target="_blank">
870
- <?php
871
- wp_star_rating( [
872
- 'rating' => $api_data->rating,
873
- 'type' => 'percent',
874
- 'number' => $api_data->num_ratings,
875
- ] );
876
- ?>
877
- </a>
878
- </dd>
879
  </dl>
880
  <?php } ?>
881
 
72
  * @return array
73
  */
74
  public function get_plugins( $plugin_name = null, $is_active = true ) {
75
+ $plugins = array();
76
 
77
+ $plugins['the-events-calendar'] = array(
78
  'name' => 'the-events-calendar',
79
  'title' => esc_html__( 'The Events Calendar', 'tribe-common' ),
80
  'repo' => 'https://wordpress.org/plugins/the-events-calendar/',
81
  'forum' => 'https://wordpress.org/support/plugin/the-events-calendar/',
82
  'stars_url' => 'https://wordpress.org/support/plugin/the-events-calendar/reviews/?filter=5',
83
+ 'description' => esc_html__( 'The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events.', 'tribe-common' ),
 
 
 
84
  'is_active' => false,
85
  'version' => null,
86
+ );
87
 
88
  if ( class_exists( 'Tribe__Events__Main' ) ) {
89
  $plugins['the-events-calendar']['version'] = Tribe__Events__Main::VERSION;
90
  $plugins['the-events-calendar']['is_active'] = true;
91
  }
92
 
93
+ $plugins['event-tickets'] = array(
94
  'name' => 'event-tickets',
95
  'title' => esc_html__( 'Event Tickets', 'tribe-common' ),
96
  'repo' => 'https://wordpress.org/plugins/event-tickets/',
97
  'forum' => 'https://wordpress.org/support/plugin/event-tickets',
98
  'stars_url' => 'https://wordpress.org/support/plugin/event-tickets/reviews/?filter=5',
99
+ 'description' => esc_html__( 'Events Tickets is a carefully crafted, extensible plugin that lets you easily sell tickets for your events.', 'tribe-common' ),
 
 
 
100
  'is_active' => false,
101
  'version' => null,
102
+ );
103
 
104
  if ( class_exists( 'Tribe__Tickets__Main' ) ) {
105
  $plugins['event-tickets']['version'] = Tribe__Tickets__Main::VERSION;
106
  $plugins['event-tickets']['is_active'] = true;
107
  }
108
 
109
+ $plugins['advanced-post-manager'] = array(
110
  'name' => 'advanced-post-manager',
111
  'title' => esc_html__( 'Advanced Post Manager', 'tribe-common' ),
112
  'repo' => 'https://wordpress.org/plugins/advanced-post-manager/',
113
  'forum' => 'https://wordpress.org/support/plugin/advanced-post-manager/',
114
  'stars_url' => 'https://wordpress.org/support/plugin/advanced-post-manager/reviews/?filter=5',
115
+ 'description' => esc_html__( 'Turbo charge your posts admin for any custom post type with sortable filters and columns, and auto-registration of metaboxes.', 'tribe-common' ),
 
 
 
116
  'is_active' => false,
117
  'version' => null,
118
+ );
119
 
120
  if ( class_exists( 'Tribe_APM' ) ) {
121
  $plugins['advanced-post-manager']['version'] = 1;
156
  public function get_plugin_forum_links( $is_active = true ) {
157
  $plugins = $this->get_plugins( null, $is_active );
158
 
159
+ $list = array();
160
  foreach ( $plugins as $plugin ) {
161
  $list[] = '<a href="' . esc_url( $plugin['forum'] ) . '" target="_blank">' . $plugin['title'] . '</a>';
162
  }
207
  * @return array
208
  */
209
  public function get_addons( $plugin = null, $is_active = null, $is_important = null ) {
210
+ $addons = array();
211
+
212
+ $addons['events-calendar-pro'] = array(
213
+ 'id' => 'events-calendar-pro',
214
+ 'title' => esc_html__( 'Events Calendar PRO', 'tribe-common' ),
215
+ 'link' => 'http://m.tri.be/dr',
216
+ 'plugin' => array( 'the-events-calendar' ),
217
+ 'is_active' => class_exists( 'Tribe__Events__Pro__Main' ),
218
  'is_important' => true,
219
+ );
220
 
221
+ $addons['eventbrite-tickets'] = array(
222
  'id' => 'eventbrite-tickets',
223
  'title' => esc_html__( 'Eventbrite Tickets', 'tribe-common' ),
224
+ 'link' => 'http://m.tri.be/ds',
225
+ 'plugin' => array( 'the-events-calendar' ),
226
  'is_active' => class_exists( 'Tribe__Events__Tickets__Eventbrite__Main' ),
227
+ );
228
 
229
+ $addons['community-events'] = array(
230
  'id' => 'community-events',
231
  'title' => esc_html__( 'Community Events', 'tribe-common' ),
232
+ 'link' => 'http://m.tri.be/dt',
233
+ 'plugin' => array( 'the-events-calendar' ),
234
  'is_active' => class_exists( 'Tribe__Events__Community__Main' ),
235
+ );
236
 
237
+ $addons['event-aggregator'] = array(
238
  'id' => 'event-aggregator',
239
  'title' => esc_html__( 'Event Aggregator', 'tribe-common' ),
240
+ 'link' => 'http://m.tri.be/19mk',
241
+ 'plugin' => array( 'the-events-calendar' ),
242
+ 'is_active' => class_exists( 'Tribe__Events__Aggregator' ) && tribe( 'events-aggregator.main' )->is_service_active(),
243
+ );
244
+
245
+ $addons['events-filter-bar'] = array(
 
 
246
  'id' => 'events-filter-bar',
247
  'title' => esc_html__( 'Filter Bar', 'tribe-common' ),
248
+ 'link' => 'http://m.tri.be/hu',
249
+ 'plugin' => array( 'the-events-calendar' ),
250
  'is_active' => class_exists( 'Tribe__Events__Filterbar__View' ),
251
+ );
252
+
253
+ $addons['event-tickets-plus'] = array(
254
+ 'id' => 'event-tickets-plus',
255
+ 'title' => esc_html__( 'Event Tickets Plus', 'tribe-common' ),
256
+ 'link' => 'http://m.tri.be/18wa',
257
+ 'plugin' => array( 'event-tickets' ),
258
+ 'is_active' => class_exists( 'Tribe__Tickets_Plus__Main' ),
 
 
 
 
 
 
 
 
259
  'is_important' => true,
260
+ );
261
 
262
+ $addons['event-community-tickets'] = array(
263
  'id' => 'event-community-tickets',
264
  'title' => esc_html__( 'Community Tickets', 'tribe-common' ),
265
+ 'link' => 'http://m.tri.be/18m2',
266
+ 'plugin' => array( 'event-tickets' ),
267
  'is_active' => class_exists( 'Tribe__Events__Community__Tickets__Main' ),
268
+ );
269
 
270
  /**
271
  * Filter the array of premium addons upsold on the sidebar of the Settings > Help tab
280
  }
281
 
282
  // Allow for easily grab the addons for a plugin
283
+ $filtered = array();
284
  foreach ( $addons as $id => $addon ) {
285
  if ( ! is_null( $plugin ) && ! in_array( $plugin, (array) $addon['plugin'] ) ) {
286
  continue;
310
 
311
  public function is_active( $should_be_active ) {
312
  $plugins = $this->get_plugins( null, true );
313
+ $addons = $this->get_addons( null, true );
314
 
315
+ $actives = array_merge( $plugins, $addons );
316
+ $is_active = array();
317
 
318
  foreach ( $actives as $id => $active ) {
319
  if ( in_array( $id, (array) $should_be_active ) ) {
334
  * @return string Link with the GA arguments
335
  */
336
  public function get_ga_link( $link = null, $relative = true ) {
337
+ $query_args = array(
338
  'utm_source' => 'helptab',
339
  'utm_medium' => 'plugin-tec',
340
  'utm_campaign' => 'in-app',
341
+ );
342
 
343
  if ( true === $relative ) {
344
  $link = trailingslashit( Tribe__Main::$tec_url . $link );
348
  }
349
 
350
  /**
351
+ * Gets the Feed items from the The Events Calendar Blog
352
  *
353
  * @since 4.0
354
  *
355
  * @return array Feed Title and Link
356
  */
357
  public function get_feed_items() {
358
+ $news_rss = fetch_feed( Tribe__Main::FEED_URL );
359
+ $news_feed = array();
360
 
361
  if ( ! is_wp_error( $news_rss ) ) {
362
  /**
368
  $rss_items = $news_rss->get_items( 0, $maxitems );
369
  if ( $maxitems > 0 ) {
370
  foreach ( $rss_items as $item ) {
371
+ $item = array(
372
  'title' => esc_html( $item->get_title() ),
373
  'link' => esc_url( $item->get_permalink() ),
374
+ );
375
  $news_feed[] = $item;
376
  }
377
  }
409
  }
410
 
411
  // Fetch the data
412
+ $data = plugins_api( 'plugin_information', array(
413
+ 'slug' => $plugin->name,
414
+ 'is_ssl' => is_ssl(),
415
+ 'fields' => array(
416
+ 'banners' => true,
417
+ 'reviews' => true,
418
+ 'downloaded' => true,
419
+ 'active_installs' => true,
420
+ ),
421
+ ) );
422
 
423
  if ( ! is_wp_error( $data ) ) {
424
  // Format Downloaded Infomation
479
  }
480
 
481
  // Only add List Item if is a UL or OL
482
+ if ( in_array( $line['type'], array( 'ul', 'ol' ) ) ) {
483
  $text .= '<li>' . "\n";
484
  }
485
 
486
  $text .= $this->get_content_html( $item );
487
 
488
+ if ( in_array( $line['type'], array( 'ul', 'ol' ) ) ) {
489
  $text .= '</li>' . "\n";
490
  }
491
  }
507
  * @access private
508
  * @var array
509
  */
510
+ private $sections = array();
511
 
512
  /**
513
  * Incremented with each method call, then stored in $section->uid.
565
  // Everytime you call this we will add this up
566
  self::$section_count++;
567
 
568
+ $possible_types = (array) apply_filters( 'tribe_help_available_section_types', array( 'default', 'box' ) );
569
 
570
  // Set a Default type
571
  if ( empty( $type ) || ! in_array( $type, $possible_types ) ) {
573
  }
574
 
575
  // Create the section and Sanitize the values to avoid having to do it later
576
+ $section = (object) array(
577
+ 'id' => sanitize_html_class( $id ),
578
+ 'title' => esc_html( $title ),
579
+ 'priority' => absint( $priority ),
580
+ 'type' => sanitize_html_class( $type ),
581
 
582
+ // This Method Unique count integer used for ordering with priority
583
+ 'unique_call_order' => self::$section_count,
584
 
585
+ // Counter for ordering Content
586
+ 'content_count' => 0,
587
 
588
+ // Setup the Base for the content to come
589
+ 'content' => array(),
590
+ );
591
 
592
  $this->sections[ $section->id ] = $section;
593
 
606
  *
607
  * @return object The content item added
608
  */
609
+ public function add_section_content( $section_id, $content, $priority = 10, $arguments = array() ) {
610
  $section_id = sanitize_html_class( $section_id );
611
 
612
  // Check if the section exists
651
  public function remove_section( $section_id ) {
652
  if (
653
  ! isset( $this->sections[ $section_id ] ) &&
654
+ ! in_array( (object) array( 'id' => $section_id ), $this->sections, true )
655
  ) {
656
  // There are no sections to remove, so false
657
  return false;
658
  }
659
 
660
+ $removed = array();
661
  foreach ( $this->sections as $id => $section ) {
662
  if ( ! is_numeric( $id ) && ! is_numeric( $section_id ) && ! empty( $section->id ) ) {
663
  if ( $section->id === $section_id ) {
711
  }
712
 
713
  // Sort by Priority
714
+ uasort( $sections, array( $this, 'by_priority' ) );
715
 
716
+ $html = array();
717
 
718
  foreach ( $sections as $index => $section ) {
719
  $section = (object) $section;
736
  $section = apply_filters( 'tribe_help_section_' . $section->id, $section, $this );
737
 
738
  // Sort by Priority
739
+ uasort( $section->content, array( $this, 'by_priority' ) );
740
 
741
  $html[ $section->id . '-start' ] = '<div id="tribe-' . sanitize_html_class( $section->id ) . '" class="tribe-help-section clearfix tribe-section-type-' . sanitize_html_class( $section->type ) . '">';
742
 
787
  $plugin_exists = isset( $plugins[ $status['file'] ] );
788
 
789
  if ( 'install' !== $status['status'] && ! $plugin_active ) {
790
+ $args = array(
791
+ 'action' => 'activate',
792
+ 'plugin' => $status['file'],
793
  'plugin_status' => 'all',
794
+ 'paged' => 1,
795
+ 's' => '',
796
+ );
797
  $activate_url = wp_nonce_url( add_query_arg( $args, 'plugins.php' ), 'activate-plugin_' . $status['file'] );
798
  $link = '<a class="button" href="' . $activate_url . '" aria-label="' . esc_attr( sprintf( esc_attr__( 'Activate %s', 'tribe-common' ), $plugin->name ) ) . '">' . esc_html__( 'Activate Plugin', 'tribe-common' ) . '</a>';
799
  } elseif ( 'update_available' === $status['status'] ) {
800
+ $args = array(
801
  'action' => 'upgrade-plugin',
802
  'plugin' => $status['file'],
803
+ );
804
  $update_url = wp_nonce_url( add_query_arg( $args, 'update.php' ), 'upgrade-plugin_' . $status['file'] );
805
 
806
  $link = '<a class="button" href="' . $update_url . '">' . esc_html__( 'Upgrade Plugin', 'tribe-common' ) . '</a>';
811
 
812
  if ( ! isset( $link ) ) {
813
  if ( $api_data ) {
814
+ $args = array(
815
  'tab' => 'plugin-information',
816
  'plugin' => $plugin->name,
817
  'TB_iframe' => true,
818
  'width' => 772,
819
  'height' => 600,
820
+ );
821
  $iframe_url = add_query_arg( $args, admin_url( '/plugin-install.php' ) );
822
  $link = '<a class="button thickbox" href="' . $iframe_url . '" aria-label="' . esc_attr( sprintf( esc_attr__( 'Install %s', 'tribe-common' ), $plugin->name ) ) . '">' . esc_html__( 'Install Plugin', 'tribe-common' ) . '</a>';
823
  } else {
846
  <dd><?php echo esc_html( number_format( $api_data->active_installs ) ); ?>+</dd>
847
 
848
  <dt><?php esc_html_e( 'Rating:', 'tribe-common' ); ?></dt>
849
+ <dd><a href="<?php echo esc_url( $plugin->stars_url ); ?>" target="_blank">
850
+ <?php wp_star_rating( array(
851
+ 'rating' => $api_data->rating,
852
+ 'type' => 'percent',
853
+ 'number' => $api_data->num_ratings,
854
+ ) );?>
855
+ </a></dd>
 
 
 
 
856
  </dl>
857
  <?php } ?>
858
 
common/src/Tribe/Admin/Live_Date_Preview.php CHANGED
@@ -3,12 +3,12 @@
3
  * Facilitiates live date previews in the Events > Settings > Display admin screen.
4
  */
5
  class Tribe__Admin__Live_Date_Preview {
6
- protected $target_fields = [
7
  'dateWithYearFormat',
8
  'dateWithoutYearFormat',
9
  'monthAndYearFormat',
10
  'weekDayFormat',
11
- ];
12
 
13
  /**
14
  * Static Singleton Holder
@@ -31,7 +31,7 @@ class Tribe__Admin__Live_Date_Preview {
31
  * the user is actually on that tab).
32
  */
33
  public function __construct() {
34
- add_action( 'tribe_settings_after_do_tabs', [ $this, 'listen' ] );
35
  }
36
 
37
  /**
@@ -50,10 +50,10 @@ class Tribe__Admin__Live_Date_Preview {
50
  */
51
  $this->target_fields = (array) apply_filters( 'tribe_settings_date_preview_fields', $this->target_fields );
52
 
53
- add_filter( 'tribe_field_div_end', [ $this, 'setup_date_previews' ], 10, 2 );
54
 
55
  // We are still before `admin_enqueue_scripts` making it safe to use `tribe_asset`
56
- tribe_asset( Tribe__Main::instance(), 'tribe-date-live-refresh', 'admin-date-preview.js', [ 'jquery' ], 'admin_enqueue_scripts' );
57
  }
58
 
59
  public function setup_date_previews( $html, $field ) {
3
  * Facilitiates live date previews in the Events > Settings > Display admin screen.
4
  */
5
  class Tribe__Admin__Live_Date_Preview {
6
+ protected $target_fields = array(
7
  'dateWithYearFormat',
8
  'dateWithoutYearFormat',
9
  'monthAndYearFormat',
10
  'weekDayFormat',
11
+ );
12
 
13
  /**
14
  * Static Singleton Holder
31
  * the user is actually on that tab).
32
  */
33
  public function __construct() {
34
+ add_action( 'tribe_settings_after_do_tabs', array( $this, 'listen' ) );
35
  }
36
 
37
  /**
50
  */
51
  $this->target_fields = (array) apply_filters( 'tribe_settings_date_preview_fields', $this->target_fields );
52
 
53
+ add_filter( 'tribe_field_div_end', array( $this, 'setup_date_previews' ), 10, 2 );
54
 
55
  // We are still before `admin_enqueue_scripts` making it safe to use `tribe_asset`
56
+ tribe_asset( Tribe__Main::instance(), 'tribe-date-live-refresh', 'admin-date-preview.js', array( 'jquery' ), 'admin_enqueue_scripts' );
57
  }
58
 
59
  public function setup_date_previews( $html, $field ) {
common/src/Tribe/Admin/Notice/Marketing.php CHANGED
@@ -4,9 +4,6 @@
4
  *
5
  * @since 4.7.23
6
  */
7
-
8
- use Tribe__Date_Utils as Dates;
9
-
10
  class Tribe__Admin__Notice__Marketing {
11
 
12
  /**
@@ -39,147 +36,179 @@ class Tribe__Admin__Notice__Marketing {
39
  * @since 4.7.23
40
  */
41
  public function hook() {
42
- $this->black_friday_hook_notice();
 
43
  }
44
 
45
  /**
46
- * Register the Black Friday notice.
47
  *
48
- * @since 4.12.14
49
  */
50
- public function black_friday_hook_notice() {
51
 
52
  tribe_notice(
53
- 'black-friday',
54
- [ $this, 'black_friday_display_notice' ],
55
- [
56
- 'type' => 'tribe-banner',
57
- 'dismiss' => 1,
58
- 'priority' => -1,
59
- 'wrap' => false,
60
- ],
61
- [ $this, 'black_friday_should_display' ]
62
  );
63
  }
64
 
65
  /**
66
- * Unix time for Monday of Thanksgiving week @ 11am UTC. (11am UTC is 6am EST).
67
  *
68
- * @since 4.12.14
69
  *
70
  * @return int
71
  */
72
- public function get_black_friday_start_time() {
73
- $date = Dates::build_date_object( 'fourth Thursday of November ' . date( 'Y' ), 'UTC' );
74
- $date = $date->modify( '-3 days' );
75
- $date = $date->setTime( 11, 0 );
76
-
77
- $start_time = $date->format( 'U' );
78
-
79
  /**
80
  * Allow filtering of the Black Friday sale start date, mainly for testing purposes.
81
  *
82
- * @since 4.12.14
83
  *
84
- * @param int $bf_start_date Unix time for the Monday of Thanksgiving week @ 6am UTC.
85
  */
86
- return apply_filters( 'tribe_black_friday_start_time', $start_time );
87
  }
88
 
89
  /**
90
- * Unix time for Dec 1 @ 5am UTC. (5am UTC is 12am EST).
91
  *
92
- * @since 4.12.14
93
  *
94
  * @return int
95
  */
96
- public function get_black_friday_end_time() {
97
- $date = Dates::build_date_object( 'December 1st', 'UTC' );
98
- $date = $date->setTime( 5, 0 );
99
-
100
- $end_time = $date->format( 'U' );
101
-
102
  /**
103
  * Allow filtering of the Black Friday sale end date, mainly for testing purposes.
104
  *
105
- * @since 4.12.14
106
  *
107
- * @param int $bf_end_date Unix time for Dec 1 @ 6am UTC.
108
  */
109
- return apply_filters( 'tribe_black_friday_end_time', $end_time );
110
  }
111
  /**
112
- * Whether the Black Friday notice should display.
113
  *
114
- * Unix times for Monday of Thanksgiving week @ 6am UTC and Dec 1 2020 @ 6am UTC.
115
  * 6am UTC is midnight for TheEventsCalendar.com, which uses the America/Los_Angeles time zone.
116
  *
117
- * @since 4.12.14
118
  *
119
  * @return boolean
120
  */
121
- public function black_friday_should_display() {
122
- // If upsells have been manually hidden, respect that.
123
- if ( defined( 'TRIBE_HIDE_UPSELL' ) && TRIBE_HIDE_UPSELL ) {
124
- return false;
125
- }
 
 
 
 
 
 
 
 
 
 
126
 
127
- $now = Dates::build_date_object( 'now', 'UTC' )->format( 'U' );
128
- $bf_sale_start = $this->get_black_friday_start_time();
129
- $bf_sale_end = $this->get_black_friday_end_time();
130
 
131
- $current_screen = get_current_screen();
 
132
 
133
- $screens = [
134
- 'tribe_events_page_tribe-app-shop', // App shop.
135
- 'events_page_tribe-app-shop', // App shop.
136
- 'tribe_events_page_tribe-common', // Settings & Welcome.
137
- 'events_page_tribe-common', // Settings & Welcome.
138
- 'toplevel_page_tribe-common', // Settings & Welcome.
139
- ];
140
 
141
- // If not a valid screen, don't display.
142
- if ( empty( $current_screen->id ) || ! in_array( $current_screen->id, $screens, true ) ) {
143
- return false;
 
 
 
144
  }
145
 
146
- return $bf_sale_start <= $now && $now < $bf_sale_end;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  }
148
 
149
  /**
150
- * HTML for the Black Friday notice.
151
  *
152
- * @since 4.12.14
153
  *
154
  * @return string
155
  */
156
- public function black_friday_display_notice() {
157
- Tribe__Assets::instance()->enqueue( [ 'tribe-common-admin' ] );
158
-
159
- $current_screen = get_current_screen();
160
-
161
- $icon_url = Tribe__Main::instance()->plugin_url . 'src/resources/images/icons/sale-burst.svg';
162
- $cta_url = 'https://evnt.is/bf' . date( 'Y' );
163
-
164
- // If we are on the settings page or a welcome page, change the Black Friday URL.
165
- if (
166
- ! empty( $current_screen->id )
167
- && (
168
- 'tribe_events_page_tribe-common' === $current_screen->id
169
- || 'events_page_tribe-common' === $current_screen->id
170
- || 'toplevel_page_tribe-common' === $current_screen->id
171
- )
172
- ) {
173
- if ( isset( $_GET['welcome-message-the-events-calendar'] ) || isset( $_GET['welcome-message-event-tickets' ] ) ) {
174
- $cta_url .= 'welcome';
175
- } else {
176
- $cta_url .= 'settings';
177
- }
178
  }
179
 
180
  ob_start();
181
 
182
- include Tribe__Main::instance()->plugin_path . 'src/admin-views/notices/tribe-bf-general.php';
183
 
184
  return ob_get_clean();
185
  }
4
  *
5
  * @since 4.7.23
6
  */
 
 
 
7
  class Tribe__Admin__Notice__Marketing {
8
 
9
  /**
36
  * @since 4.7.23
37
  */
38
  public function hook() {
39
+ $this->bf_2018_hook_notice();
40
+ $this->gutenberg_release_notice();
41
  }
42
 
43
  /**
44
+ * Register the Black Friday 2018 notice.
45
  *
46
+ * @since 4.7.23
47
  */
48
+ public function bf_2018_hook_notice() {
49
 
50
  tribe_notice(
51
+ 'black-friday-2018',
52
+ array( $this, 'bf_2018_display_notice' ),
53
+ array(
54
+ 'type' => 'warning',
55
+ 'dismiss' => 1,
56
+ 'wrap' => false,
57
+ ),
58
+ array( $this, 'bf_2018_should_display' )
 
59
  );
60
  }
61
 
62
  /**
63
+ * Unix time for Nov 20 2018 @ 6am UTC. (6am UTC is midnight for TheEventsCalendar.com, which uses the America/Los_Angeles time zone).
64
  *
65
+ * @since 4.7.23
66
  *
67
  * @return int
68
  */
69
+ public function get_bf_2018_start_time() {
 
 
 
 
 
 
70
  /**
71
  * Allow filtering of the Black Friday sale start date, mainly for testing purposes.
72
  *
73
+ * @since 4.7.23
74
  *
75
+ * @param int $bf_start_date Unix time for Nov 20 2018 @ 6am UTC.
76
  */
77
+ return apply_filters( 'tribe_bf_2018_start_time', 1542693600 );
78
  }
79
 
80
  /**
81
+ * Unix time for Nov 26 2018 @ 6am UTC. (6am UTC is midnight for TheEventsCalendar.com, which uses the America/Los_Angeles time zone).
82
  *
83
+ * @since 4.7.23
84
  *
85
  * @return int
86
  */
87
+ public function get_bf_2018_end_time() {
 
 
 
 
 
88
  /**
89
  * Allow filtering of the Black Friday sale end date, mainly for testing purposes.
90
  *
91
+ * @since 4.7.23
92
  *
93
+ * @param int $bf_end_date Unix time for Nov 20 2018 @ 6am UTC.
94
  */
95
+ return apply_filters( 'tribe_bf_2018_end_time', 1543212000 );
96
  }
97
  /**
98
+ * Whether the Black Friday 2018 notice should display.
99
  *
100
+ * Unix times for Nov 20 2018 @ 6am UTC and Nov 26 2018 @ 6am UTC.
101
  * 6am UTC is midnight for TheEventsCalendar.com, which uses the America/Los_Angeles time zone.
102
  *
103
+ * @since 4.7.23
104
  *
105
  * @return boolean
106
  */
107
+ public function bf_2018_should_display() {
108
+ $bf_sale_start = $this->get_bf_2018_start_time();
109
+ $bf_sale_end = $this->get_bf_2018_end_time();
110
+
111
+ return $bf_sale_start <= time() && time() < $bf_sale_end;
112
+ }
113
+
114
+ /**
115
+ * HTML for the Black Friday 2018 notice.
116
+ *
117
+ * @since 4.7.23
118
+ *
119
+ * @return string
120
+ */
121
+ public function bf_2018_display_notice() {
122
 
123
+ Tribe__Assets::instance()->enqueue( array( 'tribe-common-admin' ) );
 
 
124
 
125
+ $mascot_url = Tribe__Main::instance()->plugin_url . 'src/resources/images/mascot.png';
126
+ $end_time = $this->get_bf_2018_end_time();
127
 
128
+ ob_start();
 
 
 
 
 
 
129
 
130
+ if ( $this->tec_is_active && ! $this->et_is_active ) {
131
+ include Tribe__Main::instance()->plugin_path . 'src/admin-views/notices/tribe-bf-2018-tec.php';
132
+ } elseif ( $this->et_is_active && ! $this->tec_is_active ) {
133
+ include Tribe__Main::instance()->plugin_path . 'src/admin-views/notices/tribe-bf-2018-et.php';
134
+ } else {
135
+ include Tribe__Main::instance()->plugin_path . 'src/admin-views/notices/tribe-bf-2018-general.php';
136
  }
137
 
138
+ return ob_get_clean();
139
+ }
140
+
141
+ /**
142
+ * Register the Gutenberg Release notice (November 2018).
143
+ *
144
+ * @since 4.7.23
145
+ */
146
+ public function gutenberg_release_notice() {
147
+
148
+ tribe_notice(
149
+ 'gutenberg-release-2018',
150
+ array( $this, 'gutenberg_release_display_notice' ),
151
+ array(
152
+ 'type' => 'warning',
153
+ 'dismiss' => 1,
154
+ 'wrap' => false,
155
+ ),
156
+ array( $this, 'gutenberg_release_should_display' )
157
+ );
158
+ }
159
+
160
+ /**
161
+ * Gets the end time for the Gutenberg release notice.
162
+ *
163
+ * @since 4.7.23
164
+ *
165
+ * @return int
166
+ */
167
+ public function get_gutenberg_release_end_time() {
168
+
169
+ /**
170
+ * Allows filtering of the default Gutenberg Release Notice's end time, mainly for testing purposes.
171
+ *
172
+ * @since 4.7.23
173
+ *
174
+ * @param int $gutenberg_release_end_time Defaults to Nov 17 2018 @ midnight, California time.
175
+ */
176
+ return apply_filters( 'tribe_gutenberg_release_notice_end_time', 1542434400 );
177
+ }
178
+
179
+ /**
180
+ * Whether the Gutenberg Release notice should display.
181
+ *
182
+ * @since 4.7.23
183
+ *
184
+ * @return boolean
185
+ */
186
+ public function gutenberg_release_should_display() {
187
+ return time() < $this->get_gutenberg_release_end_time();
188
  }
189
 
190
  /**
191
+ * HTML for the Gutenberg Release notice (November 2018).
192
  *
193
+ * @since 4.7.23
194
  *
195
  * @return string
196
  */
197
+ public function gutenberg_release_display_notice() {
198
+
199
+ Tribe__Assets::instance()->enqueue( array( 'tribe-common-admin' ) );
200
+
201
+ $end_time = $this->get_gutenberg_release_end_time();
202
+
203
+ if ( $this->et_is_active && ! $this->tec_is_active ) {
204
+ $icon_url = Tribe__Main::instance()->plugin_url . 'src/resources/images/gutenberg-admin-notice-tickets.png';
205
+ } else {
206
+ $icon_url = Tribe__Main::instance()->plugin_url . 'src/resources/images/gutenberg-admin-notice-TEC.png';
 
 
 
 
 
 
 
 
 
 
 
 
207
  }
208
 
209
  ob_start();
210
 
211
+ include Tribe__Main::instance()->plugin_path . 'src/admin-views/notices/tribe-gutenberg-release.php';
212
 
213
  return ob_get_clean();
214
  }
common/src/Tribe/Admin/Notice/Php_Version.php CHANGED
@@ -9,13 +9,13 @@ class Tribe__Admin__Notice__Php_Version {
9
  // display the PHP version notice
10
  tribe_notice(
11
  'php-deprecated',
12
- [ $this, 'display_notice' ],
13
- [
14
  'type' => 'warning',
15
  'dismiss' => 1,
16
  'wrap' => 'p',
17
- ],
18
- [ $this, 'should_display' ]
19
  );
20
 
21
  }
9
  // display the PHP version notice
10
  tribe_notice(
11
  'php-deprecated',
12
+ array( $this, 'display_notice' ),
13
+ array(
14
  'type' => 'warning',
15
  'dismiss' => 1,
16
  'wrap' => 'p',
17
+ ),
18
+ array( $this, 'should_display' )
19
  );
20
 
21
  }
common/src/Tribe/Admin/Notice/Plugin_Download.php CHANGED
@@ -7,7 +7,7 @@ class Tribe__Admin__Notice__Plugin_Download {
7
 
8
  private $plugin_path;
9
 
10
- private $plugins_required = [];
11
 
12
  /**
13
  * @param string $plugin_path Path to the plugin file we're showing a notice for
@@ -17,7 +17,7 @@ class Tribe__Admin__Notice__Plugin_Download {
17
 
18
  tribe_notice(
19
  plugin_basename( $plugin_path ),
20
- [ $this, 'show_inactive_plugins_alert' ]
21
  );
22
  }
23
 
@@ -60,7 +60,7 @@ class Tribe__Admin__Notice__Plugin_Download {
60
  }
61
 
62
  $plugin_data = get_plugin_data( $this->plugin_path );
63
- $req_plugins = [];
64
 
65
  if ( empty( $this->plugins_required ) ) {
66
  return;
@@ -111,17 +111,17 @@ class Tribe__Admin__Notice__Plugin_Download {
111
  $plugin_name[] = $plugin_data['Name'];
112
  }
113
 
114
- $allowed_html = [
115
- 'strong' => [],
116
- 'a' => [ 'href' => [] ],
117
- ];
118
 
119
  $plugin_names_clean_text = wp_kses( $this->implode_with_grammar( $plugin_name ), $allowed_html );
120
  $req_plugin_names_clean_text = wp_kses( $this->implode_with_grammar( $req_plugins ), $allowed_html );
121
 
122
  $notice_html_content = '<p>' . esc_html__( 'To begin using %2$s, please install and activate %3$s.', 'tribe-common' ) . '</p>';
123
 
124
- $read_more_link = '<a href="http://evnt.is/1aev" target="_blank">' . esc_html__( 'Read more', 'tribe-common' ) . '.</a>';
125
  $pue_notice_text = esc_html__( 'There’s a new version of %1$s available, but your license is expired. You’ll need to renew your license to get access to the latest version. If you plan to continue using your current version of the plugin(s), be sure to use a compatible version of The Events Calendar. %2$s', 'tribe-common' );
126
  $pue_notice_html = '<p>' . sprintf( $pue_notice_text, $plugin_names_clean_text, $read_more_link ) . '</p>';
127
 
7
 
8
  private $plugin_path;
9
 
10
+ private $plugins_required = array();
11
 
12
  /**
13
  * @param string $plugin_path Path to the plugin file we're showing a notice for
17
 
18
  tribe_notice(
19
  plugin_basename( $plugin_path ),
20
+ array( $this, 'show_inactive_plugins_alert' )
21
  );
22
  }
23
 
60
  }
61
 
62
  $plugin_data = get_plugin_data( $this->plugin_path );
63
+ $req_plugins = array();
64
 
65
  if ( empty( $this->plugins_required ) ) {
66
  return;
111
  $plugin_name[] = $plugin_data['Name'];
112
  }
113
 
114
+ $allowed_html = array(
115
+ 'strong' => array(),
116
+ 'a' => array( 'href' => array() ),
117
+ );
118
 
119
  $plugin_names_clean_text = wp_kses( $this->implode_with_grammar( $plugin_name ), $allowed_html );
120
  $req_plugin_names_clean_text = wp_kses( $this->implode_with_grammar( $req_plugins ), $allowed_html );
121
 
122
  $notice_html_content = '<p>' . esc_html__( 'To begin using %2$s, please install and activate %3$s.', 'tribe-common' ) . '</p>';
123
 
124
+ $read_more_link = '<a href="http://m.tri.be/1aev" target="_blank">' . esc_html__( 'Read more', 'tribe-common' ) . '.</a>';
125
  $pue_notice_text = esc_html__( 'There’s a new version of %1$s available, but your license is expired. You’ll need to renew your license to get access to the latest version. If you plan to continue using your current version of the plugin(s), be sure to use a compatible version of The Events Calendar. %2$s', 'tribe-common' );
126
  $pue_notice_html = '<p>' . sprintf( $pue_notice_text, $plugin_names_clean_text, $read_more_link ) . '</p>';
127
 
common/src/Tribe/Admin/Notice/Plugin_Upgrade_Notice.php CHANGED
@@ -46,7 +46,7 @@ class Tribe__Admin__Notice__Plugin_Upgrade_Notice {
46
  $this->current_version = $current_version;
47
  $this->plugin_path = $plugin_path;
48
 
49
- add_action( "in_plugin_update_message-$plugin_path", [ $this, 'maybe_run' ] );
50
  }
51
 
52
  /**
46
  $this->current_version = $current_version;
47
  $this->plugin_path = $plugin_path;
48
 
49
+ add_action( "in_plugin_update_message-$plugin_path", array( $this, 'maybe_run' ) );
50
  }
51
 
52
  /**
common/src/Tribe/Admin/Notice/WP_Version.php DELETED
@@ -1,87 +0,0 @@
1
- <?php
2
- namespace Tribe\Admin\Notice;
3
-
4
- use \Tribe__Date_Utils as Dates;
5
- use Tribe__Main as Common;
6
-
7
-
8
- /**
9
- * Various WordPress version notices.
10
- *
11
- * @since 4.12.17
12
- */
13
- class WP_Version {
14
- /**
15
- * Register the various WordPress version notices.
16
- *
17
- * @since 4.12.17
18
- */
19
- public function hook() {
20
- tribe_notice(
21
- 'wp_version_57',
22
- [ $this, 'wp_version_57_display_notice' ],
23
- [
24
- 'type' => 'warning',
25
- 'dismiss' => 1,
26
- 'priority' => -1,
27
- 'wrap' => 'p',
28
- ],
29
- [ $this, 'wp_version_57_should_display' ]
30
- );
31
- }
32
-
33
- /**
34
- * Whether the WordPress 5.7 notice should display.
35
- *
36
- * @since 4.12.17
37
- *
38
- * @return boolean
39
- */
40
- public function wp_version_57_should_display() {
41
- global $wp_version;
42
-
43
- $screens = [
44
- 'tribe_events_page_tribe-app-shop', // App shop.
45
- 'events_page_tribe-app-shop', // App shop.
46
- 'tribe_events_page_tribe-common', // Settings & Welcome.
47
- 'events_page_tribe-common', // Settings & Welcome.
48
- 'toplevel_page_tribe-common', // Settings & Welcome.
49
- ];
50
-
51
- // If not a valid screen, don't display.
52
- if ( empty( $current_screen->id ) || ! in_array( $current_screen->id, $screens, true ) ) {
53
- return false;
54
- }
55
-
56
- $wp_version_min_version_required = '5.8';
57
- $common_version_required = '4.12.18-dev';
58
-
59
- return
60
- version_compare( Common::VERSION, $common_version_required, '<' )
61
- && version_compare( $wp_version, $wp_version_min_version_required, '<' );
62
- }
63
-
64
- /**
65
- * HTML for the WordPress 5.7 notice.
66
- *
67
- * @since 4.12.17
68
- *
69
- * @see https://evnt.is/wp5-7
70
- *
71
- * @return string
72
- */
73
- public function wp_version_57_display_notice() {
74
- global $wp_version;
75
- $is_wp_57 = version_compare( $wp_version, '5.7-beta', '>=' );
76
- $html = '';
77
-
78
- if ( $is_wp_57 ) {
79
- $html .= esc_html__( 'You are using WordPress 5.7 which included a major jQuery update that may cause compatibility issues with past versions of The Events Calendar, Event Tickets and other plugins.', 'tribe-common' );
80
- } else {
81
- $html .= esc_html__( 'WordPress 5.7 includes a major jQuery update that may cause compatibility issues with past versions of The Events Calendar, Event Tickets and other plugins.', 'tribe-common' );
82
- }
83
- $html .= ' <a target="_blank" href="https://evnt.is/wp5-7">' . esc_html__( 'Read more.', 'tribe-common' ) . '</a>';
84
-
85
- return $html;
86
- }
87
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Admin/Notices.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
-
3
- use Tribe__Date_Utils as Dates;
4
 
5
  /**
6
  * @since 4.3
@@ -50,7 +50,7 @@ class Tribe__Admin__Notices {
50
  }
51
 
52
  /**
53
- * User Meta Key that stores which notices have been dismissed.
54
  *
55
  * @since 4.3
56
  *
@@ -58,15 +58,6 @@ class Tribe__Admin__Notices {
58
  */
59
  public static $meta_key = 'tribe-dismiss-notice';
60
 
61
- /**
62
- * User Meta Key prefix that stores when notices have been dismissed.
63
- *
64
- * @since 4.13.0
65
- *
66
- * @var string
67
- */
68
- public static $meta_key_time_prefix = 'tribe-dismiss-notice-time-';
69
-
70
  /**
71
  * Stores all the Notices and it's configurations
72
  *
@@ -74,7 +65,7 @@ class Tribe__Admin__Notices {
74
  *
75
  * @var array
76
  */
77
- protected $notices = [];
78
 
79
  /**
80
  * Register the Methods in the correct places
@@ -89,7 +80,7 @@ class Tribe__Admin__Notices {
89
  }
90
 
91
  // Before we bail on the
92
- add_action( 'wp_ajax_tribe_notice_dismiss', [ $this, 'maybe_dismiss' ] );
93
 
94
  // Doing AJAX? bail.
95
  if ( tribe( 'context' )->doing_ajax() ) {
@@ -97,14 +88,14 @@ class Tribe__Admin__Notices {
97
  }
98
 
99
  // Hook the actual rendering of notices
100
- add_action( 'current_screen', [ $this, 'hook' ], 20 );
101
 
102
  // Add our notice dismissal script
103
  tribe_asset(
104
  Tribe__Main::instance(),
105
  'tribe-notice-dismiss',
106
  'notice-dismiss.js',
107
- [ 'jquery' ],
108
  'admin_enqueue_scripts'
109
  );
110
  }
@@ -163,8 +154,8 @@ class Tribe__Admin__Notices {
163
  *
164
  * @since 4.3
165
  *
166
- * @param string $name Name of the method used to create the slug of the notice.
167
- * @param array $arguments Which arguments were used, normally empty.
168
  *
169
  * @return string
170
  */
@@ -183,13 +174,13 @@ class Tribe__Admin__Notices {
183
  || (
184
  is_callable( $notice->active_callback )
185
  && true == call_user_func( $notice->active_callback )
186
- )
187
  ) {
188
  $content = $notice->content;
189
- $wrap = isset( $notice->wrap ) ? $notice->wrap : false;
190
 
191
  if ( is_callable( $content ) ) {
192
- $content = call_user_func_array( $content, [ $notice ] );
193
  }
194
 
195
  // Return the rendered HTML
@@ -204,10 +195,10 @@ class Tribe__Admin__Notices {
204
  *
205
  * @since 4.3
206
  *
207
- * @param string $slug The name of the notice.
208
- * @param string $content The content of the notice.
209
- * @param boolean $return Echo or return the content.
210
- * @param string|bool $wrap An optional HTML tag to wrap the content.
211
  *
212
  * @return bool|string
213
  */
@@ -225,10 +216,10 @@ class Tribe__Admin__Notices {
225
  return false;
226
  }
227
 
228
- $notice = $this->get( $slug );
229
  $this->notices[ $slug ]->is_rendered = true;
230
 
231
- $classes = [ 'tribe-dismiss-notice', 'notice' ];
232
  $classes[] = sanitize_html_class( 'notice-' . $notice->type );
233
  $classes[] = sanitize_html_class( 'tribe-notice-' . $notice->slug );
234
 
@@ -259,9 +250,9 @@ class Tribe__Admin__Notices {
259
  *
260
  * @since 4.3
261
  *
262
- * @param string $slug The name of the notice.
263
- * @param string $content The content of the notice.
264
- * @param boolean $return Echo or return the content.
265
  *
266
  * @return boolean|string
267
  */
@@ -274,7 +265,7 @@ class Tribe__Admin__Notices {
274
  *
275
  * @since 4.7.10
276
  *
277
- * @param string $slug Which notice to check.
278
  *
279
  * @return boolean
280
  */
@@ -293,8 +284,8 @@ class Tribe__Admin__Notices {
293
  *
294
  * @since 4.7.10
295
  *
296
- * @param string $slug Which notice to check.
297
- * @param string $html Which html string we are check.
298
  *
299
  * @return boolean
300
  */
@@ -309,16 +300,16 @@ class Tribe__Admin__Notices {
309
  }
310
 
311
  /**
312
- * Checks if a given user has dismissed a given notice.
313
  *
314
- * @since 4.13.0
315
  *
316
- * @param string $slug The name of the notice.
317
- * @param int|null $user_id The user ID.
318
  *
319
  * @return boolean
320
  */
321
- public function has_user_dismissed( $slug, $user_id = null ) {
322
 
323
  if ( is_null( $user_id ) ) {
324
  $user_id = get_current_user_id();
@@ -334,106 +325,16 @@ class Tribe__Admin__Notices {
334
  return false;
335
  }
336
 
337
- $notice = $this->get( $slug );
338
- if (
339
- is_object( $notice )
340
- && $notice->recurring
341
- && $this->should_recurring_notice_show( $slug, $user_id )
342
- ) {
343
- return false;
344
- }
345
-
346
  return true;
347
  }
348
 
349
- /**
350
- * Checks if a given user has dismissed a given notice.
351
- *
352
- * @since 4.3
353
- * @deprecated 4.13.0 Deprecated in favor of correcting the typo.
354
- *
355
- * @param string $slug The Name of the Notice
356
- * @param int|null $user_id The user ID
357
- *
358
- * @return boolean
359
- */
360
- public function has_user_dimissed( $slug, $user_id = null ) {
361
- return $this->has_user_dismissed( $slug, $user_id );
362
- }
363
-
364
- /**
365
- * Gets the last Dismissal for a given notice slug and user.
366
- *
367
- * @since 4.13.0
368
- *
369
- * @param string $slug Slug of the notice to look for.
370
- * @param int|null $user_id Which user? If null will default to current user.
371
- *
372
- * @return false|\Tribe\Utils\Date_I18n
373
- */
374
- public function get_last_dismissal( $slug, $user_id = null ) {
375
- if ( is_null( $user_id ) ) {
376
- $user_id = get_current_user_id();
377
- }
378
-
379
- $dismissed_time = get_user_meta( $user_id, static::$meta_key_time_prefix . $slug, true );
380
-
381
- if ( ! is_numeric( $dismissed_time ) ) {
382
- return false;
383
- }
384
-
385
- return Dates::build_date_object( $dismissed_time );
386
- }
387
-
388
- /**
389
- * Determines if a given notice needs to be re-displayed in case of recurring notice.
390
- *
391
- * @since 4.13.0
392
- *
393
- * @param string $slug Slug of the notice to look for.
394
- * @param int|null $user_id Which user? If null will default to current user.
395
- *
396
- * @return false|\Tribe\Utils\Date_I18n
397
- */
398
- public function should_recurring_notice_show( $slug, $user_id = null ) {
399
- $notice = $this->get( $slug );
400
- if ( ! is_object( $notice ) ) {
401
- return false;
402
- }
403
-
404
- if ( ! $notice->recurring || ! $notice->recurring_interval ) {
405
- return false;
406
- }
407
-
408
- if ( is_null( $user_id ) ) {
409
- $user_id = get_current_user_id();
410
- }
411
-
412
- $interval = Dates::interval( $notice->recurring_interval );
413
- $last_dismissal = $this->get_last_dismissal( $slug, $user_id );
414
- if ( ! $last_dismissal ) {
415
- return false;
416
- }
417
-
418
- $next_dismissal = $last_dismissal->add( $interval );
419
- $now = Dates::build_date_object( 'now' );
420
-
421
- if ( $now >= $next_dismissal ) {
422
- delete_user_meta( $user_id, self::$meta_key, $slug );
423
-
424
- return true;
425
- }
426
-
427
- return false;
428
- }
429
-
430
  /**
431
  * A Method to actually add the Meta value telling that this notice has been dismissed
432
  *
433
  * @since 4.3
434
  *
435
- * @param string $slug The Name of the Notice
436
- * @param int|null $user_id The user ID
437
  *
438
  * @return boolean
439
  */
@@ -442,21 +343,19 @@ class Tribe__Admin__Notices {
442
  $user_id = get_current_user_id();
443
  }
444
 
445
- // If this user has dismissed we don't care either
446
- if ( $this->has_user_dismissed( $slug, $user_id ) ) {
447
  return true;
448
  }
449
 
450
- update_user_meta( $user_id, static::$meta_key_time_prefix . $slug, time() );
451
-
452
  return add_user_meta( $user_id, self::$meta_key, $slug, false );
453
  }
454
 
455
  /**
456
- * Removes the User meta holding if a notice was dismissed
457
  *
458
- * @param string $slug The Name of the Notice
459
- * @param int|null $user_id The user ID
460
  *
461
  * @return boolean
462
  */
@@ -465,8 +364,8 @@ class Tribe__Admin__Notices {
465
  $user_id = get_current_user_id();
466
  }
467
 
468
- // If this user has dismissed we don't care either
469
- if ( ! $this->has_user_dismissed( $slug, $user_id ) ) {
470
  return false;
471
  }
472
 
@@ -483,16 +382,16 @@ class Tribe__Admin__Notices {
483
  * @return int
484
  */
485
  public function undismiss_for_all( $slug ) {
486
- $user_query = new WP_User_Query( [
487
  'meta_key' => self::$meta_key,
488
  'meta_value' => $slug,
489
- ] );
490
 
491
  $affected = 0;
492
 
493
  foreach ( $user_query->get_results() as $user ) {
494
  if ( $this->undismiss( $slug, $user->ID ) ) {
495
- $affected ++;
496
  }
497
  }
498
 
@@ -504,34 +403,32 @@ class Tribe__Admin__Notices {
504
  *
505
  * @since 4.3
506
  *
507
- * @param string $slug Slug to save the notice
508
- * @param callable|string $callback A callable Method/Function to actually display the notice
509
- * @param array $arguments Arguments to Setup a notice
510
- * @param callable|null $active_callback An optional callback that should return bool values
511
  * to indicate whether the notice should display or not.
512
  *
513
  * @return stdClass
514
  */
515
- public function register( $slug, $callback, $arguments = [], $active_callback = null ) {
516
  // Prevent weird stuff here
517
  $slug = sanitize_title_with_dashes( $slug );
518
 
519
- $defaults = [
520
- 'callback' => null,
521
- 'content' => null,
522
- 'action' => 'admin_notices',
523
- 'priority' => 10,
524
- 'expire' => false,
525
- 'dismiss' => false,
526
- 'recurring' => false,
527
- 'recurring_interval' => null,
528
- 'type' => 'error',
529
- 'is_rendered' => false,
530
- 'wrap' => false,
531
- ];
532
-
533
- $defaults['callback'] = [ $this, 'render_' . $slug ];
534
- $defaults['content'] = $callback;
535
 
536
  if ( is_callable( $active_callback ) ) {
537
  $defaults['active_callback'] = $active_callback;
@@ -544,10 +441,9 @@ class Tribe__Admin__Notices {
544
  $notice->slug = $slug;
545
 
546
  // Clean these
547
- $notice->priority = absint( $notice->priority );
548
- $notice->expire = (bool) $notice->expire;
549
- $notice->dismiss = (bool) $notice->dismiss;
550
- $notice->recurring = (bool) $notice->recurring;
551
 
552
  // Set the Notice on the array of notices
553
  $this->notices[ $slug ] = $notice;
@@ -564,16 +460,16 @@ class Tribe__Admin__Notices {
564
  *
565
  * @since 4.7.7
566
  *
567
- * @param string $slug Slug to save the notice
568
- * @param string $html The notice output HTML code
569
- * @param array $arguments Arguments to Setup a notice
570
- * @param int $expire After how much time (in seconds) the notice will stop showing.
571
  *
572
  * @return stdClass Which notice was registered
573
  */
574
- public function register_transient( $slug, $html, $arguments = [], $expire = null ) {
575
  $notices = $this->get_transients();
576
- $notices[ $slug ] = [ $html, $arguments, time() + $expire ];
577
  $this->set_transients( $notices );
578
  }
579
 
@@ -605,7 +501,6 @@ class Tribe__Admin__Notices {
605
  }
606
 
607
  unset( $this->notices[ $slug ] );
608
-
609
  return true;
610
  }
611
 
@@ -662,7 +557,7 @@ class Tribe__Admin__Notices {
662
 
663
  $transient = self::$transient_notices_name;
664
  $notices = get_transient( $transient );
665
- $notices = is_array( $notices ) ? $notices : [];
666
 
667
  if ( $this->did_prune_transients ) {
668
  $this->did_prune_transients = true;
@@ -709,7 +604,7 @@ class Tribe__Admin__Notices {
709
  $transient_notices = (array) $this->get_transients();
710
 
711
  return isset( $transient_notices[ $slug ] )
712
- && ! $this->has_user_dismissed( $slug )
713
  && ! $this->transient_notice_expired( $slug );
714
  }
715
 
@@ -757,7 +652,7 @@ class Tribe__Admin__Notices {
757
  }
758
 
759
  $notice = $this->notices[ $slug ];
760
- if ( $notice->dismiss && $this->has_user_dismissed( $notice->slug ) ) {
761
  return false;
762
  }
763
 
1
  <?php
2
+ // Don't load directly
3
+ defined( 'WPINC' ) or die;
4
 
5
  /**
6
  * @since 4.3
50
  }
51
 
52
  /**
53
+ * User Meta Key that stores which notices have been dimissed
54
  *
55
  * @since 4.3
56
  *
58
  */
59
  public static $meta_key = 'tribe-dismiss-notice';
60
 
 
 
 
 
 
 
 
 
 
61
  /**
62
  * Stores all the Notices and it's configurations
63
  *
65
  *
66
  * @var array
67
  */
68
+ protected $notices = array();
69
 
70
  /**
71
  * Register the Methods in the correct places
80
  }
81
 
82
  // Before we bail on the
83
+ add_action( 'wp_ajax_tribe_notice_dismiss', array( $this, 'maybe_dismiss' ) );
84
 
85
  // Doing AJAX? bail.
86
  if ( tribe( 'context' )->doing_ajax() ) {
88
  }
89
 
90
  // Hook the actual rendering of notices
91
+ add_action( 'current_screen', array( $this, 'hook' ), 20 );
92
 
93
  // Add our notice dismissal script
94
  tribe_asset(
95
  Tribe__Main::instance(),
96
  'tribe-notice-dismiss',
97
  'notice-dismiss.js',
98
+ array( 'jquery' ),
99
  'admin_enqueue_scripts'
100
  );
101
  }
154
  *
155
  * @since 4.3
156
  *
157
+ * @param string $name Name of the Method used to create the Slug of the Notice
158
+ * @param array $arguments Which arguments were used, normally empty
159
  *
160
  * @return string
161
  */
174
  || (
175
  is_callable( $notice->active_callback )
176
  && true == call_user_func( $notice->active_callback )
177
+ )
178
  ) {
179
  $content = $notice->content;
180
+ $wrap = isset( $notice->wrap ) ? $notice->wrap : false;
181
 
182
  if ( is_callable( $content ) ) {
183
+ $content = call_user_func_array( $content, array( $notice ) );
184
  }
185
 
186
  // Return the rendered HTML
195
  *
196
  * @since 4.3
197
  *
198
+ * @param string $slug The Name of the Notice
199
+ * @param string $content The content of the notice
200
+ * @param boolean $return Echo or return the content
201
+ * @param string|bool $wrap An optional HTML tag to wrap the content.
202
  *
203
  * @return bool|string
204
  */
216
  return false;
217
  }
218
 
219
+ $notice = $this->get( $slug );
220
  $this->notices[ $slug ]->is_rendered = true;
221
 
222
+ $classes = array( 'tribe-dismiss-notice', 'notice' );
223
  $classes[] = sanitize_html_class( 'notice-' . $notice->type );
224
  $classes[] = sanitize_html_class( 'tribe-notice-' . $notice->slug );
225
 
250
  *
251
  * @since 4.3
252
  *
253
+ * @param string $slug The Name of the Notice
254
+ * @param string $content The content of the notice
255
+ * @param boolean $return Echo or return the content
256
  *
257
  * @return boolean|string
258
  */
265
  *
266
  * @since 4.7.10
267
  *
268
+ * @param string $slug Which notice to check
269
  *
270
  * @return boolean
271
  */
284
  *
285
  * @since 4.7.10
286
  *
287
+ * @param string $slug Which notice to check
288
+ * @param string $html Which html string we are check
289
  *
290
  * @return boolean
291
  */
300
  }
301
 
302
  /**
303
+ * Checks if a given user has dimissed a given notice.
304
  *
305
+ * @since 4.3
306
  *
307
+ * @param string $slug The Name of the Notice
308
+ * @param int|null $user_id The user ID
309
  *
310
  * @return boolean
311
  */
312
+ public function has_user_dimissed( $slug, $user_id = null ) {
313
 
314
  if ( is_null( $user_id ) ) {
315
  $user_id = get_current_user_id();
325
  return false;
326
  }
327
 
 
 
 
 
 
 
 
 
 
328
  return true;
329
  }
330
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
331
  /**
332
  * A Method to actually add the Meta value telling that this notice has been dismissed
333
  *
334
  * @since 4.3
335
  *
336
+ * @param string $slug The Name of the Notice
337
+ * @param int|null $user_id The user ID
338
  *
339
  * @return boolean
340
  */
343
  $user_id = get_current_user_id();
344
  }
345
 
346
+ // If this user has dimissed we don't care either
347
+ if ( $this->has_user_dimissed( $slug, $user_id ) ) {
348
  return true;
349
  }
350
 
 
 
351
  return add_user_meta( $user_id, self::$meta_key, $slug, false );
352
  }
353
 
354
  /**
355
+ * Removes the User meta holding if a notice was dimissed
356
  *
357
+ * @param string $slug The Name of the Notice
358
+ * @param int|null $user_id The user ID
359
  *
360
  * @return boolean
361
  */
364
  $user_id = get_current_user_id();
365
  }
366
 
367
+ // If this user has dimissed we don't care either
368
+ if ( ! $this->has_user_dimissed( $slug, $user_id ) ) {
369
  return false;
370
  }
371
 
382
  * @return int
383
  */
384
  public function undismiss_for_all( $slug ) {
385
+ $user_query = new WP_User_Query( array(
386
  'meta_key' => self::$meta_key,
387
  'meta_value' => $slug,
388
+ ) );
389
 
390
  $affected = 0;
391
 
392
  foreach ( $user_query->get_results() as $user ) {
393
  if ( $this->undismiss( $slug, $user->ID ) ) {
394
+ $affected++;
395
  }
396
  }
397
 
403
  *
404
  * @since 4.3
405
  *
406
+ * @param string $slug Slug to save the notice
407
+ * @param callable|string $callback A callable Method/Fuction to actually display the notice
408
+ * @param array $arguments Arguments to Setup a notice
409
+ * @param callable|null $active_callback An optional callback that should return bool values
410
  * to indicate whether the notice should display or not.
411
  *
412
  * @return stdClass
413
  */
414
+ public function register( $slug, $callback, $arguments = array(), $active_callback = null ) {
415
  // Prevent weird stuff here
416
  $slug = sanitize_title_with_dashes( $slug );
417
 
418
+ $defaults = array(
419
+ 'callback' => null,
420
+ 'content' => null,
421
+ 'action' => 'admin_notices',
422
+ 'priority' => 10,
423
+ 'expire' => false,
424
+ 'dismiss' => false,
425
+ 'type' => 'error',
426
+ 'is_rendered' => false,
427
+ 'wrap' => false,
428
+ );
429
+
430
+ $defaults['callback'] = array( $this, 'render_' . $slug );
431
+ $defaults['content'] = $callback;
 
 
432
 
433
  if ( is_callable( $active_callback ) ) {
434
  $defaults['active_callback'] = $active_callback;
441
  $notice->slug = $slug;
442
 
443
  // Clean these
444
+ $notice->priority = absint( $notice->priority );
445
+ $notice->expire = (bool) $notice->expire;
446
+ $notice->dismiss = (bool) $notice->dismiss;
 
447
 
448
  // Set the Notice on the array of notices
449
  $this->notices[ $slug ] = $notice;
460
  *
461
  * @since 4.7.7
462
  *
463
+ * @param string $slug Slug to save the notice
464
+ * @param string $html The notice output HTML code
465
+ * @param array $arguments Arguments to Setup a notice
466
+ * @param int $expire After how much time (in seconds) the notice will stop showing.
467
  *
468
  * @return stdClass Which notice was registered
469
  */
470
+ public function register_transient( $slug, $html, $arguments = array(), $expire = null ) {
471
  $notices = $this->get_transients();
472
+ $notices[ $slug ] = array( $html, $arguments, time() + $expire );
473
  $this->set_transients( $notices );
474
  }
475
 
501
  }
502
 
503
  unset( $this->notices[ $slug ] );
 
504
  return true;
505
  }
506
 
557
 
558
  $transient = self::$transient_notices_name;
559
  $notices = get_transient( $transient );
560
+ $notices = is_array( $notices ) ? $notices : array();
561
 
562
  if ( $this->did_prune_transients ) {
563
  $this->did_prune_transients = true;
604
  $transient_notices = (array) $this->get_transients();
605
 
606
  return isset( $transient_notices[ $slug ] )
607
+ && ! $this->has_user_dimissed( $slug )
608
  && ! $this->transient_notice_expired( $slug );
609
  }
610
 
652
  }
653
 
654
  $notice = $this->notices[ $slug ];
655
+ if ( $notice->dismiss && $this->has_user_dimissed( $notice->slug ) ) {
656
  return false;
657
  }
658
 
common/src/Tribe/Ajax/Dropdown.php CHANGED
@@ -15,8 +15,8 @@ class Tribe__Ajax__Dropdown {
15
  * @return void
16
  */
17
  public function hook() {
18
- add_action( 'wp_ajax_tribe_dropdown', [ $this, 'route' ] );
19
- add_action( 'wp_ajax_nopriv_tribe_dropdown', [ $this, 'route' ] );
20
  }
21
 
22
  /**
@@ -24,32 +24,26 @@ class Tribe__Ajax__Dropdown {
24
  *
25
  * @since 4.6
26
  *
27
- * @param string|array<string|mixed> $search Search string from Select2
28
- * @param int $page When we deal with pagination
29
- * @param array<string|mixed> $args Which arguments we got from the Template
30
- * @param string $source What source it is
31
  *
32
- * @return array<string|mixed>
33
  */
34
  public function search_terms( $search, $page, $args, $source ) {
35
- $data = [];
36
 
37
  if ( empty( $args['taxonomy'] ) ) {
38
  $this->error( esc_attr__( 'Cannot look for Terms without a taxonomy', 'tribe-common' ) );
39
  }
40
 
41
  // We always want all the fields so we overwrite it
42
- $args['fields'] = isset( $args['fields'] ) ? $args['fields'] : 'all';
43
  $args['hide_empty'] = isset( $args['hide_empty'] ) ? $args['hide_empty'] : false;
44
 
45
  if ( ! empty( $search ) ) {
46
- if ( ! is_array( $search ) ) {
47
- // For older pieces that still use Select2 format.
48
- $args['search'] = $search;
49
- } else {
50
- // Newer SelectWoo uses a new search format.
51
- $args['search'] = $search['term'];
52
- }
53
  }
54
 
55
  // On versions older than 4.5 taxonomy goes as an Param
@@ -59,7 +53,7 @@ class Tribe__Ajax__Dropdown {
59
  $terms = get_terms( $args );
60
  }
61
 
62
- $results = [];
63
 
64
  // Respect the parent/child_of argument if set
65
  $parent = ! empty( $args['child_of'] ) ? (int) $args['child_of'] : 0;
@@ -73,7 +67,7 @@ class Tribe__Ajax__Dropdown {
73
  // Prep for Select2
74
  $term->id = $term->term_id;
75
  $term->text = $term->name;
76
- $term->breadcrumbs = [];
77
 
78
  if ( 0 !== (int) $term->parent ) {
79
  $ancestors = get_ancestors( $term->id, $term->taxonomy );
@@ -88,98 +82,22 @@ class Tribe__Ajax__Dropdown {
88
  }
89
  }
90
 
91
- $data['results'] = $results;
92
  $data['taxonomies'] = get_taxonomies();
93
 
94
  return $data;
95
  }
96
 
97
  /**
98
- * Search for Posts using Select2
99
- *
100
- * @since 4.12.17
101
- *
102
- * @param string|array<string,mixed> $search Search string from Select2.
103
- * @param int $page Page we want when we're dealing with pagination.
104
- * @param array<string,mixed> $args Arguments to pass to the query.
105
- * @param string|int $selected Selected item ID.
106
- *
107
- * @return array<string|mixed> An Array of results.
108
- */
109
- public function search_posts( $search, $page = 1, $args = [], $selected = null ) {
110
- if ( ! empty( $search ) ) {
111
- if ( is_array( $search ) ) {
112
- // Newer SelectWoo uses a new search format.
113
- $args['s'] = $search['term']; // post?
114
- } else {
115
- // For older pieces that still use Select2 format.
116
- $args['s'] = $search;
117
- }
118
- }
119
-
120
- $args['paged'] = $page;
121
- $args['update_post_meta_cache'] = false;
122
- $args['update_post_term_cache'] = false;
123
-
124
- $results = new WP_Query( $args );
125
- $has_pagination = $results->post_count < $results->found_posts;
126
-
127
- return $this->format_posts_for_dropdown( $results->posts, $selected, $has_pagination );
128
- }
129
-
130
- /**
131
- * Formats a given array of posts to be displayed into the Dropdown.js module with SelectWoo.
132
- *
133
- * @since 4.12.17
134
- *
135
- * @param array<WP_Post> $posts
136
- * @param null|int $selected
137
- * @param boolean $pagination
138
- *
139
- * @return array
140
- */
141
- public function format_posts_for_dropdown( array $posts, $selected = null, $pagination = false ) {
142
- $data = [
143
- 'posts' => [],
144
- 'pagination' => $pagination,
145
- ];
146
-
147
- // Skip when we don't have posts
148
- if ( empty( $posts ) ) {
149
- return $data;
150
- }
151
-
152
- foreach ( $posts as $post ) {
153
- if ( ! $post instanceof \WP_Post ) {
154
- $post = get_post( $post );
155
- }
156
-
157
- // Skip non WP Post Objects.
158
- if ( ! $post instanceof \WP_Post ) {
159
- continue;
160
- }
161
-
162
- // Prep for Select2.
163
- $data['posts'][] = [
164
- 'id' => $post->ID,
165
- 'text' => ! empty( $post->post_title_formatted ) ? $post->post_title_formatted : $post->post_title,
166
- 'selected' => ! empty( $selected ) && (int) $post->ID === (int) $selected,
167
- ];
168
- }
169
-
170
- return $data;
171
- }
172
-
173
- /**
174
- * Sorts all the Terms for Select2 hierarchically.
175
  *
176
  * @since 4.6
177
  *
178
- * @param array<int|object> &$terms Array of Terms from `get_terms`.
179
- * @param array<string|mixed> &$into Variable where we will store the.
180
- * @param integer $parent Used for the recursion.
181
  *
182
- * @return array<string|mixed>
183
  */
184
  public function sort_terms_hierarchically( &$terms, &$into, $parent = 0 ) {
185
  foreach ( $terms as $i => $term ) {
@@ -194,7 +112,7 @@ class Tribe__Ajax__Dropdown {
194
  }
195
 
196
  foreach ( $into as $term ) {
197
- $term->children = [];
198
  $this->sort_terms_hierarchically( $terms, $term->children, $term->term_id );
199
  }
200
  }
@@ -204,16 +122,13 @@ class Tribe__Ajax__Dropdown {
204
  *
205
  * @since 4.6
206
  *
207
- * @param object|array<string|mixed> $results The Select2 results
208
  *
209
- * @return array<string|mixed>
210
  */
211
  public function convert_children_to_array( $results ) {
212
  if ( isset( $results->children ) ) {
213
  $results->children = $this->convert_children_to_array( $results->children );
214
- if ( empty( $results->children ) ) {
215
- unset( $results->children );
216
- }
217
  } else {
218
  foreach ( $results as $key => $item ) {
219
  $item = $this->convert_children_to_array( $item );
@@ -221,7 +136,7 @@ class Tribe__Ajax__Dropdown {
221
  }
222
 
223
  if ( empty( $results ) ) {
224
- return [];
225
  }
226
 
227
  return array_values( (array) $results );
@@ -232,17 +147,16 @@ class Tribe__Ajax__Dropdown {
232
  *
233
  * @since 4.6
234
  *
235
- * @param array<string|mixed> $params Params to overwrite the defaults
236
- *
237
  * @return object
238
  */
239
  public function parse_params( $params ) {
240
- $defaults = [
241
  'search' => null,
242
  'page' => 0,
243
- 'args' => [],
244
  'source' => null,
245
- ];
246
 
247
  $arguments = wp_parse_args( $params, $defaults );
248
 
@@ -260,21 +174,21 @@ class Tribe__Ajax__Dropdown {
260
  */
261
  public function route() {
262
  // Push all POST params into a Default set of data
263
- $args = $this->parse_params( empty( $_POST ) ? [] : $_POST );
264
 
265
  if ( empty( $args->source ) ) {
266
  $this->error( esc_attr__( 'Missing data source for this dropdown', 'tribe-common' ) );
267
  }
268
 
269
- // Define a Filter to allow external calls to our Select2 Dropdowns.
270
  $filter = sanitize_key( 'tribe_dropdown_' . $args->source );
271
  if ( has_filter( $filter ) ) {
272
- $data = apply_filters( $filter, [], $args->search, $args->page, $args->args, $args->source );
273
  } else {
274
- $data = call_user_func_array( [ $this, $args->source ], (array) $args );
275
  }
276
 
277
- // If we've got a empty dataset we return an error.
278
  if ( empty( $data ) ) {
279
  $this->error( esc_attr__( 'Empty data set for this dropdown', 'tribe-common' ) );
280
  } else {
@@ -285,36 +199,33 @@ class Tribe__Ajax__Dropdown {
285
  /**
286
  * Prints a success message and ensures that we don't hit bugs on Select2
287
  *
288
- * @since 4.6
289
- *
290
- * @param array $data
291
  *
 
292
  * @return void
293
  */
294
  private function success( $data ) {
295
  // We need a Results item for Select2 Work
296
  if ( ! isset( $data['results'] ) ) {
297
- $data['results'] = [];
298
  }
299
 
300
  wp_send_json_success( $data );
301
  }
302
 
303
  /**
304
- * Prints an error message and ensures that we don't hit bugs on Select2
305
  *
306
  * @since 4.6
307
  *
308
- * @param string $message
309
- *
310
  * @return void
311
  */
312
  private function error( $message ) {
313
- $data = [
314
  'message' => $message,
315
- 'results' => [],
316
- ];
317
-
318
  wp_send_json_error( $data );
319
  }
320
 
@@ -323,14 +234,13 @@ class Tribe__Ajax__Dropdown {
323
  *
324
  * @since 4.6
325
  *
326
- * @param string $name
327
- * @param mixed $arguments
328
  *
329
  * @return void
330
  */
331
  public function __call( $name, $arguments ) {
332
  $message = __( 'The "%s" source is invalid and cannot be reached on "%s" instance.', 'tribe-common' );
333
-
334
  return $this->error( sprintf( $message, $name, __CLASS__ ) );
335
  }
336
  }
15
  * @return void
16
  */
17
  public function hook() {
18
+ add_action( 'wp_ajax_tribe_dropdown', array( $this, 'route' ) );
19
+ add_action( 'wp_ajax_nopriv_tribe_dropdown', array( $this, 'route' ) );
20
  }
21
 
22
  /**
24
  *
25
  * @since 4.6
26
  *
27
+ * @param string $search Search string from Select2
28
+ * @param int $page When we deal with pagination
29
+ * @param array $args Which arguments we got from the Template
30
+ * @param string $source What source it is
31
  *
32
+ * @return array
33
  */
34
  public function search_terms( $search, $page, $args, $source ) {
35
+ $data = array();
36
 
37
  if ( empty( $args['taxonomy'] ) ) {
38
  $this->error( esc_attr__( 'Cannot look for Terms without a taxonomy', 'tribe-common' ) );
39
  }
40
 
41
  // We always want all the fields so we overwrite it
42
+ $args['fields'] = isset( $args['fields'] ) ? $args['fields'] : 'all';
43
  $args['hide_empty'] = isset( $args['hide_empty'] ) ? $args['hide_empty'] : false;
44
 
45
  if ( ! empty( $search ) ) {
46
+ $args['search'] = $search;
 
 
 
 
 
 
47
  }
48
 
49
  // On versions older than 4.5 taxonomy goes as an Param
53
  $terms = get_terms( $args );
54
  }
55
 
56
+ $results = array();
57
 
58
  // Respect the parent/child_of argument if set
59
  $parent = ! empty( $args['child_of'] ) ? (int) $args['child_of'] : 0;
67
  // Prep for Select2
68
  $term->id = $term->term_id;
69
  $term->text = $term->name;
70
+ $term->breadcrumbs = array();
71
 
72
  if ( 0 !== (int) $term->parent ) {
73
  $ancestors = get_ancestors( $term->id, $term->taxonomy );
82
  }
83
  }
84
 
85
+ $data['results'] = $results;
86
  $data['taxonomies'] = get_taxonomies();
87
 
88
  return $data;
89
  }
90
 
91
  /**
92
+ * Sorts Hierarchically all the Terms for Select2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  *
94
  * @since 4.6
95
  *
96
+ * @param array &$terms Array of Terms from `get_terms`
97
+ * @param array &$into Variable where we will store the
98
+ * @param integer $parent Used for the recursion
99
  *
100
+ * @return array
101
  */
102
  public function sort_terms_hierarchically( &$terms, &$into, $parent = 0 ) {
103
  foreach ( $terms as $i => $term ) {
112
  }
113
 
114
  foreach ( $into as $term ) {
115
+ $term->children = array();
116
  $this->sort_terms_hierarchically( $terms, $term->children, $term->term_id );
117
  }
118
  }
122
  *
123
  * @since 4.6
124
  *
125
+ * @param array $results The Select2
126
  *
127
+ * @return array
128
  */
129
  public function convert_children_to_array( $results ) {
130
  if ( isset( $results->children ) ) {
131
  $results->children = $this->convert_children_to_array( $results->children );
 
 
 
132
  } else {
133
  foreach ( $results as $key => $item ) {
134
  $item = $this->convert_children_to_array( $item );
136
  }
137
 
138
  if ( empty( $results ) ) {
139
+ return array();
140
  }
141
 
142
  return array_values( (array) $results );
147
  *
148
  * @since 4.6
149
  *
150
+ * @param array $params Params to overwrite the defaults
 
151
  * @return object
152
  */
153
  public function parse_params( $params ) {
154
+ $defaults = array(
155
  'search' => null,
156
  'page' => 0,
157
+ 'args' => array(),
158
  'source' => null,
159
+ );
160
 
161
  $arguments = wp_parse_args( $params, $defaults );
162
 
174
  */
175
  public function route() {
176
  // Push all POST params into a Default set of data
177
+ $args = $this->parse_params( empty( $_POST ) ? array() : $_POST );
178
 
179
  if ( empty( $args->source ) ) {
180
  $this->error( esc_attr__( 'Missing data source for this dropdown', 'tribe-common' ) );
181
  }
182
 
183
+ // Define a Filter to allow external calls to our Select2 Dropboxes
184
  $filter = sanitize_key( 'tribe_dropdown_' . $args->source );
185
  if ( has_filter( $filter ) ) {
186
+ $data = apply_filters( $filter, array(), $args->search, $args->page, $args->args, $args->source );
187
  } else {
188
+ $data = call_user_func_array( array( $this, $args->source ), (array) $args );
189
  }
190
 
191
+ // if we got a empty dataset we return an error
192
  if ( empty( $data ) ) {
193
  $this->error( esc_attr__( 'Empty data set for this dropdown', 'tribe-common' ) );
194
  } else {
199
  /**
200
  * Prints a success message and ensures that we don't hit bugs on Select2
201
  *
202
+ * @since 4.6
 
 
203
  *
204
+ * @param array $data
205
  * @return void
206
  */
207
  private function success( $data ) {
208
  // We need a Results item for Select2 Work
209
  if ( ! isset( $data['results'] ) ) {
210
+ $data['results'] = array();
211
  }
212
 
213
  wp_send_json_success( $data );
214
  }
215
 
216
  /**
217
+ * Prints a error message and ensures that we don't hit bugs on Select2
218
  *
219
  * @since 4.6
220
  *
221
+ * @param array $data
 
222
  * @return void
223
  */
224
  private function error( $message ) {
225
+ $data = array(
226
  'message' => $message,
227
+ 'results' => array(),
228
+ );
 
229
  wp_send_json_error( $data );
230
  }
231
 
234
  *
235
  * @since 4.6
236
  *
237
+ * @param string $name
238
+ * @param mixed $arguments
239
  *
240
  * @return void
241
  */
242
  public function __call( $name, $arguments ) {
243
  $message = __( 'The "%s" source is invalid and cannot be reached on "%s" instance.', 'tribe-common' );
 
244
  return $this->error( sprintf( $message, $name, __CLASS__ ) );
245
  }
246
  }
common/src/Tribe/Ajax/Operations.php CHANGED
@@ -8,7 +8,7 @@
8
  */
9
  class Tribe__Ajax__Operations {
10
 
11
- public function verify_or_exit( $nonce, $action, $exit_data = [] ) {
12
  if ( ! wp_verify_nonce( $nonce, $action ) ) {
13
  exit( $exit_data );
14
  }
@@ -16,7 +16,7 @@ class Tribe__Ajax__Operations {
16
  return true;
17
  }
18
 
19
- public function exit_data( $data = [] ) {
20
  exit( $data );
21
  }
22
  }
8
  */
9
  class Tribe__Ajax__Operations {
10
 
11
+ public function verify_or_exit( $nonce, $action, $exit_data = array() ) {
12
  if ( ! wp_verify_nonce( $nonce, $action ) ) {
13
  exit( $exit_data );
14
  }
16
  return true;
17
  }
18
 
19
+ public function exit_data( $data = array() ) {
20
  exit( $data );
21
  }
22
  }
common/src/Tribe/App_Shop.php CHANGED
@@ -33,8 +33,8 @@ if ( ! class_exists( 'Tribe__App_Shop' ) ) {
33
  * Class constructor
34
  */
35
  public function __construct() {
36
- add_action( 'admin_menu', [ $this, 'add_menu_page' ], 100 );
37
- add_action( 'wp_before_admin_bar_render', [ $this, 'add_toolbar_item' ], 20 );
38
 
39
  $this->register_assets();
40
  }
@@ -53,17 +53,7 @@ if ( ! class_exists( 'Tribe__App_Shop' ) ) {
53
 
54
  $where = Tribe__Settings::instance()->get_parent_slug();
55
 
56
- $this->admin_page = add_submenu_page(
57
- $where,
58
- $page_title,
59
- $menu_title,
60
- $capability,
61
- self::MENU_SLUG,
62
- [
63
- $this,
64
- 'do_menu_page',
65
- ]
66
- );
67
  }
68
 
69
  /**
@@ -77,12 +67,12 @@ if ( ! class_exists( 'Tribe__App_Shop' ) ) {
77
  if ( current_user_can( $capability ) ) {
78
  global $wp_admin_bar;
79
 
80
- $wp_admin_bar->add_menu( [
81
  'id' => 'tribe-events-app-shop',
82
  'title' => esc_html__( 'Event Add-Ons', 'tribe-common' ),
83
- 'href' => Tribe__Settings::instance()->get_url( [ 'page' => self::MENU_SLUG ] ),
84
  'parent' => 'tribe-events-settings-group',
85
- ] );
86
  }
87
  }
88
 
@@ -92,14 +82,14 @@ if ( ! class_exists( 'Tribe__App_Shop' ) ) {
92
  protected function register_assets() {
93
  tribe_assets(
94
  Tribe__Main::instance(),
95
- [
96
- [ 'tribe-app-shop-css', 'app-shop.css' ],
97
- [ 'tribe-app-shop-js', 'app-shop.js', [ 'jquery' ] ],
98
- ],
99
  'admin_enqueue_scripts',
100
- [
101
- 'conditionals' => [ $this, 'is_current_page' ],
102
- ]
103
  );
104
  }
105
 
@@ -133,172 +123,32 @@ if ( ! class_exists( 'Tribe__App_Shop' ) ) {
133
  public function do_menu_page() {
134
  $main = Tribe__Main::instance();
135
  $products = $this->get_all_products();
136
- $bundles = $this->get_bundles();
137
- $extensions = $this->get_extensions();
138
  include_once Tribe__Main::instance()->plugin_path . 'src/admin-views/app-shop.php';
139
  }
140
 
141
  /**
142
- * Gets all products from the API
143
  *
144
  * @return array|WP_Error
145
  */
146
  private function get_all_products() {
147
  $all_products = tribe( 'plugins.api' )->get_products();
148
 
149
- $products = [
150
- 'the-events-calendar' => (object) $all_products['the-events-calendar'],
151
- 'events-calendar-pro' => (object) $all_products['events-calendar-pro'],
152
- 'events-virtual' => (object) $all_products['events-virtual'],
153
- 'event-aggregator' => (object) $all_products['event-aggregator'],
154
- 'event-tickets' => (object) $all_products['event-tickets'],
155
- 'event-tickets-plus' => (object) $all_products['event-tickets-plus'],
156
- 'promoter' => (object) $all_products['promoter'],
157
- 'tribe-filterbar' => (object) $all_products['tribe-filterbar'],
158
- 'events-community' => (object) $all_products['events-community'],
159
- 'events-community-tickets' => (object) $all_products['events-community-tickets'],
160
- 'tribe-eventbrite' => (object) $all_products['tribe-eventbrite'],
161
- 'image-widget-plus' => (object) $all_products['image-widget-plus'],
162
- ];
163
 
164
  return $products;
165
  }
166
 
167
- /**
168
- * Gets product bundles
169
- *
170
- * @return array|WP_Error
171
- */
172
- private function get_bundles() {
173
- $bundles = [
174
- (object) [
175
- 'title' => __( 'Events Marketing Bundle', 'tribe-common' ),
176
- 'logo' => 'images/logo/bundle-event-marketing.svg',
177
- 'link' => 'https://evnt.is/1aj3',
178
- 'discount' => __( 'Save over 20%', 'tribe-common' ),
179
- 'description' => __( 'Ticket sales, attendee management, and email marketing for your events', 'tribe-common' ),
180
- 'includes' => [
181
- 'events-calendar-pro',
182
- 'event-tickets-plus',
183
- 'promoter',
184
- ],
185
- ],
186
- (object) [
187
- 'title' => __( 'Event Importer Bundle', 'tribe-common' ),
188
- 'logo' => 'images/logo/bundle-event-importer.svg',
189
- 'link' => 'https://evnt.is/1aj2',
190
- 'discount' => __( 'Save over 25%', 'tribe-common' ),
191
- 'description' => __( 'Fill your calendar with events from across the web, including Google Calendar, Meetup, and more.', 'tribe-common' ),
192
- 'includes' => [
193
- 'events-calendar-pro',
194
- 'tribe-filterbar',
195
- 'event-aggregator'
196
- ],
197
- ],
198
- (object) [
199
- 'title' => __( 'Virtual Events Marketing Bundle', 'tribe-common' ),
200
- 'logo' => 'images/logo/bundle-virtual-events.svg',
201
- 'link' => 'http://evnt.is/ve-bundle',
202
- 'discount' => __( 'Save over 20%', 'tribe-common' ),
203
- 'description' => __( 'Streamline your online events and increase revenue.', 'tribe-common' ),
204
- 'includes' => [
205
- 'events-calendar-pro',
206
- 'event-tickets-plus',
207
- 'events-virtual',
208
- 'promoter',
209
- ],
210
- 'features' => [
211
- __( 'Sell tickets and earn revenue for online events', 'tribe-common' ),
212
- __( 'Zoom integration', 'tribe-common' ),
213
- __( 'Automated emails optimized for virtual events', 'tribe-common' ),
214
- __( 'Add recurring events', 'tribe-common' ),
215
- ],
216
- ],
217
- (object) [
218
- 'title' => __( 'Community Manager Bundle', 'tribe-common' ),
219
- 'logo' => 'images/logo/bundle-community-manager.svg',
220
- 'link' => 'https://evnt.is/1aj4',
221
- 'discount' => __( 'Save over 20%', 'tribe-common' ), /* code review: fix this */
222
- 'description' => __( 'Handle event submissions with ticket sales and everything you need to build a robust community.', 'tribe-common' ),
223
- 'includes' => [
224
- 'event-tickets-plus',
225
- 'events-community',
226
- 'events-community-tickets',
227
- 'tribe-filterbar',
228
- ],
229
- ],
230
- (object) [
231
- 'title' => __( 'Ultimate Bundle', 'tribe-common' ),
232
- 'logo' => 'images/logo/bundle-ultimate.svg',
233
- 'link' => 'https://evnt.is/1aj5',
234
- 'discount' => __( 'Save over 20%', 'tribe-common' ), /* code review: fix this */
235
- 'description' => __( 'All of our premium events management plugins at a deep discount.', 'tribe-common' ),
236
- 'includes' => [
237
- 'events-calendar-pro',
238
- 'event-tickets-plus',
239
- //'events-virtual', // not yet added to the bundle
240
- 'events-community',
241
- 'events-community-tickets',
242
- 'tribe-filterbar',
243
- 'event-aggregator',
244
- 'tribe-eventbrite',
245
- //'promoter', // not yet added to the bundle
246
- ],
247
- ],
248
-
249
- ];
250
-
251
- return $bundles;
252
- }
253
-
254
- /**
255
- * Gets product extensions
256
- *
257
- * @return array|WP_Error
258
- */
259
- private function get_extensions() {
260
- $extensions = [
261
- (object) [
262
- 'title' => __( 'Website URL CTA', 'tribe-common' ),
263
- 'link' => 'https://evnt.is/1aj6',
264
- 'image' => 'images/shop/extension-web-url-cta.jpg',
265
- 'description' => __( 'Create a strong call-to-action for attendees to "Join Webinar" instead of only sharing a website address.', 'tribe-common' ),
266
- ],
267
- (object) [
268
- 'title' => __( 'Link Directly to Webinar', 'tribe-common' ),
269
- 'link' => 'https://evnt.is/1aj7',
270
- 'image' => 'images/shop/extension-link-to-webinar.jpg',
271
- 'description' => __( 'When users click on the event title, they’ll be taken right to the source of your event, offering a direct route to join.', 'tribe-common' ),
272
- ],
273
- (object) [
274
- 'title' => __( 'Events Happening Now', 'tribe-common' ),
275
- 'link' => 'https://evnt.is/1aj8',
276
- 'image' => 'images/shop/extension-events-happening-now.jpg',
277
- 'description' => __( 'Use this shortcode to display events that are currently in progress, like webinars and livestreams.', 'tribe-common' ),
278
- ],
279
- (object) [
280
- 'title' => __( 'Custom Venue Links', 'tribe-common' ),
281
- 'link' => 'https://evnt.is/1aj9',
282
- 'image' => 'images/shop/extension-custom-venue-links.jpg',
283
- 'description' => __( 'Turn the venue name for your event into a clickable URL — a great way to link directly to a venue’s website or a virtual meeting.', 'tribe-common' ),
284
- ],
285
- (object) [
286
- 'title' => __( 'Adjust Label', 'tribe-common' ),
287
- 'link' => 'https://evnt.is/1aja',
288
- 'image' => 'images/shop/extension-change-label.jpg',
289
- 'description' => __( 'Change "Events" to "Webinars," or "Venues" to "Livestream," or "Organizers" to "Hosts." Tailor your calendar for virtual events and meetings.', 'tribe-common' ),
290
- ],
291
- (object) [
292
- 'title' => __( 'Reach Attendees', 'tribe-common' ),
293
- 'link' => 'https://evnt.is/1ajc',
294
- 'image' => 'images/shop/extension-advanced-options.jpg',
295
- 'description' => __( 'From registration to attendance history, view every step of the event lifecycle with this HubSpot integration.', 'tribe-common' ),
296
- ],
297
- ];
298
-
299
- return $extensions;
300
- }
301
-
302
  /**
303
  * Static Singleton Factory Method
304
  *
33
  * Class constructor
34
  */
35
  public function __construct() {
36
+ add_action( 'admin_menu', array( $this, 'add_menu_page' ), 100 );
37
+ add_action( 'wp_before_admin_bar_render', array( $this, 'add_toolbar_item' ), 20 );
38
 
39
  $this->register_assets();
40
  }
53
 
54
  $where = Tribe__Settings::instance()->get_parent_slug();
55
 
56
+ $this->admin_page = add_submenu_page( $where, $page_title, $menu_title, $capability, self::MENU_SLUG, array( $this, 'do_menu_page' ) );
 
 
 
 
 
 
 
 
 
 
57
  }
58
 
59
  /**
67
  if ( current_user_can( $capability ) ) {
68
  global $wp_admin_bar;
69
 
70
+ $wp_admin_bar->add_menu( array(
71
  'id' => 'tribe-events-app-shop',
72
  'title' => esc_html__( 'Event Add-Ons', 'tribe-common' ),
73
+ 'href' => Tribe__Settings::instance()->get_url( array( 'page' => self::MENU_SLUG ) ),
74
  'parent' => 'tribe-events-settings-group',
75
+ ) );
76
  }
77
  }
78
 
82
  protected function register_assets() {
83
  tribe_assets(
84
  Tribe__Main::instance(),
85
+ array(
86
+ array( 'tribe-app-shop-css', 'app-shop.css' ),
87
+ array( 'tribe-app-shop-js', 'app-shop.js', array( 'jquery' ) ),
88
+ ),
89
  'admin_enqueue_scripts',
90
+ array(
91
+ 'conditionals' => array( $this, 'is_current_page' ),
92
+ )
93
  );
94
  }
95
 
123
  public function do_menu_page() {
124
  $main = Tribe__Main::instance();
125
  $products = $this->get_all_products();
 
 
126
  include_once Tribe__Main::instance()->plugin_path . 'src/admin-views/app-shop.php';
127
  }
128
 
129
  /**
130
+ * Get's all products from the API
131
  *
132
  * @return array|WP_Error
133
  */
134
  private function get_all_products() {
135
  $all_products = tribe( 'plugins.api' )->get_products();
136
 
137
+ $products = array(
138
+ (object) $all_products['event-aggregator'],
139
+ (object) $all_products['events-calendar-pro'],
140
+ (object) $all_products['event-tickets-plus'],
141
+ (object) $all_products['promoter'],
142
+ (object) $all_products['tribe-filterbar'],
143
+ (object) $all_products['events-community'],
144
+ (object) $all_products['events-community-tickets'],
145
+ (object) $all_products['tribe-eventbrite'],
146
+ (object) $all_products['image-widget-plus'],
147
+ );
 
 
 
148
 
149
  return $products;
150
  }
151
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152
  /**
153
  * Static Singleton Factory Method
154
  *
common/src/Tribe/Asset/Data.php CHANGED
@@ -1,67 +1,67 @@
1
- <?php
2
- /**
3
- * Handles adding script data to the page in cases where localizing a
4
- * specific script is not suitable.
5
- *
6
- * Should generally be accessed via tribe( 'tribe.asset.script-data' )
7
- * rather than via direct instantiation.
8
- */
9
- class Tribe__Asset__Data {
10
- /**
11
- * Container for any JS data objects that should be added to the page.
12
- *
13
- * @var array
14
- */
15
- protected $objects = [];
16
-
17
- /**
18
- * Hooks up the method used to actually render the JSON data.
19
- */
20
- public function hook() {
21
- if ( is_admin() ) {
22
- add_action( 'admin_footer', [ $this, 'render_json' ] );
23
- add_action( 'customize_controls_print_footer_scripts', [ $this, 'render_json' ] );
24
- } else {
25
- add_action( 'wp_footer', [ $this, 'render_json' ] );
26
- }
27
- }
28
-
29
- /**
30
- * Adds the provided data to the list of objects that should be available
31
- * to other scripts.
32
- *
33
- * @param string $object_name Object name.
34
- * @param array $data Object data.
35
- */
36
- public function add( $object_name, $data ) {
37
- /**
38
- * Allow plugins to filter data for a specific object.
39
- *
40
- * @since 4.8.4
41
- *
42
- * @param array $data Object data.
43
- * @param string $object_name Object name.
44
- */
45
- $data = apply_filters( "tribe_asset_data_add_object_{$object_name}", $data, $object_name );
46
-
47
- $this->objects[ $object_name ] = $data;
48
- }
49
-
50
- /**
51
- * Outputs the
52
- * @internal
53
- */
54
- public function render_json() {
55
- if ( empty( $this->objects ) ) {
56
- return;
57
- }
58
-
59
- echo '<script> /* <![CDATA[ */';
60
-
61
- foreach ( $this->objects as $object_name => $data ) {
62
- echo 'var ' . esc_html( $object_name ) . ' = ' . wp_json_encode( $data ) . ';';
63
- }
64
-
65
- echo '/* ]]> */ </script>';
66
- }
67
- }
1
+ <?php
2
+ /**
3
+ * Handles adding script data to the page in cases where localizing a
4
+ * specific script is not suitable.
5
+ *
6
+ * Should generally be accessed via tribe( 'tribe.asset.script-data' )
7
+ * rather than via direct instantiation.
8
+ */
9
+ class Tribe__Asset__Data {
10
+ /**
11
+ * Container for any JS data objects that should be added to the page.
12
+ *
13
+ * @var array
14
+ */
15
+ protected $objects = array();
16
+
17
+ /**
18
+ * Hooks up the method used to actually render the JSON data.
19
+ */
20
+ public function hook() {
21
+ if ( is_admin() ) {
22
+ add_action( 'admin_footer', array( $this, 'render_json' ) );
23
+ add_action( 'customize_controls_print_footer_scripts', array( $this, 'render_json' ) );
24
+ } else {
25
+ add_action( 'wp_footer', array( $this, 'render_json' ) );
26
+ }
27
+ }
28
+
29
+ /**
30
+ * Adds the provided data to the list of objects that should be available
31
+ * to other scripts.
32
+ *
33
+ * @param string $object_name Object name.
34
+ * @param array $data Object data.
35
+ */
36
+ public function add( $object_name, $data ) {
37
+ /**
38
+ * Allow plugins to filter data for a specific object.
39
+ *
40
+ * @since 4.8.4
41
+ *
42
+ * @param array $data Object data.
43
+ * @param string $object_name Object name.
44
+ */
45
+ $data = apply_filters( "tribe_asset_data_add_object_{$object_name}", $data, $object_name );
46
+
47
+ $this->objects[ $object_name ] = $data;
48
+ }
49
+
50
+ /**
51
+ * Outputs the
52
+ * @internal
53
+ */
54
+ public function render_json() {
55
+ if ( empty( $this->objects ) ) {
56
+ return;
57
+ }
58
+
59
+ echo '<script> /* <![CDATA[ */';
60
+
61
+ foreach ( $this->objects as $object_name => $data ) {
62
+ echo 'var ' . esc_html( $object_name ) . ' = ' . wp_json_encode( $data ) . ';';
63
+ }
64
+
65
+ echo '/* ]]> */ </script>';
66
+ }
67
+ }
common/src/Tribe/Assets.php CHANGED
@@ -38,121 +38,6 @@ class Tribe__Assets {
38
  public function __construct() {
39
  // Hook the actual registering of.
40
  add_action( 'init', [ $this, 'register_in_wp' ], 1, 0 );
41
- add_filter( 'script_loader_tag', [ $this, 'filter_tag_async_defer' ], 50, 2 );
42
-
43
- // Enqueue late.
44
- add_filter( 'script_loader_tag', [ $this, 'filter_add_localization_data' ], 500, 2 );
45
- }
46
-
47
- /**
48
- * Handles adding localization data, when attached to `script_loader_tag` which allows dependencies to load in their
49
- * localization data as well.
50
- *
51
- * @since 4.13.0
52
- *
53
- * @param string $tag Tag we are filtering.
54
- * @param string $handle Which is the ID/Handle of the tag we are about to print.
55
- *
56
- * @return string Script tag with the localization variable HTML attached to it.
57
- */
58
- public function filter_add_localization_data( $tag, $handle ) {
59
- // Only filter for own own filters.
60
- if ( ! $asset = $this->get( $handle ) ) {
61
- return $tag;
62
- }
63
-
64
- // Bail when not dealing with JS assets.
65
- if ( 'js' !== $asset->type ) {
66
- return $tag;
67
- }
68
-
69
- // Only localize on JS and if we have data.
70
- if ( empty( $asset->localize ) ) {
71
- return $tag;
72
- }
73
-
74
- global $wp_scripts;
75
-
76
- // Makes sure we have an Array of Localize data.
77
- if ( is_object( $asset->localize ) ) {
78
- $localization = [ $asset->localize ];
79
- } else {
80
- $localization = (array) $asset->localize;
81
- }
82
-
83
- /**
84
- * Check to ensure we haven't already localized it before.
85
- *
86
- * @since 4.5.8
87
- */
88
- foreach ( $localization as $localize ) {
89
- if ( in_array( $localize->name, $this->localized ) ) {
90
- continue;
91
- }
92
-
93
- // If we have a Callable as the Localize data we execute it.
94
- if ( is_callable( $localize->data ) ) {
95
- $localize->data = call_user_func( $localize->data, $asset );
96
- }
97
-
98
- wp_localize_script( $asset->slug, $localize->name, $localize->data );
99
-
100
- $this->localized[] = $localize->name;
101
- }
102
-
103
- // Fetch the HTML for all the localized data.
104
- ob_start();
105
- $wp_scripts->print_extra_script( $asset->slug, true );
106
- $localization_html = ob_get_clean();
107
-
108
- // After printing it remove data;|
109
- $wp_scripts->add_data( $asset->slug, 'data', '' );
110
-
111
- return $localization_html . $tag;
112
- }
113
-
114
- /**
115
- * Filters the Script tags to attach Async and/or Defer based on the rules we set in our Asset class.
116
- *
117
- * @since 4.13.0
118
- *
119
- * @param string $tag Tag we are filtering.
120
- * @param string $handle Which is the ID/Handle of the tag we are about to print.
121
- *
122
- * @return string Script tag with the defer and/or async attached.
123
- */
124
- public function filter_tag_async_defer( $tag, $handle ) {
125
- // Only filter for own own filters.
126
- if ( ! $asset = $this->get( $handle ) ) {
127
- return $tag;
128
- }
129
-
130
- // Bail when not dealing with JS assets.
131
- if ( 'js' !== $asset->type ) {
132
- return $tag;
133
- }
134
-
135
- // When async and defer are false we bail with the tag.
136
- if ( ! $asset->defer && ! $asset->async ) {
137
- return $tag;
138
- }
139
-
140
- $tag_has_async = false !== strpos( $tag, ' async ' );
141
- $tag_has_defer = false !== strpos( $tag, ' defer ' );
142
- $replacement = '<script ';
143
-
144
- if ( $asset->async && ! $tag_has_async ) {
145
- $replacement .= 'async ';
146
- }
147
-
148
- if ( $asset->defer && ! $tag_has_defer ) {
149
- $replacement .= 'defer ';
150
- }
151
-
152
- $replacement_src = $replacement . 'src=';
153
- $replacement_type = $replacement . 'type=';
154
-
155
- return str_replace( [ '<script src=', '<script type=' ], [ $replacement_src, $replacement_type ], $tag );
156
  }
157
 
158
  /**
@@ -316,7 +201,7 @@ class Tribe__Assets {
316
  }
317
 
318
  /**
319
- * Allows developers to hook-in and prevent an asset from being loaded.
320
  *
321
  * @since 4.3
322
  *
@@ -326,7 +211,7 @@ class Tribe__Assets {
326
  $enqueue = apply_filters( 'tribe_asset_enqueue', $enqueue, $asset );
327
 
328
  /**
329
- * Allows developers to hook-in and prevent an asset from being loaded.
330
  *
331
  * @since 4.3
332
  *
@@ -340,30 +225,40 @@ class Tribe__Assets {
340
  }
341
 
342
  if ( 'js' === $asset->type ) {
343
- if ( $asset->print && ! $asset->already_printed ) {
344
- $asset->already_printed = true;
345
- wp_print_scripts( [ $asset->slug ] );
346
- }
347
- // We print first, and tell the system it was enqueued, WP is smart not to do it twice.
348
  wp_enqueue_script( $asset->slug );
349
 
350
- // If available, load the script translations.
351
- if ( isset( $asset->translations['domain'], $asset->translations['path'] ) && function_exists( 'wp_set_script_translations' ) ) {
352
- wp_set_script_translations( $asset->slug, $asset->translations['domain'], $asset->translations['path'] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
353
  }
354
  } else {
355
- if ( $asset->print && ! $asset->already_printed ) {
356
- $asset->already_printed = true;
357
- wp_print_styles( [ $asset->slug ] );
358
- }
359
- // We print first, and tell the system it was enqueued, WP is smart not to do it twice.
360
  wp_enqueue_style( $asset->slug );
361
  }
362
 
363
- if ( ! empty( $asset->after_enqueue ) && is_callable( $asset->after_enqueue ) ) {
364
- call_user_func_array( $asset->after_enqueue, [ $asset ] );
365
- }
366
-
367
  $asset->already_enqueued = true;
368
  }
369
  }
@@ -539,16 +434,8 @@ class Tribe__Assets {
539
  'groups' => [],
540
  'version' => $version,
541
  'media' => 'all',
542
-
543
- 'print' => false,
544
-
545
- 'async' => false,
546
- 'defer' => false,
547
-
548
  'in_footer' => true,
549
  'is_registered' => false,
550
-
551
- // Origin related params
552
  'origin_path' => null,
553
  'origin_url' => null,
554
  'origin_name' => null,
@@ -556,14 +443,6 @@ class Tribe__Assets {
556
  // Bigger Variables at the end.
557
  'localize' => [],
558
  'conditionals' => [],
559
-
560
- // Used to handle Translations handled in the JavaScript side of the Assets.
561
- 'translations' => [],
562
-
563
- // Execute after the asset is enqueued.
564
- 'after_enqueue' => null,
565
- 'already_enqueued' => false,
566
- 'already_printed' => false,
567
  ];
568
 
569
  // Merge Arguments.
@@ -598,6 +477,16 @@ class Tribe__Assets {
598
  return false;
599
  }
600
 
 
 
 
 
 
 
 
 
 
 
601
  /**
602
  * Filter to change version number on assets.
603
  *
@@ -618,7 +507,7 @@ class Tribe__Assets {
618
  $asset->priority = 1;
619
  }
620
 
621
- $is_vendor = strpos( $asset->file, 'vendor/' ) !== false || strpos( $asset->file, 'node_modules/' ) !== false ? true : false;
622
 
623
  // Setup the actual URL.
624
  if ( filter_var( $asset->file, FILTER_VALIDATE_URL ) ) {
@@ -642,11 +531,6 @@ class Tribe__Assets {
642
  $asset->groups = array_unique( $asset->groups );
643
  }
644
 
645
- if ( isset( $arguments['translations']['domain'], $arguments['translations']['path'] ) ) {
646
- $asset->translations['domain'] = $arguments['translations']['domain'];
647
- $asset->translations['path'] = $arguments['translations']['path'];
648
- }
649
-
650
  /**
651
  * Filter an Asset loading variables.
652
  *
@@ -789,52 +673,4 @@ class Tribe__Assets {
789
  public function exists( $slug ) {
790
  return is_object( $this->get( $slug ) ) ? true : false;
791
  }
792
-
793
- /**
794
- * Prints the `script` (JS) and `link` (CSS) HTML tags associated with one or more assets groups.
795
- *
796
- * The method will force the scripts and styles to print overriding their registration and conditional.
797
- *
798
- * @since 4.12.6
799
- *
800
- * @param string|array $group Which group(s) should be enqueued.
801
- * @param bool $echo Whether to print the group(s) tag(s) to the page or not; default to `true` to
802
- * print the HTML `script` (JS) and `link` (CSS) tags to the page.
803
- *
804
- * @return string The `script` and `link` HTML tags produced for the group(s).
805
- */
806
- public function print_group( $group, $echo = true ) {
807
- $all_assets = $this->get();
808
- $groups = (array) $group;
809
- $to_print = array_filter( $all_assets, static function ( $asset ) use ( $groups ) {
810
- return isset( $asset->groups ) && array_intersect( $asset->groups, $groups );
811
- } );
812
- $by_type = array_reduce( $to_print, static function ( array $acc, \stdClass $asset ) {
813
- $acc[ $asset->type ][] = $asset->slug;
814
-
815
- return $acc;
816
- }, [ 'css' => [], 'js' => [] ] );
817
-
818
-
819
- // Make sure each script is registered.
820
- foreach ( $to_print as $slug => $data ){
821
- if ( $data->is_registered ){
822
- continue;
823
- }
824
- 'js' === $data->type
825
- ? wp_register_script( $slug, $data->file, $data->deps, $data->version )
826
- : wp_register_style( $slug, $data->file, $data->deps, $data->version );
827
- }
828
-
829
- ob_start();
830
- wp_scripts()->do_items( $by_type['js'] );
831
- wp_styles()->do_items( $by_type['css'] );
832
- $tags = ob_get_clean();
833
-
834
- if ( $echo ) {
835
- echo $tags;
836
- }
837
-
838
- return $tags;
839
- }
840
  }
38
  public function __construct() {
39
  // Hook the actual registering of.
40
  add_action( 'init', [ $this, 'register_in_wp' ], 1, 0 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  }
42
 
43
  /**
201
  }
202
 
203
  /**
204
+ * Allows developers to hook-in and prevent an asset from been 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 been loaded
215
  *
216
  * @since 4.3
217
  *
225
  }
226
 
227
  if ( 'js' === $asset->type ) {
 
 
 
 
 
228
  wp_enqueue_script( $asset->slug );
229
 
230
+ // Only localize on JS and if we have data.
231
+ if ( ! empty( $asset->localize ) ) {
232
+ // Makes sure we have an Array of Localize data.
233
+ if ( is_object( $asset->localize ) ) {
234
+ $localization = [ $asset->localize ];
235
+ } else {
236
+ $localization = (array) $asset->localize;
237
+ }
238
+
239
+ /**
240
+ * Check to ensure we haven't already localized it before.
241
+ *
242
+ * @since 4.5.8
243
+ */
244
+ foreach ( $localization as $localize ) {
245
+ if ( in_array( $localize->name, $this->localized ) ) {
246
+ continue;
247
+ }
248
+
249
+ // If we have a Callable as the Localize data we execute it.
250
+ if ( is_callable( $localize->data ) ) {
251
+ $localize->data = call_user_func( $localize->data, $asset );
252
+ }
253
+
254
+ wp_localize_script( $asset->slug, $localize->name, $localize->data );
255
+ $this->localized[] = $localize->name;
256
+ }
257
  }
258
  } else {
 
 
 
 
 
259
  wp_enqueue_style( $asset->slug );
260
  }
261
 
 
 
 
 
262
  $asset->already_enqueued = true;
263
  }
264
  }
434
  'groups' => [],
435
  'version' => $version,
436
  'media' => 'all',
 
 
 
 
 
 
437
  'in_footer' => true,
438
  'is_registered' => false,
 
 
439
  'origin_path' => null,
440
  'origin_url' => null,
441
  'origin_name' => null,
443
  // Bigger Variables at the end.
444
  'localize' => [],
445
  'conditionals' => [],
 
 
 
 
 
 
 
 
446
  ];
447
 
448
  // Merge Arguments.
477
  return false;
478
  }
479
 
480
+ /**
481
+ * Deprecated filter to allow changing version based on the type of Asset.
482
+ *
483
+ * @todo remove on 4.6
484
+ * @deprecated 4.3
485
+ *
486
+ * @param string $version
487
+ */
488
+ $asset->version = apply_filters( "tribe_events_{$asset->type}_version", $asset->version );
489
+
490
  /**
491
  * Filter to change version number on assets.
492
  *
507
  $asset->priority = 1;
508
  }
509
 
510
+ $is_vendor = strpos( $asset->file, 'vendor/' ) !== false ? true : false;
511
 
512
  // Setup the actual URL.
513
  if ( filter_var( $asset->file, FILTER_VALIDATE_URL ) ) {
531
  $asset->groups = array_unique( $asset->groups );
532
  }
533
 
 
 
 
 
 
534
  /**
535
  * Filter an Asset loading variables.
536
  *
673
  public function exists( $slug ) {
674
  return is_object( $this->get( $slug ) ) ? true : false;
675
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
676
  }
common/src/Tribe/Assets_Pipeline.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Class used to hook into the assets being loaded
5
  *
@@ -13,8 +12,7 @@ class Tribe__Assets_Pipeline {
13
  * @since 4.7.7
14
  */
15
  public function hook() {
16
- add_filter( 'script_loader_tag', [ $this, 'prevent_underscore_conflict' ], 10, 2 );
17
- add_filter( 'script_loader_tag', [ $this, 'prevent_select2_conflict' ], 10, 2 );
18
  }
19
 
20
  /**
@@ -23,9 +21,8 @@ class Tribe__Assets_Pipeline {
23
  *
24
  * @since 4.7.7
25
  *
26
- * @param string $tag The <script> tag for the enqueued script.
27
  * @param string $handle The script's registered handle.
28
- *
29
  * @return string The <script> tag.
30
  */
31
  public function prevent_underscore_conflict( $tag, $handle ) {
@@ -36,31 +33,9 @@ class Tribe__Assets_Pipeline {
36
  if ( 'underscore' === $handle ) {
37
  $dir = Tribe__Main::instance()->plugin_url . 'src/resources/js';
38
  $tag = "<script src='{$dir}/underscore-before.js'></script>\n"
39
- . $tag
40
- . "<script src='{$dir}/underscore-after.js'></script>\n";
41
  }
42
-
43
- return $tag;
44
- }
45
-
46
- /**
47
- * After select2 is loaded to the FE we add one scripts after to prevent select2 from breaking.
48
- *
49
- * @since TBD
50
- *
51
- * @param string $tag The <script> tag for the enqueued script.
52
- * @param string $handle The script's registered handle.
53
- *
54
- * @return string The <script> tag.
55
- */
56
- public function prevent_select2_conflict( $tag, $handle ) {
57
- if ( 'tribe-select2' !== $handle ) {
58
- return $tag;
59
- }
60
-
61
- $dir = Tribe__Main::instance()->plugin_url . 'src/resources/js';
62
- $tag .= "<script src='{$dir}/select2-after.js'></script>\n";
63
-
64
  return $tag;
65
  }
66
  }
1
  <?php
 
2
  /**
3
  * Class used to hook into the assets being loaded
4
  *
12
  * @since 4.7.7
13
  */
14
  public function hook() {
15
+ add_filter( 'script_loader_tag', array( $this, 'prevent_underscore_conflict' ), 10, 2 );
 
16
  }
17
 
18
  /**
21
  *
22
  * @since 4.7.7
23
  *
24
+ * @param string $tag The <script> tag for the enqueued script.
25
  * @param string $handle The script's registered handle.
 
26
  * @return string The <script> tag.
27
  */
28
  public function prevent_underscore_conflict( $tag, $handle ) {
33
  if ( 'underscore' === $handle ) {
34
  $dir = Tribe__Main::instance()->plugin_url . 'src/resources/js';
35
  $tag = "<script src='{$dir}/underscore-before.js'></script>\n"
36
+ . $tag
37
+ . "<script src='{$dir}/underscore-after.js'></script>\n";
38
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  return $tag;
40
  }
41
  }
common/src/Tribe/Autoloader.php CHANGED
@@ -53,7 +53,7 @@
53
  * An arrays of arrays each containing absolute paths.
54
  *
55
  * Paths are stored trimming any trailing `/`.
56
- * E.g. `/var/www/tribe-pro/wp-content/plugins/the-events-calendar/src/Tribe`
57
  *
58
  * @var string[][]
59
  */
@@ -77,12 +77,12 @@
77
  protected $dir_separator = '__';
78
 
79
  /** @var string[] */
80
- protected $fallback_dirs = [];
81
 
82
  /**
83
  * @var array
84
  */
85
- protected $class_paths = [];
86
 
87
  /**
88
  * Returns the singleton instance of the class.
@@ -121,16 +121,8 @@
121
  public function register_prefix( $prefix, $root_dir, $slug = '' ) {
122
  $root_dir = $this->normalize_root_dir( $root_dir );
123
 
124
- // Determine if we need to normalize the $prefix.
125
- $is_namespaced = false !== strpos( $prefix, '\\' );
126
-
127
- if ( $is_namespaced ) {
128
- // If the prefix is a namespace, then normalize it.
129
- $prefix = trim( $prefix, '\\' ) . '\\';
130
- }
131
-
132
  if ( ! isset( $this->prefixes[ $prefix ] ) ) {
133
- $this->prefixes[ $prefix ] = [];
134
  }
135
 
136
  $this->prefixes[ $prefix ][] = $root_dir;
@@ -148,7 +140,7 @@
148
  * autoload register.
149
  */
150
  public function register_autoloader() {
151
- spl_autoload_register( [ $this, 'autoload' ] );
152
  }
153
 
154
  /**
@@ -171,20 +163,11 @@
171
 
172
  protected function get_prefixed_path( $class ) {
173
  foreach ( $this->prefixes as $prefix => $dirs ) {
174
- $is_namespaced = false !== strpos( $prefix, '\\' );
175
-
176
  if ( strpos( $class, $prefix ) !== 0 ) {
177
  continue;
178
  }
179
-
180
  $class_name = str_replace( $prefix, '', $class );
181
-
182
- if ( ! $is_namespaced ) {
183
- $class_path_frag = implode( '/', explode( $this->dir_separator, $class_name ) ) . '.php';
184
- } else {
185
- $class_path_frag = implode( '/', explode( '\\', $class_name ) ) . '.php';
186
- }
187
-
188
  foreach ( $dirs as $dir ) {
189
  $path = $dir . '/' . $class_path_frag;
190
  if ( ! file_exists( $path ) ) {
53
  * An arrays of arrays each containing absolute paths.
54
  *
55
  * Paths are stored trimming any trailing `/`.
56
+ * E.g. `/var/www/tribe-pro/wp-content/plugins/the-event-calendar/src/Tribe`
57
  *
58
  * @var string[][]
59
  */
77
  protected $dir_separator = '__';
78
 
79
  /** @var string[] */
80
+ protected $fallback_dirs = array();
81
 
82
  /**
83
  * @var array
84
  */
85
+ protected $class_paths = array();
86
 
87
  /**
88
  * Returns the singleton instance of the class.
121
  public function register_prefix( $prefix, $root_dir, $slug = '' ) {
122
  $root_dir = $this->normalize_root_dir( $root_dir );
123
 
 
 
 
 
 
 
 
 
124
  if ( ! isset( $this->prefixes[ $prefix ] ) ) {
125
+ $this->prefixes[ $prefix ] = array();
126
  }
127
 
128
  $this->prefixes[ $prefix ][] = $root_dir;
140
  * autoload register.
141
  */
142
  public function register_autoloader() {
143
+ spl_autoload_register( array( $this, 'autoload' ) );
144
  }
145
 
146
  /**
163
 
164
  protected function get_prefixed_path( $class ) {
165
  foreach ( $this->prefixes as $prefix => $dirs ) {
 
 
166
  if ( strpos( $class, $prefix ) !== 0 ) {
167
  continue;
168
  }
 
169
  $class_name = str_replace( $prefix, '', $class );
170
+ $class_path_frag = implode( '/', explode( $this->dir_separator, $class_name ) ) . '.php';
 
 
 
 
 
 
171
  foreach ( $dirs as $dir ) {
172
  $path = $dir . '/' . $class_path_frag;
173
  if ( ! file_exists( $path ) ) {
common/src/Tribe/Cache.php CHANGED
@@ -70,7 +70,7 @@ class Tribe__Cache implements ArrayAccess {
70
  $expiration = 1;
71
 
72
  // Add so we know what group to use in the future.
73
- $this->non_persistent_keys[ $id ] = $id;
74
  } else {
75
  $group = 'tribe-events';
76
  }
@@ -87,10 +87,6 @@ class Tribe__Cache implements ArrayAccess {
87
  * @return bool
88
  */
89
  public function set_transient( $id, $value, $expiration = 0, $expiration_trigger = '' ) {
90
- if ( $this->data_size_over_packet_size( $value ) ) {
91
- return false;
92
- }
93
-
94
  return set_transient( $this->get_id( $id, $expiration_trigger ), $value, $expiration );
95
  }
96
 
@@ -108,7 +104,8 @@ class Tribe__Cache implements ArrayAccess {
108
  * @return mixed
109
  */
110
  public function get( $id, $expiration_trigger = '', $default = false, $expiration = 0, $args = [] ) {
111
- $group = isset( $this->non_persistent_keys[ $id ] ) ? 'tribe-events-non-persistent' : 'tribe-events';
 
112
  $value = wp_cache_get( $this->get_id( $id, $expiration_trigger ), $group );
113
 
114
  // Value found.
@@ -149,14 +146,7 @@ class Tribe__Cache implements ArrayAccess {
149
  * @return bool
150
  */
151
  public function delete( $id, $expiration_trigger = '' ) {
152
- $group = isset( $this->non_persistent_keys[ $id ] ) ? 'tribe-events-non-persistent' : 'tribe-events';
153
-
154
- // Delete from non-persistent keys list.
155
- if ( 'tribe-events-non-persistent' === $group ) {
156
- unset( $this->non_persistent_keys[ $id ] );
157
- }
158
-
159
- return wp_cache_delete( $this->get_id( $id, $expiration_trigger ), $group );
160
  }
161
 
162
  /**
@@ -381,7 +371,9 @@ class Tribe__Cache implements ArrayAccess {
381
  * @return boolean Whether the offset exists in the cache.
382
  */
383
  public function offsetExists( $offset ) {
384
- return isset( $this->non_persistent_keys[ $offset ] );
 
 
385
  }
386
 
387
  /**
@@ -504,36 +496,4 @@ class Tribe__Cache implements ArrayAccess {
504
  }
505
  } while ( ! empty( $post_objects ) && is_array( $post_objects ) && count( $post_objects ) < count( $post_ids ) );
506
  }
507
-
508
- /**
509
- * If NOT using an external object caching system, then check if the size, in bytes, of the data
510
- * to write to the database would fit into the `max_allowed_packet` setting or not.
511
- *
512
- * @since 4.12.14
513
- *
514
- * @param string|array|object $value The value to check.
515
- *
516
- * @return bool Whether the data, in its serialized form, would fit into the current database `max_allowed_packet`
517
- * setting or not.
518
- */
519
- public function data_size_over_packet_size( $value ) {
520
- if ( wp_using_ext_object_cache() ) {
521
- // We cannot know and that is a concern of the external caching system.
522
- return false;
523
- }
524
-
525
- try {
526
- $serialized_value = maybe_serialize( $value );
527
- $size = strlen( $serialized_value );
528
- } catch ( Exception $e ) {
529
- // The underlying function would run into the same issue, bail and do not set the transient.
530
- return true;
531
- }
532
-
533
- /** @var Tribe__Feature_Detection $feature_detection */
534
- $feature_detection = tribe( 'feature-detection' );
535
-
536
- // If the size of the string is above 90% of the database `max_allowed_packet` setting, then it should not be written to the db.
537
- return $size > ( $feature_detection->get_mysql_max_packet_size() * .9 );
538
- }
539
- }
70
  $expiration = 1;
71
 
72
  // Add so we know what group to use in the future.
73
+ $this->non_persistent_keys[] = $key;
74
  } else {
75
  $group = 'tribe-events';
76
  }
87
  * @return bool
88
  */
89
  public function set_transient( $id, $value, $expiration = 0, $expiration_trigger = '' ) {
 
 
 
 
90
  return set_transient( $this->get_id( $id, $expiration_trigger ), $value, $expiration );
91
  }
92
 
104
  * @return mixed
105
  */
106
  public function get( $id, $expiration_trigger = '', $default = false, $expiration = 0, $args = [] ) {
107
+ $flipped = array_flip( $this->non_persistent_keys );
108
+ $group = isset( $flipped[ $id ] ) ? 'tribe-events-non-persistent' : 'tribe-events';
109
  $value = wp_cache_get( $this->get_id( $id, $expiration_trigger ), $group );
110
 
111
  // Value found.
146
  * @return bool
147
  */
148
  public function delete( $id, $expiration_trigger = '' ) {
149
+ return wp_cache_delete( $this->get_id( $id, $expiration_trigger ), 'tribe-events' );
 
 
 
 
 
 
 
150
  }
151
 
152
  /**
371
  * @return boolean Whether the offset exists in the cache.
372
  */
373
  public function offsetExists( $offset ) {
374
+ $flipped = array_flip( $this->non_persistent_keys );
375
+
376
+ return isset( $flipped[ $offset ] );
377
  }
378
 
379
  /**
496
  }
497
  } while ( ! empty( $post_objects ) && is_array( $post_objects ) && count( $post_objects ) < count( $post_ids ) );
498
  }
499
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Cache_Listener.php CHANGED
@@ -1,214 +1,171 @@
1
  <?php
2
-
3
- /**
4
- * Listen for events and update their timestamps
5
- */
6
- class Tribe__Cache_Listener {
7
-
8
- /**
9
- * The name of the trigger that will be fired when rewrite rules are generated.
10
- */
11
- const TRIGGER_GENERATE_REWRITE_RULES = 'generate_rewrite_rules';
12
-
13
- /**
14
- * The name of the trigger that will be fired when a post is saved.
15
- */
16
- const TRIGGER_SAVE_POST = 'save_post';
17
-
18
  /**
19
- * The name of the trigger that will be fired when an option is updated
20
  */
21
- const TRIGGER_UPDATED_OPTION = 'updated_option';
22
 
23
- /**
24
- * The singleton instance of the class.
25
- *
26
- * @var Tribe__Cache_Listener|null
27
- */
28
- private static $instance;
29
 
30
- /**
31
- * An instance of the cache object.
32
- *
33
- * @var Tribe__Cache|null
34
- */
35
- private $cache;
36
 
37
- /**
38
- * Class constructor.
39
- *
40
- * @return void
41
- */
42
- public function __construct() {
43
- $this->cache = new Tribe__Cache();
44
- }
45
 
46
- /**
47
- * Run the init functionality (like add_hooks).
48
- *
49
- * @return void
50
- */
51
- public function init() {
52
- $this->add_hooks();
53
- }
54
 
55
- /**
56
- * Add the hooks necessary.
57
- *
58
- * @return void
59
- */
60
- private function add_hooks() {
61
- add_action( 'save_post', [ $this, 'save_post' ], 0, 2 );
62
- add_action( 'updated_option', [ $this, 'update_last_updated_option' ], 10, 3 );
63
- add_action( 'updated_option', [ $this, 'update_last_save_post' ], 10, 3 );
64
- add_action( 'generate_rewrite_rules', [ $this, 'generate_rewrite_rules' ] );
65
- }
66
 
67
- /**
68
- * Run the caching functionality that is executed on save post.
69
- *
70
- * @param int $post_id The post_id.
71
- * @param WP_Post $post The current post object being saved.w
72
- */
73
- public function save_post( $post_id, $post ) {
74
- if ( in_array( $post->post_type, Tribe__Main::get_post_types() ) ) {
75
- $this->cache->set_last_occurrence( self::TRIGGER_SAVE_POST );
76
  }
77
- }
78
 
79
- /**
80
- * Run the caching functionality that is executed on saving tribe calendar options.
81
- *
82
- * @see 'updated_option'
83
- *
84
- * @param string $option_name Name of the updated option.
85
- * @param mixed $old_value The old option value.
86
- * @param mixed $value The new option value.
87
- */
88
- public function update_last_save_post( $option_name, $old_value, $value ) {
89
- $triggers = [
90
- 'tribe_events_calendar_options' => true,
91
- 'permalink_structure' => true,
92
- 'rewrite_rules' => true,
93
- 'start_of_week' => true,
94
- ];
95
-
96
- $triggers = $this->filter_action_last_occurrence_triggers( $triggers, static::TRIGGER_SAVE_POST, func_get_args() );
97
-
98
- if ( ! empty( $triggers[ $option_name ] ) ) {
99
- $this->cache->set_last_occurrence( self::TRIGGER_SAVE_POST );
100
  }
101
- }
102
 
103
- /**
104
- * Run the caching functionality that is executed on saving tribe calendar options.
105
- *
106
- * @see 'updated_option'
107
- *
108
- * @since 4.11.0
109
- *
110
- * @param string $option_name Name of the updated option.
111
- * @param mixed $old_value The old option value.
112
- * @param mixed $value The new option value.
113
- */
114
- public function update_last_updated_option( $option_name, $old_value, $value ) {
115
- $triggers = [
116
- 'active_plugins' => true,
117
- 'tribe_events_calendar_options' => true,
118
- 'permalink_structure' => true,
119
- 'rewrite_rules' => true,
120
- 'start_of_week' => true,
121
- 'sidebars_widgets' => true,
122
- 'stylesheet' => true,
123
- 'template' => true,
124
- 'WPLANG' => true,
125
- ];
126
-
127
- $triggers = $this->filter_action_last_occurrence_triggers( $triggers, static::TRIGGER_UPDATED_OPTION, func_get_args() );
128
-
129
- if ( ! empty( $triggers[ $option_name ] ) ) {
130
- $this->cache->set_last_occurrence( self::TRIGGER_UPDATED_OPTION );
131
  }
132
- }
133
 
134
- /**
135
- * Filtering for last occurrence triggers.
136
- *
137
- * @since TBD
138
- *
139
- * @param array<string,bool> $triggers Which options will trigger this given action last occurrence.
140
- * @param string $action Which action this trigger will set.
141
- * @param array $args Which arguments from the updated option method.
142
- *
143
- * @return array
144
- */
145
- public function filter_action_last_occurrence_triggers( array $triggers = [], $action = '', array $args = [] ) {
146
 
147
  /**
148
- * Filters the contents of which options will trigger expiring a given actions cache.
149
  *
150
- * @since TBD
151
  *
152
- * @param array<string,bool> $triggers Which options will trigger this given action last occurrence.
153
- * @param string $action Which action this trigger will set.
154
- * @param array $args Which arguments from the updated option method.
155
  */
156
- $triggers = apply_filters( 'tribe_cache_last_occurrence_option_triggers', $triggers, $action, $args );
 
 
 
 
 
 
 
 
 
 
157
 
158
  /**
159
- * Filters the contents of which options will trigger expiring a given actions cache.
160
- * Allows filtering a specific action.
 
161
  *
162
- * @since TBD
163
  *
164
- * @param array<string,bool> $triggers Which options will trigger this given action last occurrence.
165
- * @param string $action Which action this trigger will set.
166
- * @param array $args Which arguments from the updated option method.
167
  */
168
- return (array) apply_filters( "tribe_cache_last_occurrence_option_triggers:{$action}", $triggers, $action, $args );
169
- }
170
-
171
- /**
172
- * For any hook that doesn't need any additional filtering
173
- *
174
- * @param $method
175
- * @param $args
176
- */
177
- public function __call( $method, $args ) {
178
- $this->cache->set_last_occurrence( $method );
179
- }
 
 
 
 
 
180
 
181
- /**
182
- * Instance method of the cache listener.
183
- *
184
- * @return Tribe__Cache_Listener
185
- */
186
- public static function instance() {
187
- if ( empty( self::$instance ) ) {
188
- self::$instance = self::create_listener();
189
  }
190
 
191
- return self::$instance;
192
- }
 
 
 
 
 
 
 
193
 
194
- /**
195
- * Create a cache listener.
196
- *
197
- * @return Tribe__Cache_Listener
198
- */
199
- private static function create_listener() {
200
- $listener = new self();
201
- $listener->init();
202
 
203
- return $listener;
204
- }
 
 
 
 
 
 
205
 
206
- /**
207
- * Run the caching functionality that is executed when rewrite rules are generated.
208
- *
209
- * @since 4.9.11
210
- */
211
- public function generate_rewrite_rules() {
212
- $this->cache->set_last_occurrence( self::TRIGGER_GENERATE_REWRITE_RULES );
 
 
 
 
213
  }
214
- }
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  /**
3
+ * Listen for events and update their timestamps
4
  */
5
+ class Tribe__Cache_Listener {
6
 
7
+ /**
8
+ * The name of the trigger that will be fired when rewrite rules are generated.
9
+ */
10
+ const TRIGGER_GENERATE_REWRITE_RULES = 'generate_rewrite_rules';
 
 
11
 
12
+ /**
13
+ * The name of the trigger that will be fired when a post is saved.
14
+ */
15
+ const TRIGGER_SAVE_POST = 'save_post';
 
 
16
 
17
+ /**
18
+ * The name of the trigger that will be fired when an option is updated
19
+ */
20
+ const TRIGGER_UPDATED_OPTION = 'updated_option';
 
 
 
 
21
 
22
+ /**
23
+ * The singleton instance of the class.
24
+ *
25
+ * @var Tribe__Cache_Listener|null
26
+ */
27
+ private static $instance;
 
 
28
 
29
+ /**
30
+ * An instance of the cache object.
31
+ *
32
+ * @var Tribe__Cache|null
33
+ */
34
+ private $cache;
 
 
 
 
 
35
 
36
+ /**
37
+ * Class constructor.
38
+ *
39
+ * @return void
40
+ */
41
+ public function __construct() {
42
+ $this->cache = new Tribe__Cache();
 
 
43
  }
 
44
 
45
+ /**
46
+ * Run the init functionality (like add_hooks).
47
+ *
48
+ * @return void
49
+ */
50
+ public function init() {
51
+ $this->add_hooks();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  }
 
53
 
54
+ /**
55
+ * Add the hooks necessary.
56
+ *
57
+ * @return void
58
+ */
59
+ private function add_hooks() {
60
+ add_action( 'save_post', [ $this, 'save_post' ], 0, 2 );
61
+ add_action( 'updated_option', [ $this, 'update_last_updated_option' ], 10, 3 );
62
+ add_action( 'updated_option', [ $this, 'update_last_save_post' ], 10, 3 );
63
+ add_action( 'generate_rewrite_rules', [ $this, 'generate_rewrite_rules' ] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  }
 
65
 
66
+ /**
67
+ * Run the caching functionality that is executed on save post.
68
+ *
69
+ * @param int $post_id The post_id.
70
+ * @param WP_Post $post The current post object being saved.
71
+ */
72
+ public function save_post( $post_id, $post ) {
73
+ if ( in_array( $post->post_type, Tribe__Main::get_post_types() ) ) {
74
+ $this->cache->set_last_occurrence( self::TRIGGER_SAVE_POST );
75
+ }
76
+ }
 
77
 
78
  /**
79
+ * Run the caching functionality that is executed on saving tribe calendar options.
80
  *
81
+ * @see 'updated_option'
82
  *
83
+ * @param string $option_name Name of the updated option.
84
+ * @param mixed $old_value The old option value.
85
+ * @param mixed $value The new option value.
86
  */
87
+ public function update_last_save_post( $option_name, $old_value, $value ) {
88
+ $triggers = [
89
+ 'tribe_events_calendar_options' => true,
90
+ 'permalink_structure' => true,
91
+ 'rewrite_rules' => true,
92
+ 'start_of_week' => true,
93
+ ];
94
+ if ( ! empty( $triggers[ $option_name ] ) ) {
95
+ $this->cache->set_last_occurrence( self::TRIGGER_SAVE_POST );
96
+ }
97
+ }
98
 
99
  /**
100
+ * Run the caching functionality that is executed on saving tribe calendar options.
101
+ *
102
+ * @see 'updated_option'
103
  *
104
+ * @since 4.11.0
105
  *
106
+ * @param string $option_name Name of the updated option.
107
+ * @param mixed $old_value The old option value.
108
+ * @param mixed $value The new option value.
109
  */
110
+ public function update_last_updated_option( $option_name, $old_value, $value ) {
111
+ $triggers = [
112
+ 'active_plugins' => true,
113
+ 'tribe_events_calendar_options' => true,
114
+ 'permalink_structure' => true,
115
+ 'rewrite_rules' => true,
116
+ 'start_of_week' => true,
117
+ 'sidebars_widgets' => true,
118
+ 'stylesheet' => true,
119
+ 'template' => true,
120
+ 'WPLANG' => true,
121
+ ];
122
+
123
+ if ( ! empty( $triggers[ $option_name ] ) ) {
124
+ $this->cache->set_last_occurrence( self::TRIGGER_UPDATED_OPTION );
125
+ }
126
+ }
127
 
128
+ /**
129
+ * For any hook that doesn't need any additional filtering
130
+ *
131
+ * @param $method
132
+ * @param $args
133
+ */
134
+ public function __call( $method, $args ) {
135
+ $this->cache->set_last_occurrence( $method );
136
  }
137
 
138
+ /**
139
+ * Instance method of the cache listener.
140
+ *
141
+ * @return Tribe__Cache_Listener
142
+ */
143
+ public static function instance() {
144
+ if ( empty( self::$instance ) ) {
145
+ self::$instance = self::create_listener();
146
+ }
147
 
148
+ return self::$instance;
149
+ }
 
 
 
 
 
 
150
 
151
+ /**
152
+ * Create a cache listener.
153
+ *
154
+ * @return Tribe__Cache_Listener
155
+ */
156
+ private static function create_listener() {
157
+ $listener = new self();
158
+ $listener->init();
159
 
160
+ return $listener;
161
+ }
162
+
163
+ /**
164
+ * Run the caching functionality that is executed when rewrite rules are generated.
165
+ *
166
+ * @since 4.9.11
167
+ */
168
+ public function generate_rewrite_rules() {
169
+ $this->cache->set_last_occurrence( self::TRIGGER_GENERATE_REWRITE_RULES );
170
+ }
171
  }
 
common/src/Tribe/Changelog_Reader.php CHANGED
@@ -17,7 +17,7 @@ class Tribe__Changelog_Reader {
17
  $contents = $this->extract_changelog_section();
18
  $lines = explode( "\n", $contents );
19
 
20
- $sections = [];
21
  $current_section = '';
22
  foreach ( $lines as $line ) {
23
  $line = trim( $line );
@@ -27,7 +27,7 @@ class Tribe__Changelog_Reader {
27
  }
28
  $header = trim( $line, '= ' );
29
  $current_section = esc_html( $header );
30
- $sections[ $current_section ] = [];
31
  } elseif ( strlen( $line ) > 0 ) {
32
  $message = trim( $line, '* ' );
33
  $sections[ $current_section ][] = esc_html( $message );
17
  $contents = $this->extract_changelog_section();
18
  $lines = explode( "\n", $contents );
19
 
20
+ $sections = array();
21
  $current_section = '';
22
  foreach ( $lines as $line ) {
23
  $line = trim( $line );
27
  }
28
  $header = trim( $line, '= ' );
29
  $current_section = esc_html( $header );
30
+ $sections[ $current_section ] = array();
31
  } elseif ( strlen( $line ) > 0 ) {
32
  $message = trim( $line, '* ' );
33
  $sections[ $current_section ][] = esc_html( $message );
common/src/Tribe/Context.php CHANGED
@@ -190,13 +190,13 @@ class Tribe__Context {
190
  *
191
  * @var array
192
  */
193
- protected static $associative_locations = [
194
  self::TRANSIENT,
195
  self::METHOD,
196
  self::STATIC_METHOD,
197
  self::PROP,
198
  self::STATIC_PROP,
199
- ];
200
 
201
  /**
202
  * Whether the static dynamic locations were set or not.
@@ -213,7 +213,7 @@ class Tribe__Context {
213
  *
214
  * @var array
215
  */
216
- protected $override_locations = [];
217
 
218
  /**
219
  * Whether the context of the current HTTP request is an AJAX one or not.
@@ -234,8 +234,7 @@ class Tribe__Context {
234
  *
235
  * @var array
236
  */
237
- protected $request_cache = [];
238
-
239
  /**
240
  * Whether this context should use the default locations or not.
241
  * This flag property is set to `false` when a context is obtained using
@@ -282,7 +281,7 @@ class Tribe__Context {
282
  }
283
 
284
  if ( ! empty( $post_or_type ) ) {
285
- $lookup = [ $_GET, $_POST, $_REQUEST ];
286
 
287
  $current_post = Tribe__Utils__Array::get_in_any( $lookup, 'post', get_post() );
288
 
@@ -293,7 +292,7 @@ class Tribe__Context {
293
  return ! empty( $post ) && $post == $current_post;
294
  }
295
 
296
- $post_types = is_array( $post_or_type ) ? $post_or_type : [ $post_or_type ];
297
 
298
  $post = $is_post ? get_post( $current_post ) : null;
299
 
@@ -307,7 +306,7 @@ class Tribe__Context {
307
  $post_type = Tribe__Utils__Array::get_in_any( $lookup, 'post_type', 'post' );
308
  }
309
 
310
- return (bool) count( array_intersect( $post_types, [ $post_type ] ) );
311
  }
312
 
313
  return $is_new || $is_post;
@@ -447,7 +446,7 @@ class Tribe__Context {
447
  if ( null !== $key ) {
448
  unset( $this->request_cache[ $key ] );
449
  } else {
450
- $this->request_cache = [];
451
  }
452
  }
453
 
@@ -472,9 +471,7 @@ class Tribe__Context {
472
  *
473
  * @since 4.10.2
474
  *
475
- * @param $locations array An array of read and write location in the shape of the `Tribe__Context::$locations` one,
476
- * `[ <location> => [ 'read' => <read_locations>, 'write' => <write_locations> ] ]`.
477
- * @param $context Tribe__Context Current instance of the context.
478
  */
479
  $locations = apply_filters( 'tribe_context_locations', $locations, $this );
480
  }
@@ -756,7 +753,7 @@ class Tribe__Context {
756
 
757
  foreach ( $classes_and_methods as $class => $method ) {
758
  $the_value = class_exists( $class ) && method_exists( $class, $method )
759
- ? call_user_func( [ $class, $method ] )
760
  : self::NOT_FOUND;
761
 
762
  if ( $the_value !== self::NOT_FOUND ) {
@@ -870,16 +867,16 @@ class Tribe__Context {
870
  foreach ( $targets as $arg_1 => $arg_2 ) {
871
  if ( self::FUNC === $location && is_array( $arg_2 ) && is_callable( $arg_2 ) ) {
872
  // Handles write functions specified as an array.
873
- $location_args = [ $arg_2 ];
874
  } else {
875
  $location_args = in_array( $location, self::$associative_locations, true )
876
- ? [ $arg_1, $arg_2 ]
877
  : (array) $arg_2;
878
  }
879
 
880
- $args = array_merge( $location_args, [ $value ] );
881
 
882
- call_user_func_array( [ $this, $write_func ], $args );
883
  }
884
  }
885
  }
@@ -1058,7 +1055,7 @@ class Tribe__Context {
1058
  if ( ! class_exists( $class ) ) {
1059
  return;
1060
  }
1061
- call_user_func( [ $class, $method ], $value );
1062
  }
1063
 
1064
  /**
@@ -1074,7 +1071,7 @@ class Tribe__Context {
1074
  if ( ! tribe()->offsetExists( $binding ) ) {
1075
  return;
1076
  }
1077
- call_user_func( [ tribe( $binding ), $method ], $value );
1078
  }
1079
 
1080
  /**
@@ -1145,7 +1142,7 @@ class Tribe__Context {
1145
  */
1146
  public function to_array( ) {
1147
  $locations = array_keys( array_merge( $this->get_locations(), $this->request_cache ) );
1148
- $dump = [];
1149
 
1150
  foreach ( $locations as $location ) {
1151
  $the_value = $this->get( $location, self::NOT_FOUND );
@@ -1235,7 +1232,7 @@ class Tribe__Context {
1235
  public function get_orm_args( array $fields = null, $whitelist = true ) {
1236
  $locations = $this->get_locations();
1237
  $dump = $this->to_array();
1238
- $orm_args = [];
1239
  $is_global_context = tribe_context() === $this;
1240
 
1241
  foreach ( $dump as $key => $value ) {
@@ -1322,22 +1319,6 @@ class Tribe__Context {
1322
  static::$did_populate_locations = true;
1323
  }
1324
 
1325
- /**
1326
- * Just dont...
1327
- * Unless you very specifically know what you are doing **DO NOT USE THIS METHOD**!
1328
- *
1329
- * Please keep in mind this will set force the context to repopulate all locations for the whole request, expensive
1330
- * and very dangerous overall since it could affect all this things we hold dear in the request.
1331
- *
1332
- * With great power comes great responsibility: think a lot before using this.
1333
- *
1334
- * @since 4.13.0
1335
- */
1336
- public function dangerously_repopulate_locations() {
1337
- static::$did_populate_locations = false;
1338
- $this->populate_locations();
1339
- }
1340
-
1341
  /**
1342
  * Reads (gets) the value applying one or more filters.
1343
  *
190
  *
191
  * @var array
192
  */
193
+ protected static $associative_locations = array(
194
  self::TRANSIENT,
195
  self::METHOD,
196
  self::STATIC_METHOD,
197
  self::PROP,
198
  self::STATIC_PROP,
199
+ );
200
 
201
  /**
202
  * Whether the static dynamic locations were set or not.
213
  *
214
  * @var array
215
  */
216
+ protected $override_locations = array();
217
 
218
  /**
219
  * Whether the context of the current HTTP request is an AJAX one or not.
234
  *
235
  * @var array
236
  */
237
+ protected $request_cache = array();
 
238
  /**
239
  * Whether this context should use the default locations or not.
240
  * This flag property is set to `false` when a context is obtained using
281
  }
282
 
283
  if ( ! empty( $post_or_type ) ) {
284
+ $lookup = array( $_GET, $_POST, $_REQUEST );
285
 
286
  $current_post = Tribe__Utils__Array::get_in_any( $lookup, 'post', get_post() );
287
 
292
  return ! empty( $post ) && $post == $current_post;
293
  }
294
 
295
+ $post_types = is_array( $post_or_type ) ? $post_or_type : array( $post_or_type );
296
 
297
  $post = $is_post ? get_post( $current_post ) : null;
298
 
306
  $post_type = Tribe__Utils__Array::get_in_any( $lookup, 'post_type', 'post' );
307
  }
308
 
309
+ return (bool) count( array_intersect( $post_types, array( $post_type ) ) );
310
  }
311
 
312
  return $is_new || $is_post;
446
  if ( null !== $key ) {
447
  unset( $this->request_cache[ $key ] );
448
  } else {
449
+ $this->request_cache = array();
450
  }
451
  }
452
 
471
  *
472
  * @since 4.10.2
473
  *
474
+ * @param array $locations An array of locations registered on the Context object.
 
 
475
  */
476
  $locations = apply_filters( 'tribe_context_locations', $locations, $this );
477
  }
753
 
754
  foreach ( $classes_and_methods as $class => $method ) {
755
  $the_value = class_exists( $class ) && method_exists( $class, $method )
756
+ ? call_user_func( array( $class, $method ) )
757
  : self::NOT_FOUND;
758
 
759
  if ( $the_value !== self::NOT_FOUND ) {
867
  foreach ( $targets as $arg_1 => $arg_2 ) {
868
  if ( self::FUNC === $location && is_array( $arg_2 ) && is_callable( $arg_2 ) ) {
869
  // Handles write functions specified as an array.
870
+ $location_args = array( $arg_2 );
871
  } else {
872
  $location_args = in_array( $location, self::$associative_locations, true )
873
+ ? array( $arg_1, $arg_2 )
874
  : (array) $arg_2;
875
  }
876
 
877
+ $args = array_merge( $location_args, array( $value ) );
878
 
879
+ call_user_func_array( array( $this, $write_func ), $args );
880
  }
881
  }
882
  }
1055
  if ( ! class_exists( $class ) ) {
1056
  return;
1057
  }
1058
+ call_user_func( array( $class, $method ), $value );
1059
  }
1060
 
1061
  /**
1071
  if ( ! tribe()->offsetExists( $binding ) ) {
1072
  return;
1073
  }
1074
+ call_user_func( array( tribe( $binding ), $method ), $value );
1075
  }
1076
 
1077
  /**
1142
  */
1143
  public function to_array( ) {
1144
  $locations = array_keys( array_merge( $this->get_locations(), $this->request_cache ) );
1145
+ $dump = array();
1146
 
1147
  foreach ( $locations as $location ) {
1148
  $the_value = $this->get( $location, self::NOT_FOUND );
1232
  public function get_orm_args( array $fields = null, $whitelist = true ) {
1233
  $locations = $this->get_locations();
1234
  $dump = $this->to_array();
1235
+ $orm_args = array();
1236
  $is_global_context = tribe_context() === $this;
1237
 
1238
  foreach ( $dump as $key => $value ) {
1319
  static::$did_populate_locations = true;
1320
  }
1321
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1322
  /**
1323
  * Reads (gets) the value applying one or more filters.
1324
  *
common/src/Tribe/Context/locations.php CHANGED
@@ -136,20 +136,4 @@ return [
136
  Tribe__Context::REQUEST_VAR => [ 'post_tag', 'tag' ],
137
  ],
138
  ],
139
- 'bulk_edit' => [
140
- 'read' => [
141
- Tribe__Context::REQUEST_VAR => [ 'bulk_edit' ],
142
- ],
143
- ],
144
- 'inline_save' => [
145
- 'read' => [
146
- Tribe__Context::FUNC => [
147
- static function () {
148
- return tribe_get_request_var( 'action', false ) === 'inline-save'
149
- ? true
150
- : Tribe__Context::NOT_FOUND;
151
- }
152
- ],
153
- ],
154
- ],
155
  ];
136
  Tribe__Context::REQUEST_VAR => [ 'post_tag', 'tag' ],
137
  ],
138
  ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  ];
common/src/Tribe/Cost_Utils.php CHANGED
@@ -86,7 +86,7 @@ class Tribe__Cost_Utils {
86
  * @return array
87
  */
88
  public function get_separators() {
89
- $separators = [ ',', '.' ];
90
 
91
  /**
92
  * Filters the cost string possible separators, those must be only 1 char.
@@ -161,33 +161,29 @@ class Tribe__Cost_Utils {
161
  *
162
  * @return string|array The merged cost range.
163
  */
164
- public function merge_cost_ranges( $original_string_cost, $merging_cost, $with_currency_symbol, $sorted_mins = [], $sorted_maxs = [] ) {
165
  if ( empty( $merging_cost ) || $original_string_cost === $merging_cost ) {
166
  return $original_string_cost;
167
  }
168
 
169
  $_merging_cost = array_map(
170
- [ $this, 'convert_decimal_separator' ], (array) $merging_cost
171
  );
172
- $_merging_cost = array_map( [ $this, 'numerize_numbers' ], $_merging_cost );
173
  $numeric_merging_cost_costs = array_filter( $_merging_cost, 'is_numeric' );
174
 
175
- $matches = [];
176
  preg_match_all(
177
  '!\d+(?:([' . preg_quote( $this->_supported_decimal_separators ) . '])\d+)?!', $original_string_cost,
178
  $matches
179
  );
180
  $this->_current_original_cost_separator = empty( $matches[1][0] ) ? '.' : $matches[1][0];
181
- $matches[0] = empty( $matches[0] )
182
- ? $matches[0]
183
- : array_map(
184
- [
185
- $this,
186
- 'convert_decimal_separator',
187
- ],
188
- $matches[0]
189
- );
190
-
191
  $numeric_orignal_costs = empty( $matches[0] ) ? $matches[0] : array_map(
192
  'floatval', $matches[0]
193
  );
@@ -219,10 +215,10 @@ class Tribe__Cost_Utils {
219
  $cost_max = empty( $all_numeric_costs ) ? '' : max( $all_numeric_costs );
220
  }
221
 
222
- $cost = array_filter( [ $cost_min, $cost_max ] );
223
 
224
  if ( $with_currency_symbol ) {
225
- $formatted_cost = [];
226
  foreach ( $cost as $c ) {
227
  $formatted_cost[] = is_numeric( $c ) ? tribe_format_currency( $c ) : $c;
228
  }
@@ -230,8 +226,7 @@ class Tribe__Cost_Utils {
230
  }
231
 
232
  return empty( $cost ) ? $original_string_cost : array_map(
233
- [ $this, 'restore_original_decimal_separator' ],
234
- $cost
235
  );
236
  }
237
 
@@ -309,7 +304,7 @@ class Tribe__Cost_Utils {
309
  */
310
  public function parse_cost_range( $costs, $max_decimals = null, $sort = true ) {
311
  if ( ! is_array( $costs ) && ! is_string( $costs ) ) {
312
- return [];
313
  }
314
 
315
  // make sure costs is an array
@@ -317,7 +312,7 @@ class Tribe__Cost_Utils {
317
 
318
  // If there aren't any costs, return a blank array
319
  if ( 0 === count( $costs ) ) {
320
- return [];
321
  }
322
 
323
  // Build the regular expression
@@ -329,7 +324,7 @@ class Tribe__Cost_Utils {
329
  if ( preg_match_all( '/' . $price_regex . '/', $cost, $matches ) ) {
330
  $cost = reset( $matches );
331
  } else {
332
- $cost = [ $cost ];
333
  continue;
334
  }
335
 
@@ -345,7 +340,7 @@ class Tribe__Cost_Utils {
345
  $max = max( $max_decimals, $max );
346
  }
347
 
348
- $output_costs = [];
349
  $costs = call_user_func_array( 'array_merge', $costs );
350
 
351
  foreach ( $costs as $cost ) {
@@ -353,7 +348,7 @@ class Tribe__Cost_Utils {
353
 
354
  if ( is_numeric( $numeric_cost ) ) {
355
  // Creates a Well Balanced Index that will perform good on a Key Sorting method
356
- $index = str_replace( [ '.', ',' ], '', number_format( $numeric_cost, $max ) );
357
  } else {
358
  // Makes sure that we have "index-safe" string
359
  $index = sanitize_title( $numeric_cost );
@@ -415,7 +410,7 @@ class Tribe__Cost_Utils {
415
  * @return int|float
416
  */
417
  protected function numerize_numbers( $value ) {
418
- $matches = [];
419
 
420
  $pattern = '/(\\d{1,}([' . $this->_supported_decimal_separators . ']\\d{1,}))/';
421
 
@@ -441,7 +436,7 @@ class Tribe__Cost_Utils {
441
  return false;
442
  }
443
 
444
- $currency_symbols = [];
445
  $i = 0;
446
  foreach ( $costs as $string => $value ) {
447
  if ( is_numeric( $string ) ) {
@@ -476,7 +471,7 @@ class Tribe__Cost_Utils {
476
  return false;
477
  }
478
 
479
- $currency_positions = [];
480
  foreach ( $original_costs as $original_cost ) {
481
  $currency_symbol_position = strpos( trim( $original_cost ), $currency_symbol );
482
  if ( false === $currency_symbol_position ) {
86
  * @return array
87
  */
88
  public function get_separators() {
89
+ $separators = array( ',', '.' );
90
 
91
  /**
92
  * Filters the cost string possible separators, those must be only 1 char.
161
  *
162
  * @return string|array The merged cost range.
163
  */
164
+ public function merge_cost_ranges( $original_string_cost, $merging_cost, $with_currency_symbol, $sorted_mins = array(), $sorted_maxs = array() ) {
165
  if ( empty( $merging_cost ) || $original_string_cost === $merging_cost ) {
166
  return $original_string_cost;
167
  }
168
 
169
  $_merging_cost = array_map(
170
+ array( $this, 'convert_decimal_separator' ), (array) $merging_cost
171
  );
172
+ $_merging_cost = array_map( array( $this, 'numerize_numbers' ), $_merging_cost );
173
  $numeric_merging_cost_costs = array_filter( $_merging_cost, 'is_numeric' );
174
 
175
+ $matches = array();
176
  preg_match_all(
177
  '!\d+(?:([' . preg_quote( $this->_supported_decimal_separators ) . '])\d+)?!', $original_string_cost,
178
  $matches
179
  );
180
  $this->_current_original_cost_separator = empty( $matches[1][0] ) ? '.' : $matches[1][0];
181
+ $matches[0] = empty( $matches[0] ) ? $matches[0] : array_map(
182
+ array(
183
+ $this,
184
+ 'convert_decimal_separator',
185
+ ), $matches[0]
186
+ );
 
 
 
 
187
  $numeric_orignal_costs = empty( $matches[0] ) ? $matches[0] : array_map(
188
  'floatval', $matches[0]
189
  );
215
  $cost_max = empty( $all_numeric_costs ) ? '' : max( $all_numeric_costs );
216
  }
217
 
218
+ $cost = array_filter( array( $cost_min, $cost_max ) );
219
 
220
  if ( $with_currency_symbol ) {
221
+ $formatted_cost = array();
222
  foreach ( $cost as $c ) {
223
  $formatted_cost[] = is_numeric( $c ) ? tribe_format_currency( $c ) : $c;
224
  }
226
  }
227
 
228
  return empty( $cost ) ? $original_string_cost : array_map(
229
+ array( $this, 'restore_original_decimal_separator' ), $cost
 
230
  );
231
  }
232
 
304
  */
305
  public function parse_cost_range( $costs, $max_decimals = null, $sort = true ) {
306
  if ( ! is_array( $costs ) && ! is_string( $costs ) ) {
307
+ return array();
308
  }
309
 
310
  // make sure costs is an array
312
 
313
  // If there aren't any costs, return a blank array
314
  if ( 0 === count( $costs ) ) {
315
+ return array();
316
  }
317
 
318
  // Build the regular expression
324
  if ( preg_match_all( '/' . $price_regex . '/', $cost, $matches ) ) {
325
  $cost = reset( $matches );
326
  } else {
327
+ $cost = array( $cost );
328
  continue;
329
  }
330
 
340
  $max = max( $max_decimals, $max );
341
  }
342
 
343
+ $output_costs = array();
344
  $costs = call_user_func_array( 'array_merge', $costs );
345
 
346
  foreach ( $costs as $cost ) {
348
 
349
  if ( is_numeric( $numeric_cost ) ) {
350
  // Creates a Well Balanced Index that will perform good on a Key Sorting method
351
+ $index = str_replace( array( '.', ',' ), '', number_format( $numeric_cost, $max ) );
352
  } else {
353
  // Makes sure that we have "index-safe" string
354
  $index = sanitize_title( $numeric_cost );
410
  * @return int|float
411
  */
412
  protected function numerize_numbers( $value ) {
413
+ $matches = array();
414
 
415
  $pattern = '/(\\d{1,}([' . $this->_supported_decimal_separators . ']\\d{1,}))/';
416
 
436
  return false;
437
  }
438
 
439
+ $currency_symbols = array();
440
  $i = 0;
441
  foreach ( $costs as $string => $value ) {
442
  if ( is_numeric( $string ) ) {
471
  return false;
472
  }
473
 
474
+ $currency_positions = array();
475
  foreach ( $original_costs as $original_cost ) {
476
  $currency_symbol_position = strpos( trim( $original_cost ), $currency_symbol );
477
  if ( false === $currency_symbol_position ) {
common/src/Tribe/Credits.php CHANGED
@@ -13,8 +13,8 @@ class Tribe__Credits {
13
  * Hook the functionality of this class into the world
14
  */
15
  public function hook() {
16
- add_filter( 'tribe_events_after_html', [ $this, 'html_comment_credit' ] );
17
- add_filter( 'admin_footer_text', [ $this, 'rating_nudge' ], 1, 2 );
18
  }
19
 
20
  /**
@@ -28,7 +28,7 @@ class Tribe__Credits {
28
  return $after_html;
29
  }
30
 
31
- $html_credit = "\n<!--\n" . esc_html__( 'This calendar is powered by The Events Calendar.', 'tribe-common' ) . "\nhttp://evnt.is/18wn\n-->\n";
32
  $after_html .= apply_filters( 'tribe_html_credit', $html_credit );
33
  return $after_html;
34
  }
@@ -43,7 +43,7 @@ class Tribe__Credits {
43
  public function rating_nudge( $footer_text ) {
44
  $admin_helpers = Tribe__Admin__Helpers::instance();
45
 
46
- add_filter( 'tribe_tickets_post_types', [ $this, 'tmp_return_tribe_events' ], 99 );
47
 
48
  // only display custom text on Tribe Admin Pages
49
  if ( $admin_helpers->is_screen() || $admin_helpers->is_post_type_screen() ) {
@@ -55,7 +55,7 @@ class Tribe__Credits {
55
  esc_html__( 'Rate %1$sThe Events Calendar%2$s %3$s', 'tribe-common' ),
56
  '<strong>',
57
  '</strong>',
58
- '<a href="' . $review_url . '" target="_blank" class="tribe-rating">&#9733;&#9733;&#9733;&#9733;&#9733;</a>'
59
  );
60
  } else {
61
  $review_url = 'https://wordpress.org/support/plugin/event-tickets/reviews/?filter=5';
@@ -64,12 +64,12 @@ class Tribe__Credits {
64
  esc_html__( 'Rate %1$sEvent Tickets%2$s %3$s', 'tribe-common' ),
65
  '<strong>',
66
  '</strong>',
67
- '<a href="' . $review_url . '" target="_blank" class="tribe-rating">&#9733;&#9733;&#9733;&#9733;&#9733;</a>'
68
  );
69
  }
70
  }
71
 
72
- remove_filter( 'tribe_tickets_post_types', [ $this, 'tmp_return_tribe_events' ], 99 );
73
 
74
  return $footer_text;
75
  }
@@ -80,7 +80,7 @@ class Tribe__Credits {
80
  * This will limit the request for ratings to only those post type pages
81
  */
82
  public function tmp_return_tribe_events( $unused_post_types ) {
83
- return [ 'tribe_events' ];
84
  }
85
 
86
  /**
13
  * Hook the functionality of this class into the world
14
  */
15
  public function hook() {
16
+ add_filter( 'tribe_events_after_html', array( $this, 'html_comment_credit' ) );
17
+ add_filter( 'admin_footer_text', array( $this, 'rating_nudge' ), 1, 2 );
18
  }
19
 
20
  /**
28
  return $after_html;
29
  }
30
 
31
+ $html_credit = "\n<!--\n" . esc_html__( 'This calendar is powered by The Events Calendar.', 'tribe-common' ) . "\nhttp://m.tri.be/18wn\n-->\n";
32
  $after_html .= apply_filters( 'tribe_html_credit', $html_credit );
33
  return $after_html;
34
  }
43
  public function rating_nudge( $footer_text ) {
44
  $admin_helpers = Tribe__Admin__Helpers::instance();
45
 
46
+ add_filter( 'tribe_tickets_post_types', array( $this, 'tmp_return_tribe_events' ), 99 );
47
 
48
  // only display custom text on Tribe Admin Pages
49
  if ( $admin_helpers->is_screen() || $admin_helpers->is_post_type_screen() ) {
55
  esc_html__( 'Rate %1$sThe Events Calendar%2$s %3$s', 'tribe-common' ),
56
  '<strong>',
57
  '</strong>',
58
+ '<a href="' . $review_url . '" target="_blank">&#9733;&#9733;&#9733;&#9733;&#9733;</a>'
59
  );
60
  } else {
61
  $review_url = 'https://wordpress.org/support/plugin/event-tickets/reviews/?filter=5';
64
  esc_html__( 'Rate %1$sEvent Tickets%2$s %3$s', 'tribe-common' ),
65
  '<strong>',
66
  '</strong>',
67
+ '<a href="' . $review_url . '" target="_blank">&#9733;&#9733;&#9733;&#9733;&#9733;</a>'
68
  );
69
  }
70
  }
71
 
72
+ remove_filter( 'tribe_tickets_post_types', array( $this, 'tmp_return_tribe_events' ), 99 );
73
 
74
  return $footer_text;
75
  }
80
  * This will limit the request for ratings to only those post type pages
81
  */
82
  public function tmp_return_tribe_events( $unused_post_types ) {
83
+ return array( 'tribe_events' );
84
  }
85
 
86
  /**
common/src/Tribe/Customizer.php CHANGED
@@ -10,15 +10,20 @@ defined( 'WPINC' ) or die;
10
  * @since 4.0
11
  */
12
  final class Tribe__Customizer {
 
 
 
 
 
 
 
13
  /**
14
  * Static Singleton Factory Method
15
  *
16
  * @return self
17
- *
18
- * @deprecated since 4.12.6, use `tribe( 'customizer' )` instead.
19
  */
20
  public static function instance() {
21
- return tribe( 'customizer' );
22
  }
23
 
24
  /**
@@ -64,7 +69,7 @@ final class Tribe__Customizer {
64
  * @access private
65
  * @var array
66
  */
67
- private $sections_class = [];
68
 
69
  /**
70
  * Array of Sections Classes, for non-panel pages
@@ -73,7 +78,7 @@ final class Tribe__Customizer {
73
  * @access private
74
  * @var array
75
  */
76
- private $settings = [];
77
 
78
  /**
79
  * Inline Style has been added
@@ -94,7 +99,7 @@ final class Tribe__Customizer {
94
  *
95
  * @return void
96
  */
97
- public function __construct() {
98
  if ( ! $this->is_active() ) {
99
  return;
100
  }
@@ -110,31 +115,15 @@ final class Tribe__Customizer {
110
  $this->ID = apply_filters( 'tribe_customizer_panel_id', 'tribe_customizer', $this );
111
 
112
  // Hook the Registering methods
113
- add_action( 'customize_register', [ $this, 'register' ], 15 );
114
 
115
- add_action( 'wp_print_footer_scripts', [ $this, 'print_css_template' ], 15 );
116
 
117
  // front end styles from customizer
118
- add_action( 'tribe_events_pro_widget_render', [ $this, 'inline_style' ], 101 );
119
- add_action( 'wp_print_footer_scripts', [ $this, 'shortcode_inline_style' ], 10 );
120
- add_action( 'wp_print_footer_scripts', [ $this, 'widget_inline_style' ], 10 );
121
-
122
- /**
123
- * Allows filtering the action that will be used to trigger the printing of inline scripts.
124
- *
125
- * By default inline scripts will be printed on the `wp_enqueue_scripts` action, but other
126
- * plugins or later iterations might require inline styles to be printed on other actions.
127
- *
128
- * @since 4.12.15
129
- *
130
- * @param string $inline_script_action_handle The handle of the action that will be used to try
131
- * and attempt to print inline scripts.
132
- */
133
- $print_styles_action = apply_filters( 'tribe_customizer_print_styles_action', 'wp_enqueue_scripts' );
134
-
135
- add_action( $print_styles_action, [ $this, 'inline_style' ], 15 );
136
 
137
- add_filter( "default_option_{$this->ID}", [ $this, 'maybe_fallback_get_option' ] );
138
  }
139
 
140
  /**
@@ -152,11 +141,11 @@ final class Tribe__Customizer {
152
  return $sections;
153
  }
154
 
155
- return get_option( 'tribe_events_pro_customizer', [] );
156
  }
157
 
158
  /**
159
- * Loads a Section to the Customizer on The Events Calendar's Panel
160
  *
161
  * @since 4.4
162
  *
@@ -245,7 +234,7 @@ final class Tribe__Customizer {
245
  *
246
  * @return mixed Return the variable based on the index
247
  */
248
- public static function search_var( $variable = null, $indexes = [], $default = null ) {
249
  if ( is_object( $variable ) ) {
250
  $variable = (array) $variable;
251
  }
@@ -285,7 +274,7 @@ final class Tribe__Customizer {
285
  *
286
  * @param array $defaults
287
  */
288
- $defaults[ $section->ID ] = apply_filters( "tribe_events_pro_customizer_section_{$section->ID}_defaults", [] );
289
 
290
  /**
291
  * Allow filtering the defaults for each settings to be filtered before the Ghost options to be set
@@ -294,7 +283,7 @@ final class Tribe__Customizer {
294
  *
295
  * @param array $defaults
296
  */
297
- $settings = isset( $sections[ $section->ID ] ) ? $sections[ $section->ID ] : [];
298
  $defaults[ $section->ID ] = apply_filters( "tribe_customizer_section_{$section->ID}_defaults", $settings );
299
  $sections[ $section->ID ] = wp_parse_args( $settings, $defaults[ $section->ID ] );
300
  }
@@ -346,14 +335,14 @@ final class Tribe__Customizer {
346
  *
347
  * @param strings Using the following structure: self::has_option( 'section_name', 'setting_name' );
348
  *
349
- * @return boolean Whether the option exists in the database
350
  */
351
  public function has_option() {
352
  $search = func_get_args();
353
  $option = self::get_option();
354
- $real_option = get_option( $this->ID, [] );
355
 
356
- // Get section and Settings based on keys
357
  $section = reset( $search );
358
  $setting = end( $search );
359
 
@@ -372,8 +361,6 @@ final class Tribe__Customizer {
372
  /**
373
  * Print the CSS for the customizer on `wp_print_footer_scripts`
374
  *
375
- * @since 4.12.6 Moved the template building code to the `get_styles_scripts` method.
376
- *
377
  * @return void
378
  */
379
  public function print_css_template() {
@@ -383,63 +370,43 @@ final class Tribe__Customizer {
383
  return false;
384
  }
385
 
386
- echo $this->get_styles_scripts();
387
- }
388
-
389
- /**
390
- * Print the CSS for the customizer for shortcodes.
391
- *
392
- * @since 4.12.6
393
- */
394
- public function shortcode_inline_style() {
395
  /**
396
- * Whether customizer styles should print for shortcodes or not.
397
- *
398
- * @since 4.12.6
399
  *
400
- * @param boolean $should_print Whether the inline styles should be printed on screen.
401
- */
402
- $should_print = apply_filters( 'tribe_customizer_should_print_shortcode_customizer_styles', false );
403
-
404
- if ( empty( $should_print ) ) {
405
- return;
406
- }
407
-
408
- $this->inline_style();
409
- }
410
-
411
- /**
412
- * Print the CSS for the customizer for widgets.
413
- *
414
- * @since 4.12.14
415
- */
416
- public function widget_inline_style() {
417
- /**
418
- * Whether customizer styles should print for widgets or not.
419
  *
420
- * @since 4.12.14
421
  *
422
- * @param boolean $should_print Whether the inline styles should be printed on screen.
423
  */
424
- $should_print = apply_filters( 'tribe_customizer_should_print_widget_customizer_styles', false );
425
 
426
- if ( empty( $should_print ) ) {
427
- return;
 
 
428
  }
429
 
430
- $this->inline_style();
 
 
 
 
 
 
 
 
431
  }
432
 
433
  /**
434
  * Print the CSS for the customizer using wp_add_inline_style
435
  *
436
- * @since 4.12.15 Added the `$force` parameter to force the print of the style inline.
437
- *
438
- * @param bool $force Whether to ignore the context to try and print the style inline, or not.
439
  */
440
- public function inline_style( $force = false ) {
441
- // Only load once on front-end.
442
- if ( ! $force && ( is_customize_preview() || is_admin() || $this->inline_style ) ) {
 
443
  return false;
444
  }
445
 
@@ -459,56 +426,29 @@ final class Tribe__Customizer {
459
  return false;
460
  }
461
 
462
- $sheets = [
463
- 'tribe-common-full-style',
464
- ];
465
 
466
- /**
467
- * Allow plugins to add themselves to this list.
468
- *
469
- * @since 4.12.1
470
- *
471
- * @param array<string> $sheets An array of sheets to search for.
472
- * @param string $css_template String containing the inline css to add.
473
- */
474
- $sheets = apply_filters( 'tribe_customizer_inline_stylesheets', $sheets, $css_template );
475
 
476
- if ( empty( $sheets ) ) {
477
- return false;
478
  }
479
 
480
- // Add customizer styles inline with the latest stylesheet that is enqueued.
481
- foreach ( array_reverse( $sheets ) as $sheet ) {
482
- if ( wp_style_is( $sheet ) ) {
483
- $inline_style = wp_strip_all_tags( $this->parse_css_template( $css_template ) );
484
-
485
- /**
486
- * Fires before a style is, possibly, printed inline depending on the stylesheet.
487
- *
488
- * @since 4.12.15
489
- *
490
- * @param string $sheet The handle of the stylesheet the style will be printed inline for.
491
- * @param string $inline_style The inline style contents, as they will be printed on the page.
492
- */
493
- do_action( 'tribe_customizer_before_inline_style', $sheet, $inline_style );
494
-
495
- // Just print styles if doing 'wp_print_footer_scripts' action.
496
- $just_print = (bool) doing_action( 'wp_print_footer_scripts' );
497
-
498
- if ( $just_print ) {
499
- printf(
500
- "<style id='%s-inline-css' type='text/css'>\n%s\n</style>\n",
501
- esc_attr( $sheet ),
502
- $inline_style
503
- );
504
- } else {
505
- wp_add_inline_style( $sheet, $inline_style );
506
- }
507
-
508
- $this->inline_style = true;
509
 
510
- break;
511
- }
 
 
 
 
 
 
 
 
 
 
512
  }
513
  }
514
 
@@ -522,15 +462,15 @@ final class Tribe__Customizer {
522
  $css = $template;
523
  $sections = $this->get_option();
524
 
525
- $search = [];
526
- $replace = [];
527
 
528
  foreach ( $sections as $section => $settings ) {
529
  if ( ! is_array( $settings ) ) {
530
  continue;
531
  }
532
  foreach ( $settings as $setting => $value ) {
533
- $index = [ $section, $setting ];
534
 
535
  // Add search based on Underscore template
536
  $search[] = '<%= ' . implode( '.', $index ) . ' %>';
@@ -567,7 +507,7 @@ final class Tribe__Customizer {
567
  $this->panel = apply_filters( 'tribe_customizer_panel', $this->register_panel(), $this );
568
 
569
  /**
570
- * Filter the Sections within our Panel before they are added to the Customize Manager
571
  *
572
  * @since 4.4
573
  *
@@ -583,13 +523,11 @@ final class Tribe__Customizer {
583
  * Allows people to Register and de-register the method to register more Fields
584
  *
585
  * @since 4.4
586
- * @since 4.12.15 Add Customizer instance as a parameter.
587
  *
588
  * @param array $section
589
  * @param WP_Customize_Manager $manager
590
- * @param Tribe__Customizer $customizer The current customizer instance.
591
  */
592
- do_action( "tribe_customizer_register_{$id}_settings", $this->sections[ $id ], $this->manager, $this );
593
  }
594
 
595
  /**
@@ -621,13 +559,13 @@ final class Tribe__Customizer {
621
  return $panel;
622
  }
623
 
624
- $panel_args = [
625
- 'title' => esc_html__( 'The Events Calendar', 'tribe-common' ),
626
  'description' => esc_html__( 'Use the following panel of your customizer to change the styling of your Calendar and Event pages.', 'tribe-common' ),
627
 
628
  // After `static_front_page`
629
- 'priority' => 125,
630
- ];
631
 
632
  /**
633
  * Filter the Panel Arguments for WP Customize
@@ -781,51 +719,11 @@ final class Tribe__Customizer {
781
  // Add the Partial
782
  $this->manager->selective_refresh->add_partial(
783
  $name,
784
- [
785
  'selector' => '#' . esc_attr( $this->ID . '_css' ),
786
- 'render_callback' => [ $this, 'print_css_template' ],
787
- ]
788
  );
789
  }
790
  }
791
-
792
- /**
793
- * Builds and returns the Customizer CSS template contents.
794
- *
795
- * The method DOES NOT check if the current context is the one where the Customizer template should
796
- * be printed or not; that care is left to the code calling this method.
797
- *
798
- * @since 4.12.6 Extracted this method from the `print_css_template` one.
799
- *
800
- * @return string The CSS template contents.
801
- */
802
- public function get_styles_scripts() {
803
- /**
804
- * Use this filter to add more CSS, using Underscore Template style.
805
- *
806
- * @since 4.4
807
- *
808
- * @param string $template The Customizer template.
809
- *
810
- * @link http://underscorejs.org/#template
811
- */
812
- $css_template = trim( apply_filters( 'tribe_customizer_css_template', '' ) );
813
-
814
- // If we don't have anything on the Customizer, then don't print empty styles.
815
- if ( empty( $css_template ) ) {
816
- return '';
817
- }
818
-
819
- // Prepare the customizer scripts.
820
- $result = '<script type="text/css" id="' . esc_attr( 'tmpl-' . $this->ID . '_css' ) . '">';
821
- $result .= $css_template;
822
- $result .= '</script>';
823
-
824
- // Prepare the customizer styles.
825
- $result .= '<style type="text/css" id="' . esc_attr( $this->ID . '_css' ) . '">';
826
- $result .= $this->parse_css_template( $css_template );
827
- $result .= '</style>';
828
-
829
- return $result;
830
- }
831
  }
10
  * @since 4.0
11
  */
12
  final class Tribe__Customizer {
13
+ /**
14
+ * Static Singleton Holder
15
+ *
16
+ * @var self
17
+ */
18
+ protected static $instance;
19
+
20
  /**
21
  * Static Singleton Factory Method
22
  *
23
  * @return self
 
 
24
  */
25
  public static function instance() {
26
+ return self::$instance ? self::$instance : self::$instance = new self;
27
  }
28
 
29
  /**
69
  * @access private
70
  * @var array
71
  */
72
+ private $sections_class = array();
73
 
74
  /**
75
  * Array of Sections Classes, for non-panel pages
78
  * @access private
79
  * @var array
80
  */
81
+ private $settings = array();
82
 
83
  /**
84
  * Inline Style has been added
99
  *
100
  * @return void
101
  */
102
+ private function __construct() {
103
  if ( ! $this->is_active() ) {
104
  return;
105
  }
115
  $this->ID = apply_filters( 'tribe_customizer_panel_id', 'tribe_customizer', $this );
116
 
117
  // Hook the Registering methods
118
+ add_action( 'customize_register', array( $this, 'register' ), 15 );
119
 
120
+ add_action( 'wp_print_footer_scripts', array( $this, 'print_css_template' ), 15 );
121
 
122
  // front end styles from customizer
123
+ add_action( 'wp_enqueue_scripts', array( $this, 'inline_style' ), 15 );
124
+ add_action( 'tribe_events_pro_widget_render', array( $this, 'inline_style' ), 101 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
 
126
+ add_filter( "default_option_{$this->ID}", array( $this, 'maybe_fallback_get_option' ) );
127
  }
128
 
129
  /**
141
  return $sections;
142
  }
143
 
144
+ return get_option( 'tribe_events_pro_customizer', array() );
145
  }
146
 
147
  /**
148
+ * Loads a Section to the Customizer on the The Events Calendar Panel
149
  *
150
  * @since 4.4
151
  *
234
  *
235
  * @return mixed Return the variable based on the index
236
  */
237
+ public static function search_var( $variable = null, $indexes = array(), $default = null ) {
238
  if ( is_object( $variable ) ) {
239
  $variable = (array) $variable;
240
  }
274
  *
275
  * @param array $defaults
276
  */
277
+ $defaults[ $section->ID ] = apply_filters( "tribe_events_pro_customizer_section_{$section->ID}_defaults", array() );
278
 
279
  /**
280
  * Allow filtering the defaults for each settings to be filtered before the Ghost options to be set
283
  *
284
  * @param array $defaults
285
  */
286
+ $settings = isset( $sections[ $section->ID ] ) ? $sections[ $section->ID ] : array();
287
  $defaults[ $section->ID ] = apply_filters( "tribe_customizer_section_{$section->ID}_defaults", $settings );
288
  $sections[ $section->ID ] = wp_parse_args( $settings, $defaults[ $section->ID ] );
289
  }
335
  *
336
  * @param strings Using the following structure: self::has_option( 'section_name', 'setting_name' );
337
  *
338
+ * @return boolean Wheter the option exists in the database
339
  */
340
  public function has_option() {
341
  $search = func_get_args();
342
  $option = self::get_option();
343
+ $real_option = get_option( $this->ID, array() );
344
 
345
+ // Get section and Settign based on keys
346
  $section = reset( $search );
347
  $setting = end( $search );
348
 
361
  /**
362
  * Print the CSS for the customizer on `wp_print_footer_scripts`
363
  *
 
 
364
  * @return void
365
  */
366
  public function print_css_template() {
370
  return false;
371
  }
372
 
 
 
 
 
 
 
 
 
 
373
  /**
374
+ * Use this filter to add more CSS, using Underscore Template style
 
 
375
  *
376
+ * @since 4.4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
377
  *
378
+ * @link http://underscorejs.org/#template
379
  *
380
+ * @param string $template
381
  */
382
+ $css_template = trim( apply_filters( 'tribe_customizer_css_template', '' ) );
383
 
384
+ // If we don't have anything on the customizer don't print empty styles
385
+ // On Customize Page, we don't care we need this
386
+ if ( ! is_customize_preview() && empty( $css_template ) ) {
387
+ return false;
388
  }
389
 
390
+ // All sections should use this action to print their template
391
+ echo '<script type="text/css" id="' . esc_attr( 'tmpl-' . $this->ID . '_css' ) . '">';
392
+ echo $css_template;
393
+ echo '</script>';
394
+
395
+ // Place where the template will be rendered to
396
+ echo '<style type="text/css" id="' . esc_attr( $this->ID . '_css' ) . '">';
397
+ echo $this->parse_css_template( $css_template );
398
+ echo '</style>';
399
  }
400
 
401
  /**
402
  * Print the CSS for the customizer using wp_add_inline_style
403
  *
404
+ * @return void
 
 
405
  */
406
+ public function inline_style() {
407
+
408
+ //Only load on front end
409
+ if ( is_customize_preview() || is_admin() || $this->inline_style ) {
410
  return false;
411
  }
412
 
426
  return false;
427
  }
428
 
429
+ // add customizer styles inline with either main stylesheet is enqueued or widgets
430
+ if ( wp_style_is( 'tribe-events-calendar-style' ) ) {
 
431
 
432
+ wp_add_inline_style( 'tribe-events-calendar-style', wp_strip_all_tags( $this->parse_css_template( $css_template ) ) );
433
+ $this->inline_style = true;
 
 
 
 
 
 
 
434
 
435
+ return;
 
436
  }
437
 
438
+ if ( wp_style_is( 'tribe-events-calendar-pro-style' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
439
 
440
+ wp_add_inline_style( 'tribe-events-calendar-pro-style', wp_strip_all_tags( $this->parse_css_template( $css_template ) ) );
441
+ $this->inline_style = true;
442
+
443
+ return;
444
+ }
445
+
446
+ if ( wp_style_is( 'widget-calendar-pro-style' ) ) {
447
+
448
+ wp_add_inline_style( 'widget-calendar-pro-style', wp_strip_all_tags( $this->parse_css_template( $css_template ) ) );
449
+ $this->inline_style = true;
450
+
451
+ return;
452
  }
453
  }
454
 
462
  $css = $template;
463
  $sections = $this->get_option();
464
 
465
+ $search = array();
466
+ $replace = array();
467
 
468
  foreach ( $sections as $section => $settings ) {
469
  if ( ! is_array( $settings ) ) {
470
  continue;
471
  }
472
  foreach ( $settings as $setting => $value ) {
473
+ $index = array( $section, $setting );
474
 
475
  // Add search based on Underscore template
476
  $search[] = '<%= ' . implode( '.', $index ) . ' %>';
507
  $this->panel = apply_filters( 'tribe_customizer_panel', $this->register_panel(), $this );
508
 
509
  /**
510
+ * Filter the Sections within our Panel before they are added to the Cutomize Manager
511
  *
512
  * @since 4.4
513
  *
523
  * Allows people to Register and de-register the method to register more Fields
524
  *
525
  * @since 4.4
 
526
  *
527
  * @param array $section
528
  * @param WP_Customize_Manager $manager
 
529
  */
530
+ do_action( "tribe_customizer_register_{$id}_settings", $this->sections[ $id ], $this->manager );
531
  }
532
 
533
  /**
559
  return $panel;
560
  }
561
 
562
+ $panel_args = array(
563
+ 'title' => esc_html__( 'The Events Calendar', 'tribe-common' ),
564
  'description' => esc_html__( 'Use the following panel of your customizer to change the styling of your Calendar and Event pages.', 'tribe-common' ),
565
 
566
  // After `static_front_page`
567
+ 'priority' => 125,
568
+ );
569
 
570
  /**
571
  * Filter the Panel Arguments for WP Customize
719
  // Add the Partial
720
  $this->manager->selective_refresh->add_partial(
721
  $name,
722
+ array(
723
  'selector' => '#' . esc_attr( $this->ID . '_css' ),
724
+ 'render_callback' => array( $this, 'print_css_template' ),
725
+ )
726
  );
727
  }
728
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
729
  }
common/src/Tribe/Customizer/Control.php DELETED
@@ -1,20 +0,0 @@
1
- <?php
2
- /**
3
- * The base class for any custom Control.
4
- *
5
- * @since 4.12.14
6
- *
7
- * @package Tribe\Customizer
8
- */
9
-
10
- namespace Tribe\Customizer;
11
-
12
- /**
13
- * Class Control
14
- *
15
- * @since 4.12.14
16
- *
17
- * @package Tribe\Customizer
18
- */
19
- abstract class Control extends \WP_Customize_Control {
20
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Customizer/Controls/Heading.php DELETED
@@ -1,52 +0,0 @@
1
- <?php
2
- /**
3
- * Models a Customizer heading, a Control just in name, it does not control any setting.
4
- *
5
- * @since 4.12.14
6
- *
7
- * @package Tribe\Customizer\Controls
8
- */
9
-
10
- namespace Tribe\Customizer\Controls;
11
-
12
- use Tribe\Customizer\Control;
13
-
14
- /**
15
- * Class Heading
16
- *
17
- * @since 4.12.14
18
- *
19
- * @package Tribe\Customizer\Controls
20
- */
21
- class Heading extends Control {
22
- /**
23
- * Anyone able to set theme options will be able to see the header.
24
- *
25
- * @since 4.12.14
26
- *
27
- * @var string
28
- */
29
- public $capability = 'edit_theme_options';
30
-
31
- /**
32
- * The heading does not control any setting.
33
- *
34
- * @since 4.12.14
35
- *
36
- * @var array<string,mixed>
37
- */
38
- public $settings = [];
39
-
40
- /**
41
- * Render the control's content
42
- *
43
- * @since 4.12.14
44
- */
45
- public function render_content() {
46
- ?>
47
- <h4 style="font-size: 20px; font-weight: normal; line-height: 1.75; margin-top: 0; margin-bottom: 0px;">
48
- <?php echo esc_html( $this->label ); ?>
49
- </h4>
50
- <?php
51
- }
52
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Customizer/Section.php CHANGED
@@ -41,7 +41,7 @@ abstract class Tribe__Customizer__Section {
41
  * @access private
42
  * @var array
43
  */
44
- public $defaults = [];
45
 
46
  /**
47
  * Information to setup the Section
@@ -51,12 +51,12 @@ abstract class Tribe__Customizer__Section {
51
  * @access public
52
  * @var array
53
  */
54
- public $arguments = [
55
  'priority' => 10,
56
  'capability' => 'edit_theme_options',
57
  'title' => null,
58
  'description' => null,
59
- ];
60
 
61
  /**
62
  * Overwrite this method to create the Fields/Settings for this section
@@ -85,7 +85,7 @@ abstract class Tribe__Customizer__Section {
85
  * @param array $settings The actual options on the database
86
  * @return array
87
  */
88
- public function create_ghost_settings( $settings = [] ) {
89
  return $settings;
90
  }
91
 
@@ -147,15 +147,15 @@ abstract class Tribe__Customizer__Section {
147
  $this->setup();
148
 
149
  // Hook the Register methods
150
- add_action( "tribe_customizer_register_{$this->ID}_settings", [ $this, 'register_settings' ], 10, 2 );
151
- add_filter( 'tribe_customizer_pre_sections', [ $this, 'register' ], 10, 2 );
152
 
153
  // Append this section CSS template
154
- add_filter( 'tribe_customizer_css_template', [ $this, 'get_css_template' ], 15 );
155
- add_filter( "tribe_customizer_section_{$this->ID}_defaults", [ $this, 'get_defaults' ], 10 );
156
 
157
  // Create the Ghost Options
158
- add_filter( 'tribe_customizer_pre_get_option', [ $this, 'filter_settings' ], 10, 2 );
159
 
160
  // By Default Invoking a new Section will load, unless `load` is set to false
161
  if ( true === (bool) $this->load ) {
@@ -167,7 +167,7 @@ abstract class Tribe__Customizer__Section {
167
  * A way to apply filters when getting the Customizer options
168
  * @return array
169
  */
170
- public function get_defaults( $settings = [] ) {
171
  // Create Ghost Options
172
  return $this->create_ghost_settings( wp_parse_args( $settings, $this->defaults ) );
173
  }
41
  * @access private
42
  * @var array
43
  */
44
+ public $defaults = array();
45
 
46
  /**
47
  * Information to setup the Section
51
  * @access public
52
  * @var array
53
  */
54
+ public $arguments = array(
55
  'priority' => 10,
56
  'capability' => 'edit_theme_options',
57
  'title' => null,
58
  'description' => null,
59
+ );
60
 
61
  /**
62
  * Overwrite this method to create the Fields/Settings for this section
85
  * @param array $settings The actual options on the database
86
  * @return array
87
  */
88
+ public function create_ghost_settings( $settings = array() ) {
89
  return $settings;
90
  }
91
 
147
  $this->setup();
148
 
149
  // Hook the Register methods
150
+ add_action( "tribe_customizer_register_{$this->ID}_settings", array( $this, 'register_settings' ), 10, 2 );
151
+ add_filter( 'tribe_customizer_pre_sections', array( $this, 'register' ), 10, 2 );
152
 
153
  // Append this section CSS template
154
+ add_filter( 'tribe_customizer_css_template', array( $this, 'get_css_template' ), 15 );
155
+ add_filter( "tribe_customizer_section_{$this->ID}_defaults", array( $this, 'get_defaults' ), 10 );
156
 
157
  // Create the Ghost Options
158
+ add_filter( 'tribe_customizer_pre_get_option', array( $this, 'filter_settings' ), 10, 2 );
159
 
160
  // By Default Invoking a new Section will load, unless `load` is set to false
161
  if ( true === (bool) $this->load ) {
167
  * A way to apply filters when getting the Customizer options
168
  * @return array
169
  */
170
+ public function get_defaults( $settings = array() ) {
171
  // Create Ghost Options
172
  return $this->create_ghost_settings( wp_parse_args( $settings, $this->defaults ) );
173
  }
common/src/Tribe/DB_Lock.php DELETED
@@ -1,352 +0,0 @@
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 4.12.6
11
- *
12
- * @package Tribe
13
- */
14
-
15
- namespace Tribe;
16
-
17
- /**
18
- * Class DB_Lock
19
- *
20
- * @since 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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/Data.php CHANGED
@@ -49,7 +49,7 @@ class Tribe__Data implements ArrayAccess, Iterator {
49
  * @param array|object $data An array or object of data.
50
  * @param mixed $default The default value that should be returned if a key is not set
51
  */
52
- public function __construct( $data = [], $default = false ) {
53
  $this->data = (array) $data;
54
  $this->default = $default;
55
  }
49
  * @param array|object $data An array or object of data.
50
  * @param mixed $default The default value that should be returned if a key is not set
51
  */
52
+ public function __construct( $data = array(), $default = false ) {
53
  $this->data = (array) $data;
54
  $this->default = $default;
55
  }
common/src/Tribe/Date_Utils.php CHANGED
@@ -35,10 +35,10 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
35
  */
36
  private static $default_datepicker_format_index = 1;
37
 
38
- private static $localized_months_full = [];
39
- private static $localized_months_short = [];
40
- private static $localized_weekdays = [];
41
- private static $localized_months = [];
42
 
43
  /**
44
  * Get the datepickerFormat index.
@@ -95,7 +95,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
95
  public static function datepicker_formats( $translate = null ) {
96
 
97
  // The datepicker has issues when a period separator and no leading zero is used. Those formats are purposefully omitted.
98
- $formats = [
99
  0 => 'Y-m-d',
100
  1 => 'n/j/Y',
101
  2 => 'm/d/Y',
@@ -120,7 +120,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
120
  'm9' => 'Y.m',
121
  'm10' => 'm.Y',
122
  'm11' => 'm.Y',
123
- ];
124
 
125
  if ( is_null( $translate ) ) {
126
  return $formats;
@@ -140,55 +140,55 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
140
  */
141
  public static function datetime_from_format( $format, $date ) {
142
  // Reverse engineer the relevant date formats
143
- $keys = [
144
  // Year with 4 Digits
145
- 'Y' => [ 'year', '\d{4}' ],
146
 
147
  // Year with 2 Digits
148
- 'y' => [ 'year', '\d{2}' ],
149
 
150
  // Month with leading 0
151
- 'm' => [ 'month', '\d{2}' ],
152
 
153
  // Month without the leading 0
154
- 'n' => [ 'month', '\d{1,2}' ],
155
 
156
  // Month ABBR 3 letters
157
- 'M' => [ 'month', '[A-Z][a-z]{2}' ],
158
 
159
  // Month Name
160
- 'F' => [ 'month', '[A-Z][a-z]{2,8}' ],
161
 
162
  // Day with leading 0
163
- 'd' => [ 'day', '\d{2}' ],
164
 
165
  // Day without leading 0
166
- 'j' => [ 'day', '\d{1,2}' ],
167
 
168
  // Day ABBR 3 Letters
169
- 'D' => [ 'day', '[A-Z][a-z]{2}' ],
170
 
171
  // Day Name
172
- 'l' => [ 'day', '[A-Z][a-z]{5,8}' ],
173
 
174
  // Hour 12h formatted, with leading 0
175
- 'h' => [ 'hour', '\d{2}' ],
176
 
177
  // Hour 24h formatted, with leading 0
178
- 'H' => [ 'hour', '\d{2}' ],
179
 
180
  // Hour 12h formatted, without leading 0
181
- 'g' => [ 'hour', '\d{1,2}' ],
182
 
183
  // Hour 24h formatted, without leading 0
184
- 'G' => [ 'hour', '\d{1,2}' ],
185
 
186
  // Minutes with leading 0
187
- 'i' => [ 'minute', '\d{2}' ],
188
 
189
  // Seconds with leading 0
190
- 's' => [ 'second', '\d{2}' ],
191
- ];
192
 
193
  $date_regex = "/{$keys['Y'][1]}-{$keys['m'][1]}-{$keys['d'][1]}( {$keys['H'][1]}:{$keys['i'][1]}:{$keys['s'][1]})?$/";
194
 
@@ -213,7 +213,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
213
  }
214
  }
215
 
216
- $dt = [];
217
 
218
  // Now try to match it
219
  if ( preg_match( '#^' . $regex . '$#', $date, $dt ) ) {
@@ -377,7 +377,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
377
  * @return bool If the timestamp is a weekday.
378
  */
379
  public static function is_weekday( $curdate ) {
380
- return in_array( date( 'N', $curdate ), [ 1, 2, 3, 4, 5 ] );
381
  }
382
 
383
  /**
@@ -388,7 +388,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
388
  * @return bool If the timestamp is a weekend.
389
  */
390
  public static function is_weekend( $curdate ) {
391
- return in_array( date( 'N', $curdate ), [ 6, 7 ] );
392
  }
393
 
394
  /**
@@ -664,7 +664,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
664
  }
665
 
666
  if ( empty( self::$localized_months_full ) ) {
667
- self::$localized_months_full = [
668
  'January' => self::$localized_months['full']['01'],
669
  'February' => self::$localized_months['full']['02'],
670
  'March' => self::$localized_months['full']['03'],
@@ -677,7 +677,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
677
  'October' => self::$localized_months['full']['10'],
678
  'November' => self::$localized_months['full']['11'],
679
  'December' => self::$localized_months['full']['12'],
680
- ];
681
  }
682
 
683
  return self::$localized_months_full;
@@ -696,7 +696,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
696
  }
697
 
698
  if ( empty( self::$localized_months_short ) ) {
699
- self::$localized_months_short = [
700
  'Jan' => self::$localized_months['short']['01'],
701
  'Feb' => self::$localized_months['short']['02'],
702
  'Mar' => self::$localized_months['short']['03'],
@@ -709,7 +709,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
709
  'Oct' => self::$localized_months['short']['10'],
710
  'Nov' => self::$localized_months['short']['11'],
711
  'Dec' => self::$localized_months['short']['12'],
712
- ];
713
  }
714
 
715
  return self::$localized_months_short;
@@ -797,7 +797,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
797
  public static function wp_locale_weekday( $weekday, $format = 'weekday' ) {
798
  $weekday = trim( $weekday );
799
 
800
- $valid_formats = [
801
  'full',
802
  'weekday',
803
  'initial',
@@ -805,7 +805,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
805
  'abbrev',
806
  'abbr',
807
  'short',
808
- ];
809
 
810
  // if there isn't a valid format, bail without providing a localized string
811
  if ( ! in_array( $format, $valid_formats ) ) {
@@ -819,7 +819,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
819
  // if the weekday isn't numeric, we need to convert to numeric in order to
820
  // leverage self::localized_weekdays
821
  if ( ! is_numeric( $weekday ) ) {
822
- $days_of_week = [
823
  'Sun',
824
  'Mon',
825
  'Tue',
@@ -827,7 +827,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
827
  'Thu',
828
  'Fri',
829
  'Sat',
830
- ];
831
 
832
  $day_index = array_search( ucwords( substr( $weekday, 0, 3 ) ), $days_of_week );
833
 
@@ -871,14 +871,14 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
871
  public static function wp_locale_month( $month, $format = 'month' ) {
872
  $month = trim( $month );
873
 
874
- $valid_formats = [
875
  'full',
876
  'month',
877
  'abbreviation',
878
  'abbrev',
879
  'abbr',
880
  'short',
881
- ];
882
 
883
  // if there isn't a valid format, bail without providing a localized string
884
  if ( ! in_array( $format, $valid_formats ) ) {
@@ -898,7 +898,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
898
  return $month;
899
  }
900
  } else {
901
- $months = [
902
  'Jan',
903
  'Feb',
904
  'Mar',
@@ -911,7 +911,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
911
  'Oct',
912
  'Nov',
913
  'Dec',
914
- ];
915
 
916
  // convert the provided month to a 3-character month and find it in the months array so we
917
  // can build an appropriate month number
@@ -1184,7 +1184,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
1184
  && is_numeric( $month )
1185
  && is_numeric( $year )
1186
  && is_numeric( $week_direction )
1187
- && in_array( $week_direction, [ -1, 1 ] )
1188
  )
1189
  ) {
1190
  return false;
35
  */
36
  private static $default_datepicker_format_index = 1;
37
 
38
+ private static $localized_months_full = array();
39
+ private static $localized_months_short = array();
40
+ private static $localized_weekdays = array();
41
+ private static $localized_months = array();
42
 
43
  /**
44
  * Get the datepickerFormat index.
95
  public static function datepicker_formats( $translate = null ) {
96
 
97
  // The datepicker has issues when a period separator and no leading zero is used. Those formats are purposefully omitted.
98
+ $formats = array(
99
  0 => 'Y-m-d',
100
  1 => 'n/j/Y',
101
  2 => 'm/d/Y',
120
  'm9' => 'Y.m',
121
  'm10' => 'm.Y',
122
  'm11' => 'm.Y',
123
+ );
124
 
125
  if ( is_null( $translate ) ) {
126
  return $formats;
140
  */
141
  public static function datetime_from_format( $format, $date ) {
142
  // Reverse engineer the relevant date formats
143
+ $keys = array(
144
  // Year with 4 Digits
145
+ 'Y' => array( 'year', '\d{4}' ),
146
 
147
  // Year with 2 Digits
148
+ 'y' => array( 'year', '\d{2}' ),
149
 
150
  // Month with leading 0
151
+ 'm' => array( 'month', '\d{2}' ),
152
 
153
  // Month without the leading 0
154
+ 'n' => array( 'month', '\d{1,2}' ),
155
 
156
  // Month ABBR 3 letters
157
+ 'M' => array( 'month', '[A-Z][a-z]{2}' ),
158
 
159
  // Month Name
160
+ 'F' => array( 'month', '[A-Z][a-z]{2,8}' ),
161
 
162
  // Day with leading 0
163
+ 'd' => array( 'day', '\d{2}' ),
164
 
165
  // Day without leading 0
166
+ 'j' => array( 'day', '\d{1,2}' ),
167
 
168
  // Day ABBR 3 Letters
169
+ 'D' => array( 'day', '[A-Z][a-z]{2}' ),
170
 
171
  // Day Name
172
+ 'l' => array( 'day', '[A-Z][a-z]{5,8}' ),
173
 
174
  // Hour 12h formatted, with leading 0
175
+ 'h' => array( 'hour', '\d{2}' ),
176
 
177
  // Hour 24h formatted, with leading 0
178
+ 'H' => array( 'hour', '\d{2}' ),
179
 
180
  // Hour 12h formatted, without leading 0
181
+ 'g' => array( 'hour', '\d{1,2}' ),
182
 
183
  // Hour 24h formatted, without leading 0
184
+ 'G' => array( 'hour', '\d{1,2}' ),
185
 
186
  // Minutes with leading 0
187
+ 'i' => array( 'minute', '\d{2}' ),
188
 
189
  // Seconds with leading 0
190
+ 's' => array( 'second', '\d{2}' ),
191
+ );
192
 
193
  $date_regex = "/{$keys['Y'][1]}-{$keys['m'][1]}-{$keys['d'][1]}( {$keys['H'][1]}:{$keys['i'][1]}:{$keys['s'][1]})?$/";
194
 
213
  }
214
  }
215
 
216
+ $dt = array();
217
 
218
  // Now try to match it
219
  if ( preg_match( '#^' . $regex . '$#', $date, $dt ) ) {
377
  * @return bool If the timestamp is a weekday.
378
  */
379
  public static function is_weekday( $curdate ) {
380
+ return in_array( date( 'N', $curdate ), array( 1, 2, 3, 4, 5 ) );
381
  }
382
 
383
  /**
388
  * @return bool If the timestamp is a weekend.
389
  */
390
  public static function is_weekend( $curdate ) {
391
+ return in_array( date( 'N', $curdate ), array( 6, 7 ) );
392
  }
393
 
394
  /**
664
  }
665
 
666
  if ( empty( self::$localized_months_full ) ) {
667
+ self::$localized_months_full = array(
668
  'January' => self::$localized_months['full']['01'],
669
  'February' => self::$localized_months['full']['02'],
670
  'March' => self::$localized_months['full']['03'],
677
  'October' => self::$localized_months['full']['10'],
678
  'November' => self::$localized_months['full']['11'],
679
  'December' => self::$localized_months['full']['12'],
680
+ );
681
  }
682
 
683
  return self::$localized_months_full;
696
  }
697
 
698
  if ( empty( self::$localized_months_short ) ) {
699
+ self::$localized_months_short = array(
700
  'Jan' => self::$localized_months['short']['01'],
701
  'Feb' => self::$localized_months['short']['02'],
702
  'Mar' => self::$localized_months['short']['03'],
709
  'Oct' => self::$localized_months['short']['10'],
710
  'Nov' => self::$localized_months['short']['11'],
711
  'Dec' => self::$localized_months['short']['12'],
712
+ );
713
  }
714
 
715
  return self::$localized_months_short;
797
  public static function wp_locale_weekday( $weekday, $format = 'weekday' ) {
798
  $weekday = trim( $weekday );
799
 
800
+ $valid_formats = array(
801
  'full',
802
  'weekday',
803
  'initial',
805
  'abbrev',
806
  'abbr',
807
  'short',
808
+ );
809
 
810
  // if there isn't a valid format, bail without providing a localized string
811
  if ( ! in_array( $format, $valid_formats ) ) {
819
  // if the weekday isn't numeric, we need to convert to numeric in order to
820
  // leverage self::localized_weekdays
821
  if ( ! is_numeric( $weekday ) ) {
822
+ $days_of_week = array(
823
  'Sun',
824
  'Mon',
825
  'Tue',
827
  'Thu',
828
  'Fri',
829
  'Sat',
830
+ );
831
 
832
  $day_index = array_search( ucwords( substr( $weekday, 0, 3 ) ), $days_of_week );
833
 
871
  public static function wp_locale_month( $month, $format = 'month' ) {
872
  $month = trim( $month );
873
 
874
+ $valid_formats = array(
875
  'full',
876
  'month',
877
  'abbreviation',
878
  'abbrev',
879
  'abbr',
880
  'short',
881
+ );
882
 
883
  // if there isn't a valid format, bail without providing a localized string
884
  if ( ! in_array( $format, $valid_formats ) ) {
898
  return $month;
899
  }
900
  } else {
901
+ $months = array(
902
  'Jan',
903
  'Feb',
904
  'Mar',
911
  'Oct',
912
  'Nov',
913
  'Dec',
914
+ );
915
 
916
  // convert the provided month to a 3-character month and find it in the months array so we
917
  // can build an appropriate month number
1184
  && is_numeric( $month )
1185
  && is_numeric( $year )
1186
  && is_numeric( $week_direction )
1187
+ && in_array( $week_direction, array( - 1, 1 ) )
1188
  )
1189
  ) {
1190
  return false;
common/src/Tribe/Debug.php CHANGED
@@ -5,7 +5,7 @@ class Tribe__Debug {
5
  * constructor
6
  */
7
  public function __construct() {
8
- add_action( 'tribe_debug', [ __CLASS__, 'render' ], 10, 2 );
9
  }
10
 
11
  /**
5
  * constructor
6
  */
7
  public function __construct() {
8
+ add_action( 'tribe_debug', array( __CLASS__, 'render' ), 10, 2 );
9
  }
10
 
11
  /**
common/src/Tribe/Debug_Bar/Panels/Context.php CHANGED
@@ -19,7 +19,7 @@ class Tribe__Debug_Bar__Panels__Context extends Debug_Bar_Panel {
19
  * @return string The panel title
20
  */
21
  public function title( $title = null ) {
22
- return __( 'The Events Calendar Context', 'tribe-common' );
23
  }
24
 
25
  /**
@@ -47,7 +47,7 @@ class Tribe__Debug_Bar__Panels__Context extends Debug_Bar_Panel {
47
  </style>';
48
  $html .= '<div id="mt-debug-bar" class="mt-debug-bar-context">';
49
 
50
- $html .= '<header class="mt-debug-bar-title"><h2>' . esc_html__( 'The Events Calendar Context', 'tribe-common' ) . '</h2></header>';
51
 
52
  $html .= '<section>';
53
  $html .= '<header class="mt-debug-bar-section-header"><h3>' . esc_html__( 'PHP Render Context', 'tribe-common' ) . '</h3></header>';
19
  * @return string The panel title
20
  */
21
  public function title( $title = null ) {
22
+ return __( 'Modern Tribe Context', 'tribe-common' );
23
  }
24
 
25
  /**
47
  </style>';
48
  $html .= '<div id="mt-debug-bar" class="mt-debug-bar-context">';
49
 
50
+ $html .= '<header class="mt-debug-bar-title"><h2>' . esc_html__( 'Modern Tribe Context', 'tribe-common' ) . '</h2></header>';
51
 
52
  $html .= '<section>';
53
  $html .= '<header class="mt-debug-bar-section-header"><h3>' . esc_html__( 'PHP Render Context', 'tribe-common' ) . '</h3></header>';
common/src/Tribe/Debug_Bar/Panels/Json_Ld.php CHANGED
@@ -18,7 +18,7 @@ class Tribe__Debug_Bar__Panels__Json_Ld extends Debug_Bar_Panel {
18
  * @return string The panel title
19
  */
20
  public function title( $title = null ) {
21
- return __( 'The Events Calendar JSON-LD Data', 'tribe-common' );
22
  }
23
 
24
  /**
@@ -37,7 +37,7 @@ class Tribe__Debug_Bar__Panels__Json_Ld extends Debug_Bar_Panel {
37
  </style>';
38
  $html .= '<div id="mt-debug-bar" class="mt-debug-bar-json-ld">';
39
 
40
- $html .= '<header class="mt-debug-bar-title"><h2>' . esc_html__( 'The Events Calendar JSON-LD Data',
41
  'tribe-common' ) . '</h2></header>';
42
 
43
 
18
  * @return string The panel title
19
  */
20
  public function title( $title = null ) {
21
+ return __( 'Modern Tribe JSON-LD Data', 'tribe-common' );
22
  }
23
 
24
  /**
37
  </style>';
38
  $html .= '<div id="mt-debug-bar" class="mt-debug-bar-json-ld">';
39
 
40
+ $html .= '<header class="mt-debug-bar-title"><h2>' . esc_html__( 'Modern Tribe JSON-LD Data',
41
  'tribe-common' ) . '</h2></header>';
42
 
43
 
common/src/Tribe/Dependency.php CHANGED
@@ -11,23 +11,23 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
11
  /**
12
  * A multidimensional array of active tribe plugins in the following format
13
  *
14
- * [
15
  * 'class' => 'main class name',
16
  * 'version' => 'version num', (optional)
17
  * 'path' => 'Path to the main plugin/bootstrap file' (optional)
18
- * ]
19
  */
20
  protected $active_plugins = [];
21
 
22
  /**
23
  * A multidimensional array of active tribe plugins in the following format
24
  *
25
- * [
26
  * 'class' => 'main class name',
27
  * 'path' => 'Path to the main plugin/bootstrap file'
28
  * 'version' => 'version num', (optional)
29
  * 'dependencies' => 'A multidimensional of dependencies' (optional)
30
- * ]
31
  */
32
  protected $registered_plugins = [];
33
 
@@ -49,13 +49,13 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
49
  * @param null|string $path Path to the main plugin/bootstrap file
50
  * @param array $dependencies An array of dependencies for a plugin
51
  */
52
- public function add_registered_plugin( $main_class, $version = null, $path = null, $dependencies = [] ) {
53
- $plugin = [
54
  'class' => $main_class,
55
  'version' => $version,
56
  'path' => $path,
57
  'dependencies' => $dependencies,
58
- ];
59
 
60
  $this->registered_plugins[ $main_class ] = $plugin;
61
 
@@ -83,11 +83,11 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
83
  * @param string $path Path to the main plugin/bootstrap file
84
  */
85
  public function add_active_plugin( $main_class, $version = null, $path = null ) {
86
- $plugin = [
87
- 'class' => $main_class,
88
- 'version' => $version,
89
- 'path' => $path,
90
- ];
91
 
92
  $this->active_plugins[ $main_class ] = $plugin;
93
  }
@@ -267,7 +267,7 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
267
  *
268
  * @return bool
269
  */
270
- public function has_requisite_plugins( $plugins_required = [] ) {
271
  foreach ( $plugins_required as $class => $version ) {
272
  // Return false if the plugin is not set or is a lesser version
273
  if ( ! $this->is_plugin_active( $class ) ) {
@@ -307,7 +307,7 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
307
  *
308
  * @return true|int The number of failed dependency checks; `true` or `0` to indicate no checks failed.
309
  */
310
- public function has_valid_dependencies( $plugin, $dependencies = [], $addon = false ) {
311
  if ( empty( $dependencies ) ) {
312
  return true;
313
  }
@@ -362,7 +362,7 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
362
  return false;
363
  }
364
 
365
- // If class doesn't exist the plugin doesn't exist.
366
  if ( ! class_exists( $class ) ) {
367
  return false;
368
  }
@@ -415,7 +415,7 @@ if ( ! class_exists( 'Tribe__Dependency' ) ) {
415
  * @param array $classes_req Any Main class files/tribe plugins required for this to run.
416
  * @param array $dependencies an array of dependencies to check.
417
  */
418
- public function register_plugin( $file_path, $main_class, $version, $classes_req = [], $dependencies = [] ) {
419
  /**
420
  * Filters the version string for a plugin.
421
  *
11
  /**
12
  * A multidimensional array of active tribe plugins in the following format
13
  *
14
+ * array(
15
  * 'class' => 'main class name',
16
  * 'version' => 'version num', (optional)
17
  * 'path' => 'Path to the main plugin/bootstrap file' (optional)
18
+ * )
19
  */
20
  protected $active_plugins = [];
21
 
22
  /**
23
  * A multidimensional array of active tribe plugins in the following format
24
  *
25
+ * array(
26
  * 'class' => 'main class name',
27
  * 'path' => 'Path to the main plugin/bootstrap file'
28
  * 'version' => 'version num', (optional)
29
  * 'dependencies' => 'A multidimensional of dependencies' (optional)
30
+ * )
31
  */
32
  protected $registered_plugins = [];
33
 
49
  * @param null|string $path Path to the main plugin/bootstrap file
50
  * @param array $dependencies An array of dependencies for a plugin
51
  */
52
+ public function add_registered_plugin( $main_class, $version = null, $path = null, $dependencies = array() ) {
53
+ $plugin = array(
54
  'class' => $main_class,
55
  'version' => $version,
56
  'path' => $path,
57
  'dependencies' => $dependencies,
58
+ );
59
 
60
  $this->registered_plugins[ $main_class ] = $plugin;
61
 
83
  * @param string $path Path to the main plugin/bootstrap file
84
  */
85
  public function add_active_plugin( $main_class, $version = null, $path = null ) {
86
+ $plugin = array(
87
+ 'class' => $main_class,
88
+ 'version' => $version,
89
+ 'path' => $path,
90
+ );
91
 
92
  $this->active_plugins[ $main_class ] = $plugin;
93
  }
267
  *
268
  * @return bool
269
  */
270
+ public function has_requisite_plugins( $plugins_required = array() ) {
271
  foreach ( $plugins_required as $class => $version ) {
272
  // Return false if the plugin is not set or is a lesser version
273
  if ( ! $this->is_plugin_active( $class ) ) {
307
  *
308
  * @return true|int The number of failed dependency checks; `true` or `0` to indicate no checks failed.
309
  */
310
+ public function has_valid_dependencies( $plugin, $dependencies = array(), $addon = false ) {
311
  if ( empty( $dependencies ) ) {
312
  return true;
313
  }
362
  return false;
363
  }
364
 
365
+ // If class doesnt exist the plugin doesnt exist.
366
  if ( ! class_exists( $class ) ) {
367
  return false;
368
  }
415
  * @param array $classes_req Any Main class files/tribe plugins required for this to run.
416
  * @param array $dependencies an array of dependencies to check.
417
  */
418
+ public function register_plugin( $file_path, $main_class, $version, $classes_req = array(), $dependencies = array() ) {
419
  /**
420
  * Filters the version string for a plugin.
421
  *
common/src/Tribe/Deprecation.php CHANGED
@@ -27,10 +27,10 @@ class Tribe__Deprecation {
27
  *
28
  * @var array
29
  */
30
- protected $deprecated_filters = [
31
- 'tribe_cost_regex' => [ '4.3', 'tribe_events_cost_regex' ],
32
- 'tribe_rewrite_prepared_slug' => [ '4.3', 'tribe_events_rewrite_prepared_slug' ],
33
- ];
34
 
35
  /**
36
  * An array specifying the tag, version and optional replacements
@@ -44,9 +44,9 @@ class Tribe__Deprecation {
44
  *
45
  * @var array
46
  */
47
- protected $deprecated_actions = [
48
- 'tribe_pre_rewrite' => [ '4.3', 'tribe_events_pre_rewrite' ],
49
- ];
50
 
51
  /**
52
  * @return Tribe__Deprecation
@@ -71,9 +71,9 @@ class Tribe__Deprecation {
71
  */
72
  public function deprecate_actions() {
73
  foreach ( array_keys( $this->deprecated_actions ) as $new_action_tag ) {
74
- add_action( $new_action_tag, [ $this, 'deprecated_action_message' ] );
75
  add_filter(
76
- $this->deprecated_actions[ $new_action_tag ][1], [ $this, 'deprecated_action_message' ]
77
  );
78
  }
79
  }
@@ -85,9 +85,9 @@ class Tribe__Deprecation {
85
  */
86
  public function deprecate_filters() {
87
  foreach ( array_keys( $this->deprecated_filters ) as $new_filter_tag ) {
88
- add_filter( $new_filter_tag, [ $this, 'deprecated_filter_message' ] );
89
  add_filter(
90
- $this->deprecated_filters[ $new_filter_tag ][1], [ $this, 'deprecated_filter_message' ]
91
  );
92
  }
93
  }
@@ -104,7 +104,7 @@ class Tribe__Deprecation {
104
  $action = $this->get_action_for_deprecated_tag( $action );
105
  }
106
 
107
- remove_action( $deprecated_tag, [ $this, 'deprecated_action_message' ] );
108
 
109
  if ( doing_action( $deprecated_tag ) || has_filter( $deprecated_tag ) ) {
110
  _deprecated_function(
@@ -112,7 +112,7 @@ class Tribe__Deprecation {
112
  );
113
  }
114
 
115
- add_action( $deprecated_tag, [ $this, 'deprecated_action_message' ] );
116
  }
117
 
118
  /**
@@ -133,17 +133,17 @@ class Tribe__Deprecation {
133
  $filter = $this->get_filter_for_deprecated_tag( $filter );
134
  }
135
 
136
- remove_filter( $deprecated_tag, [ $this, 'deprecated_filter_message' ] );
137
 
138
  if ( has_filter( $deprecated_tag ) || doing_filter( $deprecated_tag ) ) {
139
- $version = Tribe__Utils__Array::get( $this->deprecated_filters, [ $filter, 0 ], null );
140
 
141
  _deprecated_function(
142
  'The ' . $deprecated_tag . ' filter', $version, $filter
143
  );
144
  }
145
 
146
- add_filter( $deprecated_tag, [ $this, 'deprecated_filter_message' ] );
147
 
148
  return $value;
149
  }
27
  *
28
  * @var array
29
  */
30
+ protected $deprecated_filters = array(
31
+ 'tribe_cost_regex' => array( '4.3', 'tribe_events_cost_regex' ),
32
+ 'tribe_rewrite_prepared_slug' => array( '4.3', 'tribe_events_rewrite_prepared_slug' ),
33
+ );
34
 
35
  /**
36
  * An array specifying the tag, version and optional replacements
44
  *
45
  * @var array
46
  */
47
+ protected $deprecated_actions = array(
48
+ 'tribe_pre_rewrite' => array( '4.3', 'tribe_events_pre_rewrite' ),
49
+ );
50
 
51
  /**
52
  * @return Tribe__Deprecation
71
  */
72
  public function deprecate_actions() {
73
  foreach ( array_keys( $this->deprecated_actions ) as $new_action_tag ) {
74
+ add_action( $new_action_tag, array( $this, 'deprecated_action_message' ) );
75
  add_filter(
76
+ $this->deprecated_actions[ $new_action_tag ][1], array( $this, 'deprecated_action_message' )
77
  );
78
  }
79
  }
85
  */
86
  public function deprecate_filters() {
87
  foreach ( array_keys( $this->deprecated_filters ) as $new_filter_tag ) {
88
+ add_filter( $new_filter_tag, array( $this, 'deprecated_filter_message' ) );
89
  add_filter(
90
+ $this->deprecated_filters[ $new_filter_tag ][1], array( $this, 'deprecated_filter_message' )
91
  );
92
  }
93
  }
104
  $action = $this->get_action_for_deprecated_tag( $action );
105
  }
106
 
107
+ remove_action( $deprecated_tag, array( $this, 'deprecated_action_message' ) );
108
 
109
  if ( doing_action( $deprecated_tag ) || has_filter( $deprecated_tag ) ) {
110
  _deprecated_function(
112
  );
113
  }
114
 
115
+ add_action( $deprecated_tag, array( $this, 'deprecated_action_message' ) );
116
  }
117
 
118
  /**
133
  $filter = $this->get_filter_for_deprecated_tag( $filter );
134
  }
135
 
136
+ remove_filter( $deprecated_tag, array( $this, 'deprecated_filter_message' ) );
137
 
138
  if ( has_filter( $deprecated_tag ) || doing_filter( $deprecated_tag ) ) {
139
+ $version = Tribe__Utils__Array::get( $this->deprecated_filters, array( $filter, 0 ), null );
140
 
141
  _deprecated_function(
142
  'The ' . $deprecated_tag . ' filter', $version, $filter
143
  );
144
  }
145
 
146
+ add_filter( $deprecated_tag, array( $this, 'deprecated_filter_message' ) );
147
 
148
  return $value;
149
  }
common/src/Tribe/Dialog/View.php CHANGED
@@ -45,12 +45,10 @@ class View extends \Tribe__Template {
45
  *
46
  * @type string $button_id The ID for the trigger button (optional).
47
  * @type array $button_classes Any desired classes for the trigger button (optional).
48
- * @type array $button_attributes Any desired attributes for the trigger button (optional).
49
  * @type boolean $button_disabled Should the button be disabled (optional).
50
  * @type string $button_text The text for the dialog trigger button ("Open the dialog window").
51
  * @type string $button_type The type for the trigger button (optional).
52
  * @type string $button_value The value for the trigger button (optional).
53
- * @type boolean $button_display If the dialog button should be displayed or not (optional).
54
  * @type string $close_event The dialog close event hook name (`tribe_dialog_close_dialog`).
55
  * @type string $content_classes The dialog content classes ("tribe-dialog__content").
56
  * @type array $context Any additional context data you need to expose to this file (optional).
@@ -115,12 +113,10 @@ class View extends \Tribe__Template {
115
  *
116
  * @type string $button_id The ID for the trigger button (optional).
117
  * @type array $button_classes Any desired classes for the trigger button (optional).
118
- * @type array $button_attributes Any desired attributes for the trigger button (optional).
119
  * @type boolean $button_disabled Should the button be disabled (optional).
120
  * @type string $button_text The text for the dialog trigger button ("Open the modal window").
121
  * @type string $button_type The type for the trigger button (optional).
122
  * @type string $button_value The value for the trigger button (optional).
123
- * @type boolean $button_display If the dialog button should be displayed or not (optional).
124
  * @type string $close_event The dialog close event hook name (`tribe_dialog_close_modal`).
125
  * @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-modal__content").
126
  * @type string $title_classes The dialog title classes ("tribe-dialog__title tribe-modal__title").
@@ -186,12 +182,10 @@ class View extends \Tribe__Template {
186
  *
187
  * @type string $button_id The ID for the trigger button (optional).
188
  * @type array $button_classes Any desired classes for the trigger button (optional).
189
- * @type array $button_attributes Any desired attributes for the trigger button (optional).
190
  * @type boolean $button_disabled Should the button be disabled (optional).
191
  * @type string $button_text The text for the dialog trigger button ("Open the dialog window").
192
  * @type string $button_type The type for the trigger button (optional).
193
  * @type string $button_value The value for the trigger button (optional).
194
- * @type boolean $button_display If the dialog button should be displayed or not (optional).
195
  * @type string $cancel_button_text Text for the "Cancel" button ("Cancel").
196
  * @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-confirm__content").
197
  * @type string $continue_button_text Text for the "Continue" button ("Confirm").
@@ -256,12 +250,10 @@ class View extends \Tribe__Template {
256
  * @type string $alert_button_text Text for the "OK" button ("OK").
257
  * @type string $button_id The ID for the trigger button (optional).
258
  * @type array $button_classes Any desired classes for the trigger button (optional).
259
- * @type array $button_attributes Any desired attributes for the trigger button (optional).
260
  * @type boolean $button_disabled Should the button be disabled (optional).
261
  * @type string $button_text The text for the dialog trigger button ("Open the dialog window").
262
  * @type string $button_type The type for the trigger button (optional).
263
  * @type string $button_value The value for the trigger button (optional).
264
- * @type boolean $button_display If the dialog button should be displayed or not (optional).
265
  * @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-alert__content").
266
  * @type string $title_classes The dialog title classes ("tribe-dialog__title tribe-alert__title").
267
  * @type array $context Any additional context data you need to expose to this file (optional).
@@ -323,12 +315,10 @@ class View extends \Tribe__Template {
323
  *
324
  * @type string $button_id The ID for the trigger button (optional).
325
  * @type array $button_classes Any desired classes for the trigger button (optional).
326
- * @type array $button_attributes Any desired attributes for the trigger button (optional).
327
  * @type boolean $button_disabled Should the button be disabled (optional).
328
  * @type string $button_text The text for the dialog trigger button ("Open the dialog window").
329
  * @type string $button_type The type for the trigger button (optional).
330
  * @type string $button_value The value for the trigger button (optional).
331
- * @type boolean $button_display If the dialog button should be displayed or not (optional).
332
  * @type string $close_event The dialog event hook name (`tribe_dialog_close_dialog`).
333
  * @type string $content_classes The dialog content classes ("tribe-dialog__content").
334
  * @type string $title_classes The dialog title classes ("tribe-dialog__title").
@@ -359,14 +349,12 @@ class View extends \Tribe__Template {
359
  private function build_dialog( $content, $id, $args ) {
360
  $default_args = [
361
  'button_classes' => '',
362
- 'button_attributes' => [],
363
  'button_disabled' => false,
364
  'button_id' => '',
365
  'button_name' => '',
366
  'button_text' => __( 'Open the dialog window', 'tribe-common' ),
367
  'button_type' => '',
368
  'button_value' => '',
369
- 'button_display' => true,
370
  'close_event' => 'tribe_dialog_close_dialog',
371
  'content_classes' => 'tribe-dialog__content',
372
  'context' => '',
45
  *
46
  * @type string $button_id The ID for the trigger button (optional).
47
  * @type array $button_classes Any desired classes for the trigger button (optional).
 
48
  * @type boolean $button_disabled Should the button be disabled (optional).
49
  * @type string $button_text The text for the dialog trigger button ("Open the dialog window").
50
  * @type string $button_type The type for the trigger button (optional).
51
  * @type string $button_value The value for the trigger button (optional).
 
52
  * @type string $close_event The dialog close event hook name (`tribe_dialog_close_dialog`).
53
  * @type string $content_classes The dialog content classes ("tribe-dialog__content").
54
  * @type array $context Any additional context data you need to expose to this file (optional).
113
  *
114
  * @type string $button_id The ID for the trigger button (optional).
115
  * @type array $button_classes Any desired classes for the trigger button (optional).
 
116
  * @type boolean $button_disabled Should the button be disabled (optional).
117
  * @type string $button_text The text for the dialog trigger button ("Open the modal window").
118
  * @type string $button_type The type for the trigger button (optional).
119
  * @type string $button_value The value for the trigger button (optional).
 
120
  * @type string $close_event The dialog close event hook name (`tribe_dialog_close_modal`).
121
  * @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-modal__content").
122
  * @type string $title_classes The dialog title classes ("tribe-dialog__title tribe-modal__title").
182
  *
183
  * @type string $button_id The ID for the trigger button (optional).
184
  * @type array $button_classes Any desired classes for the trigger button (optional).
 
185
  * @type boolean $button_disabled Should the button be disabled (optional).
186
  * @type string $button_text The text for the dialog trigger button ("Open the dialog window").
187
  * @type string $button_type The type for the trigger button (optional).
188
  * @type string $button_value The value for the trigger button (optional).
 
189
  * @type string $cancel_button_text Text for the "Cancel" button ("Cancel").
190
  * @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-confirm__content").
191
  * @type string $continue_button_text Text for the "Continue" button ("Confirm").
250
  * @type string $alert_button_text Text for the "OK" button ("OK").
251
  * @type string $button_id The ID for the trigger button (optional).
252
  * @type array $button_classes Any desired classes for the trigger button (optional).
 
253
  * @type boolean $button_disabled Should the button be disabled (optional).
254
  * @type string $button_text The text for the dialog trigger button ("Open the dialog window").
255
  * @type string $button_type The type for the trigger button (optional).
256
  * @type string $button_value The value for the trigger button (optional).
 
257
  * @type string $content_classes The dialog content classes ("tribe-dialog__content tribe-alert__content").
258
  * @type string $title_classes The dialog title classes ("tribe-dialog__title tribe-alert__title").
259
  * @type array $context Any additional context data you need to expose to this file (optional).
315
  *
316
  * @type string $button_id The ID for the trigger button (optional).
317
  * @type array $button_classes Any desired classes for the trigger button (optional).
 
318
  * @type boolean $button_disabled Should the button be disabled (optional).
319
  * @type string $button_text The text for the dialog trigger button ("Open the dialog window").
320
  * @type string $button_type The type for the trigger button (optional).
321
  * @type string $button_value The value for the trigger button (optional).
 
322
  * @type string $close_event The dialog event hook name (`tribe_dialog_close_dialog`).
323
  * @type string $content_classes The dialog content classes ("tribe-dialog__content").
324
  * @type string $title_classes The dialog title classes ("tribe-dialog__title").
349
  private function build_dialog( $content, $id, $args ) {
350
  $default_args = [
351
  'button_classes' => '',
 
352
  'button_disabled' => false,
353
  'button_id' => '',
354
  'button_name' => '',
355
  'button_text' => __( 'Open the dialog window', 'tribe-common' ),
356
  'button_type' => '',
357
  'button_value' => '',
 
358
  'close_event' => 'tribe_dialog_close_dialog',
359
  'content_classes' => 'tribe-dialog__content',
360
  'context' => '',
common/src/Tribe/Documentation/Swagger/Cost_Details_Definition_Provider.php CHANGED
@@ -16,25 +16,25 @@ class Tribe__Documentation__Swagger__Cost_Details_Definition_Provider
16
  * @return array An array description of a Swagger supported component.
17
  */
18
  public function get_documentation() {
19
- $documentation = [
20
  'type' => 'object',
21
- 'properties' => [
22
- 'currency_symbol' => [
23
- 'type' => 'string',
24
  'description' => __( 'The cost currency symbol', 'tribe-common' ),
25
- ],
26
- 'currency_position ' => [
27
- 'type' => 'string',
28
  'description' => __( 'The position of the currency symbol in the cost string', 'tribe-common' ),
29
- 'enum' => [ 'prefix', 'postfix' ],
30
- ],
31
- 'values' => [
32
- 'type' => 'array',
33
- 'items' => [ 'type' => 'integer' ],
34
  'description' => __( 'A sorted array of all the numeric values for the cost', 'tribe-common' ),
35
- ],
36
- ],
37
- ];
38
 
39
  /**
40
  * Filters the Swagger documentation generated for a cost details in the TEC REST API.
16
  * @return array An array description of a Swagger supported component.
17
  */
18
  public function get_documentation() {
19
+ $documentation = array(
20
  'type' => 'object',
21
+ 'properties' => array(
22
+ 'currency_symbol' => array(
23
+ 'type' => 'string',
24
  'description' => __( 'The cost currency symbol', 'tribe-common' ),
25
+ ),
26
+ 'currency_position ' => array(
27
+ 'type' => 'string',
28
  'description' => __( 'The position of the currency symbol in the cost string', 'tribe-common' ),
29
+ 'enum' => array( 'prefix', 'postfix' ),
30
+ ),
31
+ 'values' => array(
32
+ 'type' => 'array',
33
+ 'items' => array( 'type' => 'integer' ),
34
  'description' => __( 'A sorted array of all the numeric values for the cost', 'tribe-common' ),
35
+ ),
36
+ ),
37
+ );
38
 
39
  /**
40
  * Filters the Swagger documentation generated for a cost details in the TEC REST API.
common/src/Tribe/Documentation/Swagger/Date_Details_Definition_Provider.php CHANGED
@@ -16,35 +16,35 @@ class Tribe__Documentation__Swagger__Date_Details_Definition_Provider
16
  * @return array An array description of a Swagger supported component.
17
  */
18
  public function get_documentation() {
19
- $documentation = [
20
  'type' => 'object',
21
- 'properties' => [
22
- 'year' => [
23
- 'type' => 'integer',
24
  'description' => __( 'The date year', 'tribe-common' ),
25
- ],
26
- 'month' => [
27
- 'type' => 'integer',
28
  'description' => __( 'The date month', 'tribe-common' ),
29
- ],
30
- 'day' => [
31
- 'type' => 'integer',
32
  'description' => __( 'The date day', 'tribe-common' ),
33
- ],
34
- 'hour' => [
35
- 'type' => 'integer',
36
  'description' => __( 'The date hour', 'tribe-common' ),
37
- ],
38
- 'minutes' => [
39
- 'type' => 'integer',
40
  'description' => __( 'The date minutes', 'tribe-common' ),
41
- ],
42
- 'seconds' => [
43
- 'type' => 'integer',
44
  'description' => __( 'The date seconds', 'tribe-common' ),
45
- ],
46
- ],
47
- ];
48
 
49
  /**
50
  * Filters the Swagger documentation generated for an date details in the TEC REST API.
16
  * @return array An array description of a Swagger supported component.
17
  */
18
  public function get_documentation() {
19
+ $documentation = array(
20
  'type' => 'object',
21
+ 'properties' => array(
22
+ 'year' => array(
23
+ 'type' => 'integer',
24
  'description' => __( 'The date year', 'tribe-common' ),
25
+ ),
26
+ 'month' => array(
27
+ 'type' => 'integer',
28
  'description' => __( 'The date month', 'tribe-common' ),
29
+ ),
30
+ 'day' => array(
31
+ 'type' => 'integer',
32
  'description' => __( 'The date day', 'tribe-common' ),
33
+ ),
34
+ 'hour' => array(
35
+ 'type' => 'integer',
36
  'description' => __( 'The date hour', 'tribe-common' ),
37
+ ),
38
+ 'minutes' => array(
39
+ 'type' => 'integer',
40
  'description' => __( 'The date minutes', 'tribe-common' ),
41
+ ),
42
+ 'seconds' => array(
43
+ 'type' => 'integer',
44
  'description' => __( 'The date seconds', 'tribe-common' ),
45
+ ),
46
+ ),
47
+ );
48
 
49
  /**
50
  * Filters the Swagger documentation generated for an date details in the TEC REST API.
common/src/Tribe/Documentation/Swagger/Image_Definition_Provider.php CHANGED
@@ -16,39 +16,39 @@ class Tribe__Documentation__Swagger__Image_Definition_Provider
16
  * @return array An array description of a Swagger supported component.
17
  */
18
  public function get_documentation() {
19
- $documentation = [
20
  'type' => 'object',
21
- 'properties' => [
22
- 'url' => [
23
  'type' => 'string',
24
  'format' => 'uri',
25
  'description' => __( 'The URL to the full size version of the image', 'tribe-common' ),
26
- ],
27
- 'id' => [
28
  'type' => 'integer',
29
  'description' => __( 'The image WordPress post ID', 'tribe-common' ),
30
- ],
31
- 'extension' => [
32
  'type' => 'string',
33
  'description' => __( 'The image file extension', 'tribe-common' ),
34
- ],
35
- 'width' => [
36
  'type' => 'integer',
37
  'description' => __( 'The image natural width in pixels', 'tribe-common' ),
38
- ],
39
- 'height' => [
40
  'type' => 'integer',
41
  'description' => __( 'The image natural height in pixels', 'tribe-common' ),
42
- ],
43
- 'sizes' => [
44
  'type' => 'array',
45
  'description' => __( 'The details about each size available for the image', 'tribe-common' ),
46
- 'items' => [
47
  '$ref' => '#/components/schemas/ImageSize',
48
- ],
49
- ],
50
- ],
51
- ];
52
 
53
  /**
54
  * Filters the Swagger documentation generated for an image deatails in the TEC REST API.
16
  * @return array An array description of a Swagger supported component.
17
  */
18
  public function get_documentation() {
19
+ $documentation = array(
20
  'type' => 'object',
21
+ 'properties' => array(
22
+ 'url' => array(
23
  'type' => 'string',
24
  'format' => 'uri',
25
  'description' => __( 'The URL to the full size version of the image', 'tribe-common' ),
26
+ ),
27
+ 'id' => array(
28
  'type' => 'integer',
29
  'description' => __( 'The image WordPress post ID', 'tribe-common' ),
30
+ ),
31
+ 'extension' => array(
32
  'type' => 'string',
33
  'description' => __( 'The image file extension', 'tribe-common' ),
34
+ ),
35
+ 'width' => array(
36
  'type' => 'integer',
37
  'description' => __( 'The image natural width in pixels', 'tribe-common' ),
38
+ ),
39
+ 'height' => array(
40
  'type' => 'integer',
41
  'description' => __( 'The image natural height in pixels', 'tribe-common' ),
42
+ ),
43
+ 'sizes' => array(
44
  'type' => 'array',
45
  'description' => __( 'The details about each size available for the image', 'tribe-common' ),
46
+ 'items' => array(
47
  '$ref' => '#/components/schemas/ImageSize',
48
+ ),
49
+ ),
50
+ ),
51
+ );
52
 
53
  /**
54
  * Filters the Swagger documentation generated for an image deatails in the TEC REST API.
common/src/Tribe/Documentation/Swagger/Image_Size_Definition_Provider.php CHANGED
@@ -16,28 +16,28 @@ class Tribe__Documentation__Swagger__Image_Size_Definition_Provider
16
  * @return array An array description of a Swagger supported component.
17
  */
18
  public function get_documentation() {
19
- $documentation = [
20
  'type' => 'object',
21
- 'properties' => [
22
- 'width' => [
23
- 'type' => 'integer',
24
  'description' => __( 'The image width in pixels in the specified size', 'tribe-common' ),
25
- ],
26
- 'height' => [
27
- 'type' => 'integer',
28
  'description' => __( 'The image height in pixels in the specified size', 'tribe-common' ),
29
- ],
30
- 'mime-type' => [
31
- 'type' => 'string',
32
  'description' => __( 'The image mime-type', 'tribe-common' ),
33
- ],
34
- 'url' => [
35
- 'type' => 'string',
36
- 'format' => 'uri',
37
  'description' => __( 'The link to the image in the specified size on the site', 'tribe-common' ),
38
- ],
39
- ],
40
- ];
41
 
42
  /**
43
  * Filters the Swagger documentation generated for an image size in the TEC REST API.
16
  * @return array An array description of a Swagger supported component.
17
  */
18
  public function get_documentation() {
19
+ $documentation = array(
20
  'type' => 'object',
21
+ 'properties' => array(
22
+ 'width' => array(
23
+ 'type' => 'integer',
24
  'description' => __( 'The image width in pixels in the specified size', 'tribe-common' ),
25
+ ),
26
+ 'height' => array(
27
+ 'type' => 'integer',
28
  'description' => __( 'The image height in pixels in the specified size', 'tribe-common' ),
29
+ ),
30
+ 'mime-type' => array(
31
+ 'type' => 'string',
32
  'description' => __( 'The image mime-type', 'tribe-common' ),
33
+ ),
34
+ 'url' => array(
35
+ 'type' => 'string',
36
+ 'format' => 'uri',
37
  'description' => __( 'The link to the image in the specified size on the site', 'tribe-common' ),
38
+ ),
39
+ ),
40
+ );
41
 
42
  /**
43
  * Filters the Swagger documentation generated for an image size in the TEC REST API.
common/src/Tribe/Documentation/Swagger/Term_Definition_Provider.php CHANGED
@@ -16,48 +16,48 @@ class Tribe__Documentation__Swagger__Term_Definition_Provider
16
  * @return array An array description of a Swagger supported component.
17
  */
18
  public function get_documentation() {
19
- $documentation = [
20
  'type' => 'object',
21
- 'properties' => [
22
- 'id' => [
23
- 'type' => 'integer',
24
  'description' => __( 'The WordPress term ID', 'tribe-common' ),
25
- ],
26
- 'name' => [
27
- 'type' => 'string',
28
  'description' => __( 'The term name', 'tribe-common' ),
29
- ],
30
- 'slug' => [
31
- 'type' => 'string',
32
  'description' => __( 'The term slug', 'tribe-common' ),
33
- ],
34
- 'taxonomy' => [
35
- 'type' => 'string',
36
  'description' => __( 'The taxonomy the term belongs to', 'tribe-common' ),
37
- ],
38
- 'description' => [
39
- 'type' => 'string',
40
  'description' => __( 'The term description', 'tribe-common' ),
41
- ],
42
- 'parent' => [
43
- 'type' => 'integer',
44
  'description' => __( 'The term parent term if any', 'tribe-common' ),
45
- ],
46
- 'count' => [
47
- 'type' => 'integer',
48
  'description' => __( 'The number of posts associated with the term', 'tribe-common' ),
49
- ],
50
- 'url' => [
51
- 'type' => 'string',
52
  'description' => __( 'The URL to the term archive page', 'tribe-common' ),
53
- ],
54
- 'urls' => [
55
- 'type' => 'array',
56
- 'items' => [ 'type' => 'string' ],
57
  'description' => __( 'A list of links to the term own, archive and parent REST URL', 'tribe-common' ),
58
- ],
59
- ],
60
- ];
61
 
62
  /**
63
  * Filters the Swagger documentation generated for an term in the TEC REST API.
16
  * @return array An array description of a Swagger supported component.
17
  */
18
  public function get_documentation() {
19
+ $documentation = array(
20
  'type' => 'object',
21
+ 'properties' => array(
22
+ 'id' => array(
23
+ 'type' => 'integer',
24
  'description' => __( 'The WordPress term ID', 'tribe-common' ),
25
+ ),
26
+ 'name' => array(
27
+ 'type' => 'string',
28
  'description' => __( 'The term name', 'tribe-common' ),
29
+ ),
30
+ 'slug' => array(
31
+ 'type' => 'string',
32
  'description' => __( 'The term slug', 'tribe-common' ),
33
+ ),
34
+ 'taxonomy' => array(
35
+ 'type' => 'string',
36
  'description' => __( 'The taxonomy the term belongs to', 'tribe-common' ),
37
+ ),
38
+ 'description' => array(
39
+ 'type' => 'string',
40
  'description' => __( 'The term description', 'tribe-common' ),
41
+ ),
42
+ 'parent' => array(
43
+ 'type' => 'integer',
44
  'description' => __( 'The term parent term if any', 'tribe-common' ),
45
+ ),
46
+ 'count' => array(
47
+ 'type' => 'integer',
48
  'description' => __( 'The number of posts associated with the term', 'tribe-common' ),
49
+ ),
50
+ 'url' => array(
51
+ 'type' => 'string',
52
  'description' => __( 'The URL to the term archive page', 'tribe-common' ),
53
+ ),
54
+ 'urls' => array(
55
+ 'type' => 'array',
56
+ 'items' => array( 'type' => 'string' ),
57
  'description' => __( 'A list of links to the term own, archive and parent REST URL', 'tribe-common' ),
58
+ ),
59
+ ),
60
+ );
61
 
62
  /**
63
  * Filters the Swagger documentation generated for an term in the TEC REST API.
common/src/Tribe/Duplicate/Post.php CHANGED
@@ -14,7 +14,7 @@ class Tribe__Duplicate__Post {
14
  /**
15
  * @var array The columns of the post table.
16
  */
17
- public static $post_table_columns = [
18
  'ID',
19
  'post_author',
20
  'post_date',
@@ -38,17 +38,17 @@ class Tribe__Duplicate__Post {
38
  'post_type',
39
  'post_mime_type',
40
  'comment_count',
41
- ];
42
 
43
  /**
44
  * @var array The post fields that should be used to find a duplicate.
45
  */
46
- protected $post_fields = [];
47
 
48
  /**
49
  * @var array The custom fields that should be used to find a duplicate.
50
  */
51
- protected $custom_fields = [];
52
 
53
  /**
54
  * @var Tribe__Duplicate__Strategy_Factory
@@ -93,7 +93,7 @@ class Tribe__Duplicate__Post {
93
  */
94
  public function use_post_fields( array $post_fields ) {
95
  if ( empty( $post_fields ) ) {
96
- $this->post_fields = [];
97
 
98
  return;
99
  }
@@ -112,16 +112,16 @@ class Tribe__Duplicate__Post {
112
  * @since 4.6
113
  */
114
  protected function cast_to_strategy( array $fields ) {
115
- $cast = [];
116
 
117
  foreach ( $fields as $key => $value ) {
118
  if ( is_numeric( $key ) ) {
119
- $cast[ $value ] = [ 'match' => 'same' ];
120
  } elseif ( is_array( $value ) ) {
121
  if ( ! empty( $value['match'] ) ) {
122
  $cast[ $key ] = $value;
123
  } else {
124
- $cast[ $key ] = array_merge( $value, [ 'match' => 'same' ] );
125
  }
126
  }
127
  }
@@ -291,9 +291,9 @@ class Tribe__Duplicate__Post {
291
  /** @var wpdb $wpdb */
292
  global $wpdb;
293
 
294
- $where_frags = [];
295
- $custom_fields_where_frags = [];
296
- $join = [];
297
 
298
  if ( ! empty( $this->post_fields ) ) {
299
  $queryable_post_fields = array_intersect_key( $postarr, $this->post_fields );
@@ -333,10 +333,10 @@ class Tribe__Duplicate__Post {
333
  */
334
  $join_limit = apply_filters( 'tribe_duplicate_post_join_limit', $this->join_limit, $where_frags, $this->post_type );
335
 
336
- $excluded_status = [
337
  'trash',
338
  'autodraft',
339
- ];
340
 
341
  /**
342
  * Filters the excluded status.
@@ -360,7 +360,7 @@ class Tribe__Duplicate__Post {
360
  $post_status_conditional = $wpdb->prepare( "{$wpdb->posts}.post_status NOT IN ( {$in_string} )", $excluded_status );
361
  }
362
 
363
- $queries = [];
364
 
365
  if ( ! empty( $join_limit ) && ! empty( $join ) ) {
366
  while ( count( $join ) ) {
14
  /**
15
  * @var array The columns of the post table.
16
  */
17
+ public static $post_table_columns = array(
18
  'ID',
19
  'post_author',
20
  'post_date',
38
  'post_type',
39
  'post_mime_type',
40
  'comment_count',
41
+ );
42
 
43
  /**
44
  * @var array The post fields that should be used to find a duplicate.
45
  */
46
+ protected $post_fields = array();
47
 
48
  /**
49
  * @var array The custom fields that should be used to find a duplicate.
50
  */
51
+ protected $custom_fields = array();
52
 
53
  /**
54
  * @var Tribe__Duplicate__Strategy_Factory
93
  */
94
  public function use_post_fields( array $post_fields ) {
95
  if ( empty( $post_fields ) ) {
96
+ $this->post_fields = array();
97
 
98
  return;
99
  }
112
  * @since 4.6
113
  */
114
  protected function cast_to_strategy( array $fields ) {
115
+ $cast = array();
116
 
117
  foreach ( $fields as $key => $value ) {
118
  if ( is_numeric( $key ) ) {
119
+ $cast[ $value ] = array( 'match' => 'same' );
120
  } elseif ( is_array( $value ) ) {
121
  if ( ! empty( $value['match'] ) ) {
122
  $cast[ $key ] = $value;
123
  } else {
124
+ $cast[ $key ] = array_merge( $value, array( 'match' => 'same' ) );
125
  }
126
  }
127
  }
291
  /** @var wpdb $wpdb */
292
  global $wpdb;
293
 
294
+ $where_frags = array();
295
+ $custom_fields_where_frags = array();
296
+ $join = array();
297
 
298
  if ( ! empty( $this->post_fields ) ) {
299
  $queryable_post_fields = array_intersect_key( $postarr, $this->post_fields );
333
  */
334
  $join_limit = apply_filters( 'tribe_duplicate_post_join_limit', $this->join_limit, $where_frags, $this->post_type );
335
 
336
+ $excluded_status = array(
337
  'trash',
338
  'autodraft',
339
+ );
340
 
341
  /**
342
  * Filters the excluded status.
360
  $post_status_conditional = $wpdb->prepare( "{$wpdb->posts}.post_status NOT IN ( {$in_string} )", $excluded_status );
361
  }
362
 
363
+ $queries = array();
364
 
365
  if ( ! empty( $join_limit ) && ! empty( $join ) ) {
366
  while ( count( $join ) ) {
common/src/Tribe/Duplicate/Strategy/Base.php CHANGED
@@ -19,6 +19,6 @@ abstract class Tribe__Duplicate__Strategy__Base {
19
  * @since 4.6
20
  */
21
  protected function is_a_numeric_post_field( $key ) {
22
- return in_array( $key, [ 'ID', 'post_author', 'post_parent', 'menu_order', 'comment_count' ] );
23
  }
24
  }
19
  * @since 4.6
20
  */
21
  protected function is_a_numeric_post_field( $key ) {
22
+ return in_array( $key, array( 'ID', 'post_author', 'post_parent', 'menu_order', 'comment_count' ) );
23
  }
24
  }
common/src/Tribe/Duplicate/Strategy/Like.php CHANGED
@@ -31,7 +31,7 @@ class Tribe__Duplicate__Strategy__Like
31
 
32
  $frags = $this->get_where_frags( $value );
33
 
34
- $where_frags = [];
35
  foreach ( $frags as $frag ) {
36
  $formatted_frag = '%' . $wpdb->esc_like( strtolower( trim( $frag ) ) ) . '%';
37
  $where_frags[] = $wpdb->prepare( "{$key} LIKE %s", $formatted_frag );
@@ -73,7 +73,7 @@ class Tribe__Duplicate__Strategy__Like
73
 
74
  $frags = $this->get_where_frags( $value );
75
 
76
- $where_frags = [ $wpdb->prepare( "{$table_alias}.meta_key = %s", $key ) ];
77
  foreach ( $frags as $frag ) {
78
  $formatted_frag = '%' . $wpdb->esc_like( strtolower( trim( $frag ) ) ) . '%';
79
  $query = "{$table_alias}.meta_value LIKE %s";
31
 
32
  $frags = $this->get_where_frags( $value );
33
 
34
+ $where_frags = array();
35
  foreach ( $frags as $frag ) {
36
  $formatted_frag = '%' . $wpdb->esc_like( strtolower( trim( $frag ) ) ) . '%';
37
  $where_frags[] = $wpdb->prepare( "{$key} LIKE %s", $formatted_frag );
73
 
74
  $frags = $this->get_where_frags( $value );
75
 
76
+ $where_frags = array( $wpdb->prepare( "{$table_alias}.meta_key = %s", $key ) );
77
  foreach ( $frags as $frag ) {
78
  $formatted_frag = '%' . $wpdb->esc_like( strtolower( trim( $frag ) ) ) . '%';
79
  $query = "{$table_alias}.meta_value LIKE %s";
common/src/Tribe/Duplicate/Strategy_Factory.php CHANGED
@@ -8,14 +8,14 @@
8
  * @since 4.6
9
  */
10
  class Tribe__Duplicate__Strategy_Factory {
11
- protected $strategy_map = [];
12
 
13
  public function __construct() {
14
- $strategy_map = [
15
  'default' => 'Tribe__Duplicate__Strategy__Same',
16
  'same' => 'Tribe__Duplicate__Strategy__Same',
17
  'like' => 'Tribe__Duplicate__Strategy__Like',
18
- ];
19
 
20
  /**
21
  * Filters the strategies managed by the strategy factory.
8
  * @since 4.6
9
  */
10
  class Tribe__Duplicate__Strategy_Factory {
11
+ protected $strategy_map = array();
12
 
13
  public function __construct() {
14
+ $strategy_map = array(
15
  'default' => 'Tribe__Duplicate__Strategy__Same',
16
  'same' => 'Tribe__Duplicate__Strategy__Same',
17
  'like' => 'Tribe__Duplicate__Strategy__Like',
18
+ );
19
 
20
  /**
21
  * Filters the strategies managed by the strategy factory.
common/src/Tribe/Editor.php CHANGED
@@ -91,10 +91,10 @@ class Tribe__Editor {
91
  *
92
  * @return array
93
  */
94
- public function add_support( $args = [] ) {
95
  // Make sure we have the Support argument and it's an array
96
  if ( ! isset( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
97
- $args['supports'] = [];
98
  }
99
 
100
  // Add Editor Support
@@ -114,13 +114,13 @@ class Tribe__Editor {
114
  *
115
  * @return array
116
  */
117
- public function add_rest_support( $args = [] ) {
118
  // Blocks Editor requires REST support
119
  $args['show_in_rest'] = true;
120
 
121
  // Make sure we have the Support argument and it's an array
122
  if ( ! isset( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
123
- $args['supports'] = [];
124
  }
125
 
126
  if ( ! in_array( 'revisions', $args['supports'] ) ) {
@@ -196,30 +196,28 @@ class Tribe__Editor {
196
  * @return bool
197
  */
198
  public function is_classic_option_active() {
199
- $valid_values = [ 'replace', 'classic' ];
200
 
201
  return in_array( (string) get_option( 'classic-editor-replace' ), $valid_values, true );
202
  }
203
 
204
  /**
205
- * Detect if the classic editor is force-activated via plugin or if it comes from a request.
206
  *
207
  * @since 4.8
208
  *
209
  * @return bool
210
  */
211
  public function is_classic_editor() {
212
- $disabled_by_plugin = $this->is_classic_plugin_active() && $this->is_classic_option_active();
213
-
214
  /**
215
- * Allow other addons to disable classic editor based on options.
216
  *
217
  * @since 4.8.5
218
  *
219
  * @param bool $classic_is_active Whether the classic editor should be used.
220
  */
221
- $disabled_by_filter = apply_filters( 'tribe_editor_classic_is_active', false );
222
-
223
  $is_classic_editor_request = tribe_get_request_var( 'classic-editor', null );
224
 
225
  return $is_classic_editor_request || $disabled_by_plugin || $disabled_by_filter;
91
  *
92
  * @return array
93
  */
94
+ public function add_support( $args = array() ) {
95
  // Make sure we have the Support argument and it's an array
96
  if ( ! isset( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
97
+ $args['supports'] = array();
98
  }
99
 
100
  // Add Editor Support
114
  *
115
  * @return array
116
  */
117
+ public function add_rest_support( $args = array() ) {
118
  // Blocks Editor requires REST support
119
  $args['show_in_rest'] = true;
120
 
121
  // Make sure we have the Support argument and it's an array
122
  if ( ! isset( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
123
+ $args['supports'] = array();
124
  }
125
 
126
  if ( ! in_array( 'revisions', $args['supports'] ) ) {
196
  * @return bool
197
  */
198
  public function is_classic_option_active() {
199
+ $valid_values = array( 'replace', 'classic' );
200
 
201
  return in_array( (string) get_option( 'classic-editor-replace' ), $valid_values, true );
202
  }
203
 
204
  /**
205
+ * Detect if is the classic editor is forced activated via plugin or if it comes from a request
206
  *
207
  * @since 4.8
208
  *
209
  * @return bool
210
  */
211
  public function is_classic_editor() {
212
+ $disabled_by_plugin = $this->is_classic_plugin_active() && $this->is_classic_option_active();
 
213
  /**
214
+ * Allow other addons to disabled classic editor based on options
215
  *
216
  * @since 4.8.5
217
  *
218
  * @param bool $classic_is_active Whether the classic editor should be used.
219
  */
220
+ $disabled_by_filter = apply_filters( 'tribe_editor_classic_is_active', false );
 
221
  $is_classic_editor_request = tribe_get_request_var( 'classic-editor', null );
222
 
223
  return $is_classic_editor_request || $disabled_by_plugin || $disabled_by_filter;
common/src/Tribe/Editor/Assets.php CHANGED
@@ -1,5 +1,4 @@
1
  <?php
2
-
3
  /**
4
  * Events Gutenberg Assets
5
  *
@@ -13,7 +12,7 @@ class Tribe__Editor__Assets {
13
  * @return void
14
  */
15
  public function hook() {
16
- add_action( 'tribe_plugins_loaded', [ $this, 'register' ] );
17
  }
18
 
19
  /**
@@ -36,22 +35,12 @@ class Tribe__Editor__Assets {
36
  /**
37
  * @todo revise this dependencies
38
  */
39
- [
40
- 'react',
41
- 'react-dom',
42
- 'wp-components',
43
- 'wp-api',
44
- 'wp-api-request',
45
- 'wp-blocks',
46
- 'wp-i18n',
47
- 'wp-element',
48
- 'wp-editor',
49
- ],
50
  'enqueue_block_editor_assets',
51
- [
52
  'in_footer' => false,
53
- 'localize' => [
54
- [
55
  'name' => 'tribe_editor_config',
56
  /**
57
  * Array used to setup the FE with custom variables from the BE
@@ -61,10 +50,10 @@ class Tribe__Editor__Assets {
61
  * @param array An array with the variables to be localized
62
  */
63
  'data' => tribe_callback( 'common.editor.configuration', 'localize' ),
64
- ],
65
- ],
66
  'priority' => 11,
67
- ]
68
  );
69
 
70
  tribe_asset(
@@ -74,23 +63,13 @@ class Tribe__Editor__Assets {
74
  /**
75
  * @todo revise this dependencies
76
  */
77
- [
78
- 'react',
79
- 'react-dom',
80
- 'wp-components',
81
- 'wp-api',
82
- 'wp-api-request',
83
- 'wp-blocks',
84
- 'wp-i18n',
85
- 'wp-element',
86
- 'wp-editor',
87
- ],
88
  'enqueue_block_editor_assets',
89
- [
90
  'in_footer' => false,
91
- 'localize' => [],
92
  'priority' => 12,
93
- ]
94
  );
95
  tribe_asset(
96
  $plugin,
@@ -99,23 +78,13 @@ class Tribe__Editor__Assets {
99
  /**
100
  * @todo revise this dependencies
101
  */
102
- [
103
- 'react',
104
- 'react-dom',
105
- 'wp-components',
106
- 'wp-api',
107
- 'wp-api-request',
108
- 'wp-blocks',
109
- 'wp-i18n',
110
- 'wp-element',
111
- 'wp-editor',
112
- ],
113
  'enqueue_block_editor_assets',
114
- [
115
  'in_footer' => false,
116
- 'localize' => [],
117
  'priority' => 13,
118
- ]
119
  );
120
  tribe_asset(
121
  $plugin,
@@ -124,23 +93,13 @@ class Tribe__Editor__Assets {
124
  /**
125
  * @todo revise this dependencies
126
  */
127
- [
128
- 'react',
129
- 'react-dom',
130
- 'wp-components',
131
- 'wp-api',
132
- 'wp-api-request',
133
- 'wp-blocks',
134
- 'wp-i18n',
135
- 'wp-element',
136
- 'wp-editor',
137
- ],
138
  'enqueue_block_editor_assets',
139
- [
140
  'in_footer' => false,
141
- 'localize' => [],
142
  'priority' => 14,
143
- ]
144
  );
145
  tribe_asset(
146
  $plugin,
@@ -149,7 +108,7 @@ class Tribe__Editor__Assets {
149
  /**
150
  * @todo revise this dependencies
151
  */
152
- [
153
  'react',
154
  'react-dom',
155
  'wp-components',
@@ -159,13 +118,13 @@ class Tribe__Editor__Assets {
159
  'wp-i18n',
160
  'wp-element',
161
  'wp-editor',
162
- ],
163
  'enqueue_block_editor_assets',
164
- [
165
  'in_footer' => false,
166
- 'localize' => [],
167
  'priority' => 15,
168
- ]
169
  );
170
  tribe_asset(
171
  $plugin,
@@ -174,23 +133,13 @@ class Tribe__Editor__Assets {
174
  /**
175
  * @todo revise this dependencies
176
  */
177
- [
178
- 'react',
179
- 'react-dom',
180
- 'wp-components',
181
- 'wp-api',
182
- 'wp-api-request',
183
- 'wp-blocks',
184
- 'wp-i18n',
185
- 'wp-element',
186
- 'wp-editor',
187
- ],
188
  'enqueue_block_editor_assets',
189
- [
190
  'in_footer' => false,
191
- 'localize' => [],
192
  'priority' => 16,
193
- ]
194
  );
195
  tribe_asset(
196
  $plugin,
@@ -199,7 +148,7 @@ class Tribe__Editor__Assets {
199
  /**
200
  * @todo revise this dependencies
201
  */
202
- [
203
  'react',
204
  'react-dom',
205
  'wp-components',
@@ -209,13 +158,13 @@ class Tribe__Editor__Assets {
209
  'wp-i18n',
210
  'wp-element',
211
  'wp-editor',
212
- ],
213
  'enqueue_block_editor_assets',
214
- [
215
  'in_footer' => false,
216
- 'localize' => [],
217
  'priority' => 17,
218
- ]
219
  );
220
  /**
221
  * @todo: figure out why element styles are loading for tickets but not events.
@@ -227,7 +176,7 @@ class Tribe__Editor__Assets {
227
  /**
228
  * @todo revise this dependencies
229
  */
230
- [
231
  'react',
232
  'react-dom',
233
  'wp-components',
@@ -237,23 +186,23 @@ class Tribe__Editor__Assets {
237
  'wp-i18n',
238
  'wp-element',
239
  'wp-editor',
240
- ],
241
  'enqueue_block_editor_assets',
242
- [
243
  'in_footer' => false,
244
- 'localize' => [],
245
  'priority' => 17,
246
- ]
247
  );
248
  tribe_asset(
249
  $plugin,
250
  'tribe-common-gutenberg-elements-styles',
251
  'app/elements.css',
252
- [],
253
  'enqueue_block_editor_assets',
254
- [
255
- 'in_footer' => false,
256
- ]
257
  );
258
  }
259
  }
1
  <?php
 
2
  /**
3
  * Events Gutenberg Assets
4
  *
12
  * @return void
13
  */
14
  public function hook() {
15
+ add_action( 'tribe_plugins_loaded', array( $this, 'register' ) );
16
  }
17
 
18
  /**
35
  /**
36
  * @todo revise this dependencies
37
  */
38
+ array( 'react', 'react-dom', 'wp-components', 'wp-api', 'wp-api-request', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
 
 
 
 
 
 
 
 
 
 
39
  'enqueue_block_editor_assets',
40
+ array(
41
  'in_footer' => false,
42
+ 'localize' => array(
43
+ array(
44
  'name' => 'tribe_editor_config',
45
  /**
46
  * Array used to setup the FE with custom variables from the BE
50
  * @param array An array with the variables to be localized
51
  */
52
  'data' => tribe_callback( 'common.editor.configuration', 'localize' ),
53
+ ),
54
+ ),
55
  'priority' => 11,
56
+ )
57
  );
58
 
59
  tribe_asset(
63
  /**
64
  * @todo revise this dependencies
65
  */
66
+ array( 'react', 'react-dom', 'wp-components', 'wp-api', 'wp-api-request', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
 
 
 
 
 
 
 
 
 
 
67
  'enqueue_block_editor_assets',
68
+ array(
69
  'in_footer' => false,
70
+ 'localize' => array(),
71
  'priority' => 12,
72
+ )
73
  );
74
  tribe_asset(
75
  $plugin,
78
  /**
79
  * @todo revise this dependencies
80
  */
81
+ array( 'react', 'react-dom', 'wp-components', 'wp-api', 'wp-api-request', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
 
 
 
 
 
 
 
 
 
 
82
  'enqueue_block_editor_assets',
83
+ array(
84
  'in_footer' => false,
85
+ 'localize' => array(),
86
  'priority' => 13,
87
+ )
88
  );
89
  tribe_asset(
90
  $plugin,
93
  /**
94
  * @todo revise this dependencies
95
  */
96
+ array( 'react', 'react-dom', 'wp-components', 'wp-api', 'wp-api-request', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
 
 
 
 
 
 
 
 
 
 
97
  'enqueue_block_editor_assets',
98
+ array(
99
  'in_footer' => false,
100
+ 'localize' => array(),
101
  'priority' => 14,
102
+ )
103
  );
104
  tribe_asset(
105
  $plugin,
108
  /**
109
  * @todo revise this dependencies
110
  */
111
+ array(
112
  'react',
113
  'react-dom',
114
  'wp-components',
118
  'wp-i18n',
119
  'wp-element',
120
  'wp-editor',
121
+ ),
122
  'enqueue_block_editor_assets',
123
+ array(
124
  'in_footer' => false,
125
+ 'localize' => array(),
126
  'priority' => 15,
127
+ )
128
  );
129
  tribe_asset(
130
  $plugin,
133
  /**
134
  * @todo revise this dependencies
135
  */
136
+ array( 'react', 'react-dom', 'wp-components', 'wp-api', 'wp-api-request', 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-editor' ),
 
 
 
 
 
 
 
 
 
 
137
  'enqueue_block_editor_assets',
138
+ array(
139
  'in_footer' => false,
140
+ 'localize' => array(),
141
  'priority' => 16,
142
+ )
143
  );
144
  tribe_asset(
145
  $plugin,
148
  /**
149
  * @todo revise this dependencies
150
  */
151
+ array(
152
  'react',
153
  'react-dom',
154
  'wp-components',
158
  'wp-i18n',
159
  'wp-element',
160
  'wp-editor',
161
+ ),
162
  'enqueue_block_editor_assets',
163
+ array(
164
  'in_footer' => false,
165
+ 'localize' => array(),
166
  'priority' => 17,
167
+ )
168
  );
169
  /**
170
  * @todo: figure out why element styles are loading for tickets but not events.
176
  /**
177
  * @todo revise this dependencies
178
  */
179
+ array(
180
  'react',
181
  'react-dom',
182
  'wp-components',
186
  'wp-i18n',
187
  'wp-element',
188
  'wp-editor',
189
+ ),
190
  'enqueue_block_editor_assets',
191
+ array(
192
  'in_footer' => false,
193
+ 'localize' => array(),
194
  'priority' => 17,
195
+ )
196
  );
197
  tribe_asset(
198
  $plugin,
199
  'tribe-common-gutenberg-elements-styles',
200
  'app/elements.css',
201
+ array(),
202
  'enqueue_block_editor_assets',
203
+ array(
204
+ 'in_footer' => false,
205
+ )
206
  );
207
  }
208
  }
common/src/Tribe/Editor/Blocks/Abstract.php CHANGED
@@ -47,7 +47,7 @@ implements Tribe__Editor__Blocks__Interface {
47
  *
48
  * @return array
49
  */
50
- public function attributes( $params = [] ) {
51
 
52
  // get the default attributes
53
  $default_attributes = $this->default_attributes();
@@ -80,7 +80,7 @@ implements Tribe__Editor__Blocks__Interface {
80
  */
81
  public function default_attributes() {
82
 
83
- $attributes = [];
84
 
85
  /**
86
  * Filters the default attributes
@@ -102,8 +102,12 @@ implements Tribe__Editor__Blocks__Interface {
102
  *
103
  * @return string
104
  */
105
- public function render( $attributes = [] ) {
106
- $json_string = json_encode( $attributes, JSON_PRETTY_PRINT );
 
 
 
 
107
 
108
  return
109
  '<pre class="tribe-placeholder-text-' . $this->name() . '">' .
@@ -132,13 +136,13 @@ implements Tribe__Editor__Blocks__Interface {
132
  * @return void
133
  */
134
  public function register() {
135
- $block_args = [
136
- 'render_callback' => [ $this, 'render' ],
137
- ];
138
 
139
  register_block_type( $this->name(), $block_args );
140
 
141
- add_action( 'wp_ajax_' . $this->get_ajax_action(), [ $this, 'ajax' ] );
142
 
143
  $this->assets();
144
  $this->hook();
47
  *
48
  * @return array
49
  */
50
+ public function attributes( $params = array() ) {
51
 
52
  // get the default attributes
53
  $default_attributes = $this->default_attributes();
80
  */
81
  public function default_attributes() {
82
 
83
+ $attributes = array();
84
 
85
  /**
86
  * Filters the default attributes
102
  *
103
  * @return string
104
  */
105
+ public function render( $attributes = array() ) {
106
+ if ( version_compare( phpversion(), '5.4', '>=' ) ) {
107
+ $json_string = json_encode( $attributes, JSON_PRETTY_PRINT );
108
+ } else {
109
+ $json_string = json_encode( $attributes );
110
+ }
111
 
112
  return
113
  '<pre class="tribe-placeholder-text-' . $this->name() . '">' .
136
  * @return void
137
  */
138
  public function register() {
139
+ $block_args = array(
140
+ 'render_callback' => array( $this, 'render' ),
141
+ );
142
 
143
  register_block_type( $this->name(), $block_args );
144
 
145
+ add_action( 'wp_ajax_' . $this->get_ajax_action(), array( $this, 'ajax' ) );
146
 
147
  $this->assets();
148
  $this->hook();
common/src/Tribe/Editor/Blocks/Interface.php CHANGED
@@ -38,7 +38,7 @@ interface Tribe__Editor__Blocks__Interface {
38
  *
39
  * @return string
40
  */
41
- public function render( $attributes = [] );
42
 
43
  /**
44
  * Does the registration for PHP rendering for the Block, important due to been
38
  *
39
  * @return string
40
  */
41
+ public function render( $attributes = array() );
42
 
43
  /**
44
  * Does the registration for PHP rendering for the Block, important due to been
common/src/Tribe/Editor/Configuration.php CHANGED
@@ -8,7 +8,6 @@
8
  * @since 4.8
9
  */
10
  class Tribe__Editor__Configuration implements Tribe__Editor__Configuration_Interface {
11
-
12
  /**
13
  * Localize variables that are part of common
14
  *
@@ -17,35 +16,31 @@ class Tribe__Editor__Configuration implements Tribe__Editor__Configuration_Inter
17
  * @return array
18
  */
19
  public function localize() {
20
- /**
21
- * @var Tribe__Languages__Locations $languages_locations
22
- */
23
- $languages_locations = tribe( 'languages.locations' );
24
- $editor_config = [
25
- 'common' => [
26
  'adminUrl' => admin_url(),
27
- 'timeZone' => [
28
  'showTimeZone' => false,
29
  'label' => $this->get_timezone_label(),
30
- ],
31
- 'rest' => [
32
  'url' => get_rest_url(),
33
- 'nonce' => [
34
  'wp_rest' => wp_create_nonce( 'wp_rest' ),
35
- ],
36
- 'namespaces' => [
37
  'core' => 'wp/v2',
38
- ],
39
- ],
40
  'dateSettings' => $this->get_date_settings(),
41
- 'constants' => [
42
  'hideUpsell' => ( defined( 'TRIBE_HIDE_UPSELL' ) && TRIBE_HIDE_UPSELL ),
43
- ],
44
- 'countries' => $languages_locations->get_countries( true ),
45
  'usStates' => Tribe__View_Helpers::loadStates(),
46
- ],
47
  'blocks' => [],
48
- ];
49
 
50
  /**
51
  * Filter the default configuration used to localize variables
@@ -81,31 +76,31 @@ class Tribe__Editor__Configuration implements Tribe__Editor__Configuration_Inter
81
  public function get_date_settings() {
82
  global $wp_locale;
83
 
84
- return [
85
- 'l10n' => [
86
  'locale' => get_user_locale(),
87
  'months' => array_values( $wp_locale->month ),
88
  'monthsShort' => array_values( $wp_locale->month_abbrev ),
89
  'weekdays' => array_values( $wp_locale->weekday ),
90
  'weekdaysShort' => array_values( $wp_locale->weekday_abbrev ),
91
  'meridiem' => (object) $wp_locale->meridiem,
92
- 'relative' => [
93
  /* translators: %s: duration */
94
  'future' => __( '%s from now', 'default' ),
95
  /* translators: %s: duration */
96
  'past' => __( '%s ago', 'default' ),
97
- ],
98
- ],
99
- 'formats' => [
100
  'time' => get_option( 'time_format', __( 'g:i a', 'default' ) ),
101
  'date' => get_option( 'date_format', __( 'F j, Y', 'default' ) ),
102
  'dateNoYear' => __( 'F j', 'default' ),
103
  'datetime' => get_option( 'date_format', __( 'F j, Y', 'default' ) ) . ' ' . get_option( 'time_format', __( 'g:i a', 'default' ) ),
104
- ],
105
- 'timezone' => [
106
  'offset' => get_option( 'gmt_offset', 0 ),
107
  'string' => $this->get_timezone_label(),
108
- ],
109
- ];
110
  }
111
  }
8
  * @since 4.8
9
  */
10
  class Tribe__Editor__Configuration implements Tribe__Editor__Configuration_Interface {
 
11
  /**
12
  * Localize variables that are part of common
13
  *
16
  * @return array
17
  */
18
  public function localize() {
19
+ $editor_config = array(
20
+ 'common' => array(
 
 
 
 
21
  'adminUrl' => admin_url(),
22
+ 'timeZone' => array(
23
  'showTimeZone' => false,
24
  'label' => $this->get_timezone_label(),
25
+ ),
26
+ 'rest' => array(
27
  'url' => get_rest_url(),
28
+ 'nonce' => array(
29
  'wp_rest' => wp_create_nonce( 'wp_rest' ),
30
+ ),
31
+ 'namespaces' => array(
32
  'core' => 'wp/v2',
33
+ ),
34
+ ),
35
  'dateSettings' => $this->get_date_settings(),
36
+ 'constants' => array(
37
  'hideUpsell' => ( defined( 'TRIBE_HIDE_UPSELL' ) && TRIBE_HIDE_UPSELL ),
38
+ ),
39
+ 'countries' => tribe( 'languages.locations' )->get_countries(),
40
  'usStates' => Tribe__View_Helpers::loadStates(),
41
+ ),
42
  'blocks' => [],
43
+ );
44
 
45
  /**
46
  * Filter the default configuration used to localize variables
76
  public function get_date_settings() {
77
  global $wp_locale;
78
 
79
+ return array(
80
+ 'l10n' => array(
81
  'locale' => get_user_locale(),
82
  'months' => array_values( $wp_locale->month ),
83
  'monthsShort' => array_values( $wp_locale->month_abbrev ),
84
  'weekdays' => array_values( $wp_locale->weekday ),
85
  'weekdaysShort' => array_values( $wp_locale->weekday_abbrev ),
86
  'meridiem' => (object) $wp_locale->meridiem,
87
+ 'relative' => array(
88
  /* translators: %s: duration */
89
  'future' => __( '%s from now', 'default' ),
90
  /* translators: %s: duration */
91
  'past' => __( '%s ago', 'default' ),
92
+ ),
93
+ ),
94
+ 'formats' => array(
95
  'time' => get_option( 'time_format', __( 'g:i a', 'default' ) ),
96
  'date' => get_option( 'date_format', __( 'F j, Y', 'default' ) ),
97
  'dateNoYear' => __( 'F j', 'default' ),
98
  'datetime' => get_option( 'date_format', __( 'F j, Y', 'default' ) ) . ' ' . get_option( 'time_format', __( 'g:i a', 'default' ) ),
99
+ ),
100
+ 'timezone' => array(
101
  'offset' => get_option( 'gmt_offset', 0 ),
102
  'string' => $this->get_timezone_label(),
103
+ ),
104
+ );
105
  }
106
  }
common/src/Tribe/Editor/Meta.php CHANGED
@@ -16,13 +16,13 @@ abstract class Tribe__Editor__Meta
16
  * @return array
17
  */
18
  protected function text() {
19
- return [
20
- 'auth_callback' => [ $this, 'auth_callback' ],
21
  'sanitize_callback' => 'sanitize_text_field',
22
  'type' => 'string',
23
  'single' => true,
24
  'show_in_rest' => true,
25
- ];
26
  }
27
 
28
  /**
@@ -33,13 +33,13 @@ abstract class Tribe__Editor__Meta
33
  * @return array
34
  */
35
  protected function textarea() {
36
- return [
37
- 'auth_callback' => [ $this, 'auth_callback' ],
38
  'sanitize_callback' => 'sanitize_textarea_field',
39
  'type' => 'string',
40
  'single' => true,
41
  'show_in_rest' => true,
42
- ];
43
  }
44
 
45
  /**
@@ -50,13 +50,13 @@ abstract class Tribe__Editor__Meta
50
  * @return array
51
  */
52
  protected function url() {
53
- return [
54
- 'auth_callback' => [ $this, 'auth_callback' ],
55
  'sanitize_callback' => 'esc_url_raw',
56
  'type' => 'string',
57
  'single' => true,
58
  'show_in_rest' => true,
59
- ];
60
  }
61
 
62
  /**
@@ -67,13 +67,13 @@ abstract class Tribe__Editor__Meta
67
  * @return array
68
  */
69
  protected function numeric() {
70
- return [
71
- 'auth_callback' => [ $this, 'auth_callback' ],
72
  'sanitize_callback' => 'absint',
73
  'type' => 'number',
74
  'single' => true,
75
  'show_in_rest' => true,
76
- ];
77
  }
78
 
79
  /***
@@ -84,13 +84,13 @@ abstract class Tribe__Editor__Meta
84
  * @return array
85
  */
86
  protected function boolean() {
87
- return [
88
- 'auth_callback' => [ $this, 'auth_callback' ],
89
- 'sanitize_callback' => [ $this, 'sanitize_boolean' ],
90
  'type' => 'boolean',
91
  'single' => true,
92
  'show_in_rest' => true,
93
- ];
94
  }
95
 
96
  /**
@@ -101,14 +101,14 @@ abstract class Tribe__Editor__Meta
101
  * @return array
102
  */
103
  protected function numeric_array() {
104
- return [
105
  'description' => __( 'Numeric Array', 'tribe-common' ),
106
- 'auth_callback' => [ $this, 'auth_callback' ],
107
- 'sanitize_callback' => [ $this, 'sanitize_numeric_array' ],
108
  'type' => 'number',
109
  'single' => false,
110
  'show_in_rest' => true,
111
- ];
112
  }
113
 
114
  /**
@@ -119,14 +119,14 @@ abstract class Tribe__Editor__Meta
119
  * @return array
120
  */
121
  protected function text_array() {
122
- return [
123
  'description' => __( 'Text Array', 'tribe-common' ),
124
- 'auth_callback' => [ $this, 'auth_callback' ],
125
- 'sanitize_callback' => [ $this, 'sanitize_text_array' ],
126
  'type' => 'string',
127
  'single' => false,
128
  'show_in_rest' => true,
129
- ];
130
  }
131
 
132
  /**
16
  * @return array
17
  */
18
  protected function text() {
19
+ return array(
20
+ 'auth_callback' => array( $this, 'auth_callback' ),
21
  'sanitize_callback' => 'sanitize_text_field',
22
  'type' => 'string',
23
  'single' => true,
24
  'show_in_rest' => true,
25
+ );
26
  }
27
 
28
  /**
33
  * @return array
34
  */
35
  protected function textarea() {
36
+ return array(
37
+ 'auth_callback' => array( $this, 'auth_callback' ),
38
  'sanitize_callback' => 'sanitize_textarea_field',
39
  'type' => 'string',
40
  'single' => true,
41
  'show_in_rest' => true,
42
+ );
43
  }
44
 
45
  /**
50
  * @return array
51
  */
52
  protected function url() {
53
+ return array(
54
+ 'auth_callback' => array( $this, 'auth_callback' ),
55
  'sanitize_callback' => 'esc_url_raw',
56
  'type' => 'string',
57
  'single' => true,
58
  'show_in_rest' => true,
59
+ );
60
  }
61
 
62
  /**
67
  * @return array
68
  */
69
  protected function numeric() {
70
+ return array(
71
+ 'auth_callback' => array( $this, 'auth_callback' ),
72
  'sanitize_callback' => 'absint',
73
  'type' => 'number',
74
  'single' => true,
75
  'show_in_rest' => true,
76
+ );
77
  }
78
 
79
  /***
84
  * @return array
85
  */
86
  protected function boolean() {
87
+ return array(
88
+ 'auth_callback' => array( $this, 'auth_callback' ),
89
+ 'sanitize_callback' => array( $this, 'sanitize_boolean' ),
90
  'type' => 'boolean',
91
  'single' => true,
92
  'show_in_rest' => true,
93
+ );
94
  }
95
 
96
  /**
101
  * @return array
102
  */
103
  protected function numeric_array() {
104
+ return array(
105
  'description' => __( 'Numeric Array', 'tribe-common' ),
106
+ 'auth_callback' => array( $this, 'auth_callback' ),
107
+ 'sanitize_callback' => array( $this, 'sanitize_numeric_array' ),
108
  'type' => 'number',
109
  'single' => false,
110
  'show_in_rest' => true,
111
+ );
112
  }
113
 
114
  /**
119
  * @return array
120
  */
121
  protected function text_array() {
122
+ return array(
123
  'description' => __( 'Text Array', 'tribe-common' ),
124
+ 'auth_callback' => array( $this, 'auth_callback' ),
125
+ 'sanitize_callback' => array( $this, 'sanitize_text_array' ),
126
  'type' => 'string',
127
  'single' => false,
128
  'show_in_rest' => true,
129
+ );
130
  }
131
 
132
  /**
common/src/Tribe/Editor/Provider.php CHANGED
@@ -18,7 +18,7 @@ class Tribe__Editor__Provider extends tad_DI52_ServiceProvider {
18
  return;
19
  }
20
 
21
- $this->container->singleton( 'editor.assets', 'Tribe__Editor__Assets', [ 'hook' ] );
22
 
23
  $this->hook();
24
 
@@ -36,7 +36,7 @@ class Tribe__Editor__Provider extends tad_DI52_ServiceProvider {
36
  */
37
  protected function hook() {
38
  // Setup the registration of Blocks
39
- add_action( 'init', [ $this, 'register_blocks' ], 20 );
40
  }
41
 
42
  /**
18
  return;
19
  }
20
 
21
+ $this->container->singleton( 'editor.assets', 'Tribe__Editor__Assets', array( 'hook' ) );
22
 
23
  $this->hook();
24
 
36
  */
37
  protected function hook() {
38
  // Setup the registration of Blocks
39
+ add_action( 'init', array( $this, 'register_blocks' ), 20 );
40
  }
41
 
42
  /**
common/src/Tribe/Editor/Utils.php CHANGED
@@ -95,10 +95,10 @@ class Tribe__Editor__Utils {
95
  return false;
96
  }
97
 
98
- return wp_update_post( [
99
  'ID' => $post_id,
100
  'post_content' => $next_content,
101
- ] );
102
  }
103
 
104
  /**
95
  return false;
96
  }
97
 
98
+ return wp_update_post( array(
99
  'ID' => $post_id,
100
  'post_content' => $next_content,
101
+ ) );
102
  }
103
 
104
  /**
common/src/Tribe/Error.php CHANGED
@@ -7,7 +7,7 @@ class Tribe__Error {
7
  * All the Errors Registered
8
  * @var array
9
  */
10
- private $items = [];
11
 
12
  /**
13
  * Static Singleton Holder
@@ -49,9 +49,9 @@ class Tribe__Error {
49
  *
50
  * @return WP_Error
51
  */
52
- public function send( $indexes, $context = [], $sprintf = [] ) {
53
  if ( ! $this->exists( $indexes ) ) {
54
- $indexes = [ 'unknown' ];
55
  }
56
 
57
  // Fetches the Errors
@@ -170,7 +170,7 @@ class Tribe__Error {
170
  $variable = $variable[ $index ];
171
  }
172
 
173
- $return = [];
174
  $was_namespace = is_array( $variable );
175
 
176
  /**
7
  * All the Errors Registered
8
  * @var array
9
  */
10
+ private $items = array();
11
 
12
  /**
13
  * Static Singleton Holder
49
  *
50
  * @return WP_Error
51
  */
52
+ public function send( $indexes, $context = array(), $sprintf = array() ) {
53
  if ( ! $this->exists( $indexes ) ) {
54
+ $indexes = array( 'unknown' );
55
  }
56
 
57
  // Fetches the Errors
170
  $variable = $variable[ $index ];
171
  }
172
 
173
+ $return = array();
174
  $was_namespace = is_array( $variable );
175
 
176
  /**
common/src/Tribe/Exception.php CHANGED
@@ -45,7 +45,7 @@ class Tribe__Exception extends Exception {
45
  */
46
  private function get_log_type_for_exception_code( $code ) {
47
  $map = array(
48
- // @todo [BTRIA-583]: Let's add a decent exception code to log type map here.
49
  );
50
 
51
  return isset( $map[ $code ] ) ? $map[ $code ] : Tribe__Log::ERROR;
45
  */
46
  private function get_log_type_for_exception_code( $code ) {
47
  $map = array(
48
+ // @todo: let's add a decent exception code to log type map here
49
  );
50
 
51
  return isset( $map[ $code ] ) ? $map[ $code ] : Tribe__Log::ERROR;
common/src/Tribe/Extension.php CHANGED
@@ -42,7 +42,7 @@ abstract class Tribe__Extension {
42
  * resulting data is stored in this.
43
  * }
44
  */
45
- protected $args = [];
46
 
47
  /**
48
  * The various extension instances
@@ -53,7 +53,7 @@ abstract class Tribe__Extension {
53
  * @type object $child_class_name instance
54
  * }
55
  */
56
- private static $instances = [];
57
 
58
  /**
59
  * Get singleton instance of child class
@@ -101,7 +101,7 @@ abstract class Tribe__Extension {
101
  if ( did_action( $init_hook ) > 0 ) {
102
  $this->register();
103
  } else {
104
- add_action( $init_hook, [ $this, 'register' ] );
105
  }
106
  }
107
 
@@ -127,7 +127,7 @@ abstract class Tribe__Extension {
127
  * @param string|null $minimum_version Minimum acceptable version of plugin.
128
  */
129
  final protected function add_required_plugin( $main_class, $minimum_version = null ) {
130
- $this->set( [ 'requires', $main_class ], $minimum_version );
131
  }
132
 
133
  /**
@@ -143,7 +143,7 @@ abstract class Tribe__Extension {
143
  $this->get_plugin_file(),
144
  __( 'Tutorial', 'tribe-common' ),
145
  $url,
146
- [ 'class' => 'tribe-meta-link-extension' ]
147
  );
148
  }
149
 
@@ -160,54 +160,25 @@ abstract class Tribe__Extension {
160
  * Checks if the extension has permission to run, if so runs init() in child class
161
  */
162
  final public function register() {
163
- $extension_file = $this->get_plugin_file();
164
- $extension_class_name = $this->get( 'class' );
165
- $extension_version = $this->get_version();
166
- $plugins_required = $this->get( 'requires', [] );
167
-
168
  tribe_register_plugin(
169
- $extension_file,
170
- $extension_class_name,
171
- $extension_version,
172
- $plugins_required
173
  );
174
 
175
  $dependency = Tribe__Dependency::instance();
176
 
177
  // check requisite plugins are active for this extension
178
- $is_plugin_authorized = $dependency->has_requisite_plugins( $plugins_required );
179
-
180
- /**
181
- * Explicitly disallow an extension, such as a core plugin having absorbed/replaced its functionality.
182
- *
183
- * @since 4.12.2
184
- *
185
- * @param bool $is_disallowed    False by default.
186
- * @param string $extension_class_name This extension's class name string
187
- * (without initial forward slash for namespaced classes).
188
- * @param Tribe__Extension $this_instance This extension class' instance.
189
- */
190
- $is_disallowed = (bool) apply_filters( 'tribe_extension_is_disallowed', false, $extension_class_name, $this );
191
-
192
- if ( $is_disallowed ) {
193
- if (
194
- is_admin()
195
- && current_user_can( 'activate_plugins' )
196
- ) {
197
- tribe_notice( 'tribe_extension_is_disallowed', [ $this, 'notice_disallowed' ], [ 'type' => 'error' ] );
198
- }
199
-
200
- deactivate_plugins( $extension_file, true );
201
-
202
- return;
203
- }
204
 
205
  if ( $is_plugin_authorized ) {
206
  $this->init();
207
 
208
- // Add extension as active to dependency checker.
209
- $dependency->add_active_plugin( $extension_class_name, $extension_version, $extension_file );
210
  }
 
211
  }
212
 
213
  /**
@@ -258,7 +229,7 @@ abstract class Tribe__Extension {
258
  }
259
 
260
  /**
261
- * Gets the action/hook for the extensions' init().
262
  *
263
  * @return string Action/hook
264
  */
@@ -391,7 +362,7 @@ abstract class Tribe__Extension {
391
 
392
  // Class name was not set by debug_backtrace() hackery.
393
  if ( null === $class_name ) {
394
- tribe_notice( 'tribe_debug_backtrace_disabled', [ __CLASS__, 'notice_debug_backtrace' ] );
395
  }
396
 
397
  return $class_name;
@@ -407,31 +378,12 @@ abstract class Tribe__Extension {
407
  );
408
  }
409
 
410
- /**
411
- * Gets the error message about being explicitly disallowed.
412
- *
413
- * @since 4.12.2
414
- *
415
- * @return string Notice text.
416
- */
417
- public function notice_disallowed() {
418
- return sprintf(
419
- '<p><strong>%1$s:</strong> %2$s</p>',
420
- $this->get_name(),
421
- esc_html_x(
422
- "This extension has been programmatically disallowed. The most common reason is due to another The Events Calendar plugin having absorbed or replaced this extension's functionality. This extension plugin has been deactivated, and you should likely delete it.",
423
- 'extension disallowed',
424
- 'tribe-common'
425
- )
426
- );
427
- }
428
-
429
  /**
430
  * Prevent cloning the singleton with 'clone' operator
431
  *
432
  * @return void
433
  */
434
- final public function __clone() {
435
  _doing_it_wrong(
436
  __FUNCTION__,
437
  'Can not use this method on singletons.',
@@ -444,7 +396,7 @@ abstract class Tribe__Extension {
444
  *
445
  * @return void
446
  */
447
- final public function __wakeup() {
448
  _doing_it_wrong(
449
  __FUNCTION__,
450
  'Can not use this method on singletons.',
42
  * resulting data is stored in this.
43
  * }
44
  */
45
+ protected $args = array();
46
 
47
  /**
48
  * The various extension instances
53
  * @type object $child_class_name instance
54
  * }
55
  */
56
+ private static $instances = array();
57
 
58
  /**
59
  * Get singleton instance of child class
101
  if ( did_action( $init_hook ) > 0 ) {
102
  $this->register();
103
  } else {
104
+ add_action( $init_hook, array( $this, 'register' ) );
105
  }
106
  }
107
 
127
  * @param string|null $minimum_version Minimum acceptable version of plugin.
128
  */
129
  final protected function add_required_plugin( $main_class, $minimum_version = null ) {
130
+ $this->set( array( 'requires', $main_class ), $minimum_version );
131
  }
132
 
133
  /**
143
  $this->get_plugin_file(),
144
  __( 'Tutorial', 'tribe-common' ),
145
  $url,
146
+ array( 'class' => 'tribe-meta-link-extension' )
147
  );
148
  }
149
 
160
  * Checks if the extension has permission to run, if so runs init() in child class
161
  */
162
  final public function register() {
 
 
 
 
 
163
  tribe_register_plugin(
164
+ $this->get_plugin_file(),
165
+ $this->get( 'class' ),
166
+ $this->get_version(),
167
+ $this->get( 'requires', array() )
168
  );
169
 
170
  $dependency = Tribe__Dependency::instance();
171
 
172
  // check requisite plugins are active for this extension
173
+ $is_plugin_authorized = $dependency->has_requisite_plugins( $this->get( 'requires', array() ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
 
175
  if ( $is_plugin_authorized ) {
176
  $this->init();
177
 
178
+ //add extension as active to dependency checker
179
+ $dependency->add_active_plugin( $this->get( 'class' ), $this->get_version(), $this->get_plugin_file() );
180
  }
181
+
182
  }
183
 
184
  /**
229
  }
230
 
231
  /**
232
+ * Get's the action/hook for the extensions init()
233
  *
234
  * @return string Action/hook
235
  */
362
 
363
  // Class name was not set by debug_backtrace() hackery.
364
  if ( null === $class_name ) {
365
+ tribe_notice( 'tribe_debug_backtrace_disabled', array( __CLASS__, 'notice_debug_backtrace' ) );
366
  }
367
 
368
  return $class_name;
378
  );
379
  }
380
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
381
  /**
382
  * Prevent cloning the singleton with 'clone' operator
383
  *
384
  * @return void
385
  */
386
+ final private function __clone() {
387
  _doing_it_wrong(
388
  __FUNCTION__,
389
  'Can not use this method on singletons.',
396
  *
397
  * @return void
398
  */
399
+ final private function __wakeup() {
400
  _doing_it_wrong(
401
  __FUNCTION__,
402
  'Can not use this method on singletons.',
common/src/Tribe/Extension_Loader.php CHANGED
@@ -15,7 +15,7 @@ class Tribe__Extension_Loader {
15
  * @param array $plugin_basename Plugin header key/value pairs.
16
  * }
17
  */
18
- private $plugin_data = [];
19
 
20
  /**
21
  * Class instance.
@@ -51,7 +51,7 @@ class Tribe__Extension_Loader {
51
  * @return array Prefixes
52
  */
53
  public static function get_extension_file_prefixes() {
54
- $prefixes = [ 'tribe-ext-' ];
55
 
56
  /**
57
  * Filter which plugin folder prefixes are considered tribe extensions.
@@ -97,17 +97,13 @@ class Tribe__Extension_Loader {
97
 
98
  // Class instantiation.
99
  if ( class_exists( $p_data['ExtensionClass'] ) ) {
100
- $extension_args = [
101
  'file' => $plugin_file,
102
  'plugin_data' => $p_data,
103
- ];
104
 
105
  // Instantiates extension instance.
106
- $extension = call_user_func(
107
- [ $p_data['ExtensionClass'], 'instance' ],
108
- $p_data['ExtensionClass'],
109
- $extension_args
110
- );
111
 
112
  if ( null !== $extension ) {
113
  $success = true;
@@ -145,7 +141,7 @@ class Tribe__Extension_Loader {
145
  *
146
  * @return void
147
  */
148
- public function __clone() {
149
  _doing_it_wrong(
150
  __FUNCTION__,
151
  'Can not use this method on singletons.',
@@ -158,7 +154,7 @@ class Tribe__Extension_Loader {
158
  *
159
  * @return void
160
  */
161
- public function __wakeup() {
162
  _doing_it_wrong(
163
  __FUNCTION__,
164
  'Can not use this method on singletons.',
15
  * @param array $plugin_basename Plugin header key/value pairs.
16
  * }
17
  */
18
+ private $plugin_data = array();
19
 
20
  /**
21
  * Class instance.
51
  * @return array Prefixes
52
  */
53
  public static function get_extension_file_prefixes() {
54
+ $prefixes = array( 'tribe-ext-' );
55
 
56
  /**
57
  * Filter which plugin folder prefixes are considered tribe extensions.
97
 
98
  // Class instantiation.
99
  if ( class_exists( $p_data['ExtensionClass'] ) ) {
100
+ $extension_args = array(
101
  'file' => $plugin_file,
102
  'plugin_data' => $p_data,
103
+ );
104
 
105
  // Instantiates extension instance.
106
+ $extension = call_user_func( array( $p_data['ExtensionClass'], 'instance' ), $p_data['ExtensionClass'], $extension_args );
 
 
 
 
107
 
108
  if ( null !== $extension ) {
109
  $success = true;
141
  *
142
  * @return void
143
  */
144
+ private function __clone() {
145
  _doing_it_wrong(
146
  __FUNCTION__,
147
  'Can not use this method on singletons.',
154
  *
155
  * @return void
156
  */
157
+ private function __wakeup() {
158
  _doing_it_wrong(
159
  __FUNCTION__,
160
  'Can not use this method on singletons.',
common/src/Tribe/Field.php CHANGED
@@ -68,11 +68,11 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
68
  public function __construct( $id, $field, $value = null ) {
69
 
70
  // setup the defaults
71
- $this->defaults = [
72
  'type' => 'html',
73
  'name' => $id,
74
- 'fieldset_attributes' => [],
75
- 'attributes' => [],
76
  'class' => null,
77
  'label' => null,
78
  'label_attributes' => null,
@@ -90,10 +90,10 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
90
  'clear_after' => true,
91
  'tooltip_first' => false,
92
  'allow_clear' => false,
93
- ];
94
 
95
  // a list of valid field types, to prevent screwy behavior
96
- $this->valid_field_types = [
97
  'heading',
98
  'html',
99
  'text',
@@ -107,10 +107,9 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
107
  'dropdown_select2', // Deprecated use `dropdown`
108
  'dropdown_chosen', // Deprecated use `dropdown`
109
  'license_key',
110
- 'number',
111
  'wrapped_html',
112
  'email',
113
- ];
114
 
115
  $this->valid_field_types = apply_filters( 'tribe_valid_field_types', $this->valid_field_types );
116
 
@@ -124,55 +123,55 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
124
  $placeholder = esc_attr( $args['placeholder'] );
125
  $class = $this->sanitize_class_attribute( $args['class'] );
126
  $label = wp_kses(
127
- $args['label'], [
128
- 'a' => [ 'href' => [], 'title' => [] ],
129
- 'br' => [],
130
- 'em' => [],
131
- 'strong' => [],
132
- 'b' => [],
133
- 'i' => [],
134
- 'u' => [],
135
- 'img' => [
136
- 'title' => [],
137
- 'src' => [],
138
- 'alt' => [],
139
- ],
140
- 'span' => [ 'class' => [] ],
141
- ]
142
  );
143
  $label_attributes = $args['label_attributes'];
144
  $tooltip = wp_kses(
145
- $args['tooltip'], [
146
- 'a' => [ 'href' => [], 'title' => [], 'target' => [] ],
147
- 'br' => [],
148
- 'em' => [],
149
- 'strong' => [],
150
- 'b' => [],
151
- 'i' => [],
152
- 'u' => [],
153
- 'img' => [
154
- 'title' => [],
155
- 'src' => [],
156
- 'alt' => [],
157
- ],
158
- 'code' => [ 'span' => [] ],
159
- 'span' => [],
160
- ]
161
  );
162
- $fieldset_attributes = [];
163
  if ( is_array( $args['fieldset_attributes'] ) ) {
164
  foreach ( $args['fieldset_attributes'] as $key => $val ) {
165
  $fieldset_attributes[ $key ] = esc_attr( $val );
166
  }
167
  }
168
- $attributes = [];
169
  if ( is_array( $args['attributes'] ) ) {
170
  foreach ( $args['attributes'] as $key => $val ) {
171
  $attributes[ $key ] = esc_attr( $val );
172
  }
173
  }
174
  if ( is_array( $args['options'] ) ) {
175
- $options = [];
176
  foreach ( $args['options'] as $key => $val ) {
177
  $options[ $key ] = $val;
178
  }
@@ -222,7 +221,7 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
222
  } elseif ( in_array( $this->type, $this->valid_field_types ) ) {
223
 
224
  // the specified type exists, run the appropriate method
225
- $field = call_user_func( [ $this, $this->type ] );
226
 
227
  // filter the output
228
  $field = apply_filters( 'tribe_field_output_' . $this->type, $field, $this->id, $this );
@@ -276,8 +275,8 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
276
  if ( $this->label ) {
277
  if ( isset( $this->label_attributes ) ) {
278
  $this->label_attributes['class'] = isset( $this->label_attributes['class'] ) ?
279
- implode( ' ', array_merge( [ 'tribe-field-label' ], $this->label_attributes['class'] ) ) :
280
- [ 'tribe-field-label' ];
281
  $this->label_attributes = $this->concat_attributes( $this->label_attributes );
282
  }
283
  $return = sprintf( '<legend class="tribe-field-label" %s>%s</legend>', $this->label_attributes, $this->label );
@@ -460,7 +459,6 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
460
  $field .= $this->do_field_name();
461
  $field .= $this->do_field_value();
462
  $field .= $this->do_field_placeholder();
463
- $field .= $this->do_field_attributes();
464
  $field .= '/>';
465
  $field .= $this->do_screen_reader_label();
466
  $field .= $this->do_field_div_end();
@@ -480,7 +478,6 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
480
  $field .= $this->do_field_div_start();
481
  $field .= '<textarea';
482
  $field .= $this->do_field_name();
483
- $field .= $this->do_field_attributes();
484
  $field .= '>';
485
  $field .= esc_html( stripslashes( $this->value ) );
486
  $field .= '</textarea>';
@@ -497,10 +494,10 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
497
  * @return string the field
498
  */
499
  public function wysiwyg() {
500
- $settings = [
501
  'teeny' => true,
502
  'wpautop' => true,
503
- ];
504
  ob_start();
505
  wp_editor( html_entity_decode( ( $this->value ) ), $this->name, $settings );
506
  $editor = ob_get_clean();
@@ -561,9 +558,9 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
561
 
562
  if ( ! is_array( $this->value ) ) {
563
  if ( ! empty( $this->value ) ) {
564
- $this->value = [ $this->value ];
565
  } else {
566
- $this->value = [];
567
  }
568
  }
569
 
@@ -623,7 +620,6 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
623
  if ( empty( $this->allow_clear ) ) {
624
  $field .= " data-prevent-clear='true'";
625
  }
626
- $field .= $this->do_field_attributes();
627
  $field .= '>';
628
  foreach ( $this->options as $option_id => $title ) {
629
  $field .= '<option value="' . esc_attr( $option_id ) . '"';
@@ -776,11 +772,11 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
776
  }
777
 
778
  /**
779
- * Concatenates an array of attributes to use in HTML tags.
780
  *
781
  * Example usage:
782
  *
783
- * $attrs = [ 'class' => ['one', 'two'], 'style' => 'color:red;' ];
784
  * printf ( '<p %s>%s</p>', tribe_concat_attributes( $attrs ), 'bar' );
785
  *
786
  * // <p> class="one two" style="color:red;">bar</p>
@@ -791,12 +787,12 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
791
  *
792
  * @return string The concatenated attributes.
793
  */
794
- protected function concat_attributes( array $attributes = [] ) {
795
  if ( empty( $attributes ) ) {
796
  return '';
797
  }
798
 
799
- $concat = [];
800
  foreach ( $attributes as $attribute => $value ) {
801
  if ( is_array( $value ) ) {
802
  $value = implode( ' ', $value );
@@ -821,7 +817,7 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
821
  }
822
 
823
  /**
824
- * Sanitizes a space-separated or array of classes.
825
  *
826
  * @since 4.7.7
827
  *
68
  public function __construct( $id, $field, $value = null ) {
69
 
70
  // setup the defaults
71
+ $this->defaults = array(
72
  'type' => 'html',
73
  'name' => $id,
74
+ 'fieldset_attributes' => array(),
75
+ 'attributes' => array(),
76
  'class' => null,
77
  'label' => null,
78
  'label_attributes' => null,
90
  'clear_after' => true,
91
  'tooltip_first' => false,
92
  'allow_clear' => false,
93
+ );
94
 
95
  // a list of valid field types, to prevent screwy behavior
96
+ $this->valid_field_types = array(
97
  'heading',
98
  'html',
99
  'text',
107
  'dropdown_select2', // Deprecated use `dropdown`
108
  'dropdown_chosen', // Deprecated use `dropdown`
109
  'license_key',
 
110
  'wrapped_html',
111
  'email',
112
+ );
113
 
114
  $this->valid_field_types = apply_filters( 'tribe_valid_field_types', $this->valid_field_types );
115
 
123
  $placeholder = esc_attr( $args['placeholder'] );
124
  $class = $this->sanitize_class_attribute( $args['class'] );
125
  $label = wp_kses(
126
+ $args['label'], array(
127
+ 'a' => array( 'href' => array(), 'title' => array() ),
128
+ 'br' => array(),
129
+ 'em' => array(),
130
+ 'strong' => array(),
131
+ 'b' => array(),
132
+ 'i' => array(),
133
+ 'u' => array(),
134
+ 'img' => array(
135
+ 'title' => array(),
136
+ 'src' => array(),
137
+ 'alt' => array(),
138
+ ),
139
+ 'span' => array( 'class' => array() ),
140
+ )
141
  );
142
  $label_attributes = $args['label_attributes'];
143
  $tooltip = wp_kses(
144
+ $args['tooltip'], array(
145
+ 'a' => array( 'href' => array(), 'title' => array(), 'target' => array() ),
146
+ 'br' => array(),
147
+ 'em' => array(),
148
+ 'strong' => array(),
149
+ 'b' => array(),
150
+ 'i' => array(),
151
+ 'u' => array(),
152
+ 'img' => array(
153
+ 'title' => array(),
154
+ 'src' => array(),
155
+ 'alt' => array(),
156
+ ),
157
+ 'code' => array( 'span' => array() ),
158
+ 'span' => array(),
159
+ )
160
  );
161
+ $fieldset_attributes = array();
162
  if ( is_array( $args['fieldset_attributes'] ) ) {
163
  foreach ( $args['fieldset_attributes'] as $key => $val ) {
164
  $fieldset_attributes[ $key ] = esc_attr( $val );
165
  }
166
  }
167
+ $attributes = array();
168
  if ( is_array( $args['attributes'] ) ) {
169
  foreach ( $args['attributes'] as $key => $val ) {
170
  $attributes[ $key ] = esc_attr( $val );
171
  }
172
  }
173
  if ( is_array( $args['options'] ) ) {
174
+ $options = array();
175
  foreach ( $args['options'] as $key => $val ) {
176
  $options[ $key ] = $val;
177
  }
221
  } elseif ( in_array( $this->type, $this->valid_field_types ) ) {
222
 
223
  // the specified type exists, run the appropriate method
224
+ $field = call_user_func( array( $this, $this->type ) );
225
 
226
  // filter the output
227
  $field = apply_filters( 'tribe_field_output_' . $this->type, $field, $this->id, $this );
275
  if ( $this->label ) {
276
  if ( isset( $this->label_attributes ) ) {
277
  $this->label_attributes['class'] = isset( $this->label_attributes['class'] ) ?
278
+ implode( ' ', array_merge( array( 'tribe-field-label' ), $this->label_attributes['class'] ) ) :
279
+ array( 'tribe-field-label' );
280
  $this->label_attributes = $this->concat_attributes( $this->label_attributes );
281
  }
282
  $return = sprintf( '<legend class="tribe-field-label" %s>%s</legend>', $this->label_attributes, $this->label );
459
  $field .= $this->do_field_name();
460
  $field .= $this->do_field_value();
461
  $field .= $this->do_field_placeholder();
 
462
  $field .= '/>';
463
  $field .= $this->do_screen_reader_label();
464
  $field .= $this->do_field_div_end();
478
  $field .= $this->do_field_div_start();
479
  $field .= '<textarea';
480
  $field .= $this->do_field_name();
 
481
  $field .= '>';
482
  $field .= esc_html( stripslashes( $this->value ) );
483
  $field .= '</textarea>';
494
  * @return string the field
495
  */
496
  public function wysiwyg() {
497
+ $settings = array(
498
  'teeny' => true,
499
  'wpautop' => true,
500
+ );
501
  ob_start();
502
  wp_editor( html_entity_decode( ( $this->value ) ), $this->name, $settings );
503
  $editor = ob_get_clean();
558
 
559
  if ( ! is_array( $this->value ) ) {
560
  if ( ! empty( $this->value ) ) {
561
+ $this->value = array( $this->value );
562
  } else {
563
+ $this->value = array();
564
  }
565
  }
566
 
620
  if ( empty( $this->allow_clear ) ) {
621
  $field .= " data-prevent-clear='true'";
622
  }
 
623
  $field .= '>';
624
  foreach ( $this->options as $option_id => $title ) {
625
  $field .= '<option value="' . esc_attr( $option_id ) . '"';
772
  }
773
 
774
  /**
775
+ * Concatenatates an array of attributes to use in HTML tags.
776
  *
777
  * Example usage:
778
  *
779
+ * $attrs = array( 'class' => array('one', 'two'), 'style' => 'color:red;' );
780
  * printf ( '<p %s>%s</p>', tribe_concat_attributes( $attrs ), 'bar' );
781
  *
782
  * // <p> class="one two" style="color:red;">bar</p>
787
  *
788
  * @return string The concatenated attributes.
789
  */
790
+ protected function concat_attributes( array $attributes = array() ) {
791
  if ( empty( $attributes ) ) {
792
  return '';
793
  }
794
 
795
+ $concat = array();
796
  foreach ( $attributes as $attribute => $value ) {
797
  if ( is_array( $value ) ) {
798
  $value = implode( ' ', $value );
817
  }
818
 
819
  /**
820
+ * Sanitizes a space-separated or arrray of classes.
821
  *
822
  * @since 4.7.7
823
  *
common/src/Tribe/Image/Uploader.php CHANGED
@@ -153,14 +153,11 @@ 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
- [
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 ) ) {
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 ) ) {
common/src/Tribe/JSON_LD/Abstract.php CHANGED
@@ -19,14 +19,14 @@ abstract class Tribe__JSON_LD__Abstract {
19
  *
20
  * @var array
21
  */
22
- private static $instances = [];
23
 
24
  /**
25
  * Holder for the Already fetched Posts
26
  *
27
  * @var array
28
  */
29
- protected static $posts = [];
30
 
31
  /**
32
  * Holder for a post when it has multiple types
@@ -35,7 +35,7 @@ abstract class Tribe__JSON_LD__Abstract {
35
  *
36
  * @var array
37
  */
38
- protected static $types = [];
39
 
40
  /**
41
  * The class singleton constructor.
@@ -72,24 +72,24 @@ abstract class Tribe__JSON_LD__Abstract {
72
  * be generated, the `$post` parameter is not a valid post ID or object or the data
73
  * for the post has been fetched already.
74
  */
75
- public function get_data( $post = null, $args = [] ) {
76
  $post_id = Tribe__Main::post_id_helper( $post );
77
  if ( ! $post_id ) {
78
- return [];
79
  }
80
 
81
  // This prevents a JSON_LD from existing twice one the same page
82
  if ( $this->exists( $post_id ) && $this->type_exists( $post_id, $this->type ) ) {
83
- return [];
84
  }
85
 
86
  $post = get_post( $post_id );
87
 
88
  if ( empty( $post->ID ) ) {
89
- return [];
90
  }
91
 
92
- $data = (object) [];
93
 
94
  // We may need to prevent the context to be triggered
95
  if ( ! isset( $args['context'] ) || false !== $args['context'] ) {
@@ -112,7 +112,7 @@ abstract class Tribe__JSON_LD__Abstract {
112
 
113
  // Index by ID: this will allow filter code to identify the actual event being referred to
114
  // without injecting an additional property
115
- return [ $post->ID => $data ];
116
  }
117
 
118
  /**
@@ -149,7 +149,7 @@ abstract class Tribe__JSON_LD__Abstract {
149
  *
150
  * @return string
151
  */
152
- public function get_markup( $post = null, $args = [] ) {
153
  $data = $this->get_data( $post, $args );
154
  $type = strtolower( esc_attr( $this->type ) );
155
  $this->set_type( $post, $type );
@@ -182,7 +182,7 @@ abstract class Tribe__JSON_LD__Abstract {
182
  return ! empty( $html ) ? implode( "\r\n", $html ) : '';
183
  }
184
 
185
- public function markup( $post = null, $args = [] ) {
186
  $html = $this->get_markup( $post, $args );
187
 
188
  /**
@@ -296,7 +296,7 @@ abstract class Tribe__JSON_LD__Abstract {
296
  }
297
 
298
  if ( empty( self::$types[ $id ] ) ) {
299
- self::$types[ $id ] = [ $this->type ];
300
  } else {
301
  self::$types[ $id ][] = $this->type;
302
  }
@@ -343,8 +343,8 @@ abstract class Tribe__JSON_LD__Abstract {
343
  * Added for testing purposes.
344
  */
345
  public static function unregister_all() {
346
- self::$posts = [];
347
- self::$types = [];
348
  }
349
 
350
  /**
19
  *
20
  * @var array
21
  */
22
+ private static $instances = array();
23
 
24
  /**
25
  * Holder for the Already fetched Posts
26
  *
27
  * @var array
28
  */
29
+ protected static $posts = array();
30
 
31
  /**
32
  * Holder for a post when it has multiple types
35
  *
36
  * @var array
37
  */
38
+ protected static $types = array();
39
 
40
  /**
41
  * The class singleton constructor.
72
  * be generated, the `$post` parameter is not a valid post ID or object or the data
73
  * for the post has been fetched already.
74
  */
75
+ public function get_data( $post = null, $args = array() ) {
76
  $post_id = Tribe__Main::post_id_helper( $post );
77
  if ( ! $post_id ) {
78
+ return array();
79
  }
80
 
81
  // This prevents a JSON_LD from existing twice one the same page
82
  if ( $this->exists( $post_id ) && $this->type_exists( $post_id, $this->type ) ) {
83
+ return array();
84
  }
85
 
86
  $post = get_post( $post_id );
87
 
88
  if ( empty( $post->ID ) ) {
89
+ return array();
90
  }
91
 
92
+ $data = (object) array();
93
 
94
  // We may need to prevent the context to be triggered
95
  if ( ! isset( $args['context'] ) || false !== $args['context'] ) {
112
 
113
  // Index by ID: this will allow filter code to identify the actual event being referred to
114
  // without injecting an additional property
115
+ return array( $post->ID => $data );
116
  }
117
 
118
  /**
149
  *
150
  * @return string
151
  */
152
+ public function get_markup( $post = null, $args = array() ) {
153
  $data = $this->get_data( $post, $args );
154
  $type = strtolower( esc_attr( $this->type ) );
155
  $this->set_type( $post, $type );
182
  return ! empty( $html ) ? implode( "\r\n", $html ) : '';
183
  }
184
 
185
+ public function markup( $post = null, $args = array() ) {
186
  $html = $this->get_markup( $post, $args );
187
 
188
  /**
296
  }
297
 
298
  if ( empty( self::$types[ $id ] ) ) {
299
+ self::$types[ $id ] = array( $this->type );
300
  } else {
301
  self::$types[ $id ][] = $this->type;
302
  }
343
  * Added for testing purposes.
344
  */
345
  public static function unregister_all() {
346
+ self::$posts = array();
347
+ self::$types = array();
348
  }
349
 
350
  /**
common/src/Tribe/Languages/Locations.php CHANGED
@@ -16,38 +16,14 @@ class Tribe__Languages__Locations {
16
  *
17
  * Adds array to object cache to speed up subsequent retrievals.
18
  *
19
- * @since 4.13.0 add $escape param.
20
- *
21
- * @param bool $escape Weather to escape for translations or not.
22
- *
23
  * @return array {
24
  * List of countries
25
  *
26
  * @type string $country_code Country name.
27
  * }
28
  */
29
- public function get_countries( $escape = false ) {
30
- /**
31
- * @var Tribe__Cache $cache
32
- */
33
- $cache = tribe( 'cache' );
34
- $cache_key = 'tribe_country_list' . ( $escape ? '-escaped' : '' );
35
- $countries = $cache->get( $cache_key , '', null );
36
-
37
- if ( null === $countries ) {
38
- $countries = $this->build_country_array();
39
-
40
- if ( $escape ) {
41
- $countries = array_map( static function( $country ) {
42
- return html_entity_decode( $country, ENT_QUOTES );
43
- }, $countries );
44
- }
45
-
46
- // Actually set the cache in case it's not in place.
47
- $cache->set( $cache_key, $countries );
48
- }
49
-
50
- return $countries;
51
  }
52
 
53
  /**
@@ -62,7 +38,7 @@ class Tribe__Languages__Locations {
62
  * }
63
  */
64
  public function get_us_states() {
65
- return tribe( 'cache' )->get( 'tribe_us_states_list', '', [ $this, 'build_us_states_array' ] );
66
  }
67
 
68
  /**
@@ -75,7 +51,7 @@ class Tribe__Languages__Locations {
75
  * }
76
  */
77
  public function build_country_array() {
78
- $countries = [
79
  'US' => esc_html__( 'United States', 'tribe-common' ),
80
  'AF' => esc_html__( 'Afghanistan', 'tribe-common' ),
81
  'AX' => esc_html__( '&Aring;land Islands', 'tribe-common' ),
@@ -319,7 +295,7 @@ class Tribe__Languages__Locations {
319
  'YE' => esc_html__( 'Yemen', 'tribe-common' ),
320
  'ZM' => esc_html__( 'Zambia', 'tribe-common' ),
321
  'ZW' => esc_html__( 'Zimbabwe', 'tribe-common' ),
322
- ];
323
 
324
  // Perform a natural sort, ensures the countries are in the expected order even once translated.
325
  natsort( $countries );
@@ -344,7 +320,7 @@ class Tribe__Languages__Locations {
344
  * }
345
  */
346
  public function build_us_states_array() {
347
- $states = [
348
  'AL' => esc_html__( 'Alabama', 'tribe-common' ),
349
  'AK' => esc_html__( 'Alaska', 'tribe-common' ),
350
  'AZ' => esc_html__( 'Arizona', 'tribe-common' ),
@@ -355,7 +331,7 @@ class Tribe__Languages__Locations {
355
  'DE' => esc_html__( 'Delaware', 'tribe-common' ),
356
  'DC' => esc_html__( 'District of Columbia', 'tribe-common' ),
357
  'FL' => esc_html__( 'Florida', 'tribe-common' ),
358
- 'GA' => esc_html_x( 'Georgia', 'The US state Georgia', 'tribe-common' ),
359
  'HI' => esc_html__( 'Hawaii', 'tribe-common' ),
360
  'ID' => esc_html__( 'Idaho', 'tribe-common' ),
361
  'IL' => esc_html__( 'Illinois', 'tribe-common' ),
@@ -396,7 +372,7 @@ class Tribe__Languages__Locations {
396
  'WV' => esc_html__( 'West Virginia', 'tribe-common' ),
397
  'WI' => esc_html__( 'Wisconsin', 'tribe-common' ),
398
  'WY' => esc_html__( 'Wyoming', 'tribe-common' ),
399
- ];
400
 
401
  // Perform a natural sort, ensures the states are in the expected order even once translated.
402
  natsort( $states );
16
  *
17
  * Adds array to object cache to speed up subsequent retrievals.
18
  *
 
 
 
 
19
  * @return array {
20
  * List of countries
21
  *
22
  * @type string $country_code Country name.
23
  * }
24
  */
25
+ public function get_countries() {
26
+ return tribe( 'cache' )->get( 'tribe_country_list', '', array( $this, 'build_country_array' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  }
28
 
29
  /**
38
  * }
39
  */
40
  public function get_us_states() {
41
+ return tribe( 'cache' )->get( 'tribe_us_states_list', '', array( $this, 'build_us_states_array' ) );
42
  }
43
 
44
  /**
51
  * }
52
  */
53
  public function build_country_array() {
54
+ $countries = array(
55
  'US' => esc_html__( 'United States', 'tribe-common' ),
56
  'AF' => esc_html__( 'Afghanistan', 'tribe-common' ),
57
  'AX' => esc_html__( '&Aring;land Islands', 'tribe-common' ),
295
  'YE' => esc_html__( 'Yemen', 'tribe-common' ),
296
  'ZM' => esc_html__( 'Zambia', 'tribe-common' ),
297
  'ZW' => esc_html__( 'Zimbabwe', 'tribe-common' ),
298
+ );
299
 
300
  // Perform a natural sort, ensures the countries are in the expected order even once translated.
301
  natsort( $countries );
320
  * }
321
  */
322
  public function build_us_states_array() {
323
+ $states = array(
324
  'AL' => esc_html__( 'Alabama', 'tribe-common' ),
325
  'AK' => esc_html__( 'Alaska', 'tribe-common' ),
326
  'AZ' => esc_html__( 'Arizona', 'tribe-common' ),
331
  'DE' => esc_html__( 'Delaware', 'tribe-common' ),
332
  'DC' => esc_html__( 'District of Columbia', 'tribe-common' ),
333
  'FL' => esc_html__( 'Florida', 'tribe-common' ),
334
+ 'GA' => esc_html_x( 'Georgia', 'The US state Georgia','tribe-common' ),
335
  'HI' => esc_html__( 'Hawaii', 'tribe-common' ),
336
  'ID' => esc_html__( 'Idaho', 'tribe-common' ),
337
  'IL' => esc_html__( 'Illinois', 'tribe-common' ),
372
  'WV' => esc_html__( 'West Virginia', 'tribe-common' ),
373
  'WI' => esc_html__( 'Wisconsin', 'tribe-common' ),
374
  'WY' => esc_html__( 'Wyoming', 'tribe-common' ),
375
+ );
376
 
377
  // Perform a natural sort, ensures the states are in the expected order even once translated.
378
  natsort( $states );
common/src/Tribe/Languages/Recaptcha_Map.php CHANGED
@@ -16,7 +16,7 @@ class Tribe__Languages__Recaptcha_Map implements Tribe__Languages__Map_Interface
16
  * e.g. [ 'pt-BR' => 'Portuguese (Brazil)' ]
17
  */
18
  public function get_supported_languages() {
19
- return [
20
  'ar' => 'Arabic',
21
  'af' => 'Afrikaans',
22
  'am' => 'Amharic',
@@ -87,7 +87,7 @@ class Tribe__Languages__Recaptcha_Map implements Tribe__Languages__Map_Interface
87
  'ur' => 'Urdu',
88
  'vi' => 'Vietnamese',
89
  'zu' => 'Zulu',
90
- ];
91
  }
92
 
93
  /**
16
  * e.g. [ 'pt-BR' => 'Portuguese (Brazil)' ]
17
  */
18
  public function get_supported_languages() {
19
+ return array(
20
  'ar' => 'Arabic',
21
  'af' => 'Afrikaans',
22
  'am' => 'Amharic',
87
  'ur' => 'Urdu',
88
  'vi' => 'Vietnamese',
89
  'zu' => 'Zulu',
90
+ );
91
  }
92
 
93
  /**
common/src/Tribe/Log.php CHANGED
@@ -36,7 +36,7 @@ class Tribe__Log {
36
  *
37
  * @var array
38
  */
39
- protected $levels = [];
40
 
41
  /**
42
  * Alternative representation of the $levels property allowing quick look
@@ -44,14 +44,15 @@ class Tribe__Log {
44
  *
45
  * @var array
46
  */
47
- protected $prioritized_levels = [];
48
 
49
  /**
50
  * Instantiated loggers, stored for re-use.
51
  *
52
  * @var array
53
  */
54
- protected $loggers = [];
 
55
 
56
  public function __construct() {
57
  if ( is_admin() ) {
@@ -74,7 +75,7 @@ class Tribe__Log {
74
  */
75
  protected function log_cleanup() {
76
  $this->register_cleanup_task();
77
- do_action( self::CLEANUP, [ $this, 'do_cleanup' ] );
78
  }
79
 
80
  /**
@@ -162,7 +163,7 @@ class Tribe__Log {
162
  $original_type = $type;
163
 
164
  // some levels are really just debug information
165
- $debug_types = [ self::SUCCESS, self::COLORIZE ];
166
 
167
  if ( in_array( $type, $debug_types ) ) {
168
  $type = self::DEBUG;
@@ -218,10 +219,10 @@ class Tribe__Log {
218
  * @return array
219
  */
220
  public function get_logging_engines() {
221
- $available_engines = [];
222
- $bundled_engines = [
223
  'Tribe__Log__File_Logger',
224
- ];
225
 
226
  foreach ( $bundled_engines as $engine_class ) {
227
  $engine = $this->get_engine( $engine_class );
@@ -383,12 +384,12 @@ class Tribe__Log {
383
  *
384
  * @param array $logging_levels
385
  */
386
- $this->levels = (array) apply_filters( 'tribe_common_logging_levels', [
387
- [ self::DISABLE, __( 'Disabled', 'tribe-common' ) ],
388
- [ self::ERROR, __( 'Only errors', 'tribe-common' ) ],
389
- [ self::WARNING, __( 'Warnings and errors', 'tribe-common' ) ],
390
- [ self::DEBUG, __( 'Full debug (all events)', 'tribe-common' ) ],
391
- ] );
392
  }
393
 
394
  return $this->levels;
36
  *
37
  * @var array
38
  */
39
+ protected $levels = array();
40
 
41
  /**
42
  * Alternative representation of the $levels property allowing quick look
44
  *
45
  * @var array
46
  */
47
+ protected $prioritized_levels = array();
48
 
49
  /**
50
  * Instantiated loggers, stored for re-use.
51
  *
52
  * @var array
53
  */
54
+ protected $loggers = array();
55
+
56
 
57
  public function __construct() {
58
  if ( is_admin() ) {
75
  */
76
  protected function log_cleanup() {
77
  $this->register_cleanup_task();
78
+ do_action( self::CLEANUP, array( $this, 'do_cleanup' ) );
79
  }
80
 
81
  /**
163
  $original_type = $type;
164
 
165
  // some levels are really just debug information
166
+ $debug_types = array( self::SUCCESS, self::COLORIZE );
167
 
168
  if ( in_array( $type, $debug_types ) ) {
169
  $type = self::DEBUG;
219
  * @return array
220
  */
221
  public function get_logging_engines() {
222
+ $available_engines = array();
223
+ $bundled_engines = array(
224
  'Tribe__Log__File_Logger',
225
+ );
226
 
227
  foreach ( $bundled_engines as $engine_class ) {
228
  $engine = $this->get_engine( $engine_class );
384
  *
385
  * @param array $logging_levels
386
  */
387
+ $this->levels = (array) apply_filters( 'tribe_common_logging_levels', array(
388
+ array( self::DISABLE, __( 'Disabled', 'tribe-common' ) ),
389
+ array( self::ERROR, __( 'Only errors', 'tribe-common' ) ),
390
+ array( self::WARNING, __( 'Warnings and errors', 'tribe-common' ) ),
391
+ array( self::DEBUG, __( 'Full debug (all events)', 'tribe-common' ) ),
392
+ ) );
393
  }
394
 
395
  return $this->levels;
common/src/Tribe/Log/Action_Logger.php CHANGED
@@ -78,7 +78,7 @@ class Action_Logger implements \Tribe__Log__Logger {
78
  *
79
  * @since 4.9.16
80
  */
81
- public function retrieve( $limit = 0, array $args = [] ) {
82
  return [
83
  [
84
  'message' => __(
78
  *
79
  * @since 4.9.16
80
  */
81
+ public function retrieve( $limit = 0, array $args = array() ) {
82
  return [
83
  [
84
  'message' => __(
common/src/Tribe/Log/Admin.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php
2
  class Tribe__Log__Admin {
3
  public function __construct() {
4
- add_action( 'wp_ajax_tribe_logging_controls', [ $this, 'listen' ] );
5
- add_action( 'init', [ $this, 'serve_log_downloads' ] );
6
- add_action( 'plugins_loaded', [ $this, 'register_script' ] );
7
  }
8
 
9
  /**
@@ -29,11 +29,11 @@ class Tribe__Log__Admin {
29
  * an appropriate response.
30
  */
31
  public function listen() {
32
- $fields = wp_parse_args( $_POST, [
33
  'check' => '',
34
  'log-level' => '',
35
  'log-engine' => '',
36
- ] );
37
 
38
  foreach ( $fields as &$single_field ) {
39
  $single_field = sanitize_text_field( $single_field );
@@ -58,9 +58,9 @@ class Tribe__Log__Admin {
58
  */
59
  do_action( 'tribe_common_updated_log_settings' );
60
 
61
- $data = [
62
  'logs' => $this->get_available_logs(),
63
- ];
64
 
65
  if ( ! empty( $fields['log-view'] ) ) {
66
  $data['entries'] = $this->get_log_entries( $fields['log-view'] );
@@ -103,17 +103,17 @@ class Tribe__Log__Admin {
103
  Tribe__Main::instance(),
104
  'tribe-common-logging-controls',
105
  'admin-log-controls.js',
106
- [ 'jquery' ],
107
  'admin_enqueue_scripts',
108
- [
109
- 'conditionals' => [ Tribe__Admin__Help_Page::instance(), 'is_current_page' ],
110
- 'localize' => (object) [
111
  'name' => 'tribe_logger_data',
112
- 'data' => [
113
  'check' => wp_create_nonce( 'logging-controls' ),
114
- ],
115
- ],
116
- ]
117
  );
118
  }
119
 
@@ -130,7 +130,7 @@ class Tribe__Log__Admin {
130
  }
131
 
132
  if ( empty( $available_logs ) ) {
133
- return [ '' => _x( 'None currently available', 'log selector', 'tribe-common' ) ];
134
  }
135
 
136
  return $available_logs;
@@ -145,10 +145,10 @@ class Tribe__Log__Admin {
145
  $available_engines = $this->log_manager()->get_logging_engines();
146
 
147
  if ( empty( $available_engines ) ) {
148
- return [ '' => _x( 'None currently available', 'log engines', 'tribe-common' ) ];
149
  }
150
 
151
- $engine_list = [];
152
 
153
  foreach ( $available_engines as $class_name => $engine ) {
154
  /**
@@ -171,7 +171,7 @@ class Tribe__Log__Admin {
171
  return (array) $logger->retrieve();
172
  }
173
 
174
- return [];
175
  }
176
 
177
  /**
@@ -182,7 +182,7 @@ class Tribe__Log__Admin {
182
  * @return array
183
  */
184
  protected function get_logging_levels() {
185
- $levels = [];
186
  $available_levels = $this->log_manager()->get_logging_levels();
187
 
188
  foreach ( $available_levels as $logging_level ) {
@@ -201,10 +201,10 @@ class Tribe__Log__Admin {
201
  * @return string
202
  */
203
  protected function get_log_url( $log = null ) {
204
- $query = [
205
  'tribe-common-log' => 'download',
206
- 'check' => wp_create_nonce( 'download_log' ),
207
- ];
208
 
209
  $log_download_url = add_query_arg( $query, get_admin_url( null, 'edit.php' ) );
210
 
1
  <?php
2
  class Tribe__Log__Admin {
3
  public function __construct() {
4
+ add_action( 'wp_ajax_tribe_logging_controls', array( $this, 'listen' ) );
5
+ add_action( 'init', array( $this, 'serve_log_downloads' ) );
6
+ add_action( 'plugins_loaded', array( $this, 'register_script' ) );
7
  }
8
 
9
  /**
29
  * an appropriate response.
30
  */
31
  public function listen() {
32
+ $fields = wp_parse_args( $_POST, array(
33
  'check' => '',
34
  'log-level' => '',
35
  'log-engine' => '',
36
+ ) );
37
 
38
  foreach ( $fields as &$single_field ) {
39
  $single_field = sanitize_text_field( $single_field );
58
  */
59
  do_action( 'tribe_common_updated_log_settings' );
60
 
61
+ $data = array(
62
  'logs' => $this->get_available_logs(),
63
+ );
64
 
65
  if ( ! empty( $fields['log-view'] ) ) {
66
  $data['entries'] = $this->get_log_entries( $fields['log-view'] );
103
  Tribe__Main::instance(),
104
  'tribe-common-logging-controls',
105
  'admin-log-controls.js',
106
+ array( 'jquery' ),
107
  'admin_enqueue_scripts',
108
+ array(
109
+ 'conditionals' => array( Tribe__Admin__Help_Page::instance(), 'is_current_page' ),
110
+ 'localize' => (object) array(
111
  'name' => 'tribe_logger_data',
112
+ 'data' => array(
113
  'check' => wp_create_nonce( 'logging-controls' ),
114
+ ),
115
+ ),
116
+ )
117
  );
118
  }
119
 
130
  }
131
 
132
  if ( empty( $available_logs ) ) {
133
+ return array( '' => _x( 'None currently available', 'log selector', 'tribe-common' ) );
134
  }
135
 
136
  return $available_logs;
145
  $available_engines = $this->log_manager()->get_logging_engines();
146
 
147
  if ( empty( $available_engines ) ) {
148
+ return array( '' => _x( 'None currently available', 'log engines', 'tribe-common' ) );
149
  }
150
 
151
+ $engine_list = array();
152
 
153
  foreach ( $available_engines as $class_name => $engine ) {
154
  /**
171
  return (array) $logger->retrieve();
172
  }
173
 
174
+ return array();
175
  }
176
 
177
  /**
182
  * @return array
183
  */
184
  protected function get_logging_levels() {
185
+ $levels = array();
186
  $available_levels = $this->log_manager()->get_logging_levels();
187
 
188
  foreach ( $available_levels as $logging_level ) {
201
  * @return string
202
  */
203
  protected function get_log_url( $log = null ) {
204
+ $query = array(
205
  'tribe-common-log' => 'download',
206
+ 'check' => wp_create_nonce( 'download_log' ),
207
+ );
208
 
209
  $log_download_url = add_query_arg( $query, get_admin_url( null, 'edit.php' ) );
210
 
common/src/Tribe/Log/Canonical_Formatter.php CHANGED
@@ -11,37 +11,9 @@
11
  namespace Tribe\Log;
12
 
13
 
14
- use Monolog\Formatter\FormatterInterface;
15
  use Monolog\Formatter\LineFormatter;
16
 
17
- class Canonical_Formatter implements FormatterInterface {
18
- /**
19
- * @since 4.12.13
20
- *
21
- * @var string Our standard format for the Monolog LineFormatter.
22
- */
23
- protected $standard_format = 'tribe.%channel%.%level_name%: %message%';
24
-
25
- /**
26
- * @since 4.12.13
27
- *
28
- * @var string Our standard format Monolog LineFormatter.
29
- */
30
- protected $standard_formatter;
31
-
32
- /**
33
- * @since 4.12.13
34
- *
35
- * @var string Our context-aware format for the Monolog LineFormatter.
36
- */
37
- protected $context_format = 'tribe-canonical-line channel=%channel% %message%';
38
-
39
- /**
40
- * @since 4.12.13
41
- *
42
- * @var string Our context-aware Monolog LineFormatter.
43
- */
44
- protected $context_formatter;
45
 
46
  /**
47
  * Formats a log record.
@@ -57,59 +29,14 @@ class Canonical_Formatter implements FormatterInterface {
57
 
58
  if ( $has_context ) {
59
  $record['message'] = $this->format_record_message( $record );
60
- $formatter = $this->get_context_formatter();
 
61
  } else {
62
  // Fall-back on a standard format if the message does not have a context.
63
- $formatter = $this->get_standard_formatter();
64
- }
65
-
66
- return $formatter->format( $record );
67
- }
68
-
69
- /**
70
- * Gets a LineFormatter whose format is context aware.
71
- *
72
- * @since 4.12.13
73
- *
74
- * @return LineFormatter
75
- */
76
- public function get_context_formatter() {
77
- if ( empty( $this->context_formatter ) ) {
78
- $this->context_formatter = new LineFormatter( $this->context_format );
79
- }
80
-
81
- return $this->context_formatter;
82
- }
83
-
84
- /**
85
- * Gets a LineFormatter whose format is our standard logging format.
86
- *
87
- * @since 4.12.13
88
- *
89
- * @return LineFormatter
90
- */
91
- public function get_standard_formatter() {
92
- if ( empty( $this->standard_formatter ) ) {
93
- $this->standard_formatter = new LineFormatter( $this->standard_format );
94
  }
95
 
96
- return $this->standard_formatter;
97
- }
98
-
99
- /**
100
- * Formats a set of log records.
101
- *
102
- * This simply hands off the work of formatting Batches to the LineFormatter.
103
- *
104
- * @since 4.12.13
105
- *
106
- * @param array $records A set of records to format
107
- * @return mixed The formatted set of records
108
- */
109
- public function formatBatch( array $records ) {
110
- $line_formatter = new LineFormatter();
111
-
112
- return $line_formatter->formatBatch( $records );
113
  }
114
 
115
  /**
11
  namespace Tribe\Log;
12
 
13
 
 
14
  use Monolog\Formatter\LineFormatter;
15
 
16
+ class Canonical_Formatter extends LineFormatter {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
  /**
19
  * Formats a log record.
29
 
30
  if ( $has_context ) {
31
  $record['message'] = $this->format_record_message( $record );
32
+
33
+ $this->format = 'tribe-canonical-line channel=%channel% %message%';
34
  } else {
35
  // Fall-back on a standard format if the message does not have a context.
36
+ $this->format = 'tribe.%channel%.%level_name%: %message%';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  }
38
 
39
+ return parent::format( $record );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  }
41
 
42
  /**
common/src/Tribe/Log/File_Logger.php CHANGED
@@ -155,7 +155,7 @@ class Tribe__Log__File_Logger implements Tribe__Log__Logger {
155
  return;
156
  }
157
 
158
- fputcsv( $this->handle, [ date_i18n( 'Y-m-d H:i:s' ), $entry, $type, $src ] );
159
  }
160
 
161
  /**
@@ -171,7 +171,7 @@ class Tribe__Log__File_Logger implements Tribe__Log__Logger {
171
  *
172
  * @return array
173
  */
174
- public function retrieve( $limit = 0, array $args = [] ) {
175
  // Ensure we're in 'read' mode before we try to retrieve
176
  if ( 'r' !== $this->context ) {
177
  $this->set_context( 'r' );
@@ -179,10 +179,10 @@ class Tribe__Log__File_Logger implements Tribe__Log__Logger {
179
 
180
  // Couldn't obtain the file handle? We'll bail out without causing further disruption
181
  if ( ! $this->handle ) {
182
- return [];
183
  }
184
 
185
- $rows = [];
186
 
187
  while ( $current_row = fgetcsv( $this->handle ) ) {
188
  if ( $limit && $limit === count( $rows ) ) {
@@ -212,7 +212,7 @@ class Tribe__Log__File_Logger implements Tribe__Log__Logger {
212
  * @return array
213
  */
214
  public function list_available_logs() {
215
- $logs = [];
216
 
217
  // This could be called when the log dir is not accessible.
218
  if ( ! $this->is_available() ) {
@@ -238,7 +238,13 @@ class Tribe__Log__File_Logger implements Tribe__Log__Logger {
238
  }
239
 
240
  $name = $node->getFilename();
241
- $ext = $node->getExtension();
 
 
 
 
 
 
242
 
243
  // Skip unless it is a .log file with the expected prefix
244
  if ( 'log' !== $ext || 0 !== strpos( $name, $basename ) ) {
155
  return;
156
  }
157
 
158
+ fputcsv( $this->handle, array( date_i18n( 'Y-m-d H:i:s' ), $entry, $type, $src ) );
159
  }
160
 
161
  /**
171
  *
172
  * @return array
173
  */
174
+ public function retrieve( $limit = 0, array $args = array() ) {
175
  // Ensure we're in 'read' mode before we try to retrieve
176
  if ( 'r' !== $this->context ) {
177
  $this->set_context( 'r' );
179
 
180
  // Couldn't obtain the file handle? We'll bail out without causing further disruption
181
  if ( ! $this->handle ) {
182
+ return array();
183
  }
184
 
185
+ $rows = array();
186
 
187
  while ( $current_row = fgetcsv( $this->handle ) ) {
188
  if ( $limit && $limit === count( $rows ) ) {
212
  * @return array
213
  */
214
  public function list_available_logs() {
215
+ $logs = array();
216
 
217
  // This could be called when the log dir is not accessible.
218
  if ( ! $this->is_available() ) {
238
  }
239
 
240
  $name = $node->getFilename();
241
+
242
+ // DirectoryIterator::getExtension() is only available on 5.3.6
243
+ if ( version_compare( phpversion(), '5.3.6', '>=' ) ) {
244
+ $ext = $node->getExtension();
245
+ } else {
246
+ $ext = pathinfo( $name, PATHINFO_EXTENSION );
247
+ }
248
 
249
  // Skip unless it is a .log file with the expected prefix
250
  if ( 'log' !== $ext || 0 !== strpos( $name, $basename ) ) {
common/src/Tribe/Log/Logger.php CHANGED
@@ -43,7 +43,7 @@ interface Tribe__Log__Logger {
43
  *
44
  * @return array
45
  */
46
- public function retrieve( $limit = 0, array $args = [] );
47
 
48
  /**
49
  * Returns a list of currently accessible logs (current first, oldest last).
43
  *
44
  * @return array
45
  */
46
+ public function retrieve( $limit = 0, array $args = array() );
47
 
48
  /**
49
  * Returns a list of currently accessible logs (current first, oldest last).
common/src/Tribe/Log/Null_Logger.php CHANGED
@@ -3,7 +3,7 @@
3
 
4
  /**
5
  * Class Null_Logger
6
- *
7
  * Logs nothing, reads nothing.
8
  */
9
  class Tribe__Log__Null_Logger implements Tribe__Log__Logger {
@@ -54,8 +54,8 @@ class Tribe__Log__Null_Logger implements Tribe__Log__Logger {
54
  *
55
  * @return array
56
  */
57
- public function retrieve( $limit = 0, array $args = [] ) {
58
- return [];
59
  }
60
 
61
  /**
@@ -78,7 +78,7 @@ class Tribe__Log__Null_Logger implements Tribe__Log__Logger {
78
  * @return array
79
  */
80
  public function list_available_logs() {
81
- return [];
82
  }
83
 
84
  /**
3
 
4
  /**
5
  * Class Null_Logger
6
+ *
7
  * Logs nothing, reads nothing.
8
  */
9
  class Tribe__Log__Null_Logger implements Tribe__Log__Logger {
54
  *
55
  * @return array
56
  */
57
+ public function retrieve( $limit = 0, array $args = array() ) {
58
+ return array();
59
  }
60
 
61
  /**
78
  * @return array
79
  */
80
  public function list_available_logs() {
81
+ return array();
82
  }
83
 
84
  /**
common/src/Tribe/Log/README.md CHANGED
@@ -1,11 +1,11 @@
1
  # Monolog-based logging
2
 
3
- We've introduced a [Monolog based](https://github.com/Seldaek/monolog) logger in our common libraries.
4
  You can find more information about all the possibilities this opens [on the library documentaion](https://seldaek.github.io/monolog/), but this document will serve as an introduction to the essentials of its day to day use.
5
 
6
  ## When should I log?
7
 
8
- Whenever you feel you might have to debug this in the future and could use that information.
9
 
10
  > Pro tip: if you, as a developer, find yourself using `var_dump` and `error_log` a lot, then you should log instead. Someone, someday, will have your same issue.
11
 
@@ -13,8 +13,8 @@ Worried about "spamming" the logs? [Read here](#logging-levels--or-stuff-does-no
13
 
14
  ## This will deprecate the old logger, but not yet
15
 
16
- At first we're not replacing the "old" logger with this new one, we're just asking you **to stop using the old logger** in your code from now on and use the new, Monolog-based, one.
17
- The old logger still offers file-based logging and connections to the UI the new logger is not yet offering; the current implementation will allow us, in the future, to log **everything** with the Monolog-based logger, but, currently, intercepting log messages from the "old" logger requires manual activation, see the following section.
18
 
19
  To be clear: this is what we mean by "old" or "legacy" logger:
20
 
@@ -26,10 +26,10 @@ tribe( 'logger' )->log( 'Some information', Tribe__Log::DEBUG, 'The source' );
26
 
27
  ### Intercepting legacy logger logs with the new Monolog logger
28
 
29
- The Monolog-based logger will handle logging coming from the legacy logger only if explicitly told so.
30
-
31
  You can activate this function with this code:
32
-
33
  ```php
34
  <?php
35
  add_filter( 'tribe_log_use_action_logger', '__return_true' );
@@ -39,17 +39,17 @@ Once this is in your code any call to the legacy logger wil be redirected to the
39
 
40
  ## Using the logger
41
 
42
- The new logger listens on the `tribe_log` action.
43
- By default it will log to the `default` channel (see [Monolog documentation for more information about channels](https://seldaek.github.io/monolog/doc/01-usage.html#leveraging-channels)).
44
 
45
  So the code below will log a **debug** to the **default** channel with a source of **ea_client**:
46
 
47
  ```php
48
  <?php
49
- do_action(
50
- 'tribe_log',
51
- 'debug',
52
- 'ea_client',
53
  [ 'action' => 'updated', 'post_id' => $id, 'origin' => $origin ]
54
  );
55
  ```
@@ -62,10 +62,10 @@ The logger listening on the action will consume three parameters:
62
 
63
  ## Where are my logs?
64
 
65
- The initial implementation of the new logger will write, by default, to the **PHP error** log.
66
 
67
- We're using Monolog to allow us, and third parties, to "attach" and "deatach" loggers as required.
68
- By default we're formatting logs using canonical lines( read more [here](https://brandur.org/logfmt) and [here](https://blog.codeship.com/logfmt-a-log-format-thats-easy-to-read-and-write/)) to make our log entries both human-readable and machine parsable (e.g. by a tool like [this](https://www.npmjs.com/package/logfmt)).
69
 
70
  The output format of the example above would be this:
71
 
@@ -73,17 +73,17 @@ The output format of the example above would be this:
73
  [22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
74
  ```
75
 
76
- What about legacy logs?
77
  Their format would not be formatted to the canonical line style:
78
 
79
  ```
80
- [22-Aug-2019 16:03:33 UTC] tribe.default.DEBUG: The source: debug information
81
  ```
82
 
83
  ### Logging levels ( or "stuff does not appear in the log")
84
 
85
- By default we're only logging Warnings and above.
86
- This means all your `debug` level logs are being ignored.
87
 
88
  In production we do not want to fill people logs with pointless information, but you can control the level of logging: any log equal or above the specified level will be logged.
89
 
@@ -91,10 +91,10 @@ You can control the logging level with the `tribe_log_level` filter:
91
 
92
  ```php
93
  <?php
94
- add_filter(
95
  'tribe_log_level',
96
  static function () {
97
- // Only log errors or above.
98
  return Monolog\Logger::ERROR;
99
  }
100
  );
@@ -102,7 +102,7 @@ add_filter(
102
 
103
  ### Logging channels
104
 
105
- The default logging channel is `default`, you've seen that in the example log lines above.
106
 
107
  But how can I change the channel?
108
 
@@ -127,21 +127,21 @@ Any log produced after the call will log to the `my_channel` channel; this will
127
  ```
128
  [22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
129
  [22-Aug-2019 15:51:13 UTC] tribe-canonical-line channel=my_channel level=debug source=my_source foo=bar
130
- [22-Aug-2019 16:03:33 UTC] tribe.my_channel.DEBUG: My source: Some debug information
131
  ```
132
 
133
  ## I want to use this right now to debug my code
134
 
135
- Copy and paste this in a plugin, or must-use plugin.
136
  If you're using a plugin remember to activate it.
137
 
138
  ```php
139
  <?php
140
  /**
141
- * Plugin Name: The Events Calendar Logger Control
142
- * Plugin Description: Control the behavior of The Events Calendar Monolog-based logger.
143
  */
144
- add_filter(
145
  'tribe_log_level',
146
  static function () {
147
  // Control the min level of logging.
@@ -151,4 +151,4 @@ add_filter(
151
 
152
  // Redirect legacy logger calls.
153
  add_filter( 'tribe_log_use_action_logger', '__return_true' );
154
- ```
1
  # Monolog-based logging
2
 
3
+ We've introduced a [Monolog based](https://github.com/Seldaek/monolog) logger in our common libraries.
4
  You can find more information about all the possibilities this opens [on the library documentaion](https://seldaek.github.io/monolog/), but this document will serve as an introduction to the essentials of its day to day use.
5
 
6
  ## When should I log?
7
 
8
+ Whenever you feel you might have to debug this in the future and could use that information.
9
 
10
  > Pro tip: if you, as a developer, find yourself using `var_dump` and `error_log` a lot, then you should log instead. Someone, someday, will have your same issue.
11
 
13
 
14
  ## This will deprecate the old logger, but not yet
15
 
16
+ At first we're not replacing the "old" logger with this new one, we're just asking you **to stop using the old logger** in your code from now on and use the new, Monolog-based, one.
17
+ The old logger still offers file-based logging and connections to the UI the new logger is not yet offering; the current implementation will allow us, in the future, to log **everything** with the Monolog-based logger, but, currently, intercepting log messages from the "old" logger requires manual activation, see the following section.
18
 
19
  To be clear: this is what we mean by "old" or "legacy" logger:
20
 
26
 
27
  ### Intercepting legacy logger logs with the new Monolog logger
28
 
29
+ The Monolog-based logger will handle logging coming from the legacy logger only if explicitly told so.
30
+
31
  You can activate this function with this code:
32
+
33
  ```php
34
  <?php
35
  add_filter( 'tribe_log_use_action_logger', '__return_true' );
39
 
40
  ## Using the logger
41
 
42
+ The new logger listens on the `tribe_log` action.
43
+ By default it will log to the `default` channel (see [Monolog documentation for more information about channels](https://seldaek.github.io/monolog/doc/01-usage.html#leveraging-channels)).
44
 
45
  So the code below will log a **debug** to the **default** channel with a source of **ea_client**:
46
 
47
  ```php
48
  <?php
49
+ do_action(
50
+ 'tribe_log',
51
+ 'debug',
52
+ 'ea_client',
53
  [ 'action' => 'updated', 'post_id' => $id, 'origin' => $origin ]
54
  );
55
  ```
62
 
63
  ## Where are my logs?
64
 
65
+ The initial implementation of the new logger will write, by default, to the **PHP error** log.
66
 
67
+ We're using Monolog to allow us, and third parties, to "attach" and "deatach" loggers as required.
68
+ By default we're formatting logs using canonical lines( read more [here](https://brandur.org/logfmt) and [here](https://blog.codeship.com/logfmt-a-log-format-thats-easy-to-read-and-write/)) to make our log entries both human-readable and machine parsable (e.g. by a tool like [this](https://www.npmjs.com/package/logfmt)).
69
 
70
  The output format of the example above would be this:
71
 
73
  [22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
74
  ```
75
 
76
+ What about legacy logs?
77
  Their format would not be formatted to the canonical line style:
78
 
79
  ```
80
+ [22-Aug-2019 16:03:33 UTC] tribe.default.DEBUG: The source: debug information
81
  ```
82
 
83
  ### Logging levels ( or "stuff does not appear in the log")
84
 
85
+ By default we're only logging Warnings and above.
86
+ This means all your `debug` level logs are being ignored.
87
 
88
  In production we do not want to fill people logs with pointless information, but you can control the level of logging: any log equal or above the specified level will be logged.
89
 
91
 
92
  ```php
93
  <?php
94
+ add_filter(
95
  'tribe_log_level',
96
  static function () {
97
+ // Only log errors or above.
98
  return Monolog\Logger::ERROR;
99
  }
100
  );
102
 
103
  ### Logging channels
104
 
105
+ The default logging channel is `default`, you've seen that in the example log lines above.
106
 
107
  But how can I change the channel?
108
 
127
  ```
128
  [22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
129
  [22-Aug-2019 15:51:13 UTC] tribe-canonical-line channel=my_channel level=debug source=my_source foo=bar
130
+ [22-Aug-2019 16:03:33 UTC] tribe.my_channel.DEBUG: My source: Some debug information
131
  ```
132
 
133
  ## I want to use this right now to debug my code
134
 
135
+ Copy and paste this in a plugin, or must-use plugin.
136
  If you're using a plugin remember to activate it.
137
 
138
  ```php
139
  <?php
140
  /**
141
+ * Plugin Name: Modern Tribe Logger Control
142
+ * Plugin Description: Control the behavior of Modern Tribe Monolog-based logger.
143
  */
144
+ add_filter(
145
  'tribe_log_level',
146
  static function () {
147
  // Control the min level of logging.
151
 
152
  // Redirect legacy logger calls.
153
  add_filter( 'tribe_log_use_action_logger', '__return_true' );
154
+ ```
common/src/Tribe/Log/Service_Provider.php CHANGED
@@ -22,8 +22,6 @@ class Service_Provider extends \tad_DI52_ServiceProvider {
22
  * @since 4.9.16
23
  */
24
  public function register() {
25
- $this->container->singleton( 'log', $this );
26
- $this->container->singleton( static::class, $this );
27
  $this->container->singleton( Logger::class, [ $this, 'build_logger' ] );
28
  $this->container->singleton( 'monolog',
29
  function () {
@@ -72,7 +70,7 @@ class Service_Provider extends \tad_DI52_ServiceProvider {
72
  */
73
  $level_threshold = apply_filters( 'tribe_log_level', Logger::WARNING );
74
 
75
- $error_log_handler = new ErrorLogHandler( ErrorLogHandler::OPERATING_SYSTEM, $level_threshold );
76
 
77
  /**
78
  * Filters whether to use canonical format for the logs or not.
@@ -147,30 +145,4 @@ class Service_Provider extends \tad_DI52_ServiceProvider {
147
 
148
  return $logging_engines;
149
  }
150
-
151
- /**
152
- * Enables logging in the service provider, if not already enabled.
153
- *
154
- * @since 4.12.15
155
- */
156
- public function enable() {
157
- if ( has_action( 'tribe_log', [ $this, 'dispatch_log' ] ) ) {
158
- return;
159
- }
160
-
161
- add_action( 'tribe_log', [ $this, 'dispatch_log' ] );
162
- }
163
-
164
- /**
165
- * Disables the logging functions.
166
- *
167
- * @since 4.12.15
168
- */
169
- public function disable() {
170
- if ( ! has_action( 'tribe_log', [ $this, 'dispatch_log' ] ) ) {
171
- return;
172
- }
173
-
174
- remove_action( 'tribe_log', [ $this, 'dispatch_log' ] );
175
- }
176
  }
22
  * @since 4.9.16
23
  */
24
  public function register() {
 
 
25
  $this->container->singleton( Logger::class, [ $this, 'build_logger' ] );
26
  $this->container->singleton( 'monolog',
27
  function () {
70
  */
71
  $level_threshold = apply_filters( 'tribe_log_level', Logger::WARNING );
72
 
73
+ $error_log_handler = new ErrorLogHandler( null, $level_threshold );
74
 
75
  /**
76
  * Filters whether to use canonical format for the logs or not.
145
 
146
  return $logging_engines;
147
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  }
common/src/Tribe/Main.php CHANGED
@@ -4,8 +4,6 @@
4
  */
5
 
6
  // Don't load directly
7
- use Tribe\DB_Lock;
8
-
9
  if ( ! defined( 'ABSPATH' ) ) {
10
  die( '-1' );
11
  }
@@ -19,7 +17,7 @@ class Tribe__Main {
19
  const OPTIONNAME = 'tribe_events_calendar_options';
20
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
21
 
22
- const VERSION = '4.13.2';
23
 
24
  const FEED_URL = 'https://theeventscalendar.com/feed/';
25
 
@@ -67,7 +65,12 @@ class Tribe__Main {
67
  return;
68
  }
69
 
70
- require_once realpath( dirname( dirname( dirname( __FILE__ ) ) ) . '/vendor/autoload.php' );
 
 
 
 
 
71
 
72
  // the DI container class
73
  require_once dirname( __FILE__ ) . '/Container.php';
@@ -140,14 +143,14 @@ class Tribe__Main {
140
  }
141
 
142
  /**
143
- * Gets the instantiated context of this class. I.e. the object that instantiated this one.
144
  */
145
  public function context() {
146
  return $this->plugin_context;
147
  }
148
 
149
  /**
150
- * Gets the class name of the instantiated plugin context of this class. I.e. the class name of the object that instantiated this one.
151
  */
152
  public function context_class() {
153
  return $this->plugin_context_class;
@@ -423,14 +426,11 @@ class Tribe__Main {
423
  // Are we on the Plugins page?
424
  $is_plugins = $helper->is_screen( 'plugins' );
425
 
426
- // Are we on the Widgets page?
427
- $is_widgets = $helper->is_screen( 'widgets' );
428
-
429
  // Are we viewing a generic Tribe screen?
430
  // Includes: Events > Settings, Events > Help, App Shop page, and more.
431
  $is_tribe_screen = $helper->is_screen();
432
 
433
- return $is_post_type || $is_plugins || $is_widgets || $is_tribe_screen;
434
  }
435
 
436
  /**
@@ -559,7 +559,7 @@ class Tribe__Main {
559
  if ( 'plugins.php' !== $page ) {
560
  return;
561
  }
562
- $notices = apply_filters( 'tribe_plugin_notices', [] );
563
  wp_localize_script( 'tribe-pue-notices', 'tribe_plugin_notices', $notices );
564
  }
565
 
@@ -576,8 +576,6 @@ class Tribe__Main {
576
  tribe( 'admin.notice.marketing' );
577
  }
578
 
579
- tribe( \Tribe\Admin\Notice\WP_Version::class );
580
-
581
  /**
582
  * Runs after all plugins including Tribe ones have loaded
583
  *
@@ -591,7 +589,7 @@ class Tribe__Main {
591
  *
592
  * @since 4.4
593
  *
594
- * @return void Implementation of components loader doesn't return anything.
595
  */
596
  public function bind_implementations() {
597
  tribe_singleton( 'settings.manager', 'Tribe__Settings_Manager' );
@@ -613,9 +611,7 @@ class Tribe__Main {
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
- tribe_singleton( 'customizer', 'Tribe__Customizer' );
619
 
620
  tribe_singleton( Tribe__Dependency::class, Tribe__Dependency::class );
621
 
@@ -626,7 +622,6 @@ class Tribe__Main {
626
 
627
  tribe_singleton( 'admin.notice.php.version', 'Tribe__Admin__Notice__Php_Version', [ 'hook' ] );
628
  tribe_singleton( 'admin.notice.marketing', 'Tribe__Admin__Notice__Marketing', [ 'hook' ] );
629
- tribe_singleton( \Tribe\Admin\Notice\WP_Version::class, \Tribe\Admin\Notice\WP_Version::class, [ 'hook' ] );
630
 
631
  tribe_register_provider( Tribe__Editor__Provider::class );
632
  tribe_register_provider( Tribe__Service_Providers__Debug_Bar::class );
@@ -635,10 +630,7 @@ class Tribe__Main {
635
  tribe_register_provider( Tribe\Service_Providers\Dialog::class );
636
  tribe_register_provider( Tribe\Service_Providers\PUE::class );
637
  tribe_register_provider( Tribe\Service_Providers\Shortcodes::class );
638
- tribe_register_provider( Tribe\Service_Providers\Body_Classes::class );
639
  tribe_register_provider( Tribe\Log\Service_Provider::class );
640
- tribe_register_provider( Tribe\Service_Providers\Crons::class );
641
- tribe_register_provider( Tribe\Service_Providers\Widgets::class );
642
  }
643
 
644
  /**
4
  */
5
 
6
  // Don't load directly
 
 
7
  if ( ! defined( 'ABSPATH' ) ) {
8
  die( '-1' );
9
  }
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
+ const VERSION = '4.12.0';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
65
  return;
66
  }
67
 
68
+ // the 5.2 compatible autoload file
69
+ if ( version_compare( PHP_VERSION, '5.2.17', '<=' ) ) {
70
+ require_once realpath( dirname( dirname( dirname( __FILE__ ) ) ) . '/vendor/autoload_52.php' );
71
+ } else {
72
+ require_once realpath( dirname( dirname( dirname( __FILE__ ) ) ) . '/vendor/autoload.php' );
73
+ }
74
 
75
  // the DI container class
76
  require_once dirname( __FILE__ ) . '/Container.php';
143
  }
144
 
145
  /**
146
+ * Get's the instantiated context of this class. I.e. the object that instantiated this one.
147
  */
148
  public function context() {
149
  return $this->plugin_context;
150
  }
151
 
152
  /**
153
+ * Get's the class name of the instantiated plugin context of this class. I.e. the class name of the object that instantiated this one.
154
  */
155
  public function context_class() {
156
  return $this->plugin_context_class;
426
  // Are we on the Plugins page?
427
  $is_plugins = $helper->is_screen( 'plugins' );
428
 
 
 
 
429
  // Are we viewing a generic Tribe screen?
430
  // Includes: Events > Settings, Events > Help, App Shop page, and more.
431
  $is_tribe_screen = $helper->is_screen();
432
 
433
+ return $is_post_type || $is_plugins || $is_tribe_screen;
434
  }
435
 
436
  /**
559
  if ( 'plugins.php' !== $page ) {
560
  return;
561
  }
562
+ $notices = apply_filters( 'tribe_plugin_notices', array() );
563
  wp_localize_script( 'tribe-pue-notices', 'tribe_plugin_notices', $notices );
564
  }
565
 
576
  tribe( 'admin.notice.marketing' );
577
  }
578
 
 
 
579
  /**
580
  * Runs after all plugins including Tribe ones have loaded
581
  *
589
  *
590
  * @since 4.4
591
  *
592
+ * @return void Implementation of components loader doesnt return anything.
593
  */
594
  public function bind_implementations() {
595
  tribe_singleton( 'settings.manager', 'Tribe__Settings_Manager' );
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 );
617
 
622
 
623
  tribe_singleton( 'admin.notice.php.version', 'Tribe__Admin__Notice__Php_Version', [ 'hook' ] );
624
  tribe_singleton( 'admin.notice.marketing', 'Tribe__Admin__Notice__Marketing', [ 'hook' ] );
 
625
 
626
  tribe_register_provider( Tribe__Editor__Provider::class );
627
  tribe_register_provider( Tribe__Service_Providers__Debug_Bar::class );
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
  /**
common/src/Tribe/Meta/Chunker.php CHANGED
@@ -63,7 +63,7 @@ class Tribe__Meta__Chunker {
63
  /**
64
  * @var array The post types supported by the Chunker.
65
  */
66
- protected $post_types = [];
67
 
68
  /**
69
  * @var int The filter priority at which Chunker will operate on meta CRUD operations.
@@ -95,11 +95,11 @@ class Tribe__Meta__Chunker {
95
  return;
96
  }
97
 
98
- add_filter( 'update_post_metadata', [ $this, 'filter_update_metadata' ], $this->filter_priority, 4 );
99
- add_filter( 'delete_post_metadata', [ $this, 'filter_delete_metadata' ], $this->filter_priority, 3 );
100
- add_filter( 'add_post_metadata', [ $this, 'filter_add_metadata' ], $this->filter_priority, 4 );
101
- add_filter( 'get_post_metadata', [ $this, 'filter_get_metadata' ], $this->filter_priority, 4 );
102
- add_action( 'deleted_post', [ $this, 'remove_post_entry' ] );
103
  }
104
 
105
  /**
@@ -114,8 +114,8 @@ class Tribe__Meta__Chunker {
114
  return;
115
  }
116
 
117
- $this->chunks_cache = [];
118
- $this->post_ids_cache = [];
119
 
120
  $chunked_keys = get_option( $this->chunked_keys_option_name );
121
 
@@ -199,7 +199,7 @@ class Tribe__Meta__Chunker {
199
  $option = (array) get_option( $this->chunked_keys_option_name );
200
 
201
  if ( ! isset( $option[ $post_id ] ) ) {
202
- $option[ $post_id ] = [ $meta_key ];
203
  } else {
204
  $option[ $post_id ][] = $meta_key;
205
  }
@@ -383,10 +383,10 @@ class Tribe__Meta__Chunker {
383
  protected function remove_checksum_for( $object_id, $meta_key ) {
384
  /** @var wpdb $wpdb */
385
  global $wpdb;
386
- $data = [
387
  'post_id' => $object_id,
388
  'meta_key' => $this->get_checksum_key( $meta_key ),
389
- ];
390
  $wpdb->delete( $wpdb->postmeta, $data );
391
  }
392
 
@@ -481,7 +481,7 @@ class Tribe__Meta__Chunker {
481
  */
482
  protected function prefix_chunks( array $chunks ) {
483
  $count = count( $chunks );
484
- $prefixed = [];
485
  for ( $i = 0; $i < $count; $i ++ ) {
486
  $prefixed[] = "{$i}{$this->chunk_separator}{$chunks[$i]}";
487
  }
@@ -525,21 +525,21 @@ class Tribe__Meta__Chunker {
525
  $chunk_meta_key = $this->get_chunk_meta_key( $meta_key );
526
  $this->insert_meta( $object_id, $meta_key, $chunks[0] );
527
  foreach ( $chunks as $chunk ) {
528
- $wpdb->insert( $wpdb->postmeta, [
529
  'post_id' => $object_id,
530
  'meta_key' => $chunk_meta_key,
531
  'meta_value' => $chunk,
532
- ] );
533
  }
534
 
535
  $glued = $this->glue_chunks( $this->get_chunks_for( $object_id, $meta_key ) );
536
  $checksum_key = $this->get_checksum_key( $meta_key );
537
- $wpdb->delete( $wpdb->postmeta, [ 'post_id' => $object_id, 'meta_key' => $checksum_key ] );
538
- $wpdb->insert( $wpdb->postmeta, [
539
  'post_id' => $object_id,
540
  'meta_key' => $checksum_key,
541
  'meta_value' => md5( $glued ),
542
- ] );
543
  }
544
 
545
  /**
@@ -554,11 +554,11 @@ class Tribe__Meta__Chunker {
554
  protected function insert_meta( $object_id, $meta_key, $meta_value ) {
555
  /** @var wpdb $wpdb */
556
  global $wpdb;
557
- $data = [
558
  'post_id' => $object_id,
559
  'meta_key' => $meta_key,
560
  'meta_value' => maybe_serialize( $meta_value ),
561
- ];
562
  $wpdb->insert( $wpdb->postmeta, $data );
563
  }
564
 
@@ -574,7 +574,7 @@ class Tribe__Meta__Chunker {
574
  * @see Tribe__Meta__Chunker::get_chunks_for()
575
  */
576
  public function glue_chunks( array $chunks ) {
577
- $ordered_chunks = [];
578
  foreach ( $chunks as $chunk ) {
579
  preg_match( '/(\\d+)' . preg_quote( $this->chunk_separator ) . '(.*)/', $chunk, $matches );
580
  $ordered_chunks[ $matches[1] ] = $matches[2];
@@ -614,7 +614,7 @@ class Tribe__Meta__Chunker {
614
  $object_id, $chunk_meta_key
615
  ) );
616
 
617
- $meta_values = [];
618
  foreach ( $meta_ids as $meta_id ) {
619
  $query = $wpdb->prepare( "SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_id = %d", $meta_id );
620
  $meta_values[] = $wpdb->get_var( $query );
@@ -736,11 +736,11 @@ class Tribe__Meta__Chunker {
736
  * Unhooks the Chunker from the metadata operations.
737
  */
738
  public function unhook() {
739
- remove_filter( 'update_post_metadata', [ $this, 'filter_update_metadata' ], $this->filter_priority );
740
- remove_filter( 'delete_post_metadata', [ $this, 'filter_delete_metadata' ], $this->filter_priority );
741
- remove_filter( 'add_post_metadata', [ $this, 'filter_add_metadata' ], $this->filter_priority );
742
- remove_filter( 'get_post_metadata', [ $this, 'filter_get_metadata' ], $this->filter_priority );
743
- remove_action( 'deleted_post', [ $this, 'remove_post_entry' ] );
744
  }
745
 
746
  /**
@@ -813,25 +813,25 @@ class Tribe__Meta__Chunker {
813
  $all_meta = $this->get_all_meta( $object_id );
814
 
815
  if ( empty( $all_meta ) ) {
816
- return [];
817
  }
818
 
819
- $grouped = [];
820
  foreach ( $all_meta as $entry ) {
821
  if ( ! isset( $grouped[ $entry['meta_key'] ] ) ) {
822
- $grouped[ $entry['meta_key'] ] = [ $entry['meta_value'] ];
823
  } else {
824
  $grouped[ $entry['meta_key'] ][] = $entry['meta_value'];
825
  }
826
  }
827
 
828
- $chunker_meta_keys = array_filter( array_keys( $grouped ), [ $this, 'is_chunker_logic_meta_key' ] );
829
 
830
  if ( empty( $chunker_meta_keys ) ) {
831
  return $grouped;
832
  }
833
 
834
- $checksum_keys = array_filter( $chunker_meta_keys, [ $this, 'is_chunker_checksum_key' ] );
835
 
836
  if ( empty( $checksum_keys ) ) {
837
  return $grouped;
@@ -840,14 +840,14 @@ class Tribe__Meta__Chunker {
840
  $chunker_meta = array_intersect_key( $grouped, array_combine( $chunker_meta_keys, $chunker_meta_keys ) );
841
  $normal_meta = array_diff_key( $grouped, array_combine( $chunker_meta_keys, $chunker_meta_keys ) );
842
  foreach ( $checksum_keys as $checksum_key ) {
843
- $normal_meta_key = str_replace( [ $this->meta_key_prefix, '_checksum' ], '', $checksum_key );
844
  $chunk_meta_key = $this->get_chunk_meta_key( $normal_meta_key );
845
 
846
  if ( empty( $chunker_meta[ $chunk_meta_key ] ) ) {
847
  continue;
848
  }
849
 
850
- $normal_meta[ $normal_meta_key ] = [ $this->glue_chunks( $chunker_meta[ $chunk_meta_key ] ) ];
851
  }
852
 
853
  return $normal_meta;
@@ -881,7 +881,7 @@ class Tribe__Meta__Chunker {
881
  $query = $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = %d", $object_id );
882
  $results = $wpdb->get_results( $query, ARRAY_A );
883
 
884
- return ! empty( $results ) && is_array( $results ) ? $results : [];
885
  }
886
 
887
  /**
63
  /**
64
  * @var array The post types supported by the Chunker.
65
  */
66
+ protected $post_types = array();
67
 
68
  /**
69
  * @var int The filter priority at which Chunker will operate on meta CRUD operations.
95
  return;
96
  }
97
 
98
+ add_filter( 'update_post_metadata', array( $this, 'filter_update_metadata' ), $this->filter_priority, 4 );
99
+ add_filter( 'delete_post_metadata', array( $this, 'filter_delete_metadata' ), $this->filter_priority, 3 );
100
+ add_filter( 'add_post_metadata', array( $this, 'filter_add_metadata' ), $this->filter_priority, 4 );
101
+ add_filter( 'get_post_metadata', array( $this, 'filter_get_metadata' ), $this->filter_priority, 4 );
102
+ add_action( 'deleted_post', array( $this, 'remove_post_entry' ) );
103
  }
104
 
105
  /**
114
  return;
115
  }
116
 
117
+ $this->chunks_cache = array();
118
+ $this->post_ids_cache = array();
119
 
120
  $chunked_keys = get_option( $this->chunked_keys_option_name );
121
 
199
  $option = (array) get_option( $this->chunked_keys_option_name );
200
 
201
  if ( ! isset( $option[ $post_id ] ) ) {
202
+ $option[ $post_id ] = array( $meta_key );
203
  } else {
204
  $option[ $post_id ][] = $meta_key;
205
  }
383
  protected function remove_checksum_for( $object_id, $meta_key ) {
384
  /** @var wpdb $wpdb */
385
  global $wpdb;
386
+ $data = array(
387
  'post_id' => $object_id,
388
  'meta_key' => $this->get_checksum_key( $meta_key ),
389
+ );
390
  $wpdb->delete( $wpdb->postmeta, $data );
391
  }
392
 
481
  */
482
  protected function prefix_chunks( array $chunks ) {
483
  $count = count( $chunks );
484
+ $prefixed = array();
485
  for ( $i = 0; $i < $count; $i ++ ) {
486
  $prefixed[] = "{$i}{$this->chunk_separator}{$chunks[$i]}";
487
  }
525
  $chunk_meta_key = $this->get_chunk_meta_key( $meta_key );
526
  $this->insert_meta( $object_id, $meta_key, $chunks[0] );
527
  foreach ( $chunks as $chunk ) {
528
+ $wpdb->insert( $wpdb->postmeta, array(
529
  'post_id' => $object_id,
530
  'meta_key' => $chunk_meta_key,
531
  'meta_value' => $chunk,
532
+ ) );
533
  }
534
 
535
  $glued = $this->glue_chunks( $this->get_chunks_for( $object_id, $meta_key ) );
536
  $checksum_key = $this->get_checksum_key( $meta_key );
537
+ $wpdb->delete( $wpdb->postmeta, array( 'post_id' => $object_id, 'meta_key' => $checksum_key ) );
538
+ $wpdb->insert( $wpdb->postmeta, array(
539
  'post_id' => $object_id,
540
  'meta_key' => $checksum_key,
541
  'meta_value' => md5( $glued ),
542
+ ) );
543
  }
544
 
545
  /**
554
  protected function insert_meta( $object_id, $meta_key, $meta_value ) {
555
  /** @var wpdb $wpdb */
556
  global $wpdb;
557
+ $data = array(
558
  'post_id' => $object_id,
559
  'meta_key' => $meta_key,
560
  'meta_value' => maybe_serialize( $meta_value ),
561
+ );
562
  $wpdb->insert( $wpdb->postmeta, $data );
563
  }
564
 
574
  * @see Tribe__Meta__Chunker::get_chunks_for()
575
  */
576
  public function glue_chunks( array $chunks ) {
577
+ $ordered_chunks = array();
578
  foreach ( $chunks as $chunk ) {
579
  preg_match( '/(\\d+)' . preg_quote( $this->chunk_separator ) . '(.*)/', $chunk, $matches );
580
  $ordered_chunks[ $matches[1] ] = $matches[2];
614
  $object_id, $chunk_meta_key
615
  ) );
616
 
617
+ $meta_values = array();
618
  foreach ( $meta_ids as $meta_id ) {
619
  $query = $wpdb->prepare( "SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_id = %d", $meta_id );
620
  $meta_values[] = $wpdb->get_var( $query );
736
  * Unhooks the Chunker from the metadata operations.
737
  */
738
  public function unhook() {
739
+ remove_filter( 'update_post_metadata', array( $this, 'filter_update_metadata' ), $this->filter_priority );
740
+ remove_filter( 'delete_post_metadata', array( $this, 'filter_delete_metadata' ), $this->filter_priority );
741
+ remove_filter( 'add_post_metadata', array( $this, 'filter_add_metadata' ), $this->filter_priority );
742
+ remove_filter( 'get_post_metadata', array( $this, 'filter_get_metadata' ), $this->filter_priority );
743
+ remove_action( 'deleted_post', array( $this, 'remove_post_entry' ) );
744
  }
745
 
746
  /**
813
  $all_meta = $this->get_all_meta( $object_id );
814
 
815
  if ( empty( $all_meta ) ) {
816
+ return array();
817
  }
818
 
819
+ $grouped = array();
820
  foreach ( $all_meta as $entry ) {
821
  if ( ! isset( $grouped[ $entry['meta_key'] ] ) ) {
822
+ $grouped[ $entry['meta_key'] ] = array( $entry['meta_value'] );
823
  } else {
824
  $grouped[ $entry['meta_key'] ][] = $entry['meta_value'];
825
  }
826
  }
827
 
828
+ $chunker_meta_keys = array_filter( array_keys( $grouped ), array( $this, 'is_chunker_logic_meta_key' ) );
829
 
830
  if ( empty( $chunker_meta_keys ) ) {
831
  return $grouped;
832
  }
833
 
834
+ $checksum_keys = array_filter( $chunker_meta_keys, array( $this, 'is_chunker_checksum_key' ) );
835
 
836
  if ( empty( $checksum_keys ) ) {
837
  return $grouped;
840
  $chunker_meta = array_intersect_key( $grouped, array_combine( $chunker_meta_keys, $chunker_meta_keys ) );
841
  $normal_meta = array_diff_key( $grouped, array_combine( $chunker_meta_keys, $chunker_meta_keys ) );
842
  foreach ( $checksum_keys as $checksum_key ) {
843
+ $normal_meta_key = str_replace( array( $this->meta_key_prefix, '_checksum' ), '', $checksum_key );
844
  $chunk_meta_key = $this->get_chunk_meta_key( $normal_meta_key );
845
 
846
  if ( empty( $chunker_meta[ $chunk_meta_key ] ) ) {
847
  continue;
848
  }
849
 
850
+ $normal_meta[ $normal_meta_key ] = array( $this->glue_chunks( $chunker_meta[ $chunk_meta_key ] ) );
851
  }
852
 
853
  return $normal_meta;
881
  $query = $wpdb->prepare( "SELECT meta_key, meta_value FROM {$wpdb->postmeta} WHERE post_id = %d", $object_id );
882
  $results = $wpdb->get_results( $query, ARRAY_A );
883
 
884
+ return ! empty( $results ) && is_array( $results ) ? $results : array();
885
  }
886
 
887
  /**
common/src/Tribe/Notices.php CHANGED
@@ -5,7 +5,7 @@ class Tribe__Notices {
5
  * Notices to be displayed in the admin
6
  * @var array
7
  */
8
- protected $notices = [];
9
 
10
  /**
11
  * Define an admin notice
5
  * Notices to be displayed in the admin
6
  * @var array
7
  */
8
+ protected $notices = array();
9
 
10
  /**
11
  * Define an admin notice
common/src/Tribe/PUE/Checker.php CHANGED
@@ -235,7 +235,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
235
  * @return string
236
  */
237
  public function get_pue_update_url() {
238
- $pue_update_url = 'https://pue.theeventscalendar.com';
239
 
240
  if ( defined( 'PUE_UPDATE_URL' ) ) {
241
  $pue_update_url = PUE_UPDATE_URL;
@@ -498,7 +498,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
498
  if ( 'event-aggregator' === $this->get_slug() ) {
499
  $no_license_tooltip = sprintf(
500
  esc_html__( '%1$sBuy a license%2$s for the Event Aggregator service to access additional import features.', 'tribe-common' ),
501
- '<a href="https://evnt.is/196y" target="_blank">',
502
  '</a>'
503
  );
504
  }
@@ -587,7 +587,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
587
  var $el = $( this );
588
  var $field = $el.find( 'input' );
589
 
590
- if ( '' === $field.val().trim() ) {
591
  $el.find( '.license-test-results' ).hide();
592
  }
593
  } );
@@ -841,15 +841,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
841
  $class_name = $autoloader->get_prefix_by_slug( $this->get_slug() );
842
 
843
  if ( $class_name ) {
844
- $is_namespaced = false !== strpos( $class_name, '\\' );
845
-
846
- if ( $is_namespaced ) {
847
- // Handle class prefixes like Tribe\Plugin\.
848
- $class_name .= 'PUE\Helper';
849
- } else {
850
- // Handle class prefixes like Tribe__Plugin__.
851
- $class_name .= 'PUE__Helper';
852
- }
853
 
854
  if ( constant( $class_name . '::DATA' ) ) {
855
  $license_key = constant( $class_name . '::DATA' );
@@ -904,7 +896,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
904
  $response['status'] = 0;
905
 
906
  if ( ! $key ) {
907
- $response['message'] = sprintf( esc_html__( 'Hmmm... something\'s wrong with this validator. Please contact %ssupport%s.', 'tribe-common' ), '<a href="https://evnt.is/1u">', '</a>' );
908
  return $response;
909
  }
910
 
@@ -974,7 +966,7 @@ if ( ! class_exists( 'Tribe__PUE__Checker' ) ) {
974
  }
975
 
976
  public function get_license_expired_message() {
977
- return '<a href="https://evnt.is/195y" target="_blank" class="button button-primary">' .
978
  __( 'Renew Your License Now', 'tribe-common' ) .
979
  '<span class="screen-reader-text">' .
980
  __( ' (opens in a new window)', 'tribe-common' ) .
235
  * @return string
236
  */
237
  public function get_pue_update_url() {
238
+ $pue_update_url = 'https://pue.tri.be';
239
 
240
  if ( defined( 'PUE_UPDATE_URL' ) ) {
241
  $pue_update_url = PUE_UPDATE_URL;
498
  if ( 'event-aggregator' === $this->get_slug() ) {
499
  $no_license_tooltip = sprintf(
500
  esc_html__( '%1$sBuy a license%2$s for the Event Aggregator service to access additional import features.', 'tribe-common' ),
501
+ '<a href="https://m.tri.be/196y" target="_blank">',
502
  '</a>'
503
  );
504
  }
587
  var $el = $( this );
588
  var $field = $el.find( 'input' );
589
 
590
+ if ( '' === $.trim( $field.val() ) ) {
591
  $el.find( '.license-test-results' ).hide();
592
  }
593
  } );
841
  $class_name = $autoloader->get_prefix_by_slug( $this->get_slug() );
842
 
843
  if ( $class_name ) {
844
+ $class_name .= 'PUE__Helper';
 
 
 
 
 
 
 
 
845
 
846
  if ( constant( $class_name . '::DATA' ) ) {
847
  $license_key = constant( $class_name . '::DATA' );
896
  $response['status'] = 0;
897
 
898
  if ( ! $key ) {
899
+ $response['message'] = sprintf( esc_html__( 'Hmmm... something\'s wrong with this validator. Please contact %ssupport%s.', 'tribe-common' ), '<a href="https://m.tri.be/1u">', '</a>' );
900
  return $response;
901
  }
902
 
966
  }
967
 
968
  public function get_license_expired_message() {
969
+ return '<a href="https://m.tri.be/195y" target="_blank" class="button button-primary">' .
970
  __( 'Renew Your License Now', 'tribe-common' ) .
971
  '<span class="screen-reader-text">' .
972
  __( ' (opens in a new window)', 'tribe-common' ) .
common/src/Tribe/PUE/Notices.php CHANGED
@@ -10,9 +10,9 @@ class Tribe__PUE__Notices {
10
  const EXPIRED_KEY = 'expired_key';
11
  const STORE_KEY = 'tribe_pue_key_notices';
12
 
13
- protected $registered = [];
14
- protected $saved_notices = [];
15
- protected $notices = [];
16
 
17
  protected $plugin_names = [
18
  'pue_install_key_event_tickets_plus' => 'Event Tickets Plus',
@@ -30,8 +30,8 @@ class Tribe__PUE__Notices {
30
  */
31
  public function __construct() {
32
  $this->populate();
33
- add_action( 'current_screen', [ $this, 'setup_notices' ] );
34
- add_action( 'tribe_pue_notices_save_notices', [ $this, 'maybe_undismiss_notices' ] );
35
  }
36
 
37
  /**
@@ -53,7 +53,7 @@ class Tribe__PUE__Notices {
53
  * groups.
54
  */
55
  protected function populate() {
56
- $this->saved_notices = (array) get_option( self::STORE_KEY, [] );
57
 
58
  if ( empty( $this->saved_notices ) ) {
59
  return;
@@ -193,7 +193,7 @@ class Tribe__PUE__Notices {
193
  */
194
  public function setup_notices() {
195
  // Don't allow this to run multiple times
196
- remove_action( 'current_screen', [ $this, 'setup_notices' ] );
197
 
198
  // No need to display license key notices to users without appropriate capabilities
199
  if ( ! current_user_can( 'install_plugins' ) ) {
@@ -205,7 +205,7 @@ class Tribe__PUE__Notices {
205
  continue;
206
  }
207
 
208
- $callback = [ $this, 'render_' . $notice_type ];
209
 
210
  if ( is_callable( $callback ) ) {
211
  tribe_notice( 'pue_key-' . $notice_type, $callback, 'dismiss=1&type=warning' );
@@ -237,9 +237,9 @@ class Tribe__PUE__Notices {
237
 
238
  $empty_keys = $wpdb->get_results( $sql, ARRAY_N );
239
 
240
- $formatted_empty_keys = [];
241
  foreach ( $empty_keys as $empty_key ) {
242
- $empty_key = Tribe__Utils__Array::get( $empty_key, [ 0 ] );
243
  $formatted_empty_keys[] = Tribe__Utils__Array::get( $this->plugin_names, $empty_key );
244
  }
245
 
@@ -288,7 +288,7 @@ class Tribe__PUE__Notices {
288
  'tribe-common'
289
  ),
290
  $plugin_names,
291
- '<a href="http://evnt.is/19n4" target="_blank">',
292
  '</a>'
293
  );
294
 
@@ -333,12 +333,12 @@ class Tribe__PUE__Notices {
333
  'tribe-common'
334
  ),
335
  $plugin_names,
336
- '<a href="http://evnt.is/195d" target="_blank">',
337
  '</a>'
338
  );
339
 
340
  $renew_action =
341
- '<a href="http://evnt.is/195y" target="_blank" class="button button-primary">' .
342
  __( 'Renew Your License Now', 'tribe-common' ) .
343
  '<span class="screen-reader-text">' .
344
  __( ' (opens in a new window)', 'tribe-common' ) .
@@ -364,7 +364,7 @@ class Tribe__PUE__Notices {
364
  'tribe-common'
365
  ),
366
  $plugin_names,
367
- '<a href="http://evnt.is/195d" target="_blank">',
368
  '</a>'
369
  );
370
 
@@ -380,7 +380,7 @@ class Tribe__PUE__Notices {
380
  protected function render_notice( $slug, $inner_html ) {
381
 
382
  // Enqueue the notice CSS.
383
- tribe( 'assets' )->enqueue( [ 'tribe-common-admin' ] );
384
 
385
  $mascot = esc_url( Tribe__Main::instance()->plugin_url . 'src/resources/images/mascot.png' );
386
 
@@ -401,7 +401,7 @@ class Tribe__PUE__Notices {
401
  protected function find_your_key_text() {
402
  return sprintf(
403
  __( 'You can always check the status of your licenses by logging in to %1$syour account on theeventscalendar.com%2$s.', 'tribe-common' ),
404
- '<a href="http://evnt.is/195d" target="_blank">',
405
  '</a>'
406
  );
407
  }
10
  const EXPIRED_KEY = 'expired_key';
11
  const STORE_KEY = 'tribe_pue_key_notices';
12
 
13
+ protected $registered = array();
14
+ protected $saved_notices = array();
15
+ protected $notices = array();
16
 
17
  protected $plugin_names = [
18
  'pue_install_key_event_tickets_plus' => 'Event Tickets Plus',
30
  */
31
  public function __construct() {
32
  $this->populate();
33
+ add_action( 'current_screen', array( $this, 'setup_notices' ) );
34
+ add_action( 'tribe_pue_notices_save_notices', array( $this, 'maybe_undismiss_notices' ) );
35
  }
36
 
37
  /**
53
  * groups.
54
  */
55
  protected function populate() {
56
+ $this->saved_notices = (array) get_option( self::STORE_KEY, array() );
57
 
58
  if ( empty( $this->saved_notices ) ) {
59
  return;
193
  */
194
  public function setup_notices() {
195
  // Don't allow this to run multiple times
196
+ remove_action( 'current_screen', array( $this, 'setup_notices' ) );
197
 
198
  // No need to display license key notices to users without appropriate capabilities
199
  if ( ! current_user_can( 'install_plugins' ) ) {
205
  continue;
206
  }
207
 
208
+ $callback = array( $this, 'render_' . $notice_type );
209
 
210
  if ( is_callable( $callback ) ) {
211
  tribe_notice( 'pue_key-' . $notice_type, $callback, 'dismiss=1&type=warning' );
237
 
238
  $empty_keys = $wpdb->get_results( $sql, ARRAY_N );
239
 
240
+ $formatted_empty_keys = array();
241
  foreach ( $empty_keys as $empty_key ) {
242
+ $empty_key = Tribe__Utils__Array::get( $empty_key, array( 0 ) );
243
  $formatted_empty_keys[] = Tribe__Utils__Array::get( $this->plugin_names, $empty_key );
244
  }
245
 
288
  'tribe-common'
289
  ),
290
  $plugin_names,
291
+ '<a href="http://m.tri.be/19n4" target="_blank">',
292
  '</a>'
293
  );
294
 
333
  'tribe-common'
334
  ),
335
  $plugin_names,
336
+ '<a href="http://m.tri.be/195d" target="_blank">',
337
  '</a>'
338
  );
339
 
340
  $renew_action =
341
+ '<a href="http://m.tri.be/195y" target="_blank" class="button button-primary">' .
342
  __( 'Renew Your License Now', 'tribe-common' ) .
343
  '<span class="screen-reader-text">' .
344
  __( ' (opens in a new window)', 'tribe-common' ) .
364
  'tribe-common'
365
  ),
366
  $plugin_names,
367
+ '<a href="http://m.tri.be/195d" target="_blank">',
368
  '</a>'
369
  );
370
 
380
  protected function render_notice( $slug, $inner_html ) {
381
 
382
  // Enqueue the notice CSS.
383
+ tribe( 'assets' )->enqueue( array( 'tribe-common-admin' ) );
384
 
385
  $mascot = esc_url( Tribe__Main::instance()->plugin_url . 'src/resources/images/mascot.png' );
386
 
401
  protected function find_your_key_text() {
402
  return sprintf(
403
  __( 'You can always check the status of your licenses by logging in to %1$syour account on theeventscalendar.com%2$s.', 'tribe-common' ),
404
+ '<a href="http://m.tri.be/195d" target="_blank">',
405
  '</a>'
406
  );
407
  }
common/src/Tribe/PUE/Package_Handler.php CHANGED
@@ -102,7 +102,7 @@ class Tribe__PUE__Package_Handler {
102
  protected function download( $package ) {
103
  if ( empty( $this->filesystem ) ) {
104
  // try to connect
105
- $this->upgrader->fs_connect( [ WP_CONTENT_DIR, WP_PLUGIN_DIR ] );
106
 
107
  global $wp_filesystem;
108
 
102
  protected function download( $package ) {
103
  if ( empty( $this->filesystem ) ) {
104
  // try to connect
105
+ $this->upgrader->fs_connect( array( WP_CONTENT_DIR, WP_PLUGIN_DIR ) );
106
 
107
  global $wp_filesystem;
108
 
common/src/Tribe/PUE/Plugin_Info.php CHANGED
@@ -93,7 +93,8 @@ if ( ! class_exists( 'Tribe__PUE__Plugin_Info' ) ) {
93
 
94
  // The custom update API is built so that many fields have the same name and format
95
  // as those returned by the native WordPress.org API. These can be assigned directly.
96
- $sameFormat = [
 
97
  'name',
98
  'slug',
99
  'version',
@@ -108,8 +109,7 @@ if ( ! class_exists( 'Tribe__PUE__Plugin_Info' ) ) {
108
  'api_expired',
109
  'api_upgrade',
110
  'api_invalid',
111
- ];
112
-
113
  foreach ( $sameFormat as $field ) {
114
  if ( isset( $this->$field ) ) {
115
  $info->$field = $this->$field;
@@ -132,7 +132,7 @@ if ( ! class_exists( 'Tribe__PUE__Plugin_Info' ) ) {
132
  } elseif ( is_array( $this->sections ) ) {
133
  $info->sections = $this->sections;
134
  } else {
135
- $info->sections = [ 'description' => '' ];
136
  }
137
 
138
  return $info;
93
 
94
  // The custom update API is built so that many fields have the same name and format
95
  // as those returned by the native WordPress.org API. These can be assigned directly.
96
+
97
+ $sameFormat = array(
98
  'name',
99
  'slug',
100
  'version',
109
  'api_expired',
110
  'api_upgrade',
111
  'api_invalid',
112
+ );
 
113
  foreach ( $sameFormat as $field ) {
114
  if ( isset( $this->$field ) ) {
115
  $info->$field = $this->$field;
132
  } elseif ( is_array( $this->sections ) ) {
133
  $info->sections = $this->sections;
134
  } else {
135
+ $info->sections = array( 'description' => '' );
136
  }
137
 
138
  return $info;
common/src/Tribe/PUE/Update_Prevention.php CHANGED
@@ -20,7 +20,7 @@ class Update_Prevention {
20
  *
21
  * @param string $content Contents of the file in question.
22
  *
23
- * @return array Named array with [ class_name => version ] or empty if it didn't find it.
24
  */
25
  public function get_dependencies( $content ) {
26
  $regex = "/'(?<plugin>[^']*)'(?:[^']*)'(?<version>[^']*)',/";
@@ -36,7 +36,7 @@ class Update_Prevention {
36
 
37
  /**
38
  * Checks for the list of constants associate with plugin to make sure we are dealing
39
- * with a plugin owned by The Events Calendar.
40
  *
41
  * @since 4.9.12
42
  *
@@ -98,7 +98,7 @@ class Update_Prevention {
98
 
99
  $register_path = $source . '/src/Tribe/Plugin_Register.php';
100
 
101
- // Bail when the Plugin Register file doesn't exist.
102
  if ( ! file_exists( $register_path ) ) {
103
  return $source;
104
  }
@@ -116,7 +116,7 @@ class Update_Prevention {
116
 
117
  $constant_name = $class_name . '::VERSION';
118
 
119
- // Skip if we can't find the version constant.
120
  if ( ! defined( $constant_name ) ) {
121
  continue;
122
  }
@@ -178,7 +178,7 @@ class Update_Prevention {
178
  $plugins_classes = array_keys( $incompatible_plugins );
179
  $plugins_list_html = tribe( 'pue.notices' )->get_formatted_plugin_names_from_classes( $plugins_classes );
180
 
181
- $link_read_more = '<a href="http://evnt.is/1aev" target="_blank">' . esc_html__( 'Read more', 'tribe-common' ) . '.</a>';
182
 
183
  $message = sprintf(
184
  esc_html__( 'Your update failed due to an incompatibility between the version (%1$s) of the %2$s you tried to update to and the version of %3$s that you are using. %4$s', 'tribe-common' ),
20
  *
21
  * @param string $content Contents of the file in question.
22
  *
23
+ * @return array Named array with [ class_name => version ] or empty if it didnt find it.
24
  */
25
  public function get_dependencies( $content ) {
26
  $regex = "/'(?<plugin>[^']*)'(?:[^']*)'(?<version>[^']*)',/";
36
 
37
  /**
38
  * Checks for the list of constants associate with plugin to make sure we are dealing
39
+ * with a plugin owned by Modern Tribe.
40
  *
41
  * @since 4.9.12
42
  *
98
 
99
  $register_path = $source . '/src/Tribe/Plugin_Register.php';
100
 
101
+ // Bail when the Plugin Register file doesnt exist.
102
  if ( ! file_exists( $register_path ) ) {
103
  return $source;
104
  }
116
 
117
  $constant_name = $class_name . '::VERSION';
118
 
119
+ // Skip if we cant find the version constant.
120
  if ( ! defined( $constant_name ) ) {
121
  continue;
122
  }
178
  $plugins_classes = array_keys( $incompatible_plugins );
179
  $plugins_list_html = tribe( 'pue.notices' )->get_formatted_plugin_names_from_classes( $plugins_classes );
180
 
181
+ $link_read_more = '<a href="http://m.tri.be/1aev" target="_blank">' . esc_html__( 'Read more', 'tribe-common' ) . '.</a>';
182
 
183
  $message = sprintf(
184
  esc_html__( 'Your update failed due to an incompatibility between the version (%1$s) of the %2$s you tried to update to and the version of %3$s that you are using. %4$s', 'tribe-common' ),
common/src/Tribe/PUE/Utility.php CHANGED
@@ -28,7 +28,7 @@ if ( ! class_exists( 'Tribe__PUE__Utility' ) ) {
28
  public $version;
29
  public $homepage;
30
  public $download_url;
31
- public $sections = [];
32
  public $upgrade_notice;
33
  public $custom_update;
34
 
@@ -61,7 +61,7 @@ if ( ! class_exists( 'Tribe__PUE__Utility' ) ) {
61
  */
62
  public static function from_plugin_info( $info ) {
63
  $update = new Tribe__PUE__Utility();
64
- $copyFields = [
65
  'id',
66
  'slug',
67
  'version',
@@ -76,7 +76,7 @@ if ( ! class_exists( 'Tribe__PUE__Utility' ) ) {
76
  'api_invalid_message',
77
  'api_inline_invalid_message',
78
  'custom_update',
79
- ];
80
 
81
  foreach ( $copyFields as $field ) {
82
  if ( ! isset( $info->$field ) ) {
28
  public $version;
29
  public $homepage;
30
  public $download_url;
31
+ public $sections = array();
32
  public $upgrade_notice;
33
  public $custom_update;
34
 
61
  */
62
  public static function from_plugin_info( $info ) {
63
  $update = new Tribe__PUE__Utility();
64
+ $copyFields = array(
65
  'id',
66
  'slug',
67
  'version',
76
  'api_invalid_message',
77
  'api_inline_invalid_message',
78
  'custom_update',
79
+ );
80
 
81
  foreach ( $copyFields as $field ) {
82
  if ( ! isset( $info->$field ) ) {
common/src/Tribe/Plugin_Meta_Links.php CHANGED
@@ -30,7 +30,7 @@ class Tribe__Plugin_Meta_Links {
30
  * }
31
  * }
32
  */
33
- private $meta_links = [];
34
 
35
  /**
36
  * Returns the singleton instance of this class.
@@ -42,7 +42,7 @@ class Tribe__Plugin_Meta_Links {
42
  }
43
 
44
  private function __construct() {
45
- add_action( 'plugin_row_meta', [ $this, 'filter_meta_links' ], 10, 2 );
46
  }
47
 
48
  /**
@@ -53,7 +53,7 @@ class Tribe__Plugin_Meta_Links {
53
  * @param string $href URL for the link.
54
  * @param array $attributes Key => value attributes for element.
55
  */
56
- public function add_link( $plugin, $title, $href, $attributes = [] ) {
57
  $attributes['href'] = $href;
58
 
59
  // Build the <a> element.
@@ -79,12 +79,12 @@ class Tribe__Plugin_Meta_Links {
79
  $basename = plugin_basename( $plugin );
80
 
81
  // Get any current links for this plugin.
82
- $cur_links = Tribe__Utils__Array::get( $this->meta_links, $basename, [] );
83
 
84
- $cur_links[] = [
85
- 'html' => $html,
86
  'remove' => $remove,
87
- ];
88
 
89
  $this->meta_links = Tribe__Utils__Array::set( $this->meta_links, $basename, $cur_links );
90
  }
@@ -99,7 +99,7 @@ class Tribe__Plugin_Meta_Links {
99
  */
100
  public function filter_meta_links( $links, $basename ) {
101
  // Gets any links that are set for this plugin, defaults to an empty array.
102
- $set_links = Tribe__Utils__Array::get( $this->meta_links, $basename, [] );
103
 
104
  foreach ( $set_links as $link ) {
105
 
30
  * }
31
  * }
32
  */
33
+ private $meta_links = array();
34
 
35
  /**
36
  * Returns the singleton instance of this class.
42
  }
43
 
44
  private function __construct() {
45
+ add_action( 'plugin_row_meta', array( $this, 'filter_meta_links' ), 10, 2 );
46
  }
47
 
48
  /**
53
  * @param string $href URL for the link.
54
  * @param array $attributes Key => value attributes for element.
55
  */
56
+ public function add_link( $plugin, $title, $href, $attributes = array() ) {
57
  $attributes['href'] = $href;
58
 
59
  // Build the <a> element.
79
  $basename = plugin_basename( $plugin );
80
 
81
  // Get any current links for this plugin.
82
+ $cur_links = Tribe__Utils__Array::get( $this->meta_links, $basename, array() );
83
 
84
+ $cur_links[] = array(
85
+ 'html' => $html,
86
  'remove' => $remove,
87
+ );
88
 
89
  $this->meta_links = Tribe__Utils__Array::set( $this->meta_links, $basename, $cur_links );
90
  }
99
  */
100
  public function filter_meta_links( $links, $basename ) {
101
  // Gets any links that are set for this plugin, defaults to an empty array.
102
+ $set_links = Tribe__Utils__Array::get( $this->meta_links, $basename, array() );
103
 
104
  foreach ( $set_links as $link ) {
105
 
common/src/Tribe/Plugins.php CHANGED
@@ -131,37 +131,5 @@ if ( ! class_exists( 'Tribe__Plugins' ) ) {
131
  return apply_filters( 'tribe_plugins_get_list', $this->tribe_plugins );
132
  }
133
 
134
- /**
135
- * Checks if given plugin is active. Usually a The Events Calendar plugin.
136
- *
137
- * @param string $plugin_name The name of the plugin. Each plugin defines their name upon hooking on the filter.
138
- *
139
- * @since 4.12.1
140
- *
141
- * @return bool True if plugin is active. False if plugin is not active.
142
- */
143
- public static function is_active( $plugin_name ) {
144
- if ( ! did_action( "plugins_loaded" ) ) {
145
- _doing_it_wrong(
146
- __METHOD__,
147
- __( 'Using this function before "plugins_loaded" action has fired can return unreliable results.', 'tribe-common' ),
148
- '4.12.6'
149
- );
150
- }
151
-
152
- /**
153
- * Filters the array that each Tribe plugin overrides to
154
- * set itself as active when this function is called.
155
- *
156
- * @example [ 'the-events-calendar' => true, 'event-tickets' => true ]
157
- *
158
- * @since 4.12.1
159
- *
160
- * @return array Plugin slugs as keys and bool as value for whether it's active or not.
161
- */
162
- $plugins = apply_filters( 'tribe_active_plugins', [] );
163
-
164
- return isset( $plugins[ $plugin_name ] ) && tribe_is_truthy( $plugins[ $plugin_name ] );
165
- }
166
  }
167
  }
131
  return apply_filters( 'tribe_plugins_get_list', $this->tribe_plugins );
132
  }
133
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
  }
135
  }
common/src/Tribe/Plugins_API.php CHANGED
@@ -20,213 +20,128 @@ class Tribe__Plugins_API {
20
  * @return array
21
  */
22
  public function get_products() {
23
- $products = [
24
- 'the-events-calendar' => [
25
- 'title' => __( 'The Events Calendar', 'tribe-common' ),
26
- 'slug' => 'the-events-calendar',
27
- 'link' => 'https://evnt.is/1ai-',
28
- 'description' => __( 'Our flagship free calendar', 'tribe-common' ),
29
- 'features' => [
30
- __( 'Customizable', 'tribe-common' ),
31
- __( 'Import & export events', 'tribe-common' ),
32
- __( 'Timezone support', 'tribe-common' ),
33
- __( 'Multiple views', 'tribe-common' ),
34
- ],
35
- 'image' => 'images/shop/calendar.jpg',
36
- 'logo' => 'images/logo/the-events-calendar.svg',
37
- 'is_installed' => class_exists( 'Tribe__Events__Main' ),
38
- 'free' => true,
39
- 'active_installs' => 800000,
40
- ],
41
- 'event-aggregator' => [
42
- 'title' => __( 'Event Aggregator', 'tribe-common' ),
43
- 'slug' => 'event-aggregator',
44
- 'link' => 'https://evnt.is/1aj0',
45
- 'description' => __( 'Automated imports for your calendar', 'tribe-common' ),
46
- 'features' => [
47
- __( 'Schedule automated imports', 'tribe-common' ),
48
- __( 'Customizable', 'tribe-common' ),
49
- __( 'Works with Google Calendar, Meetup, and more', 'tribe-common' ),
50
- __( 'Refine by date, location, or keyword', 'tribe-common' ),
51
- ],
52
- 'image' => 'images/shop/aggregator.jpg',
53
- 'logo' => 'images/logo/event-aggregator.svg',
54
- 'is_installed' => class_exists( 'Tribe__Events__Aggregator' ) && Tribe__Events__Aggregator::is_service_active(),
55
- 'free' => false,
56
  'active_installs' => 20000,
57
- ],
58
- 'events-calendar-pro' => [
59
- 'title' => __( 'Events Calendar Pro', 'tribe-common' ),
60
- 'slug' => 'events-calendar-pro',
61
- 'link' => 'https://evnt.is/1ai-',
62
- 'description' => __( 'Power up your calendar with Pro', 'tribe-common' ),
63
- 'features' => [
64
- __( 'Premium support', 'tribe-common' ),
65
- __( 'Recurring events', 'tribe-common' ),
66
- __( 'Additional views', 'tribe-common' ),
67
- __( 'Shortcodes', 'tribe-common' ),
68
- ],
69
- 'image' => 'images/shop/pro.jpg',
70
- 'logo' => 'images/logo/events-calendar-pro.svg',
71
- 'is_installed' => class_exists( 'Tribe__Events__Pro__Main' ),
72
- 'free' => false,
73
  'active_installs' => 100000,
74
- ],
75
- 'event-tickets' => [
76
- 'title' => __( 'Event Tickets', 'tribe-common' ),
77
- 'slug' => 'event-tickets',
78
- 'link' => 'https://evnt.is/1aj1',
79
- 'description' => __( 'Manage ticketing and RSVPs', 'tribe-common' ),
80
- 'features' => [
81
- __( 'Add tickets and RSVP to any post', 'tribe-common' ),
82
- __( 'Paypal integration', 'tribe-common' ),
83
- __( 'Attendee reports', 'tribe-common' ),
84
- __( 'Customizable ticket template', 'tribe-common' ),
85
- ],
86
- 'image' => 'images/shop/tickets.jpg',
87
- 'logo' => 'images/logo/event-tickets.svg',
88
- 'is_installed' => class_exists( 'Tribe__Tickets__Main' ),
89
- 'free' => true,
90
  'active_installs' => 20000,
91
- ],
92
- 'event-tickets-plus' => [
93
- 'title' => __( 'Event Tickets Plus', 'tribe-common' ),
94
- 'slug' => 'event-tickets-plus',
95
- 'link' => 'http://evnt.is/1aj1',
96
- 'description' => __( 'Monetize your events', 'tribe-common' ),
97
- 'features' => [
98
- __( 'Custom registration fields', 'tribe-common' ),
99
- __( 'WooCommerce compatibility', 'tribe-common' ),
100
- __( 'Ticket scanning with mobile app', 'tribe-common' ),
101
- __( 'Custom attendee registration fields', 'tribe-common' ),
102
- ],
103
- 'image' => 'images/shop/tickets-plus.jpg',
104
- 'logo' => 'images/logo/event-tickets-plus.svg',
105
- 'is_installed' => class_exists( 'Tribe__Tickets_Plus__Main' ),
106
- 'free' => false,
107
  'active_installs' => 10000,
108
- ],
109
- 'promoter' => [
110
- 'title' => __( 'Promoter', 'tribe-common' ),
111
- 'slug' => 'promoter',
112
- 'link' => 'https://evnt.is/1acy',
113
- 'description' => __( 'An email marketing solution for events and the people running them', 'tribe-common' ),
114
- 'features' => [
115
- __( 'Automate email touchpoints', 'tribe-common' ),
116
- __( 'Customize email templates', 'tribe-common' ),
117
- __( 'Streamline your email process', 'tribe-common' ),
118
- __( 'Segment your attendee lists', 'tribe-common' ),
119
- ],
120
- 'image' => 'images/shop/promoter.jpg',
121
- 'logo' => 'images/logo/promoter.svg',
122
- 'is_installed' => tribe( 'promoter.pue' )->has_license_key(),
123
- 'free' => false,
124
  'active_installs' => 1000,
125
- ],
126
- 'tribe-filterbar' => [
127
- 'title' => __( 'Filter Bar', 'tribe-common' ),
128
- 'slug' => 'tribe-filterbar',
129
- 'link' => 'https://evnt.is/19o6',
130
- 'description' => __( 'Help users find exactly the right event', 'tribe-common' ),
131
- 'features' => [
132
- __( 'Configurable set of filters', 'tribe-common' ),
133
- __( 'Horizontal or vertical', 'tribe-common' ),
134
- __( 'Filter category, price, and more', 'tribe-common' ),
135
- __( 'Filter distance (for Events Calendar Pro)', 'tribe-common' ),
136
- ],
137
- 'image' => 'images/shop/filter-bar.jpg',
138
- 'logo' => 'images/logo/filterbar.svg',
139
- 'is_installed' => class_exists( 'Tribe__Events__Filterbar__View' ),
140
- 'free' => false,
141
  'active_installs' => 20000,
142
- ],
143
- 'events-community' => [
144
- 'title' => __( 'Community Events', 'tribe-common' ),
145
- 'slug' => 'events-community',
146
- 'link' => 'https://evnt.is/19o7',
147
- 'description' => __( 'Users submit events to your calendar', 'tribe-common' ),
148
- 'features' => [
149
- __( 'Publishing Control', 'tribe-common' ),
150
- __( 'Event Submission Form', 'tribe-common' ),
151
- __( 'Registered User Settings', 'tribe-common' ),
152
- __( 'Email notifications', 'tribe-common' ),
153
- ],
154
- 'image' => 'images/shop/community.jpg',
155
- 'logo' => 'images/logo/community-events.svg',
156
- 'is_installed' => class_exists( 'Tribe__Events__Community__Main' ),
157
- 'free' => false,
158
  'active_installs' => 20000,
159
- ],
160
- 'events-community-tickets' => [
161
- 'title' => __( 'Community Tickets', 'tribe-common' ),
162
- 'slug' => 'events-community-tickets',
163
- 'link' => 'https://evnt.is/19o8',
164
- 'description' => __( 'Run your own events marketplace', 'tribe-common' ),
165
- 'features' => [
166
- __( 'Users submit events and sell tickets', 'tribe-common' ),
167
- __( 'Split commission with users', 'tribe-common' ),
168
- __( 'No admin access required', 'tribe-common' ), /* code review: fail this */
169
- __( 'Sales reporting', 'tribe-common' ),
170
- ],
171
- 'requires' => _x( 'Event Tickets Plus and Community Events', 'Names of required plugins for Community Tickets', 'tribe-common' ),
172
- 'image' => 'images/shop/community-tickets.jpg',
173
- 'logo' => 'images/logo/community-tickets.svg',
174
- 'is_installed' => class_exists( 'Tribe__Events__Community__Tickets__Main' ),
175
- 'free' => false,
176
  'active_installs' => 10000,
177
- ],
178
- 'tribe-eventbrite' => [
179
- 'title' => __( 'Eventbrite Tickets', 'tribe-common' ),
180
- 'slug' => 'tribe-eventbrite',
181
- 'link' => 'https://evnt.is/19o9',
182
- 'description' => __( 'Unite the power of TEC with the ticketing of Eventbrite', 'tribe-common' ),
183
- 'features' => [
184
- __( 'Manage tickets from WordPress', 'tribe-common' ),
185
- __( 'Ticket availability automatically updates', 'tribe-common' ),
186
- __( 'Integrated with your events on Eventbrite', 'tribe-common' ),
187
- __( 'Automatically import your events', 'tribe-common' ),
188
- ],
189
- 'image' => 'images/shop/eventbrite.jpg',
190
- 'logo' => 'images/logo/eventbrite-tickets.svg',
191
- 'is_installed' => class_exists( 'Tribe__Events__Tickets__Eventbrite__Main' ),
192
- 'free' => false,
193
  'active_installs' => 20000,
194
- ],
195
- 'image-widget-plus' => [
196
- 'title' => __( 'Image Widget Plus', 'tribe-common' ),
197
- 'slug' => 'image-widget-plus',
198
- 'link' => 'https://evnt.is/19nv',
199
- 'description' => __( 'Beautiful display options for your favorite photos.', 'tribe-common' ),
200
- 'features' => [
201
- __( 'Multi-Image Support', 'tribe-common' ),
202
- __( 'Lightbox', 'tribe-common' ),
203
- __( 'Slideshow', 'tribe-common' ),
204
- __( 'Random Images', 'tribe-common' ),
205
- ],
206
- 'image' => 'images/shop/image-widget-plus.jpg',
207
- 'logo' => 'images/logo/image-widget-plus.svg',
208
- 'is_installed' => class_exists( 'Tribe__Image__Plus__Main' ),
209
- 'free' => false,
210
  'active_installs' => 2500,
211
- ],
212
- 'events-virtual' => [
213
- 'title' => __( 'Virtual Events', 'tribe-common' ),
214
- 'slug' => 'events-virtual',
215
- 'link' => 'http://evnt.is/virtual-events',
216
- 'description' => __( 'Features to optimize your calendar for virtual events.', 'tribe-common' ),
217
- 'features' => [
218
- __( 'Zoom integration', 'tribe-common' ),
219
- __( 'Virtual event labels', 'tribe-common' ),
220
- __( 'Status control for canceled or postponed events', 'tribe-common' ),
221
- __( 'Embed livestreams and videos', 'tribe-common' ),
222
- ],
223
- 'image' => 'images/shop/virtual-events.jpg',
224
- 'logo' => 'images/logo/virtual-events.svg',
225
- 'is_installed' => defined( 'EVENTS_VIRTUAL_FILE' ),
226
- 'free' => false,
227
- 'active_installs' => 2500,
228
- ],
229
- ];
230
 
231
  return $products;
232
  }
20
  * @return array
21
  */
22
  public function get_products() {
23
+ $products = array(
24
+ 'the-events-calendar' => array(
25
+ 'title' => __( 'The Events Calendar', 'tribe-common' ),
26
+ 'slug' => 'the-events-calendar',
27
+ 'link' => null,
28
+ 'description' => __( 'Create an events calendar and manage it with ease. The Events Calendar plugin provides professional-level quality and features backed by a team you can trust.', 'tribe-common' ),
29
+ 'image' => 'https://ps.w.org/the-events-calendar/assets/icon-128x128.png?rev=1342379',
30
+ 'is_installed' => class_exists( 'Tribe__Events__Main' ),
31
+ 'active_installs' => 500000,
32
+ ),
33
+ 'event-aggregator' => array(
34
+ 'title' => __( 'Event Aggregator', 'tribe-common' ),
35
+ 'slug' => 'event-aggregator',
36
+ 'link' => 'https://theeventscalendar.com/product/event-aggregator/?utm_campaign=in-app&utm_source=addonspage&utm_medium=event-aggregator&utm_content=appstoreembedded-1',
37
+ 'description' => __( 'Event Aggregator adds massive import functionality to your calendar. Before you know it, you’ll be importing events from Meetup, Eventbrite, Google Calendar, iCalendar, and other URLs with ease. Schedule imports to run automatically behind-the-scenes or run them manually when you’re ready. Go ahead and import to your heart’s content—Event Aggregator hooks you up with a central dashboard in the admin to make managing your imports a breeze.', 'tribe-common' ),
38
+ 'image' => 'images/app-shop-ical.jpg',
39
+ 'is_installed' => class_exists( 'Tribe__Events__Aggregator' ) && Tribe__Events__Aggregator::is_service_active(),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  'active_installs' => 20000,
41
+ ),
42
+ 'events-calendar-pro' => array(
43
+ 'title' => __( 'Events Calendar PRO', 'tribe-common' ),
44
+ 'slug' => 'events-calendar-pro',
45
+ 'link' => 'https://theeventscalendar.com/product/wordpress-events-calendar-pro/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-events-calendar-pro&utm_content=appstoreembedded-1',
46
+ 'buy-now' => 'http://m.tri.be/19o4',
47
+ 'description' => sprintf(
48
+ __( 'The Events Calendar PRO is a paid Add-On to our open source WordPress plugin %1$sThe Events Calendar%2$s. PRO offers a whole host of calendar features including recurring events, custom event attributes, saved venues and organizers, venue pages, advanced event admin and lots more.', 'tribe-common' ),
49
+ '<a href="http://m.tri.be/18vc">',
50
+ '</a>'
51
+ ),
52
+ 'image' => 'images/app-shop-pro.jpg',
53
+ 'is_installed' => class_exists( 'Tribe__Events__Pro__Main' ),
 
 
 
54
  'active_installs' => 100000,
55
+ ),
56
+ 'event-tickets' => array(
57
+ 'title' => __( 'Event Tickets', 'tribe-common' ),
58
+ 'slug' => 'event-tickets',
59
+ 'link' => null,
60
+ 'description' => __( 'Event Tickets provides a simple way for visitors to RSVP to your events. As a standalone plugin, it enables you to add RSVP functionality to posts or pages. When paired with The Events Calendar, you can add that same RSVP functionality directly to your event listings.', 'tribe-common' ),
61
+ 'image' => 'https://ps.w.org/event-tickets/assets/icon-128x128.png?rev=1299138',
62
+ 'is_installed' => class_exists( 'Tribe__Tickets__Main' ),
 
 
 
 
 
 
 
 
63
  'active_installs' => 20000,
64
+ ),
65
+ 'event-tickets-plus' => array(
66
+ 'title' => __( 'Event Tickets Plus', 'tribe-common' ),
67
+ 'slug' => 'event-tickets-plus',
68
+ 'link' => 'https://theeventscalendar.com/product/wordpress-event-tickets-plus/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-event-tickets-plus&utm_content=appstoreembedded-1',
69
+ 'buy-now' => 'http://m.tri.be/19o5',
70
+ 'description' => sprintf(
71
+ __( 'Event Tickets Plus allows you to sell tickets to your events using WooCommerce, Easy Digital Downloads, or our built in Tribe Commerce tool. Add tickets to your posts and pages, or add %1$sThe Events Calendar%2$s and sell tickets from your event listings. Create custom registration forms, manage attendees, use custom capacity options, and more. Guest check in is easy with QR codes and our custom scanning app.', 'tribe-common' ),
72
+ '<a href="http://m.tri.be/18vc">',
73
+ '</a>'
74
+ ),
75
+ 'image' => 'images/app-shop-tickets-plus.jpg',
76
+ 'is_installed' => class_exists( 'Tribe__Tickets_Plus__Main' ),
 
 
 
77
  'active_installs' => 10000,
78
+ ),
79
+ 'promoter' => array(
80
+ 'title' => __( 'Promoter', 'tribe-common' ),
81
+ 'slug' => 'promoter',
82
+ 'link' => 'https://theeventscalendar.com/product/promoter/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-events-promoter&utm_content=appstoreembedded-1',
83
+ 'buy-now' => 'http://m.tri.be/1acy',
84
+ 'description' => __( 'With Promoter, you’ll connect with your community via email through every stage of your event, bolster event attendance, and manage notifications more efficiently than ever. Increase event attendance and engagement by automatically sending reminders for on-sale dates, event times and more.', 'tribe-common' ),
85
+ 'image' => 'images/app-shop-promoter.jpg',
86
+ 'is_installed' => false,
 
 
 
 
 
 
 
87
  'active_installs' => 1000,
88
+ ),
89
+ 'tribe-filterbar' => array(
90
+ 'title' => __( 'Filter Bar', 'tribe-common' ),
91
+ 'slug' => 'tribe-filterbar',
92
+ 'link' => 'https://theeventscalendar.com/product/wordpress-events-filterbar/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-events-filterbar&utm_content=appstoreembedded-1',
93
+ 'buy-now' => 'http://m.tri.be/19o6',
94
+ 'description' => __( 'It is awesome that your calendar is <em>THE PLACE</em> to get hooked up with prime choice ways to spend time. You have more events than Jabba the Hutt has rolls. Too bad visitors are hiring a personal assistant to go through all the choices. Ever wish you could just filter the calendar to only show events in walking distance, on a weekend, that are free? BOOM. Now you can. Introducing… the Filter Bar.', 'tribe-common' ),
95
+ 'image' => 'images/app-shop-filter-bar.jpg',
96
+ 'is_installed' => class_exists( 'Tribe__Events__Filterbar__View' ),
 
 
 
 
 
 
 
97
  'active_installs' => 20000,
98
+ ),
99
+ 'events-community' => array(
100
+ 'title' => __( 'Community Events', 'tribe-common' ),
101
+ 'slug' => 'events-community',
102
+ 'link' => 'https://theeventscalendar.com/product/wordpress-community-events/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-community-events&utm_content=appstoreembedded-1',
103
+ 'buy-now' => 'http://m.tri.be/19o7',
104
+ 'description' => __( 'Accept user-submitted events on your site! With Community Events, you can accept public submissions or require account sign-on. Settings give you the options to save as a draft or publish automatically, enable categories and tags, and choose whether users can edit/manage their own events or simply submit. Best of all - setup is easy! Just activate, configure the options, and off you go.', 'tribe-common' ),
105
+ 'image' => 'images/app-shop-community.jpg',
106
+ 'is_installed' => class_exists( 'Tribe__Events__Community__Main' ),
 
 
 
 
 
 
 
107
  'active_installs' => 20000,
108
+ ),
109
+ 'events-community-tickets' => array(
110
+ 'title' => __( 'Community Tickets', 'tribe-common' ),
111
+ 'slug' => 'events-community-tickets',
112
+ 'link' => 'https://theeventscalendar.com/product/community-tickets/?utm_campaign=in-app&utm_source=addonspage&utm_medium=community-tickets&utm_content=appstoreembedded-1',
113
+ 'buy-now' => 'http://m.tri.be/19o8',
114
+ 'description' => __( 'Enable Community Events organizers to offer tickets to their events. You can set flexible payment and fee options. They can even check-in attendees to their events! All of this managed from the front-end of your site without ever needing to grant access to your admin', 'tribe-common' ),
115
+ 'requires' => _x( 'Event Tickets Plus and Community Events', 'Names of required plugins for Community Tickets', 'tribe-common' ),
116
+ 'image' => 'images/app-shop-community-tickets.jpg',
117
+ 'is_installed' => class_exists( 'Tribe__Events__Community__Tickets__Main' ),
 
 
 
 
 
 
 
118
  'active_installs' => 10000,
119
+ ),
120
+ 'tribe-eventbrite' => array(
121
+ 'title' => __( 'Eventbrite Tickets', 'tribe-common' ),
122
+ 'slug' => 'tribe-eventbrite',
123
+ 'link' => 'https://theeventscalendar.com/product/wordpress-eventbrite-tickets/?utm_campaign=in-app&utm_source=addonspage&utm_medium=wordpress-eventbrite-tickets&utm_content=appstoreembedded-1',
124
+ 'buy-now' => 'http://m.tri.be/19o9',
125
+ 'description' => sprintf(
126
+ __( 'The Eventbrite Tickets add-on allows you to create & sell tickets through The Events Calendar using the power of %1$sEventbrite%2$s. Whether you’re creating your ticket on the WordPress dashboard or importing the details of an already-existing event from %1$sEventbrite.com%2$s, this add-on brings the power of the Eventbrite API to your calendar.', 'tribe-common' ),
127
+ '<a href="http://www.eventbrite.com/r/etp">',
128
+ '</a>'
129
+ ),
130
+ 'image' => 'images/app-shop-eventbrite.jpg',
131
+ 'is_installed' => class_exists( 'Tribe__Events__Tickets__Eventbrite__Main' ),
 
 
 
132
  'active_installs' => 20000,
133
+ ),
134
+ 'image-widget-plus' => array(
135
+ 'title' => __( 'Image Widget Plus', 'tribe-common' ),
136
+ 'slug' => 'image-widget-plus',
137
+ 'link' => 'http://m.tri.be/19nv',
138
+ 'buy-now' => 'http://m.tri.be/19oa',
139
+ 'description' => __( 'Take your image widgets to the next level with Image Widget Plus! We\'ve taken the simple functionality of our basic Image Widget and amped it up with several popular feature requests - multiple image support, slideshow, lightbox, and random image - all backed by a full year of premium support.', 'tribe-common' ),
140
+ 'image' => 'images/app-shop-image-widget-plus.jpg',
141
+ 'is_installed' => class_exists( 'Tribe__Image__Plus__Main' ),
 
 
 
 
 
 
 
142
  'active_installs' => 2500,
143
+ ),
144
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
 
146
  return $products;
147
  }
common/src/Tribe/Post_History.php CHANGED
@@ -47,16 +47,16 @@ class Tribe__Post_History {
47
  * @param string $message
48
  * @param array $data
49
  */
50
- public function add_entry( $message, array $data = [] ) {
51
  $datetime = current_time( 'mysql' );
52
  $checksum = uniqid( substr( hash( 'md5', $datetime . $message . serialize( $data ) ), 0, 8 ) . '_' );
53
 
54
- $log_entry = wp_slash( json_encode( [
55
  'datetime' => $datetime,
56
  'message' => $message,
57
  'data' => $data,
58
  'checksum' => $checksum,
59
- ] ) );
60
 
61
  add_post_meta( $this->post_id, self::HISTORY_KEY, $log_entry );
62
  }
@@ -84,7 +84,7 @@ class Tribe__Post_History {
84
  * @return array
85
  */
86
  public function get_entries() {
87
- $entries = [];
88
 
89
  foreach ( get_post_meta( $this->post_id, self::HISTORY_KEY ) as $log_entry ) {
90
  $log_entry = json_decode( $log_entry );
47
  * @param string $message
48
  * @param array $data
49
  */
50
+ public function add_entry( $message, array $data = array() ) {
51
  $datetime = current_time( 'mysql' );
52
  $checksum = uniqid( substr( hash( 'md5', $datetime . $message . serialize( $data ) ), 0, 8 ) . '_' );
53
 
54
+ $log_entry = wp_slash( json_encode( array(
55
  'datetime' => $datetime,
56
  'message' => $message,
57
  'data' => $data,
58
  'checksum' => $checksum,
59
+ ) ) );
60
 
61
  add_post_meta( $this->post_id, self::HISTORY_KEY, $log_entry );
62
  }
84
  * @return array
85
  */
86
  public function get_entries() {
87
+ $entries = array();
88
 
89
  foreach ( get_post_meta( $this->post_id, self::HISTORY_KEY ) as $log_entry ) {
90
  $log_entry = json_decode( $log_entry );
common/src/Tribe/Process/Handler.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * Class Tribe__Process__Handler
5
  *
6
- * The base class for all The Events Calendar async process handlers.
7
  *
8
  * @since 4.7.12
9
  * @since 4.9.5 Removed dependency on `WP_Async_Request` class.
3
  /**
4
  * Class Tribe__Process__Handler
5
  *
6
+ * The base class for all Modern Tribe async process handlers.
7
  *
8
  * @since 4.7.12
9
  * @since 4.9.5 Removed dependency on `WP_Async_Request` class.
common/src/Tribe/Promise.php CHANGED
@@ -60,13 +60,13 @@ class Tribe__Promise extends Tribe__Process__Queue {
60
  * @param array $extra_args An array of extra arguments that will be passed to the
61
  * callback function.
62
  */
63
- public function __construct( $callback = null, array $items = null, array $extra_args = [] ) {
64
  parent::__construct();
65
 
66
  if ( ! empty( $callback ) && ! empty( $items ) ) {
67
  foreach ( $items as $target ) {
68
  $item['callback'] = $callback;
69
- $item['args'] = array_merge( [ $target ], $extra_args );
70
  $this->push_to_queue( $item );
71
  }
72
  }
@@ -272,7 +272,7 @@ class Tribe__Promise extends Tribe__Process__Queue {
272
  */
273
  protected function unpack_callback( $callback ) {
274
  if ( $callback instanceof Tribe__Utils__Callback ) {
275
- $callback = [ tribe( $callback->get_slug() ), $callback->get_method() ];
276
  }
277
 
278
  return $callback;
60
  * @param array $extra_args An array of extra arguments that will be passed to the
61
  * callback function.
62
  */
63
+ public function __construct( $callback = null, array $items = null, array $extra_args = array() ) {
64
  parent::__construct();
65
 
66
  if ( ! empty( $callback ) && ! empty( $items ) ) {
67
  foreach ( $items as $target ) {
68
  $item['callback'] = $callback;
69
+ $item['args'] = array_merge( array( $target ), $extra_args );
70
  $this->push_to_queue( $item );
71
  }
72
  }
272
  */
273
  protected function unpack_callback( $callback ) {
274
  if ( $callback instanceof Tribe__Utils__Callback ) {
275
+ $callback = array( tribe( $callback->get_slug() ), $callback->get_method() );
276
  }
277
 
278
  return $callback;
common/src/Tribe/Promoter/Auth.php CHANGED
@@ -15,35 +15,14 @@ class Tribe__Promoter__Auth {
15
  /**
16
  * Tribe__Promoter__Auth constructor.
17
  *
18
- * @since 4.9
19
- *
20
  * @param Tribe__Promoter__Connector $connector Connector object.
21
- * @return void
 
22
  */
23
  public function __construct( Tribe__Promoter__Connector $connector ) {
24
  $this->connector = $connector;
25
  }
26
 
27
- /**
28
- * Register the promoter auth key as part of the settings in order to make it available into the REST API.
29
- *
30
- * @since 4.12.6
31
- *
32
- * @return void
33
- */
34
- public function register_setting() {
35
- register_setting(
36
- 'options',
37
- 'tribe_promoter_auth_key',
38
- [
39
- 'type' => 'string',
40
- 'show_in_rest' => true,
41
- 'description' => __( 'Promoter Key', 'tribe-common' ),
42
- 'sanitize_callback' => 'sanitize_text_field',
43
- ]
44
- );
45
- }
46
-
47
  /**
48
  * Add an update the KEY used for promoter during the connection.
49
  *
@@ -54,18 +33,15 @@ class Tribe__Promoter__Auth {
54
  * @return string
55
  */
56
  public function filter_promoter_secret_key( $secret_key ) {
57
-
58
- _deprecated_function( __METHOD__, '4.12.6' );
59
-
60
  return empty( $secret_key ) ? $this->generate_secret_key() : $secret_key;
61
  }
62
 
63
  /**
64
  * Authorize the request with the Promoter Connector.
65
  *
66
- * @since 4.9
67
- *
68
  * @return bool Whether the request was authorized successfully.
 
 
69
  */
70
  public function authorize_with_connector() {
71
  $secret_key = $this->generate_secret_key();
@@ -73,14 +49,7 @@ class Tribe__Promoter__Auth {
73
  $license_key = tribe_get_request_var( 'license_key' );
74
 
75
  // send request to auth connector
76
- $result = $this->connector->authorize_with_connector( get_current_user_id(), $secret_key, $promoter_key, $license_key );
77
-
78
- // If the secret was not stored correctly on Connector Application, remove it!
79
- if ( ! $result ) {
80
- delete_option( 'tribe_promoter_auth_key' );
81
- }
82
-
83
- return $result;
84
  }
85
 
86
  /**
@@ -89,24 +58,57 @@ class Tribe__Promoter__Auth {
89
  *
90
  * @since 4.9.12
91
  *
92
- * @since 4.9
93
- *
94
  * @return string The secret key.
 
 
95
  */
96
  public function generate_secret_key() {
 
97
 
98
- $salt = wp_generate_password( 6 );
99
-
100
- if ( defined( 'AUTH_KEY' ) ) {
101
- $key = AUTH_KEY;
102
- } else {
103
- $key = wp_generate_password( 25 );
104
  }
105
 
106
- $key = sha1( $salt . get_current_blog_id() . $key . get_bloginfo( 'url' ) );
107
-
108
  update_option( 'tribe_promoter_auth_key', $key );
109
 
110
  return $key;
111
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  }
15
  /**
16
  * Tribe__Promoter__Auth constructor.
17
  *
 
 
18
  * @param Tribe__Promoter__Connector $connector Connector object.
19
+ *
20
+ * @since 4.9
21
  */
22
  public function __construct( Tribe__Promoter__Connector $connector ) {
23
  $this->connector = $connector;
24
  }
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  /**
27
  * Add an update the KEY used for promoter during the connection.
28
  *
33
  * @return string
34
  */
35
  public function filter_promoter_secret_key( $secret_key ) {
 
 
 
36
  return empty( $secret_key ) ? $this->generate_secret_key() : $secret_key;
37
  }
38
 
39
  /**
40
  * Authorize the request with the Promoter Connector.
41
  *
 
 
42
  * @return bool Whether the request was authorized successfully.
43
+ *
44
+ * @since 4.9
45
  */
46
  public function authorize_with_connector() {
47
  $secret_key = $this->generate_secret_key();
49
  $license_key = tribe_get_request_var( 'license_key' );
50
 
51
  // send request to auth connector
52
+ return $this->connector->authorize_with_connector( get_current_user_id(), $secret_key, $promoter_key, $license_key );
 
 
 
 
 
 
 
53
  }
54
 
55
  /**
58
  *
59
  * @since 4.9.12
60
  *
 
 
61
  * @return string The secret key.
62
+ *
63
+ * @since 4.9
64
  */
65
  public function generate_secret_key() {
66
+ $key = defined( 'AUTH_KEY' ) ? AUTH_KEY : '';
67
 
68
+ if ( empty( $key ) ) {
69
+ $key = $this->generate_key();
 
 
 
 
70
  }
71
 
 
 
72
  update_option( 'tribe_promoter_auth_key', $key );
73
 
74
  return $key;
75
  }
76
+
77
+ /**
78
+ * Create a custom key to be usead as tribe_promoter_auth_key
79
+ *
80
+ * @since 4.9.12
81
+ *
82
+ * @return string
83
+ */
84
+ private function generate_key() {
85
+ $base = bin2hex( $this->get_random_byes() );
86
+ $to_hash = sprintf( '%s%s%s', get_bloginfo( 'name' ), get_bloginfo( 'url' ), uniqid() );
87
+ return $base . hash( 'md5', $to_hash );
88
+ }
89
+
90
+ /**
91
+ * Add function to get a random set of bytes to be used as Token
92
+ *
93
+ * @since 4.9.12
94
+ *
95
+ * @param int $length
96
+ *
97
+ * @return string
98
+ */
99
+ private function get_random_byes( $length = 16 ) {
100
+ if ( function_exists( 'random_bytes' ) ) {
101
+ try {
102
+ return random_bytes( $length );
103
+ } catch ( Exception $e ) {
104
+ return uniqid();
105
+ }
106
+ }
107
+
108
+ if ( function_exists( 'openssl_random_pseudo_bytes' ) ) {
109
+ return openssl_random_pseudo_bytes( $length );
110
+ }
111
+
112
+ return uniqid();
113
+ }
114
  }
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
 
@@ -175,12 +175,6 @@ class Tribe__Promoter__Connector {
175
  return;
176
  }
177
 
178
- $secret_key = $this->get_secret_key();
179
-
180
- if ( empty( $secret_key ) ) {
181
- return;
182
- }
183
-
184
  /** @var Tribe__Promoter__PUE $promoter_pue */
185
  $promoter_pue = tribe( 'promoter.pue' );
186
  $license_info = $promoter_pue->get_license_info();
@@ -190,6 +184,11 @@ class Tribe__Promoter__Connector {
190
  }
191
 
192
  $license_key = $license_info['key'];
 
 
 
 
 
193
 
194
  $payload = [
195
  'licenseKey' => $license_key,
@@ -201,7 +200,7 @@ class Tribe__Promoter__Connector {
201
  $url = $this->base_url() . 'connect/notify';
202
 
203
  $args = [
204
- 'body' => [ 'token' => $token ],
205
  'sslverify' => false,
206
  ];
207
 
@@ -215,8 +214,8 @@ class Tribe__Promoter__Connector {
215
  *
216
  * @return mixed
217
  */
218
- public function get_secret_key() {
219
- $secret_key = get_option( 'tribe_promoter_auth_key' );
220
 
221
  /**
222
  * @since 4.9.12
@@ -229,33 +228,19 @@ class Tribe__Promoter__Connector {
229
  /**
230
  * Make the call to the remote endpoint.
231
  *
232
- * @since 4.9
233
- *
234
- * @param array $args Data to send.
235
- *
236
  * @param string $url URL to send data to.
 
237
  *
238
  * @return string|false The response body or false if not successful.
239
  *
 
240
  */
241
- public function make_call( $url, $args ) {
242
- $response = wp_remote_post( $url, wp_parse_args( $args, [ 'timeout' => 30 ] ) );
243
  $code = wp_remote_retrieve_response_code( $response );
244
  $body = wp_remote_retrieve_body( $response );
245
 
246
- if ( $code > 299 || is_wp_error( $response ) ) {
247
- do_action(
248
- 'tribe_log',
249
- 'debug',
250
- __METHOD__,
251
- [
252
- 'url' => $url,
253
- 'args' => $args,
254
- 'response' => $response,
255
- 'response_code' => $code,
256
- ]
257
- );
258
-
259
  return false;
260
  }
261
 
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
 
175
  return;
176
  }
177
 
 
 
 
 
 
 
178
  /** @var Tribe__Promoter__PUE $promoter_pue */
179
  $promoter_pue = tribe( 'promoter.pue' );
180
  $license_info = $promoter_pue->get_license_info();
184
  }
185
 
186
  $license_key = $license_info['key'];
187
+ $secret_key = $this->get_secret_key();
188
+
189
+ if ( empty( $secret_key ) ) {
190
+ return;
191
+ }
192
 
193
  $payload = [
194
  'licenseKey' => $license_key,
200
  $url = $this->base_url() . 'connect/notify';
201
 
202
  $args = [
203
+ 'body' => [ 'token' => $token ],
204
  'sslverify' => false,
205
  ];
206
 
214
  *
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
  /**
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
 
common/src/Tribe/Promoter/PUE.php CHANGED
@@ -23,10 +23,10 @@ class Tribe__Promoter__PUE {
23
  * @since 4.9
24
  */
25
  public function load() {
26
- $this->pue_checker = new Tribe__PUE__Checker( 'http://tri.be/', $this->slug, [
27
  'context' => 'service',
28
  'plugin_name' => __( 'Promoter', 'tribe-common' ),
29
- ] );
30
  }
31
 
32
  /**
@@ -57,10 +57,10 @@ class Tribe__Promoter__PUE {
57
  return false;
58
  }
59
 
60
- return [
61
  'key' => $key,
62
  'is_network_key' => $is_network_key,
63
- ];
64
  }
65
 
66
  /**
@@ -71,7 +71,9 @@ class Tribe__Promoter__PUE {
71
  * @since 4.9
72
  */
73
  public function has_license_key() {
74
- return ! empty( $this->get_license_info() );
 
 
75
  }
76
 
77
  /**
23
  * @since 4.9
24
  */
25
  public function load() {
26
+ $this->pue_checker = new Tribe__PUE__Checker( 'http://tri.be/', $this->slug, array(
27
  'context' => 'service',
28
  'plugin_name' => __( 'Promoter', 'tribe-common' ),
29
+ ) );
30
  }
31
 
32
  /**
57
  return false;
58
  }
59
 
60
+ return array(
61
  'key' => $key,
62
  'is_network_key' => $is_network_key,
63
+ );
64
  }
65
 
66
  /**
71
  * @since 4.9
72
  */
73
  public function has_license_key() {
74
+ $license_info = $this->get_license_info();
75
+
76
+ return ! empty( $license_info );
77
  }
78
 
79
  /**
common/src/Tribe/Promoter/View.php CHANGED
@@ -66,7 +66,7 @@ class Tribe__Promoter__View extends Tribe__Template {
66
  return;
67
  }
68
 
69
- $is_admin = is_user_logged_in() && current_user_can( 'manage_options' ) && current_user_can( 'read_private_posts' );
70
  $authorized = false;
71
  $auth_error = false;
72
 
66
  return;
67
  }
68
 
69
+ $is_admin = is_user_logged_in() && current_user_can( 'manage_options' );
70
  $authorized = false;
71
  $auth_error = false;
72
 
common/src/Tribe/REST/Main.php CHANGED
@@ -4,21 +4,21 @@
4
  /**
5
  * Class Tribe__REST__Main
6
  *
7
- * The main entry point for a The Events Calendar REST API implementation.
8
  *
9
  * This class should not contain business logic and merely set up and start the REST API support.
10
  */
11
  abstract class Tribe__REST__Main {
12
 
13
  /**
14
- * The Events Calendar REST APIs URL namespace.
15
  *
16
  * @var string
17
  */
18
  protected $namespace = 'tribe';
19
 
20
  /**
21
- * Returns the namespace of The Events Calendar REST APIs.
22
  *
23
  * @return string
24
  */
4
  /**
5
  * Class Tribe__REST__Main
6
  *
7
+ * The main entry point for a Modern Tribe REST API implementation.
8
  *
9
  * This class should not contain business logic and merely set up and start the REST API support.
10
  */
11
  abstract class Tribe__REST__Main {
12
 
13
  /**
14
+ * Modern Tribe REST APIs URL namespace.
15
  *
16
  * @var string
17
  */
18
  protected $namespace = 'tribe';
19
 
20
  /**
21
+ * Returns the namespace of Modern Tribe REST APIs.
22
  *
23
  * @return string
24
  */
common/src/Tribe/REST/Post_Repository.php CHANGED
@@ -14,11 +14,11 @@ class Tribe__REST__Post_Repository {
14
  $full_url = get_attachment_link( $image_id );
15
  $file = get_attached_file( $image_id );
16
 
17
- $data = [
18
  'url' => $full_url,
19
  'id' => $image_id,
20
  'extension' => pathinfo( $file, PATHINFO_EXTENSION ),
21
- ];
22
 
23
  $metadata = wp_get_attachment_metadata( $image_id );
24
 
@@ -49,26 +49,26 @@ class Tribe__REST__Post_Repository {
49
  */
50
  protected function get_date_details( $date ) {
51
  if ( empty( $date ) ) {
52
- return [
53
  'year' => '',
54
  'month' => '',
55
  'day' => '',
56
  'hour' => '',
57
  'minutes' => '',
58
  'seconds' => '',
59
- ];
60
  }
61
 
62
  $time = strtotime( $date );
63
 
64
- return [
65
  'year' => date( 'Y', $time ),
66
  'month' => date( 'm', $time ),
67
  'day' => date( 'd', $time ),
68
  'hour' => date( 'H', $time ),
69
  'minutes' => date( 'i', $time ),
70
  'seconds' => date( 's', $time ),
71
- ];
72
  }
73
 
74
  /**
@@ -80,19 +80,15 @@ class Tribe__REST__Post_Repository {
80
  *
81
  * @return array
82
  */
83
- protected function format_and_sort_cost_couples( array $cost_couples = [] ) {
84
  global $wp_locale;
85
 
86
- $cost_values = [];
87
  foreach ( $cost_couples as $key => $value ) {
88
- $value = str_replace(
89
- [
90
- $wp_locale->number_format['decimal_point'],
91
- $wp_locale->number_format['thousands_sep'],
92
- ],
93
- [ '.', '' ],
94
- '' . $value
95
- );
96
  if ( is_numeric( $value ) ) {
97
  $cost_values[] = $value;
98
  } else {
14
  $full_url = get_attachment_link( $image_id );
15
  $file = get_attached_file( $image_id );
16
 
17
+ $data = array(
18
  'url' => $full_url,
19
  'id' => $image_id,
20
  'extension' => pathinfo( $file, PATHINFO_EXTENSION ),
21
+ );
22
 
23
  $metadata = wp_get_attachment_metadata( $image_id );
24
 
49
  */
50
  protected function get_date_details( $date ) {
51
  if ( empty( $date ) ) {
52
+ return array(
53
  'year' => '',
54
  'month' => '',
55
  'day' => '',
56
  'hour' => '',
57
  'minutes' => '',
58
  'seconds' => '',
59
+ );
60
  }
61
 
62
  $time = strtotime( $date );
63
 
64
+ return array(
65
  'year' => date( 'Y', $time ),
66
  'month' => date( 'm', $time ),
67
  'day' => date( 'd', $time ),
68
  'hour' => date( 'H', $time ),
69
  'minutes' => date( 'i', $time ),
70
  'seconds' => date( 's', $time ),
71
+ );
72
  }
73
 
74
  /**
80
  *
81
  * @return array
82
  */
83
+ protected function format_and_sort_cost_couples( array $cost_couples = array() ) {
84
  global $wp_locale;
85
 
86
+ $cost_values = array();
87
  foreach ( $cost_couples as $key => $value ) {
88
+ $value = str_replace( array(
89
+ $wp_locale->number_format['decimal_point'],
90
+ $wp_locale->number_format['thousands_sep'],
91
+ ), array( '.', '' ), '' . $value );
 
 
 
 
92
  if ( is_numeric( $value ) ) {
93
  $cost_values[] = $value;
94
  } else {
common/src/Tribe/Repository.php CHANGED
@@ -1,32 +1,28 @@
1
  <?php
2
 
3
- use Tribe\Traits\With_Meta_Updates_Handling;
4
- use Tribe\Traits\With_Post_Attribute_Detection;
5
  use Tribe__Utils__Array as Arr;
6
 
7
  abstract class Tribe__Repository
8
  implements Tribe__Repository__Interface {
9
- use With_Meta_Updates_Handling;
10
- use With_Post_Attribute_Detection;
11
 
12
  const MAX_NUMBER_OF_POSTS_PER_PAGE = 99999999999;
13
 
14
  /**
15
  * @var array An array of keys that cannot be updated on this repository.
16
  */
17
- protected static $blocked_keys = [
18
  'ID',
19
  'post_type',
20
  'post_modified',
21
  'post_modified_gmt',
22
  'guid',
23
  'comment_count',
24
- ];
25
 
26
  /**
27
  * @var array A list of the default filters supported and implemented by the repository.
28
  */
29
- protected static $default_modifiers = [
30
  'p',
31
  'author',
32
  'author_name',
@@ -121,22 +117,22 @@ abstract class Tribe__Repository
121
  'term_in',
122
  'term_not_in',
123
  'term_and',
124
- ];
125
 
126
  /**
127
  * @var array An array of default arguments that will be applied to all queries.
128
  */
129
- protected static $common_args = [
130
  'post_type' => 'post',
131
  'suppress_filters' => false,
132
- 'posts_per_page' => -1,
133
- ];
134
 
135
  /**
136
  * @var array A list of query modifiers that will trigger a overriding merge, thus
137
  * replacing previous values, when set multiple times.
138
  */
139
- protected static $replacing_modifiers = [
140
  'p',
141
  'author',
142
  'author_name',
@@ -191,22 +187,20 @@ abstract class Tribe__Repository
191
  'guid',
192
  'perm',
193
  'order',
194
- ];
195
 
196
  /**
197
  * @var int
198
  */
199
  protected static $meta_alias = 0;
200
-
201
  /**
202
  * @var array A list of keys that denote the value to check should be cast to array.
203
  */
204
- protected static $multi_value_keys = [ 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ];
205
-
206
  /**
207
  * @var array A map of SQL comparison operators to their human-readable counterpart.
208
  */
209
- protected static $comparison_operators = [
210
  '=' => 'equals',
211
  '!=' => 'not-equals',
212
  '>' => 'gt',
@@ -223,7 +217,7 @@ abstract class Tribe__Repository
223
  'NOT EXISTS' => 'not-exists',
224
  'REGEXP' => 'regexp',
225
  'NOT REGEXP' => 'not-regexp',
226
- ];
227
 
228
  /**
229
  * A counter to keep track, on the class level, of the aliases generated for the terms table
@@ -240,7 +234,7 @@ abstract class Tribe__Repository
240
  /**
241
  * @var array The post IDs that will be updated.
242
  */
243
- protected $ids = [];
244
  /**
245
  * @var bool Whether the post IDs to update have already been fetched or not.
246
  */
@@ -248,114 +242,101 @@ abstract class Tribe__Repository
248
  /**
249
  * @var array The updates that will be saved to the database.
250
  */
251
- protected $updates = [];
252
 
253
  /**
254
  * @var array A list of taxonomies this repository will recognize.
255
  */
256
- protected $taxonomies = [];
257
 
258
  /**
259
  * @var array A map detailing which fields should be converted from a
260
  * GMT time and date to a local one.
261
  */
262
- protected $to_local_time_map = [
263
  'post_date_gmt' => 'post_date',
264
- ];
265
-
266
  /**
267
  * @var array A map detailing which fields should be converted from a
268
  * localized time and date to a GMT one.
269
  */
270
- protected $to_gmt_map = [
271
  'post_date' => 'post_date_gmt',
272
- ];
273
 
274
  /**
275
  * @var array
276
  */
277
- protected $default_args = [ 'post_type' => 'post' ];
278
-
279
  /**
280
  * @var array An array of query modifying callbacks populated while applying
281
  * the filters.
282
  */
283
- protected $query_modifiers = [];
284
-
285
  /**
286
  * @var bool Whether the current query is void or not.
287
  */
288
  protected $void_query = false;
289
-
290
  /**
291
  * @var array An array of query arguments that will be populated while applying
292
  * filters.
293
  */
294
- protected $query_args = [
295
- 'meta_query' => [ 'relation' => 'AND' ],
296
- 'tax_query' => [ 'relation' => 'AND' ],
297
- 'date_query' => [ 'relation' => 'AND' ],
298
- ];
299
-
300
  /**
301
  * @var array An array of query arguments that support 'relation'.
302
  */
303
- protected $relation_query_args = [
304
  'meta_query',
305
  'tax_query',
306
  'date_query',
307
- ];
308
-
309
  /**
310
  * @var WP_Query The current query object built and modified by the instance.
311
  */
312
  protected $current_query;
313
-
314
  /**
315
  * @var array An associative array of the filters that will be applied and the used values.
316
  */
317
- protected $current_filters = [];
318
-
319
  /**
320
  * @var string|null The current filter being applied.
321
  */
322
  protected $current_filter;
323
-
324
  /**
325
  * @var Tribe__Repository__Query_Filters
326
  */
327
  public $filter_query;
328
-
329
  /**
330
  * @var string The filter that should be used to get a post by its primary key.
331
  */
332
  protected $primary_key = 'p';
333
-
334
  /**
335
  * @var array A map of callbacks in the shape [ <slug> => <callback|primitive> ]
336
  */
337
- protected $schema = [];
338
 
339
  /**
340
  * @var array A map of schema slugs and their meta keys to be queried.
341
  */
342
- protected $simple_meta_schema = [];
343
 
344
  /**
345
  * @var array A map of schema slugs and their taxonomies to be queried.
346
  */
347
- protected $simple_tax_schema = [];
348
 
349
  /**
350
  * @var Tribe__Repository__Interface
351
  */
352
  protected $main_repository;
353
-
354
  /**
355
  * @var Tribe__Repository__Formatter_Interface
356
  */
357
  protected $formatter;
358
-
359
  /**
360
  * @var bool
361
  */
@@ -375,7 +356,7 @@ abstract class Tribe__Repository
375
  *
376
  * @var array
377
  */
378
- protected $update_fields_aliases = [
379
  'title' => 'post_title',
380
  'content' => 'post_content',
381
  'description' => 'post_content',
@@ -389,7 +370,7 @@ abstract class Tribe__Repository
389
  'date_utc' => 'post_date_gmt',
390
  'tag' => 'post_tag',
391
  'image' => '_thumbnail_id',
392
- ];
393
 
394
  /**
395
  * The default create args that will be used by the repository
@@ -438,9 +419,9 @@ abstract class Tribe__Repository
438
  */
439
  public function __construct() {
440
  $this->filter_query = new Tribe__Repository__Query_Filters();
441
- $this->default_args = array_merge( [ 'posts_per_page' => -1 ], $this->default_args );
442
- $post_types = (array) Tribe__Utils__Array::get( $this->default_args, 'post_type', [] );
443
- $this->taxonomies = get_taxonomies( [ 'object_type' => $post_types ], 'names' );
444
 
445
  /**
446
  * Allow plugins to init their classes and setup hooks at the initial setup of a repository.
@@ -517,8 +498,7 @@ abstract class Tribe__Repository
517
  */
518
  public function where( $key, $value = null ) {
519
  $call_args = func_get_args();
520
-
521
- return call_user_func_array( [ $this, 'by' ], $call_args );
522
  }
523
 
524
  /**
@@ -666,7 +646,7 @@ abstract class Tribe__Repository
666
  */
667
  public function all() {
668
  if ( $this->void_query ) {
669
- return [];
670
  }
671
 
672
  $query = $this->build_query();
@@ -707,7 +687,7 @@ abstract class Tribe__Repository
707
  */
708
  $formatted = $return_ids
709
  ? $results
710
- : array_filter( array_map( [ $this, 'format_item' ], $results ) );
711
 
712
  // Reset the fields if required.
713
  $query->set( 'fields', $original_fields_value );
@@ -738,7 +718,7 @@ abstract class Tribe__Repository
738
  public function order( $order = 'ASC' ) {
739
  $order = strtoupper( $order );
740
 
741
- if ( ! in_array( $order, [ 'ASC', 'DESC' ], true ) ) {
742
  return $this;
743
  }
744
 
@@ -752,11 +732,7 @@ abstract class Tribe__Repository
752
  */
753
  public function order_by( $order_by, $order = 'DESC' ) {
754
  $this->query_args['orderby'] = $order_by;
755
-
756
- // Based on `WP_Query->parse_orderby` we should ignore the global order passed, and use the value on for each item in array.
757
- if ( ! is_array( $order_by ) ) {
758
- $this->query_args['order'] = $order;
759
- }
760
 
761
  return $this;
762
  }
@@ -774,7 +750,7 @@ abstract class Tribe__Repository
774
  * {@inheritdoc}
775
  */
776
  public function permission( $permission ) {
777
- if ( ! in_array( $permission, [ self::PERMISSION_READABLE, self::PERMISSION_EDITABLE ], true ) ) {
778
  return $this;
779
  }
780
 
@@ -950,10 +926,10 @@ abstract class Tribe__Repository
950
  * {@inheritdoc}
951
  */
952
  public function nth( $n ) {
953
- $per_page = (int) Tribe__Utils__Array::get_in_any( [
954
  $this->query_args,
955
  $this->default_args,
956
- ], 'posts_per_page', get_option( 'posts_per_page' ) );
957
 
958
  if ( - 1 !== $per_page && $n > $per_page ) {
959
  return null;
@@ -1030,12 +1006,12 @@ abstract class Tribe__Repository
1030
  $matching_ids = $this->get_ids();
1031
 
1032
  if ( empty( $matching_ids ) ) {
1033
- return [];
1034
  }
1035
 
1036
  $spliced = array_splice( $matching_ids, 0, $n );
1037
 
1038
- return $return_ids ? $spliced : array_map( [ $this, 'format_item' ], $spliced );
1039
  }
1040
 
1041
  /**
@@ -1145,11 +1121,20 @@ abstract class Tribe__Repository
1145
  */
1146
  $this->query_args = array_merge( $this->query_args, $query_modifier );
1147
  } else {
 
 
 
 
 
 
 
 
 
1148
  /**
1149
  * We do a recursive merge to allow "stacking" of same kind of queries;
1150
- * e.g. two or more `tax_query` or `meta_query` entries should merge into one.
1151
  */
1152
- $this->query_args = Arr::merge_recursive_query_vars( $this->query_args, $query_modifier );
1153
  }
1154
  } else {
1155
  /**
@@ -1197,18 +1182,18 @@ abstract class Tribe__Repository
1197
  if ( $this->has_default_modifier( $key ) ) {
1198
  // let's use the default filters normalizing the key first
1199
  $call_args[0] = $this->normalize_key( $key );
1200
- $query_modifier = call_user_func_array( [ $this, 'apply_default_modifier' ], $call_args );
1201
  } elseif ( 2 === count( $call_args ) ) {
1202
  // Pass query argument $key with the single value argument.
1203
- $query_modifier = [
1204
  $key => $call_args[1],
1205
- ];
1206
  } else {
1207
  // More than two $call_args were sent (key, value), assume it was meant for a filter that was not defined yet.
1208
  throw Tribe__Repository__Usage_Error::because_the_read_filter_is_not_defined( $key, $this );
1209
  }
1210
  } else {
1211
- $query_modifier = call_user_func_array( [ $this, 'apply_modifier' ], $call_args );
1212
  }
1213
 
1214
  return $query_modifier;
@@ -1258,7 +1243,7 @@ abstract class Tribe__Repository
1258
  // `ID` to `id`
1259
  $normalized = strtolower( $key );
1260
 
1261
- $post_prefixed = [
1262
  'password',
1263
  'name__in',
1264
  '_in',
@@ -1273,7 +1258,7 @@ abstract class Tribe__Repository
1273
  'modified',
1274
  'modified_gmt',
1275
  'content_filtered',
1276
- ];
1277
 
1278
  if ( in_array( $key, $post_prefixed, true ) ) {
1279
  $normalized = 'post_' . $key;
@@ -1331,11 +1316,11 @@ abstract class Tribe__Repository
1331
  $to_update = $this->get_ids();
1332
 
1333
  if ( empty( $to_update ) ) {
1334
- return $return_promise ? new Tribe__Promise() : [];
1335
  }
1336
 
1337
- $exit = [];
1338
- $postarrs = [];
1339
 
1340
  foreach ( $to_update as $id ) {
1341
  $postarrs[ $id ] = $this->filter_postarr_for_update( $this->build_postarr( $id ), $id );
@@ -1366,7 +1351,7 @@ abstract class Tribe__Repository
1366
  */
1367
  public function get_ids() {
1368
  if ( $this->void_query ) {
1369
- return [];
1370
  }
1371
 
1372
 
@@ -1398,7 +1383,7 @@ abstract class Tribe__Repository
1398
  * Extending classes might use this method to run sub-queries
1399
  * and signal a void query; let's return an empty array.
1400
  */
1401
- return [];
1402
  }
1403
  }
1404
 
@@ -1422,6 +1407,43 @@ abstract class Tribe__Repository
1422
  return ! in_array( $key, self::$blocked_keys, true );
1423
  }
1424
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1425
  /**
1426
  * Whether the current key is a date one requiring a converted key pair too or not.
1427
  *
@@ -1452,6 +1474,19 @@ abstract class Tribe__Repository
1452
  $postarr[ $key ] = $value;
1453
  }
1454
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1455
  /**
1456
  * {@inheritdoc}
1457
  */
@@ -1475,7 +1510,7 @@ abstract class Tribe__Repository
1475
  */
1476
  public function set( $key, $value ) {
1477
  if ( ! is_string( $key ) ) {
1478
- throw Tribe__Repository__Usage_Error::because_update_key_should_be_a_string( $this );
1479
  }
1480
 
1481
  $this->updates[ $key ] = $value;
@@ -1544,7 +1579,7 @@ abstract class Tribe__Repository
1544
  public function where_meta_related_by( $meta_keys, $compare, $field = null, $values = null ) {
1545
  $meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
1546
 
1547
- if ( ! in_array( $compare, [ 'EXISTS', 'NOT EXISTS' ], true ) ) {
1548
  if ( empty( $field ) || empty( $values ) ) {
1549
  throw Tribe__Repository__Usage_Error::because_this_comparison_operator_requires_fields_and_values( $meta_keys, $compare, $this );
1550
  }
@@ -1602,7 +1637,7 @@ abstract class Tribe__Repository
1602
  public function where_meta_related_by_meta( $meta_keys, $compare, $meta_field = null, $meta_values = null, $or_not_exists = false ) {
1603
  $meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
1604
 
1605
- if ( ! in_array( $compare, [ 'EXISTS', 'NOT EXISTS' ], true ) ) {
1606
  if ( empty( $meta_field ) || empty( $meta_values ) ) {
1607
  throw Tribe__Repository__Usage_Error::because_this_comparison_operator_requires_fields_and_values( $meta_keys, $compare, $this );
1608
  }
@@ -1689,7 +1724,7 @@ abstract class Tribe__Repository
1689
  $buffered_count = count( $buffered );
1690
 
1691
  foreach ( $all_callbacks as $c ) {
1692
- call_user_func_array( [ $this, $c[0] ], array_slice( $c, 1 ) );
1693
 
1694
  if ( $buffered_count === count( $this->filter_query->get_buffered_where_clauses() ) ) {
1695
  throw Tribe__Repository__Usage_Error::because_where_or_should_only_be_used_with_methods_that_add_where_clauses( $c, $this );
@@ -1730,12 +1765,12 @@ abstract class Tribe__Repository
1730
  * @param string|null $by The ->by() lookup to use (defaults to meta_regexp_or_like).
1731
  */
1732
  public function add_simple_meta_schema_entry( $key, $meta_key, $by = null ) {
1733
- $this->schema[ $key ] = [ $this, 'filter_by_simple_meta_schema' ];
1734
 
1735
- $this->simple_meta_schema[ $key ] = [
1736
  'meta_key' => $meta_key,
1737
  'by' => $by,
1738
- ];
1739
  }
1740
 
1741
  /**
@@ -1748,12 +1783,12 @@ abstract class Tribe__Repository
1748
  * @param string|null $by The ->by() lookup to use (defaults to term_in).
1749
  */
1750
  public function add_simple_tax_schema_entry( $key, $taxonomy, $by = null ) {
1751
- $this->schema[ $key ] = [ $this, 'filter_by_simple_tax_schema' ];
1752
 
1753
- $this->simple_tax_schema[ $key ] = [
1754
  'taxonomy' => $taxonomy,
1755
  'by' => $by,
1756
- ];
1757
  }
1758
 
1759
  /**
@@ -1775,7 +1810,7 @@ abstract class Tribe__Repository
1775
  * @throws Tribe__Repository__Usage_Error If a filter is called with wrong arguments.
1776
  */
1777
  protected function apply_default_modifier( $key, $value ) {
1778
- $args = [];
1779
 
1780
  $call_args = func_get_args();
1781
  $arg_1 = isset( $call_args[2] ) ? $call_args[2] : null;
@@ -1787,14 +1822,14 @@ abstract class Tribe__Repository
1787
  switch ( $key ) {
1788
  default:
1789
  // leverage built-in WP_Query filters
1790
- $args = [ $key => $value ];
1791
  break;
1792
  case 'ID':
1793
  case 'id':
1794
- $args = [ 'p' => $value ];
1795
  break;
1796
  case 'search':
1797
- $args = [ 's' => $value ];
1798
  break;
1799
  case 'post_status':
1800
  $this->query_args['post_status'] = (array) $value;
@@ -1824,7 +1859,7 @@ abstract class Tribe__Repository
1824
  break;
1825
  case 'to_ping':
1826
  $this->filter_query->to_get_posts_to_ping( $value );
1827
- $args = [ 'to_ping' => $value ];
1828
  break;
1829
  case 'post_modified':
1830
  $args = $this->get_posts_after( $value, 'post_modified' );
@@ -1839,7 +1874,7 @@ abstract class Tribe__Repository
1839
  $this->filter_query->to_get_posts_with_guid_like( $value );
1840
  break;
1841
  case 'menu_order':
1842
- $args = [ 'menu_order' => $value ];
1843
  break;
1844
  case 'meta':
1845
  case 'meta_equals':
@@ -2001,7 +2036,7 @@ abstract class Tribe__Repository
2001
  * @return array
2002
  */
2003
  protected function get_posts_after( $value, $column = 'post_date' ) {
2004
- $timezone = in_array( $column, [ 'post_date_gmt', 'post_modified_gmt' ], true )
2005
  ? 'UTC'
2006
  : Tribe__Timezones::generate_timezone_string_from_utc_offset( Tribe__Timezones::wp_timezone_string() );
2007
 
@@ -2013,16 +2048,16 @@ abstract class Tribe__Repository
2013
 
2014
  $array_key = sprintf( '%s-after', $column );
2015
 
2016
- return [
2017
- 'date_query' => [
2018
  'relation' => 'AND',
2019
- $array_key => [
2020
  'inclusive' => true,
2021
  'column' => $column,
2022
  'after' => $date->format( 'Y-m-d H:i:s' ),
2023
- ],
2024
- ],
2025
- ];
2026
  }
2027
 
2028
  /**
@@ -2036,7 +2071,7 @@ abstract class Tribe__Repository
2036
  * @return array
2037
  */
2038
  protected function get_posts_before( $value, $column = 'post_date' ) {
2039
- $timezone = in_array( $column, [ 'post_date_gmt', 'post_modified_gmt' ], true )
2040
  ? 'UTC'
2041
  : Tribe__Timezones::generate_timezone_string_from_utc_offset( Tribe__Timezones::wp_timezone_string() );
2042
 
@@ -2048,16 +2083,16 @@ abstract class Tribe__Repository
2048
 
2049
  $array_key = sprintf( '%s-before', $column );
2050
 
2051
- return [
2052
- 'date_query' => [
2053
  'relation' => 'AND',
2054
- $array_key => [
2055
  'inclusive' => true,
2056
  'column' => $column,
2057
  'before' => $date->format( 'Y-m-d H:i:s' ),
2058
- ],
2059
- ],
2060
- ];
2061
  }
2062
 
2063
  /**
@@ -2082,16 +2117,16 @@ abstract class Tribe__Repository
2082
  if ( count( $meta_keys ) === 1 ) {
2083
  $array_key = $this->sql_slug( $meta_keys[0], $postfix );
2084
 
2085
- $args = [
2086
- 'meta_query' => [
2087
- $array_key => [
2088
  'key' => $meta_keys[0],
2089
  'compare' => strtoupper( $compare ),
2090
- ],
2091
- ],
2092
- ];
2093
 
2094
- if ( ! in_array( $compare, [ 'EXISTS', 'NOT EXISTS' ], true ) ) {
2095
  $args['meta_query'][ $array_key ]['value'] = $meta_value;
2096
  }
2097
 
@@ -2178,22 +2213,22 @@ abstract class Tribe__Repository
2178
  * @return array
2179
  */
2180
  protected function build_tax_query( $taxonomy, $terms, $field, $operator ) {
2181
- if ( in_array( $operator, [ 'EXISTS', 'NOT EXISTS' ], true ) ) {
2182
  $array_key = $this->sql_slug( $taxonomy, $operator );
2183
  } else {
2184
  $array_key = $this->sql_slug( $taxonomy, $field, $operator );
2185
  }
2186
 
2187
- return [
2188
- 'tax_query' => [
2189
- $array_key => [
2190
  'taxonomy' => $taxonomy,
2191
  'field' => $field,
2192
  'terms' => $terms,
2193
  'operator' => strtoupper( $operator ),
2194
- ],
2195
- ],
2196
- ];
2197
  }
2198
 
2199
  /**
@@ -2237,12 +2272,12 @@ abstract class Tribe__Repository
2237
  public function prepare_interval( $values, $format = '%s', $operator = 'IN' ) {
2238
  $values = Tribe__Utils__Array::list_to_array( $values );
2239
 
2240
- $prepared = [];
2241
  foreach ( $values as $value ) {
2242
  $prepared[] = $this->prepare_value( $value, $format );
2243
  }
2244
 
2245
- return in_array( $operator, [ 'BETWEEN', 'NOT BETWEEN' ] )
2246
  ? sprintf( '%s AND %s', $prepared[0], $prepared[1] )
2247
  : sprintf( '(%s)', implode( ',', $prepared ) );
2248
  }
@@ -2443,7 +2478,7 @@ abstract class Tribe__Repository
2443
  $to_delete = $this->get_ids();
2444
 
2445
  if ( empty( $to_delete ) ) {
2446
- return $return_promise ? new Tribe__Promise() : [];
2447
  }
2448
 
2449
 
@@ -2873,10 +2908,10 @@ abstract class Tribe__Repository
2873
  * {@inheritdoc}
2874
  */
2875
  public function build_postarr( $id = null ) {
2876
- $postarr = [
2877
- 'tax_input' => [],
2878
- 'meta_input' => [],
2879
- ];
2880
 
2881
  /*
2882
  * The check is lax here by design: we leave space for the client code
@@ -3053,7 +3088,7 @@ abstract class Tribe__Repository
3053
  /**
3054
  * {@inheritdoc}
3055
  */
3056
- public function filter( $args = [], $operator = 'AND' ) {
3057
  $list = new WP_List_Util( $this->all() );
3058
 
3059
  return $list->filter( $args, $operator );
@@ -3062,7 +3097,7 @@ abstract class Tribe__Repository
3062
  /**
3063
  * {@inheritdoc}
3064
  */
3065
- public function sort( $orderby = [], $order = 'ASC', $preserve_keys = false ) {
3066
  $list = new WP_List_Util( $this->all() );
3067
 
3068
  return $list->sort( $orderby, $order, $preserve_keys );
1
  <?php
2
 
 
 
3
  use Tribe__Utils__Array as Arr;
4
 
5
  abstract class Tribe__Repository
6
  implements Tribe__Repository__Interface {
 
 
7
 
8
  const MAX_NUMBER_OF_POSTS_PER_PAGE = 99999999999;
9
 
10
  /**
11
  * @var array An array of keys that cannot be updated on this repository.
12
  */
13
+ protected static $blocked_keys = array(
14
  'ID',
15
  'post_type',
16
  'post_modified',
17
  'post_modified_gmt',
18
  'guid',
19
  'comment_count',
20
+ );
21
 
22
  /**
23
  * @var array A list of the default filters supported and implemented by the repository.
24
  */
25
+ protected static $default_modifiers = array(
26
  'p',
27
  'author',
28
  'author_name',
117
  'term_in',
118
  'term_not_in',
119
  'term_and',
120
+ );
121
 
122
  /**
123
  * @var array An array of default arguments that will be applied to all queries.
124
  */
125
+ protected static $common_args = array(
126
  'post_type' => 'post',
127
  'suppress_filters' => false,
128
+ 'posts_per_page' => - 1,
129
+ );
130
 
131
  /**
132
  * @var array A list of query modifiers that will trigger a overriding merge, thus
133
  * replacing previous values, when set multiple times.
134
  */
135
+ protected static $replacing_modifiers = array(
136
  'p',
137
  'author',
138
  'author_name',
187
  'guid',
188
  'perm',
189
  'order',
190
+ );
191
 
192
  /**
193
  * @var int
194
  */
195
  protected static $meta_alias = 0;
 
196
  /**
197
  * @var array A list of keys that denote the value to check should be cast to array.
198
  */
199
+ protected static $multi_value_keys = array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' );
 
200
  /**
201
  * @var array A map of SQL comparison operators to their human-readable counterpart.
202
  */
203
+ protected static $comparison_operators = array(
204
  '=' => 'equals',
205
  '!=' => 'not-equals',
206
  '>' => 'gt',
217
  'NOT EXISTS' => 'not-exists',
218
  'REGEXP' => 'regexp',
219
  'NOT REGEXP' => 'not-regexp',
220
+ );
221
 
222
  /**
223
  * A counter to keep track, on the class level, of the aliases generated for the terms table
234
  /**
235
  * @var array The post IDs that will be updated.
236
  */
237
+ protected $ids = array();
238
  /**
239
  * @var bool Whether the post IDs to update have already been fetched or not.
240
  */
242
  /**
243
  * @var array The updates that will be saved to the database.
244
  */
245
+ protected $updates = array();
246
 
247
  /**
248
  * @var array A list of taxonomies this repository will recognize.
249
  */
250
+ protected $taxonomies = array();
251
 
252
  /**
253
  * @var array A map detailing which fields should be converted from a
254
  * GMT time and date to a local one.
255
  */
256
+ protected $to_local_time_map = array(
257
  'post_date_gmt' => 'post_date',
258
+ );
 
259
  /**
260
  * @var array A map detailing which fields should be converted from a
261
  * localized time and date to a GMT one.
262
  */
263
+ protected $to_gmt_map = array(
264
  'post_date' => 'post_date_gmt',
265
+ );
266
 
267
  /**
268
  * @var array
269
  */
270
+ protected $default_args = array( 'post_type' => 'post' );
 
271
  /**
272
  * @var array An array of query modifying callbacks populated while applying
273
  * the filters.
274
  */
275
+ protected $query_modifiers = array();
 
276
  /**
277
  * @var bool Whether the current query is void or not.
278
  */
279
  protected $void_query = false;
 
280
  /**
281
  * @var array An array of query arguments that will be populated while applying
282
  * filters.
283
  */
284
+ protected $query_args = array(
285
+ 'meta_query' => array( 'relation' => 'AND' ),
286
+ 'tax_query' => array( 'relation' => 'AND' ),
287
+ 'date_query' => array( 'relation' => 'AND' ),
288
+ );
 
289
  /**
290
  * @var array An array of query arguments that support 'relation'.
291
  */
292
+ protected $relation_query_args = array(
293
  'meta_query',
294
  'tax_query',
295
  'date_query',
296
+ );
 
297
  /**
298
  * @var WP_Query The current query object built and modified by the instance.
299
  */
300
  protected $current_query;
 
301
  /**
302
  * @var array An associative array of the filters that will be applied and the used values.
303
  */
304
+ protected $current_filters = array();
 
305
  /**
306
  * @var string|null The current filter being applied.
307
  */
308
  protected $current_filter;
 
309
  /**
310
  * @var Tribe__Repository__Query_Filters
311
  */
312
  public $filter_query;
 
313
  /**
314
  * @var string The filter that should be used to get a post by its primary key.
315
  */
316
  protected $primary_key = 'p';
 
317
  /**
318
  * @var array A map of callbacks in the shape [ <slug> => <callback|primitive> ]
319
  */
320
+ protected $schema = array();
321
 
322
  /**
323
  * @var array A map of schema slugs and their meta keys to be queried.
324
  */
325
+ protected $simple_meta_schema = array();
326
 
327
  /**
328
  * @var array A map of schema slugs and their taxonomies to be queried.
329
  */
330
+ protected $simple_tax_schema = array();
331
 
332
  /**
333
  * @var Tribe__Repository__Interface
334
  */
335
  protected $main_repository;
 
336
  /**
337
  * @var Tribe__Repository__Formatter_Interface
338
  */
339
  protected $formatter;
 
340
  /**
341
  * @var bool
342
  */
356
  *
357
  * @var array
358
  */
359
+ protected $update_fields_aliases = array(
360
  'title' => 'post_title',
361
  'content' => 'post_content',
362
  'description' => 'post_content',
370
  'date_utc' => 'post_date_gmt',
371
  'tag' => 'post_tag',
372
  'image' => '_thumbnail_id',
373
+ );
374
 
375
  /**
376
  * The default create args that will be used by the repository
419
  */
420
  public function __construct() {
421
  $this->filter_query = new Tribe__Repository__Query_Filters();
422
+ $this->default_args = array_merge( array( 'posts_per_page' => - 1 ), $this->default_args );
423
+ $post_types = (array) Tribe__Utils__Array::get( $this->default_args, 'post_type', array() );
424
+ $this->taxonomies = get_taxonomies( array( 'object_type' => $post_types ), 'names' );
425
 
426
  /**
427
  * Allow plugins to init their classes and setup hooks at the initial setup of a repository.
498
  */
499
  public function where( $key, $value = null ) {
500
  $call_args = func_get_args();
501
+ return call_user_func_array( array( $this, 'by' ), $call_args );
 
502
  }
503
 
504
  /**
646
  */
647
  public function all() {
648
  if ( $this->void_query ) {
649
+ return array();
650
  }
651
 
652
  $query = $this->build_query();
687
  */
688
  $formatted = $return_ids
689
  ? $results
690
+ : array_filter( array_map( array( $this, 'format_item' ), $results ) );
691
 
692
  // Reset the fields if required.
693
  $query->set( 'fields', $original_fields_value );
718
  public function order( $order = 'ASC' ) {
719
  $order = strtoupper( $order );
720
 
721
+ if ( ! in_array( $order, array( 'ASC', 'DESC' ), true ) ) {
722
  return $this;
723
  }
724
 
732
  */
733
  public function order_by( $order_by, $order = 'DESC' ) {
734
  $this->query_args['orderby'] = $order_by;
735
+ $this->query_args['order'] = $order;
 
 
 
 
736
 
737
  return $this;
738
  }
750
  * {@inheritdoc}
751
  */
752
  public function permission( $permission ) {
753
+ if ( ! in_array( $permission, array( self::PERMISSION_READABLE, self::PERMISSION_EDITABLE ), true ) ) {
754
  return $this;
755
  }
756
 
926
  * {@inheritdoc}
927
  */
928
  public function nth( $n ) {
929
+ $per_page = (int) Tribe__Utils__Array::get_in_any( array(
930
  $this->query_args,
931
  $this->default_args,
932
+ ), 'posts_per_page', get_option( 'posts_per_page' ) );
933
 
934
  if ( - 1 !== $per_page && $n > $per_page ) {
935
  return null;
1006
  $matching_ids = $this->get_ids();
1007
 
1008
  if ( empty( $matching_ids ) ) {
1009
+ return array();
1010
  }
1011
 
1012
  $spliced = array_splice( $matching_ids, 0, $n );
1013
 
1014
+ return $return_ids ? $spliced : array_map( array( $this, 'format_item' ), $spliced );
1015
  }
1016
 
1017
  /**
1121
  */
1122
  $this->query_args = array_merge( $this->query_args, $query_modifier );
1123
  } else {
1124
+ $query_args = $this->query_args;
1125
+
1126
+ // Handle relation separately because we do not want that to merge recursively
1127
+ foreach ( $this->relation_query_args as $query_arg ) {
1128
+ if ( isset( $query_args[ $query_arg ]['relation'], $query_modifier[ $query_arg ]['relation'] ) ) {
1129
+ unset( $query_args[ $query_arg ]['relation'] );
1130
+ }
1131
+ }
1132
+
1133
  /**
1134
  * We do a recursive merge to allow "stacking" of same kind of queries;
1135
+ * e.g. two or more `tax_query`.
1136
  */
1137
+ $this->query_args = array_merge_recursive( $query_args, $query_modifier );
1138
  }
1139
  } else {
1140
  /**
1182
  if ( $this->has_default_modifier( $key ) ) {
1183
  // let's use the default filters normalizing the key first
1184
  $call_args[0] = $this->normalize_key( $key );
1185
+ $query_modifier = call_user_func_array( array( $this, 'apply_default_modifier' ), $call_args );
1186
  } elseif ( 2 === count( $call_args ) ) {
1187
  // Pass query argument $key with the single value argument.
1188
+ $query_modifier = array(
1189
  $key => $call_args[1],
1190
+ );
1191
  } else {
1192
  // More than two $call_args were sent (key, value), assume it was meant for a filter that was not defined yet.
1193
  throw Tribe__Repository__Usage_Error::because_the_read_filter_is_not_defined( $key, $this );
1194
  }
1195
  } else {
1196
+ $query_modifier = call_user_func_array( array( $this, 'apply_modifier' ), $call_args );
1197
  }
1198
 
1199
  return $query_modifier;
1243
  // `ID` to `id`
1244
  $normalized = strtolower( $key );
1245
 
1246
+ $post_prefixed = array(
1247
  'password',
1248
  'name__in',
1249
  '_in',
1258
  'modified',
1259
  'modified_gmt',
1260
  'content_filtered',
1261
+ );
1262
 
1263
  if ( in_array( $key, $post_prefixed, true ) ) {
1264
  $normalized = 'post_' . $key;
1316
  $to_update = $this->get_ids();
1317
 
1318
  if ( empty( $to_update ) ) {
1319
+ return $return_promise ? new Tribe__Promise() : array();
1320
  }
1321
 
1322
+ $exit = array();
1323
+ $postarrs = array();
1324
 
1325
  foreach ( $to_update as $id ) {
1326
  $postarrs[ $id ] = $this->filter_postarr_for_update( $this->build_postarr( $id ), $id );
1351
  */
1352
  public function get_ids() {
1353
  if ( $this->void_query ) {
1354
+ return array();
1355
  }
1356
 
1357
 
1383
  * Extending classes might use this method to run sub-queries
1384
  * and signal a void query; let's return an empty array.
1385
  */
1386
+ return array();
1387
  }
1388
  }
1389
 
1407
  return ! in_array( $key, self::$blocked_keys, true );
1408
  }
1409
 
1410
+ /**
1411
+ * Whether the key is a field of the posts table or not.
1412
+ *
1413
+ * @since 4.7.19
1414
+ *
1415
+ * @param string $key
1416
+ *
1417
+ * @return bool
1418
+ */
1419
+ protected function is_a_post_field( $key ) {
1420
+ return in_array( $key, array(
1421
+ 'ID',
1422
+ 'post_author',
1423
+ 'post_date',
1424
+ 'post_date_gmt',
1425
+ 'post_content',
1426
+ 'post_title',
1427
+ 'post_excerpt',
1428
+ 'post_status',
1429
+ 'comment_status',
1430
+ 'ping_status',
1431
+ 'post_password',
1432
+ 'post_name',
1433
+ 'to_ping',
1434
+ 'pinged',
1435
+ 'post_modified',
1436
+ 'post_modified_gmt',
1437
+ 'post_content_filtered',
1438
+ 'post_parent',
1439
+ 'guid',
1440
+ 'menu_order',
1441
+ 'post_type',
1442
+ 'post_mime_type',
1443
+ 'comment_count',
1444
+ ), true );
1445
+ }
1446
+
1447
  /**
1448
  * Whether the current key is a date one requiring a converted key pair too or not.
1449
  *
1474
  $postarr[ $key ] = $value;
1475
  }
1476
 
1477
+ /**
1478
+ * Whether the current key identifies one of the supported taxonomies or not.
1479
+ *
1480
+ * @since 4.7.19
1481
+ *
1482
+ * @param string $key
1483
+ *
1484
+ * @return bool
1485
+ */
1486
+ protected function is_a_taxonomy( $key ) {
1487
+ return in_array( $key, $this->taxonomies, true );
1488
+ }
1489
+
1490
  /**
1491
  * {@inheritdoc}
1492
  */
1510
  */
1511
  public function set( $key, $value ) {
1512
  if ( ! is_string( $key ) ) {
1513
+ throw Tribe__Repository__Usage_Error::because_udpate_key_should_be_a_string( $this );
1514
  }
1515
 
1516
  $this->updates[ $key ] = $value;
1579
  public function where_meta_related_by( $meta_keys, $compare, $field = null, $values = null ) {
1580
  $meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
1581
 
1582
+ if ( ! in_array( $compare, array( 'EXISTS', 'NOT EXISTS' ), true ) ) {
1583
  if ( empty( $field ) || empty( $values ) ) {
1584
  throw Tribe__Repository__Usage_Error::because_this_comparison_operator_requires_fields_and_values( $meta_keys, $compare, $this );
1585
  }
1637
  public function where_meta_related_by_meta( $meta_keys, $compare, $meta_field = null, $meta_values = null, $or_not_exists = false ) {
1638
  $meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
1639
 
1640
+ if ( ! in_array( $compare, array( 'EXISTS', 'NOT EXISTS' ), true ) ) {
1641
  if ( empty( $meta_field ) || empty( $meta_values ) ) {
1642
  throw Tribe__Repository__Usage_Error::because_this_comparison_operator_requires_fields_and_values( $meta_keys, $compare, $this );
1643
  }
1724
  $buffered_count = count( $buffered );
1725
 
1726
  foreach ( $all_callbacks as $c ) {
1727
+ call_user_func_array( array( $this, $c[0] ), array_slice( $c, 1 ) );
1728
 
1729
  if ( $buffered_count === count( $this->filter_query->get_buffered_where_clauses() ) ) {
1730
  throw Tribe__Repository__Usage_Error::because_where_or_should_only_be_used_with_methods_that_add_where_clauses( $c, $this );
1765
  * @param string|null $by The ->by() lookup to use (defaults to meta_regexp_or_like).
1766
  */
1767
  public function add_simple_meta_schema_entry( $key, $meta_key, $by = null ) {
1768
+ $this->schema[ $key ] = array( $this, 'filter_by_simple_meta_schema' );
1769
 
1770
+ $this->simple_meta_schema[ $key ] = array(
1771
  'meta_key' => $meta_key,
1772
  'by' => $by,
1773
+ );
1774
  }
1775
 
1776
  /**
1783
  * @param string|null $by The ->by() lookup to use (defaults to term_in).
1784
  */
1785
  public function add_simple_tax_schema_entry( $key, $taxonomy, $by = null ) {
1786
+ $this->schema[ $key ] = array( $this, 'filter_by_simple_tax_schema' );
1787
 
1788
+ $this->simple_tax_schema[ $key ] = array(
1789
  'taxonomy' => $taxonomy,
1790
  'by' => $by,
1791
+ );
1792
  }
1793
 
1794
  /**
1810
  * @throws Tribe__Repository__Usage_Error If a filter is called with wrong arguments.
1811
  */
1812
  protected function apply_default_modifier( $key, $value ) {
1813
+ $args = array();
1814
 
1815
  $call_args = func_get_args();
1816
  $arg_1 = isset( $call_args[2] ) ? $call_args[2] : null;
1822
  switch ( $key ) {
1823
  default:
1824
  // leverage built-in WP_Query filters
1825
+ $args = array( $key => $value );
1826
  break;
1827
  case 'ID':
1828
  case 'id':
1829
+ $args = array( 'p' => $value );
1830
  break;
1831
  case 'search':
1832
+ $args = array( 's' => $value );
1833
  break;
1834
  case 'post_status':
1835
  $this->query_args['post_status'] = (array) $value;
1859
  break;
1860
  case 'to_ping':
1861
  $this->filter_query->to_get_posts_to_ping( $value );
1862
+ $args = array( 'to_ping' => $value );
1863
  break;
1864
  case 'post_modified':
1865
  $args = $this->get_posts_after( $value, 'post_modified' );
1874
  $this->filter_query->to_get_posts_with_guid_like( $value );
1875
  break;
1876
  case 'menu_order':
1877
+ $args = array( 'menu_order' => $value );
1878
  break;
1879
  case 'meta':
1880
  case 'meta_equals':
2036
  * @return array
2037
  */
2038
  protected function get_posts_after( $value, $column = 'post_date' ) {
2039
+ $timezone = in_array( $column, array( 'post_date_gmt', 'post_modified_gmt' ), true )
2040
  ? 'UTC'
2041
  : Tribe__Timezones::generate_timezone_string_from_utc_offset( Tribe__Timezones::wp_timezone_string() );
2042
 
2048
 
2049
  $array_key = sprintf( '%s-after', $column );
2050
 
2051
+ return array(
2052
+ 'date_query' => array(
2053
  'relation' => 'AND',
2054
+ $array_key => array(
2055
  'inclusive' => true,
2056
  'column' => $column,
2057
  'after' => $date->format( 'Y-m-d H:i:s' ),
2058
+ ),
2059
+ ),
2060
+ );
2061
  }
2062
 
2063
  /**
2071
  * @return array
2072
  */
2073
  protected function get_posts_before( $value, $column = 'post_date' ) {
2074
+ $timezone = in_array( $column, array( 'post_date_gmt', 'post_modified_gmt' ), true )
2075
  ? 'UTC'
2076
  : Tribe__Timezones::generate_timezone_string_from_utc_offset( Tribe__Timezones::wp_timezone_string() );
2077
 
2083
 
2084
  $array_key = sprintf( '%s-before', $column );
2085
 
2086
+ return array(
2087
+ 'date_query' => array(
2088
  'relation' => 'AND',
2089
+ $array_key => array(
2090
  'inclusive' => true,
2091
  'column' => $column,
2092
  'before' => $date->format( 'Y-m-d H:i:s' ),
2093
+ ),
2094
+ ),
2095
+ );
2096
  }
2097
 
2098
  /**
2117
  if ( count( $meta_keys ) === 1 ) {
2118
  $array_key = $this->sql_slug( $meta_keys[0], $postfix );
2119
 
2120
+ $args = array(
2121
+ 'meta_query' => array(
2122
+ $array_key => array(
2123
  'key' => $meta_keys[0],
2124
  'compare' => strtoupper( $compare ),
2125
+ ),
2126
+ ),
2127
+ );
2128
 
2129
+ if ( ! in_array( $compare, array( 'EXISTS', 'NOT EXISTS' ), true ) ) {
2130
  $args['meta_query'][ $array_key ]['value'] = $meta_value;
2131
  }
2132
 
2213
  * @return array
2214
  */
2215
  protected function build_tax_query( $taxonomy, $terms, $field, $operator ) {
2216
+ if ( in_array( $operator, array( 'EXISTS', 'NOT EXISTS' ), true ) ) {
2217
  $array_key = $this->sql_slug( $taxonomy, $operator );
2218
  } else {
2219
  $array_key = $this->sql_slug( $taxonomy, $field, $operator );
2220
  }
2221
 
2222
+ return array(
2223
+ 'tax_query' => array(
2224
+ $array_key => array(
2225
  'taxonomy' => $taxonomy,
2226
  'field' => $field,
2227
  'terms' => $terms,
2228
  'operator' => strtoupper( $operator ),
2229
+ ),
2230
+ ),
2231
+ );
2232
  }
2233
 
2234
  /**
2272
  public function prepare_interval( $values, $format = '%s', $operator = 'IN' ) {
2273
  $values = Tribe__Utils__Array::list_to_array( $values );
2274
 
2275
+ $prepared = array();
2276
  foreach ( $values as $value ) {
2277
  $prepared[] = $this->prepare_value( $value, $format );
2278
  }
2279
 
2280
+ return in_array( $operator, array( 'BETWEEN', 'NOT BETWEEN' ) )
2281
  ? sprintf( '%s AND %s', $prepared[0], $prepared[1] )
2282
  : sprintf( '(%s)', implode( ',', $prepared ) );
2283
  }
2478
  $to_delete = $this->get_ids();
2479
 
2480
  if ( empty( $to_delete ) ) {
2481
+ return $return_promise ? new Tribe__Promise() : array();
2482
  }
2483
 
2484
 
2908
  * {@inheritdoc}
2909
  */
2910
  public function build_postarr( $id = null ) {
2911
+ $postarr = array(
2912
+ 'tax_input' => array(),
2913
+ 'meta_input' => array(),
2914
+ );
2915
 
2916
  /*
2917
  * The check is lax here by design: we leave space for the client code
3088
  /**
3089
  * {@inheritdoc}
3090
  */
3091
+ public function filter( $args = array(), $operator = 'AND' ) {
3092
  $list = new WP_List_Util( $this->all() );
3093
 
3094
  return $list->filter( $args, $operator );
3097
  /**
3098
  * {@inheritdoc}
3099
  */
3100
+ public function sort( $orderby = array(), $order = 'ASC', $preserve_keys = false ) {
3101
  $list = new WP_List_Util( $this->all() );
3102
 
3103
  return $list->sort( $orderby, $order, $preserve_keys );
common/src/Tribe/Repository/Core_Read_Interface.php CHANGED
@@ -149,9 +149,9 @@ interface Core_Read_Interface {
149
  *
150
  * @since 4.7.19
151
  *
152
- * @param string|array<string,string> $order_by The post field, custom field or alias key to order posts by.
153
- * @param string $order The order direction; optional; shortcut for the `order` method; defaults
154
- * to `DESC`.
155
  *
156
  * @return Tribe__Repository__Read_Interface
157
  */
@@ -362,7 +362,7 @@ interface Core_Read_Interface {
362
  *
363
  * @see \wp_list_filter()
364
  */
365
- public function filter( $args = [], $operator = 'AND' );
366
 
367
  /**
368
  * Sorts the results according to the specified criteria.
@@ -382,7 +382,7 @@ interface Core_Read_Interface {
382
  *
383
  * @see \wp_list_sort()
384
  */
385
- public function sort( $orderby = [], $order = 'ASC', $preserve_keys = false );
386
 
387
  /**
388
  * Builds a collection on the result of the `all()` method call.
149
  *
150
  * @since 4.7.19
151
  *
152
+ * @param string $order_by The post field, custom field or alias key to order posts by.
153
+ * @param string $order The order direction; optional; shortcut for the `order` method; defaults
154
+ * to `DESC`.
155
  *
156
  * @return Tribe__Repository__Read_Interface
157
  */
362
  *
363
  * @see \wp_list_filter()
364
  */
365
+ public function filter( $args = array(), $operator = 'AND' );
366
 
367
  /**
368
  * Sorts the results according to the specified criteria.
382
  *
383
  * @see \wp_list_sort()
384
  */
385
+ public function sort( $orderby = array(), $order = 'ASC', $preserve_keys = false );
386
 
387
  /**
388
  * Builds a collection on the result of the `all()` method call.
common/src/Tribe/Repository/Decorator.php CHANGED
@@ -51,7 +51,7 @@ abstract class Tribe__Repository__Decorator implements Tribe__Repository__Interf
51
  */
52
  public function by( $key, $value = null ) {
53
  $call_args = func_get_args();
54
- call_user_func_array( [ $this->decorated, 'by' ], $call_args );
55
 
56
  return $this;
57
  }
@@ -61,7 +61,7 @@ abstract class Tribe__Repository__Decorator implements Tribe__Repository__Interf
61
  */
62
  public function where( $key, $value = null ) {
63
  $call_args = func_get_args();
64
- call_user_func_array( [ $this->decorated, 'where' ], $call_args );
65
 
66
  return $this;
67
  }
@@ -322,7 +322,7 @@ abstract class Tribe__Repository__Decorator implements Tribe__Repository__Interf
322
  */
323
  public function where_or( $callbacks ) {
324
  $call_args = func_get_args();
325
- call_user_func_array( [ $this->decorated, 'where_or' ], $call_args );
326
 
327
  return $this;
328
  }
@@ -545,14 +545,14 @@ abstract class Tribe__Repository__Decorator implements Tribe__Repository__Interf
545
  /**
546
  * {@inheritdoc}
547
  */
548
- public function filter( $orderby = [], $order = 'ASC', $preserve_keys = false ) {
549
  return $this->decorated->filter( $orderby, $order, $preserve_keys );
550
  }
551
 
552
  /**
553
  * {@inheritdoc}
554
  */
555
- public function sort( $orderby = [], $order = 'ASC', $preserve_keys = false ) {
556
  return $this->decorated->sort( $orderby, $order, $preserve_keys );
557
  }
558
 
51
  */
52
  public function by( $key, $value = null ) {
53
  $call_args = func_get_args();
54
+ call_user_func_array( array( $this->decorated, 'by' ), $call_args );
55
 
56
  return $this;
57
  }
61
  */
62
  public function where( $key, $value = null ) {
63
  $call_args = func_get_args();
64
+ call_user_func_array( array( $this->decorated, 'where' ), $call_args );
65
 
66
  return $this;
67
  }
322
  */
323
  public function where_or( $callbacks ) {
324
  $call_args = func_get_args();
325
+ call_user_func_array( array( $this->decorated, 'where_or' ), $call_args );
326
 
327
  return $this;
328
  }
545
  /**
546
  * {@inheritdoc}
547
  */
548
+ public function filter( $orderby = array(), $order = 'ASC', $preserve_keys = false ) {
549
  return $this->decorated->filter( $orderby, $order, $preserve_keys );
550
  }
551
 
552
  /**
553
  * {@inheritdoc}
554
  */
555
+ public function sort( $orderby = array(), $order = 'ASC', $preserve_keys = false ) {
556
  return $this->decorated->sort( $orderby, $order, $preserve_keys );
557
  }
558
 
common/src/Tribe/Repository/Query_Filters.php CHANGED
@@ -17,16 +17,16 @@ class Tribe__Repository__Query_Filters {
17
  /**
18
  * @var array
19
  */
20
- protected static $initial_query_vars = [
21
- 'like' => [
22
- 'post_title' => [],
23
- 'post_content' => [],
24
- 'post_excerpt' => [],
25
- ],
26
- 'status' => [],
27
- 'join' => [],
28
- 'where' => [],
29
- ];
30
 
31
  /**
32
  * An array of the filters that can be set and unset by id.
@@ -55,7 +55,7 @@ class Tribe__Repository__Query_Filters {
55
  /**
56
  * @var array A list of the filters this class has added.
57
  */
58
- protected $active_filters = [];
59
 
60
  /**
61
  * @var bool
@@ -65,7 +65,7 @@ class Tribe__Repository__Query_Filters {
65
  /**
66
  * @var array
67
  */
68
- protected $buffered_where_clauses = [];
69
 
70
  /**
71
  * Stores the last request run by the current query.
@@ -99,38 +99,38 @@ class Tribe__Repository__Query_Filters {
99
  $values = Tribe__Utils__Array::list_to_array( $values );
100
 
101
  if ( empty( $meta_keys ) || count( $values ) === 0 ) {
102
- return [];
103
  }
104
 
105
- $args = [
106
- 'meta_query' => [
107
- $query_slug => [
108
  'relation' => 'AND',
109
- ],
110
- ],
111
- ];
112
 
113
  foreach ( $meta_keys as $key ) {
114
- $args['meta_query'][ $query_slug ][ $key ] = [
115
- 'not-exists' => [
116
  'key' => $key,
117
  'compare' => 'NOT EXISTS',
118
- ],
119
  'relation' => 'OR',
120
- ];
121
 
122
  if ( count( $values ) > 1 ) {
123
- $args['meta_query'][ $query_slug ][ $key ]['not-in'] = [
124
  'key' => $key,
125
  'compare' => 'NOT IN',
126
  'value' => $values,
127
- ];
128
  } else {
129
- $args['meta_query'][ $query_slug ][ $key ]['not-equals'] = [
130
  'key' => $key,
131
  'value' => $values[0],
132
  'compare' => '!=',
133
- ];
134
  }
135
  }
136
 
@@ -153,30 +153,30 @@ class Tribe__Repository__Query_Filters {
153
  $values = Tribe__Utils__Array::list_to_array( $values );
154
 
155
  if ( empty( $meta_keys ) || count( $values ) === 0 ) {
156
- return [];
157
  }
158
 
159
- $args = [
160
- 'meta_query' => [
161
- $query_slug => [
162
  'relation' => 'OR',
163
- ],
164
- ],
165
- ];
166
 
167
  foreach ( $meta_keys as $meta_key ) {
168
  if ( count( $values ) > 1 ) {
169
- $args['meta_query'][ $query_slug ][ $meta_key ] = [
170
  'key' => $meta_key,
171
  'compare' => 'IN',
172
  'value' => $values,
173
- ];
174
  } else {
175
- $args['meta_query'][ $query_slug ][ $meta_key ] = [
176
  'key' => $meta_key,
177
  'compare' => '=',
178
  'value' => $values[0],
179
- ];
180
  }
181
  }
182
 
@@ -197,22 +197,22 @@ class Tribe__Repository__Query_Filters {
197
  $meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
198
 
199
  if ( empty( $meta_keys ) ) {
200
- return [];
201
  }
202
 
203
- $args = [
204
- 'meta_query' => [
205
- $query_slug => [
206
  'relation' => 'OR',
207
- ],
208
- ],
209
- ];
210
 
211
  foreach ( $meta_keys as $meta_key ) {
212
- $args['meta_query'][ $query_slug ][ $meta_key ] = [
213
  'key' => $meta_key,
214
  'compare' => 'EXISTS',
215
- ];
216
  }
217
 
218
  return $args;
@@ -235,35 +235,35 @@ class Tribe__Repository__Query_Filters {
235
  $values = Tribe__Utils__Array::list_to_array( $values );
236
 
237
  if ( empty( $meta_keys ) || count( $values ) === 0 ) {
238
- return [];
239
  }
240
 
241
- $args = [
242
- 'meta_query' => [
243
- $query_slug => [
244
  'relation' => 'AND',
245
- ],
246
- ],
247
- ];
248
 
249
  foreach ( $meta_keys as $meta_key ) {
250
- $args['meta_query'][ $query_slug ][ $meta_key ]['does-not-exist'] = [
251
  'key' => $meta_key,
252
  'compare' => 'NOT EXISTS',
253
- ];
254
  $args['meta_query'][ $query_slug ][ $meta_key ]['relation'] = 'OR';
255
  if ( count( $values ) > 1 ) {
256
- $args['meta_query'][ $query_slug ][ $meta_key ]['in'] = [
257
  'key' => $meta_key,
258
  'compare' => 'IN',
259
  'value' => $values,
260
- ];
261
  } else {
262
- $args['meta_query'][ $query_slug ][ $meta_key ]['equals'] = [
263
  'key' => $meta_key,
264
  'compare' => '=',
265
  'value' => $values[0],
266
- ];
267
  }
268
  }
269
 
@@ -287,36 +287,36 @@ class Tribe__Repository__Query_Filters {
287
  $values = Tribe__Utils__Array::list_to_array( $values );
288
 
289
  if ( empty( $meta_keys ) || count( $values ) === 0 ) {
290
- return [];
291
  }
292
 
293
- $args = [
294
- 'meta_query' => [
295
- $query_slug => [
296
  'relation' => 'AND',
297
- ],
298
- ],
299
- ];
300
 
301
  foreach ( $meta_keys as $meta_key ) {
302
- $args['meta_query'][ $query_slug ][ $meta_key ]['does-not-exist'] = [
303
  'key' => $meta_key,
304
  'compare' => 'NOT EXISTS',
305
- ];
306
  $args['meta_query'][ $query_slug ][ $meta_key ]['relation'] = 'OR';
307
 
308
  if ( count( $values ) > 1 ) {
309
- $args['meta_query'][ $query_slug ][ $meta_key ]['not-in'] = [
310
  'key' => $meta_key,
311
  'compare' => 'NOT IN',
312
  'value' => $values,
313
- ];
314
  } else {
315
- $args['meta_query'][ $query_slug ][ $meta_key ]['not-equals'] = [
316
  'key' => $meta_key,
317
  'compare' => '!=',
318
  'value' => $values[0],
319
- ];
320
  }
321
  }
322
 
@@ -366,11 +366,11 @@ class Tribe__Repository__Query_Filters {
366
  global $wpdb;
367
 
368
  $like = $wpdb->esc_like( $entry );
369
- $variations = [
370
  $wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "{$like}%" ),
371
  $wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "%{$like}%" ),
372
  $wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "%{$like}" ),
373
- ];
374
 
375
  return ' AND (' . implode( ' OR ', $variations ) . ')';
376
  }
@@ -430,7 +430,7 @@ class Tribe__Repository__Query_Filters {
430
  $matching_ids = $wpdb->get_col( $relation_query );
431
 
432
  if ( empty( $matching_ids ) ) {
433
- $query->posts = [];
434
  $filtered_found_posts = 0;
435
  break;
436
  }
@@ -438,7 +438,7 @@ class Tribe__Repository__Query_Filters {
438
  if ( $ids_only ) {
439
  $query->posts = array_intersect( $query->posts, $matching_ids );
440
  } else {
441
- $updated_query_posts = [];
442
  foreach ( $query->posts as $this_post ) {
443
  if ( in_array( $this_post->ID, $matching_ids ) ) {
444
  $updated_query_posts[] = $this_post;
@@ -475,8 +475,8 @@ class Tribe__Repository__Query_Filters {
475
  public function to_get_posts_with_title_like( $value ) {
476
  $this->query_vars['like']['post_title'][] = $value;
477
 
478
- if ( ! has_filter( 'posts_where', [ $this, 'filter_by_like' ] ) ) {
479
- $this->add_filter( 'posts_where', [ $this, 'filter_by_like' ], 10, 2 );
480
  }
481
  }
482
 
@@ -492,7 +492,7 @@ class Tribe__Repository__Query_Filters {
492
  * @param int $accepted_args
493
  */
494
  protected function add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
495
- $this->active_filters[] = [ $tag, $function_to_add, $priority ];
496
  add_filter( $tag, $function_to_add, $priority, $accepted_args );
497
  }
498
 
@@ -506,8 +506,8 @@ class Tribe__Repository__Query_Filters {
506
  public function to_get_posts_with_content_like( $value ) {
507
  $this->query_vars['like']['post_content'][] = $value;
508
 
509
- if ( ! has_filter( 'posts_where', [ $this, 'filter_by_like' ] ) ) {
510
- $this->add_filter( 'posts_where', [ $this, 'filter_by_like' ], 10, 2 );
511
  }
512
  }
513
 
@@ -521,8 +521,8 @@ class Tribe__Repository__Query_Filters {
521
  public function to_get_posts_with_excerpt_like( $value ) {
522
  $this->query_vars['like']['post_excerpt'] = $value;
523
 
524
- if ( ! has_filter( 'posts_where', [ $this, 'filter_by_like' ] ) ) {
525
- add_filter( 'posts_where', [ $this, 'filter_by_like' ], 10, 2 );
526
  }
527
  }
528
 
@@ -536,8 +536,8 @@ class Tribe__Repository__Query_Filters {
536
  public function to_get_posts_with_filtered_content_like( $value ) {
537
  $this->query_vars['like']['post_content_filtered'][] = $value;
538
 
539
- if ( ! has_filter( 'posts_where', [ $this, 'filter_by_like' ] ) ) {
540
- add_filter( 'posts_where', [ $this, 'filter_by_like' ], 10, 2 );
541
  }
542
  }
543
 
@@ -551,8 +551,8 @@ class Tribe__Repository__Query_Filters {
551
  public function to_get_posts_with_guid_like( $value ) {
552
  $this->query_vars['like']['guid'][] = $value;
553
 
554
- if ( ! has_filter( 'posts_where', [ $this, 'filter_by_like' ] ) ) {
555
- add_filter( 'posts_where', [ $this, 'filter_by_like' ], 10, 2 );
556
  }
557
  }
558
 
@@ -566,8 +566,8 @@ class Tribe__Repository__Query_Filters {
566
  public function to_get_posts_to_ping( $value ) {
567
  $this->query_vars['to_ping'] = $value;
568
 
569
- if ( ! has_filter( 'posts_where', [ $this, 'filter_by_to_ping' ] ) ) {
570
- add_filter( 'posts_where', [ $this, 'filter_by_to_ping' ], 10, 2 );
571
  }
572
  }
573
 
@@ -666,8 +666,8 @@ class Tribe__Repository__Query_Filters {
666
  $this->query_vars['where'][] = '(' . $where_clause . ')';
667
  }
668
 
669
- if ( ! has_filter( 'posts_where', [ $this, 'filter_posts_where' ] ) ) {
670
- add_filter( 'posts_where', [ $this, 'filter_posts_where' ], 10, 2 );
671
  }
672
  }
673
  }
@@ -690,8 +690,8 @@ class Tribe__Repository__Query_Filters {
690
  $this->query_vars['join'][] = $join_clause;
691
  }
692
 
693
- if ( ! has_filter( 'posts_join', [ $this, 'filter_posts_join' ] ) ) {
694
- add_filter( 'posts_join', [ $this, 'filter_posts_join' ], 10, 2 );
695
  }
696
  }
697
 
@@ -738,8 +738,8 @@ class Tribe__Repository__Query_Filters {
738
  $this->query_vars[ $orderby_key ][ $id ] = array_merge( $this->query_vars[ $orderby_key ][ $id ], $entries );
739
  }
740
 
741
- if ( ! has_filter( 'posts_orderby', [ $this, 'filter_posts_orderby' ] ) ) {
742
- add_filter( 'posts_orderby', [ $this, 'filter_posts_orderby' ], 10, 2 );
743
  }
744
  }
745
 
@@ -762,8 +762,8 @@ class Tribe__Repository__Query_Filters {
762
  $this->query_vars['fields'][] = $field;
763
  }
764
 
765
- if ( ! has_filter( 'posts_fields', [ $this, 'filter_posts_fields' ] ) ) {
766
- add_filter( 'posts_fields', [ $this, 'filter_posts_fields' ], 10, 2 );
767
  }
768
  }
769
 
@@ -795,7 +795,7 @@ class Tribe__Repository__Query_Filters {
795
 
796
  if ( $get_clean ) {
797
  $this->buffer_where_clauses = false;
798
- $this->buffered_where_clauses = [];
799
  }
800
 
801
  return $clauses;
@@ -846,7 +846,7 @@ class Tribe__Repository__Query_Filters {
846
  global $wpdb;
847
 
848
  foreach ( $input as $string ) {
849
- $buffer[] = is_array( $string ) ? $string : [ $string ];
850
  }
851
 
852
  $buffer = array_unique( call_user_func_array( 'array_merge', $buffer ) );
@@ -1055,7 +1055,7 @@ class Tribe__Repository__Query_Filters {
1055
  * value, if the query is not the one attached to this filter or the method
1056
  * is called not in the context of the `posts_pre_query` filter;
1057
  */
1058
- public function capture_request( $posts = null, WP_Query $query = null ) {
1059
  if ( ! doing_filter( 'posts_pre_query' ) ) {
1060
  // Let's make sure nothing bad happens if this runs outside of its natural context.
1061
  return null;
17
  /**
18
  * @var array
19
  */
20
+ protected static $initial_query_vars = array(
21
+ 'like' => array(
22
+ 'post_title' => array(),
23
+ 'post_content' => array(),
24
+ 'post_excerpt' => array(),
25
+ ),
26
+ 'status' => array(),
27
+ 'join' => array(),
28
+ 'where' => array(),
29
+ );
30
 
31
  /**
32
  * An array of the filters that can be set and unset by id.
55
  /**
56
  * @var array A list of the filters this class has added.
57
  */
58
+ protected $active_filters = array();
59
 
60
  /**
61
  * @var bool
65
  /**
66
  * @var array
67
  */
68
+ protected $buffered_where_clauses = array();
69
 
70
  /**
71
  * Stores the last request run by the current query.
99
  $values = Tribe__Utils__Array::list_to_array( $values );
100
 
101
  if ( empty( $meta_keys ) || count( $values ) === 0 ) {
102
+ return array();
103
  }
104
 
105
+ $args = array(
106
+ 'meta_query' => array(
107
+ $query_slug => array(
108
  'relation' => 'AND',
109
+ ),
110
+ ),
111
+ );
112
 
113
  foreach ( $meta_keys as $key ) {
114
+ $args['meta_query'][ $query_slug ][ $key ] = array(
115
+ 'not-exists' => array(
116
  'key' => $key,
117
  'compare' => 'NOT EXISTS',
118
+ ),
119
  'relation' => 'OR',
120
+ );
121
 
122
  if ( count( $values ) > 1 ) {
123
+ $args['meta_query'][ $query_slug ][ $key ]['not-in'] = array(
124
  'key' => $key,
125
  'compare' => 'NOT IN',
126
  'value' => $values,
127
+ );
128
  } else {
129
+ $args['meta_query'][ $query_slug ][ $key ]['not-equals'] = array(
130
  'key' => $key,
131
  'value' => $values[0],
132
  'compare' => '!=',
133
+ );
134
  }
135
  }
136
 
153
  $values = Tribe__Utils__Array::list_to_array( $values );
154
 
155
  if ( empty( $meta_keys ) || count( $values ) === 0 ) {
156
+ return array();
157
  }
158
 
159
+ $args = array(
160
+ 'meta_query' => array(
161
+ $query_slug => array(
162
  'relation' => 'OR',
163
+ ),
164
+ ),
165
+ );
166
 
167
  foreach ( $meta_keys as $meta_key ) {
168
  if ( count( $values ) > 1 ) {
169
+ $args['meta_query'][ $query_slug ][ $meta_key ] = array(
170
  'key' => $meta_key,
171
  'compare' => 'IN',
172
  'value' => $values,
173
+ );
174
  } else {
175
+ $args['meta_query'][ $query_slug ][ $meta_key ] = array(
176
  'key' => $meta_key,
177
  'compare' => '=',
178
  'value' => $values[0],
179
+ );
180
  }
181
  }
182
 
197
  $meta_keys = Tribe__Utils__Array::list_to_array( $meta_keys );
198
 
199
  if ( empty( $meta_keys ) ) {
200
+ return array();
201
  }
202
 
203
+ $args = array(
204
+ 'meta_query' => array(
205
+ $query_slug => array(
206
  'relation' => 'OR',
207
+ ),
208
+ ),
209
+ );
210
 
211
  foreach ( $meta_keys as $meta_key ) {
212
+ $args['meta_query'][ $query_slug ][ $meta_key ] = array(
213
  'key' => $meta_key,
214
  'compare' => 'EXISTS',
215
+ );
216
  }
217
 
218
  return $args;
235
  $values = Tribe__Utils__Array::list_to_array( $values );
236
 
237
  if ( empty( $meta_keys ) || count( $values ) === 0 ) {
238
+ return array();
239
  }
240
 
241
+ $args = array(
242
+ 'meta_query' => array(
243
+ $query_slug => array(
244
  'relation' => 'AND',
245
+ ),
246
+ ),
247
+ );
248
 
249
  foreach ( $meta_keys as $meta_key ) {
250
+ $args['meta_query'][ $query_slug ][ $meta_key ]['does-not-exist'] = array(
251
  'key' => $meta_key,
252
  'compare' => 'NOT EXISTS',
253
+ );
254
  $args['meta_query'][ $query_slug ][ $meta_key ]['relation'] = 'OR';
255
  if ( count( $values ) > 1 ) {
256
+ $args['meta_query'][ $query_slug ][ $meta_key ]['in'] = array(
257
  'key' => $meta_key,
258
  'compare' => 'IN',
259
  'value' => $values,
260
+ );
261
  } else {
262
+ $args['meta_query'][ $query_slug ][ $meta_key ]['equals'] = array(
263
  'key' => $meta_key,
264
  'compare' => '=',
265
  'value' => $values[0],
266
+ );
267
  }
268
  }
269
 
287
  $values = Tribe__Utils__Array::list_to_array( $values );
288
 
289
  if ( empty( $meta_keys ) || count( $values ) === 0 ) {
290
+ return array();
291
  }
292
 
293
+ $args = array(
294
+ 'meta_query' => array(
295
+ $query_slug => array(
296
  'relation' => 'AND',
297
+ ),
298
+ ),
299
+ );
300
 
301
  foreach ( $meta_keys as $meta_key ) {
302
+ $args['meta_query'][ $query_slug ][ $meta_key ]['does-not-exist'] = array(
303
  'key' => $meta_key,
304
  'compare' => 'NOT EXISTS',
305
+ );
306
  $args['meta_query'][ $query_slug ][ $meta_key ]['relation'] = 'OR';
307
 
308
  if ( count( $values ) > 1 ) {
309
+ $args['meta_query'][ $query_slug ][ $meta_key ]['not-in'] = array(
310
  'key' => $meta_key,
311
  'compare' => 'NOT IN',
312
  'value' => $values,
313
+ );
314
  } else {
315
+ $args['meta_query'][ $query_slug ][ $meta_key ]['not-equals'] = array(
316
  'key' => $meta_key,
317
  'compare' => '!=',
318
  'value' => $values[0],
319
+ );
320
  }
321
  }
322
 
366
  global $wpdb;
367
 
368
  $like = $wpdb->esc_like( $entry );
369
+ $variations = array(
370
  $wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "{$like}%" ),
371
  $wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "%{$like}%" ),
372
  $wpdb->prepare( "{$wpdb->posts}.{$field} LIKE %s ", "%{$like}" ),
373
+ );
374
 
375
  return ' AND (' . implode( ' OR ', $variations ) . ')';
376
  }
430
  $matching_ids = $wpdb->get_col( $relation_query );
431
 
432
  if ( empty( $matching_ids ) ) {
433
+ $query->posts = array();
434
  $filtered_found_posts = 0;
435
  break;
436
  }
438
  if ( $ids_only ) {
439
  $query->posts = array_intersect( $query->posts, $matching_ids );
440
  } else {
441
+ $updated_query_posts = array();
442
  foreach ( $query->posts as $this_post ) {
443
  if ( in_array( $this_post->ID, $matching_ids ) ) {
444
  $updated_query_posts[] = $this_post;
475
  public function to_get_posts_with_title_like( $value ) {
476
  $this->query_vars['like']['post_title'][] = $value;
477
 
478
+ if ( ! has_filter( 'posts_where', array( $this, 'filter_by_like' ) ) ) {
479
+ $this->add_filter( 'posts_where', array( $this, 'filter_by_like' ), 10, 2 );
480
  }
481
  }
482
 
492
  * @param int $accepted_args
493
  */
494
  protected function add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
495
+ $this->active_filters[] = array( $tag, $function_to_add, $priority );
496
  add_filter( $tag, $function_to_add, $priority, $accepted_args );
497
  }
498
 
506
  public function to_get_posts_with_content_like( $value ) {
507
  $this->query_vars['like']['post_content'][] = $value;
508
 
509
+ if ( ! has_filter( 'posts_where', array( $this, 'filter_by_like' ) ) ) {
510
+ $this->add_filter( 'posts_where', array( $this, 'filter_by_like' ), 10, 2 );
511
  }
512
  }
513
 
521
  public function to_get_posts_with_excerpt_like( $value ) {
522
  $this->query_vars['like']['post_excerpt'] = $value;
523
 
524
+ if ( ! has_filter( 'posts_where', array( $this, 'filter_by_like' ) ) ) {
525
+ add_filter( 'posts_where', array( $this, 'filter_by_like' ), 10, 2 );
526
  }
527
  }
528
 
536
  public function to_get_posts_with_filtered_content_like( $value ) {
537
  $this->query_vars['like']['post_content_filtered'][] = $value;
538
 
539
+ if ( ! has_filter( 'posts_where', array( $this, 'filter_by_like' ) ) ) {
540
+ add_filter( 'posts_where', array( $this, 'filter_by_like' ), 10, 2 );
541
  }
542
  }
543
 
551
  public function to_get_posts_with_guid_like( $value ) {
552
  $this->query_vars['like']['guid'][] = $value;
553
 
554
+ if ( ! has_filter( 'posts_where', array( $this, 'filter_by_like' ) ) ) {
555
+ add_filter( 'posts_where', array( $this, 'filter_by_like' ), 10, 2 );
556
  }
557
  }
558
 
566
  public function to_get_posts_to_ping( $value ) {
567
  $this->query_vars['to_ping'] = $value;
568
 
569
+ if ( ! has_filter( 'posts_where', array( $this, 'filter_by_to_ping' ) ) ) {
570
+ add_filter( 'posts_where', array( $this, 'filter_by_to_ping' ), 10, 2 );
571
  }
572
  }
573
 
666
  $this->query_vars['where'][] = '(' . $where_clause . ')';
667
  }
668
 
669
+ if ( ! has_filter( 'posts_where', array( $this, 'filter_posts_where' ) ) ) {
670
+ add_filter( 'posts_where', array( $this, 'filter_posts_where' ), 10, 2 );
671
  }
672
  }
673
  }
690
  $this->query_vars['join'][] = $join_clause;
691
  }
692
 
693
+ if ( ! has_filter( 'posts_join', array( $this, 'filter_posts_join' ) ) ) {
694
+ add_filter( 'posts_join', array( $this, 'filter_posts_join' ), 10, 2 );
695
  }
696
  }
697
 
738
  $this->query_vars[ $orderby_key ][ $id ] = array_merge( $this->query_vars[ $orderby_key ][ $id ], $entries );
739
  }
740
 
741
+ if ( ! has_filter( 'posts_orderby', array( $this, 'filter_posts_orderby' ) ) ) {
742
+ add_filter( 'posts_orderby', array( $this, 'filter_posts_orderby' ), 10, 2 );
743
  }
744
  }
745
 
762
  $this->query_vars['fields'][] = $field;
763
  }
764
 
765
+ if ( ! has_filter( 'posts_fields', array( $this, 'filter_posts_fields' ) ) ) {
766
+ add_filter( 'posts_fields', array( $this, 'filter_posts_fields' ), 10, 2 );
767
  }
768
  }
769
 
795
 
796
  if ( $get_clean ) {
797
  $this->buffer_where_clauses = false;
798
+ $this->buffered_where_clauses = array();
799
  }
800
 
801
  return $clauses;
846
  global $wpdb;
847
 
848
  foreach ( $input as $string ) {
849
+ $buffer[] = is_array( $string ) ? $string : array( $string );
850
  }
851
 
852
  $buffer = array_unique( call_user_func_array( 'array_merge', $buffer ) );
1055
  * value, if the query is not the one attached to this filter or the method
1056
  * is called not in the context of the `posts_pre_query` filter;
1057
  */
1058
+ public function capture_request( $posts = null, WP_Query $query ) {
1059
  if ( ! doing_filter( 'posts_pre_query' ) ) {
1060
  // Let's make sure nothing bad happens if this runs outside of its natural context.
1061
  return null;
common/src/Tribe/Repository/Usage_Error.php CHANGED
@@ -75,23 +75,7 @@ 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 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 4.12.6
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
  /**
@@ -103,7 +87,7 @@ class Tribe__Repository__Usage_Error extends Exception {
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,7 +205,7 @@ class Tribe__Repository__Usage_Error extends Exception {
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
  /**
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
  /**
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
  * @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
  /**
common/src/Tribe/Rewrite.php CHANGED
@@ -47,15 +47,14 @@ class Tribe__Rewrite {
47
  *
48
  * @var array
49
  */
50
- public $rules = [];
51
 
52
  /**
53
  * Base slugs for rewrite urls
54
  *
55
  * @var array
56
  */
57
- public $bases = [];
58
-
59
  /**
60
  * After creating the Hooks on WordPress we lock the usage of the function.
61
  *
@@ -183,17 +182,17 @@ class Tribe__Rewrite {
183
  }
184
 
185
  protected function add_hooks() {
186
- add_filter( 'generate_rewrite_rules', [ $this, 'filter_generate' ] );
187
 
188
  // Remove percent Placeholders on all items
189
- add_filter( 'rewrite_rules_array', [ $this, 'remove_percent_placeholders' ], 25 );
190
 
191
  add_action( 'shutdown', [ $this, 'dump_cache' ] );
192
  }
193
 
194
  protected function remove_hooks() {
195
- remove_filter( 'generate_rewrite_rules', [ $this, 'filter_generate' ] );
196
- remove_filter( 'rewrite_rules_array', [ $this, 'remove_percent_placeholders' ], 25 );
197
 
198
  remove_action( 'shutdown', [ $this, 'dump_cache' ] );
199
  }
@@ -230,10 +229,10 @@ class Tribe__Rewrite {
230
  *
231
  * @return Tribe__Events__Rewrite
232
  */
233
- public function add( $regex, $args = [] ) {
234
  $regex = (array) $regex;
235
 
236
- $default = [];
237
  $args = array_filter( wp_parse_args( $args, $default ) );
238
 
239
  $url = add_query_arg( $args, 'index.php' );
@@ -246,7 +245,7 @@ class Tribe__Rewrite {
246
 
247
  // Add the Bases to the regex
248
  foreach ( $this->bases as $key => $value ) {
249
- $regex = str_replace( [ '{{ ' . $key . ' }}', '{{' . $key . '}}' ], $value, $regex );
250
  }
251
 
252
  // Apply the Preg Indexes to the URL
@@ -413,17 +412,6 @@ class Tribe__Rewrite {
413
  return $home_url;
414
  }
415
 
416
- // Passthru vars are additional salts for the cache that would render it useless: parse them here.
417
- $query = (string) parse_url( $url, PHP_URL_QUERY );
418
- wp_parse_str( $query, $query_vars );
419
- // Non-scalar value query vars should not be handled, but they should survive the resolution and not be cached.
420
- $scalar_query_vars = array_filter( $query_vars, 'is_scalar' );
421
- $passthru_vars = array_diff_key( $query_vars, $scalar_query_vars );
422
- // Remove the passthru query vars from the URL to match the correct cache.
423
- $url = remove_query_arg( array_keys( $passthru_vars ), $url );
424
- // Normalize the URL to make sure there's a trailing slash at the end of the path, before the query or fragment.
425
- $url = preg_replace( '~(?<!/)([?#])~', '/$1', $url );
426
-
427
  if ( ! $force ) {
428
  $this->warmup_cache(
429
  'canonical_url',
@@ -431,12 +419,15 @@ class Tribe__Rewrite {
431
  Listener::TRIGGER_GENERATE_REWRITE_RULES
432
  );
433
  if ( isset( $this->canonical_url_cache[ $url ] ) ) {
434
- // Re-apply passthru vars now, if any.
435
- return add_query_arg( $passthru_vars, $this->canonical_url_cache[ $url ] );
436
  }
437
  }
438
 
439
- $query_vars = array_intersect_key( $query_vars, $scalar_query_vars );
 
 
 
 
440
 
441
  if ( isset( $query_vars['paged'] ) && 1 === (int) $query_vars['paged'] ) {
442
  // Remove the `paged` query var if it's 1.
@@ -522,11 +513,6 @@ class Tribe__Rewrite {
522
  return '';
523
  }
524
 
525
- if ( isset( $localized_matcher['localized_slug'] ) ) {
526
- // If available, then return the localized slug instead of inferring it as we do below.
527
- return $localized_matcher['localized_slug'];
528
- }
529
-
530
  /*
531
  * We use `end` as, by default, the localized version of the slug in the current language will be at the
532
  * end of the array.
@@ -554,8 +540,7 @@ class Tribe__Rewrite {
554
  $replace
555
  );
556
 
557
- // Use case-insensitive replace to make sure to work with some decoding using uppercase escaped chars.
558
- $replaced = str_ireplace( array_keys( $replace ), $replace, $link_template );
559
 
560
  // Remove trailing chars.
561
  $path = rtrim( $replaced, '?$' );
@@ -599,9 +584,6 @@ class Tribe__Rewrite {
599
  $this->canonical_url_cache[ $url ] = $resolved;
600
  }
601
 
602
- // Re-apply passthru vars now, if any. After the caching to allow salting the cache key too much.
603
- $resolved = add_query_arg( $passthru_vars, $resolved );
604
-
605
  return $resolved;
606
  }
607
 
@@ -885,16 +867,10 @@ class Tribe__Rewrite {
885
  $perma_query_vars = [];
886
  $url_components = parse_url($url);
887
  $url_path = Arr::get( $url_components, 'path', '/' );
888
- $site_path = parse_url( home_url(), PHP_URL_PATH );
889
- if ( ! empty( $site_path ) && '/' !== $site_path ) {
890
- // The current site is in a sub-directory: the site path should be dropped from the request path.
891
- $url_path = str_replace( $site_path, '', $url_path );
892
- }
893
  $url_query = Arr::get( $url_components, 'query', '' );
894
  parse_str( $url_query, $url_query_vars );
895
  // Look for matches, removing leading `/` char.
896
- $request_match = ltrim( $url_path, '/' );
897
- $decoded_request_match = urldecode( $request_match );
898
 
899
  // Fetch the rewrite rules.
900
  $rewrite_rules = $this->rewrite->wp_rewrite_rules();
@@ -903,7 +879,7 @@ class Tribe__Rewrite {
903
  if ( ! empty( $rewrite_rules ) ) {
904
  foreach ( (array) $rewrite_rules as $match => $query ) {
905
  $matches_regex = preg_match( "#^$match#", $request_match, $matches )
906
- || preg_match( "#^$match#", $decoded_request_match, $matches );
907
 
908
  if ( ! $matches_regex ) {
909
  continue;
47
  *
48
  * @var array
49
  */
50
+ public $rules = array();
51
 
52
  /**
53
  * Base slugs for rewrite urls
54
  *
55
  * @var array
56
  */
57
+ public $bases = array();
 
58
  /**
59
  * After creating the Hooks on WordPress we lock the usage of the function.
60
  *
182
  }
183
 
184
  protected function add_hooks() {
185
+ add_filter( 'generate_rewrite_rules', array( $this, 'filter_generate' ) );
186
 
187
  // Remove percent Placeholders on all items
188
+ add_filter( 'rewrite_rules_array', array( $this, 'remove_percent_placeholders' ), 25 );
189
 
190
  add_action( 'shutdown', [ $this, 'dump_cache' ] );
191
  }
192
 
193
  protected function remove_hooks() {
194
+ remove_filter( 'generate_rewrite_rules', array( $this, 'filter_generate' ) );
195
+ remove_filter( 'rewrite_rules_array', array( $this, 'remove_percent_placeholders' ), 25 );
196
 
197
  remove_action( 'shutdown', [ $this, 'dump_cache' ] );
198
  }
229
  *
230
  * @return Tribe__Events__Rewrite
231
  */
232
+ public function add( $regex, $args = array() ) {
233
  $regex = (array) $regex;
234
 
235
+ $default = array();
236
  $args = array_filter( wp_parse_args( $args, $default ) );
237
 
238
  $url = add_query_arg( $args, 'index.php' );
245
 
246
  // Add the Bases to the regex
247
  foreach ( $this->bases as $key => $value ) {
248
+ $regex = str_replace( array( '{{ ' . $key . ' }}', '{{' . $key . '}}' ), $value, $regex );
249
  }
250
 
251
  // Apply the Preg Indexes to the URL
412
  return $home_url;
413
  }
414
 
 
 
 
 
 
 
 
 
 
 
 
415
  if ( ! $force ) {
416
  $this->warmup_cache(
417
  'canonical_url',
419
  Listener::TRIGGER_GENERATE_REWRITE_RULES
420
  );
421
  if ( isset( $this->canonical_url_cache[ $url ] ) ) {
422
+ return $this->canonical_url_cache[ $url ];
 
423
  }
424
  }
425
 
426
+ $query = (string) parse_url( $url, PHP_URL_QUERY );
427
+ wp_parse_str( $query, $query_vars );
428
+
429
+ // Drop any query var that is not a scalar; it should not be handled.
430
+ $query_vars = array_filter( $query_vars, 'is_scalar' );
431
 
432
  if ( isset( $query_vars['paged'] ) && 1 === (int) $query_vars['paged'] ) {
433
  // Remove the `paged` query var if it's 1.
513
  return '';
514
  }
515
 
 
 
 
 
 
516
  /*
517
  * We use `end` as, by default, the localized version of the slug in the current language will be at the
518
  * end of the array.
540
  $replace
541
  );
542
 
543
+ $replaced = str_replace( array_keys( $replace ), $replace, $link_template );
 
544
 
545
  // Remove trailing chars.
546
  $path = rtrim( $replaced, '?$' );
584
  $this->canonical_url_cache[ $url ] = $resolved;
585
  }
586
 
 
 
 
587
  return $resolved;
588
  }
589
 
867
  $perma_query_vars = [];
868
  $url_components = parse_url($url);
869
  $url_path = Arr::get( $url_components, 'path', '/' );
 
 
 
 
 
870
  $url_query = Arr::get( $url_components, 'query', '' );
871
  parse_str( $url_query, $url_query_vars );
872
  // Look for matches, removing leading `/` char.
873
+ $request_match = ltrim( $url_path, '/' );
 
874
 
875
  // Fetch the rewrite rules.
876
  $rewrite_rules = $this->rewrite->wp_rewrite_rules();
879
  if ( ! empty( $rewrite_rules ) ) {
880
  foreach ( (array) $rewrite_rules as $match => $query ) {
881
  $matches_regex = preg_match( "#^$match#", $request_match, $matches )
882
+ || preg_match( "#^$match#", urldecode( $request_match ), $matches );
883
 
884
  if ( ! $matches_regex ) {
885
  continue;
common/src/Tribe/Service_Providers/Body_Classes.php DELETED
@@ -1,86 +0,0 @@
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 4.12.6
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 4.12.6
20
- */
21
- public function register() {
22
- tribe_singleton( Body_Class_Object::class, Body_Class_Object::class );
23
- tribe_singleton( 'common.service_providers.body_classes', $this );
24
-
25
- /**
26
- * Allows plugins to hook into the register action to register views, etc.
27
- *
28
- * @since 4.12.6
29
- *
30
- * @param Tribe\Service_Providers\Dialog $dialog
31
- */
32
- do_action( 'tribe_body_classes_register', $this );
33
-
34
- $this->hooks();
35
- }
36
-
37
- /**
38
- * Set up hooks for classes.
39
- *
40
- * @since 4.12.6
41
- */
42
- private function hooks() {
43
- add_filter( 'body_class', [ $this, 'add_body_classes' ] );
44
- add_filter( 'admin_body_class', [ $this, 'add_admin_body_classes' ] );
45
-
46
- /**
47
- * Allows plugins to hook into the hooks action to register their own hooks.
48
- *
49
- * @since 4.12.6
50
- *
51
- * @param Tribe\Service_Providers\Dialog $dialog
52
- */
53
- do_action( 'tribe_body_classes_hooks', $this );
54
- }
55
-
56
- /**
57
- * Hook in and add FE body classes.
58
- *
59
- * @since 4.12.6
60
- *
61
- * @param array $classes An array of body class names.
62
- * @return array The modified array of body class names.
63
- */
64
- public function add_body_classes( $classes = [] ) {
65
- /** @var Body_Class_Object $body_classes */
66
- $body_classes = tribe( Body_Class_Object::class );
67
-
68
- return $body_classes->add_body_classes( $classes );
69
- }
70
-
71
- /**
72
- * Hook in and add admin body classes.
73
- *
74
- * @since 4.12.6
75
- *
76
- * @param array $classes An array of body class names.
77
- * @return array The modified array of body class names.
78
- */
79
- public function add_admin_body_classes( $classes = [] ) {
80
- /** @var Body_Class_Object $body_classes */
81
- $body_classes = tribe( Body_Class_Object::class );
82
-
83
- return $body_classes->add_admin_body_classes( $classes );
84
- }
85
-
86
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Service_Providers/Crons.php DELETED
@@ -1,37 +0,0 @@
1
- <?php
2
- /**
3
- * Handles common cron functions.
4
- *
5
- * @since 4.12.6
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 4.12.6
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 4.12.6
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/Service_Providers/Debug_Bar.php CHANGED
@@ -12,11 +12,11 @@ class Tribe__Service_Providers__Debug_Bar extends tad_DI52_ServiceProvider {
12
  * Binds and sets up implementations.
13
  */
14
  public function register() {
15
- add_filter( 'debug_bar_panels', [ $this, 'add_panels' ] );
16
  }
17
 
18
  /**
19
- * Adds The Events Calendar panels to the Debug Bar panels.
20
  *
21
  * @since 4.9.5
22
  *
@@ -26,17 +26,17 @@ class Tribe__Service_Providers__Debug_Bar extends tad_DI52_ServiceProvider {
26
  */
27
  public function add_panels( array $panels ) {
28
  /**
29
- * Filters the list of The Events Calendar debug bar panels that will be added to the
30
  * Debug Bar.
31
  *
32
  * @since 4.9.5
33
  *
34
- * @param Debug_Bar_Panel[] The default list of The Events Calendar panels added to the Debug Bar.
35
  */
36
- $tribe_panels = apply_filters( 'tribe_debug_bar_panels', [
37
  new Tribe__Debug_Bar__Panels__Context(),
38
  new Tribe__Debug_Bar__Panels__Json_Ld(),
39
- ] );
40
 
41
  if ( count( $tribe_panels ) > 0 ) {
42
  $panels = array_merge( $panels, $tribe_panels );
12
  * Binds and sets up implementations.
13
  */
14
  public function register() {
15
+ add_filter( 'debug_bar_panels', array( $this, 'add_panels' ) );
16
  }
17
 
18
  /**
19
+ * Adds Modern Tribe panels to the Debug Bar panels.
20
  *
21
  * @since 4.9.5
22
  *
26
  */
27
  public function add_panels( array $panels ) {
28
  /**
29
+ * Filters the list of Modern Tribe debug bar panels that will be added to the
30
  * Debug Bar.
31
  *
32
  * @since 4.9.5
33
  *
34
+ * @param Debug_Bar_Panel[] The default list of Modern Tribe panels added to the Debug Bar.
35
  */
36
+ $tribe_panels = apply_filters( 'tribe_debug_bar_panels', array(
37
  new Tribe__Debug_Bar__Panels__Context(),
38
  new Tribe__Debug_Bar__Panels__Json_Ld(),
39
+ ) );
40
 
41
  if ( count( $tribe_panels ) > 0 ) {
42
  $panels = array_merge( $panels, $tribe_panels );
common/src/Tribe/Service_Providers/Dialog.php CHANGED
@@ -83,7 +83,7 @@ class Dialog extends \tad_DI52_ServiceProvider {
83
  tribe_asset(
84
  $main,
85
  'mt-a11y-dialog',
86
- 'node_modules/mt-a11y-dialog/a11y-dialog.js',
87
  [ 'underscore', 'tribe-common' ],
88
  [],
89
  [ 'groups' => 'tribe-dialog' ]
83
  tribe_asset(
84
  $main,
85
  'mt-a11y-dialog',
86
+ 'vendor/faction23/a11y-dialog/a11y-dialog.js',
87
  [ 'underscore', 'tribe-common' ],
88
  [],
89
  [ 'groups' => 'tribe-dialog' ]
common/src/Tribe/Service_Providers/Processes.php CHANGED
@@ -69,10 +69,10 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
69
  */
70
  protected function hook_handler_for( $action ) {
71
  if ( null === $this->handler_actions ) {
72
- $handlers = [
73
  'Tribe__Process__Tester',
74
  'Tribe__Process__Post_Thumbnail_Setter',
75
- ];
76
 
77
  /**
78
  * Filters the process handler classes the Service Provider should handle.
@@ -87,7 +87,7 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
87
 
88
  $this->handler_actions = array_combine(
89
  $handlers,
90
- array_map( [ $this, 'get_handler_action' ], $handlers )
91
  );
92
  }
93
 
@@ -110,9 +110,9 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
110
  */
111
  protected function hook_queue_for( $action ) {
112
  if ( null === $this->queue_actions ) {
113
- $queues = [
114
  'Tribe__Promise',
115
- ];
116
 
117
  /**
118
  * Filters the queue processing classes the Service Provider should handle.
@@ -127,7 +127,7 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
127
 
128
  $all_queues_actions = array_combine(
129
  $queues,
130
- array_map( [ $this, 'get_queue_action' ], $queues )
131
  );
132
  }
133
 
@@ -152,7 +152,7 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
152
  */
153
  protected function get_handler_action( $handler_class ) {
154
  /** @var Tribe__Process__Handler handler_class */
155
- return 'tribe_process_' . call_user_func( [ $handler_class, 'action' ] );
156
  }
157
 
158
  /**
@@ -166,7 +166,7 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
166
  */
167
  protected function get_queue_action( $queue_class ) {
168
  /** @var Tribe__Process__Queue queue_class */
169
- return 'tribe_queue_' . call_user_func( [ $queue_class, 'action' ] );
170
  }
171
 
172
  /**
@@ -201,7 +201,7 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
201
  * Here we parse the scheduled cron events to get those scheduled by a queue
202
  * or process handler.
203
  */
204
- $hooks = $this->get_scheduled_like( [ 'tribe_process_', 'tribe_queue_' ] );
205
 
206
  if ( empty( $hooks ) ) {
207
  return;
@@ -254,11 +254,11 @@ class Tribe__Service_Providers__Processes extends tad_DI52_ServiceProvider {
254
  $cron = get_option( 'cron', false );
255
 
256
  if ( empty( $cron ) ) {
257
- return [];
258
  }
259
 
260
  $needles = (array) $needles;
261
- $matching = [];
262
 
263
  foreach ( $cron as $time ) {
264
  if ( ! is_array( $time ) ) {
69
  */
70
  protected function hook_handler_for( $action ) {
71
  if ( null === $this->handler_actions ) {
72
+ $handlers = array(
73
  'Tribe__Process__Tester',
74
  'Tribe__Process__Post_Thumbnail_Setter',
75
+ );
76
 
77
  /**
78
  * Filters the process handler classes the Service Provider should handle.
87
 
88
  $this->handler_actions = array_combine(
89
  $handlers,
90
+ array_map( array( $this, 'get_handler_action' ), $handlers )
91
  );
92
  }
93
 
110
  */
111
  protected function hook_queue_for( $action ) {
112
  if ( null === $this->queue_actions ) {
113
+ $queues = array(
114
  'Tribe__Promise',
115
+ );
116
 
117
  /**
118
  * Filters the queue processing classes the Service Provider should handle.
127
 
128
  $all_queues_actions = array_combine(
129
  $queues,
130
+ array_map( array( $this, 'get_queue_action' ), $queues )
131
  );
132
  }
133
 
152
  */
153
  protected function get_handler_action( $handler_class ) {
154
  /** @var Tribe__Process__Handler handler_class */
155
+ return 'tribe_process_' . call_user_func( array( $handler_class, 'action' ) );
156
  }
157
 
158
  /**
166
  */
167
  protected function get_queue_action( $queue_class ) {
168
  /** @var Tribe__Process__Queue queue_class */
169
+ return 'tribe_queue_' . call_user_func( array( $queue_class, 'action' ) );
170
  }
171
 
172
  /**
201
  * Here we parse the scheduled cron events to get those scheduled by a queue
202
  * or process handler.
203
  */
204
+ $hooks = $this->get_scheduled_like( array( 'tribe_process_', 'tribe_queue_' ) );
205
 
206
  if ( empty( $hooks ) ) {
207
  return;
254
  $cron = get_option( 'cron', false );
255
 
256
  if ( empty( $cron ) ) {
257
+ return array();
258
  }
259
 
260
  $needles = (array) $needles;
261
+ $matching = array();
262
 
263
  foreach ( $cron as $time ) {
264
  if ( ! is_array( $time ) ) {
common/src/Tribe/Service_Providers/Promoter.php CHANGED
@@ -14,7 +14,7 @@ class Tribe__Service_Providers__Promoter extends tad_DI52_ServiceProvider {
14
  */
15
  public function register() {
16
  tribe_singleton( 'promoter.auth', 'Tribe__Promoter__Auth' );
17
- tribe_singleton( 'promoter.pue', 'Tribe__Promoter__PUE', [ 'load' ] );
18
  tribe_singleton( 'promoter.view', 'Tribe__Promoter__View' );
19
 
20
  $this->hook();
@@ -27,20 +27,16 @@ class Tribe__Service_Providers__Promoter extends tad_DI52_ServiceProvider {
27
  add_action( 'template_redirect', tribe_callback( 'promoter.view', 'display_auth_check_view' ), 10, 0 );
28
  add_action( 'init', tribe_callback( 'promoter.view', 'add_rewrites' ) );
29
 
30
- /** @var Tribe__Promoter__PUE $pue */
31
- $pue = tribe( 'promoter.pue' );
32
 
33
- // Only add the setting if a promoter key is present.
34
- if ( $pue->has_license_key() ) {
35
- add_action(
36
- 'init',
37
- tribe_callback( 'promoter.auth', 'register_setting' )
38
- );
39
- }
40
 
41
  // The usage of a high priority so we can push the icon to the end
42
- add_action( 'admin_bar_menu', [ $this, 'add_promoter_logo_on_admin_bar' ], 1000 );
43
- add_action( 'tribe_common_loaded', [ $this, 'add_promoter_assets' ] );
44
  }
45
 
46
  /**
@@ -60,7 +56,7 @@ class Tribe__Service_Providers__Promoter extends tad_DI52_ServiceProvider {
60
  * It uses and inline SVG as will provider more flexibility for styling so we can change
61
  * the fill of the path property of the SVG so we can match the WP installations.
62
  */
63
- $args = [
64
  'id' => 'promoter-admin-bar',
65
  'title' => sprintf(
66
  "<span class='promoter-admin-bar__icon'>%s</span><span class='promoter-admin-bar__text'>%s</span>",
@@ -68,11 +64,11 @@ class Tribe__Service_Providers__Promoter extends tad_DI52_ServiceProvider {
68
  'Promoter'
69
  ),
70
  'href' => 'https://promoter.theeventscalendar.com/',
71
- 'meta' => [
72
  'target' => '_blank',
73
  'class' => 'promoter-admin-bar-link',
74
- ],
75
- ];
76
  $wp_admin_bar->add_node( $args );
77
  }
78
 
@@ -86,11 +82,11 @@ class Tribe__Service_Providers__Promoter extends tad_DI52_ServiceProvider {
86
  Tribe__Main::instance(),
87
  'promoter',
88
  'promoter.css',
89
- [],
90
- [ 'wp_enqueue_scripts', 'admin_enqueue_scripts' ],
91
- [
92
- 'conditionals' => [ $this, 'should_load_promoter_styles' ],
93
- ]
94
  );
95
  }
96
 
14
  */
15
  public function register() {
16
  tribe_singleton( 'promoter.auth', 'Tribe__Promoter__Auth' );
17
+ tribe_singleton( 'promoter.pue', 'Tribe__Promoter__PUE', array( 'load' ) );
18
  tribe_singleton( 'promoter.view', 'Tribe__Promoter__View' );
19
 
20
  $this->hook();
27
  add_action( 'template_redirect', tribe_callback( 'promoter.view', 'display_auth_check_view' ), 10, 0 );
28
  add_action( 'init', tribe_callback( 'promoter.view', 'add_rewrites' ) );
29
 
30
+ tribe( 'promoter.pue' );
 
31
 
32
+ add_filter(
33
+ 'tribe_promoter_secret_key',
34
+ tribe_callback( 'promoter.auth', 'filter_promoter_secret_key' )
35
+ );
 
 
 
36
 
37
  // The usage of a high priority so we can push the icon to the end
38
+ add_action( 'admin_bar_menu', array( $this, 'add_promoter_logo_on_admin_bar' ), 1000 );
39
+ add_action( 'tribe_common_loaded', array( $this, 'add_promoter_assets' ) );
40
  }
41
 
42
  /**
56
  * It uses and inline SVG as will provider more flexibility for styling so we can change
57
  * the fill of the path property of the SVG so we can match the WP installations.
58
  */
59
+ $args = array(
60
  'id' => 'promoter-admin-bar',
61
  'title' => sprintf(
62
  "<span class='promoter-admin-bar__icon'>%s</span><span class='promoter-admin-bar__text'>%s</span>",
64
  'Promoter'
65
  ),
66
  'href' => 'https://promoter.theeventscalendar.com/',
67
+ 'meta' => array(
68
  'target' => '_blank',
69
  'class' => 'promoter-admin-bar-link',
70
+ ),
71
+ );
72
  $wp_admin_bar->add_node( $args );
73
  }
74
 
82
  Tribe__Main::instance(),
83
  'promoter',
84
  'promoter.css',
85
+ array(),
86
+ array( 'wp_enqueue_scripts', 'admin_enqueue_scripts' ),
87
+ array(
88
+ 'conditionals' => array( $this, 'should_load_promoter_styles' ),
89
+ )
90
  );
91
  }
92
 
common/src/Tribe/Service_Providers/Shortcodes.php CHANGED
@@ -18,23 +18,16 @@ class Shortcodes extends \tad_DI52_ServiceProvider {
18
  * @since 4.12.0
19
  */
20
  public function register() {
21
- if ( ! static::is_active() ) {
22
  return;
23
  }
24
 
25
  $this->container->singleton( Manager::class, Manager::class );
26
- $this->container->singleton(
27
- 'shortcode.manager',
28
- function() {
29
- return $this->container->make( Manager::class );
30
- }
31
- );
32
 
33
  $this->register_hooks();
34
  $this->register_assets();
35
 
36
  $this->container->singleton( static::class, $this );
37
-
38
  }
39
 
40
  /**
@@ -71,8 +64,6 @@ class Shortcodes extends \tad_DI52_ServiceProvider {
71
  */
72
  protected function register_hooks() {
73
  add_action( 'init', [ $this, 'action_add_shortcodes' ], 20 );
74
- add_filter( 'pre_do_shortcode_tag', [ $this, 'filter_pre_do_shortcode_tag' ], 10, 4 );
75
- add_filter( 'do_shortcode_tag', [ $this, 'filter_do_shortcode_tag' ], 10, 4 );
76
  }
77
 
78
  /**
@@ -86,36 +77,4 @@ class Shortcodes extends \tad_DI52_ServiceProvider {
86
  public function action_add_shortcodes() {
87
  $this->container->make( Manager::class )->add_shortcodes();
88
  }
89
-
90
- /**
91
- * Filters `pre_do_shortcode_tag` to mark that a tribe shortcode is currently being done.
92
- *
93
- * @since 4.12.9
94
- *
95
- * @param bool|string $return Short-circuit return value. Either false or the value to replace the shortcode with.
96
- * @param string $tag Shortcode name.
97
- * @param array $attr Shortcode attributes array,
98
- * @param array $m Regular expression match array.
99
- *
100
- * @return bool|string Short-circuit return value.
101
- */
102
- public function filter_pre_do_shortcode_tag( $false, $tag, $attr, $m ) {
103
- return $this->container->make( Manager::class )->filter_pre_do_shortcode_tag( $false, $tag, $attr, $m );
104
- }
105
-
106
- /**
107
- * * Filters `do_shortcode_tag` to mark that a tribe shortcode is complete, and remove it from the current list.
108
- *
109
- * @since 4.12.9
110
- *
111
- * @param string $output Shortcode output.
112
- * @param string $tag Shortcode name.
113
- * @param array|string $attr Shortcode attributes array or empty string.
114
- * @param array $m Regular expression match array.
115
- *
116
- * @return string Shortcode output.
117
- */
118
- public function filter_do_shortcode_tag( $output, $tag, $attr, $m ) {
119
- return $this->container->make( Manager::class )->filter_do_shortcode_tag( $output, $tag, $attr, $m );
120
- }
121
- }
18
  * @since 4.12.0
19
  */
20
  public function register() {
21
+ if ( static::is_active() ) {
22
  return;
23
  }
24
 
25
  $this->container->singleton( Manager::class, Manager::class );
 
 
 
 
 
 
26
 
27
  $this->register_hooks();
28
  $this->register_assets();
29
 
30
  $this->container->singleton( static::class, $this );
 
31
  }
32
 
33
  /**
64
  */
65
  protected function register_hooks() {
66
  add_action( 'init', [ $this, 'action_add_shortcodes' ], 20 );
 
 
67
  }
68
 
69
  /**
77
  public function action_add_shortcodes() {
78
  $this->container->make( Manager::class )->add_shortcodes();
79
  }
80
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Service_Providers/Widgets.php DELETED
@@ -1,77 +0,0 @@
1
- <?php
2
- namespace Tribe\Service_Providers;
3
-
4
- use Tribe\Widget\Manager;
5
-
6
- /**
7
- * Class Widget
8
- *
9
- * @since 4.12.12
10
- *
11
- * @package Tribe\Service_Providers
12
- */
13
- class Widgets extends \tad_DI52_ServiceProvider {
14
-
15
- /**
16
- * Binds and sets up implementations.
17
- *
18
- * @since 4.12.12
19
- */
20
- public function register() {
21
- if ( ! static::is_active() ) {
22
- return;
23
- }
24
-
25
- $this->container->singleton( Manager::class, Manager::class );
26
- $this->container->singleton(
27
- 'widget.manager',
28
- function() {
29
- return $this->container->make( Manager::class );
30
- }
31
- );
32
-
33
- $this->register_hooks();
34
-
35
- $this->container->singleton( static::class, $this );
36
- $this->container->singleton( 'widgets', $this );
37
- }
38
-
39
- /**
40
- * Static method wrapper around a filter to allow full deactivation of this provider.
41
- *
42
- * @since 4.12.12
43
- *
44
- * @return boolean If this service provider is active.
45
- */
46
- public static function is_active() {
47
- /**
48
- * Allows filtering to prevent all Tribe widgets from loading.
49
- *
50
- * @since 4.12.12
51
- *
52
- * @param boolean $is_active If widgets should be loaded or not.
53
- */
54
- return apply_filters( 'tribe_widgets_is_active', true );
55
- }
56
-
57
- /**
58
- * Registers the provider handling all the 1st level filters and actions for this service provider.
59
- *
60
- * @since 4.12.12
61
- */
62
- protected function register_hooks() {
63
- add_action( 'widgets_init', [ $this, 'register_widgets_with_wp' ], 20 );
64
- }
65
-
66
- /**
67
- * Adds the new widgets.
68
- *
69
- * This triggers on `init@P20` due to how v1 is added on `init@P10` and removed on `init@P15`,
70
- * as it's important to leave gaps on priority for future flexibility.
71
- *
72
- * @since 4.12.12
73
- */
74
- public function register_widgets_with_wp() {
75
- $this->container->make( Manager::class )->register_widgets_with_wp();
76
- }
77
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Settings.php CHANGED
@@ -140,22 +140,22 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
140
  * An array defining the suite root plugins.
141
  * @var array
142
  */
143
- protected $root_plugins = [
144
  'the-events-calendar/the-events-calendar.php',
145
  'event-tickets/event-ticket.php',
146
- ];
147
 
148
  /**
149
  * An associative array in the form [ <tab-slug> => array(...<fields>) ]
150
  * @var array
151
  */
152
- protected $fields_for_save = [];
153
 
154
  /**
155
  * An array that contains the fields that are currently being validated.
156
  * @var array
157
  */
158
- protected $current_fields = [];
159
 
160
  /**
161
  * Static Singleton Factory Method
@@ -178,10 +178,10 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
178
  $this->requiredCap = apply_filters( 'tribe_settings_req_cap', 'manage_options' );
179
  $this->adminSlug = apply_filters( 'tribe_settings_admin_slug', 'tribe-common' );
180
  $this->help_slug = apply_filters( 'tribe_settings_help_slug', 'tribe-common-help' );
181
- $this->errors = get_option( 'tribe_settings_errors', [] );
182
  $this->major_error = get_option( 'tribe_settings_major_error', false );
183
- $this->sent_data = get_option( 'tribe_settings_sent_data', [] );
184
- $this->validated = [];
185
  $this->defaultTab = null;
186
  $this->currentTab = null;
187
 
@@ -193,11 +193,11 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
193
  */
194
  public function hook() {
195
  // run actions & filters
196
- add_action( 'admin_menu', [ $this, 'addPage' ] );
197
- add_action( 'network_admin_menu', [ $this, 'addNetworkPage' ] );
198
- add_action( 'admin_init', [ $this, 'initTabs' ] );
199
- add_action( 'tribe_settings_below_tabs', [ $this, 'displayErrors' ] );
200
- add_action( 'tribe_settings_below_tabs', [ $this, 'displaySuccess' ] );
201
  }
202
 
203
  /**
@@ -254,7 +254,7 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
254
  esc_html__( 'Settings', 'tribe-common' ),
255
  $this->requiredCap,
256
  self::$parent_slug,
257
- [ $this, 'generatePage' ]
258
  );
259
  }
260
  }
@@ -270,10 +270,10 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
270
  }
271
 
272
  $this->admin_page = add_submenu_page(
273
- 'settings.php', esc_html__( 'Events Settings', 'tribe-common' ), esc_html__( 'Events Settings', 'tribe-common' ), $this->requiredCap, $this->adminSlug, [
274
  $this,
275
  'generatePage',
276
- ]
277
  );
278
 
279
  $this->admin_page = add_submenu_page(
@@ -282,10 +282,10 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
282
  esc_html__( 'Events Help', 'tribe-common' ),
283
  $this->requiredCap,
284
  $this->help_slug,
285
- [
286
  tribe( 'settings.manager' ),
287
  'do_help_tab',
288
- ]
289
  );
290
  }
291
 
@@ -440,7 +440,7 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
440
 
441
  // bail if we have errors
442
  if ( count( $this->errors ) ) {
443
- remove_action( 'shutdown', [ $this, 'deleteOptions' ] );
444
  add_option( 'tribe_settings_errors', $this->errors );
445
  add_option( 'tribe_settings_major_error', $this->major_error );
446
  wp_redirect( $this->url );
@@ -488,8 +488,8 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
488
 
489
  // do not generate errors for dependent fields that should not show
490
  if ( ! empty( $this->errors ) ) {
491
- $keep = array_filter( array_keys( $this->errors ), [ $this, 'dependency_checks' ] );
492
- $compare = empty( $keep ) ? [] : array_combine( $keep, $keep );
493
  $this->errors = array_intersect_key( $this->errors, $compare );
494
  }
495
 
@@ -512,7 +512,7 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
512
  do_action( 'tribe_settings_save_tab_' . $this->currentTab );
513
 
514
  // we'll need this later
515
- $parent_options = [];
516
 
517
  /**
518
  * loop through each validated option and either
@@ -588,11 +588,11 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
588
 
589
  do_action( 'tribe_settings_after_save' );
590
  do_action( 'tribe_settings_after_save_' . $this->currentTab );
591
- remove_action( 'shutdown', [ $this, 'deleteOptions' ] );
592
  add_option( 'tribe_settings_sent_data', $_POST );
593
  add_option( 'tribe_settings_errors', $this->errors );
594
  add_option( 'tribe_settings_major_error', $this->major_error );
595
- wp_redirect( esc_url_raw( add_query_arg( [ 'saved' => true ], $this->url ) ) );
596
  exit;
597
  }
598
 
@@ -669,11 +669,11 @@ if ( ! class_exists( 'Tribe__Settings' ) ) {
669
  *
670
  * @return string
671
  */
672
- public function get_url( array $args = [] ) {
673
- $defaults = [
674
- 'page' => $this->adminSlug,
675
  'parent' => self::$parent_page,
676
- ];
677
 
678
  // Allow the link to be "changed" on the fly
679
  $args = wp_parse_args( $args, $defaults );
140
  * An array defining the suite root plugins.
141
  * @var array
142
  */
143
+ protected $root_plugins = array(
144
  'the-events-calendar/the-events-calendar.php',
145
  'event-tickets/event-ticket.php',
146
+ );
147
 
148
  /**
149
  * An associative array in the form [ <tab-slug> => array(...<fields>) ]
150
  * @var array
151
  */
152
+ protected $fields_for_save = array();
153
 
154
  /**
155
  * An array that contains the fields that are currently being validated.
156
  * @var array
157
  */
158
+ protected $current_fields = array();
159
 
160
  /**
161
  * Static Singleton Factory Method
178
  $this->requiredCap = apply_filters( 'tribe_settings_req_cap', 'manage_options' );
179
  $this->adminSlug = apply_filters( 'tribe_settings_admin_slug', 'tribe-common' );
180
  $this->help_slug = apply_filters( 'tribe_settings_help_slug', 'tribe-common-help' );
181
+ $this->errors = get_option( 'tribe_settings_errors', array() );
182
  $this->major_error = get_option( 'tribe_settings_major_error', false );
183
+ $this->sent_data = get_option( 'tribe_settings_sent_data', array() );
184
+ $this->validated = array();
185
  $this->defaultTab = null;
186
  $this->currentTab = null;
187
 
193
  */
194
  public function hook() {
195
  // run actions & filters
196
+ add_action( 'admin_menu', array( $this, 'addPage' ) );
197
+ add_action( 'network_admin_menu', array( $this, 'addNetworkPage' ) );
198
+ add_action( 'admin_init', array( $this, 'initTabs' ) );
199
+ add_action( 'tribe_settings_below_tabs', array( $this, 'displayErrors' ) );
200
+ add_action( 'tribe_settings_below_tabs', array( $this, 'displaySuccess' ) );
201
  }
202
 
203
  /**
254
  esc_html__( 'Settings', 'tribe-common' ),
255
  $this->requiredCap,
256
  self::$parent_slug,
257
+ array( $this, 'generatePage' )
258
  );
259
  }
260
  }
270
  }
271
 
272
  $this->admin_page = add_submenu_page(
273
+ 'settings.php', esc_html__( 'Events Settings', 'tribe-common' ), esc_html__( 'Events Settings', 'tribe-common' ), $this->requiredCap, $this->adminSlug, array(
274
  $this,
275
  'generatePage',
276
+ )
277
  );
278
 
279
  $this->admin_page = add_submenu_page(
282
  esc_html__( 'Events Help', 'tribe-common' ),
283
  $this->requiredCap,
284
  $this->help_slug,
285
+ array(
286
  tribe( 'settings.manager' ),
287
  'do_help_tab',
288
+ )
289
  );
290
  }
291
 
440
 
441
  // bail if we have errors
442
  if ( count( $this->errors ) ) {
443
+ remove_action( 'shutdown', array( $this, 'deleteOptions' ) );
444
  add_option( 'tribe_settings_errors', $this->errors );
445
  add_option( 'tribe_settings_major_error', $this->major_error );
446
  wp_redirect( $this->url );
488
 
489
  // do not generate errors for dependent fields that should not show
490
  if ( ! empty( $this->errors ) ) {
491
+ $keep = array_filter( array_keys( $this->errors ), array( $this, 'dependency_checks' ) );
492
+ $compare = empty( $keep ) ? array() : array_combine( $keep, $keep );
493
  $this->errors = array_intersect_key( $this->errors, $compare );
494
  }
495
 
512
  do_action( 'tribe_settings_save_tab_' . $this->currentTab );
513
 
514
  // we'll need this later
515
+ $parent_options = array();
516
 
517
  /**
518
  * loop through each validated option and either
588
 
589
  do_action( 'tribe_settings_after_save' );
590
  do_action( 'tribe_settings_after_save_' . $this->currentTab );
591
+ remove_action( 'shutdown', array( $this, 'deleteOptions' ) );
592
  add_option( 'tribe_settings_sent_data', $_POST );
593
  add_option( 'tribe_settings_errors', $this->errors );
594
  add_option( 'tribe_settings_major_error', $this->major_error );
595
+ wp_redirect( esc_url_raw( add_query_arg( array( 'saved' => true ), $this->url ) ) );
596
  exit;
597
  }
598
 
669
  *
670
  * @return string
671
  */
672
+ public function get_url( array $args = array() ) {
673
+ $defaults = array(
674
+ 'page' => $this->adminSlug,
675
  'parent' => self::$parent_page,
676
+ );
677
 
678
  // Allow the link to be "changed" on the fly
679
  $args = wp_parse_args( $args, $defaults );
common/src/Tribe/Settings_Manager.php CHANGED
@@ -13,7 +13,7 @@ class Tribe__Settings_Manager {
13
 
14
  // Load multisite defaults
15
  if ( is_multisite() ) {
16
- $tribe_events_mu_defaults = [];
17
  if ( file_exists( WP_CONTENT_DIR . '/tribe-events-mu-defaults.php' ) ) {
18
  require_once WP_CONTENT_DIR . '/tribe-events-mu-defaults.php';
19
  }
@@ -23,13 +23,13 @@ class Tribe__Settings_Manager {
23
 
24
  public function add_hooks() {
25
  // option pages
26
- add_action( '_network_admin_menu', [ $this, 'init_options' ] );
27
- add_action( '_admin_menu', [ $this, 'init_options' ] );
28
 
29
- add_action( 'admin_menu', [ $this, 'add_help_admin_menu_item' ], 50 );
30
- add_action( 'tribe_settings_do_tabs', [ $this, 'do_setting_tabs' ] );
31
- add_action( 'tribe_settings_do_tabs', [ $this, 'do_network_settings_tab' ], 400 );
32
- add_action( 'tribe_settings_validate_tab_network', [ $this, 'save_all_tabs_hidden' ] );
33
  add_action( 'updated_option', [ $this, 'update_options_cache' ], 10, 3 );
34
  }
35
 
@@ -171,7 +171,7 @@ class Tribe__Settings_Manager {
171
  */
172
  public static function get_network_options() {
173
  if ( ! isset( self::$network_options ) ) {
174
- $options = get_site_option( Tribe__Main::OPTIONNAMENETWORK, [] );
175
  self::$network_options = apply_filters( 'tribe_get_network_options', $options );
176
  }
177
 
@@ -216,11 +216,11 @@ class Tribe__Settings_Manager {
216
  if ( ! is_array( $options ) ) {
217
  return;
218
  }
219
-
220
  if ( $apply_filters == true ) {
221
  $options = apply_filters( 'tribe-events-save-network-options', $options );
222
  }
223
 
 
224
  if ( update_site_option( Tribe__Main::OPTIONNAMENETWORK, $options ) ) {
225
  self::$network_options = apply_filters( 'tribe_get_network_options', $options );
226
  } else {
@@ -236,15 +236,10 @@ class Tribe__Settings_Manager {
236
  public static function add_network_options_page() {
237
  $tribe_settings = Tribe__Settings::instance();
238
  add_submenu_page(
239
- 'settings.php',
240
- $tribe_settings->menuName,
241
- $tribe_settings->menuName,
242
- 'manage_network_options',
243
- 'tribe-common',
244
- [
245
  $tribe_settings,
246
  'generatePage',
247
- ]
248
  );
249
  }
250
 
@@ -290,11 +285,11 @@ class Tribe__Settings_Manager {
290
  */
291
  $license_fields = apply_filters( 'tribe_license_fields', $licenses_tab );
292
 
293
- new Tribe__Settings_Tab( 'licenses', esc_html__( 'Licenses', 'tribe-common' ), [
294
  'priority' => '40',
295
  'fields' => $license_fields,
296
  'network_admin' => is_network_admin() ? true : false,
297
- ] );
298
  }
299
 
300
  /**
@@ -314,7 +309,7 @@ class Tribe__Settings_Manager {
314
  * @todo move to an admin class
315
  */
316
  public function add_help_admin_menu_item() {
317
- $hidden_settings_tabs = self::get_network_option( 'hideSettingsTabs', [] );
318
  if ( in_array( 'help', $hidden_settings_tabs ) ) {
319
  return;
320
  }
@@ -323,7 +318,7 @@ class Tribe__Settings_Manager {
323
  $title = esc_html__( 'Help', 'tribe-common' );
324
  $slug = 'tribe-help';
325
 
326
- add_submenu_page( $parent, $title, $title, 'manage_options', $slug, [ $this, 'do_help_tab' ] );
327
  }
328
 
329
  /**
@@ -332,8 +327,7 @@ class Tribe__Settings_Manager {
332
  * @return bool
333
  */
334
  protected function have_addons() {
335
- $addons = apply_filters( 'tribe_licensable_addons', [] );
336
-
337
  return ! empty( $addons );
338
  }
339
 
@@ -343,7 +337,7 @@ class Tribe__Settings_Manager {
343
  * @return void
344
  */
345
  public function save_all_tabs_hidden() {
346
- $all_tabs_keys = array_keys( apply_filters( 'tribe_settings_all_tabs', [] ) );
347
 
348
  $network_options = (array) get_site_option( Tribe__Main::OPTIONNAMENETWORK );
349
 
13
 
14
  // Load multisite defaults
15
  if ( is_multisite() ) {
16
+ $tribe_events_mu_defaults = array();
17
  if ( file_exists( WP_CONTENT_DIR . '/tribe-events-mu-defaults.php' ) ) {
18
  require_once WP_CONTENT_DIR . '/tribe-events-mu-defaults.php';
19
  }
23
 
24
  public function add_hooks() {
25
  // option pages
26
+ add_action( '_network_admin_menu', array( $this, 'init_options' ) );
27
+ add_action( '_admin_menu', array( $this, 'init_options' ) );
28
 
29
+ add_action( 'admin_menu', array( $this, 'add_help_admin_menu_item' ), 50 );
30
+ add_action( 'tribe_settings_do_tabs', array( $this, 'do_setting_tabs' ) );
31
+ add_action( 'tribe_settings_do_tabs', array( $this, 'do_network_settings_tab' ), 400 );
32
+ add_action( 'tribe_settings_validate_tab_network', array( $this, 'save_all_tabs_hidden' ) );
33
  add_action( 'updated_option', [ $this, 'update_options_cache' ], 10, 3 );
34
  }
35
 
171
  */
172
  public static function get_network_options() {
173
  if ( ! isset( self::$network_options ) ) {
174
+ $options = get_site_option( Tribe__Main::OPTIONNAMENETWORK, array() );
175
  self::$network_options = apply_filters( 'tribe_get_network_options', $options );
176
  }
177
 
216
  if ( ! is_array( $options ) ) {
217
  return;
218
  }
 
219
  if ( $apply_filters == true ) {
220
  $options = apply_filters( 'tribe-events-save-network-options', $options );
221
  }
222
 
223
+ // @TODO use getNetworkOptions + force
224
  if ( update_site_option( Tribe__Main::OPTIONNAMENETWORK, $options ) ) {
225
  self::$network_options = apply_filters( 'tribe_get_network_options', $options );
226
  } else {
236
  public static function add_network_options_page() {
237
  $tribe_settings = Tribe__Settings::instance();
238
  add_submenu_page(
239
+ 'settings.php', $tribe_settings->menuName, $tribe_settings->menuName, 'manage_network_options', 'tribe-common', array(
 
 
 
 
 
240
  $tribe_settings,
241
  'generatePage',
242
+ )
243
  );
244
  }
245
 
285
  */
286
  $license_fields = apply_filters( 'tribe_license_fields', $licenses_tab );
287
 
288
+ new Tribe__Settings_Tab( 'licenses', esc_html__( 'Licenses', 'tribe-common' ), array(
289
  'priority' => '40',
290
  'fields' => $license_fields,
291
  'network_admin' => is_network_admin() ? true : false,
292
+ ) );
293
  }
294
 
295
  /**
309
  * @todo move to an admin class
310
  */
311
  public function add_help_admin_menu_item() {
312
+ $hidden_settings_tabs = self::get_network_option( 'hideSettingsTabs', array() );
313
  if ( in_array( 'help', $hidden_settings_tabs ) ) {
314
  return;
315
  }
318
  $title = esc_html__( 'Help', 'tribe-common' );
319
  $slug = 'tribe-help';
320
 
321
+ add_submenu_page( $parent, $title, $title, 'manage_options', $slug, array( $this, 'do_help_tab' ) );
322
  }
323
 
324
  /**
327
  * @return bool
328
  */
329
  protected function have_addons() {
330
+ $addons = apply_filters( 'tribe_licensable_addons', array() );
 
331
  return ! empty( $addons );
332
  }
333
 
337
  * @return void
338
  */
339
  public function save_all_tabs_hidden() {
340
+ $all_tabs_keys = array_keys( apply_filters( 'tribe_settings_all_tabs', array() ) );
341
 
342
  $network_options = (array) get_site_option( Tribe__Main::OPTIONNAMENETWORK );
343
 
common/src/Tribe/Settings_Tab.php CHANGED
@@ -45,16 +45,16 @@ if ( ! class_exists( 'Tribe__Settings_Tab' ) ) {
45
  * @param string $name the tab's visible name
46
  * @param array $args additional arguments for the tab
47
  */
48
- public function __construct( $id, $name, $args = [] ) {
49
 
50
  // setup the defaults
51
- $this->defaults = [
52
- 'fields' => [],
53
  'priority' => 50,
54
  'show_save' => true,
55
  'display_callback' => false,
56
  'network_admin' => false,
57
- ];
58
 
59
  // parse args with defaults
60
  $this->args = wp_parse_args( $args, $this->defaults );
@@ -68,9 +68,9 @@ if ( ! class_exists( 'Tribe__Settings_Tab' ) ) {
68
 
69
  // run actions & filters
70
  if ( ! $this->network_admin ) {
71
- add_filter( 'tribe_settings_all_tabs', [ $this, 'addAllTabs' ] );
72
  }
73
- add_filter( 'tribe_settings_tabs', [ $this, 'addTab' ], $this->priority );
74
  }
75
 
76
  /**
@@ -83,13 +83,13 @@ if ( ! class_exists( 'Tribe__Settings_Tab' ) ) {
83
  * @return array $tabs the filtered tabs
84
  */
85
  public function addTab( $tabs ) {
86
- $hideSettingsTabs = Tribe__Settings_Manager::get_network_option( 'hideSettingsTabs', [] );
87
  if ( ( isset( $this->fields ) || has_action( 'tribe_settings_content_tab_' . $this->id ) ) && ( empty( $hideSettingsTabs ) || ! in_array( $this->id, $hideSettingsTabs ) ) ) {
88
  if ( ( is_network_admin() && $this->args['network_admin'] ) || ( ! is_network_admin() && ! $this->args['network_admin'] ) ) {
89
  $tabs[ $this->id ] = $this->name;
90
- add_filter( 'tribe_settings_fields', [ $this, 'addFields' ] );
91
- add_filter( 'tribe_settings_no_save_tabs', [ $this, 'showSaveTab' ] );
92
- add_filter( 'tribe_settings_content_tab_' . $this->id, [ $this, 'doContent' ] );
93
  }
94
  }
95
 
@@ -122,7 +122,7 @@ if ( ! class_exists( 'Tribe__Settings_Tab' ) ) {
122
  if ( ! empty ( $this->fields ) ) {
123
  $fields[ $this->id ] = $this->fields;
124
  } elseif ( has_action( 'tribe_settings_content_tab_' . $this->id ) ) {
125
- $fields[ $this->id ] = $this->fields = [ 0 => null ]; // just to trick it
126
  }
127
 
128
  return $fields;
@@ -156,12 +156,12 @@ if ( ! class_exists( 'Tribe__Settings_Tab' ) ) {
156
  return;
157
  }
158
 
159
- $sent_data = get_option( 'tribe_settings_sent_data', [] );
160
 
161
  if ( is_array( $this->fields ) && ! empty( $this->fields ) ) {
162
  foreach ( $this->fields as $key => $field ) {
163
  if ( isset( $sent_data[ $key ] ) ) {
164
- // If we just saved [or attempted to], get the value that was input.
165
  $value = $sent_data[ $key ];
166
  } else {
167
  // Some options should always be stored at network level
45
  * @param string $name the tab's visible name
46
  * @param array $args additional arguments for the tab
47
  */
48
+ public function __construct( $id, $name, $args = array() ) {
49
 
50
  // setup the defaults
51
+ $this->defaults = array(
52
+ 'fields' => array(),
53
  'priority' => 50,
54
  'show_save' => true,
55
  'display_callback' => false,
56
  'network_admin' => false,
57
+ );
58
 
59
  // parse args with defaults
60
  $this->args = wp_parse_args( $args, $this->defaults );
68
 
69
  // run actions & filters
70
  if ( ! $this->network_admin ) {
71
+ add_filter( 'tribe_settings_all_tabs', array( $this, 'addAllTabs' ) );
72
  }
73
+ add_filter( 'tribe_settings_tabs', array( $this, 'addTab' ), $this->priority );
74
  }
75
 
76
  /**
83
  * @return array $tabs the filtered tabs
84
  */
85
  public function addTab( $tabs ) {
86
+ $hideSettingsTabs = Tribe__Settings_Manager::get_network_option( 'hideSettingsTabs', array() );
87
  if ( ( isset( $this->fields ) || has_action( 'tribe_settings_content_tab_' . $this->id ) ) && ( empty( $hideSettingsTabs ) || ! in_array( $this->id, $hideSettingsTabs ) ) ) {
88
  if ( ( is_network_admin() && $this->args['network_admin'] ) || ( ! is_network_admin() && ! $this->args['network_admin'] ) ) {
89
  $tabs[ $this->id ] = $this->name;
90
+ add_filter( 'tribe_settings_fields', array( $this, 'addFields' ) );
91
+ add_filter( 'tribe_settings_no_save_tabs', array( $this, 'showSaveTab' ) );
92
+ add_filter( 'tribe_settings_content_tab_' . $this->id, array( $this, 'doContent' ) );
93
  }
94
  }
95
 
122
  if ( ! empty ( $this->fields ) ) {
123
  $fields[ $this->id ] = $this->fields;
124
  } elseif ( has_action( 'tribe_settings_content_tab_' . $this->id ) ) {
125
+ $fields[ $this->id ] = $this->fields = array( 0 => null ); // just to trick it
126
  }
127
 
128
  return $fields;
156
  return;
157
  }
158
 
159
+ $sent_data = get_option( 'tribe_settings_sent_data', array() );
160
 
161
  if ( is_array( $this->fields ) && ! empty( $this->fields ) ) {
162
  foreach ( $this->fields as $key => $field ) {
163
  if ( isset( $sent_data[ $key ] ) ) {
164
+ // if we just saved [or attempted to], get the value that was inputed
165
  $value = $sent_data[ $key ];
166
  } else {
167
  // Some options should always be stored at network level
common/src/Tribe/Shortcode/Manager.php CHANGED
@@ -5,7 +5,6 @@
5
  * @package Tribe\Shortcode
6
  * @since 4.12.0
7
  */
8
-
9
  namespace Tribe\Shortcode;
10
 
11
  /**
@@ -16,16 +15,6 @@ namespace Tribe\Shortcode;
16
  * @package Tribe\Shortcode
17
  */
18
  class Manager {
19
-
20
- /**
21
- * Current shortcodes.
22
- *
23
- * @since 4.12.9
24
- *
25
- * @var array $current_shortcode An array containing the current shortcodes being executed.
26
- */
27
- public $current_shortcode = [];
28
-
29
  /**
30
  * Get the list of shortcodes available for handling.
31
  *
@@ -115,68 +104,4 @@ class Manager {
115
 
116
  return $instance->get_html();
117
  }
118
-
119
- /**
120
- * Filter `pre_do_shortcode_tag` to add the current shortcode.
121
- *
122
- * @since 4.12.9
123
- *
124
- * @param bool|string $return Short-circuit return value. Either false or the value to replace the shortcode with.
125
- * @param string $tag Shortcode name.
126
- * @param array $attr Shortcode attributes array,
127
- * @param array $m Regular expression match array.
128
- *
129
- * @return bool|string Short-circuit return value.
130
- */
131
- public function filter_pre_do_shortcode_tag( $return, $tag, $attr, $m ) {
132
- if ( ! $this->is_shortcode_registered( $tag ) ) {
133
- return $return;
134
- }
135
-
136
- // Add to the doing shortcode.
137
- $this->current_shortcode[] = $tag;
138
-
139
- return $return;
140
- }
141
-
142
- /**
143
- * Filter `do_shortcode_tag` to remove the shortcode from the `$tribe_current_shortcode` list.
144
- *
145
- * @since 4.12.9
146
- *
147
- * @param string $output Shortcode output.
148
- * @param string $tag Shortcode name.
149
- * @param array|string $attr Shortcode attributes array or empty string.
150
- * @param array $m Regular expression match array.
151
- *
152
- * @return string Shortcode output.
153
- */
154
- public function filter_do_shortcode_tag( $output, $tag, $attr, $m ) {
155
- if ( ! $this->is_shortcode_registered( $tag ) ) {
156
- return $output;
157
- }
158
-
159
- if ( isset( $this->current_shortcode[ $tag ] ) ) {
160
- unset( $this->current_shortcode[ $tag ] );
161
- }
162
-
163
- return $output;
164
- }
165
-
166
- /**
167
- * Check if a shortcode is being done.
168
- *
169
- * @since 4.12.9
170
- *
171
- * @param null|string $tag The shortcode tag name, or null to check if doing any shortcode.
172
- *
173
- * @return bool If the shortcode is being done or not.
174
- */
175
- public function is_doing_shortcode( $tag = null ) {
176
- if ( null === $tag ) {
177
- return ! empty( $this->current_shortcode );
178
- }
179
-
180
- return in_array( $tag, $this->current_shortcode, true );
181
- }
182
  }
5
  * @package Tribe\Shortcode
6
  * @since 4.12.0
7
  */
 
8
  namespace Tribe\Shortcode;
9
 
10
  /**
15
  * @package Tribe\Shortcode
16
  */
17
  class Manager {
 
 
 
 
 
 
 
 
 
 
18
  /**
19
  * Get the list of shortcodes available for handling.
20
  *
104
 
105
  return $instance->get_html();
106
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  }
common/src/Tribe/Shortcode/Shortcode_Abstract.php CHANGED
@@ -1,72 +1,65 @@
1
  <?php
2
-
 
 
 
 
 
 
3
  namespace Tribe\Shortcode;
4
 
5
  use Tribe__Utils__Array as Arr;
6
 
7
  /**
8
- * The abstract all shortcodes should implement.
9
- *
10
- * @package Tribe\Shortcode
11
  *
12
  * @since 4.12.0
 
 
13
  */
14
  abstract class Shortcode_Abstract implements Shortcode_Interface {
15
  /**
16
  * Slug of the current shortcode.
17
  *
18
- * @since 4.12.0
19
  *
20
- * @var string
21
  */
22
  protected $slug;
23
 
24
  /**
25
  * Default arguments to be merged into final arguments of the shortcode.
26
  *
27
- * @since 4.12.0
28
  *
29
- * @var array
30
  */
31
  protected $default_arguments = [];
32
 
33
  /**
34
- * Array map allowing aliased shortcode arguments.
35
- *
36
- * The array keys are aliases of the array values (i.e. the "real" shortcode attributes to parse).
37
- * Example array: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
38
- * Example shortcode usage: [some_tag alias=17 to='Fred'] will be parsed as [some_tag canonical=17 to='Fred']
39
- *
40
- * @since 4.12.2
41
- *
42
- * @var array<string,string>
43
- */
44
- protected $aliased_arguments = [];
45
-
46
- /**
47
- * Array of callbacks for arguments validation.
48
  *
49
- * @since 4.12.0
50
  *
51
- * @var array
52
  */
53
  protected $validate_arguments_map = [];
54
 
55
  /**
56
  * Arguments of the current shortcode.
57
  *
58
- * @since 4.12.0
59
  *
60
- * @var array
61
  */
62
  protected $arguments;
63
 
64
  /**
65
  * Content of the current shortcode.
66
  *
67
- * @since 4.12.0
68
  *
69
- * @var string
70
  */
71
  protected $content;
72
 
@@ -74,39 +67,23 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
74
  * {@inheritDoc}
75
  */
76
  public function setup( $arguments, $content ) {
77
- $this->arguments = $this->parse_arguments( (array) $arguments );
78
  $this->content = $content;
79
  }
80
 
81
  /**
82
  * {@inheritDoc}
83
  */
84
- public function set_aliased_arguments( array $alias_map ) {
85
- $this->aliased_arguments = Arr::filter_to_flat_scalar_associative_array( (array) $alias_map );
86
- }
87
-
88
- /**
89
- * {@inheritDoc}
90
- */
91
- public function get_aliased_arguments() {
92
- return $this->aliased_arguments;
93
- }
94
-
95
- /**
96
- * {@inheritDoc}
97
- */
98
- public function parse_arguments( array $arguments ) {
99
- $arguments = Arr::parse_associative_array_alias( (array) $arguments, (array) $this->get_aliased_arguments() );
100
  $arguments = shortcode_atts( $this->get_default_arguments(), $arguments, $this->slug );
101
-
102
  return $this->validate_arguments( $arguments );
103
  }
104
 
105
  /**
106
  * {@inheritDoc}
107
  */
108
- public function validate_arguments( array $arguments ) {
109
- $validate_arguments_map = $this->filter_validated_arguments_map( $this->get_validated_arguments_map() );
110
  foreach ( $validate_arguments_map as $key => $callback ) {
111
  $arguments[ $key ] = $callback( isset( $arguments[ $key ] ) ? $arguments[ $key ] : null );
112
  }
@@ -125,32 +102,25 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
125
  * {@inheritDoc}
126
  */
127
  public function get_validated_arguments_map() {
128
- return $this->validate_arguments_map;
129
- }
130
-
131
- /**
132
- * {@inheritDoc}
133
- */
134
- public function filter_validated_arguments_map( $validate_arguments_map ) {
135
  /**
136
  * Applies a filter to instance arguments validation callbacks.
137
  *
138
- * @since 4.12.0
139
  *
140
- * @param array $validate_arguments_map Current set of callbacks for arguments.
141
- * @param static $instance Which instance of shortcode we are dealing with.
142
  */
143
- $validate_arguments_map = apply_filters( 'tribe_shortcode_validate_arguments_map', $validate_arguments_map, $this );
144
 
145
  $registration_slug = $this->get_registration_slug();
146
 
147
  /**
148
  * Applies a filter to instance arguments validation callbacks based on the registration slug of the shortcode.
149
  *
150
- * @since 4.12.0
151
  *
152
- * @param array $validate_arguments_map Current set of callbacks for arguments.
153
- * @param static $instance Which instance of shortcode we are dealing with.
154
  */
155
  $validate_arguments_map = apply_filters( "tribe__shortcode_{$registration_slug}_validate_arguments_map", $validate_arguments_map, $this );
156
 
@@ -164,10 +134,10 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
164
  /**
165
  * Applies a filter to instance arguments.
166
  *
167
- * @since 4.12.0
168
  *
169
- * @param array $arguments Current set of arguments.
170
- * @param static $instance Which instance of shortcode we are dealing with.
171
  */
172
  $arguments = apply_filters( 'tribe_shortcode_arguments', $this->arguments, $this );
173
 
@@ -176,10 +146,10 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
176
  /**
177
  * Applies a filter to instance arguments based on the registration slug of the shortcode.
178
  *
179
- * @since 4.12.0
180
  *
181
- * @param array $arguments Current set of arguments.
182
- * @param static $instance Which instance of shortcode we are dealing with.
183
  */
184
  $arguments = apply_filters( "tribe_shortcode_{$registration_slug}_arguments", $arguments, $this );
185
 
@@ -194,14 +164,14 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
194
  $argument = Arr::get( $arguments, $index, $default );
195
 
196
  /**
197
- * Applies a filter to a specific shortcode argument, catch all for all shortcodes.
198
  *
199
- * @since 4.12.0
200
  *
201
- * @param mixed $argument The argument.
202
- * @param array $index Which index we indent to fetch from the arguments.
203
- * @param array $default Default value if it doesn't exist.
204
- * @param static $instance Which instance of shortcode we are dealing with.
205
  */
206
  $argument = apply_filters( 'tribe_shortcode_argument', $argument, $index, $default, $this );
207
 
@@ -210,12 +180,12 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
210
  /**
211
  * Applies a filter to a specific shortcode argument, to a particular registration slug.
212
  *
213
- * @since 4.12.0
214
  *
215
- * @param mixed $argument The argument value.
216
- * @param array $index Which index we indent to fetch from the arguments.
217
- * @param array $default Default value if it doesn't exist.
218
- * @param static $instance Which instance of shortcode we are dealing with.
219
  */
220
  $argument = apply_filters( "tribe_shortcode_{$registration_slug}_argument", $argument, $index, $default, $this );
221
 
@@ -229,10 +199,10 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
229
  /**
230
  * Applies a filter to instance default arguments.
231
  *
232
- * @since 4.12.0
233
  *
234
- * @param array $default_arguments Current set of default arguments.
235
- * @param static $instance Which instance of shortcode we are dealing with.
236
  */
237
  $default_arguments = apply_filters( 'tribe_shortcode_default_arguments', $this->default_arguments, $this );
238
 
@@ -241,10 +211,10 @@ abstract class Shortcode_Abstract implements Shortcode_Interface {
241
  /**
242
  * Applies a filter to instance default arguments based on the registration slug of the shortcode.
243
  *
244
- * @since 4.12.0
245
  *
246
- * @param array $default_arguments Current set of default arguments.
247
- * @param static $instance Which instance of shortcode we are dealing with.
248
  */
249
  $default_arguments = apply_filters( "tribe_shortcode_{$registration_slug}_default_arguments", $default_arguments, $this );
250
 
1
  <?php
2
+ /**
3
+ * The abstract all shortcodes should implement.
4
+ *
5
+ * @since 4.12.0
6
+ *
7
+ * @package Tribe\Shortcode
8
+ */
9
  namespace Tribe\Shortcode;
10
 
11
  use Tribe__Utils__Array as Arr;
12
 
13
  /**
14
+ * Interface Shortcode_Interface
 
 
15
  *
16
  * @since 4.12.0
17
+ *
18
+ * @package Tribe\Shortcode
19
  */
20
  abstract class Shortcode_Abstract implements Shortcode_Interface {
21
  /**
22
  * Slug of the current shortcode.
23
  *
24
+ * @since 4.12.0
25
  *
26
+ * @var string
27
  */
28
  protected $slug;
29
 
30
  /**
31
  * Default arguments to be merged into final arguments of the shortcode.
32
  *
33
+ * @since 4.12.0
34
  *
35
+ * @var array
36
  */
37
  protected $default_arguments = [];
38
 
39
  /**
40
+ * Array of callbacks for arguments validation
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  *
42
+ * @since 4.12.0
43
  *
44
+ * @var array
45
  */
46
  protected $validate_arguments_map = [];
47
 
48
  /**
49
  * Arguments of the current shortcode.
50
  *
51
+ * @since 4.12.0
52
  *
53
+ * @var array
54
  */
55
  protected $arguments;
56
 
57
  /**
58
  * Content of the current shortcode.
59
  *
60
+ * @since 4.12.0
61
  *
62
+ * @var string
63
  */
64
  protected $content;
65
 
67
  * {@inheritDoc}
68
  */
69
  public function setup( $arguments, $content ) {
70
+ $this->arguments = $this->parse_arguments( $arguments );
71
  $this->content = $content;
72
  }
73
 
74
  /**
75
  * {@inheritDoc}
76
  */
77
+ public function parse_arguments( $arguments ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  $arguments = shortcode_atts( $this->get_default_arguments(), $arguments, $this->slug );
 
79
  return $this->validate_arguments( $arguments );
80
  }
81
 
82
  /**
83
  * {@inheritDoc}
84
  */
85
+ public function validate_arguments( $arguments ) {
86
+ $validate_arguments_map = $this->get_validate_arguments_map();
87
  foreach ( $validate_arguments_map as $key => $callback ) {
88
  $arguments[ $key ] = $callback( isset( $arguments[ $key ] ) ? $arguments[ $key ] : null );
89
  }
102
  * {@inheritDoc}
103
  */
104
  public function get_validated_arguments_map() {
 
 
 
 
 
 
 
105
  /**
106
  * Applies a filter to instance arguments validation callbacks.
107
  *
108
+ * @since 4.12.0
109
  *
110
+ * @param array $validate_arguments_map Current set of callbacks for arguments.
111
+ * @param static $instance Which instance of shortcode we are dealing with.
112
  */
113
+ $validate_arguments_map = apply_filters( 'tribe_shortcode_validate_arguments_map', $this->validate_arguments_map, $this );
114
 
115
  $registration_slug = $this->get_registration_slug();
116
 
117
  /**
118
  * Applies a filter to instance arguments validation callbacks based on the registration slug of the shortcode.
119
  *
120
+ * @since 4.12.0
121
  *
122
+ * @param array $validate_arguments_map Current set of callbacks for arguments.
123
+ * @param static $instance Which instance of shortcode we are dealing with.
124
  */
125
  $validate_arguments_map = apply_filters( "tribe__shortcode_{$registration_slug}_validate_arguments_map", $validate_arguments_map, $this );
126
 
134
  /**
135
  * Applies a filter to instance arguments.
136
  *
137
+ * @since 4.12.0
138
  *
139
+ * @param array $arguments Current set of arguments.
140
+ * @param static $instance Which instance of shortcode we are dealing with.
141
  */
142
  $arguments = apply_filters( 'tribe_shortcode_arguments', $this->arguments, $this );
143
 
146
  /**
147
  * Applies a filter to instance arguments based on the registration slug of the shortcode.
148
  *
149
+ * @since 4.12.0
150
  *
151
+ * @param array $arguments Current set of arguments.
152
+ * @param static $instance Which instance of shortcode we are dealing with.
153
  */
154
  $arguments = apply_filters( "tribe_shortcode_{$registration_slug}_arguments", $arguments, $this );
155
 
164
  $argument = Arr::get( $arguments, $index, $default );
165
 
166
  /**
167
+ * Applies a filter to a specific shortcode argument, catch all for all shortcodes..
168
  *
169
+ * @since 4.12.0
170
  *
171
+ * @param mixed $argument The argument.
172
+ * @param array $index Which index we indent to fetch from the arguments.
173
+ * @param array $default Default value if it doesnt exist.
174
+ * @param static $instance Which instance of shortcode we are dealing with.
175
  */
176
  $argument = apply_filters( 'tribe_shortcode_argument', $argument, $index, $default, $this );
177
 
180
  /**
181
  * Applies a filter to a specific shortcode argument, to a particular registration slug.
182
  *
183
+ * @since 4.12.0
184
  *
185
+ * @param mixed $argument The argument value.
186
+ * @param array $index Which index we indent to fetch from the arguments.
187
+ * @param array $default Default value if it doesnt exist.
188
+ * @param static $instance Which instance of shortcode we are dealing with.
189
  */
190
  $argument = apply_filters( "tribe_shortcode_{$registration_slug}_argument", $argument, $index, $default, $this );
191
 
199
  /**
200
  * Applies a filter to instance default arguments.
201
  *
202
+ * @since 4.12.0
203
  *
204
+ * @param array $default_arguments Current set of default arguments.
205
+ * @param static $instance Which instance of shortcode we are dealing with.
206
  */
207
  $default_arguments = apply_filters( 'tribe_shortcode_default_arguments', $this->default_arguments, $this );
208
 
211
  /**
212
  * Applies a filter to instance default arguments based on the registration slug of the shortcode.
213
  *
214
+ * @since 4.12.0
215
  *
216
+ * @param array $default_arguments Current set of default arguments.
217
+ * @param static $instance Which instance of shortcode we are dealing with.
218
  */
219
  $default_arguments = apply_filters( "tribe_shortcode_{$registration_slug}_default_arguments", $default_arguments, $this );
220
 
common/src/Tribe/Shortcode/Shortcode_Interface.php CHANGED
@@ -1,20 +1,28 @@
1
  <?php
2
-
 
 
 
 
 
 
3
  namespace Tribe\Shortcode;
4
 
5
  /**
6
  * Interface Shortcode_Interface
7
  *
8
- * @package Tribe\Shortcode
9
- *
10
  * @since 4.12.0
 
 
11
  */
12
  interface Shortcode_Interface {
13
 
14
  /**
15
- * Returns the shortcode slug that allows the shortcode to be built via the shortcode class by slug.
 
 
16
  *
17
- * @since 4.12.0
18
  *
19
  * @return string The shortcode slug.
20
  */
@@ -23,60 +31,39 @@ interface Shortcode_Interface {
23
  /**
24
  * Configures the base variables for an instance of shortcode.
25
  *
26
- * @since 4.12.0
27
  *
28
- * @param array|string $arguments Set of arguments passed to the Shortcode at hand. Empty string if no args.
29
  * @param string $content Contents passed to the shortcode, inside of the open and close brackets.
30
  */
31
  public function setup( $arguments, $content );
32
 
33
- /**
34
- * Sets the aliased arguments array.
35
- *
36
- * @see Tribe__Utils__Array::parse_associative_array_alias() The expected format.
37
- *
38
- * @since 4.12.2
39
- *
40
- * @param array $alias_map An associative array of aliases: key as alias, value as mapped canonical.
41
- * Example: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
42
- */
43
- public function set_aliased_arguments( array $alias_map );
44
-
45
- /**
46
- * Gets the aliased arguments array.
47
- *
48
- * @since 4.12.2
49
- *
50
- * @return array<string,string> The associative array map of aliases and their canonical arguments.
51
- */
52
- public function get_aliased_arguments();
53
-
54
  /**
55
  * Returns the arguments for the shortcode parsed correctly with defaults applied.
56
  *
57
- * @since 4.12.0
58
  *
59
- * @param array $arguments Set of arguments passed to the Shortcode at hand.
60
  *
61
  * @return array<string,mixed> The parsed shortcode arguments map.
62
  */
63
- public function parse_arguments( array $arguments );
64
 
65
  /**
66
  * Returns the array of arguments for this shortcode after applying the validation callbacks.
67
  *
68
- * @since 4.12.0
69
  *
70
- * @param array $arguments Set of arguments passed to the Shortcode at hand.
71
  *
72
  * @return array<string,mixed> The validated shortcode arguments map.
73
  */
74
- public function validate_arguments( array $arguments );
75
 
76
  /**
77
  * Returns the array of callbacks for this shortcode's arguments.
78
  *
79
- * @since 4.12.0
80
  *
81
  * @return array<string,mixed> A map of the shortcode arguments that have survived validation.
82
  */
@@ -85,7 +72,7 @@ interface Shortcode_Interface {
85
  /**
86
  * Returns a shortcode default arguments.
87
  *
88
- * @since 4.12.0
89
  *
90
  * @return array<string,mixed> The shortcode default arguments map.
91
  */
@@ -94,7 +81,7 @@ interface Shortcode_Interface {
94
  /**
95
  * Returns a shortcode arguments after been parsed.
96
  *
97
- * @since 4.12.0
98
  *
99
  * @return array<string,mixed> The shortcode arguments, as set by the user in the shortcode string.
100
  */
@@ -103,21 +90,21 @@ interface Shortcode_Interface {
103
  /**
104
  * Returns a shortcode argument after it has been parsed.
105
  *
106
- * @since 4.12.0
107
  *
108
- * @param array|string $index Which index we indent to fetch from the arguments.
109
- * @param array $default Default value if it doesn't exist.
110
  *
111
- * @uses Tribe__Utils__Array::get For index fetching and Default.
 
112
  *
113
- * @return mixed Value for the Index passed as the first argument.
114
  */
115
  public function get_argument( $index, $default = null );
116
 
117
  /**
118
- * Returns a shortcode's HTML.
119
  *
120
- * @since 4.12.0
121
  *
122
  * @return string The shortcode rendered HTML code.
123
  */
1
  <?php
2
+ /**
3
+ * The interface all shortcodes should implement.
4
+ *
5
+ * @since 4.12.0
6
+ *
7
+ * @package Tribe\Shortcode
8
+ */
9
  namespace Tribe\Shortcode;
10
 
11
  /**
12
  * Interface Shortcode_Interface
13
  *
 
 
14
  * @since 4.12.0
15
+ *
16
+ * @package Tribe\Shortcode
17
  */
18
  interface Shortcode_Interface {
19
 
20
  /**
21
+ * Returns the shortcode slug.
22
+ *
23
+ * The slug should be the one that will allow the shortcode to be built by the shortcode class by slug.
24
  *
25
+ * @since 4.12.0
26
  *
27
  * @return string The shortcode slug.
28
  */
31
  /**
32
  * Configures the base variables for an instance of shortcode.
33
  *
34
+ * @since 4.12.0
35
  *
36
+ * @param array $arguments Set of arguments passed to the Shortcode at hand.
37
  * @param string $content Contents passed to the shortcode, inside of the open and close brackets.
38
  */
39
  public function setup( $arguments, $content );
40
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  /**
42
  * Returns the arguments for the shortcode parsed correctly with defaults applied.
43
  *
44
+ * @since 4.12.0
45
  *
46
+ * @param array $arguments Set of arguments passed to the Shortcode at hand.
47
  *
48
  * @return array<string,mixed> The parsed shortcode arguments map.
49
  */
50
+ public function parse_arguments( $arguments );
51
 
52
  /**
53
  * Returns the array of arguments for this shortcode after applying the validation callbacks.
54
  *
55
+ * @since 4.12.0
56
  *
57
+ * @param array $arguments Set of arguments passed to the Shortcode at hand.
58
  *
59
  * @return array<string,mixed> The validated shortcode arguments map.
60
  */
61
+ public function validate_arguments( $arguments );
62
 
63
  /**
64
  * Returns the array of callbacks for this shortcode's arguments.
65
  *
66
+ * @since 4.12.0
67
  *
68
  * @return array<string,mixed> A map of the shortcode arguments that have survived validation.
69
  */
72
  /**
73
  * Returns a shortcode default arguments.
74
  *
75
+ * @since 4.12.0
76
  *
77
  * @return array<string,mixed> The shortcode default arguments map.
78
  */
81
  /**
82
  * Returns a shortcode arguments after been parsed.
83
  *
84
+ * @since 4.12.0
85
  *
86
  * @return array<string,mixed> The shortcode arguments, as set by the user in the shortcode string.
87
  */
90
  /**
91
  * Returns a shortcode argument after it has been parsed.
92
  *
93
+ * @uses Tribe__Utils__Array::get For index fetching and Default.
94
  *
95
+ * @since 4.12.0
 
96
  *
97
+ * @param array $index Which index we indent to fetch from the arguments.
98
+ * @param array $default Default value if it doesnt exist.
99
  *
100
+ * @return mixed Value for the Index passed as the first argument.
101
  */
102
  public function get_argument( $index, $default = null );
103
 
104
  /**
105
+ * Returns a shortcode HTML code.
106
  *
107
+ * @since 4.12.0
108
  *
109
  * @return string The shortcode rendered HTML code.
110
  */
common/src/Tribe/Shortcode/Utils.php DELETED
@@ -1,45 +0,0 @@
1
- <?php
2
- namespace Tribe\Shortcode;
3
-
4
- /**
5
- * Class Utils.
6
- *
7
- * @since 4.13.0
8
- *
9
- * @package Tribe\Shortcode
10
- */
11
- class Utils {
12
- /**
13
- * Convert settings to a set of shortcode attributes.
14
- *
15
- * @since 4.13.0
16
- *
17
- * @param array<string,mixed> $settings Widget settings.
18
- * @param array<string> $allowed Allowed settings for shortcode.
19
- *
20
- * @return string Shortcode attributes string.
21
- */
22
- public static function get_attributes_string( $settings, $allowed = [] ) {
23
- $settings_string = '';
24
-
25
- $allowed = array_flip( $allowed );
26
-
27
- foreach ( $settings as $key => $value ) {
28
- if ( ! empty( $allowed ) && ! isset( $allowed[ $key ] ) ) {
29
- continue;
30
- }
31
-
32
- $key = esc_attr( $key );
33
-
34
- if ( is_array( $value ) ) {
35
- $value = implode( ', ', $value );
36
- }
37
-
38
- $value = esc_attr( $value );
39
-
40
- $settings_string .= " {$key}=\"{$value}\"";
41
- }
42
-
43
- return $settings_string;
44
- }
45
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Simple_Table.php CHANGED
@@ -8,7 +8,7 @@ if ( ! defined( 'ABSPATH' ) ) {
8
  /**
9
  * A class for outputting a multidimensional array as a straightforward HTML table
10
  *
11
- * @todo Remove this in version 5 if it does not see much usage
12
  */
13
  class Tribe__Simple_Table {
14
 
@@ -38,7 +38,7 @@ class Tribe__Simple_Table {
38
  * @param array $tbody Multidimension array containing table rows/columns
39
  * @param array $thead Single dimension array containing table headings
40
  */
41
- public function __construct( $tbody, $thead = [] ) {
42
  $this->thead = $thead;
43
  $this->tbody = $tbody;
44
  }
@@ -143,7 +143,7 @@ class Tribe__Simple_Table {
143
  *
144
  * @return string HTML element
145
  */
146
- private function output_element( $html_tag, $data = null, $attributes = [] ) {
147
  $output = '<' . tag_escape( $html_tag );
148
 
149
  if ( ! empty( $attributes ) ) {
8
  /**
9
  * A class for outputting a multidimensional array as a straightforward HTML table
10
  *
11
+ * @TODO Remove this in version 5 if it does not see much usage
12
  */
13
  class Tribe__Simple_Table {
14
 
38
  * @param array $tbody Multidimension array containing table rows/columns
39
  * @param array $thead Single dimension array containing table headings
40
  */
41
+ public function __construct( $tbody, $thead = array() ) {
42
  $this->thead = $thead;
43
  $this->tbody = $tbody;
44
  }
143
  *
144
  * @return string HTML element
145
  */
146
+ private function output_element( $html_tag, $data = null, $attributes = array() ) {
147
  $output = '<' . tag_escape( $html_tag );
148
 
149
  if ( ! empty( $attributes ) ) {
common/src/Tribe/Support.php CHANGED
@@ -26,20 +26,20 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
26
  *
27
  * @var array
28
  */
29
- protected $must_escape = [
30
  'tribeEventsAfterHTML',
31
  'tribeEventsBeforeHTML',
32
- ];
33
 
34
  /**
35
  * Field prefixes here should be partially obfuscated before being printed.
36
  *
37
  * @var array
38
  */
39
- protected $must_obfuscate_prefixes = [
40
  'pue_install_key_',
41
  'google_maps_js_api_key',
42
- ];
43
 
44
  private function __construct() {
45
  /**
@@ -49,11 +49,11 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
49
  */
50
  $this->must_escape = (array) apply_filters( 'tribe_help_must_escape_fields', $this->must_escape );
51
 
52
- add_action( 'tribe_help_pre_get_sections', [ $this, 'append_system_info' ], 10 );
53
- add_action( 'delete_option_rewrite_rules', [ $this, 'log_rewrite_rule_purge' ] );
54
 
55
- add_action( 'rest_api_init', [ __CLASS__, 'create_sysinfo_endpoint' ] );
56
- add_action( 'wp_ajax_tribe_toggle_sysinfo_optin', [ __CLASS__, 'ajax_sysinfo_optin' ] );
57
  }
58
 
59
  /**
@@ -74,7 +74,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
74
  global $wpdb;
75
  $user = wp_get_current_user();
76
 
77
- $plugins = [];
78
  if ( function_exists( 'get_plugin_data' ) ) {
79
  $plugins_raw = wp_get_active_and_valid_plugins();
80
  foreach ( $plugins_raw as $k => $v ) {
@@ -93,7 +93,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
93
  }
94
  }
95
 
96
- $network_plugins = [];
97
  if ( is_multisite() && function_exists( 'get_plugin_data' ) ) {
98
  $plugins_raw = wp_get_active_network_plugins();
99
  foreach ( $plugins_raw as $k => $v ) {
@@ -112,7 +112,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
112
  }
113
  }
114
 
115
- $mu_plugins = [];
116
  if ( function_exists( 'get_mu_plugins' ) ) {
117
  $mu_plugins_raw = get_mu_plugins();
118
  foreach ( $mu_plugins_raw as $k => $v ) {
@@ -130,10 +130,10 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
130
  }
131
  }
132
 
133
- $keys = apply_filters( 'tribe-pue-install-keys', [] );
134
  //Obfuscate the License Keys for Security
135
  if ( is_array( $keys ) && ! empty( $keys ) ) {
136
- $secure_keys = [];
137
  foreach ( $keys as $plugin => $license ) {
138
  $secure_keys[ $plugin ] = preg_replace( '/^(.{4}).*(.{4})$/', '$1' . str_repeat( '#', 32 ) . '$2', $license );
139
  }
@@ -145,15 +145,15 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
145
  $server = explode( '/', reset( $server ) );
146
 
147
  //PHP Information
148
- $php_info = [];
149
- $php_vars = [
150
  'max_execution_time',
151
  'memory_limit',
152
  'upload_max_filesize',
153
  'post_max_size',
154
  'display_errors',
155
  'log_errors',
156
- ];
157
 
158
  foreach ( $php_vars as $php_var ) {
159
  if ( isset( $wpdb->qm_php_vars ) && isset( $wpdb->qm_php_vars[ $php_var ] ) ) {
@@ -176,7 +176,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
176
  }
177
 
178
  $site_url = get_site_url();
179
- $systeminfo = [
180
  'Home URL' => get_home_url(),
181
  'Site URL' => $site_url,
182
  'Site Language' => get_option( 'WPLANG' ) ? get_option( 'WPLANG' ) : esc_html__( 'English', 'tribe-common' ),
@@ -206,7 +206,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
206
  'Week Starts On' => get_option( 'start_of_week' ),
207
  'Common Library Dir' => $GLOBALS['tribe-common-info']['dir'],
208
  'Common Library Version' => $GLOBALS['tribe-common-info']['version'],
209
- ];
210
 
211
  if ( $this->rewrite_rules_purged ) {
212
  $systeminfo['rewrite rules purged'] = esc_html__( 'Rewrite rules were purged on load of this help page. Chances are there is a rewrite rule flush occurring in a plugin or theme!', 'tribe-common' );
@@ -262,7 +262,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
262
  } elseif ( is_array( $v ) && $is_numeric_array ) {
263
  $output .= sprintf( '<dd class="support-stats-array"><ul><li>%s</li></ul></dd>', join( '</li><li>', $v ) );
264
  } else {
265
- $formatted_v = [];
266
  foreach ( $v as $obj_key => $obj_val ) {
267
  if ( in_array( $obj_key, $this->must_escape ) ) {
268
  $obj_val = esc_html( $obj_val );
@@ -287,7 +287,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
287
  }
288
 
289
  /**
290
- * Logs the occurrence of rewrite rule purging
291
  */
292
  public function log_rewrite_rule_purge() {
293
  $this->rewrite_rules_purged = true;
@@ -315,8 +315,8 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
315
  $checked = 'checked';
316
  }
317
 
318
- $opt_in = '<p class="system-info"><input name="tribe_auto_sysinfo_opt_in" id="tribe_auto_sysinfo_opt_in" type="checkbox" value="optin" ' . esc_attr( $checked ) . '/><label for="tribe_auto_sysinfo_opt_in">' . esc_html__( 'Yes, automatically share my system information with The Events Calendar\'s support team', 'tribe-common' ) . '</label></p>';
319
- $opt_in .= '<p class="tooltip description">' . esc_html__( 'Your system information will only be used by The Events Calendar\'s support team. All information is stored securely. We do not share this information with any third parties.', 'tribe-common' ) . '</p>';
320
  $opt_in .= '<p class="tribe-sysinfo-optin-msg"></p>';
321
 
322
  return $opt_in;
@@ -355,15 +355,10 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
355
  public static function create_sysinfo_endpoint() {
356
  $optin_key = get_option( 'tribe_systeminfo_optin' );
357
  if ( $optin_key ) {
358
- register_rest_route(
359
- 'tribe_events/v2',
360
- '/(?P<key>[a-z0-9\-]+)/sysinfo/',
361
- [
362
- 'methods' => 'GET',
363
- 'callback' => [ 'Tribe__Support', 'sysinfo_query' ],
364
- 'permission_callback' => '__return_true',
365
- ]
366
- );
367
  }
368
  }
369
 
@@ -383,7 +378,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
383
  update_option( 'tribe_systeminfo_optin', $optin_key );
384
 
385
  //Only Connect If a License Exists
386
- $keys = apply_filters( 'tribe-pue-install-keys', [] );
387
  if ( is_array( $keys ) && ! empty( $keys ) ) {
388
  Tribe__Support::send_sysinfo_key( $optin_key );
389
  } else {
@@ -412,7 +407,7 @@ if ( ! class_exists( 'Tribe__Support' ) ) {
412
  */
413
  public static function send_sysinfo_key( $optin_key = null, $url = null, $remove = null, $pueadd = false ) {
414
 
415
- $url = $url ? $url : urlencode( str_replace( [ 'http://', 'https://' ], '', get_site_url() ) );
416
 
417
  $teccom_url = 'https://theeventscalendar.com/';
418
 
26
  *
27
  * @var array
28
  */
29
+ protected $must_escape = array(
30
  'tribeEventsAfterHTML',
31
  'tribeEventsBeforeHTML',
32
+ );
33
 
34
  /**
35
  * Field prefixes here should be partially obfuscated before being printed.
36
  *
37
  * @var array
38
  */
39
+ protected $must_obfuscate_prefixes = array(
40
  'pue_install_key_',
41
  'google_maps_js_api_key',
42
+ );
43
 
44
  private function __construct() {
45
  /**
49
  */
50
  $this->must_escape = (array) apply_filters( 'tribe_help_must_escape_fields', $this->must_escape );
51
 
52
+ add_action( 'tribe_help_pre_get_sections', array( $this, 'append_system_info' ), 10 );
53
+ add_action( 'delete_option_rewrite_rules', array( $this, 'log_rewrite_rule_purge' ) );
54
 
55
+ add_action( 'rest_api_init', array( __CLASS__, 'create_sysinfo_endpoint' ) );
56
+ add_action( 'wp_ajax_tribe_toggle_sysinfo_optin', array( __CLASS__, 'ajax_sysinfo_optin' ) );
57
  }
58
 
59
  /**
74
  global $wpdb;
75
  $user = wp_get_current_user();
76
 
77
+ $plugins = array();
78
  if ( function_exists( 'get_plugin_data' ) ) {
79
  $plugins_raw = wp_get_active_and_valid_plugins();
80
  foreach ( $plugins_raw as $k => $v ) {
93
  }
94
  }
95
 
96
+ $network_plugins = array();
97
  if ( is_multisite() && function_exists( 'get_plugin_data' ) ) {
98
  $plugins_raw = wp_get_active_network_plugins();
99
  foreach ( $plugins_raw as $k => $v ) {
112
  }
113
  }
114
 
115
+ $mu_plugins = array();
116
  if ( function_exists( 'get_mu_plugins' ) ) {
117
  $mu_plugins_raw = get_mu_plugins();
118
  foreach ( $mu_plugins_raw as $k => $v ) {
130
  }
131
  }
132
 
133
+ $keys = apply_filters( 'tribe-pue-install-keys', array() );
134
  //Obfuscate the License Keys for Security
135
  if ( is_array( $keys ) && ! empty( $keys ) ) {
136
+ $secure_keys = array();
137
  foreach ( $keys as $plugin => $license ) {
138
  $secure_keys[ $plugin ] = preg_replace( '/^(.{4}).*(.{4})$/', '$1' . str_repeat( '#', 32 ) . '$2', $license );
139
  }
145
  $server = explode( '/', reset( $server ) );
146
 
147
  //PHP Information
148
+ $php_info = array();
149
+ $php_vars = array(
150
  'max_execution_time',
151
  'memory_limit',
152
  'upload_max_filesize',
153
  'post_max_size',
154
  'display_errors',
155
  'log_errors',
156
+ );
157
 
158
  foreach ( $php_vars as $php_var ) {
159
  if ( isset( $wpdb->qm_php_vars ) && isset( $wpdb->qm_php_vars[ $php_var ] ) ) {
176
  }
177
 
178
  $site_url = get_site_url();
179
+ $systeminfo = array(
180
  'Home URL' => get_home_url(),
181
  'Site URL' => $site_url,
182
  'Site Language' => get_option( 'WPLANG' ) ? get_option( 'WPLANG' ) : esc_html__( 'English', 'tribe-common' ),
206
  'Week Starts On' => get_option( 'start_of_week' ),
207
  'Common Library Dir' => $GLOBALS['tribe-common-info']['dir'],
208
  'Common Library Version' => $GLOBALS['tribe-common-info']['version'],
209
+ );
210
 
211
  if ( $this->rewrite_rules_purged ) {
212
  $systeminfo['rewrite rules purged'] = esc_html__( 'Rewrite rules were purged on load of this help page. Chances are there is a rewrite rule flush occurring in a plugin or theme!', 'tribe-common' );
262
  } elseif ( is_array( $v ) && $is_numeric_array ) {
263
  $output .= sprintf( '<dd class="support-stats-array"><ul><li>%s</li></ul></dd>', join( '</li><li>', $v ) );
264
  } else {
265
+ $formatted_v = array();
266
  foreach ( $v as $obj_key => $obj_val ) {
267
  if ( in_array( $obj_key, $this->must_escape ) ) {
268
  $obj_val = esc_html( $obj_val );
287
  }
288
 
289
  /**
290
+ * Logs the occurence of rewrite rule purging
291
  */
292
  public function log_rewrite_rule_purge() {
293
  $this->rewrite_rules_purged = true;
315
  $checked = 'checked';
316
  }
317
 
318
+ $opt_in = '<p class="system-info"><input name="tribe_auto_sysinfo_opt_in" id="tribe_auto_sysinfo_opt_in" type="checkbox" value="optin" ' . esc_attr( $checked ) . '/><label for="tribe_auto_sysinfo_opt_in">' . esc_html__( 'Yes, automatically share my system information with the Modern Tribe support team', 'tribe-common' ) . '</label></p>';
319
+ $opt_in .= '<p class="tooltip description">' . esc_html__( 'Your system information will only be used by the Modern Tribe support team. All information is stored securely. We do not share this information with any third parties.', 'tribe-common' ) . '</p>';
320
  $opt_in .= '<p class="tribe-sysinfo-optin-msg"></p>';
321
 
322
  return $opt_in;
355
  public static function create_sysinfo_endpoint() {
356
  $optin_key = get_option( 'tribe_systeminfo_optin' );
357
  if ( $optin_key ) {
358
+ register_rest_route( 'tribe_events/v2', '/(?P<key>[a-z0-9\-]+)/sysinfo/', array(
359
+ 'methods' => 'GET',
360
+ 'callback' => array( 'Tribe__Support', 'sysinfo_query' ),
361
+ ) );
 
 
 
 
 
362
  }
363
  }
364
 
378
  update_option( 'tribe_systeminfo_optin', $optin_key );
379
 
380
  //Only Connect If a License Exists
381
+ $keys = apply_filters( 'tribe-pue-install-keys', array() );
382
  if ( is_array( $keys ) && ! empty( $keys ) ) {
383
  Tribe__Support::send_sysinfo_key( $optin_key );
384
  } else {
407
  */
408
  public static function send_sysinfo_key( $optin_key = null, $url = null, $remove = null, $pueadd = false ) {
409
 
410
+ $url = $url ? $url : urlencode( str_replace( array( 'http://', 'https://' ), '', get_site_url() ) );
411
 
412
  $teccom_url = 'https://theeventscalendar.com/';
413
 
common/src/Tribe/Support/Obfuscator.php CHANGED
@@ -6,14 +6,14 @@ class Tribe__Support__Obfuscator {
6
  /**
7
  * @var array
8
  */
9
- protected $prefixes = [];
10
 
11
  /**
12
  * Tribe__Support__Obfuscator constructor.
13
  *
14
  * @param array $prefixes
15
  */
16
- public function __construct( array $prefixes = [] ) {
17
  $this->prefixes = $prefixes;
18
  }
19
 
6
  /**
7
  * @var array
8
  */
9
+ protected $prefixes = array();
10
 
11
  /**
12
  * Tribe__Support__Obfuscator constructor.
13
  *
14
  * @param array $prefixes
15
  */
16
+ public function __construct( array $prefixes = array() ) {
17
  $this->prefixes = $prefixes;
18
  }
19
 
common/src/Tribe/Support/Template_Checker.php CHANGED
@@ -9,8 +9,9 @@ class Tribe__Support__Template_Checker {
9
  protected $plugin_views_dir = '';
10
  protected $theme_views_dir = '';
11
 
12
- protected $originals = [];
13
- protected $overrides = [];
 
14
 
15
  /**
16
  * Examine the plugin views (and optionally any theme overrides) and analyse
@@ -175,7 +176,7 @@ class Tribe__Support__Template_Checker {
175
  * @return array
176
  */
177
  public function get_versioned_views() {
178
- $versioned_views = [];
179
 
180
  foreach ( $this->originals as $key => $version ) {
181
  if ( ! empty( $version ) ) {
@@ -195,7 +196,7 @@ class Tribe__Support__Template_Checker {
195
  * @return array
196
  */
197
  public function get_views_tagged_this_release() {
198
- $currently_tagged_views = [];
199
 
200
  foreach ( $this->get_versioned_views() as $key => $version ) {
201
  if ( $version === $this->plugin_version ) {
@@ -225,7 +226,7 @@ class Tribe__Support__Template_Checker {
225
  * @return array
226
  */
227
  public function get_versioned_overrides() {
228
- $versioned_views = [];
229
 
230
  foreach ( $this->overrides as $key => $version ) {
231
  if ( ! empty( $version ) ) {
@@ -251,7 +252,7 @@ class Tribe__Support__Template_Checker {
251
  * @return array
252
  */
253
  public function get_outdated_overrides( $include_unknown = false ) {
254
- $outdated = [];
255
  $originals = $this->get_versioned_views();
256
 
257
  $overrides = $include_unknown
9
  protected $plugin_views_dir = '';
10
  protected $theme_views_dir = '';
11
 
12
+ protected $originals = array();
13
+ protected $overrides = array();
14
+
15
 
16
  /**
17
  * Examine the plugin views (and optionally any theme overrides) and analyse
176
  * @return array
177
  */
178
  public function get_versioned_views() {
179
+ $versioned_views = array();
180
 
181
  foreach ( $this->originals as $key => $version ) {
182
  if ( ! empty( $version ) ) {
196
  * @return array
197
  */
198
  public function get_views_tagged_this_release() {
199
+ $currently_tagged_views = array();
200
 
201
  foreach ( $this->get_versioned_views() as $key => $version ) {
202
  if ( $version === $this->plugin_version ) {
226
  * @return array
227
  */
228
  public function get_versioned_overrides() {
229
+ $versioned_views = array();
230
 
231
  foreach ( $this->overrides as $key => $version ) {
232
  if ( ! empty( $version ) ) {
252
  * @return array
253
  */
254
  public function get_outdated_overrides( $include_unknown = false ) {
255
+ $outdated = array();
256
  $originals = $this->get_versioned_views();
257
 
258
  $overrides = $include_unknown
common/src/Tribe/Support/Template_Checker_Report.php CHANGED
@@ -14,7 +14,7 @@ class Tribe__Support__Template_Checker_Report {
14
  *
15
  * @var array
16
  */
17
- protected static $plugin_reports = [];
18
 
19
  /**
20
  * Container for finished report.
@@ -53,7 +53,7 @@ class Tribe__Support__Template_Checker_Report {
53
  *
54
  * @var array $registered_template_systems
55
  */
56
- return apply_filters( 'tribe_support_registered_template_systems', [] );
57
  }
58
 
59
  /**
14
  *
15
  * @var array
16
  */
17
+ protected static $plugin_reports = array();
18
 
19
  /**
20
  * Container for finished report.
53
  *
54
  * @var array $registered_template_systems
55
  */
56
+ return apply_filters( 'tribe_support_registered_template_systems', array() );
57
  }
58
 
59
  /**
common/src/Tribe/Tabbed_View.php CHANGED
@@ -13,7 +13,7 @@ class Tribe__Tabbed_View {
13
  *
14
  * @var array An associative array in the [<slug> => <instance>] format.
15
  */
16
- protected $items = [];
17
 
18
  /**
19
  * The slug of the default tab
@@ -32,7 +32,7 @@ class Tribe__Tabbed_View {
32
  *
33
  * @var array|object
34
  */
35
- protected $data = [];
36
 
37
  /**
38
  * @var string
@@ -99,7 +99,7 @@ class Tribe__Tabbed_View {
99
  * @return Tribe__Tabbed_View__Tab[] An array of all the active and visible tabs.
100
  */
101
  public function get_visibles() {
102
- return array_filter( $this->get(), [ $this, 'is_tab_visible' ] );
103
  }
104
 
105
  /**
@@ -175,7 +175,7 @@ class Tribe__Tabbed_View {
175
  * @return null|array|object If we couldn't find the tab it will be null, if the slug is null will return all tabs
176
  */
177
  public function get( $slug = null ) {
178
- uasort( $this->items, [ $this, 'sort_by_priority' ] );
179
 
180
  if ( is_null( $slug ) ) {
181
  return $this->items;
@@ -295,7 +295,7 @@ class Tribe__Tabbed_View {
295
  * @return Tribe__Tabbed_View__Tab[]
296
  */
297
  public function get_tabs() {
298
- uasort( $this->items, [ $this, 'sort_by_priority' ] );
299
 
300
  return array_values( $this->items );
301
  }
@@ -332,9 +332,9 @@ class Tribe__Tabbed_View {
332
  return '';
333
  }
334
 
335
- $default_data = [
336
  'view' => $this,
337
- ];
338
 
339
  $data = array_merge( $default_data, (array) $this->data );
340
 
13
  *
14
  * @var array An associative array in the [<slug> => <instance>] format.
15
  */
16
+ protected $items = array();
17
 
18
  /**
19
  * The slug of the default tab
32
  *
33
  * @var array|object
34
  */
35
+ protected $data = array();
36
 
37
  /**
38
  * @var string
99
  * @return Tribe__Tabbed_View__Tab[] An array of all the active and visible tabs.
100
  */
101
  public function get_visibles() {
102
+ return array_filter( $this->get(), array( $this, 'is_tab_visible' ) );
103
  }
104
 
105
  /**
175
  * @return null|array|object If we couldn't find the tab it will be null, if the slug is null will return all tabs
176
  */
177
  public function get( $slug = null ) {
178
+ uasort( $this->items, array( $this, 'sort_by_priority' ) );
179
 
180
  if ( is_null( $slug ) ) {
181
  return $this->items;
295
  * @return Tribe__Tabbed_View__Tab[]
296
  */
297
  public function get_tabs() {
298
+ uasort( $this->items, array( $this, 'sort_by_priority' ) );
299
 
300
  return array_values( $this->items );
301
  }
332
  return '';
333
  }
334
 
335
+ $default_data = array(
336
  'view' => $this,
337
+ );
338
 
339
  $data = array_merge( $default_data, (array) $this->data );
340
 
common/src/Tribe/Tabbed_View/Tab.php CHANGED
@@ -20,7 +20,7 @@ class Tribe__Tabbed_View__Tab {
20
  *
21
  * @var array|object
22
  */
23
- protected $data = [];
24
 
25
  /**
26
  * The template file that should be used to render the tab.
@@ -164,9 +164,9 @@ class Tribe__Tabbed_View__Tab {
164
  return '';
165
  }
166
 
167
- $default_data = [
168
  'tab' => $this,
169
- ];
170
 
171
  $data = array_merge( $default_data, (array) $this->data );
172
 
@@ -189,14 +189,14 @@ class Tribe__Tabbed_View__Tab {
189
  *
190
  * @return string
191
  */
192
- public function get_url( $args = [], $relative = false ) {
193
  if ( ! empty( $this->url ) ) {
194
  return $this->url;
195
  }
196
 
197
- $defaults = [
198
  'tab' => $this->get_slug(),
199
- ];
200
 
201
  // Allow the link to be "changed" on the fly
202
  $args = wp_parse_args( $args, $defaults );
20
  *
21
  * @var array|object
22
  */
23
+ protected $data = array();
24
 
25
  /**
26
  * The template file that should be used to render the tab.
164
  return '';
165
  }
166
 
167
+ $default_data = array(
168
  'tab' => $this,
169
+ );
170
 
171
  $data = array_merge( $default_data, (array) $this->data );
172
 
189
  *
190
  * @return string
191
  */
192
+ public function get_url( $args = array(), $relative = false ) {
193
  if ( ! empty( $this->url ) ) {
194
  return $this->url;
195
  }
196
 
197
+ $defaults = array(
198
  'tab' => $this->get_slug(),
199
+ );
200
 
201
  // Allow the link to be "changed" on the fly
202
  $args = wp_parse_args( $args, $defaults );
common/src/Tribe/Template.php CHANGED
@@ -1,8 +1,5 @@
1
  <?php
2
 
3
- use Tribe\Utils\Paths;
4
- use Tribe\Utils\Strings;
5
-
6
  class Tribe__Template {
7
  /**
8
  * The folders into which we will look for the template.
@@ -11,7 +8,7 @@ class Tribe__Template {
11
  *
12
  * @var array
13
  */
14
- protected $folder = [];
15
 
16
  /**
17
  * The origin class for the plugin where the template lives
@@ -38,7 +35,7 @@ class Tribe__Template {
38
  *
39
  * @var array
40
  */
41
- protected $global = [];
42
 
43
  /**
44
  * Used for finding templates for public templates on themes inside of a folder.
@@ -58,15 +55,6 @@ class Tribe__Template {
58
  */
59
  protected $template_context_extract = false;
60
 
61
- /**
62
- * Current template hook name.
63
- *
64
- * @since 4.12.1
65
- *
66
- * @var string|null
67
- */
68
- protected $template_current_hook_name;
69
-
70
  /**
71
  * Base template for where to look for template
72
  *
@@ -94,25 +82,6 @@ class Tribe__Template {
94
  */
95
  protected $template_current_file_path;
96
 
97
- /**
98
- * Whether to look for template files in common or not; defaults to true.
99
- *
100
- * @since 4.12.10
101
- *
102
- * @var bool
103
- */
104
- protected $common_lookup = true;
105
-
106
- /**
107
- * A map of aliases to add a rewritten version of the paths to the template lists.
108
- * The map has format `original => alias`.
109
- *
110
- * @since 4.12.10
111
- *
112
- * @var array<string,string>
113
- */
114
- protected $aliases = [];
115
-
116
  /**
117
  * Configures the class origin plugin path
118
  *
@@ -214,17 +183,6 @@ class Tribe__Template {
214
  return $this;
215
  }
216
 
217
- /**
218
- * Gets in this instance of the template engine whether we are looking public folders like themes.
219
- *
220
- * @since 4.12.1
221
- *
222
- * @return bool Whether we are looking into theme folders.
223
- */
224
- public function get_template_folder_lookup() {
225
- return $this->template_folder_lookup;
226
- }
227
-
228
  /**
229
  * Configures the class global context
230
  *
@@ -234,7 +192,7 @@ class Tribe__Template {
234
  *
235
  * @return self
236
  */
237
- public function add_template_globals( $context = [] ) {
238
  // Cast as Array merge and save
239
  $this->global = wp_parse_args( (array) $context, $this->global );
240
 
@@ -258,43 +216,17 @@ class Tribe__Template {
258
  }
259
 
260
  /**
261
- * Set the current hook name for the template include.
262
- *
263
- * @since 4.12.1
264
- *
265
- * @param string $value Which value will be saved as the current hook name.
266
- *
267
- * @return self Allow daisy-chaining.
268
- */
269
- public function set_template_current_hook_name( $value ) {
270
- $this->template_current_hook_name = (string) $value;
271
-
272
- return $this;
273
- }
274
-
275
- /**
276
- * Gets the hook name for the current template setup.
277
- *
278
- * @since 4.12.1
279
- *
280
- * @return string Hook name currently set on the class.
281
- */
282
- public function get_template_current_hook_name() {
283
- return $this->template_current_hook_name;
284
- }
285
-
286
- /**
287
- * Sets an Index inside of the global or local context.
288
- * Final to prevent extending the class when the `get` already exists on the child class.
289
- *
290
- * @see Tribe__Utils__Array::set()
291
  *
292
  * @since 4.6.2
293
  *
294
- * @param array|string $index Specify each nested index in order.
295
- * Example: array( 'lvl1', 'lvl2' );
296
- * @param mixed $default Default value if the search finds nothing.
297
- * @param boolean $is_local Use the Local or Global context.
 
 
298
  *
299
  * @return mixed The value of the specified index or the default if not found.
300
  */
@@ -307,19 +239,18 @@ class Tribe__Template {
307
 
308
  /**
309
  * Allows filtering the the getting of Context variables, also short circuiting
310
- * Following the same structure as WP Core
311
  *
312
  * @since 4.6.2
313
  *
314
- * @param mixed $value The value that will be filtered.
315
- * @param array|string $index Specify each nested index in order.
316
- * Example: array( 'lvl1', 'lvl2' );
317
- * @param mixed $default Default value if the search finds nothing.
318
- * @param boolean $is_local Use the Local or Global context.
319
- * @param self $template Current instance of the Tribe__Template.
320
  */
321
  $value = apply_filters( 'tribe_template_context_get', null, $index, $default, $is_local, $this );
322
-
323
  if ( null !== $value ) {
324
  return $value;
325
  }
@@ -508,30 +439,18 @@ class Tribe__Template {
508
  * Fetches the folders in which we will look for a given file
509
  *
510
  * @since 4.7.20
511
- * @since 4.12.10 Add support for common lookup.
512
  *
513
- * @return array<string,array> A list of possible locations for the template file.
514
  */
515
  protected function get_template_path_list() {
516
  $folders = [];
517
 
518
  $folders['plugin'] = [
519
- 'id' => 'plugin',
520
- 'priority' => 20,
521
- 'path' => $this->get_template_plugin_path(),
522
  ];
523
 
524
- if ( $this->common_lookup ) {
525
- // After the plugin (due to priority) look into Common too.
526
- $folders['common'] = [
527
- 'id' => 'common',
528
- 'priority' => 100,
529
- 'path' => $this->get_template_common_path(),
530
- ];
531
- }
532
-
533
- $folders = array_merge( $folders, $this->apply_aliases( $folders ) );
534
-
535
  /**
536
  * Allows filtering of the list of folders in which we will look for the
537
  * template given.
@@ -613,7 +532,7 @@ class Tribe__Template {
613
  }
614
 
615
  // Build the File Path
616
- $file = Paths::merge( $folder['path'], $name );
617
 
618
  // Append the Extension to the file path
619
  $file .= '.php';
@@ -626,7 +545,7 @@ class Tribe__Template {
626
  }
627
  }
628
 
629
- if ( $this->get_template_folder_lookup() ) {
630
  $theme_folders = $this->get_template_theme_path_list( $namespace );
631
 
632
  foreach ( $theme_folders as $folder ) {
@@ -643,7 +562,6 @@ class Tribe__Template {
643
  // Skip non-existent files
644
  if ( file_exists( $file ) ) {
645
  $found_file = $file;
646
- break;
647
  }
648
  }
649
  }
@@ -666,98 +584,6 @@ class Tribe__Template {
666
  return false;
667
  }
668
 
669
- /**
670
- * Runs the entry point hooks and filters.
671
- *
672
- * @param string $entry_point_name The name of the entry point.
673
- * @param boolean $echo If we should also print the entry point content.
674
- *
675
- * @return null|string `null` if an entry point is disabled or the entry point HTML.
676
- */
677
- public function do_entry_point( $entry_point_name, $echo = true ) {
678
- $hook_name = $this->get_template_current_hook_name();
679
-
680
- /**
681
- * Filter if the entry points are enabled.
682
- *
683
- * @since 4.12.1
684
- *
685
- * @param boolean $is_enabled Is entry_point enabled.
686
- * @param string $hook_name For which template include this entry point belongs.
687
- * @param string $entry_point_name Which entry point specifically we are triggering.
688
- * @param self $template Current instance of the template class doing this entry point.
689
- */
690
- $is_entry_point_enabled = apply_filters( 'tribe_template_entry_point_is_enabled', true, $hook_name, $entry_point_name, $this );
691
-
692
- if ( ! $is_entry_point_enabled ) {
693
- return null;
694
- }
695
-
696
- ob_start();
697
-
698
- if ( has_action( "tribe_template_entry_point:{$hook_name}" ) ) {
699
- /**
700
- * Generic entry point action for the current template.
701
- *
702
- * @since 4.12.1
703
- *
704
- * @param string $hook_name For which template include this entry point belongs.
705
- * @param string $entry_point_name Which entry point specifically we are triggering.
706
- * @param self $template Current instance of the template class doing this entry point.
707
- */
708
- do_action( "tribe_template_entry_point:{$hook_name}", $hook_name, $entry_point_name, $this );
709
- }
710
-
711
- if ( has_action( "tribe_template_entry_point:{$hook_name}:{$entry_point_name}" ) ) {
712
- /**
713
- * Specific named entry point action called.
714
- *
715
- * @since 4.12.1
716
- *
717
- * @param string $hook_name For which template include this entry point belongs.
718
- * @param string $entry_point_name Which entry point specifically we are triggering.
719
- * @param self $template Current instance of the template class doing this entry point.
720
- */
721
- do_action( "tribe_template_entry_point:{$hook_name}:{$entry_point_name}", $hook_name, $entry_point_name, $this );
722
- }
723
-
724
- $html = ob_get_clean();
725
-
726
- if ( has_filter( "tribe_template_entry_point_html:{$hook_name}" ) ) {
727
- /**
728
- * Generic entry point action for the current template.
729
- *
730
- * @since 4.12.1
731
- *
732
- * @param string $html HTML returned and/or echoed for this for this entry point.
733
- * @param string $hook_name For which template include this entry point belongs.
734
- * @param string $entry_point_name Which entry point specifically we are triggering.
735
- * @param self $template Current instance of the template class doing this entry point.
736
- */
737
- $html = apply_filters( "tribe_template_entry_point_html:{$hook_name}", $html, $hook_name, $entry_point_name, $this );
738
- }
739
-
740
- if ( has_filter( "tribe_template_entry_point_html:{$hook_name}:{$entry_point_name}" ) ) {
741
- /**
742
- * Specific named entry point action called.
743
- *
744
- * @since 4.12.1
745
- *
746
- * @param string $html HTML returned and/or echoed for this for this entry point.
747
- * @param string $hook_name For which template include this entry point belongs.
748
- * @param string $entry_point_name Which entry point specifically we are triggering.
749
- * @param self $template Current instance of the template class doing this entry point.
750
- */
751
- $html = apply_filters( "tribe_template_entry_point_html:{$hook_name}:{$entry_point_name}", $html, $hook_name, $entry_point_name, $this );
752
- }
753
-
754
- if ( $echo ) {
755
- echo $html;
756
- }
757
-
758
- return $html;
759
- }
760
-
761
  /**
762
  * A very simple method to include a Template, allowing filtering and additions using hooks.
763
  *
@@ -846,13 +672,9 @@ class Tribe__Template {
846
  $namespace = array_merge( $origin_folder_appendix, $legacy_namespace );
847
  }
848
 
849
- // Setup the Hook name.
850
  $legacy_hook_name = implode( '/', $legacy_namespace );
851
  $hook_name = implode( '/', $namespace );
852
- $prev_hook_name = $this->get_template_current_hook_name();
853
-
854
- // Store the current hook name for the purposes of entry-points.
855
- $this->set_template_current_hook_name( $hook_name );
856
 
857
  /**
858
  * Allow users to filter the HTML before rendering
@@ -881,95 +703,164 @@ class Tribe__Template {
881
  * @param array $name Template name
882
  * @param self $template Current instance of the Tribe__Template
883
  */
884
- $pre_html = apply_filters( "tribe_template_pre_html:{$hook_name}", $pre_html, $file, $name, $this );
885
 
886
  if ( null !== $pre_html ) {
887
  return $pre_html;
888
  }
889
 
 
 
890
  // Merges the local data passed to template to the global scope
891
  $this->merge_context( $context, $file, $name );
892
 
893
- $before_include_html = $this->actions_before_template( $file, $name, $hook_name );
894
- $before_include_html = $this->filter_template_before_include_html( $before_include_html, $file, $name, $hook_name );
895
-
896
- $include_html = $this->template_safe_include( $file );
897
- $include_html = $this->filter_template_include_html( $include_html, $file, $name, $hook_name );
898
-
899
- $after_include_html = $this->actions_after_template( $file, $name, $hook_name );
900
- $after_include_html = $this->filter_template_after_include_html( $after_include_html, $file, $name, $hook_name );
901
-
902
- // Only fetch the contents after the action
903
- $html = $before_include_html . $include_html . $after_include_html;
904
-
905
- $html = $this->filter_template_html( $html, $file, $name, $hook_name );
906
-
907
- // Tries to hook container entry points in the HTML.
908
- $html = $this->template_hook_container_entry_points( $html );
909
-
910
- if ( $echo ) {
911
- echo $html;
912
- }
913
 
914
- // Revert the current hook name.
915
- $this->set_template_current_hook_name( $prev_hook_name );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
916
 
917
- return $html;
918
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
919
 
920
- /**
921
- * Run the hooks for the container entry points.
922
- *
923
- * @since 4.12.1
924
- *
925
- * @param string $html The html of the current template.
926
- *
927
- * @return string|false Either the final entry point content HTML or `false` if no entry point could be found or set to false.
928
- */
929
- private function template_hook_container_entry_points( $html ) {
930
 
931
- $matches = $this->get_entry_point_matches( $html );
932
- $html_matches = $matches[0];
 
 
 
 
 
 
 
 
 
933
 
934
- if ( 0 === count( $html_matches ) ) {
935
- return $html;
936
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
937
 
938
- $html_tags = $matches['tag'];
939
- $html_tags_ends = $matches['is_end'];
 
 
 
 
 
 
 
 
 
 
 
 
 
940
 
941
- // Get first and last tags.
942
- $first_tag = reset( $html_tags );
943
- $last_tag = end( $html_tags );
944
 
945
- // Determine if first last tags are tag ends.
946
- $first_tag_is_end = '/' === reset( $html_tags_ends );
947
- $last_tag_is_end = '/' === end( $html_tags_ends );
 
 
 
 
 
 
 
 
 
948
 
949
- // When first and last tag are not the same, bail.
950
- if ( $first_tag !== $last_tag ) {
951
- return $html;
952
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
953
 
954
- // If the first tag is a html tag end, bail.
955
- if ( $first_tag_is_end ) {
956
- return $html;
957
- }
 
 
 
 
 
 
 
 
 
 
 
 
958
 
959
- // If the last tag is not and html tag end, bail.
960
- if ( ! $last_tag_is_end ) {
961
- return $html;
962
  }
963
 
964
- $first_tag_html = reset( $html_matches );
965
- $last_tag_html = end( $html_matches );
966
-
967
- $open_container_entry_point_html = $this->do_entry_point( 'after_container_open', false );
968
- $close_container_entry_point_html = $this->do_entry_point( 'before_container_close', false );
969
-
970
- $html = Strings::replace_first( $first_tag_html, $first_tag_html . $open_container_entry_point_html, $html );
971
- $html = Strings::replace_last( $last_tag_html, $close_container_entry_point_html . $last_tag_html, $html );
972
-
973
  return $html;
974
  }
975
 
@@ -996,10 +887,7 @@ class Tribe__Template {
996
  $namespace_map = (array) apply_filters( 'tribe_template_origin_namespace_map', [], $path, $this );
997
 
998
  foreach ( $namespace_map as $namespace => $contains_string ) {
999
- // Normalize the trailing slash to the current OS directory separator.
1000
- $contains_string = rtrim( $contains_string, '\\/' ) . DIRECTORY_SEPARATOR;
1001
-
1002
- // Skip when we don't have the namespace path.
1003
  if ( false === strpos( $path, $contains_string ) ) {
1004
  continue;
1005
  }
@@ -1028,15 +916,14 @@ class Tribe__Template {
1028
  *
1029
  * @param string $file Which file will be included with safe context.
1030
  *
1031
- * @return string Contents of the included file.
1032
  */
1033
  public function template_safe_include( $file ) {
1034
- ob_start();
1035
  // We use this instance variable to prevent collisions.
1036
  $this->template_current_file_path = $file;
1037
  unset( $file );
1038
 
1039
- // Only do this if really needed (by default it won't).
1040
  if ( true === $this->template_context_extract && ! empty( $this->context ) ) {
1041
  // Make any provided variables available in the template variable scope.
1042
  extract( $this->context ); // @phpcs:ignore
@@ -1046,7 +933,6 @@ class Tribe__Template {
1046
 
1047
  // After the include we reset the variable.
1048
  unset( $this->template_current_file_path );
1049
- return ob_get_clean();
1050
  }
1051
 
1052
  /**
@@ -1099,370 +985,4 @@ class Tribe__Template {
1099
  public function get_values() {
1100
  return array_merge( $this->get_global_values(), $this->get_local_values() );
1101
  }
1102
-
1103
- /**
1104
- * Get the Entry Point Matches.
1105
- *
1106
- * @since 4.12.1
1107
- *
1108
- * @param string $html The html of the current template.
1109
- *
1110
- * @return array An array of matches from the regular expression.
1111
- */
1112
- private function get_entry_point_matches( $html ) {
1113
- $regexp = '/<(?<is_end>\/)*(?<tag>[A-Z0-9]*)(?:\b)*[^>]*>/mi';
1114
-
1115
- preg_match_all( $regexp, $html, $matches );
1116
-
1117
- return $matches;
1118
- }
1119
-
1120
- /**
1121
- * Fetches the path for locating files in the Common folder part of the plugin that is currently providing it.
1122
- *
1123
- * Note: the Common path will be dependent on the version that is loaded from the plugin that is bundling it.
1124
- * E.g. if both TEC and ET are active (both will bundle Common) and the ET version of Common has been loaded as
1125
- * most recent and the ET version of Common does not have a template file, then the template file will not be found.
1126
- * This will allow versioning the existence and nature of the template files part of common.
1127
- *
1128
- * @since 4.12.10
1129
- *
1130
- * @return string The absolute path, with no guarantee of its existence, to the Common version of the template file.
1131
- */
1132
- protected function get_template_common_path() {
1133
- // As base path use the current location of Common, remove the trailing slash.
1134
- $common_abs_path = untrailingslashit( Tribe__Main::instance()->plugin_path );
1135
- $path = array_merge( (array) $common_abs_path, $this->folder );
1136
-
1137
- // Implode to avoid problems on Windows hosts.
1138
- $path = implode( DIRECTORY_SEPARATOR, $path );
1139
-
1140
- /**
1141
- * Allows filtering the path to a template provided by Common.
1142
- *
1143
- * @since 4.12.10
1144
- *
1145
- * @param string $path Complete path to include the base folder of common part of the plugin.
1146
- * @param self $template Current instance of the Tribe__Template.
1147
- */
1148
- return apply_filters( 'tribe_template_common_path', $path, $this );
1149
- }
1150
-
1151
- /**
1152
- * Sets the aliases the template should use.
1153
- *
1154
- * @since 4.12.10
1155
- *
1156
- * @param array<string,string> $aliases A map of aliases that should be used to add lookup locations, in the format
1157
- * `[ original => alias ]`;
1158
- *
1159
- * @return static This instance, for method chaining.
1160
- */
1161
- public function set_aliases( array $aliases = [] ) {
1162
- $this->aliases = $aliases;
1163
-
1164
- return $this;
1165
- }
1166
-
1167
- /**
1168
- * Applies the template path aliases, if any, to a list of folders.
1169
- *
1170
- * @since 4.12.10
1171
- *
1172
- * @param array<string,array> $folders The list of folder to apply the aliases to, if any.
1173
- *
1174
- * @return array<string,array> The list of new folder entries to add to the folders, in the same input format of the
1175
- * folders.
1176
- */
1177
- protected function apply_aliases( array $folders ) {
1178
- $new_folders = [];
1179
- if ( ! empty( $this->aliases ) ) {
1180
- foreach ( $folders as $folder_name => $folder ) {
1181
- $original_path = $folder['path'];
1182
- foreach ( $this->aliases as $original => $alias ) {
1183
- // Since an alias could be a path, we take care to handle it with the current directory separator.
1184
- list( $normalized_original, $normalized_alias ) = str_replace(['\\','/'] , DIRECTORY_SEPARATOR, [ $original, $alias ] );
1185
- if ( false === strpos( $original_path, $normalized_original ) ) {
1186
- continue;
1187
- }
1188
-
1189
- $alias_path = str_replace( $normalized_original, $normalized_alias, $original_path );
1190
-
1191
- $new = $folder;
1192
- $new['path'] = $alias_path;
1193
- $new['priority'] = (int) $new['priority'] + 1;
1194
- $new_folders[ $folder_name . '_' . $alias ] = $new;
1195
- }
1196
- }
1197
- }
1198
- return $new_folders;
1199
- }
1200
-
1201
-
1202
- /**
1203
- * Filters the full HTML for the template.
1204
- *
1205
- * @since 4.13.0
1206
- *
1207
- * @param string $html The final HTML.
1208
- * @param string $file Complete path to include the PHP File.
1209
- * @param array $name Template name.
1210
- * @param string $hook_name The hook used to create the filter by name.
1211
- *
1212
- * @return string HTML after filtering.
1213
- */
1214
- protected function filter_template_html( $html, $file, $name, $hook_name ) {
1215
- /**
1216
- * Allow users to filter the final HTML.
1217
- *
1218
- * @since 4.6.2
1219
- * @since 4.7.20 The $name param no longer contains the extension
1220
- *
1221
- * @param string $html The final HTML.
1222
- * @param string $file Complete path to include the PHP File.
1223
- * @param array $name Template name.
1224
- * @param self $template Current instance of the Tribe__Template.
1225
- */
1226
- $html = apply_filters( 'tribe_template_html', $html, $file, $name, $this );
1227
-
1228
- /**
1229
- * Allow users to filter the final HTML by the name.
1230
- *
1231
- * E.g.:
1232
- * `tribe_template_html:events/blocks/parts/details`
1233
- * `tribe_template_html:events/embed`
1234
- * `tribe_template_html:tickets/login-to-purchase`
1235
- *
1236
- * @since 4.7.20
1237
- *
1238
- * @param string $html The final HTML.
1239
- * @param string $file Complete path to include the PHP File.
1240
- * @param array $name Template name.
1241
- * @param self $template Current instance of the Tribe__Template.
1242
- */
1243
- $html = apply_filters( "tribe_template_html:{$hook_name}", $html, $file, $name, $this );
1244
-
1245
- return $html;
1246
- }
1247
-
1248
- /**
1249
- * Filters the HTML for the Before include actions.
1250
- *
1251
- * @since 4.13.0
1252
- *
1253
- * @param string $html The final HTML.
1254
- * @param string $file Complete path to include the PHP File.
1255
- * @param array $name Template name.
1256
- * @param string $hook_name The hook used to create the filter by name.
1257
- *
1258
- * @return string HTML after filtering.
1259
- */
1260
- protected function filter_template_before_include_html( $html, $file, $name, $hook_name ) {
1261
- /**
1262
- * Allow users to filter the Before include actions.
1263
- *
1264
- * @since 4.13.0
1265
- *
1266
- * @param string $html The final HTML.
1267
- * @param string $file Complete path to include the PHP File.
1268
- * @param array $name Template name.
1269
- * @param self $template Current instance of the Tribe__Template.
1270
- */
1271
- $html = apply_filters( 'tribe_template_before_include_html', $html, $file, $name, $this );
1272
-
1273
- /**
1274
- * Allow users to filter the Before include actions by name.
1275
- *
1276
- * E.g.:
1277
- * `tribe_template_before_include_html:events/blocks/parts/details`
1278
- * `tribe_template_before_include_html:events/embed`
1279
- * `tribe_template_before_include_html:tickets/login-to-purchase`
1280
- *
1281
- * @since 4.13.0
1282
- *
1283
- * @param string $html The final HTML.
1284
- * @param string $file Complete path to include the PHP File.
1285
- * @param array $name Template name.
1286
- * @param self $template Current instance of the Tribe__Template.
1287
- */
1288
- $html = apply_filters( "tribe_template_before_include_html:{$hook_name}", $html, $file, $name, $this );
1289
-
1290
- return $html;
1291
- }
1292
-
1293
- /**
1294
- * Filters the HTML for the PHP safe include.
1295
- *
1296
- * @since 4.13.0
1297
- *
1298
- * @param string $html The final HTML.
1299
- * @param string $file Complete path to include the PHP File.
1300
- * @param array $name Template name.
1301
- * @param string $hook_name The hook used to create the filter by name.
1302
- *
1303
- * @return string HTML after filtering.
1304
- */
1305
- protected function filter_template_include_html( $html, $file, $name, $hook_name ) {
1306
- /**
1307
- * Allow users to filter the PHP template include actions.
1308
- *
1309
- * @since 4.13.0
1310
- *
1311
- * @param string $html The final HTML.
1312
- * @param string $file Complete path to include the PHP File.
1313
- * @param array $name Template name.
1314
- * @param self $template Current instance of the Tribe__Template.
1315
- */
1316
- $html = apply_filters( 'tribe_template_include_html', $html, $file, $name, $this );
1317
-
1318
- /**
1319
- * Allow users to filter the PHP template include actions by name.
1320
- *
1321
- * E.g.:
1322
- * `tribe_template_include_html:events/blocks/parts/details`
1323
- * `tribe_template_include_html:events/embed`
1324
- * `tribe_template_include_html:tickets/login-to-purchase`
1325
- *
1326
- * @since 4.13.0
1327
- *
1328
- * @param string $html The final HTML.
1329
- * @param string $file Complete path to include the PHP File.
1330
- * @param array $name Template name.
1331
- * @param self $template Current instance of the Tribe__Template.
1332
- */
1333
- $html = apply_filters( "tribe_template_include_html:{$hook_name}", $html, $file, $name, $this );
1334
-
1335
- return $html;
1336
- }
1337
-
1338
- /**
1339
- * Filters the HTML for the after include actions.
1340
- *
1341
- * @since 4.13.0
1342
- *
1343
- * @param string $html The final HTML.
1344
- * @param string $file Complete path to include the PHP File.
1345
- * @param array $name Template name.
1346
- * @param string $hook_name The hook used to create the filter by name.
1347
- *
1348
- * @return string HTML after filtering.
1349
- */
1350
- protected function filter_template_after_include_html( $html, $file, $name, $hook_name ) {
1351
- /**
1352
- * Allow users to filter the after include actions.
1353
- *
1354
- * @since 4.13.0
1355
- *
1356
- * @param string $html The final HTML.
1357
- * @param string $file Complete path to include the PHP File.
1358
- * @param array $name Template name.
1359
- * @param self $template Current instance of the Tribe__Template.
1360
- */
1361
- $html = apply_filters( 'tribe_template_after_include_html', $html, $file, $name, $this );
1362
-
1363
- /**
1364
- * Allow users to filter the after include actions by name.
1365
- *
1366
- * E.g.:
1367
- * `tribe_template_after_include_html:events/blocks/parts/details`
1368
- * `tribe_template_after_include_html:events/embed`
1369
- * `tribe_template_after_include_html:tickets/login-to-purchase`
1370
- *
1371
- * @since 4.13.0
1372
- *
1373
- * @param string $html The final HTML.
1374
- * @param string $file Complete path to include the PHP File.
1375
- * @param array $name Template name.
1376
- * @param self $template Current instance of the Tribe__Template.
1377
- */
1378
- $html = apply_filters( "tribe_template_after_include_html:{$hook_name}", $html, $file, $name, $this );
1379
-
1380
- return $html;
1381
- }
1382
-
1383
- /**
1384
- * Fires of actions before including the template.
1385
- *
1386
- * @since 4.13.0
1387
- *
1388
- * @param string $file Complete path to include the PHP File.
1389
- * @param array $name Template name.
1390
- * @param string $hook_name The hook used to create the filter by name.
1391
- *
1392
- * @return string HTML printed by the before actions.
1393
- */
1394
- protected function actions_before_template( $file, $name, $hook_name ) {
1395
- ob_start();
1396
-
1397
- /**
1398
- * Fires an Action before including the template file
1399
- *
1400
- * @since 4.13.0
1401
- *
1402
- * @param string $file Complete path to include the PHP File
1403
- * @param array $name Template name
1404
- * @param self $template Current instance of the Tribe__Template
1405
- */
1406
- do_action( 'tribe_template_before_include', $file, $name, $this );
1407
-
1408
- /**
1409
- * Fires an Action for a given template name before including the template file,
1410
- *
1411
- * E.g.:
1412
- * `tribe_template_before_include:events/blocks/parts/details`
1413
- * `tribe_template_before_include:events/embed`
1414
- * `tribe_template_before_include:tickets/login-to-purchase`
1415
- *
1416
- * @since 4.13.0
1417
- *
1418
- * @param string $file Complete path to include the PHP File.
1419
- * @param array $name Template name.
1420
- * @param self $template Current instance of the Tribe__Template.
1421
- */
1422
- do_action( "tribe_template_before_include:{$hook_name}", $file, $name, $this );
1423
-
1424
- return ob_get_clean();
1425
- }
1426
-
1427
- /**
1428
- * Fires of actions after including the template.
1429
- *
1430
- * @since 4.13.0
1431
- *
1432
- * @param string $file Complete path to include the PHP File.
1433
- * @param array $name Template name.
1434
- * @param string $hook_name The hook used to create the filter by name.
1435
- *
1436
- * @return string HTML printed by the after actions.
1437
- */
1438
- protected function actions_after_template( $file, $name, $hook_name ) {
1439
- ob_start();
1440
- /**
1441
- * Fires an Action after including the template file.
1442
- *
1443
- * @since 4.13.0
1444
- *
1445
- * @param string $file Complete path to include the PHP File.
1446
- * @param array $name Template name.
1447
- * @param self $template Current instance of the Tribe__Template.
1448
- */
1449
- do_action( 'tribe_template_after_include', $file, $name, $this );
1450
-
1451
- /**
1452
- * Fires an Action for a given template name after including the template file.
1453
- *
1454
- * E.g.:
1455
- * `tribe_template_after_include:events/blocks/parts/details`
1456
- * `tribe_template_after_include:events/embed`
1457
- * `tribe_template_after_include:tickets/login-to-purchase`
1458
- *
1459
- * @since 4.13.0
1460
- *
1461
- * @param string $file Complete path to include the PHP File.
1462
- * @param array $name Template name.
1463
- * @param self $template Current instance of the Tribe__Template.
1464
- */
1465
- do_action( "tribe_template_after_include:{$hook_name}", $file, $name, $this );
1466
- return ob_get_clean();
1467
- }
1468
  }
1
  <?php
2
 
 
 
 
3
  class Tribe__Template {
4
  /**
5
  * The folders into which we will look for the template.
8
  *
9
  * @var array
10
  */
11
+ protected $folder = array();
12
 
13
  /**
14
  * The origin class for the plugin where the template lives
35
  *
36
  * @var array
37
  */
38
+ protected $global = array();
39
 
40
  /**
41
  * Used for finding templates for public templates on themes inside of a folder.
55
  */
56
  protected $template_context_extract = false;
57
 
 
 
 
 
 
 
 
 
 
58
  /**
59
  * Base template for where to look for template
60
  *
82
  */
83
  protected $template_current_file_path;
84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  /**
86
  * Configures the class origin plugin path
87
  *
183
  return $this;
184
  }
185
 
 
 
 
 
 
 
 
 
 
 
 
186
  /**
187
  * Configures the class global context
188
  *
192
  *
193
  * @return self
194
  */
195
+ public function add_template_globals( $context = array() ) {
196
  // Cast as Array merge and save
197
  $this->global = wp_parse_args( (array) $context, $this->global );
198
 
216
  }
217
 
218
  /**
219
+ * Sets a Index inside of the global or local context
220
+ * Final to prevent extending the class when the `get` already exists on the child class
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  *
222
  * @since 4.6.2
223
  *
224
+ * @see Tribe__Utils__Array::set
225
+ *
226
+ * @param array $index Specify each nested index in order.
227
+ * Example: array( 'lvl1', 'lvl2' );
228
+ * @param mixed $default Default value if the search finds nothing.
229
+ * @param boolean $is_local Use the Local or Global context
230
  *
231
  * @return mixed The value of the specified index or the default if not found.
232
  */
239
 
240
  /**
241
  * Allows filtering the the getting of Context variables, also short circuiting
242
+ * Following the same strucuture as WP Core
243
  *
244
  * @since 4.6.2
245
  *
246
+ * @param mixed $value The value that will be filtered
247
+ * @param array $index Specify each nested index in order.
248
+ * Example: array( 'lvl1', 'lvl2' );
249
+ * @param mixed $default Default value if the search finds nothing.
250
+ * @param boolean $is_local Use the Local or Global context
251
+ * @param self $template Current instance of the Tribe__Template
252
  */
253
  $value = apply_filters( 'tribe_template_context_get', null, $index, $default, $is_local, $this );
 
254
  if ( null !== $value ) {
255
  return $value;
256
  }
439
  * Fetches the folders in which we will look for a given file
440
  *
441
  * @since 4.7.20
 
442
  *
443
+ * @return array
444
  */
445
  protected function get_template_path_list() {
446
  $folders = [];
447
 
448
  $folders['plugin'] = [
449
+ 'id' => 'plugin',
450
+ 'priority' => 20,
451
+ 'path' => $this->get_template_plugin_path(),
452
  ];
453
 
 
 
 
 
 
 
 
 
 
 
 
454
  /**
455
  * Allows filtering of the list of folders in which we will look for the
456
  * template given.
532
  }
533
 
534
  // Build the File Path
535
+ $file = implode( DIRECTORY_SEPARATOR, array_merge( (array) $folder['path'], $name ) );
536
 
537
  // Append the Extension to the file path
538
  $file .= '.php';
545
  }
546
  }
547
 
548
+ if ( $this->template_folder_lookup ) {
549
  $theme_folders = $this->get_template_theme_path_list( $namespace );
550
 
551
  foreach ( $theme_folders as $folder ) {
562
  // Skip non-existent files
563
  if ( file_exists( $file ) ) {
564
  $found_file = $file;
 
565
  }
566
  }
567
  }
584
  return false;
585
  }
586
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
587
  /**
588
  * A very simple method to include a Template, allowing filtering and additions using hooks.
589
  *
672
  $namespace = array_merge( $origin_folder_appendix, $legacy_namespace );
673
  }
674
 
675
+ // Setup the Hook name
676
  $legacy_hook_name = implode( '/', $legacy_namespace );
677
  $hook_name = implode( '/', $namespace );
 
 
 
 
678
 
679
  /**
680
  * Allow users to filter the HTML before rendering
703
  * @param array $name Template name
704
  * @param self $template Current instance of the Tribe__Template
705
  */
706
+ $pre_html = apply_filters( "tribe_template_pre_html:$hook_name", $pre_html, $file, $name, $this );
707
 
708
  if ( null !== $pre_html ) {
709
  return $pre_html;
710
  }
711
 
712
+ ob_start();
713
+
714
  // Merges the local data passed to template to the global scope
715
  $this->merge_context( $context, $file, $name );
716
 
717
+ /**
718
+ * Fires an Action before including the template file
719
+ *
720
+ * @since 4.6.2
721
+ * @since 4.7.20 The $name param no longer contains the extension
722
+ *
723
+ * @param string $file Complete path to include the PHP File
724
+ * @param array $name Template name
725
+ * @param self $template Current instance of the Tribe__Template
726
+ */
727
+ do_action( 'tribe_template_before_include', $file, $name, $this );
 
 
 
 
 
 
 
 
 
728
 
729
+ /**
730
+ * Fires an Action for a given template name before including the template file
731
+ *
732
+ * E.g.:
733
+ * `tribe_template_before_include:events/blocks/parts/details`
734
+ * `tribe_template_before_include:events/embed`
735
+ * `tribe_template_before_include:tickets/login-to-purchase`
736
+ *
737
+ * @deprecated 4.11.0
738
+ * @since 4.7.20
739
+ *
740
+ * @param string $file Complete path to include the PHP File
741
+ * @param array $name Template name
742
+ * @param self $template Current instance of the Tribe__Template
743
+ */
744
+ do_action( "tribe_template_before_include:$legacy_hook_name", $file, $name, $this );
745
 
746
+ /**
747
+ * Fires an Action for a given template name before including the template file
748
+ *
749
+ * E.g.:
750
+ * `tribe_template_before_include:events/blocks/parts/details`
751
+ * `tribe_template_before_include:events/embed`
752
+ * `tribe_template_before_include:tickets/login-to-purchase`
753
+ *
754
+ * @since 4.7.20
755
+ *
756
+ * @param string $file Complete path to include the PHP File
757
+ * @param array $name Template name
758
+ * @param self $template Current instance of the Tribe__Template
759
+ */
760
+ do_action( "tribe_template_before_include:$hook_name", $file, $name, $this );
761
 
762
+ $this->template_safe_include( $file );
 
 
 
 
 
 
 
 
 
763
 
764
+ /**
765
+ * Fires an Action after including the template file
766
+ *
767
+ * @since 4.6.2
768
+ * @since 4.7.20 The $name param no longer contains the extension
769
+ *
770
+ * @param string $file Complete path to include the PHP File
771
+ * @param array $name Template name
772
+ * @param self $template Current instance of the Tribe__Template
773
+ */
774
+ do_action( 'tribe_template_after_include', $file, $name, $this );
775
 
776
+ /**
777
+ * Fires an Action for a given template name after including the template file
778
+ *
779
+ * E.g.:
780
+ * `tribe_template_after_include:events/blocks/parts/details`
781
+ * `tribe_template_after_include:events/embed`
782
+ * `tribe_template_after_include:tickets/login-to-purchase`
783
+ *
784
+ * @deprecated 4.11.0
785
+ * @since 4.7.20
786
+ *
787
+ * @param string $file Complete path to include the PHP File
788
+ * @param array $name Template name
789
+ * @param self $template Current instance of the Tribe__Template
790
+ */
791
+ do_action( "tribe_template_after_include:$legacy_hook_name", $file, $name, $this );
792
 
793
+ /**
794
+ * Fires an Action for a given template name after including the template file
795
+ *
796
+ * E.g.:
797
+ * `tribe_template_after_include:events/blocks/parts/details`
798
+ * `tribe_template_after_include:events/embed`
799
+ * `tribe_template_after_include:tickets/login-to-purchase`
800
+ *
801
+ * @since 4.7.20
802
+ *
803
+ * @param string $file Complete path to include the PHP File
804
+ * @param array $name Template name
805
+ * @param self $template Current instance of the Tribe__Template
806
+ */
807
+ do_action( "tribe_template_after_include:$hook_name", $file, $name, $this );
808
 
809
+ // Only fetch the contents after the action
810
+ $html = ob_get_clean();
 
811
 
812
+ /**
813
+ * Allow users to filter the final HTML
814
+ *
815
+ * @since 4.6.2
816
+ * @since 4.7.20 The $name param no longer contains the extension
817
+ *
818
+ * @param string $html The final HTML
819
+ * @param string $file Complete path to include the PHP File
820
+ * @param array $name Template name
821
+ * @param self $template Current instance of the Tribe__Template
822
+ */
823
+ $html = apply_filters( 'tribe_template_html', $html, $file, $name, $this );
824
 
825
+ /**
826
+ * Allow users to filter the final HTML by the name
827
+ *
828
+ * E.g.:
829
+ * `tribe_template_html:events/blocks/parts/details`
830
+ * `tribe_template_html:events/embed`
831
+ * `tribe_template_html:tickets/login-to-purchase`
832
+ *
833
+ * @deprecated 4.11.0
834
+ * @since 4.7.20
835
+ *
836
+ * @param string $html The final HTML
837
+ * @param string $file Complete path to include the PHP File
838
+ * @param array $name Template name
839
+ * @param self $template Current instance of the Tribe__Template
840
+ */
841
+ $html = apply_filters( "tribe_template_html:$legacy_hook_name", $html, $file, $name, $this );
842
 
843
+ /**
844
+ * Allow users to filter the final HTML by the name
845
+ *
846
+ * E.g.:
847
+ * `tribe_template_html:events/blocks/parts/details`
848
+ * `tribe_template_html:events/embed`
849
+ * `tribe_template_html:tickets/login-to-purchase`
850
+ *
851
+ * @since 4.7.20
852
+ *
853
+ * @param string $html The final HTML
854
+ * @param string $file Complete path to include the PHP File
855
+ * @param array $name Template name
856
+ * @param self $template Current instance of the Tribe__Template
857
+ */
858
+ $html = apply_filters( "tribe_template_html:$hook_name", $html, $file, $name, $this );
859
 
860
+ if ( $echo ) {
861
+ echo $html;
 
862
  }
863
 
 
 
 
 
 
 
 
 
 
864
  return $html;
865
  }
866
 
887
  $namespace_map = (array) apply_filters( 'tribe_template_origin_namespace_map', [], $path, $this );
888
 
889
  foreach ( $namespace_map as $namespace => $contains_string ) {
890
+ // Skip when we dont have the namespace path.
 
 
 
891
  if ( false === strpos( $path, $contains_string ) ) {
892
  continue;
893
  }
916
  *
917
  * @param string $file Which file will be included with safe context.
918
  *
919
+ * @return void
920
  */
921
  public function template_safe_include( $file ) {
 
922
  // We use this instance variable to prevent collisions.
923
  $this->template_current_file_path = $file;
924
  unset( $file );
925
 
926
+ // Only do this if really needed (by default it wont).
927
  if ( true === $this->template_context_extract && ! empty( $this->context ) ) {
928
  // Make any provided variables available in the template variable scope.
929
  extract( $this->context ); // @phpcs:ignore
933
 
934
  // After the include we reset the variable.
935
  unset( $this->template_current_file_path );
 
936
  }
937
 
938
  /**
985
  public function get_values() {
986
  return array_merge( $this->get_global_values(), $this->get_local_values() );
987
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
988
  }
common/src/Tribe/Template_Factory.php CHANGED
@@ -23,7 +23,7 @@ class Tribe__Template_Factory {
23
  *
24
  * @var array
25
  **/
26
- protected $asset_packages = [];
27
 
28
  /**
29
  * Static variable that holds array of vendor script handles, for adding to later deps.
@@ -33,7 +33,7 @@ class Tribe__Template_Factory {
33
  * @static
34
  * @var array
35
  */
36
- protected static $vendor_scripts = [];
37
 
38
  /**
39
  * Constant that holds the ajax hook suffix for the view
@@ -154,7 +154,7 @@ class Tribe__Template_Factory {
154
  * @param string $name
155
  * @param array $deps Dependents
156
  */
157
- public static function asset_package( $name, $deps = [] ) {
158
 
159
  $common = Tribe__Main::instance();
160
  $prefix = 'tribe-events';
23
  *
24
  * @var array
25
  **/
26
+ protected $asset_packages = array();
27
 
28
  /**
29
  * Static variable that holds array of vendor script handles, for adding to later deps.
33
  * @static
34
  * @var array
35
  */
36
+ protected static $vendor_scripts = array();
37
 
38
  /**
39
  * Constant that holds the ajax hook suffix for the view
154
  * @param string $name
155
  * @param array $deps Dependents
156
  */
157
+ public static function asset_package( $name, $deps = array() ) {
158
 
159
  $common = Tribe__Main::instance();
160
  $prefix = 'tribe-events';
common/src/Tribe/Template_Part_Cache.php CHANGED
@@ -56,13 +56,13 @@ class Tribe__Template_Part_Cache {
56
  public function add_hooks() {
57
 
58
  // set the cached html in transients after the template part is included
59
- add_filter( 'tribe_get_template_part_content', [ $this, 'set' ], 10, 2 );
60
 
61
  // get the cached html right before the setup_view runs so it's available for bypassing any view logic
62
- add_action( 'tribe_events_before_view', [ $this, 'get' ], 9, 1 );
63
 
64
  // when the specified template part is included, show the cached html instead
65
- add_filter( 'tribe_get_template_part_path_' . $this->template, [ $this, 'display' ] );
66
  }
67
 
68
  /**
56
  public function add_hooks() {
57
 
58
  // set the cached html in transients after the template part is included
59
+ add_filter( 'tribe_get_template_part_content', array( $this, 'set' ), 10, 2 );
60
 
61
  // get the cached html right before the setup_view runs so it's available for bypassing any view logic
62
+ add_action( 'tribe_events_before_view', array( $this, 'get' ), 9, 1 );
63
 
64
  // when the specified template part is included, show the cached html instead
65
+ add_filter( 'tribe_get_template_part_path_' . $this->template, array( $this, 'display' ) );
66
  }
67
 
68
  /**
common/src/Tribe/Templates.php CHANGED
@@ -37,7 +37,7 @@ class Tribe__Templates {
37
  */
38
  public static function locate_stylesheet( $stylesheets, $fallback = false ) {
39
  if ( ! is_array( $stylesheets ) ) {
40
- $stylesheets = [ $stylesheets ];
41
  }
42
  if ( empty( $stylesheets ) ) {
43
  return $fallback;
37
  */
38
  public static function locate_stylesheet( $stylesheets, $fallback = false ) {
39
  if ( ! is_array( $stylesheets ) ) {
40
+ $stylesheets = array( $stylesheets );
41
  }
42
  if ( empty( $stylesheets ) ) {
43
  return $fallback;
common/src/Tribe/Terms.php CHANGED
@@ -16,7 +16,7 @@ class Tribe__Terms {
16
  public static function translate_terms_to_ids( $terms, $taxonomy, $create_missing = true ) {
17
  $terms = is_string( $terms ) ? preg_split( '/\\s*,\\s*/', $terms ) : (array) $terms;
18
 
19
- $term_ids = [];
20
  foreach ( $terms as $term ) {
21
  if ( ! $term instanceof WP_Term && ! strlen( trim( $term ) ) ) {
22
  continue;
16
  public static function translate_terms_to_ids( $terms, $taxonomy, $create_missing = true ) {
17
  $terms = is_string( $terms ) ? preg_split( '/\\s*,\\s*/', $terms ) : (array) $terms;
18
 
19
+ $term_ids = array();
20
  foreach ( $terms as $term ) {
21
  if ( ! $term instanceof WP_Term && ! strlen( trim( $term ) ) ) {
22
  continue;
common/src/Tribe/Timezones.php CHANGED
@@ -15,7 +15,7 @@ class Tribe__Timezones {
15
  *
16
  * @var array
17
  */
18
- protected static $timezones = [];
19
 
20
  public static function init() {
21
  self::invalidate_caches();
@@ -27,8 +27,8 @@ class Tribe__Timezones {
27
  * Currently we are concerned only with the site timezone abbreviation.
28
  */
29
  protected static function invalidate_caches() {
30
- add_filter( 'pre_update_option_gmt_offset', [ __CLASS__, 'clear_site_timezone_abbr' ] );
31
- add_filter( 'pre_update_option_timezone_string', [ __CLASS__, 'clear_site_timezone_abbr' ] );
32
  }
33
 
34
  /**
@@ -408,7 +408,7 @@ class Tribe__Timezones {
408
  */
409
  public static function timezone_from_utc_offset( $utc_offset_string ) {
410
  // Test for strings looking like "UTC-2" or "UTC+5.25" etc
411
- if ( ! preg_match( '/^UTC[+-][0-9.]{1,4}$/', $utc_offset_string ) ) {
412
  return false;
413
  }
414
 
@@ -462,11 +462,11 @@ class Tribe__Timezones {
462
  }
463
 
464
  // if the offset contains fractions like :15, :30 or :45 convert them
465
- $supported_offsets = [
466
  '/:15$/' => '.25',
467
  '/:30$/' => '.5',
468
  '/:45$/' => '.75',
469
- ];
470
  $offset = preg_replace( array_keys( $supported_offsets ), array_values( $supported_offsets ), $offset );
471
 
472
  // Convert the offset to minutes for easier handling of fractional offsets
@@ -615,7 +615,7 @@ class Tribe__Timezones {
615
  return $timezone_candidate->getName();
616
  }
617
 
618
- $timezone_string = preg_replace( '/[+-]0$/', '', $timezone_candidate );
619
  $timezone_string = self::is_utc_offset( $timezone_string )
620
  ? self::generate_timezone_string_from_utc_offset( $timezone_string )
621
  : $timezone_string;
@@ -623,3 +623,4 @@ class Tribe__Timezones {
623
  return $timezone_string;
624
  }
625
  }
 
15
  *
16
  * @var array
17
  */
18
+ protected static $timezones = array();
19
 
20
  public static function init() {
21
  self::invalidate_caches();
27
  * Currently we are concerned only with the site timezone abbreviation.
28
  */
29
  protected static function invalidate_caches() {
30
+ add_filter( 'pre_update_option_gmt_offset', array( __CLASS__, 'clear_site_timezone_abbr' ) );
31
+ add_filter( 'pre_update_option_timezone_string', array( __CLASS__, 'clear_site_timezone_abbr' ) );
32
  }
33
 
34
  /**
408
  */
409
  public static function timezone_from_utc_offset( $utc_offset_string ) {
410
  // Test for strings looking like "UTC-2" or "UTC+5.25" etc
411
+ if ( ! preg_match( '/^UTC[\-\+]{1}[0-9\.]{1,4}$/', $utc_offset_string ) ) {
412
  return false;
413
  }
414
 
462
  }
463
 
464
  // if the offset contains fractions like :15, :30 or :45 convert them
465
+ $supported_offsets = array(
466
  '/:15$/' => '.25',
467
  '/:30$/' => '.5',
468
  '/:45$/' => '.75',
469
+ );
470
  $offset = preg_replace( array_keys( $supported_offsets ), array_values( $supported_offsets ), $offset );
471
 
472
  // Convert the offset to minutes for easier handling of fractional offsets
615
  return $timezone_candidate->getName();
616
  }
617
 
618
+ $timezone_string = preg_replace( '/(\\+||\\-)0$/', '', $timezone_candidate );
619
  $timezone_string = self::is_utc_offset( $timezone_string )
620
  ? self::generate_timezone_string_from_utc_offset( $timezone_string )
621
  : $timezone_string;
623
  return $timezone_string;
624
  }
625
  }
626
+
common/src/Tribe/Tracker.php CHANGED
@@ -19,34 +19,34 @@ class Tribe__Tracker {
19
  /**
20
  * @var array An array of the tracked post types.
21
  */
22
- protected $tracked_post_types = [];
23
 
24
  /**
25
  * @var array An array of the tracked taxonomies.
26
  */
27
- protected $tracked_taxonomies = [];
28
 
29
  /**
30
  * Hooks up the methods that will actually track the fields we are looking for.
31
  */
32
  public function hook() {
33
  // Track the Meta Updates for Meta That came from the correct Post Types
34
- add_filter( 'update_post_metadata', [ $this, 'filter_watch_updated_meta' ], PHP_INT_MAX - 1, 5 );
35
 
36
  // After a meta is added we mark that is has been modified
37
- add_action( 'added_post_meta', [ $this, 'register_added_deleted_meta' ], PHP_INT_MAX - 1, 3 );
38
 
39
  // Before a meta is removed we mark that is has been modified
40
- add_action( 'delete_post_meta', [ $this, 'register_added_deleted_meta' ], PHP_INT_MAX - 1, 3 );
41
 
42
  // Track the Post Fields Updates for Meta in the correct Post Types
43
- add_action( 'post_updated', [ $this, 'filter_watch_post_fields' ], 10, 3 );
44
 
45
  // Track the Post term updates
46
- add_action( 'set_object_terms', [ $this, 'track_taxonomy_term_changes' ], 10, 6 );
47
 
48
  // Clean up modified fields if the post is removed.
49
- add_action( 'delete_post', [ $this, 'cleanup_meta_fields' ] );
50
  }
51
 
52
  /**
@@ -83,30 +83,13 @@ class Tribe__Tracker {
83
  }
84
 
85
  /**
86
- * Get the date(timestamp) of last modification for a tracked field.
87
- *
88
- * @since 4.12.3
89
- *
90
- * @param string $meta_key The key for the meta field we're interested in.
91
- * @param int $post_id The ID of the post to check.
92
- *
93
- * @return boolean|string The change timestamp or false if the field is not found/empty.
94
- */
95
- public function get_modified_date( $meta_key, $post_id ) {
96
- $modified = get_post_meta( $post_id, self::$field_key, true );
97
-
98
- // If the key is missing or empty/null return false - no recorded change.
99
- return Tribe__Utils__Array::get( $modified, $meta_key, false );
100
- }
101
-
102
- /**
103
- * Easy way to see currently which post types are being tracked by our code.
104
  *
105
  * @return array
106
  */
107
  public function get_post_types() {
108
  // By default we are not tracking anything
109
- $tracked_post_types = [];
110
 
111
  /**
112
  * Adds a way for Developers to add and remove which post types will be tracked
@@ -128,10 +111,10 @@ class Tribe__Tracker {
128
  */
129
  public function get_excluded_meta_keys() {
130
  // By default we are not tracking anything
131
- $excluded_keys = [
132
  '_edit_lock',
133
  self::$field_key,
134
- ];
135
 
136
  /**
137
  * Adds a way for Developers remove Meta Keys that shouldn't be tracked
@@ -197,7 +180,7 @@ class Tribe__Tracker {
197
  // Fetch the current data from the modified fields
198
  $modified = get_post_meta( $post->ID, self::$field_key, true );
199
  if ( ! is_array( $modified ) ) {
200
- $modified = [];
201
  }
202
 
203
  // If we got here we will update the Modified Meta
@@ -276,7 +259,7 @@ class Tribe__Tracker {
276
  // Fetch the current data from the modified fields
277
  $modified = get_post_meta( $post->ID, self::$field_key, true );
278
  if ( ! is_array( $modified ) ) {
279
- $modified = [];
280
  }
281
 
282
  // If we got here we will update the Modified Meta
@@ -320,17 +303,17 @@ class Tribe__Tracker {
320
  $now = current_time( 'timestamp' );
321
 
322
  if ( ! $modified = get_post_meta( $post_id, self::$field_key, true ) ) {
323
- $modified = [];
324
  }
325
 
326
- $fields_to_check_for_changes = [
327
  'post_title',
328
  'post_content',
329
  'post_excerpt',
330
  'post_status',
331
  'post_type',
332
  'post_parent',
333
- ];
334
 
335
  foreach ( $fields_to_check_for_changes as $field ) {
336
  if ( ! $this->has_field_changed( $field, $post_after, $post_before ) ) {
@@ -392,7 +375,7 @@ class Tribe__Tracker {
392
  }
393
 
394
  if ( ! $modified = get_post_meta( $post->ID, self::$field_key, true ) ) {
395
- $modified = [];
396
  }
397
 
398
  if ( $tt_ids == $old_tt_ids ) {
19
  /**
20
  * @var array An array of the tracked post types.
21
  */
22
+ protected $tracked_post_types = array();
23
 
24
  /**
25
  * @var array An array of the tracked taxonomies.
26
  */
27
+ protected $tracked_taxonomies = array();
28
 
29
  /**
30
  * Hooks up the methods that will actually track the fields we are looking for.
31
  */
32
  public function hook() {
33
  // Track the Meta Updates for Meta That came from the correct Post Types
34
+ add_filter( 'update_post_metadata', array( $this, 'filter_watch_updated_meta' ), PHP_INT_MAX - 1, 5 );
35
 
36
  // After a meta is added we mark that is has been modified
37
+ add_action( 'added_post_meta', array( $this, 'register_added_deleted_meta' ), PHP_INT_MAX - 1, 3 );
38
 
39
  // Before a meta is removed we mark that is has been modified
40
+ add_action( 'delete_post_meta', array( $this, 'register_added_deleted_meta' ), PHP_INT_MAX - 1, 3 );
41
 
42
  // Track the Post Fields Updates for Meta in the correct Post Types
43
+ add_action( 'post_updated', array( $this, 'filter_watch_post_fields' ), 10, 3 );
44
 
45
  // Track the Post term updates
46
+ add_action( 'set_object_terms', array( $this, 'track_taxonomy_term_changes' ), 10, 6 );
47
 
48
  // Clean up modified fields if the post is removed.
49
+ add_action( 'delete_post', array( $this, 'cleanup_meta_fields' ) );
50
  }
51
 
52
  /**
83
  }
84
 
85
  /**
86
+ * Easy way to see currently which post types are been tracked by our code.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  *
88
  * @return array
89
  */
90
  public function get_post_types() {
91
  // By default we are not tracking anything
92
+ $tracked_post_types = array();
93
 
94
  /**
95
  * Adds a way for Developers to add and remove which post types will be tracked
111
  */
112
  public function get_excluded_meta_keys() {
113
  // By default we are not tracking anything
114
+ $excluded_keys = array(
115
  '_edit_lock',
116
  self::$field_key,
117
+ );
118
 
119
  /**
120
  * Adds a way for Developers remove Meta Keys that shouldn't be tracked
180
  // Fetch the current data from the modified fields
181
  $modified = get_post_meta( $post->ID, self::$field_key, true );
182
  if ( ! is_array( $modified ) ) {
183
+ $modified = array();
184
  }
185
 
186
  // If we got here we will update the Modified Meta
259
  // Fetch the current data from the modified fields
260
  $modified = get_post_meta( $post->ID, self::$field_key, true );
261
  if ( ! is_array( $modified ) ) {
262
+ $modified = array();
263
  }
264
 
265
  // If we got here we will update the Modified Meta
303
  $now = current_time( 'timestamp' );
304
 
305
  if ( ! $modified = get_post_meta( $post_id, self::$field_key, true ) ) {
306
+ $modified = array();
307
  }
308
 
309
+ $fields_to_check_for_changes = array(
310
  'post_title',
311
  'post_content',
312
  'post_excerpt',
313
  'post_status',
314
  'post_type',
315
  'post_parent',
316
+ );
317
 
318
  foreach ( $fields_to_check_for_changes as $field ) {
319
  if ( ! $this->has_field_changed( $field, $post_after, $post_before ) ) {
375
  }
376
 
377
  if ( ! $modified = get_post_meta( $post->ID, self::$field_key, true ) ) {
378
+ $modified = array();
379
  }
380
 
381
  if ( $tt_ids == $old_tt_ids ) {
common/src/Tribe/Traits/With_DB_Lock.php DELETED
@@ -1,50 +0,0 @@
1
- <?php
2
- /**
3
- * Provides methods to acquire and release a database (SQL) lock using the `Tribe\DB_Lock` class.
4
- *
5
- * @since 4.12.6
6
- *
7
- * @package Tribe\Traits
8
- */
9
-
10
- namespace Tribe\Traits;
11
-
12
- /**
13
- * Trait With_Db_Lock
14
- *
15
- * @since 4.12.6
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 4.12.6
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 4.12.6
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/Traits/With_Meta_Updates_Handling.php DELETED
@@ -1,66 +0,0 @@
1
- <?php
2
- /**
3
- * Provides methods useful to deal with meta updates.
4
- *
5
- * @since 4.12.6
6
- *
7
- * @package Tribe\Traits
8
- */
9
-
10
- namespace Tribe\Traits;
11
-
12
- /**
13
- * Trait With_Meta_Updates_Handling
14
- *
15
- * @since 4.12.6
16
- *
17
- * @package Tribe\Traits
18
- */
19
- trait With_Meta_Updates_Handling {
20
- /**
21
- * Returns a closure that should be hooked to the `udapte_post_metadata` filter to "unpack" arrays of meta
22
- * for a specific key.
23
- *
24
- * Providing an array of values in the context of `meta_input` will store them as a single array of values, not
25
- * as multiple values. This closure will unpack the meta on update to have multiple values in place of one.
26
- * This is the case, as an example, with Event Organizers, where we want a meta entry for each Organizer, not an
27
- * array of Organizer IDs in a single meta.
28
- *
29
- * @since 4.12.6
30
- *
31
- * @param string $target_meta_key The meta key that should be "unpacked" for updates.
32
- * @param int|null $target_post_id The specific post ID to target, or null to target the next update.
33
- *
34
- * @return \Closure The closure that will deal with the unpacked meta update.
35
- */
36
- protected function unpack_meta_on_update( $target_meta_key, $target_post_id = null ) {
37
- $closure = static function ( $update = null, $post_id = null, $meta_key = null, $meta_value = null ) use (
38
- $target_post_id,
39
- $target_meta_key,
40
- &$closure
41
- ) {
42
- if ( $target_meta_key !== $meta_key ) {
43
- return $update;
44
- }
45
-
46
- if ( null !== $target_post_id && $target_post_id !== $post_id ) {
47
- return $update;
48
- }
49
-
50
- remove_filter( 'update_post_metadata', $closure );
51
-
52
- $values = (array) $meta_value;
53
- delete_post_meta( $post_id, $target_meta_key );
54
- foreach ( $values as $organizer_id ) {
55
- add_post_meta( $post_id, $target_meta_key, $organizer_id );
56
- }
57
-
58
- // As in "we've dealt with it, do not update this meta."
59
- return true;
60
- };
61
-
62
- add_filter( 'update_post_metadata', $closure, 10, 4 );
63
-
64
- return $closure;
65
- }
66
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Traits/With_Post_Attribute_Detection.php DELETED
@@ -1,82 +0,0 @@
1
- <?php
2
- /**
3
- * Provides methods to detect whether a field is a post field, a taxonomy or a custom field in relation to a post type.
4
- *
5
- * Note that the trait does not include a `is_a_custom_field` method as that's implied from a field not being
6
- * a post field and not being a taxonomy.
7
- *
8
- * @since 4.12.6
9
- *
10
- * @package Tribe\Traits
11
- */
12
-
13
- namespace Tribe\Traits;
14
-
15
- /**
16
- * Trait With_Post_Attribute_Detection
17
- *
18
- * @since 4.12.6
19
- *
20
- * @package Tribe\Traits
21
- */
22
- trait With_Post_Attribute_Detection {
23
-
24
- /**
25
- * Whether the key is a field of the posts table or not.
26
- *
27
- * @since 4.7.19 Created in the `Tribe__Repository` class.
28
- * @since 4.12.6 Refactored out of the `Tribe__Repository` class into this trait.
29
- *
30
- * @param string $key The field to check.
31
- *
32
- * @return bool Whether the key indicates a post field, a column in the `posts` table, or not.
33
- */
34
- protected function is_a_post_field( $key ) {
35
- return in_array( $key, [
36
- 'ID',
37
- 'post_author',
38
- 'post_date',
39
- 'post_date_gmt',
40
- 'post_content',
41
- 'post_title',
42
- 'post_excerpt',
43
- 'post_status',
44
- 'comment_status',
45
- 'ping_status',
46
- 'post_password',
47
- 'post_name',
48
- 'to_ping',
49
- 'pinged',
50
- 'post_modified',
51
- 'post_modified_gmt',
52
- 'post_content_filtered',
53
- 'post_parent',
54
- 'guid',
55
- 'menu_order',
56
- 'post_type',
57
- 'post_mime_type',
58
- 'comment_count',
59
- ], true );
60
- }
61
-
62
- /**
63
- * Whether the current key identifies one of the supported taxonomies or not.
64
- *
65
- * @since 4.7.19 Created in the `Tribe__Repository` class.
66
- * @since 4.12.6 Refactored out of the `Tribe__Repository` class into this trait.
67
- *
68
- * @param string $key The field to check.
69
- *
70
- * @return bool Whether the key indicates a taxonomy of the post type or not.
71
- */
72
- protected function is_a_taxonomy( $key ) {
73
- if ( ! isset( $this->taxonomies ) ) {
74
- // If we're here, then the developer made an error: throw an exception to bring this up as early as possible.
75
- throw new \RuntimeException(
76
- 'The ' . __TRAIT__ . ' trait requires the user class to define a $taxonomies array parameter.'
77
- );
78
- }
79
-
80
- return in_array( $key, $this->taxonomies, true );
81
- }
82
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Updater.php CHANGED
@@ -90,7 +90,7 @@ class Tribe__Updater {
90
  * @return array
91
  */
92
  public function get_update_callbacks() {
93
- return [];
94
  }
95
 
96
  /**
@@ -102,9 +102,9 @@ class Tribe__Updater {
102
  * @return array
103
  */
104
  public function get_constant_update_callbacks() {
105
- return [
106
- [ $this, 'flush_rewrites' ],
107
- ];
108
  }
109
 
110
  /**
90
  * @return array
91
  */
92
  public function get_update_callbacks() {
93
+ return array();
94
  }
95
 
96
  /**
102
  * @return array
103
  */
104
  public function get_constant_update_callbacks() {
105
+ return array(
106
+ array( $this, 'flush_rewrites' ),
107
+ );
108
  }
109
 
110
  /**
common/src/Tribe/Utils/Array.php CHANGED
@@ -442,230 +442,5 @@ if ( ! class_exists( 'Tribe__Utils__Array' ) ) {
442
 
443
  return $default;
444
  }
445
-
446
- /**
447
- * Discards everything other than array values having string keys and scalar values, ensuring a
448
- * one-dimensional, associative array result.
449
- *
450
- * @link https://www.php.net/manual/language.types.array.php Keys cast to non-strings will be discarded.
451
- *
452
- * @since 4.12.2
453
- *
454
- * @param array $array
455
- *
456
- * @return array Associative or empty array.
457
- */
458
- public static function filter_to_flat_scalar_associative_array( array $array ) {
459
- $result = [];
460
-
461
- if ( ! is_array( $array ) ) {
462
- return $result;
463
- }
464
-
465
- foreach ( $array as $k => $v ) {
466
- if ( ! is_string( $k ) ) {
467
- continue;
468
- }
469
-
470
- if ( ! is_scalar( $v ) ) {
471
- continue;
472
- }
473
-
474
- $result[ $k ] = $v;
475
- }
476
-
477
- return $result;
478
- }
479
-
480
- /**
481
- * Build an array from migrating aliased key values to their canonical key values, removing all alias keys.
482
- *
483
- * If the original array has values for both the alias and its canonical, keep the canonical's value and
484
- * discard the alias' value.
485
- *
486
- * @since 4.12.2
487
- *
488
- * @param array $original An associative array of values, such as passed shortcode arguments.
489
- * @param array $alias_map An associative array of aliases: key as alias, value as mapped canonical.
490
- * Example: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
491
- *
492
- * @return array
493
- */
494
- public static function parse_associative_array_alias( array $original, array $alias_map ) {
495
- // Ensure array values.
496
- $original = (array) $original;
497
- $alias_map = static::filter_to_flat_scalar_associative_array( (array) $alias_map );
498
-
499
- // Fail gracefully if alias array wasn't setup as [ 'from' => 'to' ].
500
- if ( empty( $alias_map ) ) {
501
- return $original;
502
- }
503
-
504
- $result = $original;
505
-
506
- // Parse aliases.
507
- foreach ( $alias_map as $from => $to ) {
508
- // If this alias isn't in use, go onto the next.
509
- if ( ! isset( $result[ $from ] ) ) {
510
- continue;
511
- }
512
-
513
- // Only allow setting alias value if canonical value is not already present.
514
- if ( ! isset( $result[ $to ] ) ) {
515
- $result[ $to ] = $result[ $from ];
516
- }
517
-
518
- // Always remove the alias key.
519
- unset( $result[ $from ] );
520
- }
521
-
522
- return $result;
523
- }
524
-
525
- /**
526
- * Stringifies the numeric keys of an array.
527
- *
528
- * @since 4.12.14
529
- *
530
- * @param array<int|string,mixed> $input The input array whose keys should be stringified.
531
- * @param string|null $prefix The prefix that should be use to stringify the keys, if not provided
532
- * then it will be generated.
533
- *
534
- * @return array<string,mixed> The input array with each numeric key stringified.
535
- */
536
- public static function stringify_keys( array $input, $prefix = null ) {
537
- $prefix = null === $prefix ? uniqid( 'sk_', true ) : $prefix;
538
- $visitor = static function ( $key, $value ) use ( $prefix ) {
539
- $string_key = is_numeric( $key ) ? $prefix . $key : $key;
540
-
541
- return [ $string_key, $value ];
542
- };
543
-
544
- return static::array_visit_recursive( $input, $visitor );
545
- }
546
-
547
- /**
548
- * The inverse of the `stringify_keys` method, it will restore numeric keys for previously
549
- * stringified keys.
550
- *
551
- * @since 4.12.14
552
- *
553
- * @param array<int|string,mixed> $input The input array whose stringified keys should be
554
- * destringified.
555
- * @param string $prefix The prefix that should be used to target only specific string keys.
556
- *
557
- * @return array<int|string,mixed> The input array, its stringified keys destringified.
558
- */
559
- public static function destringify_keys( array $input, $prefix = 'sk_' ) {
560
- $visitor = static function ( $key, $value ) use ( $prefix ) {
561
- $destringified_key = 0 === self::strpos( $key, $prefix ) ? null : $key;
562
-
563
- return [ $destringified_key, $value ];
564
- };
565
-
566
- return static::array_visit_recursive( $input, $visitor );
567
- }
568
-
569
- /**
570
- * Recursively visits all elements of an array applying the specified callback to each element
571
- * key and value.
572
- *
573
- * @since 4.12.14
574
- *
575
- * @param array $input The input array whose nodes should be visited.
576
- * @param callable $visitor A callback function that will be called on each array item; the callback will
577
- * receive the item key and value as input and should return an array that contains
578
- * the update key and value in the shape `[ <key>, <value> ]`. Returning a `null`
579
- * key will cause the element to be removed from the array.
580
- */
581
- public static function array_visit_recursive( $input, callable $visitor ) {
582
- if ( ! is_array( $input ) ) {
583
- return $input;
584
- }
585
-
586
- $return = [];
587
-
588
- foreach ( $input as $key => &$value ) {
589
- if ( is_array( $value ) ) {
590
- $value = static::array_visit_recursive( $value, $visitor );
591
- }
592
- // Ensure visitors can quickly return `null` to remove an element.
593
- list( $updated_key, $update_value ) = array_replace( [ $key, $value ], (array) $visitor( $key, $value ) );
594
- if ( false === $updated_key ) {
595
- // Visitor will be able to remove an element by returning a `false` key for it.
596
- continue;
597
- }
598
- if ( null === $updated_key ) {
599
- // Automatically assign the first available numeric index to the element.
600
- $return[] = $update_value;
601
- } else {
602
- $return[ $updated_key ] = $update_value;
603
- }
604
- }
605
-
606
- return $return;
607
- }
608
-
609
- /**
610
- * Recursively remove associative, non numeric, keys from an array.
611
- *
612
- * @since 4.12.14
613
- *
614
- * @param array<string|int,mixed> $input The input array.
615
- *
616
- * @return array<int|mixed> An array that only contains integer keys at any of its levels.
617
- */
618
- public static function remove_numeric_keys_recursive( array $input ) {
619
- return self::array_visit_recursive(
620
- $input,
621
- static function ( $key ) {
622
- return is_numeric( $key ) ? false : $key;
623
- }
624
- );
625
- }
626
-
627
- /**
628
- * Recursively remove numeric keys from an array.
629
- *
630
- * @since 4.12.14
631
- *
632
- * @param array<string|int,mixed> $input The input array.
633
- *
634
- * @return array<string,mixed> An array that only contains non numeric keys at any of its levels.
635
- */
636
- public static function remove_string_keys_recursive( array $input ) {
637
- return self::array_visit_recursive(
638
- $input,
639
- static function ( $key ) {
640
- return !is_numeric( $key ) ? false : $key;
641
- }
642
- );
643
- }
644
-
645
- /**
646
- * Merges two or more arrays in the nested format used by WP_Query arguments preserving and merging them correctly.
647
- *
648
- * The method will recursively replace named keys and merge numeric keys. The method takes its name from its intended
649
- * primary use, but it's not limited to query arguments only.
650
- *
651
- * @since 4.12.14
652
- *
653
- * @param array<string|int,mixed> ...$arrays A set of arrays to merge.
654
- *
655
- * @return array<string|int,mixed> The recursively merged array.
656
- */
657
- public static function merge_recursive_query_vars( array ...$arrays ) {
658
- if ( ! count( $arrays ) ) {
659
- return [];
660
- }
661
-
662
- // Temporarily transform numeric keys to string keys generated with time-related randomness.
663
- $stringified = array_map( [ static::class, 'stringify_keys' ], $arrays );
664
- // Replace recursive will recursively replace any entry that has the same string key, stringified keys will never match due to randomness.
665
- $merged = array_replace_recursive( ...$stringified );
666
-
667
- // Finally destringify the keys to return something that will resemble, in shape, the original arrays.
668
- return static::destringify_keys( $merged );
669
- }
670
  }
671
  }
442
 
443
  return $default;
444
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
445
  }
446
  }
common/src/Tribe/Utils/Body_Classes.php DELETED
@@ -1,350 +0,0 @@
1
- <?php
2
- /**
3
- * Class used to manage and add body classes via a queue across our plugins.
4
- *
5
- * @since 4.12.6
6
- */
7
- namespace Tribe\Utils;
8
-
9
- use Tribe\Utils\Element_Classes;
10
-
11
- /**
12
- * Body_Classes class
13
- *
14
- * @since 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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, $queue ) ) {
106
- return false;
107
- }
108
-
109
- return $classes[ $class ];
110
- }
111
-
112
- /**
113
- * Dequeues a class.
114
- *
115
- * @since 4.12.6
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, $queue ) ) {
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 4.12.6
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, $queue ) ) {
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
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 4.12.6
265
- *
266
- * @param array<string> $classes An array of body class names.
267
- * @return array Array of body classes.
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 4.12.6
284
- *
285
- * @param string $classes The existing body class names.
286
- *
287
- * @return string String of admin body classes.
288
- */
289
- public function add_admin_body_classes( $classes ) {
290
- $existing_classes = explode( ' ', $classes );
291
- // Make sure they should be added.
292
- if ( ! $this->should_add_body_classes( $this->get_class_names( 'admin' ), (array) $existing_classes, 'admin' ) ) {
293
- // Ensure we return the current string on false!
294
- return $classes;
295
- }
296
-
297
- $element_classes = new Element_Classes( $this->get_class_names( 'admin' ) );
298
-
299
- return implode( ' ', array_merge( $existing_classes, $element_classes->get_classes() ) );
300
-
301
- }
302
-
303
- /**
304
- * Should a individual class be added to the queue.
305
- *
306
- * @since 4.12.6
307
- *
308
- * @param string $class The body class we wish to add.
309
- *
310
- * @return boolean Whether to add tribe body classes to the queue.
311
- */
312
- private function should_add_body_class_to_queue( $class, $queue = 'display' ) {
313
- /**
314
- * Filter whether to add the body class to the queue or not.
315
- *
316
- * @since 4.12.6
317
- *
318
- * @param boolean $add Whether to add the class to the queue or not.
319
- * @param array $class The array of body class names to add.
320
- * @param string $queue The queue we want to get 'admin', 'display', 'all'.
321
- */
322
- return (bool) apply_filters( 'tribe_body_class_should_add_to_queue', false, $class, $queue );
323
- }
324
-
325
- /**
326
- * Logic for whether the body classes, as a whole, should be added.
327
- *
328
- * @since 4.12.6
329
- *
330
- * @param array $add_classes An array of body class names to add.
331
- * @param array $existing_classes An array of existing body class names from WP.
332
- * @param string $queue The queue we want to get 'admin', 'display', 'all'.
333
- *
334
- * @return boolean Whether to add tribe body classes.
335
- */
336
- private function should_add_body_classes( array $add_classes, array $existing_classes, $queue ) {
337
- /**
338
- * Filter whether to add tribe body classes or not.
339
- *
340
- * @since 4.12.6
341
- *
342
- * @param boolean $add Whether to add classes or not.
343
- * @param array $add_classes The array of body class names to add.
344
- * @param array $existing_classes An array of existing body class names from WP.
345
- * @param string $queue The queue we want to get 'admin', 'display', 'all'.
346
- *
347
- */
348
- return (bool)apply_filters( 'tribe_body_classes_should_add', false, $queue, $add_classes, $existing_classes );
349
- }
350
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Utils/Callback.php CHANGED
@@ -9,7 +9,7 @@ class Tribe__Utils__Callback {
9
  *
10
  * @var array
11
  */
12
- public $items = [];
13
 
14
  /**
15
  * The Prefix we use for the Overloading replacement
@@ -58,12 +58,12 @@ class Tribe__Utils__Callback {
58
  array_shift( $arguments );
59
  array_shift( $arguments );
60
 
61
- $item = (object) [
62
- 'slug' => $slug,
63
- 'method' => $method,
64
  'arguments' => $arguments,
65
- 'is_empty' => $is_empty,
66
- ];
67
 
68
  $key = md5( json_encode( $item ) );
69
 
@@ -76,7 +76,7 @@ class Tribe__Utils__Callback {
76
 
77
  $this->items[ $key ] = $item;
78
 
79
- return [ $this, $this->prefix . $key ];
80
  }
81
 
82
  /**
@@ -145,7 +145,7 @@ class Tribe__Utils__Callback {
145
  * @return array An array of properties that should be serialized.
146
  */
147
  public function __sleep() {
148
- return [ 'slug', 'method' ];
149
  }
150
 
151
  /**
9
  *
10
  * @var array
11
  */
12
+ public $items = array();
13
 
14
  /**
15
  * The Prefix we use for the Overloading replacement
58
  array_shift( $arguments );
59
  array_shift( $arguments );
60
 
61
+ $item = (object) array(
62
+ 'slug' => $slug,
63
+ 'method' => $method,
64
  'arguments' => $arguments,
65
+ 'is_empty' => $is_empty,
66
+ );
67
 
68
  $key = md5( json_encode( $item ) );
69
 
76
 
77
  $this->items[ $key ] = $item;
78
 
79
+ return array( $this, $this->prefix . $key );
80
  }
81
 
82
  /**
145
  * @return array An array of properties that should be serialized.
146
  */
147
  public function __sleep() {
148
+ return array( 'slug', 'method' );
149
  }
150
 
151
  /**
common/src/Tribe/Utils/Collection.php CHANGED
@@ -17,7 +17,7 @@ class Tribe__Utils__Collection extends SplDoublyLinkedList {
17
  *
18
  * @var array
19
  */
20
- protected $items = [];
21
 
22
  /**
23
  * The doubly-linked list that will hold the items handled by the collection.
17
  *
18
  * @var array
19
  */
20
+ protected $items = array();
21
 
22
  /**
23
  * The doubly-linked list that will hold the items handled by the collection.
common/src/Tribe/Utils/Color.php CHANGED
@@ -72,7 +72,7 @@ class Tribe__Utils__Color {
72
  $G = hexdec( $color[2] . $color[3] );
73
  $B = hexdec( $color[4] . $color[5] );
74
 
75
- $HSL = [];
76
 
77
  $var_R = ( $R / 255 );
78
  $var_G = ( $G / 255 );
@@ -127,13 +127,13 @@ class Tribe__Utils__Color {
127
  * @return string HEX string
128
  * @throws Exception "Bad HSL Array"
129
  */
130
- public static function hslToHex( $hsl = [] ) {
131
- // Make sure it's HSL
132
  if ( empty( $hsl ) || ! isset( $hsl['H'] ) || ! isset( $hsl['S'] ) || ! isset( $hsl['L'] ) ) {
133
  throw new Exception( 'Param was not an HSL array' );
134
  }
135
 
136
- list( $H, $S, $L ) = [ $hsl['H'] / 360, $hsl['S'], $hsl['L'] ];
137
 
138
  if ( 0 == $S ) {
139
  $r = $L * 255;
@@ -197,8 +197,8 @@ class Tribe__Utils__Color {
197
  * @return string RGB string
198
  * @throws Exception "Bad RGB Array"
199
  */
200
- public static function rgbToHex( $rgb = [] ) {
201
- // Make sure it's RGB
202
  if ( empty( $rgb ) || ! isset( $rgb['R'] ) || ! isset( $rgb['G'] ) || ! isset( $rgb['B'] ) ) {
203
  throw new Exception( 'Param was not an RGB array' );
204
  }
@@ -269,7 +269,7 @@ class Tribe__Utils__Color {
269
  }
270
 
271
  // Return our gradient array
272
- return [ 'light' => $lightColor, 'dark' => $darkColor ];
273
  }
274
 
275
 
@@ -449,8 +449,8 @@ class Tribe__Utils__Color {
449
  $gmix = ( ( $rgb1['G'] * $r1 ) + ( $rgb2['G'] * $r2 ) ) / 2;
450
  $bmix = ( ( $rgb1['B'] * $r1 ) + ( $rgb2['B'] * $r2 ) ) / 2;
451
 
452
- return [ 'R' => $rmix, 'G' => $gmix, 'B' => $bmix ];
453
- }
454
 
455
  /**
456
  * Given a Hue, returns corresponding RGB value
72
  $G = hexdec( $color[2] . $color[3] );
73
  $B = hexdec( $color[4] . $color[5] );
74
 
75
+ $HSL = array();
76
 
77
  $var_R = ( $R / 255 );
78
  $var_G = ( $G / 255 );
127
  * @return string HEX string
128
  * @throws Exception "Bad HSL Array"
129
  */
130
+ public static function hslToHex( $hsl = array() ) {
131
+ // Make sure it's HSL
132
  if ( empty( $hsl ) || ! isset( $hsl['H'] ) || ! isset( $hsl['S'] ) || ! isset( $hsl['L'] ) ) {
133
  throw new Exception( 'Param was not an HSL array' );
134
  }
135
 
136
+ list( $H, $S, $L ) = array( $hsl['H'] / 360, $hsl['S'], $hsl['L'] );
137
 
138
  if ( 0 == $S ) {
139
  $r = $L * 255;
197
  * @return string RGB string
198
  * @throws Exception "Bad RGB Array"
199
  */
200
+ public static function rgbToHex( $rgb = array() ) {
201
+ // Make sure it's RGB
202
  if ( empty( $rgb ) || ! isset( $rgb['R'] ) || ! isset( $rgb['G'] ) || ! isset( $rgb['B'] ) ) {
203
  throw new Exception( 'Param was not an RGB array' );
204
  }
269
  }
270
 
271
  // Return our gradient array
272
+ return array( 'light' => $lightColor, 'dark' => $darkColor );
273
  }
274
 
275
 
449
  $gmix = ( ( $rgb1['G'] * $r1 ) + ( $rgb2['G'] * $r2 ) ) / 2;
450
  $bmix = ( ( $rgb1['B'] * $r1 ) + ( $rgb2['B'] * $r2 ) ) / 2;
451
 
452
+ return array( 'R' => $rmix, 'G' => $gmix, 'B' => $bmix );
453
+ }
454
 
455
  /**
456
  * Given a Hue, returns corresponding RGB value
common/src/Tribe/Utils/Coordinates_Provider.php CHANGED
@@ -76,7 +76,7 @@ class Tribe__Utils__Coordinates_Provider {
76
  }
77
 
78
  $base_request_url = trailingslashit( $this->get_google_api_base() ) . $this->get_google_api_json_format();
79
- $url = esc_url( add_query_arg( [ 'address' => $address ], $base_request_url ) );
80
  $response = $this->http->get( $url );
81
 
82
  if ( is_wp_error( $response ) ) {
@@ -95,7 +95,7 @@ class Tribe__Utils__Coordinates_Provider {
95
 
96
  $location = $decoded['results'][0]['geometry']['location'];
97
 
98
- $updated_transient = array_merge( $this->get_transient(), [ $address => $location ] );
99
  set_transient( self::$transient_name, $updated_transient );
100
  $this->transient = $updated_transient;
101
 
@@ -120,7 +120,7 @@ class Tribe__Utils__Coordinates_Provider {
120
  protected function get_transient() {
121
  if ( ! is_array( $this->transient ) ) {
122
  $transient = get_transient( self::$transient_name );
123
- $this->transient = is_array( $transient ) ? $transient : [];
124
  }
125
 
126
  return $this->transient;
76
  }
77
 
78
  $base_request_url = trailingslashit( $this->get_google_api_base() ) . $this->get_google_api_json_format();
79
+ $url = esc_url( add_query_arg( array( 'address' => $address ), $base_request_url ) );
80
  $response = $this->http->get( $url );
81
 
82
  if ( is_wp_error( $response ) ) {
95
 
96
  $location = $decoded['results'][0]['geometry']['location'];
97
 
98
+ $updated_transient = array_merge( $this->get_transient(), array( $address => $location ) );
99
  set_transient( self::$transient_name, $updated_transient );
100
  $this->transient = $updated_transient;
101
 
120
  protected function get_transient() {
121
  if ( ! is_array( $this->transient ) ) {
122
  $transient = get_transient( self::$transient_name );
123
+ $this->transient = is_array( $transient ) ? $transient : array();
124
  }
125
 
126
  return $this->transient;
common/src/Tribe/Utils/Element_Attributes.php DELETED
@@ -1,241 +0,0 @@
1
- <?php
2
- namespace Tribe\Utils;
3
-
4
- /**
5
- * Class Element_Attributes to handle HTML attributes for elements.
6
- *
7
- * @since 4.12.3
8
- *
9
- * @package Tribe\Utils
10
- */
11
- class Element_Attributes {
12
- /**
13
- * Store the results of parsing the attributes.
14
- *
15
- * @since 4.12.3
16
- *
17
- * @var array<string,string>
18
- */
19
- protected $results = [];
20
-
21
- /**
22
- * Stores the arguments passed.
23
- *
24
- * @since 4.12.3
25
- *
26
- * @var array
27
- */
28
- protected $arguments = [];
29
-
30
- /**
31
- * Setups an instance of Element Attributes.
32
- *
33
- * @since 4.12.3
34
- *
35
- * @return void
36
- */
37
- public function __construct() {
38
- $this->arguments = func_get_args();
39
- }
40
-
41
- /**
42
- * When invoked this class will return the full HTML attributes.
43
- *
44
- * @since 4.12.3
45
- *
46
- * @return string In the format ` attribute1="value1" attribute2="value2" `
47
- */
48
- public function __invoke() {
49
- $this->arguments = func_get_args();
50
- return $this->get_attributes();
51
- }
52
-
53
-
54
- /**
55
- * When cast to string an instance will return the full HTML attributes.
56
- *
57
- * @since 4.12.3
58
- *
59
- * @return string In the format ` attribute1="value1" attribute2="value2" `
60
- */
61
- public function __toString() {
62
- return $this->get_attributes();
63
- }
64
-
65
- /**
66
- * Gets the full HTML attributes for this instance of Element Attributes.
67
- * It will contain a space on each end of the attribute.
68
- *
69
- * @since 4.12.3
70
- *
71
- * @return string In the format ` attribute1="value1" attribute2="value2" `
72
- */
73
- public function get_attributes() {
74
- $attributes = $this->get_attributes_as_string();
75
-
76
- // Bail with empty string when no attributes are present
77
- if ( ! $attributes ) {
78
- return '';
79
- }
80
-
81
- return " {$attributes} ";
82
- }
83
-
84
- /**
85
- * Gets a space separated string of all attributes to be printed.
86
- *
87
- * @since 4.12.3
88
- *
89
- * @return string
90
- */
91
- public function get_attributes_as_string() {
92
- return implode( ' ', $this->get_attributes_array() );
93
- }
94
-
95
- /**
96
- * Get the array of attributes to be printed.
97
- *
98
- * @since 4.12.3
99
- *
100
- * @return array
101
- */
102
- public function get_attributes_array() {
103
- $this->results = [];
104
- $attributes = [];
105
-
106
- $this->parse_array( $this->arguments );
107
-
108
- foreach ( $this->results as $key => $val ) {
109
- if ( ! $val && '0' !== $val ) {
110
- continue;
111
- }
112
-
113
- if ( is_bool( $val ) ) {
114
- $attributes[] = esc_attr( $key );
115
- } else {
116
- // Remove double quotes that might be surrounding the value.
117
- trim( $val, '"' );
118
- $attributes[] = esc_attr( $key ) . '="' . esc_attr( $val ) . '"';
119
- }
120
- }
121
-
122
- return $attributes;
123
- }
124
-
125
- /**
126
- * Parse arguments or argument for this instance, and store values on results.
127
- *
128
- * @since 4.12.3
129
- *
130
- * @param mixed $arguments Any possible set of arguments that this class supports.
131
- *
132
- * @return void
133
- */
134
- protected function parse( $arguments ) {
135
- if ( ! $arguments ) {
136
- return;
137
- }
138
-
139
- if ( is_numeric( $arguments ) ) { // phpcs:ignore
140
- // Bail on any numeric values.
141
- } elseif ( is_array( $arguments ) ) {
142
- // ['foo', 'bar', ...] || ['foo' => TRUE, 'bar' => FALSE, 'baz' => 'foo', ...]
143
- $this->parse_array( $arguments );
144
- } elseif ( is_string( $arguments ) ) {
145
- // 'foo bar'
146
- $this->parse_string( $arguments );
147
- } elseif ( $arguments instanceof \Closure || is_callable( $arguments ) ) {
148
- // function() {}
149
- $this->parse_callable( $arguments );
150
- } elseif ( is_object( $arguments ) ) {
151
- // stdClass
152
- $this->parse_object( $arguments );
153
- }
154
- }
155
-
156
- /**
157
- * Parse an array into an array of acceptable values for the instance.
158
- *
159
- * @since 4.12.3
160
- *
161
- * @param array $values Array of values to be parsed.
162
- *
163
- * @return void
164
- */
165
- protected function parse_array( array $values ) {
166
- foreach ( $values as $key => $value ) {
167
- if ( is_int( $key ) ) {
168
- $this->parse( $value );
169
- } elseif ( is_string( $key ) ) {
170
- if ( ! is_bool( $value ) && ! is_string( $value ) ) {
171
- throw new \UnexpectedValueException( 'Value for key ' . $key . ' must be of type boolean or string' );
172
- }
173
-
174
- $this->results[ $key ] = $value;
175
- }
176
- }
177
- }
178
-
179
- /**
180
- * Parse a string into an array of acceptable values for the instance.
181
- *
182
- * @since 4.12.3
183
- *
184
- * @param string $arguments Space separated string of attributes to be parsed.
185
- *
186
- * @return void
187
- */
188
- protected function parse_string( $arguments ) {
189
- $values = preg_split( '/\s+/', $arguments, -1, PREG_SPLIT_NO_EMPTY );
190
-
191
- // When it doesn't match, bail early.
192
- if ( ! $values ) {
193
- return;
194
- }
195
-
196
- $attrs = [];
197
-
198
- foreach ( $values as $key => $value ) {
199
- if ( preg_match( '/^(?<key>[^=]+)="*(?<value>.*?)"*$/', $value, $m ) ) {
200
- // Something like `f="boo"` or `foo=bar`.
201
- $attrs[ $m['key'] ] = $m['value'];
202
-
203
- continue;
204
- }
205
-
206
- $attrs[ $value ] = true;
207
- }
208
-
209
- $this->parse_array( $attrs );
210
- }
211
-
212
- /**
213
- * Parses an object into the array of considered attributes.
214
- *
215
- * @since 4.12.3
216
- *
217
- * @param mixed $object Object to be converted into array and parsed.
218
- *
219
- * @return void
220
- */
221
- protected function parse_object( $object ) {
222
- $this->parse_array( (array) $object );
223
- }
224
-
225
- /**
226
- * Parses a callable method or function into the array of considered attributes.
227
- *
228
- * The result of the callable will REPLACE the current attributes, callables will work like filters.
229
- *
230
- * @since 4.12.3
231
- *
232
- * @param callable $method_or_function Method or Function to be called.
233
- *
234
- * @return void
235
- */
236
- protected function parse_callable( callable $method_or_function ) {
237
- $filtered = $method_or_function( $this->results );
238
- $this->results = [];
239
- $this->parse( $filtered );
240
- }
241
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Utils/Element_Classes.php CHANGED
@@ -179,7 +179,7 @@ class Element_Classes {
179
  protected function parse_string( $arguments, $default_value = true ) {
180
  $values = preg_split( '/\s+/', $arguments, -1, PREG_SPLIT_NO_EMPTY );
181
 
182
- // When it doesn't match, bail early.
183
  if ( ! $values ) {
184
  return;
185
  }
179
  protected function parse_string( $arguments, $default_value = true ) {
180
  $values = preg_split( '/\s+/', $arguments, -1, PREG_SPLIT_NO_EMPTY );
181
 
182
+ // When it doesnt match, bail early.
183
  if ( ! $values ) {
184
  return;
185
  }
common/src/Tribe/Utils/Global_ID.php CHANGED
@@ -15,25 +15,25 @@ class Tribe__Utils__Global_ID {
15
 
16
 
17
  /**
18
- * Don't allow creation of Global IDs for other types of source
19
  * @var array
20
  */
21
- protected $valid_types = [
22
  'url',
23
  'meetup',
24
  'facebook',
25
  'eventbrite',
26
- ];
27
 
28
  /**
29
  * For some types of ID we have a predefined Origin
30
  * @var array
31
  */
32
- protected $type_origins = [
33
- 'meetup' => 'meetup.com',
34
- 'facebook' => 'facebook.com',
35
  'eventbrite' => 'eventbrite.com',
36
- ];
37
 
38
  /**
39
  * Tribe__Utils__Global_ID constructor.
@@ -123,7 +123,7 @@ class Tribe__Utils__Global_ID {
123
  *
124
  * @return string
125
  */
126
- public function generate( array $args = [] ) {
127
  // We can't do this without type or origin
128
  if ( ! $this->type() || ! $this->origin() ) {
129
  return false;
@@ -150,7 +150,7 @@ class Tribe__Utils__Global_ID {
150
  $parsed = wp_parse_url( 'http://' . $global_id );
151
 
152
  if ( ! empty( $parsed['query'] ) ) {
153
- $parsed_query = [];
154
 
155
  wp_parse_str( $parsed['query'], $parsed_query );
156
 
15
 
16
 
17
  /**
18
+ * Dont allow creation of Global IDs for other types of source
19
  * @var array
20
  */
21
+ protected $valid_types = array(
22
  'url',
23
  'meetup',
24
  'facebook',
25
  'eventbrite',
26
+ );
27
 
28
  /**
29
  * For some types of ID we have a predefined Origin
30
  * @var array
31
  */
32
+ protected $type_origins = array(
33
+ 'meetup' => 'meetup.com',
34
+ 'facebook' => 'facebook.com',
35
  'eventbrite' => 'eventbrite.com',
36
+ );
37
 
38
  /**
39
  * Tribe__Utils__Global_ID constructor.
123
  *
124
  * @return string
125
  */
126
+ public function generate( array $args = array() ) {
127
  // We can't do this without type or origin
128
  if ( ! $this->type() || ! $this->origin() ) {
129
  return false;
150
  $parsed = wp_parse_url( 'http://' . $global_id );
151
 
152
  if ( ! empty( $parsed['query'] ) ) {
153
+ $parsed_query = array();
154
 
155
  wp_parse_str( $parsed['query'], $parsed_query );
156
 
common/src/Tribe/Utils/JSON.php CHANGED
@@ -22,7 +22,7 @@ class Tribe__Utils__JSON {
22
  return $value;
23
  }
24
  if ( is_array( $value ) ) {
25
- $escaped = [];
26
  foreach ( $value as $key => $subvalue ) {
27
  $escaped[ $key ] = self::escape_string( $subvalue );
28
  }
@@ -30,8 +30,8 @@ class Tribe__Utils__JSON {
30
  return $escaped;
31
  }
32
 
33
- $escapers = [ "\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c" ];
34
- $replacements = [ "\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b" ];
35
 
36
  return str_replace( $escapers, $replacements, $value );
37
  }
22
  return $value;
23
  }
24
  if ( is_array( $value ) ) {
25
+ $escaped = array();
26
  foreach ( $value as $key => $subvalue ) {
27
  $escaped[ $key ] = self::escape_string( $subvalue );
28
  }
30
  return $escaped;
31
  }
32
 
33
+ $escapers = array( "\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c" );
34
+ $replacements = array( "\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b" );
35
 
36
  return str_replace( $escapers, $replacements, $value );
37
  }
common/src/Tribe/Utils/Paths.php DELETED
@@ -1,75 +0,0 @@
1
- <?php
2
- /**
3
- * Utilities to manipulate file-system paths.
4
- *
5
- * @since 4.12.14
6
- *
7
- * @package Tribe\Utils
8
- */
9
-
10
- namespace Tribe\Utils;
11
-
12
- /**
13
- * Class Paths
14
- *
15
- * @since 4.12.14
16
- *
17
- * @package Tribe\Utils
18
- */
19
- class Paths {
20
-
21
- /**
22
- * Merge a set of paths into a single path.
23
- *
24
- * The function will take care of merging the paths intersecting their common fragments.
25
- * E.g. `foo/bar/baz` and `bar/baz/test.php` will be merged int `foo/bar/baz/test.php`.
26
- *
27
- * @since 4.12.14
28
- *
29
- * @param string|array<string<array<string>> ...$paths A set of paths to merge, each one either a string or an array
30
- * of path fragments.
31
- *
32
- * @return string The merged path, the path intersecting fragments removed.
33
- */
34
- public static function merge( ...$paths ) {
35
- $merged_paths = '';
36
-
37
- if ( count( $paths ) > 2 ) {
38
- $slice = array_splice( $paths, 0, 1 );
39
- $paths = array_merge( $slice, [ static::merge( ...$paths ) ] );
40
- }
41
-
42
- $path_1 = isset( $paths[0] ) ? $paths[0] : '';
43
- $lead_slash = is_string( $path_1 ) && $path_1 !== ltrim( $path_1, '\\/' ) ? DIRECTORY_SEPARATOR : '';
44
- $path_2 = isset( $paths[1] ) ? $paths[1] : '';
45
- $trail_slash = is_string( $path_2 ) && $path_2 !== rtrim( $path_2, '\\/' ) ? DIRECTORY_SEPARATOR : '';
46
- // Handle *nix spacing escape sequence (`\ `) correctly. The Windows one (`^ `) is already handled.
47
- $break_pattern = '/[\\\\\\/](?!\\s)/';
48
- $drop_empty_strings = static function ( $frag ) {
49
- return $frag !== '';
50
- };
51
- $path_1_frags = is_array( $path_1 )
52
- ? $path_1
53
- : array_filter( (array) preg_split( $break_pattern, $path_1 ), $drop_empty_strings );
54
- $path_2_frags = is_array( $path_2 )
55
- ? $path_2
56
- : array_filter( (array) preg_split( $break_pattern, $path_2 ), $drop_empty_strings );
57
- $non_consecutive_common = array_intersect( $path_1_frags, $path_2_frags );
58
-
59
- $trimmed_path_2 = trim(
60
- preg_replace(
61
- '#^' . preg_quote( implode( DIRECTORY_SEPARATOR, $non_consecutive_common ), '#' ) . '#', '',
62
- implode( DIRECTORY_SEPARATOR, $path_2_frags )
63
- ),
64
- '\\/'
65
- );
66
-
67
- $merged_paths .= $lead_slash . implode( DIRECTORY_SEPARATOR, $path_1_frags );
68
-
69
- if ( $trimmed_path_2 ) {
70
- $merged_paths .= DIRECTORY_SEPARATOR . $trimmed_path_2 . $trail_slash;
71
- }
72
-
73
- return $merged_paths;
74
- }
75
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Utils/Plugins.php CHANGED
@@ -16,7 +16,7 @@ class Tribe__Utils__Plugins {
16
  * @return array Plugin data; keys match capitalized file header declarations.
17
  */
18
  public static function get_plugin_data( $plugin_file ) {
19
- $headers = [
20
  'Name' => 'Plugin Name',
21
  'PluginURI' => 'Plugin URI',
22
  'Version' => 'Version',
@@ -28,7 +28,7 @@ class Tribe__Utils__Plugins {
28
  'TextDomain' => 'Text Domain',
29
  'DomainPath' => 'Domain Path',
30
  'Network' => 'Network',
31
- ];
32
 
33
  /**
34
  * Filter which header keys passed to get_file_data().
@@ -65,7 +65,7 @@ class Tribe__Utils__Plugins {
65
  $full_list = array_merge( $full_list, wp_get_active_network_plugins() );
66
  }
67
 
68
- $filtered_list = [];
69
 
70
  foreach ( $full_list as $plugin ) {
71
  $base = plugin_basename( $plugin );
16
  * @return array Plugin data; keys match capitalized file header declarations.
17
  */
18
  public static function get_plugin_data( $plugin_file ) {
19
+ $headers = array(
20
  'Name' => 'Plugin Name',
21
  'PluginURI' => 'Plugin URI',
22
  'Version' => 'Version',
28
  'TextDomain' => 'Text Domain',
29
  'DomainPath' => 'Domain Path',
30
  'Network' => 'Network',
31
+ );
32
 
33
  /**
34
  * Filter which header keys passed to get_file_data().
65
  $full_list = array_merge( $full_list, wp_get_active_network_plugins() );
66
  }
67
 
68
+ $filtered_list = array();
69
 
70
  foreach ( $full_list as $plugin ) {
71
  $base = plugin_basename( $plugin );
common/src/Tribe/Utils/Post_Collection.php CHANGED
@@ -5,24 +5,12 @@
5
  * @since 4.9.5
6
  */
7
 
8
- use Tribe\Traits\With_Post_Attribute_Detection;
9
-
10
  /**
11
  * Class Tribe__Utils__Post_Collection
12
  *
13
  * @since 4.9.5
14
  */
15
  class Tribe__Utils__Post_Collection extends Tribe__Utils__Collection {
16
- use With_Post_Attribute_Detection;
17
-
18
- /**
19
- * A list of the taxonomies supported by the post types in the collection.
20
- *
21
- * @since 4.12.6
22
- *
23
- * @var array<string>
24
- */
25
- protected $taxonomies;
26
 
27
  /**
28
  * Tribe__Utils__Post_Collection constructor.
@@ -36,235 +24,6 @@ class Tribe__Utils__Post_Collection extends Tribe__Utils__Collection {
36
  parent::__construct( array_filter( array_map( 'get_post', $items ) ) );
37
  }
38
 
39
- /**
40
- * Plucks fields from the posts in the collection creating a map using a field value as key and one
41
- * or more fields as values.
42
- *
43
- * Note: the method does not make any check on the uniqueness of the fields used as keys, e.g. this will
44
- * probably not return what intended: `$collection->pluck_combine( 'post_status', 'post_title' );`.
45
- * If there's a chance of the key fields not being unique, then use `#` as key field to simply return an
46
- * array of plucked values.
47
- *
48
- * @since 4.12.6
49
- *
50
- * @param string $key_field The field to key the return map by, or `#` to use
51
- * progressive integers to key the return value. Use fields
52
- * as keys only when their uniqueness is sure.
53
- * @param string|array<string>|array<array> $value_fields Either a single field name to populate the values with;
54
- * a list of fields, each plucked with default settings;
55
- * a map of fields to fetch, each defining a `single` and
56
- * `args` key to define the pluck `$single` and `$args`
57
- * parameters where applicable.
58
- * Additionally an `as` parameter can be specified to alias
59
- * the field in the results.
60
- * If the only requirement is to alias fields, just use a
61
- * flat map like `[ <orig_key_1> => <alias_1>, ... ]`.
62
- *
63
- * @return array<int|string,string|array> A list of plucked fields or a map of plucked fields keyed by the
64
- * specified field.
65
- */
66
- public function pluck_combine( $key_field = '#', $value_fields = 'post_title' ) {
67
- $value_req_is_array = is_array( $value_fields );
68
- $value_fields = (array) $value_fields;
69
- $rows = [];
70
- $field_names = [];
71
- $field_index = 0;
72
- foreach ( $value_fields as $k => $field ) {
73
- if ( is_string( $k ) && is_string( $field ) ) {
74
- $single = true;
75
- $args = [];
76
- $field_name = $field;
77
- $pluck = $k;
78
- } else {
79
- list( $as, $single, $args ) = $this->parse_field_args( $field );
80
- $field = is_array( $field ) ? $k : $field;
81
- $field_name = null === $as ? $field : $as;
82
- $pluck = $field;
83
- }
84
- $field_names[ $field_index ] = $field_name;
85
- $rows[ $field_name ] = $this->pluck( $pluck, $single, $args );
86
- $field_index ++;
87
- }
88
- $values = [];
89
-
90
- // Build a list with only numeric keys and string values.
91
- $fields_list = array_replace(
92
- array_filter(
93
- array_filter( $value_fields, 'is_string' ),
94
- 'is_numeric',
95
- ARRAY_FILTER_USE_KEY
96
- ),
97
- $field_names
98
- );
99
-
100
- for ( $i = 0, $count = count( $this->items ); $i < $count; $i ++ ) {
101
- $values[ $i ] = array_combine( $fields_list, array_column( $rows, $i ) );
102
- }
103
-
104
- if ( ! $value_req_is_array ) {
105
- $values = array_column( $values, reset( $fields_list ) );
106
- }
107
-
108
- // If the key field is `#` then use a progressive number as key, else use the specified field.
109
- $keys = '#' === $key_field
110
- ? range( 0, count( $this->items ) - 1 )
111
- : $this->pluck( $key_field, true );
112
-
113
- return array_combine( $keys, $values );
114
- }
115
-
116
- /**
117
- * Parses a single field request to extract the `$single` and `$args` parameters from it.
118
- *
119
- * @since 4.12.6
120
- *
121
- * @param string|array<string,string|array> $field The field name or the field arguments map.
122
- *
123
- * @return array<string,string,array> The `$as`, `$single` and `$args` parameters extracted from the field.
124
- */
125
- protected function parse_field_args( $field ) {
126
- $field = (array) $field;
127
-
128
- $as = isset( $field['as'] )
129
- ? (string) $field['as']
130
- : null;
131
- $single = isset( $field['single'] )
132
- ? (bool) $field['single']
133
- : true;
134
- $args = isset( $field['args'] )
135
- ? (array) $field['args']
136
- : null;
137
-
138
- return [ $as, $single, $args ];
139
- }
140
-
141
- /**
142
- * Plucks a post field, a taxonomy or a custom field from the collection.
143
- *
144
- * @since 4.12.6
145
- *
146
- * @param string $key The name of the field to pluck; the method will try to detect the type of field
147
- * from its name. If any issues might arise due to fields of different types with the
148
- * same name, then use the `pluck_<type>` methods directly.
149
- * @param bool $single Whether to pluck a single taxonomy term or custom fields or an array of all the taxonomy
150
- * terms or custom fields for each post.
151
- * @param array $args A list of n optional arguments that will be passed down to the `pluck_<type>` methods.
152
- * Currently only the the `pluck_taxonomy` will support one more argument to define the
153
- * query arguments for the term query.
154
- *
155
- * @return array<string>|array<array> Either an array of plucked fields when plucking post fields or single
156
- * custom fields or taxonomy terms, or an array of arrays, each one a list
157
- * of all the taxonomy terms or custom fields entries for each post.
158
- */
159
- public function pluck( $key, $single = true, array $args = null ) {
160
- $type = $this->detect_field_type( $key );
161
-
162
- switch ( $type ) {
163
- case 'post_field':
164
- return $this->pluck_field( $key );
165
- break;
166
- case 'taxonomy':
167
- return $this->pluck_taxonomy( $key, $single, $args );
168
- break;
169
- default:
170
- return $this->pluck_meta( $key, $single );
171
- break;
172
- }
173
- }
174
-
175
- /**
176
- * Detects the type of a post field from its name.
177
- *
178
- * @since 4.12.6
179
- *
180
- * @param string $key The name of the field to check.
181
- *
182
- * @return string The type of field detected for the key, either `post_field`, `taxonomy` or `custom_field`.
183
- */
184
- protected function detect_field_type( $key ) {
185
- if ( $this->is_a_post_field( $key ) ) {
186
- return 'post_field';
187
- }
188
-
189
- // Init taxonomies as late as possible and only once.
190
- $this->init_taxonomies();
191
-
192
- if ( $this->is_a_taxonomy( $key ) ) {
193
- return 'taxonomy';
194
- }
195
-
196
- return 'custom_field';
197
- }
198
-
199
- /**
200
- * Initialize the post collection taxonomies by filling up the `$taxonomies` property.
201
- *
202
- * Note the collection will use the first post in the collection to fill the taxonomies array,
203
- * this assumes the collection is homogeneous in its post types.
204
- *
205
- * @since 4.12.6
206
- */
207
- protected function init_taxonomies() {
208
- if ( ! empty( $this->taxonomies ) ) {
209
- // Already set up, return.
210
- return;
211
- }
212
-
213
- if ( empty( $this->items ) ) {
214
- // We cannot detect taxonomies from an empty list of items.
215
- $this->taxonomies = [];
216
-
217
- return;
218
- }
219
-
220
- // Use the first post to detect the taxonomies.
221
- $this->taxonomies = get_object_taxonomies( reset( $this->items ), 'names' );
222
- }
223
-
224
- /**
225
- * Plucks a post field from all posts in the collection.
226
- *
227
- * Note: there is no check on the name of the plucked post field: if a non-existing post field is requested, then
228
- * the method will return an empty array.
229
- *
230
- * @since 4.12.6
231
- *
232
- * @param string $field The name of the post field to pluck.
233
- *
234
- * @return array<string> A list of the plucked post fields from each item in the collection.
235
- */
236
- public function pluck_field( $field ) {
237
- return wp_list_pluck( $this->items, $field );
238
- }
239
-
240
- /**
241
- * Plucks taxonomy terms assigned to the posts in the collection.
242
- *
243
- * Note: there is no check on the taxonomy being an existing one or not; that responsibility
244
- * is on the user code.
245
- *
246
- * @since 4.12.6
247
- *
248
- * @param string $taxonomy The name of the post taxonomy to pluck terms for.
249
- * @param bool $single Whether to return only the first results or all of them.
250
- * @param array<string,string|array> $args A set of arguments as supported by the `WP_Term_Query::__construct`
251
- * method.
252
- *
253
- * @return array<mixed>|array<array> Either an array of the requested results if `$single` is `true`
254
- * or an array of arrays if `$single` is `false`.
255
- */
256
- public function pluck_taxonomy( $taxonomy, $single = true, array $args = null ) {
257
- $plucked = [];
258
- $args = null === $args ? [ 'fields' => 'names' ] : $args;
259
-
260
- foreach ( $this as $item ) {
261
- $terms = wp_get_object_terms( $item->ID, $taxonomy, $args );
262
- $plucked[] = $single ? reset( $terms ) : $terms;
263
- }
264
-
265
- return $plucked;
266
- }
267
-
268
  /**
269
  * Plucks a meta key for all elements in the collection.
270
  *
@@ -281,7 +40,7 @@ class Tribe__Utils__Post_Collection extends Tribe__Utils__Collection {
281
  * string value.
282
  */
283
  public function pluck_meta( $meta_key, $single = true ) {
284
- $plucked = [];
285
 
286
  foreach ( $this as $item ) {
287
  $plucked[] = get_post_meta( $item->ID, $meta_key, $single );
@@ -289,4 +48,4 @@ class Tribe__Utils__Post_Collection extends Tribe__Utils__Collection {
289
 
290
  return $plucked;
291
  }
292
- }
5
  * @since 4.9.5
6
  */
7
 
 
 
8
  /**
9
  * Class Tribe__Utils__Post_Collection
10
  *
11
  * @since 4.9.5
12
  */
13
  class Tribe__Utils__Post_Collection extends Tribe__Utils__Collection {
 
 
 
 
 
 
 
 
 
 
14
 
15
  /**
16
  * Tribe__Utils__Post_Collection constructor.
24
  parent::__construct( array_filter( array_map( 'get_post', $items ) ) );
25
  }
26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  /**
28
  * Plucks a meta key for all elements in the collection.
29
  *
40
  * string value.
41
  */
42
  public function pluck_meta( $meta_key, $single = true ) {
43
+ $plucked = array();
44
 
45
  foreach ( $this as $item ) {
46
  $plucked[] = get_post_meta( $item->ID, $meta_key, $single );
48
 
49
  return $plucked;
50
  }
51
+ }
common/src/Tribe/Utils/Post_Root_Pool.php CHANGED
@@ -132,8 +132,8 @@ class Tribe__Utils__Post_Root_Pool {
132
  protected function maybe_init_pool() {
133
  self::$prefix_pool = get_transient( $this->pool_transient_name );
134
  if ( self::$prefix_pool === false ) {
135
- self::$prefix_pool = [];
136
- set_transient( $this->pool_transient_name, [] );
137
  }
138
  }
139
 
132
  protected function maybe_init_pool() {
133
  self::$prefix_pool = get_transient( $this->pool_transient_name );
134
  if ( self::$prefix_pool === false ) {
135
+ self::$prefix_pool = array();
136
+ set_transient( $this->pool_transient_name, array() );
137
  }
138
  }
139
 
common/src/Tribe/Utils/Strings.php DELETED
@@ -1,65 +0,0 @@
1
- <?php
2
- /**
3
- * String Utilities
4
- *
5
- * @since 4.12.1
6
- * @package Tribe\Utils
7
- */
8
-
9
- namespace Tribe\Utils;
10
-
11
- /**
12
- * Class Strings
13
- *
14
- * @since 4.12.1
15
- *
16
- * @package Tribe\Utils
17
- */
18
- class Strings {
19
-
20
- /**
21
- * Replace the first occurrence of a given value in the string.
22
- *
23
- * @since 4.12.1
24
- *
25
- * @param string $search The string to search for and replace.
26
- * @param string $replace The replacement string.
27
- * @param string $subject The string to do the search and replace from.
28
- *
29
- * @return string The string with the first occurrence of a given value replaced.
30
- */
31
- public static function replace_first( $search, $replace, $subject ) {
32
- if ( '' === $search ) {
33
- return $subject;
34
- }
35
-
36
- $position = strpos( $subject, $search );
37
-
38
- if ( $position !== false ) {
39
- return substr_replace( $subject, $replace, $position, strlen( $search ) );
40
- }
41
-
42
- return $subject;
43
- }
44
-
45
- /**
46
- * Replace the last occurrence of a given value in the string.
47
- *
48
- * @since 4.12.1
49
- *
50
- * @param string $search The string to search for and replace.
51
- * @param string $replace The replacement string.
52
- * @param string $subject The string to do the search and replace from.
53
- *
54
- * @return string The string with the last occurrence of a given value replaced.
55
- */
56
- public static function replace_last( $search, $replace, $subject ) {
57
- $position = strrpos( $subject, $search );
58
-
59
- if ( $position !== false ) {
60
- return substr_replace( $subject, $replace, $position, strlen( $search ) );
61
- }
62
-
63
- return $subject;
64
- }
65
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Utils/Taxonomy.php DELETED
@@ -1,126 +0,0 @@
1
- <?php
2
-
3
- namespace Tribe\Utils;
4
-
5
- /**
6
- * Class Taxonomy.
7
- *
8
- * @since 4.13.0
9
- *
10
- * @package Tribe\Utils
11
- */
12
- class Taxonomy {
13
- /**
14
- * Match any operand.
15
- *
16
- * @since 4.13.0
17
- * @since 4.13.0
18
- *
19
- * @var string
20
- */
21
- const OPERAND_OR = 'OR';
22
-
23
- /**
24
- * Match all operand.
25
- *
26
- * @since 4.13.0
27
- *
28
- * @var string
29
- */
30
- const OPERAND_AND = 'AND';
31
-
32
- /**
33
- * Default operand for taxonomy filters.
34
- *
35
- * @since 4.13.0
36
- *
37
- * @var string
38
- */
39
- const DEFAULT_OPERAND = self::OPERAND_OR;
40
-
41
- /**
42
- * Translates a given argument to repository arguments.
43
- *
44
- * @since 4.13.0
45
- *
46
- * @param string $taxonomy Which taxonomy we are using to setup.
47
- * @param string|array $terms Which terms we are going to use here.
48
- * @param string $operand Which is the operand we should use.
49
- *
50
- * @return array A fully qualified `tax_query` array, merge using `array_merge_recursively`.
51
- */
52
- public static function translate_to_repository_args( $taxonomy, $terms, $operand = self::OPERAND_OR ) {
53
- $tax_query = [];
54
- // Prevent empty values from even trying.
55
- if ( empty( $taxonomy ) ) {
56
- return $tax_query;
57
- }
58
-
59
- // Prevent empty values from even trying.
60
- if ( empty( $terms ) ) {
61
- return $tax_query;
62
- }
63
-
64
- $repo = tribe_events();
65
-
66
- $operation = static::OPERAND_AND === $operand ? 'term_and' : 'term_in';
67
-
68
- $repo->by( $operation, $taxonomy, $terms );
69
-
70
- // This will only build the query not execute it.
71
- $built_query = $repo->build_query();
72
-
73
- if ( ! empty( $built_query->query_vars['tax_query'] ) ) {
74
- $tax_query = $built_query->query_vars['tax_query'];
75
- }
76
-
77
- return $tax_query;
78
- }
79
-
80
- /**
81
- * Transform all Term IDs and Slugs into IDs of existing terms in a given taxonomy.
82
- *
83
- * @since 4.13.0
84
- *
85
- * @param string|int|array $terms Terms to be cleaned up.
86
- * @param string $taxonomy Which taxonomy we are querying for.
87
- *
88
- * @return array List of IDs of terms.
89
- */
90
- public static function normalize_to_term_ids( $terms, $taxonomy ) {
91
- if ( empty( $terms ) ) {
92
- return $terms;
93
- }
94
-
95
- /**
96
- * Allow filtering of the needle for splitting terms, by default it will be a comma.
97
- *
98
- * @since 4.13.0
99
- *
100
- * @param string $needle Defaults to a comma. Which character that we will split terms by.
101
- * @param string|array $terms Terms string that we will split by the needle filtered.
102
- * @param string $taxonomy Which taxonomy this will be for.
103
- */
104
- $needle = apply_filters( 'tribe_normalize_to_term_ids_needle', ',', $terms, $taxonomy );
105
- if ( is_string( $terms ) && false !== strpos( $terms, $needle ) ) {
106
- $terms = array_map( 'trim', explode( $needle, $terms ) );
107
- }
108
-
109
- $terms = array_map( static function ( $param ) use ( $taxonomy ) {
110
- $param = preg_replace( '/^#/', '', $param );
111
- $term_by = is_numeric( $param ) ? 'ID' : 'slug';
112
- $term = get_term_by( $term_by, $param, $taxonomy );
113
-
114
- if ( ! $term instanceof \WP_Term ) {
115
- return false;
116
- }
117
-
118
- return $term->term_id;
119
- }, (array) $terms );
120
-
121
- $terms = array_filter( $terms );
122
- $terms = array_unique( $terms );
123
-
124
- return $terms;
125
- }
126
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Validate.php CHANGED
@@ -57,7 +57,7 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
57
  * @param array $field The field object to validate
58
  * @param mixed $value The value to validate
59
  */
60
- public function __construct( $field_id, $field, $value, $additional_args = [] ) {
61
 
62
  // prepare object properties
63
  $this->result = new stdClass;
@@ -96,7 +96,7 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
96
  if ( ( ! isset( $_POST[ $field_id ] ) || ! $_POST[ $field_id ] || $_POST[ $field_id ] == '' ) && isset( $this->field['can_be_empty'] ) && $this->field['can_be_empty'] ) {
97
  $this->result->valid = true;
98
  } else {
99
- call_user_func( [ $this, $this->type ] ); // run the validation
100
  }
101
  } else {
102
  // invalid validation type set, validation fails
@@ -291,7 +291,7 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
291
  return;
292
  }
293
 
294
- $this->value = is_array( $this->value ) ? $this->value : [ $this->value ];
295
 
296
  foreach ( $this->value as $val ) {
297
  if ( array_key_exists( $val, $this->field['options'] ) ) {
@@ -312,10 +312,10 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
312
  */
313
  public function options_with_label() {
314
  if ( array_key_exists( $this->value, $this->field['options'] ) ) {
315
- $this->value = ( $this->value === 0 ) ? false : [
316
  $this->value,
317
  $this->field['options'][ $this->value ],
318
- ];
319
  $this->result->valid = true;
320
  } else {
321
  $this->result->valid = false;
@@ -465,7 +465,7 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
465
  if ( ! isset( $country[0] ) || ! isset( $country[1] ) ) {
466
  $this->result->valid = false;
467
  $this->result->error = sprintf( esc_html__( 'Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom.', 'tribe-common' ), $this->label );
468
- $this->value = wp_kses( $this->value, [] );
469
 
470
  return;
471
  }
57
  * @param array $field The field object to validate
58
  * @param mixed $value The value to validate
59
  */
60
+ public function __construct( $field_id, $field, $value, $additional_args = array() ) {
61
 
62
  // prepare object properties
63
  $this->result = new stdClass;
96
  if ( ( ! isset( $_POST[ $field_id ] ) || ! $_POST[ $field_id ] || $_POST[ $field_id ] == '' ) && isset( $this->field['can_be_empty'] ) && $this->field['can_be_empty'] ) {
97
  $this->result->valid = true;
98
  } else {
99
+ call_user_func( array( $this, $this->type ) ); // run the validation
100
  }
101
  } else {
102
  // invalid validation type set, validation fails
291
  return;
292
  }
293
 
294
+ $this->value = is_array( $this->value ) ? $this->value : array( $this->value );
295
 
296
  foreach ( $this->value as $val ) {
297
  if ( array_key_exists( $val, $this->field['options'] ) ) {
312
  */
313
  public function options_with_label() {
314
  if ( array_key_exists( $this->value, $this->field['options'] ) ) {
315
+ $this->value = ( $this->value === 0 ) ? false : array(
316
  $this->value,
317
  $this->field['options'][ $this->value ],
318
+ );
319
  $this->result->valid = true;
320
  } else {
321
  $this->result->valid = false;
465
  if ( ! isset( $country[0] ) || ! isset( $country[1] ) ) {
466
  $this->result->valid = false;
467
  $this->result->error = sprintf( esc_html__( 'Country List must be formatted as one country per line in the following format: <br>US, United States <br> UK, United Kingdom.', 'tribe-common' ), $this->label );
468
+ $this->value = wp_kses( $this->value, array() );
469
 
470
  return;
471
  }
common/src/Tribe/Validator/Base.php CHANGED
@@ -94,7 +94,7 @@ class Tribe__Validator__Base implements Tribe__Validator__Interface {
94
  $sep = is_string( $sep ) ? $sep : ',';
95
  $list = Tribe__Utils__Array::list_to_array( $list, $sep );
96
 
97
- $valid = array_filter( $list, [ $this, 'is_positive_int' ] );
98
 
99
  return ! empty( $valid ) && count( $valid ) === count( $list );
100
  }
94
  $sep = is_string( $sep ) ? $sep : ',';
95
  $list = Tribe__Utils__Array::list_to_array( $list, $sep );
96
 
97
+ $valid = array_filter( $list, array( $this, 'is_positive_int' ) );
98
 
99
  return ! empty( $valid ) && count( $valid ) === count( $list );
100
  }
common/src/Tribe/View_Helpers.php CHANGED
@@ -56,21 +56,21 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
56
  natsort( $countries );
57
 
58
  // Placeholder option ('Select a Country') first by default
59
- $select_country = [ '' => esc_html__( 'Select a Country:', 'tribe-common' ) ];
60
  $countries = $select_country + $countries;
61
 
62
  if ( ( $postId || $useDefault ) ) {
63
  $countryValue = get_post_meta( $postId, '_EventCountry', true );
64
  if ( $countryValue ) {
65
- $defaultCountry = [ array_search( $countryValue, $countries ), $countryValue ];
66
  } else {
67
  $defaultCountry = tribe_get_default_value( 'country' );
68
  }
69
  if ( $defaultCountry && $defaultCountry[0] != '' ) {
70
  $selectCountry = array_shift( $countries );
71
  asort( $countries );
72
- $countries = [ $defaultCountry[0] => $defaultCountry[1] ] + $countries;
73
- $countries = [ '' => $selectCountry ] + $countries;
74
  array_unique( $countries );
75
  }
76
  }
@@ -182,7 +182,7 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
182
  * @return array The hours array.
183
  */
184
  private static function hours() {
185
- $hours = [];
186
  $rangeMax = self::is_24hr_format() ? 23 : 12;
187
  $rangeStart = $rangeMax > 12 ? 0 : 1;
188
  foreach ( range( $rangeStart, $rangeMax ) as $hour ) {
@@ -237,7 +237,7 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
237
  * @return array The minutes array.
238
  */
239
  private static function minutes( $exact_minute = 0 ) {
240
- $minutes = [];
241
 
242
  // The exact minute should be an absint between 0 and 59
243
  $exact_minute = absint( $exact_minute );
@@ -282,10 +282,10 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
282
  public static function getMeridianOptions( $date = '', $isStart = false ) {
283
  if ( strstr( get_option( 'time_format', Tribe__Date_Utils::TIMEFORMAT ), 'A' ) ) {
284
  $a = 'A';
285
- $meridians = [ 'AM', 'PM' ];
286
  } else {
287
  $a = 'a';
288
- $meridians = [ 'am', 'pm' ];
289
  }
290
  if ( empty( $date ) ) {
291
  $meridian = ( $isStart ) ? $meridians[0] : $meridians[1];
@@ -317,7 +317,7 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
317
  $current_year = (int) date_i18n( 'Y' );
318
  $years_back = (int) apply_filters( 'tribe_years_to_go_back', 5, $current_year );
319
  $years_forward = (int) apply_filters( 'tribe_years_to_go_forward', 5, $current_year );
320
- $years = [];
321
  for ( $i = $years_back; $i > 0; $i -- ) {
322
  $year = $current_year - $i;
323
  $years[] = $year;
@@ -337,7 +337,7 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
337
  * @return array The days array.
338
  */
339
  public static function days( $totalDays ) {
340
- $days = [];
341
  foreach ( range( 1, $totalDays ) as $day ) {
342
  $days[ $day ] = $day;
343
  }
56
  natsort( $countries );
57
 
58
  // Placeholder option ('Select a Country') first by default
59
+ $select_country = array( '' => esc_html__( 'Select a Country:', 'tribe-common' ) );
60
  $countries = $select_country + $countries;
61
 
62
  if ( ( $postId || $useDefault ) ) {
63
  $countryValue = get_post_meta( $postId, '_EventCountry', true );
64
  if ( $countryValue ) {
65
+ $defaultCountry = array( array_search( $countryValue, $countries ), $countryValue );
66
  } else {
67
  $defaultCountry = tribe_get_default_value( 'country' );
68
  }
69
  if ( $defaultCountry && $defaultCountry[0] != '' ) {
70
  $selectCountry = array_shift( $countries );
71
  asort( $countries );
72
+ $countries = array( $defaultCountry[0] => $defaultCountry[1] ) + $countries;
73
+ $countries = array( '' => $selectCountry ) + $countries;
74
  array_unique( $countries );
75
  }
76
  }
182
  * @return array The hours array.
183
  */
184
  private static function hours() {
185
+ $hours = array();
186
  $rangeMax = self::is_24hr_format() ? 23 : 12;
187
  $rangeStart = $rangeMax > 12 ? 0 : 1;
188
  foreach ( range( $rangeStart, $rangeMax ) as $hour ) {
237
  * @return array The minutes array.
238
  */
239
  private static function minutes( $exact_minute = 0 ) {
240
+ $minutes = array();
241
 
242
  // The exact minute should be an absint between 0 and 59
243
  $exact_minute = absint( $exact_minute );
282
  public static function getMeridianOptions( $date = '', $isStart = false ) {
283
  if ( strstr( get_option( 'time_format', Tribe__Date_Utils::TIMEFORMAT ), 'A' ) ) {
284
  $a = 'A';
285
+ $meridians = array( 'AM', 'PM' );
286
  } else {
287
  $a = 'a';
288
+ $meridians = array( 'am', 'pm' );
289
  }
290
  if ( empty( $date ) ) {
291
  $meridian = ( $isStart ) ? $meridians[0] : $meridians[1];
317
  $current_year = (int) date_i18n( 'Y' );
318
  $years_back = (int) apply_filters( 'tribe_years_to_go_back', 5, $current_year );
319
  $years_forward = (int) apply_filters( 'tribe_years_to_go_forward', 5, $current_year );
320
+ $years = array();
321
  for ( $i = $years_back; $i > 0; $i -- ) {
322
  $year = $current_year - $i;
323
  $years[] = $year;
337
  * @return array The days array.
338
  */
339
  public static function days( $totalDays ) {
340
+ $days = array();
341
  foreach ( range( 1, $totalDays ) as $day ) {
342
  $days[ $day ] = $day;
343
  }
common/src/Tribe/Widget/Manager.php DELETED
@@ -1,97 +0,0 @@
1
- <?php
2
- /**
3
- * Widgets manager for Tribe plugins.
4
- *
5
- * @since 4.12.12
6
- *
7
- * @package Tribe\Widget
8
- */
9
-
10
- namespace Tribe\Widget;
11
-
12
- /**
13
- * Class Widget Manager.
14
- *
15
- * @since 4.12.12
16
- *
17
- * @package Tribe\Widget
18
- */
19
- class Manager {
20
-
21
- /**
22
- * Get the list of widgets available for handling.
23
- *
24
- * @since 4.12.12
25
- *
26
- * @return array An associative array of widgets in the shape `[ <slug> => <class> ]`.
27
- */
28
- public function get_registered_widgets() {
29
- $widgets = [];
30
-
31
- /**
32
- * Allow the registering of widgets from other plugins.
33
- *
34
- * @since 4.12.12
35
- *
36
- * @var array<string,string> An associative array of widgets in the shape `[ <slug> => <class> ]`.
37
- */
38
- $widgets = apply_filters( 'tribe_widgets', $widgets );
39
-
40
- return $widgets;
41
- }
42
-
43
- /**
44
- * Verifies if a given widget slug is registered for handling.
45
- *
46
- * @since 4.12.12
47
- *
48
- * @param string $slug The widget slug we are checking for registration.
49
- *
50
- * @return bool Whether the widget is registered or not.
51
- */
52
- public function is_widget_registered( $slug ) {
53
- $registered_widgets = $this->get_registered_widgets();
54
-
55
- return isset( $registered_widgets[ $slug ] );
56
- }
57
-
58
- /**
59
- * Verifies if a given widget class name is registered for handling.
60
- *
61
- * @since 4.12.12
62
- *
63
- * @param string $class_name The widget class name we are checking for registration.
64
- *
65
- * @return bool Whether the widget is registered, by class.
66
- */
67
- public function is_widget_registered_by_class( $class_name ) {
68
- $registered_widgets = $this->get_registered_widgets();
69
-
70
- return in_array( $class_name, $registered_widgets, true );
71
- }
72
-
73
- /**
74
- * Add new widgets handler to ensure our list of widget slugs is registered by class name.
75
- *
76
- * @since 4.12.12
77
- */
78
- public function register_widgets_with_wp() {
79
- $registered_widgets = $this->get_registered_widgets();
80
-
81
- // Add to WordPress all of the registered Widgets.
82
- foreach ( $registered_widgets as $widget => $class_name ) {
83
- register_widget( $class_name );
84
- }
85
- }
86
-
87
- /**
88
- * Remove Widget from WordPress widget register by class name.
89
- *
90
- * @since 4.12.12
91
- *
92
- * @param string $class_name The class name of the widget to unregister.
93
- */
94
- public function unregister_widget_from_wp( $class_name ) {
95
- unregister_widget( $class_name );
96
- }
97
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Widget/Widget_Abstract.php DELETED
@@ -1,874 +0,0 @@
1
- <?php
2
-
3
- namespace Tribe\Widget;
4
-
5
- use Tribe__Utils__Array as Arr;
6
- use Tribe__Template;
7
-
8
- /**
9
- * The abstract base without Views that all widgets should implement.
10
- *
11
- * @since 4.12.12
12
- *
13
- * @package Tribe\Widget
14
- */
15
- abstract class Widget_Abstract extends \WP_Widget implements Widget_Interface {
16
- /**
17
- * Prefix for WordPress registration of the widget.
18
- *
19
- * @since 4.13.0
20
- *
21
- * @var string
22
- */
23
- const PREFIX = 'tribe-widget-';
24
-
25
- /**
26
- * Slug of the current widget.
27
- *
28
- * @since 4.13.0
29
- *
30
- * @var string
31
- */
32
- protected static $widget_slug;
33
-
34
- /**
35
- * If this Widget was rendered on the screen, often useful for Assets.
36
- *
37
- * Every widget needs this to be defined internally otherwise it wont work.
38
- *
39
- * @since 4.13.0
40
- *
41
- * @var boolean
42
- */
43
- protected static $widget_in_use;
44
-
45
- /**
46
- * An instance of template.
47
- *
48
- * @since 4.12.14
49
- *
50
- * @var Tribe__Template
51
- */
52
- protected $admin_template;
53
-
54
- /**
55
- * Default arguments to be merged into final arguments of the widget.
56
- *
57
- * @since 4.12.12
58
- *
59
- * @var array<string,mixed>
60
- */
61
- protected $default_arguments = [];
62
-
63
- /**
64
- * Sidebar arguments passed to the widget.
65
- *
66
- * @since 4.13.0
67
- *
68
- * @var array<string,mixed>
69
- */
70
- protected $sidebar_arguments = [];
71
-
72
- /**
73
- * Array map allowing aliased widget arguments.
74
- *
75
- * The array keys are aliases of the array values (i.e. the "real" widget attributes to parse).
76
- * Example array: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
77
- * Example widget usage: [some_tag alias=17 to='Fred'] will be parsed as [some_tag canonical=17 to='Fred']
78
- *
79
- * @since 4.12.12
80
- *
81
- * @var array<string,string>
82
- */
83
- protected $aliased_arguments = [];
84
-
85
- /**
86
- * Array of callbacks for validation of arguments.
87
- *
88
- * @since 4.12.12
89
- *
90
- * @var array<string,callable>
91
- */
92
- protected $validate_arguments_map = [];
93
-
94
- /**
95
- * Arguments of the current widget.
96
- *
97
- * @since 4.12.12
98
- *
99
- * @var array<string,mixed>
100
- */
101
- protected $arguments = [];
102
-
103
- /**
104
- * Current set of Admin Fields used on the admin form.
105
- *
106
- * @since 4.13.0
107
- *
108
- * @var array<string,mixed>
109
- */
110
- protected $admin_fields = [];
111
-
112
- /**
113
- * HTML content of the current widget.
114
- *
115
- * @since 4.12.12
116
- *
117
- * @var string
118
- */
119
- protected $content;
120
-
121
- /**
122
- * {@inheritDoc}
123
- */
124
- public function __construct( $id_base = '', $name = '', $widget_options = [], $control_options = [] ) {
125
- /**
126
- * For backwards compatibility purposes alone.
127
- * @todo remove after 2021-08-01
128
- */
129
- $this->slug = static::get_widget_slug();
130
-
131
- parent::__construct(
132
- $this->parse_id_base( $id_base ),
133
- $this->parse_name( $name ),
134
- $this->parse_widget_options( $widget_options ),
135
- $this->parse_control_options( $control_options )
136
- );
137
- }
138
-
139
- /**
140
- * Parse the ID base sent to the __construct method.
141
- *
142
- * @since 4.13.0
143
- *
144
- * @param string $id_base The ID base that we will use for this Widget instance.
145
- *
146
- * @return string|null Parsed value given by the __construct.
147
- */
148
- protected function parse_id_base( $id_base = null ) {
149
- // When empty use the one default to the widget.
150
- if ( empty( $id_base ) ) {
151
- $id_base = static::PREFIX . static::get_widget_slug();
152
- }
153
-
154
- return $id_base;
155
- }
156
-
157
- /**
158
- * Parse the ID base sent to the __construct method.
159
- *
160
- * @since 4.13.0
161
- *
162
- * @param string $name The ID base that we will use for this Widget instance.
163
- *
164
- * @return string Parsed value given by the __construct.
165
- */
166
- protected function parse_name( $name = null ) {
167
- // When empty use the one default to the widget.
168
- if ( empty( $name ) ) {
169
- $name = static::get_default_widget_name();
170
- }
171
-
172
- return $name;
173
- }
174
-
175
- /**
176
- * Sets up the Widget name,
177
- *
178
- * @since 4.13.0
179
- *
180
- * @return string Returns the default widget name.
181
- */
182
- public static function get_default_widget_name() {
183
- return __( 'Widget', 'tribe-common' );
184
- }
185
-
186
- /**
187
- * Parse the widget options base sent to the __construct method.
188
- *
189
- * @since 4.13.0
190
- *
191
- * @param array $widget_options The widget options base that we will use for this Widget instance.
192
- *
193
- * @return array Widget options that will be passed to the __construct.
194
- */
195
- protected function parse_widget_options( $widget_options = [] ) {
196
- // When empty use the one default to the widget.
197
- if ( empty( $widget_options ) ) {
198
- $widget_options = static::get_default_widget_options();
199
- }
200
-
201
- return $widget_options;
202
- }
203
-
204
- /**
205
- * Gets the default widget options.
206
- *
207
- * @since 4.13.0
208
- *
209
- * @return array Default widget options.
210
- */
211
- public static function get_default_widget_options() {
212
- return [];
213
- }
214
-
215
- /**
216
- * Parse the control options base sent to the __construct method.
217
- *
218
- * @since 4.13.0
219
- *
220
- * @param array $control_options The base control options passed to the construct method.
221
- *
222
- * @return array Parsed value given by the __construct.
223
- */
224
- protected function parse_control_options( $control_options = [] ) {
225
- // When empty use the one default to the widget.
226
- if ( empty( $control_options ) ) {
227
- $control_options = static::get_default_control_options();
228
- }
229
-
230
- return $control_options;
231
- }
232
-
233
- /**
234
- * Gets the default control options.
235
- *
236
- * @since 4.13.0
237
- *
238
- * @return array Default control options.
239
- */
240
- public static function get_default_control_options() {
241
- return [];
242
- }
243
-
244
- /**
245
- * {@inheritDoc}
246
- */
247
- public static function get_widget_slug() {
248
- return static::$widget_slug;
249
- }
250
-
251
- /**
252
- * {@inheritDoc}
253
- */
254
- public static function is_widget_in_use() {
255
- return static::$widget_in_use;
256
- }
257
-
258
- /**
259
- * {@inheritDoc}
260
- */
261
- public static function widget_in_use( $toggle = true ) {
262
- static::$widget_in_use = tribe_is_truthy( $toggle );
263
- }
264
-
265
- /**
266
- * Setup the widget.
267
- *
268
- * @since 5.2.1
269
- * @since 4.13.0 include $args and $instance params.
270
- *
271
- * @param array $args Display arguments including 'before_title', 'after_title',
272
- * 'before_widget', and 'after_widget'.
273
- * @param array $instance The settings for the particular instance of the widget.
274
- *
275
- * @return mixed
276
- */
277
- abstract public function setup( $args = [], $instance = [] );
278
-
279
- /**
280
- * {@inheritDoc}
281
- */
282
- public function form( $instance ) {
283
- $this->setup( [], $instance );
284
-
285
- // Specifically on the admin we force the admin fields into the arguments.
286
- $this->arguments['admin_fields'] = $this->get_admin_fields();
287
-
288
- $this->toggle_hooks( true );
289
-
290
- $html = $this->get_admin_html( $this->get_arguments() );
291
-
292
- $this->toggle_hooks( false );
293
- return $html;
294
- }
295
-
296
- /**
297
- * {@inheritDoc}
298
- */
299
- public function widget( $args, $instance ) {
300
- // Once the widget is rendered we trigger that it is in use.
301
- static::widget_in_use( true );
302
-
303
- $this->setup( $args, $instance );
304
-
305
- $this->toggle_hooks( true );
306
-
307
- $html = $this->get_html();
308
-
309
- $this->toggle_hooks( false );
310
-
311
- echo $html;
312
-
313
- return $html;
314
- }
315
-
316
- /**
317
- * Returns the rendered View HTML code.
318
- *
319
- * @since 4.12.12
320
- *
321
- * @return string
322
- */
323
- abstract public function get_html();
324
-
325
- /**
326
- * {@inheritDoc}
327
- */
328
- public function set_aliased_arguments( array $alias_map ) {
329
- $this->aliased_arguments = Arr::filter_to_flat_scalar_associative_array( (array) $alias_map );
330
- }
331
-
332
- /**
333
- * {@inheritDoc}
334
- */
335
- public function get_aliased_arguments() {
336
- return $this->aliased_arguments;
337
- }
338
-
339
- /**
340
- * {@inheritDoc}
341
- */
342
- public function parse_arguments( array $arguments ) {
343
- $arguments = Arr::parse_associative_array_alias( (array) $arguments, (array) $this->get_aliased_arguments() );
344
-
345
- return $this->validate_arguments( $arguments );
346
- }
347
-
348
- /**
349
- * {@inheritDoc}
350
- */
351
- public function validate_arguments( array $arguments ) {
352
- $validate_arguments_map = $this->filter_validated_arguments_map( $this->get_validated_arguments_map() );
353
-
354
- // Only overwrite methods that have a validation, the rest stay as-is.
355
- foreach ( $validate_arguments_map as $key => $callback ) {
356
- $arguments[ $key ] = $callback( Arr::get( $arguments, $key, null ) );
357
- }
358
-
359
- return $arguments;
360
- }
361
-
362
- /**
363
- * {@inheritDoc}
364
- */
365
- public function get_validated_arguments_map() {
366
- return $this->validate_arguments_map;
367
- }
368
-
369
- /**
370
- * {@inheritDoc}
371
- */
372
- public function filter_validated_arguments_map( $validate_arguments_map = [] ) {
373
- /**
374
- * Applies a filter to the validation map for instance arguments.
375
- *
376
- * @since 4.12.12
377
- *
378
- * @param array<string,callable> $validate_arguments_map Current set of callbacks for arguments.
379
- * @param static $instance The widget instance we are dealing with.
380
- */
381
- $validate_arguments_map = apply_filters( 'tribe_widget_validate_arguments_map', $validate_arguments_map, $this );
382
-
383
- $widget_slug = static::get_widget_slug();
384
-
385
- /**
386
- * Applies a filter to the validation map for instance arguments for a specific widget. Based on the widget slug of the widget
387
- *
388
- * @since 4.12.12
389
- *
390
- * @param array<string,callable> $validate_arguments_map Current set of callbacks for arguments.
391
- * @param static $instance The widget instance we are dealing with.
392
- */
393
- $validate_arguments_map = apply_filters( "tribe_widget_{$widget_slug}_validate_arguments_map", $validate_arguments_map, $this );
394
-
395
- return $validate_arguments_map;
396
- }
397
-
398
- /**
399
- * Sets up the widgets default admin fields.
400
- *
401
- * @since 4.12.14
402
- *
403
- * @return array<string,mixed> The array of widget admin fields.
404
- */
405
- abstract protected function setup_admin_fields();
406
-
407
- /**
408
- * {@inheritDoc}
409
- */
410
- public function get_admin_fields() {
411
- $fields = $this->setup_admin_fields();
412
- $arguments = $this->get_arguments();
413
- $fields = $this->filter_admin_fields( $fields );
414
-
415
- foreach ( $fields as $field_name => $field ) {
416
- $fields[ $field_name ] = $this->get_admin_data( $arguments, $field_name, $field );
417
- }
418
-
419
- return $fields;
420
- }
421
-
422
- /**
423
- * {@inheritDoc}
424
- */
425
- public function filter_admin_fields( $admin_fields ) {
426
- /**
427
- * Applies a filter to a widget's admin fields.
428
- *
429
- * @since 4.12.14
430
- *
431
- * @param array<string,mixed> $admin_fields The array of widget admin fields.
432
- * @param static $instance The widget instance we are dealing with.
433
- */
434
- $admin_fields = apply_filters( 'tribe_widget_admin_fields', $admin_fields, $this );
435
-
436
- $widget_slug = static::get_widget_slug();
437
-
438
- /**
439
- * Applies a filter to a widget's admin fields based on the widget slug of the widget.
440
- *
441
- * @since TBE
442
- *
443
- * @param array<string,mixed> $admin_fields The array of widget admin fields.
444
- * @param static $instance The widget instance we are dealing with.
445
- */
446
- $admin_fields = apply_filters( "tribe_widget_{$widget_slug}_admin_fields", $admin_fields, $this );
447
-
448
- return $admin_fields;
449
- }
450
-
451
- /**
452
- * {@inheritDoc}
453
- */
454
- public function filter_updated_instance( $updated_instance, $new_instance ) {
455
- /**
456
- * Applies a filter to updated instance of a widget.
457
- *
458
- * @since 4.12.14
459
- *
460
- * @param array<string,mixed> $updated_instance The updated instance of the widget.
461
- * @param array<string,mixed> $new_instance The new values for the widget instance.
462
- * @param static $instance The widget instance we are dealing with.
463
- */
464
- $updated_instance = apply_filters( 'tribe_widget_updated_instance', $updated_instance, $new_instance, $this );
465
-
466
- $widget_slug = static::get_widget_slug();
467
-
468
- /**
469
- * Applies a filter to updated instance of a widget arguments based on the widget slug of the widget.
470
- *
471
- * @since 4.12.14
472
- *
473
- * @param array<string,mixed> $updated_instance The updated instance of the widget.
474
- * @param array<string,mixed> $new_instance The new values for the widget instance.
475
- * @param static $instance The widget instance we are dealing with.
476
- */
477
- $updated_instance = apply_filters( "tribe_widget_{$widget_slug}_updated_instance", $updated_instance, $new_instance, $this );
478
-
479
- return $updated_instance;
480
- }
481
-
482
- /**
483
- * Sets up the widgets arguments, using saved values.
484
- *
485
- * @since 4.12.14
486
- *
487
- * @param array<string,mixed> $instance Saved values for the widget instance.
488
- *
489
- * @return array<string,mixed> The widget arguments, as set by the user in the widget string.
490
- */
491
- protected function setup_arguments( array $instance = [] ) {
492
- // First Setup the Defaults to make sure dynamic values are present.
493
- $this->setup_default_arguments();
494
-
495
- // Now merge instance into the arguments then to the defaults.
496
- $this->arguments = array_merge(
497
- $this->get_default_arguments(),
498
- $this->arguments,
499
- $instance
500
- );
501
-
502
- // Parse these arguments to avoid problems.
503
- $this->arguments = $this->parse_arguments( $this->arguments );
504
-
505
- return $this->arguments;
506
- }
507
-
508
- /**
509
- * Handles gathering the data for admin fields.
510
- *
511
- * @since 5.3.0
512
- * @since 4.13.0 Move into common from Events Abstract
513
- *
514
- * @param array<string,mixed> $arguments Current set of arguments.
515
- * @param int $field_name The ID of the field.
516
- * @param array<string,mixed> $field The field info.
517
- *
518
- * @return array<string,mixed> $data The assembled field data.
519
- */
520
- public function get_admin_data( $arguments, $field_name, $field ) {
521
- $data = [
522
- 'classes' => Arr::get( $field, 'classes', '' ),
523
- 'dependency' => $this->format_dependency( $field ),
524
- 'id' => $this->get_field_id( $field_name ),
525
- 'label' => Arr::get( $field, 'label', '' ),
526
- 'name' => $this->get_field_name( $field_name ),
527
- 'options' => Arr::get( $field, 'options', [] ),
528
- 'placeholder' => Arr::get( $field, 'placeholder', '' ),
529
- 'value' => Arr::get( $arguments, $field_name ),
530
- ];
531
-
532
- $children = Arr::get( $field, 'children', [] );
533
-
534
- if ( ! empty( $children ) ) {
535
- foreach ( $children as $child_name => $child ) {
536
- $input_name = ( 'radio' === $child['type'] ) ? $field_name : $child_name;
537
-
538
- $child_data = $this->get_admin_data(
539
- $arguments,
540
- $input_name,
541
- $child
542
- );
543
-
544
- $data['children'][ $child_name ] = $child_data;
545
- }
546
- }
547
-
548
- $data = array_merge( $field, $data );
549
-
550
- // @todo properly filter this.
551
- return apply_filters( 'tribe_widget_field_data', $data, $field_name, $this );
552
- }
553
-
554
- /**
555
- * {@inheritDoc}
556
- */
557
- public function get_arguments( array $_deprecated = [] ) {
558
- return $this->filter_arguments( $this->arguments );
559
- }
560
-
561
- /**
562
- * {@inheritDoc}
563
- */
564
- public function filter_arguments( $arguments ) {
565
- /**
566
- * Applies a filter to instance arguments.
567
- *
568
- * @since 4.12.12
569
- *
570
- * @param array<string,mixed> $arguments Current set of arguments.
571
- * @param static $instance The widget instance we are dealing with.
572
- */
573
- $arguments = apply_filters( 'tribe_widget_arguments', $arguments, $this );
574
-
575
- $widget_slug = static::get_widget_slug();
576
-
577
- /**
578
- * Applies a filter to instance arguments based on the widget slug of the widget.
579
- *
580
- * @since 4.12.12
581
- *
582
- * @param array<string,mixed> $arguments Current set of arguments.
583
- * @param static $instance The widget instance we are dealing with.
584
- */
585
- $arguments = apply_filters( "tribe_widget_{$widget_slug}_arguments", $arguments, $this );
586
-
587
- return $arguments;
588
- }
589
-
590
- /**
591
- * {@inheritDoc}
592
- */
593
- public function get_argument( $index, $default = null ) {
594
- $argument = Arr::get( $this->get_arguments(), $index, $default );
595
-
596
- return $this->filter_argument( $argument, $index, $default );
597
- }
598
-
599
- /**
600
- * {@inheritDoc}
601
- */
602
- public function filter_argument( $argument, $index, $default = null ) {
603
- /**
604
- * Applies a filter to a specific widget argument, catch all for all widgets.
605
- *
606
- * @since 4.12.12
607
- *
608
- * @param mixed $argument The argument.
609
- * @param string|int $index Which index we intend to fetch from the arguments.
610
- * @param array<string,mixed> $default Default value if it doesn't exist.
611
- * @param static $instance The widget instance we are dealing with.
612
- */
613
- $argument = apply_filters( 'tribe_widget_argument', $argument, $index, $default, $this );
614
-
615
- $widget_slug = static::get_widget_slug();
616
-
617
- /**
618
- * Applies a filter to a specific widget argument, to a particular widget slug.
619
- *
620
- * @since 4.12.12
621
- *
622
- * @param mixed $argument The argument value.
623
- * @param string|int $index Which index we intend to fetch from the arguments.
624
- * @param mixed $default Default value if it doesn't exist.
625
- * @param static $instance The widget instance we are dealing with.
626
- */
627
- $argument = apply_filters( "tribe_widget_{$widget_slug}_argument", $argument, $index, $default, $this );
628
-
629
- return $argument;
630
- }
631
-
632
- /**
633
- * {@inheritDoc}
634
- */
635
- public function setup_sidebar_arguments( $arguments ) {
636
- $this->sidebar_arguments = $arguments;
637
- }
638
-
639
- /**
640
- * {@inheritDoc}
641
- */
642
- public function get_sidebar_arguments() {
643
- return $this->filter_sidebar_arguments( $this->sidebar_arguments );
644
- }
645
-
646
- /**
647
- * {@inheritDoc}
648
- */
649
- public function filter_sidebar_arguments( $arguments ) {
650
- /**
651
- * Applies a filter to the widget sidebar arguments, catch all for all widgets.
652
- *
653
- * @since 4.13.0
654
- *
655
- * @param mixed $arguments The argument.
656
- * @param static $instance The widget instance we are dealing with.
657
- */
658
- $arguments = apply_filters( 'tribe_widget_sidebar_arguments', $arguments, $this );
659
-
660
- $widget_slug = static::get_widget_slug();
661
-
662
- /**
663
- * Applies a filter to the widget sidebar arguments, to a particular widget slug.
664
- *
665
- * @since 4.13.0
666
- *
667
- * @param mixed $arguments The argument.
668
- * @param static $instance The widget instance we are dealing with.
669
- */
670
- $arguments = apply_filters( "tribe_widget_{$widget_slug}_sidebar_arguments", $arguments, $this );
671
-
672
- return $arguments;
673
- }
674
-
675
- /**
676
- * Sets up the widgets default arguments.
677
- *
678
- * @since 4.12.14
679
- *
680
- * @return array<string,mixed> The default widget arguments.
681
- */
682
- protected function setup_default_arguments() {
683
- // Setup admin fields.
684
- $this->default_arguments['admin_fields'] = $this->get_admin_fields();
685
-
686
- // Add the Widget to the arguments to pass to the admin template.
687
- $this->default_arguments['widget_obj'] = $this;
688
-
689
- return $this->default_arguments;
690
- }
691
-
692
- /**
693
- * {@inheritDoc}
694
- */
695
- public function get_default_arguments() {
696
- return $this->filter_default_arguments( $this->default_arguments );
697
- }
698
-
699
- /**
700
- * {@inheritDoc}
701
- */
702
- public function filter_default_arguments( array $default_arguments = [] ) {
703
- /**
704
- * Applies a filter to default instance arguments.
705
- *
706
- * @since 4.12.12
707
- *
708
- * @param array<string,mixed> $default_arguments Current set of default arguments.
709
- * @param static $instance The widget instance we are dealing with.
710
- */
711
- $default_arguments = apply_filters( 'tribe_widget_default_arguments', $default_arguments, $this );
712
-
713
- $widget_slug = static::get_widget_slug();
714
-
715
- /**
716
- * Applies a filter to default instance arguments based on the widget slug of the widget.
717
- *
718
- * @since 4.12.12
719
- *
720
- * @param array<string,mixed> $default_arguments Current set of default arguments.
721
- * @param static $instance The widget instance we are dealing with.
722
- */
723
- return apply_filters( "tribe_widget_{$widget_slug}_default_arguments", $default_arguments, $this );
724
- }
725
-
726
- /**
727
- * {@inheritDoc}
728
- */
729
- public function filter_args_to_context( array $alterations = [], array $arguments = [] ) {
730
- /**
731
- * Applies a filter to arguments before they get turned into context.
732
- *
733
- * @since 4.13.0
734
- *
735
- * @param array<string,mixed> $alterations Current set of alterations for the context.
736
- * @param array<string,mixed> $arguments Current set of arguments in the widget.
737
- * @param static $instance The widget instance we are dealing with.
738
- */
739
- $alterations = apply_filters( 'tribe_widget_args_to_context', $alterations, $arguments, $this );
740
-
741
- $widget_slug = static::get_widget_slug();
742
-
743
- /**
744
- * Applies a filter to arguments before they get turned into context based on the widget slug of the widget.
745
- *
746
- * @since 4.13.0
747
- *
748
- * @param array<string,mixed> $alterations Current set of alterations for the context.
749
- * @param array<string,mixed> $arguments Current set of arguments in the widget.
750
- * @param static $instance The widget instance we are dealing with.
751
- */
752
- return apply_filters( "tribe_widget_{$widget_slug}_args_to_context", $alterations, $arguments, $this );
753
- }
754
-
755
- /**
756
- * Sets the admin template.
757
- *
758
- * @since 4.12.14
759
- *
760
- * @param \Tribe__Template $template The admin template to use.
761
- */
762
- public function set_admin_template( \Tribe__Template $template ) {
763
- $this->admin_template = $template;
764
- }
765
-
766
- /**
767
- * Returns the current admin template.
768
- *
769
- * @since 4.12.14
770
- *
771
- * @return \Tribe__Template The current admin template.
772
- */
773
- public function get_admin_template() {
774
- return $this->admin_template;
775
- }
776
-
777
- /**
778
- * Get the admin html for the widget form.
779
- *
780
- * @since 4.12.14
781
- *
782
- * @param array<string,mixed> $arguments Current set of arguments.
783
- *
784
- * @return string HTML for the admin fields.
785
- */
786
- public function get_admin_html( $arguments ) {
787
- return $this->get_admin_template()->template( [ 'widgets', static::get_widget_slug() ], $arguments );
788
- }
789
-
790
- /**
791
- * Toggles hooks for the widget, will be deactivated after the rendering has happened.
792
- *
793
- * @since 4.13.0
794
- *
795
- * @param bool $toggle Whether to turn the hooks on or off.
796
- *
797
- * @return void
798
- */
799
- public function toggle_hooks( $toggle ) {
800
- if ( $toggle ) {
801
- $this->add_hooks();
802
- } else {
803
- $this->remove_hooks();
804
- }
805
-
806
- /**
807
- * Fires after widget was setup while rendering a widget.
808
- *
809
- * @since 4.13.0
810
- *
811
- * @param bool $toggle Whether the hooks should be turned on or off. This value is `true` before a widget
812
- * HTML is rendered and `false` after the widget HTML rendered.
813
- * @param static $this The widget object that is toggling the hooks.
814
- */
815
- do_action( 'tribe_shortcode_toggle_hooks', $toggle, $this );
816
- }
817
-
818
- /**
819
- * Toggles off portions of the template based on widget params.
820
- * This runs on the `tribe_shortcode_toggle_hooks` hook when the toggle is true.
821
- *
822
- * @since 4.13.0
823
- */
824
- protected function add_hooks() {
825
-
826
- }
827
-
828
- /**
829
- * Toggles on portions of the template that were modified in `add_template_mods()` above.
830
- * This runs on the `tribe_shortcode_toggle_hooks` hook when the toggle is false.
831
- * Thus encapsulating our control of these shared pieces to only when the widget is rendering.
832
- *
833
- * @since 4.13.0
834
- */
835
- protected function remove_hooks() {
836
-
837
- }
838
-
839
- /**********************
840
- * Deprecated Methods *
841
- **********************/
842
-
843
- /**
844
- * Slug of the current widget.
845
- *
846
- * @since 4.12.12
847
- *
848
- * @deprecated 4.13.0 Moved into using static::$widget_slug
849
- * @todo remove after 2021-08-01
850
- *
851
- * @var string
852
- */
853
- protected $slug;
854
-
855
- /**
856
- * The slug of the admin widget view.
857
- *
858
- * @since 4.12.14
859
- *
860
- * @deprecated 4.13.0 Moved into using static::$widget_slug
861
- * @todo remove after 2021-08-01
862
- *
863
- * @var string
864
- */
865
- protected $view_admin_slug;
866
-
867
- /**
868
- * {@inheritDoc}
869
- * @deprecated 4.13.0 Moved into using static::get_widget_slug
870
- */
871
- public function get_registration_slug() {
872
- return static::get_widget_slug();
873
- }
874
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/Tribe/Widget/Widget_Interface.php DELETED
@@ -1,331 +0,0 @@
1
- <?php
2
-
3
- namespace Tribe\Widget;
4
-
5
- /**
6
- * Interface Widget_Interface
7
- *
8
- * @since 4.12.12
9
- *
10
- * @package Tribe\Widget
11
- *
12
- */
13
- interface Widget_Interface {
14
- /**
15
- * Constructor for V2 Widgets.
16
- *
17
- * @since 4.12.12
18
- *
19
- * @param string $id_base Optional. Base ID for the widget, lowercase. If left empty,
20
- * a portion of the widget's class name will be used. Has to be unique.
21
- * @param string $name Name for the widget displayed on the configuration page.
22
- * @param array<string,mixed> $widget_options Optional. Widget options. See wp_register_sidebar_widget() for
23
- * information on accepted arguments. Default empty array.
24
- * @param array<string,mixed> $control_options Optional. Widget control options. See wp_register_widget_control() for
25
- * information on accepted arguments. Default empty array.
26
- */
27
- public function __construct( $id_base = '', $name = '', $widget_options = [], $control_options = [] );
28
-
29
- /**
30
- * Returns the widget slug that allows the widget to be built via the widget class using that slug.
31
- *
32
- * @since 4.13.0
33
- *
34
- * @return string The widget slug.
35
- */
36
- public static function get_widget_slug();
37
-
38
- /**
39
- * Returns if the widget is in use on this current page.
40
- *
41
- * @since 4.13.0
42
- *
43
- * @return bool If this widget is in use.
44
- */
45
- public static function is_widget_in_use();
46
-
47
- /**
48
- * Sets if this widget is in use on the current page.
49
- *
50
- * @since 4.13.0
51
- *
52
- * @see tribe_is_truthy()
53
- *
54
- * @param bool $toggle Toggle true or false if a widget is in use.
55
- */
56
- public static function widget_in_use( $toggle = true );
57
-
58
- /**
59
- * Echoes the widget content.
60
- *
61
- * @since 4.12.12
62
- *
63
- * @param array<string,mixed> $args Display arguments including 'before_title', 'after_title',
64
- * 'before_widget', and 'after_widget'.
65
- * @param array<string,mixed> $instance The settings for the particular instance of the widget.
66
- */
67
- public function widget( $args, $instance );
68
-
69
- /**
70
- * Updates a particular instance of a widget.
71
- *
72
- * This function should check that `$new_instance` is set correctly. The newly-calculated
73
- * value of `$instance` should be returned. If false is returned, the instance won't be
74
- * saved/updated.
75
- *
76
- * @since 4.12.12
77
- *
78
- * @param array<string,mixed> $new_instance New settings for this instance as input by the user via
79
- * WP_Widget::form().
80
- * @param array<string,mixed> $old_instance Old settings for this instance.
81
- *
82
- * @return array<string,mixed> Settings to save or bool false to cancel saving.
83
- */
84
- public function update( $new_instance, $old_instance );
85
-
86
- /**
87
- * Outputs the settings update form.
88
- *
89
- * @since 4.12.12
90
- *
91
- * @param array<string,mixed> $instance Current settings.
92
- *
93
- * @return string Default return is 'noform'.
94
- */
95
- public function form( $instance );
96
-
97
- /**
98
- * Sets the aliased arguments array.
99
- *
100
- * @see Tribe__Utils__Array::parse_associative_array_alias() The expected format.
101
- *
102
- * @since 4.12.12
103
- *
104
- * @param array<string,mixed> $alias_map An associative array of aliases: key as alias, value as mapped canonical.
105
- * Example: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
106
- */
107
- public function set_aliased_arguments( array $alias_map );
108
-
109
- /**
110
- * Gets the aliased arguments array.
111
- *
112
- * @since 4.12.12
113
- *
114
- * @return array<string,string> The associative array map of aliases and their canonical arguments.
115
- */
116
- public function get_aliased_arguments();
117
-
118
- /**
119
- * Returns the arguments for the widget parsed correctly with defaults applied.
120
- *
121
- * @since 4.12.12
122
- *
123
- * @param array $arguments Set of arguments passed to the widget at hand.
124
- *
125
- * @return array<string,mixed> The parsed widget arguments map.
126
- */
127
- public function parse_arguments( array $arguments );
128
-
129
- /**
130
- * Returns the array of arguments for this widget after applying the validation callbacks.
131
- *
132
- * @since 4.12.12
133
- *
134
- * @param array $arguments Set of arguments passed to the widget at hand.
135
- *
136
- * @return array<string,mixed> The validated widget arguments map.
137
- */
138
- public function validate_arguments( array $arguments );
139
-
140
- /**
141
- * Returns the array of callbacks for this widget's arguments.
142
- *
143
- * @since 4.12.12
144
- *
145
- * @return array<string,callable> A map of the widget arguments that have survived validation.
146
- */
147
- public function get_validated_arguments_map();
148
-
149
- /**
150
- * Returns the array of callbacks for this widget's arguments.
151
- *
152
- * @since 4.12.12
153
- *
154
- * @param array<string,callable> $validate_arguments_map Array of callbacks for this widget's arguments.
155
- *
156
- * @return array<string,callable> A map of the widget arguments that have survived validation.
157
- */
158
- public function filter_validated_arguments_map( $validate_arguments_map = [] );
159
-
160
- /**
161
- * Returns an array of admin fields for the widget.
162
- *
163
- * @since 4.12.14
164
- *
165
- * @return array<string,mixed> The array of widget admin fields.
166
- */
167
- public function get_admin_fields();
168
-
169
- /**
170
- * Filter a widget's admin fields.
171
- *
172
- * @since 4.12.14
173
- *
174
- * @param array<string,mixed> $admin_fields The array of widget admin fields.
175
- *
176
- * @return array<string,mixed> The array of widget admin fields.
177
- */
178
- public function filter_admin_fields( $admin_fields );
179
-
180
- /**
181
- * Filters a widget's updated instance.
182
- *
183
- * @since 4.12.14
184
- *
185
- * @param array<string,mixed> $updated_instance The updated instance of the widget.
186
- * @param array<string,mixed> $new_instance The new values for the widget instance.
187
- *
188
- * @return array<string,mixed> The updated instance to be saved for the widget.
189
- */
190
- public function filter_updated_instance( $updated_instance, $new_instance );
191
-
192
- /**
193
- * Returns a widget arguments after been parsed.
194
- *
195
- * @since 4.12.12
196
- * @since 4.13.0 Deprecated the instance method as that is passed only to setup_arguments method.
197
- *
198
- * @param array<string,mixed> $_deprecated Saved values for the widget instance.
199
- *
200
- * @return array<string,mixed> The widget arguments, as set by the user in the widget string.
201
- */
202
- public function get_arguments( array $_deprecated = [] );
203
-
204
- /**
205
- * Filter a widget's arguments after they have been been parsed.
206
- *
207
- * @since 4.12.12
208
- *
209
- * @param array<string,mixed> $arguments Current set of arguments.
210
- *
211
- * @return array<string,mixed> The widget arguments, as set by the user in the widget string.
212
- */
213
- public function filter_arguments( $arguments );
214
-
215
- /**
216
- * Get a single widget argument after it has been parsed and filtered.
217
- *
218
- * @since 4.12.12
219
- *
220
- * @param string|int $index Which index we intend to fetch from the arguments.
221
- * @param array|mixed $default Default value if it doesn't exist.
222
- *
223
- * @uses Tribe__Utils__Array::get For index fetching and Default.
224
- *
225
- * @return mixed Value for the Index passed as the first argument.
226
- */
227
- public function get_argument( $index, $default = null );
228
-
229
- /**
230
- * Filter a widget argument.
231
- *
232
- * @since 4.12.12
233
- *
234
- * @param mixed $argument The argument value.
235
- * @param string|int $index Which index we intend to fetch from the arguments.
236
- * @param array|mixed $default Default value if it doesn't exist.
237
- *
238
- * @uses Tribe__Utils__Array::get For index fetching and Default.
239
- *
240
- * @return mixed Value for the Index passed as the first argument.
241
- */
242
- public function filter_argument( $argument, $index, $default = null );
243
-
244
- /**
245
- * Get default arguments for a widget.
246
- *
247
- * @since 4.12.12
248
- *
249
- * @return array<string,mixed> The map of widget default arguments.
250
- */
251
- public function get_default_arguments();
252
-
253
- /**
254
- * Filter a widget's default arguments.
255
- *
256
- * @since 4.12.12
257
- *
258
- * @param array<string,mixed> $default_arguments Current set of default arguments.
259
- *
260
- * @return array<string,mixed> The map of widget default arguments.
261
- */
262
- public function filter_default_arguments( array $default_arguments = [] );
263
-
264
-
265
- /**
266
- * Filter a widget's arguments before they are passed to the context.
267
- *
268
- * @since 4.13.0
269
- *
270
- * @param array<string,mixed> $alterations Current set of alterations for the context.
271
- * @param array<string,mixed> $arguments Current set of arguments in the widget.
272
- *
273
- * @return array<string,mixed> The map of arguments after filtering.
274
- */
275
- public function filter_args_to_context( array $alterations = [], array $arguments = [] );
276
-
277
- /**
278
- * Returns a widget's HTML.
279
- *
280
- * @since 4.12.12
281
- *
282
- * @return string The rendered widget's HTML code.
283
- */
284
- public function get_html();
285
-
286
- /**
287
- * Sets the sidebar arguments sent by the theme.
288
- *
289
- * @since 4.13.0
290
- *
291
- * @param array<string,mixed> $arguments Arguments passed by the theme.
292
- */
293
- public function setup_sidebar_arguments( $arguments );
294
-
295
- /**
296
- * Sets the sidebar arguments sent by the theme.
297
- *
298
- * @since 4.13.0
299
- *
300
- * @return array<string, mixed> Arguments sent by the theme and stored in this class.
301
- */
302
- public function get_sidebar_arguments();
303
-
304
- /**
305
- * Sets the sidebar arguments sent by the theme.
306
- *
307
- * @since 4.13.0
308
- *
309
- * @param array<string,mixed> $arguments Arguments passed by the theme.
310
- *
311
- * @return array<string, mixed> Arguments sent by the theme and stored in this class.
312
- */
313
- public function filter_sidebar_arguments( $arguments );
314
-
315
- /**********************
316
- * Deprecated Methods *
317
- **********************/
318
-
319
- /**
320
- * Returns the widget slug that allows the widget to be built via the widget class using that slug.
321
- *
322
- * @since 4.12.12
323
- *
324
- * @deprecated 4.13.0 In favor of static::get_widget_slug()
325
- * @todo remove after 2021-08-01
326
- *
327
- * @return string The widget slug.
328
- */
329
- public function get_registration_slug();
330
-
331
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/admin-views/app-shop.php CHANGED
@@ -1,206 +1,95 @@
1
- <?php
2
- // $main, $products, $bundles, $extensions must be defined before loading this file
3
 
4
- $all_products = [
5
- 'for-sale' => [],
6
- 'installed' => [],
7
- ];
8
- foreach ( $products as $product ) {
9
- if ( $product->is_installed ) {
10
- $all_products['installed'][] = $product;
11
- } else {
12
- $all_products['for-sale'][] = $product;
13
- }
14
- }
15
- ?>
16
-
17
- <div id="tribe-app-shop">
18
-
19
- <div class="tribe-header">
20
- <div class="content-wrapper">
21
- <div class="logo-word-mark">
22
- <img
23
- src="<?php echo esc_url( tribe_resource_url( 'images/logo/tec-brand.svg', false, null, $main ) ); ?>"
24
- alt="<?php esc_attr_e( 'The Events Calendar brand logo', 'tribe-common' ); ?>"
25
- />
26
- </div>
27
-
28
- <ul>
29
- <li class="selected" data-tab="tribe-all-solutions"><?php esc_html_e( 'All Solutions', 'tribe-common' ); ?></li>
30
- <li data-tab="tribe-bundles"><?php esc_html_e( 'Save with Bundles', 'tribe-common' ); ?></li>
31
- <li data-tab="tribe-extensions"><?php esc_html_e( 'Extensions', 'tribe-common' ); ?></li>
32
- </ul>
33
- </div>
34
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
- <div id="tribe-all-solutions" class="tribe-content">
37
- <img
38
- class="tribe-events-admin-graphic"
39
- src="<?php echo esc_url( tribe_resource_url( 'images/header/all-solutions.jpg', false, null, $main ) ); ?>"
40
- alt="<?php esc_attr_e( 'Shapes and lines for visual interest', 'tribe-common' ); ?>"
41
- />
 
 
 
 
 
 
 
 
 
42
  <div class="content-wrapper">
43
  <div class="addon-grid">
44
- <?php foreach ( $all_products as $status => $some_products ) : ?>
45
- <?php if ( 'for-sale' == $status ) :?>
46
- <h2><?php esc_html_e( 'One calendar. Countless ways to make it your own.', 'tribe-common' ); ?></h2>
47
- <p><?php esc_html_e( 'Calendars, ticketing, and powerful WordPress tools to manage your events from start to finish.', 'tribe-common' ); ?></p>
48
- <?php else: ?>
49
- <h2 class="already-installed"><?php esc_html_e( 'Already Installed', 'tribe-common' ); ?></h2>
50
- <?php endif; ?>
51
-
52
- <?php foreach ( $some_products as $product ) : ?>
53
- <div class="tribe-addon">
54
- <div class="headline">
55
- <img src="<?php echo esc_url( tribe_resource_url( $product->logo, false, null, $main ) ); ?>" alt="<?php esc_attr_e( 'TEC Logo', 'tribe-common' ); ?>" />
56
- <h3 <?php echo ( 'installed' == $status || $product->free ) ? 'class="has-pill"' : ''; ?>><a href="<?php echo esc_url( $product->link ); ?>" target="_blank"><?php echo esc_html( $product->title ); ?></a></h3>
57
-
58
- <?php if ( 'installed' == $status ) : ?>
59
- <span class="pill active"><?php esc_html_e( 'Active', 'tribe-common' ); ?></span>
60
- <?php elseif ( $product->free ) : ?>
61
- <span class="pill free"><?php esc_html_e( 'FREE', 'tribe-common' ); ?></span>
62
- <?php endif; ?>
63
-
64
- </div>
65
- <div class="promo-image">
66
- <a href="<?php echo esc_url( $product->link ); ?>" target="_blank"><img src="<?php echo esc_url( tribe_resource_url( $product->image, false, null, $main ) ); ?>" /></a>
67
- </div>
68
-
69
- <div class="description">
70
- <p><?php echo esc_html( $product->description ); ?></p>
71
- </div>
72
-
73
- <ul class="features">
74
- <?php foreach( $product->features as $feature ) : ?>
75
- <li>
76
- <span class="check">
77
- <svg fill="none" height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m13.7357.374803-8.40784 8.402337-3.06361-3.06158c-.52424-.506-1.357557-.49877-1.872924.01626s-.522608 1.34779-.016275 1.87169l4.008209 4.00559c.52173.5212 1.36747.5212 1.8892 0l9.35244-9.34634c.5064-.5239.4991-1.356665-.0162-1.871692-.5154-.515027-1.3487-.522264-1.873-.016265z" fill="#3d54ff" fill-rule="evenodd"/></svg>
78
- </span><span class="feature-text">
79
- <?php echo esc_html( $feature ); ?>
80
- </span>
81
- </li>
82
- <?php endforeach; ?>
83
- </ul>
84
-
85
- <?php if ( 'installed' == $status ) : ?>
86
- <a class="button" href="https://evnt.is/1aiz"><?php esc_html_e( 'Manage', 'tribe-common' ); ?></a>
87
- <?php else : ?>
88
- <a class="button" href="<?php echo esc_url( $product->link ); ?>"><?php esc_html_e( 'Learn More', 'tribe-common' ); ?></a>
89
- <?php endif; ?>
90
-
91
  </div>
92
- <?php endforeach; ?>
93
- <?php endforeach; ?>
94
- </div>
95
- </div>
96
- </div>
97
 
98
- <div id="tribe-bundles" class="tribe-content">
99
- <img
100
- class="tribe-events-admin-graphic"
101
- src="<?php echo esc_url( tribe_resource_url( 'images/header/bundles.jpg', false, null, $main ) ); ?>"
102
- alt="<?php esc_attr_e( 'Shapes and lines for visual interest', 'tribe-common' ); ?>"
103
- />
104
- <div class="content-wrapper">
105
- <div class="addon-grid">
106
- <h2><?php esc_html_e( 'The plugins you need at one discounted price', 'tribe-common' ); ?></h2>
107
- <p><?php esc_html_e( 'We\'ve packaged our most popular plugins into bundles jam-packed with value.', 'tribe-common' ); ?></p>
108
- <?php foreach ( $bundles as $bundle ) : ?>
109
- <div class="tribe-bundle">
110
- <div class="details">
111
- <div class="headline">
112
- <img src="<?php echo esc_url( tribe_resource_url( $bundle->logo, false, null, $main ) ); ?>" alt="<?php esc_attr_e( 'TEC Logo', 'tribe-common' ); ?>" />
113
- <h3><a href="<?php echo esc_url( $bundle->link ); ?>" target="_blank"><?php echo esc_html( $bundle->title ); ?></a></h3>
114
- </div>
115
-
116
- <p><?php echo esc_html( $bundle->description ); ?></p>
117
-
118
- <div class="cta wide">
119
- <a class="button" href="<?php echo esc_url( $bundle->link ); ?>"><?php esc_html_e( 'Save With A Bundle', 'tribe-common' ); ?></a>
120
- <span class="discount"><?php echo esc_html( $bundle->discount ); ?></span>
121
- </div>
122
- </div>
123
-
124
- <div class="includes">
125
- <h4><?php esc_html_e( 'Includes', 'tribe-common' ); ?></h4>
126
- <ul>
127
- <?php foreach ( $bundle->includes as $i => $product_key ) : ?>
128
- <?php
129
- // get $product object
130
- $product = $products[ $product_key ];
131
  ?>
 
 
 
 
 
132
 
133
- <li>
134
- <img src="<?php echo esc_url( tribe_resource_url( $product->logo, false, null, $main ) ); ?>" alt="<?php esc_attr_e( 'TEC Logo', 'tribe-common' ); ?>" />
135
- <span><?php echo esc_html( $product->title ); ?></span>
136
- </li>
137
-
138
- <?php if ( $i == 4 ) : // if there are 5 products included, then we need 2 lists ?>
139
- </ul><ul class="second">
140
- <?php endif; ?>
141
- <?php endforeach; ?>
142
- </ul>
143
- </div>
144
-
145
- <div class="cta narrow">
146
- <a class="button" href="<?php echo esc_url( $bundle->link ); ?>"><?php esc_html_e( 'Save With A Bundle', 'tribe-common' ); ?></a>
147
- <span class="discount"><?php echo esc_html( $bundle->discount ); ?></span>
148
- </div>
149
-
150
- </div>
151
- <?php endforeach; ?>
152
- </div>
153
- </div>
154
- </div>
155
-
156
- <div id="tribe-extensions" class="tribe-content">
157
- <img
158
- class="tribe-events-admin-graphic"
159
- src="<?php echo esc_url( tribe_resource_url( 'images/header/extensions.jpg', false, null, $main ) ); ?>"
160
- alt="<?php esc_attr_e( 'Shapes and lines for visual interest', 'tribe-common' ); ?>"
161
- />
162
- <div class="content-wrapper">
163
- <div class="addon-grid">
164
- <h2><?php esc_html_e( 'Free extensions to power up your plugins', 'tribe-common' ); ?></h2>
165
- <p><?php esc_html_e( 'Extensions are quick solutions our team came up with to solve specific issues you may need. (Note - extensions are not covered by our support team.)', 'tribe-common' ); ?></p>
166
- <?php foreach ( $extensions as $extension ) : ?>
167
- <div class="tribe-addon">
168
- <div class="headline">
169
- <h3 class="has-pill"><a href="<?php echo esc_url( $extension->link ); ?>" target="_blank"><?php echo esc_html( $extension->title ); ?></a></h3>
170
- <span class="pill free"><?php esc_html_e( 'FREE', 'tribe-common' ); ?></span>
171
- </div>
172
-
173
- <div class="promo-image">
174
- <a href="<?php echo esc_url( $extension->link ); ?>" target="_blank"><img src="<?php echo esc_url( tribe_resource_url( $extension->image, false, null, $main ) ); ?>" /></a>
175
  </div>
176
-
177
- <p><?php echo esc_html( $extension->description ); ?></p>
178
-
179
- <a class="button" href="<?php echo esc_url( $extension->link ); ?>"><?php esc_html_e( 'Download', 'tribe-common' ); ?></a>
180
  </div>
181
- <?php endforeach; ?>
182
-
183
- <a class="button secondary" href="https://evnt.is/1ajd"><?php esc_html_e( 'Browse Extensions', 'tribe-common' ); ?></a>
184
 
 
 
 
185
  </div>
186
-
187
  </div>
188
- </div>
189
-
 
190
  </div>
191
-
192
- <?php // this is inline jQuery / javascript for extra simplicity */ ?>
193
- <script type="text/javascript">
194
- jQuery( document ).ready( function($) {
195
- var current_tab = "#tribe-all-solutions";
196
- $( 'body' ).on( "click", ".tribe-header li", function() {
197
- var tab = "#" + $( this ).data( "tab" );
198
- $( current_tab ).hide();
199
- $( '.tribe-header li' ).removeClass( "selected" );
200
- $( this ).addClass( "selected" );
201
-
202
- $( tab ).show();
203
- current_tab = tab;
204
- } );
205
- } );
206
- </script>
1
+ <div id="tribe-app-shop" class="wrap">
 
2
 
3
+ <div class="header">
4
+ <h1><?php esc_html_e( 'Events Add-Ons', 'tribe-common' ); ?></h1>
5
+ <a class="button" href="https://theeventscalendar.com/?utm_campaign=in-app&utm_source=addonspage&utm_medium=top-banner" target="_blank"><?php esc_html_e( 'Browse All Add-Ons', 'tribe-common' ); ?></a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  </div>
7
+ <?php
8
+ $all_products = array(
9
+ 'for-sale' => array(),
10
+ 'installed' => array(),
11
+ );
12
+ foreach ( $products as $product ) {
13
+ if ( $product->is_installed ) {
14
+ $all_products['installed'][] = $product;
15
+ } else {
16
+ $all_products['for-sale'][] = $product;
17
+ }
18
+ }
19
 
20
+ $products = array();
21
+ foreach ( $all_products as $type => $products ) {
22
+ if ( empty( $products ) ) {
23
+ continue;
24
+ }
25
+
26
+ $button_label = esc_html__( 'Buy This Add-On', 'tribe-common' );
27
+ $button_class = 'button-primary';
28
+ if ( 'installed' === $type ) {
29
+ ?><h1 class="tribe-installed-headline"><?php esc_html_e( 'Installed Add-Ons', 'tribe-common' ); ?></h1><?php
30
+ $button_class = 'button-disabled';
31
+ $button_label = '<span class="dashicons dashicons-yes"></span>' . esc_html__( 'Installed', 'tribe-common' );
32
+ }
33
+
34
+ ?>
35
  <div class="content-wrapper">
36
  <div class="addon-grid">
37
+ <?php
38
+
39
+ $count = count( $products );
40
+
41
+ switch ( $count ) {
42
+ case 0:
43
+ case 3:
44
+ case 6:
45
+ $wide_indexes = array();
46
+ break;
47
+
48
+ case 2:
49
+ $wide_indexes = array( 0, 1 );
50
+ break;
51
+
52
+ case 5:
53
+ $wide_indexes = array( 0, 4 );
54
+ break;
55
+
56
+ case 1:
57
+ case 4:
58
+ case 7:
59
+ default:
60
+ $wide_indexes = array( 0 );
61
+ }
62
+
63
+ foreach ( $products as $i => $product ) {
64
+ ?>
65
+ <div class="tribe-addon<?php echo in_array( $i, $wide_indexes ) ? ' first' : ''; ?>">
66
+ <div class="thumb">
67
+ <a href="<?php echo esc_url( $product->link ); ?>" target="_blank"><img src="<?php echo esc_url( tribe_resource_url( $product->image, false, null, $main ) ); ?>" /></a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  </div>
69
+ <div class="caption">
70
+ <h4><a href="<?php echo esc_url( $product->link ); ?>" target="_blank"><?php echo esc_html( $product->title ); ?></a></h4>
 
 
 
71
 
72
+ <div class="description">
73
+ <p><?php echo $product->description; ?></p>
74
+ <?php
75
+ if ( isset( $product->requires ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  ?>
77
+ <p><strong><?php esc_html_e( 'Requires:', 'tribe-common' );?></strong> <?php echo esc_html( $product->requires ); ?></p>
78
+ <?php
79
+ }
80
+ ?>
81
+ </div>
82
 
83
+ <a class="button <?php esc_attr_e( $button_class ); ?>" href="<?php echo esc_url( $product->link ); ?>"><?php echo $button_label; // escaped above ?></a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  </div>
 
 
 
 
85
  </div>
 
 
 
86
 
87
+ <?php
88
+ }
89
+ ?>
90
  </div>
 
91
  </div>
92
+ <?php
93
+ }
94
+ ?>
95
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/admin-views/notices/tribe-bf-2018-et.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Black Friday 2018 admin notice for when only ET is active.
4
+ *
5
+ * @since 4.7.23
6
+ *
7
+ * @var string $mascot_url The local URL for the notice's mascot image.
8
+ * @var int $end_time The Unix timestamp for the sale's end time.
9
+ */
10
+ ?>
11
+ <div class="tribe-marketing-notice">
12
+ <div class="tribe-notice-icon">
13
+ <img src="<?php echo esc_url( $mascot_url ); ?>" />
14
+ </div>
15
+ <div class="tribe-notice-content">
16
+ <h3>Event Tickets Plus is on Sale Today!</h3>
17
+ <p>Premium functionality = premium results. Event Tickets Plus integrates directly with WooCommerce and includes a slew of prime features like global ticket stock, custom attendee fields, and QR codes for easy check-ins.</p>
18
+ <p><a target="_blank" class="button button-primary alignleft" href="http://m.tri.be/1a8m">Shop our holiday sale now!</a></p>
19
+ </div>
20
+ </div>
common/src/admin-views/notices/tribe-bf-2018-general.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Black Friday 2018 admin notice for when both ET and TEC are active.
4
+ *
5
+ * @since 4.7.23
6
+ *
7
+ * @var string $mascot_url The local URL for the notice's mascot image.
8
+ * @var int $end_time The Unix timestamp for the sale's end time.
9
+ */
10
+ ?>
11
+ <div class="tribe-marketing-notice">
12
+ <div class="tribe-notice-icon">
13
+ <img src="<?php echo esc_url( $mascot_url ); ?>" />
14
+ </div>
15
+ <div class="tribe-notice-content">
16
+ <h3>Today: All Premium Calendar Add-Ons are on Sale!</h3>
17
+ <p>Save up to 30% on all of our premium calendar and ticketing add-ons, including Events Calendar PRO, Event Tickets Plus, Filter Bar, Community Events, and more!</p>
18
+ <p><a target="_blank" class="button button-primary" href="http://m.tri.be/1a8n">Shop Now</a></p>
19
+ </div>
20
+ </div>
common/src/admin-views/notices/tribe-bf-2018-tec.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Black Friday 2018 admin notice for when only TEC is active.
4
+ *
5
+ * @since 4.7.23
6
+ *
7
+ * @var string $mascot_url The local URL for the notice's mascot image.
8
+ * @var int $end_time The Unix timestamp for the sale's end time.
9
+ */
10
+ ?>
11
+ <div class="tribe-marketing-notice tribe-bf-2018-tec">
12
+ <div class="tribe-notice-icon">
13
+ <img src="<?php echo esc_url( $mascot_url ); ?>" />
14
+ </div>
15
+ <div class="tribe-notice-content">
16
+ <h3>Up to 30% Off!</h3>
17
+ <p>Save big on Events Calendar PRO, Filter Bar, Community Events, and more during our huge Black Friday sale!</p>
18
+ <p><a target="_blank" class="button button-primary" href="http://m.tri.be/1a8l">Shop Now</a> <em>(But hurry, because this offer ends on <abbr title="<?php echo esc_attr( date_i18n( 'r', $end_time ) ); ?>">Monday, November 26th</abbr>.)</em></p>
19
+ </div>
20
+ </div>
common/src/admin-views/notices/tribe-bf-general.php DELETED
@@ -1,22 +0,0 @@
1
- <?php
2
- /**
3
- * The Black Friday admin notice.
4
- *
5
- * @since 4.12.14
6
- *
7
- * @var string $icon_url The local URL for the notice's image.
8
- * @var string $cta_url The short URL for black friday.
9
- */
10
- ?>
11
- <div class="tribe-marketing-notice">
12
- <div class="tribe-marketing-notice__icon">
13
- <img src="<?php echo esc_url( $icon_url ); ?>"/>
14
- </div>
15
- <div class="tribe-marketing-notice__content">
16
- <h3>Save 40% on Every. Single. Plugin.</h3>
17
- <p>
18
- Black Friday Sale now through November 30.
19
- <span class="tribe-marketing-notice__cta"><a target="_blank" href="<?php echo esc_url( $cta_url ); ?>">Shop now</a></span>
20
- </p>
21
- </div>
22
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/admin-views/notices/tribe-gutenberg-release.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Gutenberg Release admin notice for when TEC is active, or TEC *and* ET.
4
+ *
5
+ * @since 4.7.23
6
+ *
7
+ * @var int $icon The local URL for the notice's icon image.
8
+ * @var int $end_time The Unix timestamp for the release notice's end time.
9
+ */
10
+ ?>
11
+ <div class="tribe-marketing-notice">
12
+ <div class="tribe-notice-icon">
13
+ <img src="<?php echo esc_url( $icon_url ); ?>" />
14
+ </div>
15
+ <div class="tribe-notice-content">
16
+ <h3>Breaking News: Gutenberg Block Editor Release</h3>
17
+ <p>The beta version of WordPress 5.0 is out! This is a <strong>big deal</strong>: the official release of the new editing interface is right around the corner.</p>
18
+ <p>Once this release happens, the new block editor will become the default editor for all WordPress sites running version 5.0 or higher. We recommend you familiarize yourself ASAP so you’re ready for the change when it happens.</p>
19
+ <a href="http://m.tri.be/1a8o" target="_blank" class="button button-primary">Get Up to Speed</a>
20
+ </div>
21
+ </div>
common/src/admin-views/tabbed-view/tabbed-view.php CHANGED
@@ -12,19 +12,7 @@ $tabs = $view->get_visibles();
12
  <?php if ( count( $tabs ) > 1 ) : ?>
13
  <div class="tabbed-view-wrap wrap">
14
  <?php if ( $view->get_label() ) : ?>
15
- <h1>
16
- <?php echo esc_html( $view->get_label() ); ?>
17
- <?php
18
- /**
19
- * Add an action to render content after text label.
20
- *
21
- * @since 4.12.17
22
- *
23
- * @param Tribe__Tabbed_View $view Tabbed View Object.
24
- */
25
- do_action( 'tribe_tabbed_view_heading_after_text_label', $view );
26
- ?>
27
- </h1>
28
  <?php endif; ?>
29
 
30
  <h2 class="nav-tab-wrapper">
12
  <?php if ( count( $tabs ) > 1 ) : ?>
13
  <div class="tabbed-view-wrap wrap">
14
  <?php if ( $view->get_label() ) : ?>
15
+ <h1><?php echo esc_html( $view->get_label() ); ?></h1>
 
 
 
 
 
 
 
 
 
 
 
 
16
  <?php endif; ?>
17
 
18
  <h2 class="nav-tab-wrapper">
common/src/admin-views/tribe-options-display.php CHANGED
@@ -2,61 +2,60 @@
2
 
3
  $sample_date = strtotime( 'January 15 ' . date( 'Y' ) );
4
 
5
- $displayTab = [
6
  'priority' => 20,
7
  'fields' =>
8
  /**
9
  * Filter the fields available on the display settings tab
10
  *
11
  * @param array $fields a nested associative array of fields & field info passed to Tribe__Field
12
- *
13
  * @see Tribe__Field
14
  */
15
  apply_filters(
16
- 'tribe_display_settings_tab_fields', [
17
- 'tribe-form-content-start' => [
18
- 'type' => 'html',
19
- 'html' => '<div class="tribe-settings-form-wrap">',
20
- ],
21
- 'tribeEventsDateFormatSettingsTitle' => [
22
- 'type' => 'html',
23
- 'html' => '<h3>' . esc_html__( 'Date Format Settings', 'tribe-common' ) . '</h3>',
24
- ],
25
- 'tribeEventsDateFormatExplanation' => [
26
- 'type' => 'html',
27
- 'html' => '<p>'
28
- . sprintf(
29
- __( 'The following three fields accept the date format options available to the PHP %1$s function. <a href="%2$s" target="_blank">Learn how to make your own date format here</a>.', 'tribe-common' ),
30
- '<code>date()</code>',
31
- 'https://wordpress.org/support/article/formatting-date-and-time/'
32
- )
33
- . '</p>',
34
- ],
35
- 'datepickerFormat' => [
36
- 'type' => 'dropdown',
37
- 'label' => esc_html__( 'Compact Date Format', 'tribe-common' ),
38
- 'tooltip' => esc_html__( 'Select the date format used for elements with minimal space, such as in datepickers.', 'tribe-common' ),
39
- 'default' => 1,
40
- 'options' => [
41
- '0' => date( 'Y-m-d', $sample_date ),
42
- '1' => date( 'n/j/Y', $sample_date ),
43
- '2' => date( 'm/d/Y', $sample_date ),
44
- '3' => date( 'j/n/Y', $sample_date ),
45
- '4' => date( 'd/m/Y', $sample_date ),
46
- '5' => date( 'n-j-Y', $sample_date ),
47
- '6' => date( 'm-d-Y', $sample_date ),
48
- '7' => date( 'j-n-Y', $sample_date ),
49
- '8' => date( 'd-m-Y', $sample_date ),
50
- '9' => date( 'Y.m.d', $sample_date ),
51
- '10' => date( 'm.d.Y', $sample_date ),
52
- '11' => date( 'd.m.Y', $sample_date ),
53
- ],
54
- 'validation_type' => 'options',
55
- ],
56
- 'tribe-form-content-end' => [
57
- 'type' => 'html',
58
- 'html' => '</div>',
59
  ],
60
- ]
61
- ),
62
- ];
 
 
 
 
 
 
2
 
3
  $sample_date = strtotime( 'January 15 ' . date( 'Y' ) );
4
 
5
+ $displayTab = array(
6
  'priority' => 20,
7
  'fields' =>
8
  /**
9
  * Filter the fields available on the display settings tab
10
  *
11
  * @param array $fields a nested associative array of fields & field info passed to Tribe__Field
 
12
  * @see Tribe__Field
13
  */
14
  apply_filters(
15
+ 'tribe_display_settings_tab_fields', array(
16
+ 'tribe-form-content-start' => array(
17
+ 'type' => 'html',
18
+ 'html' => '<div class="tribe-settings-form-wrap">',
19
+ ),
20
+ 'tribeEventsDateFormatSettingsTitle' => array(
21
+ 'type' => 'html',
22
+ 'html' => '<h3>' . esc_html__( 'Date Format Settings', 'tribe-common' ) . '</h3>',
23
+ ),
24
+ 'tribeEventsDateFormatExplanation' => array(
25
+ 'type' => 'html',
26
+ 'html' => '<p>'
27
+ . sprintf(
28
+ __( 'The following three fields accept the date format options available to the PHP %1$s function. <a href="%2$s" target="_blank">Learn how to make your own date format here</a>.', 'tribe-common' ),
29
+ '<code>date()</code>',
30
+ 'https://codex.wordpress.org/Formatting_Date_and_Time'
31
+ )
32
+ . '</p>',
33
+ ),
34
+ 'datepickerFormat' => [
35
+ 'type' => 'dropdown',
36
+ 'label' => esc_html__( 'Compact Date Format', 'tribe-common' ),
37
+ 'tooltip' => esc_html__( 'Select the date format used for elements with minimal space, such as in datepickers.', 'tribe-common' ),
38
+ 'default' => 1,
39
+ 'options' => [
40
+ '0' => date( 'Y-m-d', $sample_date ),
41
+ '1' => date( 'n/j/Y', $sample_date ),
42
+ '2' => date( 'm/d/Y', $sample_date ),
43
+ '3' => date( 'j/n/Y', $sample_date ),
44
+ '4' => date( 'd/m/Y', $sample_date ),
45
+ '5' => date( 'n-j-Y', $sample_date ),
46
+ '6' => date( 'm-d-Y', $sample_date ),
47
+ '7' => date( 'j-n-Y', $sample_date ),
48
+ '8' => date( 'd-m-Y', $sample_date ),
49
+ '9' => date( 'Y.m.d', $sample_date ),
50
+ '10' => date( 'm.d.Y', $sample_date ),
51
+ '11' => date( 'd.m.Y', $sample_date ),
 
 
 
 
 
 
52
  ],
53
+ 'validation_type' => 'options',
54
+ ],
55
+ 'tribe-form-content-end' => [
56
+ 'type' => 'html',
57
+ 'html' => '</div>',
58
+ ],
59
+ )
60
+ ),
61
+ );
common/src/admin-views/tribe-options-general.php CHANGED
@@ -3,20 +3,16 @@
3
  $generalTabFields = [
4
  'info-start' => [
5
  'type' => 'html',
6
- 'html' => '<div id="modern-tribe-info">
7
- <img
8
- src="' . plugins_url( 'resources/images/logo/tec-brand.svg', dirname( __FILE__ ) ) . '"
9
- alt="' . esc_attr( 'The Events Calendar brand logo', 'tribe-common' ) . '"
10
- />',
11
  ],
12
  'event-tickets-info' => [
13
  'type' => 'html',
14
- 'html' => '<p>' . sprintf( esc_html__( 'Thank you for using Event Tickets! All of us at The Events Calendar sincerely appreciate your support and we\'re excited to see you using our plugins. Check out our handy %1$sNew User Primer%2$s to get started.', 'tribe-common' ), '<a href="http://evnt.is/18nd">', '</a>' ) . '</p>',
15
  'conditional' => ! class_exists( 'Tribe__Events__Main' ),
16
  ],
17
  'event-tickets-upsell-info' => [
18
  'type' => 'html',
19
- 'html' => '<p>' . sprintf( esc_html__( 'Optimize your site\'s event listings with %1$sThe Events Calendar%2$s, our free calendar plugin. Looking for additional functionality including recurring events, user-submission, advanced ticket sales and more? Check out our %3$spremium add-ons%4$s.', 'tribe-common' ), '<a href="http://evnt.is/18x6">', '</a>', '<a href="http://evnt.is/18x5">', '</a>' ) . '</p>',
20
  'conditional' => ! class_exists( 'Tribe__Events__Main' ),
21
  ],
22
  'upsell-info' => [
@@ -31,7 +27,7 @@ $generalTabFields = [
31
  ],
32
  'donate-link-info' => [
33
  'type' => 'html',
34
- 'html' => '<p>' . esc_html__( 'Are you thinking "Wow, this plugin is amazing! I should say thanks to The Events Calendar for all their hard work." The greatest thanks we could ask for is recognition. Add a small text-only link at the bottom of your calendar pointing to The Events Calendar project.', 'tribe-common' ) . '<br><a href="' . esc_url( plugins_url( 'resources/images/donate-link-screenshot.png', dirname( __FILE__ ) ) ) . '" class="thickbox">' . esc_html__( 'See an example of the link', 'tribe-common' ) . '</a>.</p>',
35
  'conditional' => class_exists( 'Tribe__Events__Main' ),
36
  ],
37
  'donate-link' => [
@@ -78,3 +74,4 @@ $generalTab = [
78
  'priority' => 10,
79
  'fields' => apply_filters( 'tribe_general_settings_tab_fields', $generalTabFields ),
80
  ];
 
3
  $generalTabFields = [
4
  'info-start' => [
5
  'type' => 'html',
6
+ 'html' => '<div id="modern-tribe-info"><img src="' . plugins_url( 'resources/images/modern-tribe@2x.png', dirname( __FILE__ ) ) . '" alt="Modern Tribe Inc." title="Modern Tribe Inc.">',
 
 
 
 
7
  ],
8
  'event-tickets-info' => [
9
  'type' => 'html',
10
+ 'html' => '<p>' . sprintf( esc_html__( 'Thank you for using Event Tickets! All of us at Modern Tribe sincerely appreciate your support and we\'re excited to see you using our plugins. Check out our handy %1$sNew User Primer%2$s to get started.', 'tribe-common' ), '<a href="http://m.tri.be/18nd">', '</a>' ) . '</p>',
11
  'conditional' => ! class_exists( 'Tribe__Events__Main' ),
12
  ],
13
  'event-tickets-upsell-info' => [
14
  'type' => 'html',
15
+ 'html' => '<p>' . sprintf( esc_html__( 'Optimize your site\'s event listings with %1$sThe Events Calendar%2$s, our free calendar plugin. Looking for additional functionality including recurring events, user-submission, advanced ticket sales and more? Check out our %3$spremium add-ons%4$s.', 'tribe-common' ), '<a href="http://m.tri.be/18x6">', '</a>', '<a href="http://m.tri.be/18x5">', '</a>' ) . '</p>',
16
  'conditional' => ! class_exists( 'Tribe__Events__Main' ),
17
  ],
18
  'upsell-info' => [
27
  ],
28
  'donate-link-info' => [
29
  'type' => 'html',
30
+ 'html' => '<p>' . esc_html__( 'Are you thinking "Wow, this plugin is amazing! I should say thanks to Modern Tribe for all their hard work." The greatest thanks we could ask for is recognition. Add a small text-only link at the bottom of your calendar pointing to The Events Calendar project.', 'tribe-common' ) . '<br><a href="' . esc_url( plugins_url( 'resources/images/donate-link-screenshot.png', dirname( __FILE__ ) ) ) . '" class="thickbox">' . esc_html__( 'See an example of the link', 'tribe-common' ) . '</a>.</p>',
31
  'conditional' => class_exists( 'Tribe__Events__Main' ),
32
  ],
33
  'donate-link' => [
74
  'priority' => 10,
75
  'fields' => apply_filters( 'tribe_general_settings_tab_fields', $generalTabFields ),
76
  ];
77
+
common/src/admin-views/tribe-options-help.php CHANGED
@@ -7,65 +7,35 @@ $plugins = $help->get_plugins( null, false );
7
 
8
  // Creates the Feature Box section
9
  $help->add_section( 'feature-box', null, 0, 'box' );
10
- $help->add_section_content( 'feature-box', '<img src="' . esc_url( plugins_url( 'resources/images/logo/tec-brand.svg', dirname( __FILE__ ) ) ) . '" alt="The Events Calendar" title="The Events Calendar">' );
11
- $help->add_section_content( 'feature-box', sprintf( esc_html__( 'Thank you for using %s! All of us at The Events Calendar sincerely appreciate your support and we’re excited to see you using our plugins.', 'tribe-common' ), $help->get_plugins_text() ) );
12
 
13
  // Creates the Support section
14
  $help->add_section( 'support', __( 'Getting Support', 'tribe-common' ), 10 );
15
- $help->add_section_content( 'support', sprintf( __( 'Our website’s %s is a great place to find tips and tricks for using and customizing our plugins.', 'tribe-common' ), '<a href="http://evnt.is/18j9" target="_blank">' . __( 'Knowledgebase', 'tribe-common' ) . '</a>' ), 0 );
16
  $help->add_section_content( 'support', sprintf(
17
  '<strong>%1$s</strong> %2$s',
18
  esc_html__( 'Want to dive deeper?', 'tribe-common' ),
19
  sprintf(
20
  __( 'Check out our %s for developers.', 'tribe-common' ),
21
- '<a href="http://evnt.is/18jf" target="_blank">' . esc_html__( 'list of available functions', 'tribe-common' ) . '</a>'
22
  )
23
  ), 50 );
24
 
25
  // Creates the Extra Help section
26
  $help->add_section( 'extra-help', __( 'Getting More Help', 'tribe-common' ), 20 );
27
  $help->add_section_content( 'extra-help', __( 'While the resources above help solve a majority of the issues we see, there are times you might be looking for extra support. If you need assistance using our plugins and would like us to take a look, please follow these steps:', 'tribe-common' ), 0 );
28
- $help->add_section_content(
29
- 'extra-help',
30
- [
31
- 'type' => 'ol',
32
- sprintf(
33
- __(
34
- '%s. All of the common (and not-so-common) answers to questions we see are here. It’s often the fastest path to finding an answer!',
35
- 'tribe-common'
36
- ),
37
- '<strong><a href="http://evnt.is/18j9" target="_blank">' . __(
38
- 'Check our Knowledgebase',
39
- 'tribe-common'
40
- ) . '</a></strong>'
41
- ),
42
- sprintf(
43
- __(
44
- '%s. Testing for an existing conflict is the best start for in-depth troubleshooting. We will often ask you to follow these steps when opening a new thread, so doing this ahead of time will be super helpful.',
45
- 'tribe-common'
46
- ),
47
- '<strong><a href="http://evnt.is/18jh" target="_blank">' . __(
48
- 'Test for a theme or plugin conflict',
49
- 'tribe-common'
50
- ) . '</a></strong>'
51
- ),
52
- sprintf(
53
- __(
54
- '%s. There are very few issues we haven’t seen and it’s likely another user has already asked your question and gotten an answer from our support staff. While posting to the help desk is open only to paid customers, they are open for anyone to search and review.',
55
- 'tribe-common'
56
- ),
57
- '<strong><a href="http://evnt.is/4w/" target="_blank">' . __(
58
- 'Search our support help desk',
59
- 'tribe-common'
60
- ) . '</a></strong>'
61
- ),
62
- ],
63
- 10
64
- );
65
 
66
  // By default these three will be gathered
67
  $help->add_section_content( 'extra-help', __( 'Please note that all hands-on support is provided via the help desk. You can email or tweet at us… ​but we will probably point you back to the help desk 😄', 'tribe-common' ), 40 );
68
- $help->add_section_content( 'extra-help', '<div style="text-align: right;"><a href="http://evnt.is/18ji" target="_blank" class="button">' . __( 'Read more about our support policy', 'tribe-common' ) . '</a></div>', 40 );
69
 
70
  // Creates the System Info section
71
  $help->add_section( 'system-info', __( 'System Information', 'tribe-common' ), 30 );
7
 
8
  // Creates the Feature Box section
9
  $help->add_section( 'feature-box', null, 0, 'box' );
10
+ $help->add_section_content( 'feature-box', '<img src="' . esc_url( plugins_url( 'resources/images/modern-tribe@2x.png', dirname( __FILE__ ) ) ) . '" alt="Modern Tribe Inc." title="Modern Tribe Inc.">' );
11
+ $help->add_section_content( 'feature-box', sprintf( esc_html__( 'Thank you for using %s! All of us at Modern Tribe sincerely appreciate your support and we’re excited to see you using our plugins.', 'tribe-common' ), $help->get_plugins_text() ) );
12
 
13
  // Creates the Support section
14
  $help->add_section( 'support', __( 'Getting Support', 'tribe-common' ), 10 );
15
+ $help->add_section_content( 'support', sprintf( __( 'Our website’s %s is a great place to find tips and tricks for using and customizing our plugins.', 'tribe-common' ), '<a href="http://m.tri.be/18j9" target="_blank">' . __( 'Knowledgebase', 'tribe-common' ) . '</a>' ), 0 );
16
  $help->add_section_content( 'support', sprintf(
17
  '<strong>%1$s</strong> %2$s',
18
  esc_html__( 'Want to dive deeper?', 'tribe-common' ),
19
  sprintf(
20
  __( 'Check out our %s for developers.', 'tribe-common' ),
21
+ '<a href="http://m.tri.be/18jf" target="_blank">' . esc_html__( 'list of available functions', 'tribe-common' ) . '</a>'
22
  )
23
  ), 50 );
24
 
25
  // Creates the Extra Help section
26
  $help->add_section( 'extra-help', __( 'Getting More Help', 'tribe-common' ), 20 );
27
  $help->add_section_content( 'extra-help', __( 'While the resources above help solve a majority of the issues we see, there are times you might be looking for extra support. If you need assistance using our plugins and would like us to take a look, please follow these steps:', 'tribe-common' ), 0 );
28
+ $help->add_section_content( 'extra-help', array(
29
+ 'type' => 'ol',
30
+
31
+ sprintf( __( '%s. All of the common (and not-so-common) answers to questions we see are here. It’s often the fastest path to finding an answer!', 'tribe-common' ), '<strong><a href="http://m.tri.be/18j9" target="_blank">' . __( 'Check our Knowledgebase', 'tribe-common' ) . '</a></strong>' ),
32
+ sprintf( __( '%s. Testing for an existing conflict is the best start for in-depth troubleshooting. We will often ask you to follow these steps when opening a new thread, so doing this ahead of time will be super helpful.', 'tribe-common' ), '<strong><a href="http://m.tri.be/18jh" target="_blank">' . __( 'Test for a theme or plugin conflict', 'tribe-common' ) . '</a></strong>' ),
33
+ sprintf( __( '%s. There are very few issues we haven’t seen and it’s likely another user has already asked your question and gotten an answer from our support staff. While posting to the help desk is open only to paid customers, they are open for anyone to search and review.', 'tribe-common' ), '<strong><a href="http://m.tri.be/4w/" target="_blank">' . __( 'Search our support help desk', 'tribe-common' ) . '</a></strong>' ),
34
+ ), 10 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
  // By default these three will be gathered
37
  $help->add_section_content( 'extra-help', __( 'Please note that all hands-on support is provided via the help desk. You can email or tweet at us… ​but we will probably point you back to the help desk 😄', 'tribe-common' ), 40 );
38
+ $help->add_section_content( 'extra-help', '<div style="text-align: right;"><a href="http://m.tri.be/18ji" target="_blank" class="button">' . __( 'Read more about our support policy', 'tribe-common' ) . '</a></div>', 40 );
39
 
40
  // Creates the System Info section
41
  $help->add_section( 'system-info', __( 'System Information', 'tribe-common' ), 30 );
common/src/admin-views/tribe-options-licenses.php CHANGED
@@ -8,9 +8,9 @@ $html = '<p>' .
8
  $html .= '<p>' .
9
  sprintf(
10
  esc_html__( 'In order to register a plugin license, you\'ll first need to %1$sdownload and install%2$s the plugin you purchased. You can download the latest version of your plugin(s) from %3$syour account\'s downloads page%4$s. Once the plugin is installed and activated on this site, the license key field will appear below.', 'tribe-common' ),
11
- '<a href="http://evnt.is/1acu" target="_blank">',
12
  '</a>',
13
- '<a href="http://evnt.is/1act" target="_blank">',
14
  '</a>'
15
  ) .
16
  '</p>';
@@ -24,22 +24,22 @@ $html .= '<p>' .
24
  '</p>';
25
 
26
  $html .= '<ul>';
27
- $html .= '<li><a href="http://evnt.is/1acv" target="_blank">' .
28
  esc_html__( 'Why am I being told my license key is out of installs?', 'tribe-common' ) .
29
  '</a></li>';
30
- $html .= '<li><a href="http://evnt.is/1ad1" target="_blank">' .
31
  esc_html__( 'View and manage your license keys', 'tribe-common' ) .
32
  '</a></li>';
33
- $html .= '<li><a href="http://evnt.is/1acw" target="_blank">' .
34
  esc_html__( 'Moving your license keys', 'tribe-common' ) .
35
  '</a></li>';
36
- $html .= '<li><a href="http://evnt.is/1acx" target="_blank">' .
37
  esc_html__( 'Expired license keys and subscriptions', 'tribe-common' ) .
38
  '</a></li>';
39
 
40
  // Expand with extra information for multisite users
41
  if ( is_multisite() ) {
42
- $html .= '<li><a href="http://evnt.is/1ad0" target="_blank">' .
43
  esc_html__( 'Licenses for Multisites', 'tribe-common' ) .
44
  '</a></li>';
45
  }
@@ -47,21 +47,21 @@ if ( is_multisite() ) {
47
  $html .= '</ul>';
48
 
49
 
50
- $licenses_tab = [
51
- 'info-start' => [
52
  'type' => 'html',
53
  'html' => '<div id="modern-tribe-info">',
54
- ],
55
- 'info-box-title' => [
56
  'type' => 'html',
57
  'html' => '<h2>' . esc_html__( 'Licenses', 'tribe-common' ) . '</h2>',
58
- ],
59
- 'info-box-description' => [
60
  'type' => 'html',
61
  'html' => $html,
62
- ],
63
- 'info-end' => [
64
  'type' => 'html',
65
  'html' => '</div>',
66
- ],
67
- ];
8
  $html .= '<p>' .
9
  sprintf(
10
  esc_html__( 'In order to register a plugin license, you\'ll first need to %1$sdownload and install%2$s the plugin you purchased. You can download the latest version of your plugin(s) from %3$syour account\'s downloads page%4$s. Once the plugin is installed and activated on this site, the license key field will appear below.', 'tribe-common' ),
11
+ '<a href="http://m.tri.be/1acu" target="_blank">',
12
  '</a>',
13
+ '<a href="http://m.tri.be/1act" target="_blank">',
14
  '</a>'
15
  ) .
16
  '</p>';
24
  '</p>';
25
 
26
  $html .= '<ul>';
27
+ $html .= '<li><a href="http://m.tri.be/1acv" target="_blank">' .
28
  esc_html__( 'Why am I being told my license key is out of installs?', 'tribe-common' ) .
29
  '</a></li>';
30
+ $html .= '<li><a href="http://m.tri.be/1ad1" target="_blank">' .
31
  esc_html__( 'View and manage your license keys', 'tribe-common' ) .
32
  '</a></li>';
33
+ $html .= '<li><a href="http://m.tri.be/1acw" target="_blank">' .
34
  esc_html__( 'Moving your license keys', 'tribe-common' ) .
35
  '</a></li>';
36
+ $html .= '<li><a href="http://m.tri.be/1acx" target="_blank">' .
37
  esc_html__( 'Expired license keys and subscriptions', 'tribe-common' ) .
38
  '</a></li>';
39
 
40
  // Expand with extra information for multisite users
41
  if ( is_multisite() ) {
42
+ $html .= '<li><a href="http://m.tri.be/1ad0" target="_blank">' .
43
  esc_html__( 'Licenses for Multisites', 'tribe-common' ) .
44
  '</a></li>';
45
  }
47
  $html .= '</ul>';
48
 
49
 
50
+ $licenses_tab = array(
51
+ 'info-start' => array(
52
  'type' => 'html',
53
  'html' => '<div id="modern-tribe-info">',
54
+ ),
55
+ 'info-box-title' => array(
56
  'type' => 'html',
57
  'html' => '<h2>' . esc_html__( 'Licenses', 'tribe-common' ) . '</h2>',
58
+ ),
59
+ 'info-box-description' => array(
60
  'type' => 'html',
61
  'html' => $html,
62
+ ),
63
+ 'info-end' => array(
64
  'type' => 'html',
65
  'html' => '</div>',
66
+ ),
67
+ );
common/src/admin-views/tribe-options-network.php CHANGED
@@ -1,35 +1,35 @@
1
  <?php
2
- $allTabs = apply_filters( 'tribe_settings_all_tabs', [] );
3
 
4
- $networkTab = [
5
  'priority' => 10,
6
  'network_admin' => true,
7
  'fields' => apply_filters(
8
- 'tribe_network_settings_tab_fields', [
9
- 'info-start' => [
10
  'type' => 'html',
11
  'html' => '<div id="modern-tribe-info">',
12
- ],
13
- 'info-box-title' => [
14
  'type' => 'html',
15
  'html' => '<h1>' . esc_html__( 'Network Settings', 'tribe-common' ) . '</h1>',
16
- ],
17
- 'info-box-description' => [
18
  'type' => 'html',
19
- 'html' => '<p>' . esc_html__( 'This is where all of the global network settings for The Events Calendar can be modified.', 'tribe-common' ) . '</p>',
20
- ],
21
- 'info-end' => [
22
  'type' => 'html',
23
  'html' => '</div>',
24
- ],
25
- 'hideSettingsTabs' => [
26
  'type' => 'checkbox_list',
27
  'label' => esc_html__( 'Hide the following settings tabs on every site:', 'tribe-common' ),
28
  'default' => false,
29
  'options' => $allTabs,
30
  'validation_type' => 'options_multi',
31
  'can_be_empty' => true,
32
- ],
33
- ]
34
  ),
35
- ];
1
  <?php
2
+ $allTabs = apply_filters( 'tribe_settings_all_tabs', array() );
3
 
4
+ $networkTab = array(
5
  'priority' => 10,
6
  'network_admin' => true,
7
  'fields' => apply_filters(
8
+ 'tribe_network_settings_tab_fields', array(
9
+ 'info-start' => array(
10
  'type' => 'html',
11
  'html' => '<div id="modern-tribe-info">',
12
+ ),
13
+ 'info-box-title' => array(
14
  'type' => 'html',
15
  'html' => '<h1>' . esc_html__( 'Network Settings', 'tribe-common' ) . '</h1>',
16
+ ),
17
+ 'info-box-description' => array(
18
  'type' => 'html',
19
+ 'html' => '<p>' . esc_html__( 'This is where all of the global network settings for Modern Tribe\'s The Events Calendar can be modified.', 'tribe-common' ) . '</p>',
20
+ ),
21
+ 'info-end' => array(
22
  'type' => 'html',
23
  'html' => '</div>',
24
+ ),
25
+ 'hideSettingsTabs' => array(
26
  'type' => 'checkbox_list',
27
  'label' => esc_html__( 'Hide the following settings tabs on every site:', 'tribe-common' ),
28
  'default' => false,
29
  'options' => $allTabs,
30
  'validation_type' => 'options_multi',
31
  'can_be_empty' => true,
32
+ ),
33
+ )
34
  ),
35
+ );
common/src/admin-views/widgets/components/fields.php DELETED
@@ -1,43 +0,0 @@
1
- <?php
2
- /**
3
- * Admin View: Widget Component Fields Container
4
- *
5
- * Administration Views cannot be overwritten by default from your theme.
6
- *
7
- * See more documentation about our views templating system.
8
- *
9
- * @link http://evnt.is/1aiy
10
- *
11
- * @var \Tribe__Template $this Instance of the template including this file.
12
- * @var array<mixed> $fields_container_classes (optional) HTML classes used for the form element
13
- * @var Widget_Abstract $widget_obj An instance of the widget abstract.
14
- * @var array<array,mixed> $fields An array of admin fields to display in the widget form.
15
- *
16
- * @version 4.12.18
17
- */
18
-
19
- use Tribe\Widget\Widget_Abstract;
20
-
21
- $default_classes = [
22
- 'tribe-widget-fields'
23
- ];
24
-
25
- $classes = array_merge( $default_classes, $this->get( 'fields_container_classes', [] ) );
26
- ?>
27
-
28
- <div
29
- <?php tribe_classes( $classes ); ?>
30
- >
31
- <?php
32
- foreach ( $fields as $field ) {
33
- // Try to load the component for this field type.
34
- $this->template( "widgets/components/fields/{$field['type']}", $field );
35
-
36
- // Sets the current field for possible usage inside of the entry point.
37
- $this->set_values( [ 'field' => $field ] );
38
-
39
- // Allow fields that were not registered as components to have something loaded.
40
- $this->do_entry_point( "field-{$field['type']}" );
41
- }
42
- ?>
43
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/admin-views/widgets/components/fields/checkbox.php DELETED
@@ -1,42 +0,0 @@
1
- <?php
2
- /**
3
- * Admin View: Widget Component Checkbox field
4
- *
5
- * Administration Views cannot be overwritten by default from your theme.
6
- *
7
- * See more documentation about our views templating system.
8
- *
9
- * @link http://evnt.is/1aiy
10
- *
11
- * @version 4.12.18
12
- *
13
- * @var string $label Label for the checkbox.
14
- * @var string $value Value for the checkbox.
15
- * @var string $id ID of the checkbox.
16
- * @var string $name Name attribute for the checkbox.
17
- * @var string $dependency The dependency attributes for the control wrapper.
18
- */
19
-
20
- ?>
21
- <div
22
- class="tribe-widget-form-control tribe-widget-form-control--checkbox"
23
- <?php
24
- // Not escaped - contains html (data-attr="value").
25
- echo $dependency; // phpcs:ignore
26
- ?>
27
- >
28
- <input
29
- class="tribe-widget-form-control__input"
30
- id="<?php echo esc_attr( $id ); ?>"
31
- name="<?php echo esc_attr( $name ); ?>"
32
- type="checkbox"
33
- value="1"
34
- <?php checked( tribe_is_truthy( $value ), true ); ?>
35
- />
36
- <label
37
- class="tribe-widget-form-control__label"
38
- for="<?php echo esc_attr( $id ); ?>"
39
- >
40
- <?php echo esc_html( $label ); ?>
41
- </label>
42
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/admin-views/widgets/components/fields/dropdown.php DELETED
@@ -1,53 +0,0 @@
1
- <?php
2
- /**
3
- * Admin View: Widget Component Dropdown field.
4
- *
5
- * Administration Views cannot be overwritten by default from your theme.
6
- *
7
- * See more documentation about our views templating system.
8
- *
9
- * @link http://evnt.is/1aiy
10
- *
11
- * @version 4.12.18
12
- *
13
- * @var string $label Label for the dropdown.
14
- * @var string $value Value for the dropdown.
15
- * @var string $id ID of the dropdown.
16
- * @var string $name Name attribute for the dropdown.
17
- * @var string $dependency The dependency attributes for the control wrapper.
18
- * @var array<array<string,string>> $options An array of options in the format
19
- * [
20
- * 'value => string|int,
21
- * 'text' => string
22
- * ]
23
- */
24
-
25
- ?>
26
- <div
27
- class="tribe-widget-form-control tribe-widget-form-control--dropdown"
28
- <?php
29
- // Not escaped - contains html (data-attr="value").
30
- echo $dependency; // phpcs:ignore
31
- ?>
32
- >
33
- <label
34
- class="tribe-widget-form-control__label"
35
- for="<?php echo esc_attr( $id ); ?>"
36
- >
37
- <?php echo esc_html( $label ); ?>
38
- </label>
39
- <select
40
- id="<?php echo esc_attr( $id ); ?>"
41
- name="<?php echo esc_attr( $name ); ?>"
42
- class="tribe-widget-form-control__input widefat"
43
- >
44
- <?php foreach ( $options as $option ) { ?>
45
- <option
46
- value="<?php echo esc_attr( $option['value'] ); ?>"
47
- <?php selected( $value, $option['value'] ); ?>
48
- >
49
- <?php echo esc_html( $option['text'] ); ?>
50
- </option>
51
- <?php } ?>
52
- </select>
53
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/admin-views/widgets/components/fields/fieldset.php DELETED
@@ -1,39 +0,0 @@
1
- <?php
2
- /**
3
- * Admin View: Widget Component Fieldset field.
4
- *
5
- * This component is different in that it calls other components!
6
- *
7
- * Administration Views cannot be overwritten by default from your theme.
8
- *
9
- * See more documentation about our views templating system.
10
- *
11
- * @link http://evnt.is/1aiy
12
- *
13
- * @version 4.12.18
14
- *
15
- * @var string $label Title for the fieldset.
16
- * @var string $description Description for the fieldset.
17
- * @var string $classes Classes to add to the fieldset.
18
- * @var string $dependency Dependency attribute for the fieldset.
19
- * @var array<string,mixed> $children Child elements for the fieldset.
20
- */
21
-
22
- use Tribe__Utils__Array as Arr;
23
-
24
- $fieldset_classes = array_merge( [ 'tribe-widget-form-control', 'tribe-widget-form-control--fieldset' ], Arr::list_to_array( $classes, ' ' ) );
25
-
26
- ?>
27
- <fieldset
28
- <?php tribe_classes( $fieldset_classes ); ?>
29
- <?php
30
- // Not escaped - contains html (data-attr="value").
31
- echo $dependency; // phpcs:ignore
32
- ?>
33
- >
34
- <?php if ( ! empty( $label ) ) : ?>
35
- <legend class="tribe-widget-form-control__legend"><?php echo esc_html( $label ); ?></legend>
36
- <?php endif; ?>
37
-
38
- <?php $this->template( "widgets/components/fields", [ 'fields' => $children ] ); ?>
39
- </fieldset>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/admin-views/widgets/components/fields/number.php DELETED
@@ -1,47 +0,0 @@
1
- <?php
2
- /**
3
- * Admin View: Widget Component Number field
4
- *
5
- * Administration Views cannot be overwritten by default from your theme.
6
- *
7
- * See more documentation about our views templating system.
8
- *
9
- * @link http://evnt.is/1aiy
10
- *
11
- * @version 4.13.0
12
- *
13
- * @var string $label Label for the number input.
14
- * @var string $id ID of the number input.
15
- * @var string $name Name attribute for the number input.
16
- * @var string $dependency The dependency attributes for the control wrapper.
17
- * @var string $value Value for the number input.
18
- * @var string $min Value for the min attribute.
19
- * @var string $max Value for the max attribute.
20
- * @var string $step Value for the step attribute.
21
- */
22
-
23
- ?>
24
- <div
25
- class="tribe-widget-form-control tribe-widget-form-control--text"
26
- <?php
27
- // Not escaped - contains html (data-attr="value").
28
- echo $dependency; // phpcs:ignore
29
- ?>
30
- >
31
- <label
32
- class="tribe-common-form-control__label"
33
- for="<?php echo esc_attr( $id ); ?>"
34
- >
35
- <?php echo esc_html( $label ); ?>
36
- </label>
37
- <input
38
- class="tribe-common-form-control__input widefat"
39
- id="<?php echo esc_attr( $id ); ?>"
40
- name="<?php echo esc_attr( $name ); ?>"
41
- type="number"
42
- min="<?php echo esc_attr( $min ); ?>"
43
- max="<?php echo esc_attr( $max ); ?>"
44
- step="<?php echo esc_attr( $step ); ?>"
45
- value="<?php echo esc_attr( $value ); ?>"
46
- />
47
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/admin-views/widgets/components/fields/radio.php DELETED
@@ -1,43 +0,0 @@
1
- <?php
2
- /**
3
- * Admin View: Widget Component Radio field
4
- *
5
- * Administration Views cannot be overwritten by default from your theme.
6
- *
7
- * See more documentation about our views templating system.
8
- *
9
- * @link http://evnt.is/1aiy
10
- *
11
- * @version 4.12.18
12
- *
13
- * @var string $label Label for the radio group.
14
- * @var string $value Value for the radio group.
15
- * @var string $button_value Value for the individual button.
16
- * @var string $name Name attribute for the radio.
17
- * @var string $id ID attribute for the radio.
18
- * @var string $dependency The dependency attributes for the control wrapper.
19
- */
20
-
21
- ?>
22
- <div
23
- class="tribe-widget-form-control tribe-widget-form-control--radio"
24
- <?php
25
- // Not escaped - contains html (data-attr="value").
26
- echo $dependency; // phpcs:ignore
27
- ?>
28
- >
29
- <input
30
- class="tribe-widget-form-control__input"
31
- id="<?php echo esc_attr( $id . '-' . strtolower( $button_value ) ); ?>"
32
- name="<?php echo esc_attr( $name ); ?>"
33
- type="radio"
34
- value="<?php echo esc_attr( $button_value ); ?>"
35
- <?php checked( $button_value, $value ); ?>
36
- />
37
- <label
38
- class="tribe-widget-form-control__label"
39
- for="<?php echo esc_attr( $id . '-' . strtolower( $button_value ) ); ?>"
40
- >
41
- <?php echo esc_html( $label ); ?>
42
- </label>
43
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/admin-views/widgets/components/fields/section.php DELETED
@@ -1,40 +0,0 @@
1
- <?php
2
- /**
3
- * Admin View: Widget Component Section field.
4
- *
5
- * This component is different in that it calls other components!
6
- *
7
- * Administration Views cannot be overwritten by default from your theme.
8
- *
9
- * See more documentation about our views templating system.
10
- *
11
- * @link http://evnt.is/1aiy
12
- *
13
- * @version 4.12.18
14
- *
15
- * @var string $label Title for the section. (optional)
16
- * @var string $description Description for the section. (optional)
17
- * @var string $classes Classes to add to the section. (optional)
18
- * @var string $dependency The dependency attributes for the control wrapper.
19
- * @var array<string,mixed> $children Child elements for the section.
20
- */
21
-
22
- use Tribe__Utils__Array as Arr;
23
-
24
- $section_classes = array_merge( [ 'tribe-widget-form-control', 'tribe-widget-form-control--section' ], Arr::list_to_array( $classes, ' ' ) );
25
-
26
- ?>
27
- <div
28
- <?php tribe_classes( $section_classes ); ?>
29
- <?php
30
- // Not escaped - contains html (data-attr="value").
31
- echo $dependency; // phpcs:ignore
32
- ?>
33
- >
34
- <?php if ( ! empty( $label ) ) : ?>
35
- <?php // Note: the actual widget title/handle is an <h2>. ?>
36
- <h4 class="tribe-widget-form-control__section-title"><?php echo esc_html( $label ); ?></h4>
37
- <?php endif; ?>
38
-
39
- <?php $this->template( "widgets/components/fields", [ 'fields' => $children ] ); ?>
40
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/admin-views/widgets/components/fields/text.php DELETED
@@ -1,41 +0,0 @@
1
- <?php
2
- /**
3
- * Admin View: Widget Component Text field
4
- *
5
- * Administration Views cannot be overwritten by default from your theme.
6
- *
7
- * See more documentation about our views templating system.
8
- *
9
- * @link http://evnt.is/1aiy
10
- *
11
- * @version 4.12.18
12
- *
13
- * @var string $label Label for the text input.
14
- * @var string $value Value for the text input.
15
- * @var string $id ID of the text input.
16
- * @var string $name Name attribute for the text input.
17
- * @var string $dependency The dependency attributes for the control wrapper.
18
- */
19
-
20
- ?>
21
- <div
22
- class="tribe-widget-form-control tribe-widget-form-control--text"
23
- <?php
24
- // Not escaped - contains html (data-attr="value").
25
- echo $dependency; // phpcs:ignore
26
- ?>
27
- >
28
- <label
29
- class="tribe-common-form-control__label"
30
- for="<?php echo esc_attr( $id ); ?>"
31
- >
32
- <?php echo esc_html( $label ); ?>
33
- </label>
34
- <input
35
- class="tribe-common-form-control__input widefat"
36
- id="<?php echo esc_attr( $id ); ?>"
37
- name="<?php echo esc_attr( $name ); ?>"
38
- type="text"
39
- value="<?php echo esc_attr( $value ); ?>"
40
- />
41
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/admin-views/widgets/components/form.php DELETED
@@ -1,31 +0,0 @@
1
- <?php
2
- /**
3
- * Admin View: Widget Component Form
4
- *
5
- * Override this template in your own theme by creating a file at:
6
- * [your-theme]/tribe/admin-views/widgets/components/form.php
7
- *
8
- * See more documentation about our views templating system.
9
- *
10
- * @link http://evnt.is/1aiy
11
- *
12
- * @var \Tribe__Template $this Instance of the template including this file.
13
- * @var array<mixed> $form_classes (optional) HTML classes used for the form element
14
- * @var array<string,mixed> $admin_fields Fields to be rendered.
15
- *
16
- * @version 4.12.18
17
- */
18
-
19
- $default_classes = [
20
- 'tribe-widget-form'
21
- ];
22
-
23
- $classes = array_merge( $default_classes, $this->get( 'form_classes', [] ) );
24
- ?>
25
-
26
- <div
27
- <?php tribe_classes( $classes ); ?>
28
- >
29
- <?php $this->template( 'widgets/components/fields', [ 'fields' => $admin_fields ] ); ?>
30
- </div>
31
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/functions/query.php CHANGED
@@ -28,7 +28,7 @@ if ( ! function_exists( 'tribe_filter_meta_query' ) ) {
28
  * @return array The filtered meta query array.
29
  */
30
  function tribe_filter_meta_query( array $meta_query, array $where ) {
31
- $filtered = [];
32
 
33
  foreach ( $meta_query as $key => $entry ) {
34
  if ( ! is_array( $entry ) ) {
@@ -54,44 +54,3 @@ if ( ! function_exists( 'tribe_filter_meta_query' ) ) {
54
  return $filtered;
55
  }
56
  }
57
-
58
- if ( ! function_exists( 'tribe_normalize_orderby' ) ) {
59
-
60
- /**
61
- * Normalizes an `orderby` string or array to an map of keys and orders.
62
- *
63
- * Note the function and the variables use the "orderby" (no spaces) name to stick
64
- * with the WordPress query standard.
65
- *
66
- * @since 4.12.6
67
- *
68
- * @param string|array<string,string> $orderby Either an `orderby` key, a list of `orderby`
69
- * keys or a map of `orderby` clauses.
70
- * @param string $order The default order that should be applied to `orderby` entries that
71
- * lack one.
72
- *
73
- * @return array The normalized `orderby` array, in the format supported by WordPress queries:
74
- * `[ <key_1> => <order>, <key_2> => <order>, ... ]`.
75
- */
76
- function tribe_normalize_orderby( $orderby, $order = 'ASC' ) {
77
- // Make the `orderby` part an array.
78
- $orderby_arr = (array) $orderby;
79
- $normalized = [];
80
-
81
- foreach ( $orderby_arr as $by_key => $direction ) {
82
- if ( empty( $direction ) ) {
83
- continue;
84
- }
85
-
86
- if ( is_numeric( $by_key ) ) {
87
- // It's an entry where the key is just listed, relying on the default order.
88
- $by_key = $direction;
89
- $direction = $order;
90
- }
91
-
92
- $normalized[ $by_key ] = $direction;
93
- }
94
-
95
- return $normalized;
96
- }
97
- }
28
  * @return array The filtered meta query array.
29
  */
30
  function tribe_filter_meta_query( array $meta_query, array $where ) {
31
+ $filtered = array();
32
 
33
  foreach ( $meta_query as $key => $entry ) {
34
  if ( ! is_array( $entry ) ) {
54
  return $filtered;
55
  }
56
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/functions/template-tags/date.php CHANGED
@@ -68,7 +68,7 @@ if ( ! function_exists( 'tribe_beginning_of_day' ) ) {
68
  * @category Events
69
  *
70
  * @param string $date The date to find the beginning of the day, defaults to today
71
- * @param string $format Allows date and time formatting using standard php syntax (http://php.net/manual/en/function.date.php)
72
  *
73
  * @return string
74
  */
@@ -189,7 +189,7 @@ if ( ! function_exists( 'tribe_get_start_time' ) ) {
189
  return;
190
  }
191
 
192
- // @todo [BTRIA-584]: Move timezones to Common.
193
  if ( class_exists( 'Tribe__Events__Timezones' ) ) {
194
  $start_date = Tribe__Events__Timezones::event_start_timestamp( $event->ID, $timezone );
195
  }
@@ -240,7 +240,7 @@ if ( ! function_exists( 'tribe_get_end_time' ) ) {
240
  return;
241
  }
242
 
243
- // @todo [BTRIA-584]: Move timezones to Common.
244
  if ( class_exists( 'Tribe__Events__Timezones' ) ) {
245
  $end_date = Tribe__Events__Timezones::event_end_timestamp( $event->ID, $timezone );
246
  }
@@ -300,7 +300,7 @@ if ( ! function_exists( 'tribe_get_start_date' ) ) {
300
  $display_time = false;
301
  }
302
 
303
- // @todo [BTRIA-584]: Move timezones to Common.
304
  if ( class_exists( 'Tribe__Events__Timezones' ) ) {
305
  $start_date = Tribe__Events__Timezones::event_start_timestamp( $event->ID, $timezone );
306
  } else {
@@ -362,7 +362,7 @@ if ( ! function_exists( 'tribe_get_end_date' ) ) {
362
  $display_time = false;
363
  }
364
 
365
- // @todo [BTRIA-584]: Move timezones to Common.
366
  if ( class_exists( 'Tribe__Events__Timezones' ) ) {
367
  $end_date = Tribe__Events__Timezones::event_end_timestamp( $event->ID );
368
  } else {
@@ -393,7 +393,7 @@ if ( ! function_exists( 'tribe_normalize_manual_utc_offset' ) ) {
393
  * e.g. 'UTC+3', 'UTC-4.5', 'UTC+2.75'
394
  */
395
  function tribe_normalize_manual_utc_offset( $utc_offset ) {
396
- $matches = [];
397
  if ( preg_match( '/^UTC\\s*((\\+|-)(\\d{1,2}))((:|.|,)(\\d{1,2})+)*/ui', $utc_offset, $matches ) ) {
398
  if ( ! empty( $matches[6] ) ) {
399
  $minutes = $matches[6] > 10 && $matches[6] <= 60 ? $minutes = $matches[6] / 60 : $matches[6];
@@ -448,4 +448,4 @@ if ( ! function_exists( 'tribe_is_site_using_24_hour_time' ) ) {
448
  $time_format = get_option( 'time_format' );
449
  return strpos( $time_format, 'H' ) !== false;
450
  }
451
- }
68
  * @category Events
69
  *
70
  * @param string $date The date to find the beginning of the day, defaults to today
71
+ * @param string $format Allows date and time formating using standard php syntax (http://php.net/manual/en/function.date.php)
72
  *
73
  * @return string
74
  */
189
  return;
190
  }
191
 
192
+ // @todo move timezones to Common
193
  if ( class_exists( 'Tribe__Events__Timezones' ) ) {
194
  $start_date = Tribe__Events__Timezones::event_start_timestamp( $event->ID, $timezone );
195
  }
240
  return;
241
  }
242
 
243
+ // @todo move timezones to Common
244
  if ( class_exists( 'Tribe__Events__Timezones' ) ) {
245
  $end_date = Tribe__Events__Timezones::event_end_timestamp( $event->ID, $timezone );
246
  }
300
  $display_time = false;
301
  }
302
 
303
+ // @todo move timezones to Common
304
  if ( class_exists( 'Tribe__Events__Timezones' ) ) {
305
  $start_date = Tribe__Events__Timezones::event_start_timestamp( $event->ID, $timezone );
306
  } else {
362
  $display_time = false;
363
  }
364
 
365
+ // @todo move timezones to Common
366
  if ( class_exists( 'Tribe__Events__Timezones' ) ) {
367
  $end_date = Tribe__Events__Timezones::event_end_timestamp( $event->ID );
368
  } else {
393
  * e.g. 'UTC+3', 'UTC-4.5', 'UTC+2.75'
394
  */
395
  function tribe_normalize_manual_utc_offset( $utc_offset ) {
396
+ $matches = array();
397
  if ( preg_match( '/^UTC\\s*((\\+|-)(\\d{1,2}))((:|.|,)(\\d{1,2})+)*/ui', $utc_offset, $matches ) ) {
398
  if ( ! empty( $matches[6] ) ) {
399
  $minutes = $matches[6] > 10 && $matches[6] <= 60 ? $minutes = $matches[6] / 60 : $matches[6];
448
  $time_format = get_option( 'time_format' );
449
  return strpos( $time_format, 'H' ) !== false;
450
  }
451
+ }
common/src/functions/template-tags/general.php CHANGED
@@ -264,7 +264,7 @@ if ( ! function_exists( 'tribe_get_days_between' ) ) {
264
  if ( ! function_exists( 'tribe_prepare_for_json' ) ) {
265
  /**
266
  * Function to prepare content for use as a value in a json encoded string destined for storage on a html data attribute.
267
- * Hence the double quote fun, especially in case they pass html encoded &quot; along. Any of those getting through to the data att will break jQuery's parseJSON method.
268
  * Themers can use this function to prepare data they may want to send to tribe_events_template_data() in the templates, and we use it in that function ourselves.
269
  *
270
  * @category Events
@@ -277,7 +277,7 @@ if ( ! function_exists( 'tribe_prepare_for_json' ) ) {
277
  $value = trim( htmlspecialchars( $string, ENT_QUOTES, 'UTF-8' ) );
278
  $value = str_replace( '&quot;', '"', $value );
279
  // &amp;#013; is same as \r and JSON strings should be a single line not multiple lines.
280
- $removable_values = [ '\r', '\n', '\t', '&amp;#013;' ];
281
  $value = str_replace( $removable_values, '', $value );
282
 
283
  return $value;
@@ -362,13 +362,13 @@ if ( ! function_exists( 'tribe_is_bot' ) ) {
362
 
363
  // declare known bot user agents (lowercase)
364
  $user_agent_bots = (array) apply_filters(
365
- 'tribe_is_bot_list', [
366
  'bot',
367
  'slurp',
368
  'spider',
369
  'crawler',
370
  'yandex',
371
- ]
372
  );
373
 
374
  foreach ( $user_agent_bots as $bot ) {
@@ -525,14 +525,14 @@ if ( ! function_exists( 'tribe_get_date_option' ) ) {
525
  * Shortcut for Tribe__Admin__Notices::register(), create a Admin Notice easily
526
  *
527
  * @param string $slug Slug to save the notice
528
- * @param callable|string $callback A callable Method/Function to actually display the notice
529
  * @param array $arguments Arguments to Setup a notice
530
  * @param callable|null $active_callback An optional callback that should return bool values
531
  * to indicate whether the notice should display or not.
532
  *
533
  * @return stdClass Which notice was registered
534
  */
535
- function tribe_notice( $slug, $callback, $arguments = [], $active_callback = null ) {
536
  return Tribe__Admin__Notices::instance()->register( $slug, $callback, $arguments, $active_callback );
537
  }
538
 
@@ -549,7 +549,7 @@ function tribe_notice( $slug, $callback, $arguments = [], $active_callback = nul
549
  *
550
  * @return stdClass Which notice was registered
551
  */
552
- function tribe_transient_notice( $slug, $html, $arguments = [], $expire = null ) {
553
  $expire = null !== $expire ? (int) $expire : WEEK_IN_SECONDS;
554
 
555
  return Tribe__Admin__Notices::instance()->register_transient( $slug, $html, $arguments, $expire );
@@ -575,7 +575,7 @@ function tribe_transient_notice_remove( $slug ) {
575
  *
576
  * @return WP_Error
577
  */
578
- function tribe_error( $indexes, $context = [], $sprintf = [] ) {
579
  return Tribe__Error::instance()->send( $indexes, $context, $sprintf );
580
  }
581
 
@@ -645,12 +645,11 @@ function tribe_asset_enqueue_group( $group ) {
645
  * Function to include more the one asset, based on `tribe_asset`
646
  *
647
  * @since 4.3
648
- * @since 4.12.10 Added support for overriding arguments for individual assets.
649
  *
650
  * @param object $origin The main Object for the plugin you are enqueueing the script/style for
651
  * @param array $assets {
652
  * Indexed array, don't use any associative key.
653
- * E.g.: [ 'slug-my-script', 'my/own/path.js', [ 'jquery' ] ]
654
  *
655
  * @type string $slug Slug to save the asset
656
  * @type string $file Which file will be loaded, either CSS or JS
@@ -661,8 +660,8 @@ function tribe_asset_enqueue_group( $group ) {
661
  *
662
  * @return array Which Assets were registered
663
  */
664
- function tribe_assets( $origin, $assets, $action = null, $arguments = [] ) {
665
- $registered = [];
666
 
667
  foreach ( $assets as $asset ) {
668
  if ( ! is_array( $asset ) ) {
@@ -675,16 +674,9 @@ function tribe_assets( $origin, $assets, $action = null, $arguments = [] ) {
675
  }
676
 
677
  $file = $asset[1];
678
- $deps = ! empty( $asset[2] ) ? $asset[2] : [];
679
-
680
- // Support the asset having a custom action.
681
- $asset_action = ! empty( $asset[3] ) ? $asset[3] : $action;
682
-
683
- // Support the asset having custom arguments and merge them with the original ones.
684
- $asset_arguments = ! empty( $asset[4] ) ? array_merge( $arguments, $asset[4] ) : $arguments;
685
-
686
- $registered[] = tribe_asset( $origin, $slug, $file, $deps, $asset_action, $asset_arguments );
687
 
 
688
  }
689
 
690
  return $registered;
@@ -787,40 +779,3 @@ if ( ! function_exists( 'tribe_cache' ) ) {
787
  return tribe( 'cache' );
788
  }
789
  }
790
-
791
- if ( ! function_exists( 'tribe_asset_print_group' ) ) {
792
- /**
793
- * Prints the `script` (JS) and `link` (CSS) HTML tags associated with one or more assets groups.
794
- *
795
- * @since 4.12.6
796
- *
797
- * @param string|array $group Which group(s) should be enqueued.
798
- * @param bool $echo Whether to print the group(s) tag(s) to the page or not; default to `true` to
799
- * print the HTML `script` (JS) and `link` (CSS) tags to the page.
800
- *
801
- * @return string The `script` and `link` HTML tags produced for the group(s).
802
- */
803
- function tribe_asset_print_group( $group, $echo = true ) {
804
- /** @var \Tribe__Assets $assets */
805
- $assets = tribe( 'assets' );
806
-
807
- return $assets->print_group($group, $echo);
808
- }
809
- }
810
-
811
- if ( ! function_exists( 'tribe_doing_shortcode' ) ) {
812
- /**
813
- * Check whether a specific shortcode is being run.
814
- *
815
- * This is limited to only shortcodes registered with Tribe\Shortcode\Manager.
816
- *
817
- * @since 4.12.10
818
- *
819
- * @param null|string $tag The shortcode tag name, or null to check if doing any shortcode.
820
- *
821
- * @return bool Whether the shortcode is currently being run.
822
- */
823
- function tribe_doing_shortcode( $tag = null ) {
824
- return tribe( 'shortcode.manager' )->is_doing_shortcode( $tag );
825
- }
826
- }
264
  if ( ! function_exists( 'tribe_prepare_for_json' ) ) {
265
  /**
266
  * Function to prepare content for use as a value in a json encoded string destined for storage on a html data attribute.
267
+ * Hence the double quote fun, especially in case they pass html encoded &quot; along. Any of those getting through to the data att will break jquery's parseJSON method.
268
  * Themers can use this function to prepare data they may want to send to tribe_events_template_data() in the templates, and we use it in that function ourselves.
269
  *
270
  * @category Events
277
  $value = trim( htmlspecialchars( $string, ENT_QUOTES, 'UTF-8' ) );
278
  $value = str_replace( '&quot;', '"', $value );
279
  // &amp;#013; is same as \r and JSON strings should be a single line not multiple lines.
280
+ $removable_values = array( '\r', '\n', '\t', '&amp;#013;' );
281
  $value = str_replace( $removable_values, '', $value );
282
 
283
  return $value;
362
 
363
  // declare known bot user agents (lowercase)
364
  $user_agent_bots = (array) apply_filters(
365
+ 'tribe_is_bot_list', array(
366
  'bot',
367
  'slurp',
368
  'spider',
369
  'crawler',
370
  'yandex',
371
+ )
372
  );
373
 
374
  foreach ( $user_agent_bots as $bot ) {
525
  * Shortcut for Tribe__Admin__Notices::register(), create a Admin Notice easily
526
  *
527
  * @param string $slug Slug to save the notice
528
+ * @param callable|string $callback A callable Method/Fuction to actually display the notice
529
  * @param array $arguments Arguments to Setup a notice
530
  * @param callable|null $active_callback An optional callback that should return bool values
531
  * to indicate whether the notice should display or not.
532
  *
533
  * @return stdClass Which notice was registered
534
  */
535
+ function tribe_notice( $slug, $callback, $arguments = array(), $active_callback = null ) {
536
  return Tribe__Admin__Notices::instance()->register( $slug, $callback, $arguments, $active_callback );
537
  }
538
 
549
  *
550
  * @return stdClass Which notice was registered
551
  */
552
+ function tribe_transient_notice( $slug, $html, $arguments = array(), $expire = null ) {
553
  $expire = null !== $expire ? (int) $expire : WEEK_IN_SECONDS;
554
 
555
  return Tribe__Admin__Notices::instance()->register_transient( $slug, $html, $arguments, $expire );
575
  *
576
  * @return WP_Error
577
  */
578
+ function tribe_error( $indexes, $context = array(), $sprintf = array() ) {
579
  return Tribe__Error::instance()->send( $indexes, $context, $sprintf );
580
  }
581
 
645
  * Function to include more the one asset, based on `tribe_asset`
646
  *
647
  * @since 4.3
 
648
  *
649
  * @param object $origin The main Object for the plugin you are enqueueing the script/style for
650
  * @param array $assets {
651
  * Indexed array, don't use any associative key.
652
+ * E.g.: array( 'slug-my-script', 'my/own/path.js', array( 'jquery' ) )
653
  *
654
  * @type string $slug Slug to save the asset
655
  * @type string $file Which file will be loaded, either CSS or JS
660
  *
661
  * @return array Which Assets were registered
662
  */
663
+ function tribe_assets( $origin, $assets, $action = null, $arguments = array() ) {
664
+ $registered = array();
665
 
666
  foreach ( $assets as $asset ) {
667
  if ( ! is_array( $asset ) ) {
674
  }
675
 
676
  $file = $asset[1];
677
+ $deps = ! empty( $asset[2] ) ? $asset[2] : array();
 
 
 
 
 
 
 
 
678
 
679
+ $registered[] = tribe_asset( $origin, $slug, $file, $deps, $action, $arguments );
680
  }
681
 
682
  return $registered;
779
  return tribe( 'cache' );
780
  }
781
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/functions/template-tags/html.php CHANGED
@@ -2,7 +2,6 @@
2
  /**
3
  * HTML functions (template-tags) for use in WordPress templates.
4
  */
5
- use Tribe\Utils\Element_Attributes;
6
  use Tribe\Utils\Element_Classes;
7
 
8
  /**
@@ -26,46 +25,16 @@ function tribe_get_classes() {
26
  *
27
  * @param mixed $classes,... unlimited Any amount of params to be rendered as classes.
28
  *
29
- * @return void
30
  */
31
  function tribe_classes() {
32
  $element_classes = new Element_Classes( func_get_args() );
33
  echo $element_classes->get_attribute();
34
  }
35
 
36
- /**
37
- * Parse input values into a valid array of attributes to be used in the templates.
38
- *
39
- * @since 4.12.3
40
- *
41
- * @param mixed $attributes,... unlimited Any amount of params to be rendered as attributes.
42
- *
43
- * @return array<string> An array of the parsed string attributes.
44
- */
45
- function tribe_get_attributes() {
46
- $element_attributes = new Element_Attributes( func_get_args() );
47
- return $element_attributes->get_attributes_array();
48
- }
49
-
50
- /**
51
- * Parse input values into a valid html attributes to be used in the templates.
52
- *
53
- * @since 4.12.3
54
- *
55
- * @param mixed $attributes,... unlimited Any amount of params to be rendered as attributes.
56
- *
57
- * @return void
58
- */
59
- function tribe_attributes() {
60
- $element_attributes = new Element_Attributes( func_get_args() );
61
- echo $element_attributes->get_attributes();
62
- }
63
-
64
  /**
65
  * Get attributes for required fields.
66
  *
67
- * @deprecated 4.12.6
68
- *
69
  * @since 4.10.0
70
  *
71
  * @param boolean $required If the field is required.
@@ -112,8 +81,6 @@ function tribe_required_label( $required, $echo = true ) {
112
  /**
113
  * Get attributes for disabled fields.
114
  *
115
- * @deprecated 4.12.6
116
- *
117
  * @since 4.10.0
118
  *
119
  * @param boolean $disabled If the field is disabled.
@@ -132,94 +99,3 @@ function tribe_disabled( $disabled, $echo = true ) {
132
  }
133
  }
134
  }
135
-
136
- /**
137
- * Generates a string for the tribe-dependency attributes.
138
- *
139
- * @since 4.12.14
140
- *
141
- * @param array<string,mixed> $deps The passed array of dependencies.
142
- *
143
- * @return string $dependency The string of dependencies attributes to add to the input.
144
- */
145
- function tribe_format_field_dependency( $deps ) {
146
- // Sanity check.
147
- if ( empty( $deps ) ) {
148
- return '';
149
- }
150
-
151
- // Let's be case-insensitive!
152
- $deps = array_combine( array_map( 'strtolower', array_keys( $deps ) ), $deps );
153
-
154
- // No ID to hook to? Bail.
155
- if ( empty( $deps['id'] ) ) {
156
- return;
157
- }
158
-
159
- $dependency = '';
160
-
161
- $accepted = [
162
- 'id',
163
- 'parent',
164
- 'is',
165
- 'is-not',
166
- 'is-empty',
167
- 'is-not-empty',
168
- 'is-numeric',
169
- 'is-not-numeric',
170
- 'is-checked',
171
- 'is-not-checked',
172
- ];
173
-
174
- $valid_deps = array_intersect_key( $deps, array_flip( $accepted ) );
175
-
176
- foreach ( $valid_deps as $attr => $value ) {
177
- // Attributes are always lower case.
178
- $attr = strtolower( $attr );
179
-
180
- // Handle the ID component.
181
- if ( 'id' === $attr ) {
182
- // Prepend a hash "#" if it's missing.
183
- if ( '#' !== substr( $value, 0, 1 ) ) {
184
- $value = '#' . $value;
185
- }
186
-
187
- $dependency .= " data-depends=\"{$value}\"";
188
- continue;
189
- }
190
-
191
- // Handle the dependent parent component.
192
- if ( 'parent' === $attr ) {
193
- $dependency .= " data-dependent-parent=\"{$value}\"";
194
- continue;
195
- }
196
-
197
- // Handle boolean values.
198
- if ( is_bool( $value ) ) {
199
- if ( $value ) {
200
- $dependency .= " data-condition-{$attr}";
201
- } else {
202
- if ( 0 === stripos( $attr, 'is-not-' ) ) {
203
- $attr = str_replace( 'is-not-', 'is-', $attr );
204
- } else {
205
- $attr = str_replace( 'is-', 'is-not-', $attr );
206
- }
207
-
208
- $dependency .= " data-{$attr}";
209
- }
210
-
211
- continue;
212
- }
213
-
214
- // Handle string and "empty" values
215
- if( 0 === strlen( $value ) ) {
216
- $dependency .= " data-condition-{$attr}";
217
- } else if ( 'is' === $attr ) {
218
- $dependency .= " data-condition=\"{$value}\"";
219
- } else if ( 'is-not' === $attr ) {
220
- $dependency .= " data-condition-not=\"{$value}\"";
221
- }
222
- }
223
-
224
- return $dependency;
225
- }
2
  /**
3
  * HTML functions (template-tags) for use in WordPress templates.
4
  */
 
5
  use Tribe\Utils\Element_Classes;
6
 
7
  /**
25
  *
26
  * @param mixed $classes,... unlimited Any amount of params to be rendered as classes.
27
  *
28
+ * @return string
29
  */
30
  function tribe_classes() {
31
  $element_classes = new Element_Classes( func_get_args() );
32
  echo $element_classes->get_attribute();
33
  }
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  /**
36
  * Get attributes for required fields.
37
  *
 
 
38
  * @since 4.10.0
39
  *
40
  * @param boolean $required If the field is required.
81
  /**
82
  * Get attributes for disabled fields.
83
  *
 
 
84
  * @since 4.10.0
85
  *
86
  * @param boolean $disabled If the field is disabled.
99
  }
100
  }
101
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/functions/template-tags/post.php CHANGED
@@ -30,10 +30,7 @@ function tribe_get_the_content( $more_link_text = null, $strip_teaser = false, $
30
  $content = get_the_content( $more_link_text, $strip_teaser );
31
  }
32
 
33
- $has_blocks = function_exists( 'has_blocks' ) && has_blocks( $content );
34
- // If blocks are present we need to run the content filter.
35
-
36
- if ( $has_blocks || ! doing_filter( 'the_content' ) ) {
37
  /**
38
  * Filters the post content.
39
  *
@@ -97,4 +94,4 @@ function tribe_get_post_class( $class, $post ) {
97
  }
98
 
99
  return array_merge( $class, $post_classes[ $post_id ] );
100
- }
30
  $content = get_the_content( $more_link_text, $strip_teaser );
31
  }
32
 
33
+ if ( ! doing_filter( 'the_content' ) ) {
 
 
 
34
  /**
35
  * Filters the post content.
36
  *
94
  }
95
 
96
  return array_merge( $class, $post_classes[ $post_id ] );
97
+ }
common/src/functions/utils.php CHANGED
@@ -174,45 +174,6 @@ if ( ! function_exists( 'tribe_get_global_query_object' ) ) {
174
  }
175
  }
176
 
177
- if ( ! function_exists( 'tribe_null_or_truthy' ) ) {
178
- /**
179
- * Validation of Null or Truthy values for Shortcode Attributes.
180
- *
181
- * @since 5.1.4
182
- *
183
- * @param mixed $value Which value will be validated.
184
- *
185
- * @return bool|null Sanitizes the value passed as a boolean or null.
186
- */
187
- function tribe_null_or_truthy( $value = null ) {
188
- if ( null === $value || 'null' === $value ) {
189
- return null;
190
- }
191
-
192
- return tribe_is_truthy( $value );
193
- }
194
- }
195
-
196
- if ( ! function_exists( 'tribe_null_or_number' ) ) {
197
- /**
198
- * Validation of Null or Numerical values for Shortcode Attributes.
199
- * We don't use absint() since -1 is a common number used to indicate "all" or "infinite".
200
- *
201
- * @since TBD
202
- *
203
- * @param mixed $value Which value will be validated.
204
- *
205
- * @return int|null Sanitizes the value passed as an integer or null.
206
- */
207
- function tribe_null_or_number( $value = null ) {
208
- if ( null === $value || 'null' === $value ) {
209
- return null;
210
- }
211
-
212
- return (int) $value;
213
- }
214
- }
215
-
216
  if ( ! function_exists( 'tribe_is_truthy' ) ) {
217
  /**
218
  * Determines if the provided value should be regarded as 'true'.
@@ -286,11 +247,7 @@ if ( ! function_exists( 'tribe_sort_by_priority' ) ) {
286
  $b_priority = $b->priority;
287
  }
288
 
289
- if ( (int) $a_priority === (int) $b_priority ) {
290
- return 0;
291
- }
292
-
293
- return (int) $a_priority > (int) $b_priority ? 1 : -1;
294
  }
295
  }
296
 
@@ -332,21 +289,21 @@ if ( ! function_exists( 'tribe_normalize_terms_list' ) ) {
332
 
333
  return $normalized;
334
  }
335
- }
336
 
337
- if ( ! function_exists( 'tribe_upload_image' ) ) {
338
- /**
339
- * @see Tribe__Image__Uploader::upload_and_get_attachment_id()
340
- *
341
- * @param string|int $image The path to an image file, an image URL or an attachment post ID.
342
- *
343
- * @return int|bool The attachment post ID if the uploading and attachment is successful or the ID refers to an attachment;
344
- * `false` otherwise.
345
- */
346
- function tribe_upload_image( $image ) {
347
- $uploader = new Tribe__Image__Uploader( $image );
348
 
349
- return $uploader->upload_and_get_attachment_id();
 
350
  }
351
  }
352
 
@@ -688,15 +645,6 @@ if ( ! function_exists( 'tribe_register_rest_route' ) ) {
688
  */
689
  $args = apply_filters( 'tribe_register_rest_route_args', $args, $namespace, $route, $override );
690
 
691
- // Compatibility with version 5.5 of WordPress to avoid notices.
692
- if (
693
- ! empty( $args['callback'] )
694
- && is_callable( $args['callback'] )
695
- && ! isset( $args['permission_callback'] )
696
- ) {
697
- $args['permission_callback'] = '__return_true';
698
- }
699
-
700
  return register_rest_route( $namespace, $route, $args, $override );
701
  }
702
  }
@@ -759,33 +707,29 @@ if ( ! function_exists( 'tribe_get_least_version_ever_installed' ) ) {
759
  * @return string|boolean The SemVer version string or false if no info found.
760
  */
761
  function tribe_get_least_version_ever_installed( $class ) {
762
- if ( ! is_string( $class ) ) {
763
- $class = get_class( $class );
764
-
765
- if ( false === $class ) {
766
- return false;
767
- }
768
- }
769
 
770
- $history = tribe_plugin_version_history( $class );
 
 
 
771
 
772
- // Try for the version history first.
773
- if ( false !== $history ) {
774
- // '0' may be logged as a version number, which isn't useful, so we remove it
775
- $history = array_filter( $history );
776
- $history = array_unique( $history );
777
 
778
- if ( ! empty( $history ) ) {
779
- // Sort the array so smallest version number is first (likely how the array is stored anyway)
780
- usort( $history, 'version_compare' );
781
 
782
- return array_shift( $history );
 
783
  }
784
- }
785
 
786
- // Fall back to the current plugin version.
787
- if ( defined( $class . '::VERSION' ) ) {
788
- return $class::VERSION;
 
789
  }
790
 
791
  // No version set.
@@ -812,33 +756,29 @@ if ( ! function_exists( 'tribe_get_greatest_version_ever_installed' ) ) {
812
  * @return string|boolean The SemVer version string or false if no info found.
813
  */
814
  function tribe_get_greatest_version_ever_installed( $class ) {
815
- if ( ! is_string( $class ) ) {
816
- $class = get_class( $class );
817
-
818
- if ( false === $class ) {
819
- return false;
820
- }
821
- }
822
 
823
- $history = tribe_plugin_version_history( $class );
 
 
 
824
 
825
- // Try for the version history first.
826
- if ( false !== $history ) {
827
- // '0' may be logged as a version number, which isn't useful, so we remove it
828
- $history = array_filter( $history );
829
- $history = array_unique( $history );
830
 
831
- if ( ! empty( $history ) ) {
832
- // Sort the array so smallest version number is first (likely how the array is stored anyway)
833
- usort( $history, 'version_compare' );
834
 
835
- return array_pop( $history );
 
836
  }
837
- }
838
 
839
- // Fall back to the current plugin version.
840
- if ( defined( $class . '::VERSION' ) ) {
841
- return $class::VERSION;
 
842
  }
843
 
844
  // No version set.
@@ -846,43 +786,6 @@ if ( ! function_exists( 'tribe_get_greatest_version_ever_installed' ) ) {
846
  }
847
  }
848
 
849
- /**
850
- * Gets the plugin version history for a given main class.
851
- *
852
- * Important to note we cannot setup instances to get these values, we need to
853
- * use static mapping here, since generating a full instance will effectively
854
- * activate parts of the plugin behind the scenes.
855
- *
856
- * @since 4.12.14
857
- *
858
- * @param string $class Which plugin main class we are looking for.
859
- *
860
- * @return array|false
861
- */
862
- function tribe_plugin_version_history( $class ) {
863
- if ( ! is_string( $class ) ) {
864
- $class = get_class( $class );
865
-
866
- if ( false === $class ) {
867
- return false;
868
- }
869
- }
870
-
871
- $map = [
872
- 'Tribe__Events__Main' => 'previous_ecp_versions',
873
- 'Tribe__Tickets__Main' => 'previous_event_tickets_versions',
874
- 'tickets.main' => 'previous_event_tickets_versions',
875
- 'Tribe__Tickets_Plus__Main' => 'previous_event_tickets_plus_versions',
876
- 'tickets-plus.main' => 'previous_event_tickets_plus_versions',
877
- ];
878
-
879
- if ( ! isset( $map[ $class ] ) ) {
880
- return false;
881
- }
882
-
883
- return (array) Tribe__Settings_Manager::get_option( $map[ $class ] );
884
- }
885
-
886
  if ( ! function_exists( 'tribe_get_first_ever_installed_version' ) ) {
887
  /**
888
  * Gets the initially-recorded version number installed for the specified class of a plugin having a
@@ -900,37 +803,33 @@ if ( ! function_exists( 'tribe_get_first_ever_installed_version' ) ) {
900
  * @return string|boolean The SemVer version string or false if no info found.
901
  */
902
  function tribe_get_first_ever_installed_version( $class ) {
903
- if ( ! is_string( $class ) ) {
904
- $class = get_class( $class );
905
-
906
- if ( false === $class ) {
907
- return false;
908
- }
909
- }
910
 
911
- $history = tribe_plugin_version_history( $class );
 
 
 
 
 
 
 
 
 
 
 
912
 
913
- // Try for the version history first.
914
- if ( false !== $history ) {
915
- // '0' may be logged as a version number, which isn't useful, so we remove it
916
- while (
917
- ! empty( $history )
918
- && empty( $history[0] )
919
- ) {
920
- array_shift( $history );
921
  }
922
 
923
- // Found it so return it
924
- if ( ! empty( $history[0] ) ) {
925
- return $history[0];
926
  }
927
  }
928
 
929
- // Fall back to the current plugin version.
930
- if ( defined( $class . '::VERSION' ) ) {
931
- return $class::VERSION;
932
- }
933
-
934
  // No version set.
935
  return false;
936
  }
@@ -955,9 +854,11 @@ if ( ! function_exists( 'tribe_get_currently_installed_version' ) ) {
955
  function tribe_get_currently_installed_version( $class ) {
956
  $instance = tribe_get_class_instance( $class );
957
 
958
- // First try for class constant (different logic from the other similar functions).
959
- if ( defined( $class . '::VERSION' ) ) {
960
- return $class::VERSION;
 
 
961
  }
962
 
963
  // No version set.
@@ -1154,78 +1055,3 @@ if ( ! function_exists( 'tribe_get_query_var' ) ) {
1154
  );
1155
  }
1156
  }
1157
-
1158
- if ( ! function_exists( 'tribe_without_filters' ) ) {
1159
- /**
1160
- * Runs a callback or Closure taking care to detach and reattach a set of filters.
1161
- *
1162
- * The purpose of this function is to make sure a certain callback will run in a "clean" filter environment where
1163
- * a set of filters (and actions) has been suspended to avoid side effects from applying to it.
1164
- * The function guarantees the existing filters will be detached and re-attached only to run the callback, avoiding
1165
- * issues where some piece of code might detach some filters and not re-attach them due to errors.
1166
- *
1167
- * @since 4.12.10
1168
- *
1169
- * @param array<string> $filters A set of filter, or actions, handles to detach before running the callback and
1170
- * re-attach after.
1171
- * @param callable $do The callback, or Closure, that should run in the context where the specified set of filters
1172
- * has been "suspended".
1173
- *
1174
- * @return mixed The result of the callback function.
1175
- */
1176
- function tribe_without_filters( array $filters, callable $do ) {
1177
- $filter_backups = [];
1178
- // If none of the filters to skip has anything attached to it, then skip it.
1179
- $hooked_filters = array_filter( $filters, 'has_filter' );
1180
-
1181
- if ( empty( $hooked_filters ) ) {
1182
- // No filter has functions attached to it, just return the callback invocation.
1183
- return $do();
1184
- }
1185
-
1186
- foreach ( $hooked_filters as $tag ) {
1187
- $filter_backups[ $tag ] = $GLOBALS['wp_filter'][ $tag ];
1188
- // A `null` entry will be parsed, from filter API functions, as a filter that has nothing on it.
1189
- $GLOBALS['wp_filter'][ $tag ] = null;
1190
- }
1191
-
1192
- $result = $do();
1193
-
1194
- foreach ( $filter_backups as $tag => $filter_backup ) {
1195
- $GLOBALS['wp_filter'][ $tag ] = $filter_backup;
1196
- }
1197
-
1198
- return $result;
1199
- }
1200
-
1201
- /**
1202
- * Runs a callbacks while suspending, removing and re-adding, a filter or action.
1203
- *
1204
- * The function will infer the priority of the filter, required for its correct detachment and re-attachment, on
1205
- * its own.
1206
- *
1207
- * @since 4.12.12
1208
- *
1209
- * @param string $filter_tag The filter tag to suspend.
1210
- * @param callable $filter_callback The filter_callback currently attached to the filter.
1211
- * @param callable $do The filter_callback that will be run detaching the `$filter_callback`.
1212
- * @param int $args The number of arguments that should be used to re-attach the filtering callback to the filter.
1213
- *
1214
- * @return mixed The return value of the `$do` callback.
1215
- */
1216
- function tribe_suspending_filter( $filter_tag, callable $filter_callback, callable $do, $args = 1 ) {
1217
- $priority = has_filter( $filter_tag, $filter_callback );
1218
-
1219
- if ( false !== $priority ) {
1220
- remove_filter( $filter_tag, $filter_callback, $priority );
1221
- }
1222
-
1223
- $result = $do();
1224
-
1225
- if ( false !== $priority ) {
1226
- add_filter( $filter_tag, $filter_callback, $priority, $args );
1227
- }
1228
-
1229
- return $result;
1230
- }
1231
- }
174
  }
175
  }
176
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  if ( ! function_exists( 'tribe_is_truthy' ) ) {
178
  /**
179
  * Determines if the provided value should be regarded as 'true'.
247
  $b_priority = $b->priority;
248
  }
249
 
250
+ return (int) $a_priority === (int) $b_priority ? 0 : (int) $a_priority > (int) $b_priority;
 
 
 
 
251
  }
252
  }
253
 
289
 
290
  return $normalized;
291
  }
 
292
 
293
+ if ( ! function_exists( 'tribe_upload_image' ) ) {
294
+ /**
295
+ * @see Tribe__Image__Uploader::upload_and_get_attachment_id()
296
+ *
297
+ * @param string|int $image The path to an image file, an image URL or an attachment post ID.
298
+ *
299
+ * @return int|bool The attachment post ID if the uploading and attachment is successful or the ID refers to an attachment;
300
+ * `false` otherwise.
301
+ */
302
+ function tribe_upload_image( $image ) {
303
+ $uploader = new Tribe__Image__Uploader( $image );
304
 
305
+ return $uploader->upload_and_get_attachment_id();
306
+ }
307
  }
308
  }
309
 
645
  */
646
  $args = apply_filters( 'tribe_register_rest_route_args', $args, $namespace, $route, $override );
647
 
 
 
 
 
 
 
 
 
 
648
  return register_rest_route( $namespace, $route, $args, $override );
649
  }
650
  }
707
  * @return string|boolean The SemVer version string or false if no info found.
708
  */
709
  function tribe_get_least_version_ever_installed( $class ) {
710
+ $instance = tribe_get_class_instance( $class );
 
 
 
 
 
 
711
 
712
+ if ( $instance ) {
713
+ // Try for the version history first.
714
+ if ( ! empty( $instance->version_history_slug ) ) {
715
+ $history = (array) Tribe__Settings_Manager::get_option( $instance->version_history_slug );
716
 
717
+ // '0' may be logged as a version number, which isn't useful, so we remove it
718
+ $history = array_filter( $history );
719
+ $history = array_unique( $history );
 
 
720
 
721
+ if ( ! empty( $history ) ) {
722
+ // Sort the array so smallest version number is first (likely how the array is stored anyway)
723
+ usort( $history, 'version_compare' );
724
 
725
+ return array_shift( $history );
726
+ }
727
  }
 
728
 
729
+ // Fall back to the current plugin version.
730
+ if ( defined( get_class( $instance ) . '::VERSION' ) ) {
731
+ return $instance::VERSION;
732
+ }
733
  }
734
 
735
  // No version set.
756
  * @return string|boolean The SemVer version string or false if no info found.
757
  */
758
  function tribe_get_greatest_version_ever_installed( $class ) {
759
+ $instance = tribe_get_class_instance( $class );
 
 
 
 
 
 
760
 
761
+ if ( $instance ) {
762
+ // Try for the version history first.
763
+ if ( ! empty( $instance->version_history_slug ) ) {
764
+ $history = (array) Tribe__Settings_Manager::get_option( $instance->version_history_slug );
765
 
766
+ // '0' may be logged as a version number, which isn't useful, so we remove it
767
+ $history = array_filter( $history );
768
+ $history = array_unique( $history );
 
 
769
 
770
+ if ( ! empty( $history ) ) {
771
+ // Sort the array so smallest version number is first (likely how the array is stored anyway)
772
+ usort( $history, 'version_compare' );
773
 
774
+ return array_pop( $history );
775
+ }
776
  }
 
777
 
778
+ // Fall back to the current plugin version.
779
+ if ( defined( get_class( $instance ) . '::VERSION' ) ) {
780
+ return $instance::VERSION;
781
+ }
782
  }
783
 
784
  // No version set.
786
  }
787
  }
788
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
789
  if ( ! function_exists( 'tribe_get_first_ever_installed_version' ) ) {
790
  /**
791
  * Gets the initially-recorded version number installed for the specified class of a plugin having a
803
  * @return string|boolean The SemVer version string or false if no info found.
804
  */
805
  function tribe_get_first_ever_installed_version( $class ) {
806
+ $instance = tribe_get_class_instance( $class );
 
 
 
 
 
 
807
 
808
+ if ( $instance ) {
809
+ // Try for the version history first.
810
+ if ( ! empty( $instance->version_history_slug ) ) {
811
+ $history = (array) Tribe__Settings_Manager::get_option( $instance->version_history_slug );
812
+
813
+ // '0' may be logged as a version number, which isn't useful, so we remove it
814
+ while (
815
+ ! empty( $history )
816
+ && empty( $history[0] )
817
+ ) {
818
+ array_shift( $history );
819
+ }
820
 
821
+ // Found it so return it
822
+ if ( ! empty( $history[0] ) ) {
823
+ return $history[0];
824
+ }
 
 
 
 
825
  }
826
 
827
+ // Fall back to the current plugin version.
828
+ if ( defined( get_class( $instance ) . '::VERSION' ) ) {
829
+ return $instance::VERSION;
830
  }
831
  }
832
 
 
 
 
 
 
833
  // No version set.
834
  return false;
835
  }
854
  function tribe_get_currently_installed_version( $class ) {
855
  $instance = tribe_get_class_instance( $class );
856
 
857
+ if ( $instance ) {
858
+ // First try for class constant (different logic from the other similar functions).
859
+ if ( defined( get_class( $instance ) . '::VERSION' ) ) {
860
+ return $instance::VERSION;
861
+ }
862
  }
863
 
864
  // No version set.
1055
  );
1056
  }
1057
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/resources/css/app-shop.min.css CHANGED
@@ -1 +1 @@
1
- body.events_page_tribe-app-shop,body.tribe_events_page_tribe-app-shop{background-color:#fff;min-width:350px}body.events_page_tribe-app-shop .update-nag,body.tribe_events_page_tribe-app-shop .update-nag{display:none}body.events_page_tribe-app-shop #wpcontent,body.tribe_events_page_tribe-app-shop #wpcontent{padding:0}#tribe-app-shop{color:#0f1031;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}#tribe-app-shop a{text-decoration:none}#tribe-app-shop .content-wrapper{margin:0 auto;width:360px;max-width:1060px}#tribe-app-shop .tribe-events-admin-graphic{top:0;height:40px}#tribe-app-shop .tribe-header{height:120px;margin:36px auto 0;position:relative;text-align:center;width:100%}#tribe-app-shop .tribe-header .content-wrapper{width:100%}#tribe-app-shop .tribe-header h1{display:inline-block;font-size:18px;font-weight:400;line-height:22px;margin-right:12px;vertical-align:middle}#tribe-app-shop .tribe-header h1 span{font-weight:700}#tribe-app-shop .tribe-header img{display:inline-block;height:57px;margin:0 0 32px 22px;vertical-align:middle}#tribe-app-shop .tribe-header ul{border-bottom:1px solid #e1e1e4;display:block;margin:0 auto;overflow:scroll;padding:0 14px;text-align:left;white-space:nowrap}#tribe-app-shop .tribe-header ul li{cursor:pointer;display:inline-block;font-size:16px;font-weight:500;line-height:20px;margin:0 18px 0 6px;padding:0 0 10px;position:relative;text-align:center}#tribe-app-shop .tribe-header ul li:hover{color:#161b7d}#tribe-app-shop .tribe-header ul li.selected{color:#334aff}#tribe-app-shop .tribe-header ul li.selected:after{background:#334aff;border-radius:100px;bottom:0;content:"";display:block;height:3px;left:0;position:absolute;right:0}#tribe-app-shop .tribe-content{padding-top:28px}#tribe-app-shop .addon-grid>p{font-size:18px;font-weight:400;line-height:28px;margin:0 0 40px;padding:0 20px;text-align:center}#tribe-app-shop .addon-grid h2{font-size:34px;font-weight:500;line-height:42px;margin:0 0 13px;text-align:center}#tribe-app-shop .addon-grid h2.already-installed{margin-bottom:40px}#tribe-app-shop .addon-grid .tribe-addon{padding:28px;width:calc(100% - 40px)}#tribe-app-shop .addon-grid .tribe-addon .headline{height:40px;margin-bottom:12px}#tribe-app-shop .addon-grid .tribe-addon .headline img{height:40px;margin-right:8px}#tribe-app-shop .addon-grid .tribe-addon .headline a{display:table-cell}#tribe-app-shop .addon-grid .tribe-addon .headline h3{display:table;float:left;font-size:15px;font-weight:700;height:36px;line-height:18px}#tribe-app-shop .addon-grid .tribe-addon .headline h3.has-pill{max-width:140px}#tribe-app-shop .addon-grid .tribe-addon .description{display:table;min-height:48px}#tribe-app-shop .addon-grid .tribe-addon .description p{display:table-cell;font-size:15px;font-weight:500;line-height:24px;margin:0}#tribe-app-shop .addon-grid .tribe-addon .features{min-height:158px}#tribe-app-shop .addon-grid .tribe-addon .features li{color:#0f1031;font-size:15px;font-weight:400;line-height:24px;margin-bottom:4px}#tribe-app-shop .addon-grid .tribe-addon .features li .check{padding-right:12px}#tribe-app-shop .addon-grid .tribe-addon .features li .feature-text{max-width:224px;vertical-align:top}#tribe-app-shop .addon-grid .tribe-addon .features li span{display:inline-block}#tribe-app-shop .addon-grid .tribe-addon .features li svg{color:#3d54ff;height:12px;width:16px}#tribe-app-shop .addon-grid .tribe-addon .features{margin-bottom:16px}#tribe-app-shop .addon-grid .tribe-bundle{padding:28px 32px 36px;width:calc(100% - 40px)}#tribe-app-shop .addon-grid .tribe-bundle .details{display:inline-block;width:100%}#tribe-app-shop .addon-grid .tribe-bundle .details .headline img{height:60px;margin-right:12px;width:60px}#tribe-app-shop .addon-grid .tribe-bundle .details .headline a{display:table-cell;font-size:17px;font-weight:700;line-height:21px}#tribe-app-shop .addon-grid .tribe-bundle .details .headline h3{display:table;height:60px}#tribe-app-shop .addon-grid .tribe-bundle .details p{font-size:14px;line-height:22px;margin:0;padding-top:4px}#tribe-app-shop .addon-grid .tribe-bundle .cta{margin-top:0}#tribe-app-shop .addon-grid .tribe-bundle .cta.wide{display:none;margin:24px 0 0}#tribe-app-shop .addon-grid .tribe-bundle .cta.wide .button{display:inline-block}#tribe-app-shop .addon-grid .tribe-bundle .cta.wide .discount{display:table-cell;height:20px;padding-left:16px;text-align:left;vertical-align:middle}#tribe-app-shop .addon-grid .tribe-bundle .cta .button{display:block;margin:auto}#tribe-app-shop .addon-grid .tribe-bundle .cta .discount{color:#007363;font-size:14px;font-weight:700;letter-spacing:1px;line-height:58px;margin-left:11px;width:100%;display:block;text-align:center}#tribe-app-shop .addon-grid .tribe-bundle .includes{display:inline-block;padding:0 0 28px;vertical-align:top}#tribe-app-shop .addon-grid .tribe-bundle .includes h4{font-size:12px;font-weight:700;letter-spacing:1px;line-height:15px;margin:24px 0 8px;text-transform:uppercase}#tribe-app-shop .addon-grid .tribe-bundle .includes ul{display:inline-block;margin:0;vertical-align:top}#tribe-app-shop .addon-grid .tribe-bundle .includes ul.second{margin-left:30px}#tribe-app-shop .addon-grid .tribe-bundle .includes li{color:#0f1031;font-size:14px;font-weight:500;height:40px;margin-bottom:8px}#tribe-app-shop .addon-grid .tribe-bundle .includes li img{float:left;height:40px;width:40px;margin-right:16px}#tribe-app-shop .addon-grid .tribe-bundle .includes li span{float:left;line-height:40px}#tribe-app-shop .addon-grid .tribe-addon,#tribe-app-shop .addon-grid .tribe-bundle{background-color:#fff;border-radius:16px;border:1px solid #e1e1e4;box-sizing:border-box;display:inline-block;margin:0 20px 40px;position:relative;vertical-align:top}#tribe-app-shop .addon-grid .tribe-addon .headline img,#tribe-app-shop .addon-grid .tribe-bundle .headline img{float:left}#tribe-app-shop .addon-grid .tribe-addon .headline a,#tribe-app-shop .addon-grid .tribe-bundle .headline a{color:#0f1031;vertical-align:middle}#tribe-app-shop .addon-grid .tribe-addon .headline h3,#tribe-app-shop .addon-grid .tribe-bundle .headline h3{margin:0}#tribe-app-shop .addon-grid .tribe-addon .headline .pill,#tribe-app-shop .addon-grid .tribe-bundle .headline .pill{border-radius:100px;display:inline-block;float:right;font-size:10px;font-weight:700;letter-spacing:1px;line-height:12px;margin-top:8px;padding:5px 0;text-align:center;text-transform:uppercase;width:62px}#tribe-app-shop .addon-grid .tribe-addon .headline .pill.free,#tribe-app-shop .addon-grid .tribe-bundle .headline .pill.free{background:rgba(80,176,120,.28);color:#007363}#tribe-app-shop .addon-grid .tribe-addon .headline .pill.active,#tribe-app-shop .addon-grid .tribe-bundle .headline .pill.active{background:rgba(61,84,255,.16);color:#3d54ff}#tribe-app-shop .addon-grid .tribe-addon .promo-image img,#tribe-app-shop .addon-grid .tribe-bundle .promo-image img{width:255px}#tribe-app-shop .addon-grid .tribe-addon p,#tribe-app-shop .addon-grid .tribe-bundle p{color:#0f1031;text-align:left}#tribe-app-shop .addon-grid .button{background:#3d54ff;border-radius:100px;color:#fff;font-size:16px;font-weight:700;letter-spacing:1px;line-height:20px;margin-bottom:13px;padding:18px 0;text-align:center;width:255px;border:none;box-shadow:none;height:auto}#tribe-app-shop .addon-grid .button:hover{background:#1c39bb}#tribe-app-shop .addon-grid .button.secondary{background:#fff;border:1px solid #0f1031;color:#0f1031;display:block;margin:auto}#tribe-app-shop .addon-grid .button.secondary:hover{color:#fff;background:#3d54ff}#tribe-app-shop #tribe-extensions p{color:#0f1031;font-size:15px;font-weight:400;line-height:24px;padding-bottom:16px}#tribe-bundles,#tribe-extensions{display:none}@media screen and (min-width:710px){#tribe-app-shop .content-wrapper{width:710px}#tribe-app-shop .tribe-events-admin-graphic{height:131px}#tribe-app-shop .tribe-header{border-bottom:1px solid hsla(240,5%,89%,.5);height:147px;margin-top:44px}#tribe-app-shop .tribe-header .logo-word-mark{text-align:left}#tribe-app-shop .tribe-header .content-wrapper{width:710px}#tribe-app-shop .tribe-header img{height:65px;margin-bottom:42px}#tribe-app-shop .tribe-header ul{border-bottom:none;display:block;overflow:auto}#tribe-app-shop .tribe-header ul li{padding:0 0 20px}#tribe-app-shop .tribe-content{padding-top:54px}#tribe-app-shop .addon-grid .tribe-addon{width:310px}#tribe-app-shop .addon-grid .tribe-bundle .details .headline a{font-size:20px;line-height:24px}#tribe-app-shop .addon-grid .tribe-bundle .details p{font-size:16px;line-height:26px}}@media screen and (min-width:1217px){#tribe-app-shop .content-wrapper,#tribe-app-shop .tribe-header .content-wrapper{width:100%}#tribe-app-shop .tribe-header ul li{margin:0 12px}#tribe-app-shop .addon-grid .tribe-bundle .details{width:502px}#tribe-app-shop .addon-grid .tribe-bundle .cta{margin-top:0}#tribe-app-shop .addon-grid .tribe-bundle .cta.wide{display:table}#tribe-app-shop .addon-grid .tribe-bundle .cta.narrow{display:none}#tribe-app-shop .addon-grid .tribe-bundle .includes{padding:10px 0 0 50px}#tribe-app-shop .addon-grid .tribe-bundle .includes h4{margin:16px 0 19px}}
1
+ #tribe-app-shop{max-width:960px}#tribe-app-shop .addon-grid{width:100%}#tribe-app-shop .header h1{display:inline-block}#tribe-app-shop .header .button{margin-top:10px}#tribe-app-shop .tribe-addon{background-color:#fff;border-bottom:1px solid #dfdfdf;display:inline-block;margin:0 15px 15px 0;overflow:hidden;padding:0;position:relative;vertical-align:top;width:300px;border-radius:3px 3px 3px 3px;box-sizing:border-box}#tribe-app-shop .tribe-addon h4{font-size:1.17em;margin:15px 0}#tribe-app-shop .tribe-addon h4 a{text-decoration:none}#tribe-app-shop .tribe-addon .button{bottom:15px;display:block;position:absolute}#tribe-app-shop .tribe-addon .button-disabled{padding-left:3px}#tribe-app-shop .tribe-addon .button-disabled .dashicons{font-size:28px;padding-right:9px}#tribe-app-shop .tribe-addon .caption{padding:0 15px 45px}#tribe-app-shop .tribe-addon .thumb img{height:228px;max-width:100%;width:300px}#tribe-app-shop .tribe-addon.first{margin:20px 0;overflow:hidden;padding:0;width:937px}#tribe-app-shop .tribe-addon.first h4{font-size:20px;line-height:1.4;margin:15px 0 0}#tribe-app-shop .tribe-addon.first .caption{display:inline-block;padding-left:20px;width:600px}#tribe-app-shop .tribe-addon.first .thumb{float:left;height:228px;width:300px}#tribe-app-shop .tribe-installed-headline{margin-bottom:20px}
common/src/resources/css/app/elements.min.css CHANGED
@@ -8,7 +8,7 @@
8
  .tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout{margin:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block{margin:0;max-width:100%!important;padding:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-hovered>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected-parent>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-hovered>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected-parent>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected>.editor-block-list__block-edit:before{outline:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit{margin:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit:before{outline:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit .editor-block-contextual-toolbar,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit .editor-block-contextual-toolbar{display:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block{outline:none}
9
  .tribe-common-form-select{display:-webkit-box;display:flex}.tribe-common-form-select>div{-webkit-box-flex:0;flex:0 0 auto;min-width:193px}.tribe-common-form-select__toggle{background-color:#fff;border-radius:2px;border:2px solid #eaebec}.tribe-common-form-select__toggle button{-webkit-box-align:center;align-items:center;background-color:#fefffe;border:none;color:#545d66;display:-webkit-box;display:flex;font-family:Helvetica,sans-serif;font-size:16px;font-weight:400;-webkit-box-pack:center;justify-content:center;line-height:1.5;padding:6px 10px;text-align:left;text-decoration:none;width:100%}.tribe-common-form-select__toggle button>span{-webkit-box-flex:1;flex:1}.tribe-common-form-select__options__option{background:transparent;border:0;color:#555d66;cursor:pointer;display:block;line-height:20px;padding:5px 12px;text-align:left;width:100%}.tribe-common-form-select__options__option:hover{background-color:#009fd4;color:#fff}
10
  input.tribe-editor__input[type=number],input.tribe-editor__input[type=text]{color:#000;font-size:16px;line-height:24px;border:1px solid #e1e3e6;padding:7px 15px;margin:0;height:40px}input.tribe-editor__input[type=number]:focus,input.tribe-editor__input[type=text]:focus{color:#000;box-shadow:none;outline:none}input.tribe-editor__input[type=number]:disabled,input.tribe-editor__input[type=text]:disabled{color:#aeb4bb}
11
- .tribe-editor__timepicker{display:inline-block}.tribe-editor__timepicker__toggle{background-color:#fff;border:1px solid #e1e3e6;border-radius:2px;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.tribe-editor__timepicker__toggle input.tribe-editor__timepicker__input[type=text]{font-family:Helvetica,sans-serif;font-size:14px;line-height:1.5;padding:6px 0 6px 10px;border:none;width:80px}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__toggle-btn{padding:10px}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__toggle-btn:disabled>svg.dashicon{fill:#aeb4bb}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__all-day-btn{color:#545d66;line-height:20px;padding:6px 10px;text-decoration:none;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.tribe-editor__timepicker__content.components-popover .components-popover__content{min-width:140px}.tribe-editor__timepicker__content .tribe-editor__timepicker__items{height:250px;overflow:auto}.tribe-editor__timepicker__content .tribe-editor__timepicker__items .components-placeholder{height:inherit}.tribe-editor__timepicker__content .tribe-editor__timepicker__item{display:block;width:100%;color:#555d66;padding:5px 12px;cursor:pointer;border-bottom:1px solid #e2e4e7;line-height:20px;background:transparent;text-align:left}.tribe-editor__timepicker__content .tribe-editor__timepicker__item:focus,.tribe-editor__timepicker__content .tribe-editor__timepicker__item:hover{background-color:#e7f5fa}.tribe-editor__timepicker__content .tribe-editor__timepicker__item--current,.tribe-editor__timepicker__content .tribe-editor__timepicker__item--current:focus,.tribe-editor__timepicker__content .tribe-editor__timepicker__item--current:hover{color:#fff;background-color:#009fd4}
12
  .DayPicker{display:inline-block;font-size:1rem}.DayPicker-wrapper{position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;padding-bottom:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DayPicker-Months{display:-webkit-box;display:flex;flex-wrap:wrap;-webkit-box-pack:center;justify-content:center}.DayPicker-Month{display:table;margin:0 1em;margin-top:1em;border-spacing:0;border-collapse:collapse;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DayPicker-NavButton{position:absolute;top:1em;right:1.5em;left:auto;display:inline-block;margin-top:2px;width:1.25em;height:1.25em;background-position:50%;background-size:50%;background-repeat:no-repeat;color:#8b9898;cursor:pointer}.DayPicker-NavButton:hover{opacity:.8}.DayPicker-NavButton--prev{margin-right:1.5em;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAwCAYAAAB5R9gVAAAABGdBTUEAALGPC/xhBQAAAVVJREFUWAnN2G0KgjAYwPHpGfRkaZeqvgQaK+hY3SUHrk1YzNLay/OiEFp92I+/Mp2F2Mh2lLISWnflFjzH263RQjzMZ19wgs73ez0o1WmtW+dgA01VxrE3p6l2GLsnBy1VYQOtVSEH/atCCgqpQgKKqYIOiq2CBkqtggLKqQIKgqgCBjpJ2Y5CdJ+zrT9A7HHSTA1dxUdHgzCqJIEwq0SDsKsEg6iqBIEoq/wEcVRZBXFV+QJxV5mBtlDFB5VjYTaGZ2sf4R9PM7U9ZU+lLuaetPP/5Die3ToO1+u+MKtHs06qODB2zBnI/jBd4MPQm1VkY79Tb18gB+C62FdBFsZR6yeIo1YQiLJWMIiqVjQIu1YSCLNWFgijVjYIuhYYCKoWKAiiFgoopxYaKLUWOii2FgkophYp6F3r42W5A9s9OcgNvva8xQaysKXlFytoqdYmQH6tF3toSUo0INq9AAAAAElFTkSuQmCC")}.DayPicker-NavButton--next{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAwCAYAAAB5R9gVAAAABGdBTUEAALGPC/xhBQAAAXRJREFUWAnN119ugjAcwPHWzJ1gnmxzB/BBE0n24m4xfNkTaOL7wOtsl3AXMMb+Vjaa1BG00N8fSEibPpAP3xAKKs2yjzTPH9RAjhEo9WzPr/Vm8zgE0+gXATAxxuxtqeJ9t5tIwv5AtQAApsfT6TPdbp+kUBcgVwvO51KqVhMkXKsVJFXrOkigVhCIs1Y4iKlWZxB1rX4gwlpRIIpa8SDkWmggrFq4IIRaJKCYWnSgnrXIQV1r8YD+1Vrn+bReagysIFfLABRt31v8oBu1xEBttfRbltmfjgEcWh9snUS2kNdBK6WN1vrOWxObWsz+fjxevsxmB1GQDfINWiev83nhaoiB/CoOU438oPrhXS0WpQ9xc1ZQWxWHqUYe0I0qrKCQKjygDlXIQV2r0IF6ViEBxVTBBSFUQQNhVYkHIVeJAtkNsbQ7c1LtzP6FsObhb2rCKv7NBIGoq4SDmKoEgTirXAcJVGkFSVVpgoSrXICGUMUH/QBZNSUy5XWUhwAAAABJRU5ErkJggg==")}.DayPicker-NavButton--interactionDisabled{display:none}.DayPicker-Caption{display:table-caption;margin-bottom:.5em;padding:0 .5em;text-align:left}.DayPicker-Caption>div{font-weight:500;font-size:1.15em}.DayPicker-Weekdays{display:table-header-group;margin-top:1em}.DayPicker-WeekdaysRow{display:table-row}.DayPicker-Weekday{display:table-cell;padding:.5em;color:#8b9898;text-align:center;font-size:.875em}.DayPicker-Weekday abbr[title]{border-bottom:none;text-decoration:none}.DayPicker-Body{display:table-row-group}.DayPicker-Week{display:table-row}.DayPicker-Day{border-radius:50%;text-align:center}.DayPicker-Day,.DayPicker-WeekNumber{display:table-cell;padding:.5em;vertical-align:middle;cursor:pointer}.DayPicker-WeekNumber{min-width:1em;border-right:1px solid #eaecec;color:#8b9898;text-align:right;font-size:.75em}.DayPicker--interactionDisabled .DayPicker-Day{cursor:default}.DayPicker-Footer{padding-top:.5em}.DayPicker-TodayButton{border:none;background-color:transparent;background-image:none;box-shadow:none;color:#4a90e2;font-size:.875em;cursor:pointer}.DayPicker-Day--today{color:#d0021b;font-weight:700}.DayPicker-Day--outside{color:#8b9898;cursor:default}.DayPicker-Day--disabled{color:#dce0e0;cursor:default}.DayPicker-Day--sunday{background-color:#f7f8f8}.DayPicker-Day--sunday:not(.DayPicker-Day--today){color:#dce0e0}.DayPicker-Day--selected:not(.DayPicker-Day--disabled):not(.DayPicker-Day--outside){position:relative;background-color:#4a90e2;color:#f0f8ff}.DayPicker-Day--selected:not(.DayPicker-Day--disabled):not(.DayPicker-Day--outside):hover{background-color:#51a0fa}.DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--outside):hover{background-color:#f0f8ff}.DayPickerInput{display:inline-block}.DayPickerInput-OverlayWrapper{position:relative}.DayPickerInput-Overlay{position:absolute;left:0;z-index:1;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.15)}
13
  .tribe-editor__day-picker-input.DayPickerInput>input{border:1px solid #e1e3e6;color:#545d66;font-size:16px;line-height:24px;padding:7px 15px;width:100%;height:40px}.tribe-editor__day-picker-input.DayPickerInput>input:disabled{color:#aeb4bb}.tribe-editor__day-picker-input .DayPickerInput-Overlay{padding:20px;z-index:10}.tribe-editor__day-picker-input .DayPicker{width:100%}.tribe-editor__day-picker-input .DayPicker-Month{margin:0}.tribe-editor__day-picker-input .DayPicker-Caption>div,.tribe-editor__day-picker-input .DayPicker-Day,.tribe-editor__day-picker-input .DayPicker-Weekday{color:#545d66;font-family:Helvetica,"sans-serif";font-weight:400}.tribe-editor__day-picker-input .DayPicker-Caption>div{font-size:16px;margin-bottom:12px;text-align:center}.tribe-editor__day-picker-input .DayPicker-Weekday{font-size:12px}.tribe-editor__day-picker-input .DayPicker-Day{font-size:14px}.tribe-editor__day-picker-input .DayPicker-Day:hover{color:#007bb4;background-color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--today{color:#545d66}.tribe-editor__day-picker-input .DayPicker-Day--disabled{pointer-events:none;color:#ccc}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--outside){border-radius:0;background-color:#009fd4;color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--outside):hover{background-color:#007bb4;color:#fff}.tribe-editor__day-picker-input .DayPicker-NavButton--prev{left:0;top:0}.tribe-editor__day-picker-input .DayPicker-NavButton--next{right:0;top:0}.tribe-editor__day-picker-input .DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--outside):hover{background-color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--start):not(.DayPicker-Day--end):not(.DayPicker-Day--outside){background-color:#e7f5fa;color:#545d66}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--start):not(.DayPicker-Day--end):not(.DayPicker-Day--outside):hover{color:#007bb4}
14
  .tribe-editor__creatable-select .tribe-editor__creatable-select__control{height:40px;border:1px solid #e1e3e6;border-radius:3px;background-color:#fff}.tribe-editor__creatable-select .tribe-editor__creatable-select__control:hover{border:1px solid #e1e3e6}.tribe-editor__creatable-select .tribe-editor__creatable-select__control--is-focused{box-shadow:none}.tribe-editor__creatable-select .tribe-editor__creatable-select__value-container{padding:2px 5px 2px 15px}.tribe-editor__creatable-select .tribe-editor__creatable-select__single-value{margin:0;max-width:calc(100% - 15px);font-size:16px;line-height:1.5}.tribe-editor__creatable-select .tribe-editor__creatable-select__input{font-size:16px}.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input{margin:0;line-height:1.5}.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input,.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input:focus{box-shadow:none}.tribe-editor__creatable-select svg.tribe-editor__creatable-select__dropdown-indicator{fill:#555d66}.tribe-editor__creatable-select .tribe-editor__creatable-select__menu{margin:0;border:1px solid #e1e3e6;border-top:none;border-radius:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px;box-shadow:none;-webkit-transform:translateY(-7px);transform:translateY(-7px)}.tribe-editor__creatable-select .tribe-editor__creatable-select__menu-list{padding:0}.tribe-editor__creatable-select .tribe-editor__creatable-select__option{font-size:16px;line-height:1.5;padding:3px 15px}.tribe-editor__creatable-select .tribe-editor__creatable-select__option--is-focused{background-color:#e7f5fa}.tribe-editor__creatable-select .tribe-editor__creatable-select__option--is-selected{background-color:#11a0d2}
8
  .tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout{margin:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block{margin:0;max-width:100%!important;padding:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-hovered>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected-parent>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-hovered>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected-parent>.editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block.is-selected>.editor-block-list__block-edit:before{outline:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit{margin:0}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit:before,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit:before{outline:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit .editor-block-contextual-toolbar,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block .editor-block-list__block-edit .editor-block-contextual-toolbar{display:none}.tribe-common__plugin-block-hook .block-editor-inner-blocks .editor-block-list__layout .editor-block-list__block,.tribe-common__plugin-block-hook .editor-inner-blocks .editor-block-list__layout .editor-block-list__block{outline:none}
9
  .tribe-common-form-select{display:-webkit-box;display:flex}.tribe-common-form-select>div{-webkit-box-flex:0;flex:0 0 auto;min-width:193px}.tribe-common-form-select__toggle{background-color:#fff;border-radius:2px;border:2px solid #eaebec}.tribe-common-form-select__toggle button{-webkit-box-align:center;align-items:center;background-color:#fefffe;border:none;color:#545d66;display:-webkit-box;display:flex;font-family:Helvetica,sans-serif;font-size:16px;font-weight:400;-webkit-box-pack:center;justify-content:center;line-height:1.5;padding:6px 10px;text-align:left;text-decoration:none;width:100%}.tribe-common-form-select__toggle button>span{-webkit-box-flex:1;flex:1}.tribe-common-form-select__options__option{background:transparent;border:0;color:#555d66;cursor:pointer;display:block;line-height:20px;padding:5px 12px;text-align:left;width:100%}.tribe-common-form-select__options__option:hover{background-color:#009fd4;color:#fff}
10
  input.tribe-editor__input[type=number],input.tribe-editor__input[type=text]{color:#000;font-size:16px;line-height:24px;border:1px solid #e1e3e6;padding:7px 15px;margin:0;height:40px}input.tribe-editor__input[type=number]:focus,input.tribe-editor__input[type=text]:focus{color:#000;box-shadow:none;outline:none}input.tribe-editor__input[type=number]:disabled,input.tribe-editor__input[type=text]:disabled{color:#aeb4bb}
11
+ .tribe-editor__timepicker{display:inline-block}.tribe-editor__timepicker__toggle{background-color:#fff;border:1px solid #e1e3e6;border-radius:2px;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.tribe-editor__timepicker__toggle input.tribe-editor__timepicker__input[type=text]{font-family:Helvetica,sans-serif;font-size:14px;line-height:1.5;padding:6px 0 6px 10px;border:none;width:80px}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__toggle-btn{padding:10px}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__toggle-btn:disabled>svg.dashicon{fill:#aeb4bb}.tribe-editor__timepicker__toggle button.tribe-editor__timepicker__all-day-btn{color:#545d66;line-height:20px;padding:6px 10px;text-decoration:none;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center}.tribe-editor__timepicker__content.components-popover .components-popover__content{min-width:110px}.tribe-editor__timepicker__content .tribe-editor__timepicker__items{height:250px;overflow:auto}.tribe-editor__timepicker__content .tribe-editor__timepicker__items .components-placeholder{height:inherit}.tribe-editor__timepicker__content .tribe-editor__timepicker__item{display:block;width:100%;color:#555d66;padding:5px 12px;cursor:pointer;border-bottom:1px solid #e2e4e7;line-height:20px;background:transparent;text-align:left}.tribe-editor__timepicker__content .tribe-editor__timepicker__item:focus,.tribe-editor__timepicker__content .tribe-editor__timepicker__item:hover{background-color:#e7f5fa}.tribe-editor__timepicker__content .tribe-editor__timepicker__item--current,.tribe-editor__timepicker__content .tribe-editor__timepicker__item--current:focus,.tribe-editor__timepicker__content .tribe-editor__timepicker__item--current:hover{color:#fff;background-color:#009fd4}
12
  .DayPicker{display:inline-block;font-size:1rem}.DayPicker-wrapper{position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;padding-bottom:1em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DayPicker-Months{display:-webkit-box;display:flex;flex-wrap:wrap;-webkit-box-pack:center;justify-content:center}.DayPicker-Month{display:table;margin:0 1em;margin-top:1em;border-spacing:0;border-collapse:collapse;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.DayPicker-NavButton{position:absolute;top:1em;right:1.5em;left:auto;display:inline-block;margin-top:2px;width:1.25em;height:1.25em;background-position:50%;background-size:50%;background-repeat:no-repeat;color:#8b9898;cursor:pointer}.DayPicker-NavButton:hover{opacity:.8}.DayPicker-NavButton--prev{margin-right:1.5em;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAwCAYAAAB5R9gVAAAABGdBTUEAALGPC/xhBQAAAVVJREFUWAnN2G0KgjAYwPHpGfRkaZeqvgQaK+hY3SUHrk1YzNLay/OiEFp92I+/Mp2F2Mh2lLISWnflFjzH263RQjzMZ19wgs73ez0o1WmtW+dgA01VxrE3p6l2GLsnBy1VYQOtVSEH/atCCgqpQgKKqYIOiq2CBkqtggLKqQIKgqgCBjpJ2Y5CdJ+zrT9A7HHSTA1dxUdHgzCqJIEwq0SDsKsEg6iqBIEoq/wEcVRZBXFV+QJxV5mBtlDFB5VjYTaGZ2sf4R9PM7U9ZU+lLuaetPP/5Die3ToO1+u+MKtHs06qODB2zBnI/jBd4MPQm1VkY79Tb18gB+C62FdBFsZR6yeIo1YQiLJWMIiqVjQIu1YSCLNWFgijVjYIuhYYCKoWKAiiFgoopxYaKLUWOii2FgkophYp6F3r42W5A9s9OcgNvva8xQaysKXlFytoqdYmQH6tF3toSUo0INq9AAAAAElFTkSuQmCC")}.DayPicker-NavButton--next{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAwCAYAAAB5R9gVAAAABGdBTUEAALGPC/xhBQAAAXRJREFUWAnN119ugjAcwPHWzJ1gnmxzB/BBE0n24m4xfNkTaOL7wOtsl3AXMMb+Vjaa1BG00N8fSEibPpAP3xAKKs2yjzTPH9RAjhEo9WzPr/Vm8zgE0+gXATAxxuxtqeJ9t5tIwv5AtQAApsfT6TPdbp+kUBcgVwvO51KqVhMkXKsVJFXrOkigVhCIs1Y4iKlWZxB1rX4gwlpRIIpa8SDkWmggrFq4IIRaJKCYWnSgnrXIQV1r8YD+1Vrn+bReagysIFfLABRt31v8oBu1xEBttfRbltmfjgEcWh9snUS2kNdBK6WN1vrOWxObWsz+fjxevsxmB1GQDfINWiev83nhaoiB/CoOU438oPrhXS0WpQ9xc1ZQWxWHqUYe0I0qrKCQKjygDlXIQV2r0IF6ViEBxVTBBSFUQQNhVYkHIVeJAtkNsbQ7c1LtzP6FsObhb2rCKv7NBIGoq4SDmKoEgTirXAcJVGkFSVVpgoSrXICGUMUH/QBZNSUy5XWUhwAAAABJRU5ErkJggg==")}.DayPicker-NavButton--interactionDisabled{display:none}.DayPicker-Caption{display:table-caption;margin-bottom:.5em;padding:0 .5em;text-align:left}.DayPicker-Caption>div{font-weight:500;font-size:1.15em}.DayPicker-Weekdays{display:table-header-group;margin-top:1em}.DayPicker-WeekdaysRow{display:table-row}.DayPicker-Weekday{display:table-cell;padding:.5em;color:#8b9898;text-align:center;font-size:.875em}.DayPicker-Weekday abbr[title]{border-bottom:none;text-decoration:none}.DayPicker-Body{display:table-row-group}.DayPicker-Week{display:table-row}.DayPicker-Day{border-radius:50%;text-align:center}.DayPicker-Day,.DayPicker-WeekNumber{display:table-cell;padding:.5em;vertical-align:middle;cursor:pointer}.DayPicker-WeekNumber{min-width:1em;border-right:1px solid #eaecec;color:#8b9898;text-align:right;font-size:.75em}.DayPicker--interactionDisabled .DayPicker-Day{cursor:default}.DayPicker-Footer{padding-top:.5em}.DayPicker-TodayButton{border:none;background-color:transparent;background-image:none;box-shadow:none;color:#4a90e2;font-size:.875em;cursor:pointer}.DayPicker-Day--today{color:#d0021b;font-weight:700}.DayPicker-Day--outside{color:#8b9898;cursor:default}.DayPicker-Day--disabled{color:#dce0e0;cursor:default}.DayPicker-Day--sunday{background-color:#f7f8f8}.DayPicker-Day--sunday:not(.DayPicker-Day--today){color:#dce0e0}.DayPicker-Day--selected:not(.DayPicker-Day--disabled):not(.DayPicker-Day--outside){position:relative;background-color:#4a90e2;color:#f0f8ff}.DayPicker-Day--selected:not(.DayPicker-Day--disabled):not(.DayPicker-Day--outside):hover{background-color:#51a0fa}.DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--outside):hover{background-color:#f0f8ff}.DayPickerInput{display:inline-block}.DayPickerInput-OverlayWrapper{position:relative}.DayPickerInput-Overlay{position:absolute;left:0;z-index:1;background:#fff;box-shadow:0 2px 5px rgba(0,0,0,.15)}
13
  .tribe-editor__day-picker-input.DayPickerInput>input{border:1px solid #e1e3e6;color:#545d66;font-size:16px;line-height:24px;padding:7px 15px;width:100%;height:40px}.tribe-editor__day-picker-input.DayPickerInput>input:disabled{color:#aeb4bb}.tribe-editor__day-picker-input .DayPickerInput-Overlay{padding:20px;z-index:10}.tribe-editor__day-picker-input .DayPicker{width:100%}.tribe-editor__day-picker-input .DayPicker-Month{margin:0}.tribe-editor__day-picker-input .DayPicker-Caption>div,.tribe-editor__day-picker-input .DayPicker-Day,.tribe-editor__day-picker-input .DayPicker-Weekday{color:#545d66;font-family:Helvetica,"sans-serif";font-weight:400}.tribe-editor__day-picker-input .DayPicker-Caption>div{font-size:16px;margin-bottom:12px;text-align:center}.tribe-editor__day-picker-input .DayPicker-Weekday{font-size:12px}.tribe-editor__day-picker-input .DayPicker-Day{font-size:14px}.tribe-editor__day-picker-input .DayPicker-Day:hover{color:#007bb4;background-color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--today{color:#545d66}.tribe-editor__day-picker-input .DayPicker-Day--disabled{pointer-events:none;color:#ccc}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--outside){border-radius:0;background-color:#009fd4;color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--outside):hover{background-color:#007bb4;color:#fff}.tribe-editor__day-picker-input .DayPicker-NavButton--prev{left:0;top:0}.tribe-editor__day-picker-input .DayPicker-NavButton--next{right:0;top:0}.tribe-editor__day-picker-input .DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--outside):hover{background-color:#fff}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--start):not(.DayPicker-Day--end):not(.DayPicker-Day--outside){background-color:#e7f5fa;color:#545d66}.tribe-editor__day-picker-input .DayPicker-Day--selected:not(.DayPicker-Day--start):not(.DayPicker-Day--end):not(.DayPicker-Day--outside):hover{color:#007bb4}
14
  .tribe-editor__creatable-select .tribe-editor__creatable-select__control{height:40px;border:1px solid #e1e3e6;border-radius:3px;background-color:#fff}.tribe-editor__creatable-select .tribe-editor__creatable-select__control:hover{border:1px solid #e1e3e6}.tribe-editor__creatable-select .tribe-editor__creatable-select__control--is-focused{box-shadow:none}.tribe-editor__creatable-select .tribe-editor__creatable-select__value-container{padding:2px 5px 2px 15px}.tribe-editor__creatable-select .tribe-editor__creatable-select__single-value{margin:0;max-width:calc(100% - 15px);font-size:16px;line-height:1.5}.tribe-editor__creatable-select .tribe-editor__creatable-select__input{font-size:16px}.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input{margin:0;line-height:1.5}.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input,.tribe-editor__creatable-select .tribe-editor__creatable-select__input>input:focus{box-shadow:none}.tribe-editor__creatable-select svg.tribe-editor__creatable-select__dropdown-indicator{fill:#555d66}.tribe-editor__creatable-select .tribe-editor__creatable-select__menu{margin:0;border:1px solid #e1e3e6;border-top:none;border-radius:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px;box-shadow:none;-webkit-transform:translateY(-7px);transform:translateY(-7px)}.tribe-editor__creatable-select .tribe-editor__creatable-select__menu-list{padding:0}.tribe-editor__creatable-select .tribe-editor__creatable-select__option{font-size:16px;line-height:1.5;padding:3px 15px}.tribe-editor__creatable-select .tribe-editor__creatable-select__option--is-focused{background-color:#e7f5fa}.tribe-editor__creatable-select .tribe-editor__creatable-select__option--is-selected{background-color:#11a0d2}
common/src/resources/css/common-full.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-common figure{line-height:0}.tribe-common figcaption{line-height:normal}.tribe-common a{background-color:transparent;-webkit-text-decoration-skip:objects}.tribe-common abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.tribe-common code,.tribe-common kbd,.tribe-common pre,.tribe-common samp{font-family:monospace;font-size:1em}.tribe-common b,.tribe-common strong{font-weight:inherit;font-weight:bolder}.tribe-common dfn{font-style:italic}.tribe-common mark{background-color:#ff0;color:#000}.tribe-common small{font-size:80%}.tribe-common sub,.tribe-common sup{font-size:75%;line-height:0}.tribe-common hr{border:0;height:0}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=email],.tribe-common input[type=password],.tribe-common input[type=reset],.tribe-common input[type=search],.tribe-common input[type=submit],.tribe-common input[type=text],.tribe-common input[type=url],.tribe-common textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}.tribe-common button,.tribe-common input,.tribe-common optgroup,.tribe-common select,.tribe-common textarea{color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:antialiased}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{outline:0;border-radius:0}.tribe-common select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.tribe-common optgroup{font-weight:700}.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common p{font-weight:400;text-rendering:optimizeLegibility}#top .main_color .tribe-common button[disabled],#top.tribe-theme-enfold .tribe-common button[disabled]{opacity:1}.tribe-theme-twentynineteen .tribe-common h1:before,.tribe-theme-twentynineteen .tribe-common h2:before{content:none}.tribe-theme-twentynineteen .tribe-common button,.tribe-theme-twentynineteen .tribe-common input[type=button],.tribe-theme-twentynineteen .tribe-common input[type=reset],.tribe-theme-twentynineteen .tribe-common input[type=submit]{outline:none}.tribe-theme-twentynineteen .tribe-common td,.tribe-theme-twentynineteen .tribe-common th{word-break:normal}.tribe-theme-twentyseventeen .tribe-common h5{letter-spacing:normal;text-transform:none}.tribe-theme-twentyseventeen .tribe-common input[type=text]{border-radius:0}.tribe-theme-twentytwenty .tribe-common{background-color:#fff;letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common input,.tribe-theme-twentytwenty .tribe-common textarea{letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common *{word-break:normal}.tribe-theme-twentytwentyone.tribe-common .tribe-common .button:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common .wp-block-button .wp-block-button__link:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common .wp-block-file a.wp-block-file__button:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common .wp-block-search .wp-block-search__button:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common button:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common input[type=reset]:not(:hover):not(:active):not(.has-background),.tribe-theme-twentytwentyone.tribe-common .tribe-common input[type=submit]:not(:hover):not(:active):not(.has-background){background-color:transparent;background-color:initial}.tribe-common .tribe-common-form-control-checkbox,.tribe-common .tribe-common-form-control-radio{line-height:0}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400}.tribe-common .tribe-common-form-control-checkbox__label:hover,.tribe-common .tribe-common-form-control-radio__label:hover{opacity:.8}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border:1px solid #141827;height:20px;position:relative;width:20px}.tribe-common .tribe-common-form-control-checkbox__input:active,.tribe-common .tribe-common-form-control-checkbox__input:focus,.tribe-common .tribe-common-form-control-checkbox__input:hover,.tribe-common .tribe-common-form-control-radio__input:active,.tribe-common .tribe-common-form-control-radio__input:focus,.tribe-common .tribe-common-form-control-radio__input:hover{border-color:#141827;opacity:.8}.tribe-common .tribe-common-form-control-checkbox__input:checked,.tribe-common .tribe-common-form-control-radio__input:checked{background-color:#141827}.tribe-common .tribe-common-form-control-checkbox__input{border-radius:4px}.tribe-common .tribe-common-form-control-checkbox__input:checked:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='9' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.6.1L3.9 6.8 1.4 4.3c-.1-.1-.3-.1-.4 0l-.8.8c-.1.1-.1.3 0 .4l3.4 3.4c.2.1.4.1.5 0l7.7-7.7c.1-.1.1-.3 0-.4L11 .1c-.1-.1-.3-.1-.4 0z' fill='%23fff'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;height:9px;left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:12px}.tribe-common .tribe-common-form-control-checkbox__input:focus+.tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-checkbox__input:hover+.tribe-common-form-control-checkbox__label{opacity:.8}.tribe-common .tribe-common-form-control-radio__input{border-radius:50%}.tribe-common .tribe-common-form-control-radio__input:checked:before{background-color:#fff;border-radius:50%;content:"";display:block;height:8px;left:50%;margin:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:8px}.tribe-common .tribe-common-form-control-radio__input:focus+.tribe-common-form-control-radio__label,.tribe-common .tribe-common-form-control-radio__input:hover+.tribe-common-form-control-radio__label{opacity:.8}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-checkbox__input:checked:before{margin:0}#top .main_color .tribe-common .tribe-common-form-control-checkbox__label,#top .main_color .tribe-common .tribe-common-form-control-radio__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-radio__label{font-weight:400;font-size:14px}.tribe-common .tribe-common-form-control-slider{line-height:0}.tribe-common .tribe-common-form-control-slider__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-runnable-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-moz-range-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-ms-track{background-color:transparent;border-color:transparent;border-width:5px 0;color:transparent;height:10px}.tribe-common .tribe-common-form-control-slider__input::-ms-fill-lower,.tribe-common .tribe-common-form-control-slider__input::-ms-fill-upper{background-color:#334aff;border-radius:10px}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-thumb{background-color:#fff;border:1px solid #7d7d7d;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;-webkit-appearance:none;appearance:none}.tribe-common .tribe-common-form-control-slider__input::-moz-range-thumb{background-color:#fff;border:1px solid #7d7d7d;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px}.tribe-common .tribe-common-form-control-slider__input::-ms-thumb{background-color:#fff;border:1px solid #7d7d7d;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;box-shadow:none;margin-top:-1px}.tribe-common .tribe-common-form-control-slider__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#5d5d5d}#top .main_color .tribe-common .tribe-common-form-control-slider__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-slider__label{font-weight:400;font-size:12px}.tribe-common .tribe-common-form-control-text__input{font-size:16px;border:0;border-bottom:1px solid #d5d5d5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input,.tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;line-height:1.62;font-weight:400}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input{font-size:14px;border:0}.tribe-common .tribe-common-form-control-text__input::-webkit-input-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input::-moz-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input:-ms-input-placeholder,.tribe-common .tribe-common-form-control-text__input::-ms-input-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input::placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;outline:0}.tribe-theme-twentyseventeen .tribe-common .tribe-common-form-control-text__input{color:#141827}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-text__input{line-height:inherit}#top .main_color .tribe-common .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400;background:#fff;border:0;border-bottom:1px solid #d5d5d5}#top .main_color .tribe-common .tribe-common-form-control-text__input:focus,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;box-shadow:none}#top .main_color .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;border:0}.tribe-common .tribe-common-form-control-toggle{line-height:0;position:relative}.tribe-common .tribe-common-form-control-toggle__input{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#7d7d7d;width:40px}.tribe-common .tribe-common-form-control-toggle__input::-ms-check{display:none}.tribe-common .tribe-common-form-control-toggle__input+label:before{background-color:#fff;border:1px solid #7d7d7d;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;content:"";left:0;position:absolute;top:0;transition:transform .2s ease}.tribe-common .tribe-common-form-control-toggle__input:checked{background-color:#334aff}.tribe-common .tribe-common-form-control-toggle__input:checked+label:before{transform:translateX(20px)}.tribe-common .tribe-common-form-control-toggle__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#5d5d5d}#top .main_color .tribe-common .tribe-common-form-control-toggle__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__label{font-weight:400;font-size:12px}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-toggle__input{top:0}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-toggle__input:checked:before{content:none}.tribe-theme-twentytwentyone .tribe-common .tribe-common-form-control-toggle__input:after{display:none}.tribe-common a,.tribe-common a:active,.tribe-common a:focus,.tribe-common a:hover,.tribe-common a:visited{color:#141827;outline:0;text-decoration:none}.site-footer .widget-area .tribe-common a,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common a,.tribe-theme-twentyseventeen .tribe-common a{box-shadow:none}.site-footer .widget-area .tribe-common a:focus,.site-footer .widget-area .tribe-common a:hover,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common a:focus,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common a:hover,.tribe-theme-twentyseventeen .tribe-common a:focus,.tribe-theme-twentyseventeen .tribe-common a:hover{box-shadow:none;color:#141827}.tribe-theme-twentynineteen .entry .tribe-common a,.tribe-theme-twentynineteen .tribe-common a,.tribe-theme-twentytwentyone .entry .tribe-common a,.tribe-theme-twentytwentyone .tribe-common a{text-decoration:none}.main_color .sidebar .tribe-common a,.main_color .sidebar .tribe-common a:active,.main_color .sidebar .tribe-common a:focus,.main_color .sidebar .tribe-common a:hover,.main_color .sidebar .tribe-common a:visited,.tribe-theme-enfold .tribe-common a,.tribe-theme-enfold .tribe-common a:active,.tribe-theme-enfold .tribe-common a:focus,.tribe-theme-enfold .tribe-common a:hover,.tribe-theme-enfold .tribe-common a:visited{color:#141827}.tribe-common .tribe-common-anchor{border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor:active,.tribe-common .tribe-common-anchor:focus,.tribe-common .tribe-common-anchor:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-anchor-alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-alt:active,.tribe-common .tribe-common-anchor-alt:focus,.tribe-common .tribe-common-anchor-alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-anchor-thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor-thin:active,.tribe-common .tribe-common-anchor-thin:focus,.tribe-common .tribe-common-anchor-thin:hover{border-bottom:1px solid #141827}.tribe-common .tribe-common-anchor-thin-alt{border-bottom:1px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-thin-alt:active,.tribe-common .tribe-common-anchor-thin-alt:focus,.tribe-common .tribe-common-anchor-thin-alt:hover{border-bottom:1px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:hover,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-thin-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-thin-alt:hover{color:#334aff}.site-footer .widget-area .tribe-common .tribe-common-anchor,.site-footer .widget-area .tribe-common .tribe-common-anchor-thin,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common .tribe-common-anchor,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common .tribe-common-anchor-thin{transition:border-color .2s ease}.site-footer .widget-area .tribe-common .tribe-common-anchor-alt,.site-footer .widget-area .tribe-common .tribe-common-anchor-thin-alt,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common .tribe-common-anchor-alt,.tribe-theme-twentyseventeen .site-footer .widget-area .tribe-common .tribe-common-anchor-thin-alt{transition:color .2s ease}.tribe-common .tribe-common-b1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b1{font-size:16px;line-height:1.62}.tribe-common .tribe-common-b1--bold{font-weight:700}.tribe-common .tribe-common-b2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.38}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b2{font-size:14px;line-height:1.62}.tribe-common .tribe-common-b2--bold{font-weight:700}.tribe-common .tribe-common-b3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b3{font-size:12px;line-height:1.38}.tribe-common .tribe-common-b3--bold{font-weight:700}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b1--min-medium{font-size:16px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b2--min-medium{font-size:14px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b3--min-medium{font-size:12px;line-height:1.38}.tribe-common .tribe-common-cta{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;font-weight:700;border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta:active,.tribe-common .tribe-common-cta:focus,.tribe-common .tribe-common-cta:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-cta--alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--alt:active,.tribe-common .tribe-common-cta--alt:focus,.tribe-common .tribe-common-cta--alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-cta--thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta--thin:active,.tribe-common .tribe-common-cta--thin:focus,.tribe-common .tribe-common-cta--thin:hover{border-bottom:1px solid #141827}.tribe-common .tribe-common-cta--thin-alt{border-bottom:1px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--thin-alt:active,.tribe-common .tribe-common-cta--thin-alt:focus,.tribe-common .tribe-common-cta--thin-alt:hover{border-bottom:1px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:hover,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:hover{color:#334aff}.tribe-common .tribe-common-h1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:28px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:24px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-common .tribe-common-h3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:22px;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:20px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-common .tribe-common-h5{font-size:18px}.tribe-common .tribe-common-h5,.tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-common .tribe-common-h6{font-size:16px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h7,.tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h--alt{font-weight:400}.tribe-theme-avada #main .tribe-common .tribe-common-h1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:22px;line-height:1.5}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:20px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h5{font-size:18px}.tribe-theme-avada #main .tribe-common .tribe-common-h5,.tribe-theme-avada #main .tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h6{font-size:16px}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7,.tribe-theme-avada #main .tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-theme-avada #main .tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h--alt{font-weight:400}.tribe-common button{border:none}.tribe-common button,.tribe-common button:focus,.tribe-common button:hover,.tribe-theme-twentyseventeen .tribe-common button:focus,.tribe-theme-twentyseventeen .tribe-common button:hover{background-color:transparent}.tribe-theme-twentytwenty .tribe-common button{background-color:transparent;text-transform:inherit}.tribe-theme-twentytwenty .tribe-common button:focus,.tribe-theme-twentytwenty .tribe-common button:hover{text-decoration:none}.tribe-theme-twentytwentyone .tribe-common button:not(:hover):not(:active){background-color:inherit;color:inherit}.tribe-theme-enfold .tribe-common th{letter-spacing:0;text-transform:none}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;background-color:#fff;border:1px solid #334aff;border-radius:4px;text-align:center;transition:all .2s ease;color:#334aff;padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border{width:auto}.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{color:#fff;background-color:#334aff}.tribe-common .tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:active{opacity:.9}.tribe-common .tribe-common-c-btn-border--secondary,.tribe-common a.tribe-common-c-btn-border--secondary{border-color:#141827;color:#141827}.tribe-common .tribe-common-c-btn-border--secondary:focus,.tribe-common .tribe-common-c-btn-border--secondary:hover,.tribe-common a.tribe-common-c-btn-border--secondary:focus,.tribe-common a.tribe-common-c-btn-border--secondary:hover{background-color:#141827}.tribe-common .tribe-common-c-btn-border--secondary:active,.tribe-common a.tribe-common-c-btn-border--secondary:active{opacity:.9}.tribe-common .tribe-common-c-btn-border--alt,.tribe-common a.tribe-common-c-btn-border--alt{border-color:#e4e4e4;color:#141827;font-weight:400}.tribe-common .tribe-common-c-btn-border--alt:focus,.tribe-common .tribe-common-c-btn-border--alt:hover,.tribe-common a.tribe-common-c-btn-border--alt:focus,.tribe-common a.tribe-common-c-btn-border--alt:hover{border-color:#141827;background-color:#fff;color:#141827}.tribe-common .tribe-common-c-btn-border--alt:active,.tribe-common a.tribe-common-c-btn-border--alt:active{opacity:.9}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border:hover{background-color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border--secondary:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border--secondary:hover{background-color:#141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border--alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border--alt:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-border-small,.tribe-common a.tribe-common-c-btn-border-small{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;text-align:center;transition:color .2s ease,border-color .2s ease}.tribe-common .tribe-common-c-btn-border-small:focus,.tribe-common .tribe-common-c-btn-border-small:hover,.tribe-common a.tribe-common-c-btn-border-small:focus,.tribe-common a.tribe-common-c-btn-border-small:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-border-small:active,.tribe-common a.tribe-common-c-btn-border-small:active{border-color:#141827}.tribe-common .tribe-common-c-btn-border-small,.tribe-common a.tribe-common-c-btn-border-small{color:#5d5d5d;padding:14px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border-small,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border-small{padding:6px 15px;width:auto}.tribe-common .tribe-common-c-btn-border-small:active,.tribe-common .tribe-common-c-btn-border-small:focus,.tribe-common .tribe-common-c-btn-border-small:hover,.tribe-common a.tribe-common-c-btn-border-small:active,.tribe-common a.tribe-common-c-btn-border-small:focus,.tribe-common a.tribe-common-c-btn-border-small:hover{color:#141827}.tribe-common .tribe-common-c-btn-border-small:disabled,.tribe-common a.tribe-common-c-btn-border-small:disabled{color:#d5d5d5}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border-small:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon{border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto}.tribe-common .tribe-common-c-btn-icon--caret-left:active .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-left:focus .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-left:hover .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right:active .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right:focus .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right:hover .tribe-common-c-btn-icon__icon-svg path{fill:#5d5d5d}.tribe-common .tribe-common-c-btn-icon--caret-left:disabled .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right:disabled .tribe-common-c-btn-icon__icon-svg path{fill:#d5d5d5}.tribe-common .tribe-common-c-btn-icon--caret-left .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right .tribe-common-c-btn-icon__icon-svg path{fill:#bababa}.tribe-common .tribe-common-c-btn-icon--border{align-items:center;background-color:#fff;border:1px solid #d5d5d5;display:inline-flex;height:56px;justify-content:center;transition:none;width:56px}.tribe-common .tribe-common-c-btn-icon--border:focus,.tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon--border:active{border-color:#141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;border-radius:4px;color:#fff;text-align:center;transition:background-color .2s ease;background-color:#334aff;padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn{width:auto}.tribe-common .tribe-common-c-btn:focus,.tribe-common .tribe-common-c-btn:hover,.tribe-common a.tribe-common-c-btn:focus,.tribe-common a.tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8)}.tribe-common .tribe-common-c-btn:active,.tribe-common a.tribe-common-c-btn:active{background-color:rgba(51,74,255,.9)}.tribe-common .tribe-common-c-btn:disabled,.tribe-common a.tribe-common-c-btn:disabled{background-color:rgba(51,74,255,.07)}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn{background-color:#334aff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-theme-twentytwentyone .tribe-common .tribe-common-c-btn:not(:hover):not(:active){background-color:#334aff;color:#fff}.tribe-common .tribe-common-c-loader__dot circle{animation-name:a;animation-duration:2.24s;animation-iteration-count:infinite;animation-direction:normal;fill:currentColor;opacity:.07}.tribe-common .tribe-common-c-loader__dot--first circle{animation-delay:.45s}.tribe-common .tribe-common-c-loader__dot--second circle{animation-delay:1.05s}.tribe-common .tribe-common-c-loader__dot--third circle{animation-delay:1.35s}@keyframes a{50%{opacity:1}}.tribe-common .tribe-common-c-svgicon{color:#334aff}.tribe-common .tribe-common-c-svgicon--featured path{fill:currentColor}.tribe-common .tribe-common-c-svgicon--recurring path{fill:#141827;stroke:#141827}.tribe-common .tribe-common-c-svgicon--close-alt path,.tribe-common .tribe-common-c-svgicon--close path{stroke:#bababa}.tribe-common .tribe-common-c-svgicon--messages-not-found path{stroke:#141827}.tribe-common .tribe-common-c-svgicon--messages-not-found .tribe-common-c-svgicon__svg-stroke{stroke:currentColor}.tribe-common .tribe-common-c-svgicon__svg-fill{fill:#141827}.tribe-common .tribe-common-c-svgicon__svg-stroke{stroke:#141827}
1
+ .tribe-common figure{line-height:0}.tribe-common figcaption{line-height:normal}.tribe-common a{background-color:transparent;-webkit-text-decoration-skip:objects}.tribe-common abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.tribe-common code,.tribe-common kbd,.tribe-common pre,.tribe-common samp{font-family:monospace;font-size:1em}.tribe-common b,.tribe-common strong{font-weight:inherit;font-weight:bolder}.tribe-common dfn{font-style:italic}.tribe-common mark{background-color:#ff0;color:#000}.tribe-common small{font-size:80%}.tribe-common sub,.tribe-common sup{font-size:75%;line-height:0}.tribe-common hr{border:0;height:0}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=email],.tribe-common input[type=password],.tribe-common input[type=reset],.tribe-common input[type=search],.tribe-common input[type=submit],.tribe-common input[type=text],.tribe-common input[type=url],.tribe-common textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}.tribe-common button,.tribe-common input,.tribe-common optgroup,.tribe-common select,.tribe-common textarea{color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:antialiased}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{outline:0;border-radius:0}.tribe-common select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.tribe-common optgroup{font-weight:700}.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common p{font-weight:400;text-rendering:optimizeLegibility}#top .main_color .tribe-common button[disabled],#top.tribe-theme-enfold .tribe-common button[disabled]{opacity:1}.tribe-theme-twentynineteen .tribe-common h1:before,.tribe-theme-twentynineteen .tribe-common h2:before{content:none}.tribe-theme-twentynineteen .tribe-common button,.tribe-theme-twentynineteen .tribe-common input[type=button],.tribe-theme-twentynineteen .tribe-common input[type=reset],.tribe-theme-twentynineteen .tribe-common input[type=submit]{outline:none}.tribe-theme-twentynineteen .tribe-common td,.tribe-theme-twentynineteen .tribe-common th{word-break:normal}.tribe-theme-twentyseventeen .tribe-common h5{letter-spacing:normal;text-transform:none}.tribe-theme-twentyseventeen .tribe-common input[type=text]{border-radius:0}.tribe-theme-twentytwenty .tribe-common{background-color:#fff;letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common input,.tribe-theme-twentytwenty .tribe-common textarea{letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common *{word-break:normal}.tribe-common .tribe-common-form-control-checkbox,.tribe-common .tribe-common-form-control-radio{line-height:0}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;color:#5d5d5d}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border:1px solid #141827;height:20px;position:relative;width:20px}.tribe-common .tribe-common-form-control-checkbox__input:active,.tribe-common .tribe-common-form-control-checkbox__input:focus,.tribe-common .tribe-common-form-control-checkbox__input:hover,.tribe-common .tribe-common-form-control-radio__input:active,.tribe-common .tribe-common-form-control-radio__input:focus,.tribe-common .tribe-common-form-control-radio__input:hover{border:1px solid #141827}.tribe-common .tribe-common-form-control-checkbox__input:checked,.tribe-common .tribe-common-form-control-radio__input:checked{background-color:#141827}.tribe-common .tribe-common-form-control-checkbox__input:checked:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='9' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.6.1L3.9 6.8 1.4 4.3c-.1-.1-.3-.1-.4 0l-.8.8c-.1.1-.1.3 0 .4l3.4 3.4c.2.1.4.1.5 0l7.7-7.7c.1-.1.1-.3 0-.4L11 .1c-.1-.1-.3-.1-.4 0z' fill='%23FFF'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;height:9px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:12px}.tribe-common .tribe-common-form-control-radio__input{border-radius:50%}.tribe-common .tribe-common-form-control-radio__input:checked:before{background-color:#fff;border-radius:50%;content:"";display:block;height:8px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:8px}#top .main_color .tribe-common .tribe-common-form-control-checkbox__label,#top .main_color .tribe-common .tribe-common-form-control-radio__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-radio__label{font-weight:400;font-size:14px}.tribe-common .tribe-common-form-control-slider{line-height:0}.tribe-common .tribe-common-form-control-slider__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-runnable-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-moz-range-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-ms-track{background-color:transparent;border-color:transparent;border-width:5px 0;color:transparent;height:10px}.tribe-common .tribe-common-form-control-slider__input::-ms-fill-lower,.tribe-common .tribe-common-form-control-slider__input::-ms-fill-upper{background-color:#334aff;border-radius:10px}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;-webkit-appearance:none;appearance:none}.tribe-common .tribe-common-form-control-slider__input::-moz-range-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px}.tribe-common .tribe-common-form-control-slider__input::-ms-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;box-shadow:none;margin-top:-1px}.tribe-common .tribe-common-form-control-slider__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#5d5d5d}#top .main_color .tribe-common .tribe-common-form-control-slider__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-slider__label{font-weight:400;font-size:12px}.tribe-common .tribe-common-form-control-text__input{font-size:16px;border:0;border-bottom:1px solid #d5d5d5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input,.tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;line-height:1.62;font-weight:400}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input{font-size:14px;border:0}.tribe-common .tribe-common-form-control-text__input::-webkit-input-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input::-moz-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input:-ms-input-placeholder,.tribe-common .tribe-common-form-control-text__input::-ms-input-placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input::placeholder{color:#5d5d5d;font-style:normal;opacity:1}.tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;outline:0}.tribe-theme-twentyseventeen .tribe-common .tribe-common-form-control-text__input{color:#141827}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-text__input{line-height:inherit}#top .main_color .tribe-common .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400;background:#fff;border:0;border-bottom:1px solid #d5d5d5}#top .main_color .tribe-common .tribe-common-form-control-text__input:focus,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;box-shadow:none}#top .main_color .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;border:0}.tribe-common .tribe-common-form-control-toggle{line-height:0}.tribe-common .tribe-common-form-control-toggle__input{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#d5d5d5;width:40px}.tribe-common .tribe-common-form-control-toggle__input:after{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;content:"";left:0;position:absolute;top:-5px;transition:transform .2s ease}.tribe-common .tribe-common-form-control-toggle__input:checked{background-color:#334aff}.tribe-common .tribe-common-form-control-toggle__input:checked:after{transform:translateX(20px)}.tribe-common .tribe-common-form-control-toggle__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#5d5d5d}#top .main_color .tribe-common .tribe-common-form-control-toggle__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__label{font-weight:400;font-size:12px}.tribe-common a,.tribe-common a:active,.tribe-common a:focus,.tribe-common a:hover,.tribe-common a:visited{color:#141827;outline:0;text-decoration:none}.tribe-theme-twentyseventeen .tribe-common a{box-shadow:none}.tribe-theme-twentyseventeen .tribe-common a:focus,.tribe-theme-twentyseventeen .tribe-common a:hover{box-shadow:none;color:#141827}.tribe-theme-twentynineteen .entry .tribe-common a,.tribe-theme-twentynineteen .tribe-common a{text-decoration:none}.tribe-common .tribe-common-anchor{border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor:active,.tribe-common .tribe-common-anchor:focus,.tribe-common .tribe-common-anchor:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-anchor-alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-alt:active,.tribe-common .tribe-common-anchor-alt:focus,.tribe-common .tribe-common-anchor-alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-anchor-thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor-thin:active,.tribe-common .tribe-common-anchor-thin:focus,.tribe-common .tribe-common-anchor-thin:hover{border-bottom:1px solid #141827}.tribe-common .tribe-common-anchor-thin-alt{border-bottom:1px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-thin-alt:active,.tribe-common .tribe-common-anchor-thin-alt:focus,.tribe-common .tribe-common-anchor-thin-alt:hover{border-bottom:1px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:hover,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-thin-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-thin-alt:hover{color:#334aff}.tribe-common .tribe-common-b1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b1{font-size:16px;line-height:1.62}.tribe-common .tribe-common-b1--bold{font-weight:700}.tribe-common .tribe-common-b2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.38}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b2{font-size:14px;line-height:1.62}.tribe-common .tribe-common-b2--bold{font-weight:700}.tribe-common .tribe-common-b3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b3{font-size:12px;line-height:1.38}.tribe-common .tribe-common-b3--bold{font-weight:700}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b1--min-medium{font-size:16px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b2--min-medium{font-size:14px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b3--min-medium{font-size:12px;line-height:1.38}.tribe-common .tribe-common-cta{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;font-weight:700;border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta:active,.tribe-common .tribe-common-cta:focus,.tribe-common .tribe-common-cta:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-cta--alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--alt:active,.tribe-common .tribe-common-cta--alt:focus,.tribe-common .tribe-common-cta--alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-cta--thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta--thin:active,.tribe-common .tribe-common-cta--thin:focus,.tribe-common .tribe-common-cta--thin:hover{border-bottom:1px solid #141827}.tribe-common .tribe-common-cta--thin-alt{border-bottom:1px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--thin-alt:active,.tribe-common .tribe-common-cta--thin-alt:focus,.tribe-common .tribe-common-cta--thin-alt:hover{border-bottom:1px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:hover,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:hover{color:#334aff}.tribe-common .tribe-common-h1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:28px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:24px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-common .tribe-common-h3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:22px;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:20px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-common .tribe-common-h5{font-size:18px}.tribe-common .tribe-common-h5,.tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-common .tribe-common-h6{font-size:16px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h7,.tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h--alt{font-weight:400}.tribe-theme-avada #main .tribe-common .tribe-common-h1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:22px;line-height:1.5}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:20px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h5{font-size:18px}.tribe-theme-avada #main .tribe-common .tribe-common-h5,.tribe-theme-avada #main .tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h6{font-size:16px}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7,.tribe-theme-avada #main .tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-theme-avada #main .tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h--alt{font-weight:400}.tribe-common button{border:none}.tribe-common button,.tribe-common button:focus,.tribe-common button:hover,.tribe-theme-twentyseventeen .tribe-common button:focus,.tribe-theme-twentyseventeen .tribe-common button:hover{background-color:transparent}.tribe-theme-twentytwenty .tribe-common button{background-color:transparent;text-transform:inherit}.tribe-theme-twentytwenty .tribe-common button:focus,.tribe-theme-twentytwenty .tribe-common button:hover{text-decoration:none}.tribe-common .tribe-common-svgicon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-theme-enfold .tribe-common th{letter-spacing:0;text-transform:none}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;text-align:center;transition:color .2s ease,border-color .2s ease;color:#5d5d5d;padding:14px 20px}.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:active{border-color:#141827}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border{padding:6px 15px}.tribe-common .tribe-common-c-btn-border:active,.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{color:#141827}.tribe-common .tribe-common-c-btn-border:disabled,.tribe-common a.tribe-common-c-btn-border:disabled{color:#d5d5d5}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon{border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto}.tribe-common .tribe-common-c-btn-icon--border{background-color:#fff;border:1px solid #d5d5d5;align-items:center;display:inline-flex;height:56px;justify-content:center;transition:none;width:56px}.tribe-common .tribe-common-c-btn-icon--border:focus,.tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon--border:active{border-color:#141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;border-radius:4px;color:#fff;text-align:center;transition:background-color .2s ease;background-color:#334aff;padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn{width:auto}.tribe-common .tribe-common-c-btn:focus,.tribe-common .tribe-common-c-btn:hover,.tribe-common a.tribe-common-c-btn:focus,.tribe-common a.tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8)}.tribe-common .tribe-common-c-btn:active,.tribe-common a.tribe-common-c-btn:active{background-color:rgba(51,74,255,.9)}.tribe-common .tribe-common-c-btn:disabled,.tribe-common a.tribe-common-c-btn:disabled{background-color:rgba(51,74,255,.07)}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn{background-color:#334aff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-common .tribe-common-c-loader__dot{animation-name:a;animation-duration:2.24s;animation-iteration-count:infinite;animation-direction:normal}.tribe-common .tribe-common-c-loader__dot--first{animation-delay:.45s}.tribe-common .tribe-common-c-loader__dot--second{animation-delay:1.05s}.tribe-common .tribe-common-c-loader__dot--third{animation-delay:1.35s}@keyframes a{50%{background-color:#334aff}}
common/src/resources/css/common-skeleton.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-common{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased}.tribe-common *{box-sizing:border-box}.tribe-common article,.tribe-common aside,.tribe-common details,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common header,.tribe-common main,.tribe-common menu,.tribe-common nav,.tribe-common section,.tribe-common summary{display:block}.tribe-common svg:not(:root){overflow:hidden}.tribe-common audio,.tribe-common canvas,.tribe-common progress,.tribe-common video{display:inline-block}.tribe-common audio:not([controls]){display:none;height:0}.tribe-common progress{vertical-align:baseline}.tribe-common [hidden],.tribe-common template{display:none}.tribe-common pre{overflow:auto}.tribe-common sub,.tribe-common sup{position:relative;vertical-align:baseline}.tribe-common sup{top:-.5em}.tribe-common sub{bottom:-.25em}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{box-sizing:border-box;margin:0}.tribe-common input[type=number]::-webkit-inner-spin-button,.tribe-common input[type=number]::-webkit-outer-spin-button{height:auto}.tribe-common legend{color:inherit;display:table;max-width:100%;white-space:normal}.tribe-common textarea{resize:none;overflow:auto}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=reset],.tribe-common input[type=submit]{cursor:pointer;overflow:visible}.tribe-common button[disabled],.tribe-common input[disabled]{cursor:default}.tribe-common button::-moz-focus-inner,.tribe-common input::-moz-focus-inner{border:0;padding:0}.tribe-common a,.tribe-common abbr,.tribe-common acronym,.tribe-common address,.tribe-common applet,.tribe-common article,.tribe-common aside,.tribe-common audio,.tribe-common b,.tribe-common big,.tribe-common blockquote,.tribe-common canvas,.tribe-common caption,.tribe-common center,.tribe-common cite,.tribe-common code,.tribe-common dd,.tribe-common del,.tribe-common details,.tribe-common dfn,.tribe-common div,.tribe-common dl,.tribe-common dt,.tribe-common em,.tribe-common embed,.tribe-common fieldset,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common form,.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common header,.tribe-common i,.tribe-common iframe,.tribe-common img,.tribe-common ins,.tribe-common kbd,.tribe-common label,.tribe-common legend,.tribe-common li,.tribe-common main,.tribe-common mark,.tribe-common menu,.tribe-common nav,.tribe-common object,.tribe-common ol,.tribe-common output,.tribe-common p,.tribe-common pre,.tribe-common q,.tribe-common ruby,.tribe-common s,.tribe-common samp,.tribe-common section,.tribe-common small,.tribe-common span,.tribe-common strike,.tribe-common strong,.tribe-common sub,.tribe-common summary,.tribe-common sup,.tribe-common table,.tribe-common tbody,.tribe-common td,.tribe-common tfoot,.tribe-common th,.tribe-common thead,.tribe-common time,.tribe-common tr,.tribe-common tt,.tribe-common u,.tribe-common ul,.tribe-common var,.tribe-common video{margin:0;padding:0;border:0}.tribe-common ol,.tribe-common ul{list-style:none}.tribe-common img{-ms-interpolation-mode:bicubic;height:auto;max-width:100%;border-style:none}.tribe-common embed,.tribe-common iframe,.tribe-common video{max-width:100%;max-height:100%}.tribe-theme-avada input[type=text]{margin:0}.tribe-theme-divi .entry-content .tribe-common table,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common table{border:0;margin:0}.tribe-theme-divi .entry-content .tribe-common td,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common td{border:0}.tribe-theme-divi #content-area .tribe-common td,.tribe-theme-divi #content-area .tribe-common th,.tribe-theme-divi #content-area .tribe-common tr,.tribe-theme-divi #left-area .tribe-common ul{padding:0}#top .main_color .tribe-common button[disabled],#top.tribe-theme-enfold .tribe-common button[disabled]{cursor:default}#top .main_color .tribe-common form,#top .main_color .tribe-common input,#top.tribe-theme-enfold .tribe-common form,#top.tribe-theme-enfold .tribe-common input{margin:0}.entry-content-wrapper .tribe-common li,.entry-content .tribe-common ol,.entry-content .tribe-common ul,.tribe-theme-genesis .tribe-common ol,.tribe-theme-genesis .tribe-common ul{margin:0;padding:0}.tribe-theme-twentynineteen .tribe-common svg{fill:none}.tribe-theme-twentyseventeen .tribe-common div.tribe-dialog{z-index:5!important}.tribe-common .tribe-common-form-control-checkbox,.tribe-common .tribe-common-form-control-radio{display:flex;align-items:flex-start}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{cursor:pointer;margin-left:15px}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{cursor:pointer;flex:none;margin:1px 0 0}#top .main_color .tribe-common .tribe-common-form-control-checkbox__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__input{margin:1px 0 0}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-checkbox__input{top:0}.tribe-theme-twentytwentyone .tribe-common .tribe-common-form-control-checkbox__input:checked:after{border:none}.tribe-theme-twentytwentyone .tribe-common .tribe-common-form-control-radio__input:checked:after{background-color:transparent}.tribe-common .tribe-common-form-control-checkbox-radio-group>*{margin-bottom:15px}.tribe-common .tribe-common-form-control-checkbox-radio-group>:last-child{margin-bottom:0}.tribe-common .tribe-common-form-control-slider__input{cursor:pointer;display:inline-block;margin:0;padding:0;width:120px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider__label{cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider--vertical .tribe-common-form-control-slider__label{display:block;margin:0 0 6px}.tribe-common .tribe-common-form-control-text__label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-form-control-text__input{height:auto;padding:12px 28px 12px 0;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input{padding:20px 20px 20px 40px}#top .main_color .tribe-common .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{padding:12px 28px 12px 0;width:100%}#top .main_color .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input{padding:20px 20px 20px 40px}.tribe-common .tribe-common-form-control-toggle__input,.tribe-common .tribe-common-form-control-toggle__label{cursor:pointer;display:inline-block;vertical-align:middle}.tribe-common .tribe-common-form-control-toggle__label{margin-left:11px}.tribe-common .tribe-common-form-control-toggle--vertical .tribe-common-form-control-toggle__label{display:block;margin:0 0 6px}#top .main_color .tribe-common .tribe-common-form-control-toggle__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__input{display:inline-block;margin:5px 0}.tribe-common .tribe-common-g-col{min-width:0;width:100%}.tribe-common .tribe-common-g-row{display:flex;flex-wrap:wrap}.tribe-common .tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:21px;padding-right:21px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-theme-twentynineteen .tribe-common .entry.tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px;padding:0}.tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .entry.tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-theme-twentynineteen .tribe-common .tribe-common-g-row--gutters>.entry.tribe-common-g-col{margin:0;padding-left:21px;padding-right:21px}.tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .tribe-common-g-row--gutters>.entry.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-common a{cursor:pointer}.tribe-theme-divi #left-area .tribe-common ul,.tribe-theme-divi .entry-content .tribe-common ul,body.et-pb-preview.tribe-theme-divi #main-content .container .tribe-common ul{list-style-type:none;padding:0}.entry-content .tribe-common ol>li,.entry-content .tribe-common ul>li{list-style-type:none}.tribe-common button{padding:0}.tribe-common .tribe-common-l-container{max-width:1260px;margin-left:auto;margin-right:auto;padding-left:19.5px;padding-right:19.5px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-l-container{padding-left:42px;padding-right:42px}.tribe-common .tribe-common-a11y-hidden{display:none!important;visibility:hidden}.tribe-common .tribe-common-a11y-visual-hide{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-a11y-visual-show{clip:auto;height:auto;margin:0;position:static;width:auto}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border{width:auto}.tribe-common .tribe-common-c-btn-border-small,.tribe-common a.tribe-common-c-btn-border-small{padding:14px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border-small,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border-small{padding:6px 15px;width:auto}.tribe-common .tribe-common-c-btn-icon:before{background-repeat:no-repeat;background-size:contain;content:"";display:block}.tribe-common .tribe-common-c-btn-icon--caret-left .tribe-common-c-btn-icon__icon-svg,.tribe-common .tribe-common-c-btn-icon--caret-right .tribe-common-c-btn-icon__icon-svg{width:11px}.tribe-common .tribe-common-c-btn-icon--caret-left .tribe-common-c-btn-icon__icon-svg path,.tribe-common .tribe-common-c-btn-icon--caret-right .tribe-common-c-btn-icon__icon-svg path{fill:currentColor}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn{width:auto}.tribe-common .tribe-common-c-image{display:block;height:auto;margin-left:auto;margin-right:auto;width:100%}.tribe-common .tribe-common-c-image--bg{position:relative}.tribe-common .tribe-common-c-image__bg{background:50% no-repeat;background-size:cover;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.tribe-common .tribe-common-c-loader{display:flex;padding-top:192px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-loader{padding-top:288px}.tribe-common .tribe-common-c-loader__dot{width:15px}.tribe-common .tribe-common-c-loader__dot:not(:first-of-type){margin-left:8px}.tribe-common .tribe-common-c-loader__dot circle{fill:currentColor}.tribe-common .tribe-common-c-svgicon--featured{width:8px}.tribe-common .tribe-common-c-svgicon--recurring{width:12px}.tribe-common .tribe-common-c-svgicon--search{width:16px}.tribe-common .tribe-common-c-svgicon--location{width:10px}.tribe-common .tribe-common-c-svgicon--day,.tribe-common .tribe-common-c-svgicon--map,.tribe-common .tribe-common-c-svgicon--month,.tribe-common .tribe-common-c-svgicon--photo,.tribe-common .tribe-common-c-svgicon--week{height:100%;width:100%}.tribe-common .tribe-common-c-svgicon--close-alt path,.tribe-common .tribe-common-c-svgicon--close path{stroke:currentColor}.tribe-common .tribe-common-c-svgicon--hybrid circle,.tribe-common .tribe-common-c-svgicon--mail,.tribe-common .tribe-common-c-svgicon--map-pin,.tribe-common .tribe-common-c-svgicon--messages-not-found g,.tribe-common .tribe-common-c-svgicon--no-map,.tribe-common .tribe-common-c-svgicon--phone,.tribe-common .tribe-common-c-svgicon--virtual g,.tribe-common .tribe-common-c-svgicon--website{fill:none}.tribe-common .tribe-common-c-svgicon--messages-not-found{width:22px}.tribe-common .tribe-common-c-svgicon--messages-not-found path{stroke:currentColor}.tribe-common .tribe-common-c-svgicon--error{width:18px}.tribe-common .tribe-common-c-svgicon--error g,.tribe-common .tribe-common-c-svgicon--reset path{fill:none}.tribe-common .tribe-common-c-svgicon__svg-fill{fill:currentColor}.tribe-common .tribe-common-c-svgicon__svg-stroke{stroke:currentColor}
1
+ .tribe-common{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased}.tribe-common *{box-sizing:border-box}.tribe-common article,.tribe-common aside,.tribe-common details,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common header,.tribe-common main,.tribe-common menu,.tribe-common nav,.tribe-common section,.tribe-common summary{display:block}.tribe-common svg:not(:root){overflow:hidden}.tribe-common audio,.tribe-common canvas,.tribe-common progress,.tribe-common video{display:inline-block}.tribe-common audio:not([controls]){display:none;height:0}.tribe-common progress{vertical-align:baseline}.tribe-common [hidden],.tribe-common template{display:none}.tribe-common pre{overflow:auto}.tribe-common sub,.tribe-common sup{position:relative;vertical-align:baseline}.tribe-common sup{top:-.5em}.tribe-common sub{bottom:-.25em}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{box-sizing:border-box;margin:0}.tribe-common input[type=number]::-webkit-inner-spin-button,.tribe-common input[type=number]::-webkit-outer-spin-button{height:auto}.tribe-common legend{color:inherit;display:table;max-width:100%;white-space:normal}.tribe-common textarea{resize:none;overflow:auto}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=reset],.tribe-common input[type=submit]{cursor:pointer;overflow:visible}.tribe-common button[disabled],.tribe-common input[disabled]{cursor:default}.tribe-common button::-moz-focus-inner,.tribe-common input::-moz-focus-inner{border:0;padding:0}.tribe-common a,.tribe-common abbr,.tribe-common acronym,.tribe-common address,.tribe-common applet,.tribe-common article,.tribe-common aside,.tribe-common audio,.tribe-common b,.tribe-common big,.tribe-common blockquote,.tribe-common canvas,.tribe-common caption,.tribe-common center,.tribe-common cite,.tribe-common code,.tribe-common dd,.tribe-common del,.tribe-common details,.tribe-common dfn,.tribe-common div,.tribe-common dl,.tribe-common dt,.tribe-common em,.tribe-common embed,.tribe-common fieldset,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common form,.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common header,.tribe-common i,.tribe-common iframe,.tribe-common img,.tribe-common ins,.tribe-common kbd,.tribe-common label,.tribe-common legend,.tribe-common li,.tribe-common main,.tribe-common mark,.tribe-common menu,.tribe-common nav,.tribe-common object,.tribe-common ol,.tribe-common output,.tribe-common p,.tribe-common pre,.tribe-common q,.tribe-common ruby,.tribe-common s,.tribe-common samp,.tribe-common section,.tribe-common small,.tribe-common span,.tribe-common strike,.tribe-common strong,.tribe-common sub,.tribe-common summary,.tribe-common sup,.tribe-common table,.tribe-common tbody,.tribe-common td,.tribe-common tfoot,.tribe-common th,.tribe-common thead,.tribe-common time,.tribe-common tr,.tribe-common tt,.tribe-common u,.tribe-common ul,.tribe-common var,.tribe-common video{margin:0;padding:0;border:0}.tribe-common ol,.tribe-common ul{list-style:none}.tribe-common img{-ms-interpolation-mode:bicubic;height:auto;max-width:100%;border-style:none}.tribe-common embed,.tribe-common iframe,.tribe-common video{max-width:100%;max-height:100%}.tribe-theme-avada input[type=text]{margin:0}.tribe-theme-divi .entry-content .tribe-common table,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common table{border:0;margin:0}.tribe-theme-divi .entry-content .tribe-common td,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common td{border:0}.tribe-theme-divi #content-area .tribe-common td,.tribe-theme-divi #content-area .tribe-common th,.tribe-theme-divi #content-area .tribe-common tr,.tribe-theme-divi #left-area .tribe-common ul{padding:0}#top .main_color .tribe-common button[disabled],#top.tribe-theme-enfold .tribe-common button[disabled]{cursor:default}#top .main_color .tribe-common form,#top .main_color .tribe-common input,#top.tribe-theme-enfold .tribe-common form,#top.tribe-theme-enfold .tribe-common input{margin:0}.entry-content-wrapper .tribe-common li,.entry-content .tribe-common ol,.entry-content .tribe-common ul,.tribe-theme-genesis .tribe-common ol,.tribe-theme-genesis .tribe-common ul{margin:0;padding:0}.tribe-theme-twentyseventeen .tribe-common div.tribe-dialog{z-index:5!important}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{cursor:pointer;display:inline-block;margin:0;vertical-align:middle}#top .main_color .tribe-common .tribe-common-form-control-checkbox__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__input{display:inline-block}.tribe-common .tribe-common-form-control-checkbox-radio-group>*{margin-bottom:15px}.tribe-common .tribe-common-form-control-checkbox-radio-group>:last-child{margin-bottom:0}.tribe-common .tribe-common-form-control-slider__input{cursor:pointer;display:inline-block;margin:0;padding:0;width:120px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider__label{cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider--vertical .tribe-common-form-control-slider__label{display:block;margin:0 0 6px}.tribe-common .tribe-common-form-control-text__label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-form-control-text__input{height:auto;padding:12px 28px 12px 0;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input{padding:20px 20px 20px 40px}#top .main_color .tribe-common .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{padding:12px 28px 12px 0;width:100%}#top .main_color .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input,#top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input{padding:20px 20px 20px 40px}.tribe-common .tribe-common-form-control-toggle__input,.tribe-common .tribe-common-form-control-toggle__label{cursor:pointer;display:inline-block;vertical-align:middle}.tribe-common .tribe-common-form-control-toggle__label{margin-left:11px}.tribe-common .tribe-common-form-control-toggle--vertical .tribe-common-form-control-toggle__label{display:block;margin:0 0 6px}#top .main_color .tribe-common .tribe-common-form-control-toggle__input,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__input{display:inline-block;margin:5px 0}.tribe-common .tribe-common-g-col{min-width:0;width:100%}.tribe-common .tribe-common-g-row{display:flex;flex-wrap:wrap}.tribe-common .tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:21px;padding-right:21px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-theme-twentynineteen .tribe-common .entry.tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px;padding:0}.tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .entry.tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-theme-twentynineteen .tribe-common .tribe-common-g-row--gutters>.entry.tribe-common-g-col{margin:0;padding-left:21px;padding-right:21px}.tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .tribe-common-g-row--gutters>.entry.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-common a{cursor:pointer}.tribe-theme-divi #left-area .tribe-common ul,.tribe-theme-divi .entry-content .tribe-common ul,body.et-pb-preview.tribe-theme-divi #main-content .container .tribe-common ul{list-style-type:none;padding:0}.entry-content .tribe-common ol>li,.entry-content .tribe-common ul>li{list-style-type:none}.tribe-common button{padding:0}.tribe-common .tribe-common-l-container{max-width:1260px;margin-left:auto;margin-right:auto;padding-left:19.5px;padding-right:19.5px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-l-container{padding-left:42px;padding-right:42px}.tribe-common .tribe-common-svgicon{background-repeat:no-repeat;background-size:contain}.tribe-common .tribe-common-svgicon--close-secondary{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%23BABABA' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--day{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zM14.18 14.53v1.747c0 .482.39.874.873.874H16.8a.873.873 0 0 0 .873-.874V14.53a.873.873 0 0 0-.873-.873h-1.747a.873.873 0 0 0-.873.873z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--list{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 22'%3E%3Cg fill='%23141827' fill-rule='evenodd'%3E%3Cpath fill-rule='nonzero' d='M0 .504v20.03c0 .278.19.503.425.503h20.188c.235 0 .425-.225.425-.504V.503c0-.277-.19-.503-.425-.503H.425C.19 0 0 .226 0 .504zm1.158.944h18.695v2.705H1.158V1.448zm0 2.705h18.695v15.432H1.158V4.153z'/%3E%3Cpath d='M13.39 5.731v2.13a1.07 1.07 0 0 0 1.076 1.064h2.154a1.07 1.07 0 0 0 1.077-1.065V5.731a1.07 1.07 0 0 0-1.077-1.064h-2.154A1.07 1.07 0 0 0 13.39 5.73z'/%3E%3Cpath fill-rule='nonzero' d='M8.84 8.937c.286 0 .52-.236.52-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.52.522v.425c0 .287.234.523.52.523h4.82zm2.064-2.8c.287 0 .521-.236.521-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.521.522v.425c0 .287.234.523.52.523h6.884z'/%3E%3Cpath d='M13.39 12.731v2.13a1.07 1.07 0 0 0 1.076 1.064h2.154a1.07 1.07 0 0 0 1.077-1.065v-2.129a1.07 1.07 0 0 0-1.077-1.064h-2.154a1.07 1.07 0 0 0-1.077 1.064z'/%3E%3Cpath fill-rule='nonzero' d='M8.84 15.937c.286 0 .52-.236.52-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.52.522v.425c0 .287.234.523.52.523h4.82zm2.064-2.8c.287 0 .521-.236.521-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.521.522v.425c0 .287.234.523.52.523h6.884z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--map{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 22'%3E%3Cg fill='%23141827' fill-rule='nonzero'%3E%3Cg stroke-width='.7'%3E%3Cpath stroke='%23141827' d='M10.67 17.21c.182-.225 4.46-5.527 4.46-8.18 0-2.728-2.085-4.947-4.648-4.947-2.563 0-4.649 2.22-4.649 4.946 0 2.654 4.279 7.956 4.46 8.18a.243.243 0 0 0 .189.092c.072 0 .14-.034.188-.092zM6.33 9.03c0-2.436 1.863-4.418 4.152-4.418 2.29 0 4.152 1.982 4.152 4.417 0 2.16-3.318 6.533-4.152 7.597C9.648 15.562 6.33 11.19 6.33 9.03z'/%3E%3Cpath stroke='%23000' d='M12.055 9.04c0-.911-.706-1.652-1.573-1.652-.868 0-1.574.74-1.574 1.652 0 .91.706 1.652 1.574 1.652.867 0 1.573-.741 1.573-1.652zm-2.85 0c0-.74.573-1.34 1.277-1.34s1.277.6 1.277 1.34c0 .74-.573 1.34-1.277 1.34s-1.277-.6-1.277-1.34z'/%3E%3C/g%3E%3Cpath d='M0 .504v20.03c0 .278.19.503.425.503h20.188c.235 0 .425-.225.425-.504V.503c0-.277-.19-.503-.425-.503H.425C.19 0 0 .226 0 .504zm1.158.944h18.695v2.705H1.158V1.448zm0 2.705h18.695v15.432H1.158V4.153z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--month{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='22' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.637 1.063v19.879c0 .276.189.5.422.5h20.037c.232 0 .421-.224.421-.5V1.062c0-.275-.189-.5-.421-.5H1.059c-.233 0-.422.225-.422.5zM1.787 2H20.34v2.685H1.787V2zm0 4H20.34v14H1.787V6zM8 8.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-8 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-12 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm0 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--no-map{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='92' height='92' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Cg stroke='%23141827' stroke-width='2.5' transform='translate(2 2)'%3E%3Cpath d='M32.219 88S0 58.674 0 32.281C-.011 15.598 12.685 1.66 29.278.136c16.593-1.523 31.608 9.873 34.627 26.28M32.733 88s2.96-2.693 7.083-7.181' stroke-linecap='round'/%3E%3Ccircle cx='33' cy='33' r='8.905'/%3E%3Ccircle cx='65.127' cy='59.016' r='23.571'/%3E%3C/g%3E%3Cg transform='translate(64.857 47.048)'%3E%3Ccircle fill='%23111' cx='2.839' cy='26.495' r='2.839'/%3E%3Cpath d='M2.642 0v18.925' stroke='%23141827' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--photo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 21 21'%3E%3Cg fill='%23141827'%3E%3Cpath d='M20.407 0H.577A.565.565 0 0 0 0 .564v19.872c0 .316.254.564.578.564h19.83a.565.565 0 0 0 .577-.564V.564A.565.565 0 0 0 20.407 0zm-.6 1.15v14.868l-2.226-3.427c-.646-.677-1.848-.677-2.495 0l-1.548 1.646-4.482-5.029a1.806 1.806 0 0 0-1.363-.586c-.508 0-1.016.225-1.34.609l-5.175 5.75V1.15h18.628zM1.177 19.85v-3.133l6.053-6.765a.588.588 0 0 1 .462-.203c.162 0 .37.068.485.203l4.921 5.525c.116.113.278.203.44.203.184.022.323-.068.438-.18l1.987-2.12c.185-.203.555-.203.763 0l3.103 4.352v2.14H1.178v-.022z'/%3E%3Cpath d='M14.955 9.041c1.16 0 2.122-.97 2.122-2.187 0-1.218-.94-2.187-2.122-2.187-1.181 0-2.122.97-2.122 2.187 0 1.218.963 2.187 2.122 2.187zm0-3.224c.547 0 1.006.473 1.006 1.037s-.459 1.037-1.006 1.037c-.547 0-1.006-.473-1.006-1.037s.46-1.037 1.006-1.037z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--week{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zm6.25 6.537v1.006c0 .278.224.503.502.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H7.908a.503.503 0 0 0-.503.502zm4.022 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H11.93a.503.503 0 0 0-.503.502zm4.023 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502h-1.006a.503.503 0 0 0-.503.502zm-12.069 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H3.885a.503.503 0 0 0-.503.502z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23141827'/%3E%3C/svg%3E");height:10px;width:8px}.tribe-common .tribe-common-svgicon--recurring{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23141827'/%3E%3C/svg%3E");height:10px;width:10px}.tribe-common .tribe-common-svgicon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%235D5D5D'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--filters{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%235D5D5D' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--close{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%235D5D5D' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E")}.tribe-common .tribe-common-a11y-hidden{display:none!important;visibility:hidden}.tribe-common .tribe-common-a11y-visual-hide,.tribe-common .tribe-common-a11y-visual-show{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{padding:14px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border{padding:6px 15px;width:auto}.tribe-common .tribe-common-c-btn-icon:before{background-repeat:no-repeat;background-size:contain;content:"";display:block}.tribe-common .tribe-common-c-btn-icon--caret-left:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-left:active:before,.tribe-common .tribe-common-c-btn-icon--caret-left:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-left:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%235D5D5D'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-left:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-right:active:before,.tribe-common .tribe-common-c-btn-icon--caret-right:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-right:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%235D5D5D'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%235D5D5D' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E");height:20px;width:24px}.tribe-common .tribe-common-c-btn-icon--filters:active:before,.tribe-common .tribe-common-c-btn-icon--filters:focus:before,.tribe-common .tribe-common-c-btn-icon--filters:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23D5D5D5' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%235D5D5D'/%3E%3C/svg%3E");height:20px;width:20px}.tribe-common .tribe-common-c-btn-icon--search:active:before,.tribe-common .tribe-common-c-btn-icon--search:focus:before,.tribe-common .tribe-common-c-btn-icon--search:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn{width:auto}.tribe-common .tribe-common-c-image{display:block;height:auto;margin-left:auto;margin-right:auto;width:100%}.tribe-common .tribe-common-c-image--bg{position:relative}.tribe-common .tribe-common-c-image__bg{background:50% no-repeat;background-size:cover;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.tribe-common .tribe-common-c-loader{display:flex;padding-top:192px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-loader{padding-top:288px}.tribe-common .tribe-common-c-loader__dot{background-color:rgba(51,74,255,.07);height:15px;width:15px;border-radius:50%}.tribe-common .tribe-common-c-loader__dot:not(:first-of-type){margin-left:8px}
common/src/resources/css/datatables.min.css CHANGED
@@ -1 +1 @@
1
- table.dataTable{border-collapse:separate;border-spacing:0;clear:both;margin:0 auto;width:100%}table.dataTable thead td:active,table.dataTable thead th:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{background-position:100%;background-repeat:no-repeat}table.dataTable thead .sorting{background-image:url(../../../vendor/datatables/DataTables-1.10.23/images/sort_both.png)}table.dataTable thead .sorting_asc{background-image:url(../../../vendor/datatables/DataTables-1.10.23/images/sort_asc.png)}table.dataTable thead .sorting_desc{background-image:url(../../../vendor/datatables/DataTables-1.10.23/images/sort_desc.png)}table.dataTable thead .sorting_asc_disabled{background-image:url(../../../vendor/datatables/DataTables-1.10.23/images/sort_asc_disabled.png)}table.dataTable thead .sorting_desc_disabled{background-image:url(../../../vendor/datatables/DataTables-1.10.23/images/sort_desc_disabled.png)}table.dataTable.widefat tfoot td input,table.dataTable.widefat tfoot th input,table.dataTable.widefat thead td input,table.dataTable.widefat thead th input{margin:0 0 0 8px;vertical-align:text-top}table.dataTable.widefat tfoot td.check-column,table.dataTable.widefat thead td.check-column{padding-top:4px;vertical-align:middle}table.dataTable.widefat tbody th.check-column,table.dataTable.widefat tfoot th.check-column,table.dataTable.widefat thead th.check-column{padding:11px 0 0 3px}table.dataTable .check-column{width:2.2em}table.dataTable.display tbody td,table.dataTable.display tbody th,table.dataTable.row-border tbody td,table.dataTable.row-border tbody th{border-top:1px solid #ddd}table.dataTable.display tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.row-border tbody tr:first-child th{border-top:none}table.dataTable.cell-border tbody td,table.dataTable.cell-border tbody th{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr td:first-child,table.dataTable.cell-border tbody tr th:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child td,table.dataTable.cell-border tbody tr:first-child th{border-top:none}table.dataTable.display tbody tr.odd,table.dataTable.stripe tbody tr.odd{background-color:#f9f9f9}table.dataTable.display tbody tr:hover,table.dataTable.hover tbody tr:hover{background-color:#f6f6f6}table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3,table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap td,table.dataTable.nowrap th{white-space:nowrap}table.dataTable.compact thead td,table.dataTable.compact thead th{padding:4px 17px 4px 4px}table.dataTable.compact tbody td,table.dataTable.compact tbody th,table.dataTable.compact tfoot td,table.dataTable.compact tfoot th{padding:4px}table.dataTable td.dt-left,table.dataTable th.dt-left{text-align:left}table.dataTable td.dataTables_empty,table.dataTable td.dt-center,table.dataTable th.dt-center{text-align:center}table.dataTable td.dt-right,table.dataTable th.dt-right{text-align:right}table.dataTable td.dt-justify,table.dataTable th.dt-justify{text-align:justify}table.dataTable td.dt-nowrap,table.dataTable th.dt-nowrap{white-space:nowrap}table.dataTable tfoot td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable thead th.dt-head-left{text-align:left}table.dataTable tfoot td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable thead th.dt-head-center{text-align:center}table.dataTable tfoot td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable thead th.dt-head-right{text-align:right}table.dataTable tfoot td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable thead th.dt-head-justify{text-align:justify}table.dataTable tfoot td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable thead th.dt-head-nowrap{white-space:nowrap}table.dataTable tbody td.dt-body-left,table.dataTable tbody th.dt-body-left{text-align:left}table.dataTable tbody td.dt-body-center,table.dataTable tbody th.dt-body-center{text-align:center}table.dataTable tbody td.dt-body-right,table.dataTable tbody th.dt-body-right{text-align:right}table.dataTable tbody td.dt-body-justify,table.dataTable tbody th.dt-body-justify{text-align:justify}table.dataTable tbody td.dt-body-nowrap,table.dataTable tbody th.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable td,table.dataTable th{box-sizing:content-box}.dataTables_wrapper{clear:both;position:relative;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;padding-top:.25em;text-align:right}.dataTables_wrapper .dataTables_paginate .paginate_button{border:1px solid transparent;border-radius:3px;box-shadow:none;box-sizing:border-box;color:#555;cursor:pointer;display:inline-block;font-size:13px;height:28px;line-height:26px;margin:0 0 0 2px;padding:0 10px 1px;text-decoration:none;vertical-align:top;white-space:nowrap}.dataTables_wrapper .dataTables_paginate .paginate_button:active,.dataTables_wrapper .dataTables_paginate .paginate_button:hover{background:#fafafa;border-color:#999;color:#23282d}.dataTables_wrapper .dataTables_paginate .paginate_button.next,.dataTables_wrapper .dataTables_paginate .paginate_button.previous{background:transparent;border-color:transparent;box-shadow:none;color:#23282d}.dataTables_wrapper .dataTables_paginate .paginate_button.next.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.previous.disabled{background:transparent;border-color:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button.next.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.previous.disabled:hover{background:transparent;border-color:transparent;box-shadow:none;text-decoration:none}.dataTables_wrapper .dataTables_paginate .paginate_button.next:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.previous:hover{color:#222;text-decoration:underline}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{background:#fcfcfc;border-color:#999;box-shadow:0 1px 0 #ccc;color:#23282d;text-decoration:none}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover{background:#f7f7f7;border-color:#ddd;box-shadow:none;color:#a0a5aa;cursor:default;text-shadow:0 1px 0 #fff;transform:none}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:#fff;background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,.9) 25%,hsla(0,0%,100%,.9) 75%,hsla(0,0%,100%,0))}.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_paginate,.dataTables_wrapper .dataTables_processing{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0!important;padding:0!important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollBody table,.dataTables_wrapper.no-footer div.dataTables_scrollHead table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width:767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width:640px){.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_length{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}
1
+ table.dataTable{border-collapse:separate;border-spacing:0;clear:both;margin:0 auto;width:100%}table.dataTable thead td:active,table.dataTable thead th:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{background-position:100%;background-repeat:no-repeat}table.dataTable thead .sorting{background-image:url(../../../vendor/datatables/DataTables/images/sort_both.png)}table.dataTable thead .sorting_asc{background-image:url(../../../vendor/datatables/DataTables/images/sort_asc.png)}table.dataTable thead .sorting_desc{background-image:url(../../../vendor/datatables/DataTables/images/sort_desc.png)}table.dataTable thead .sorting_asc_disabled{background-image:url(../../../vendor/datatables/DataTables/images/sort_asc_disabled.png)}table.dataTable thead .sorting_desc_disabled{background-image:url(../../../vendor/datatables/DataTables/images/sort_desc_disabled.png)}table.dataTable.widefat tfoot td input,table.dataTable.widefat tfoot th input,table.dataTable.widefat thead td input,table.dataTable.widefat thead th input{margin:0 0 0 8px;vertical-align:text-top}table.dataTable.widefat tfoot td.check-column,table.dataTable.widefat thead td.check-column{padding-top:4px;vertical-align:middle}table.dataTable.widefat tbody th.check-column,table.dataTable.widefat tfoot th.check-column,table.dataTable.widefat thead th.check-column{padding:11px 0 0 3px}table.dataTable .check-column{width:2.2em}table.dataTable.display tbody td,table.dataTable.display tbody th,table.dataTable.row-border tbody td,table.dataTable.row-border tbody th{border-top:1px solid #ddd}table.dataTable.display tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.row-border tbody tr:first-child th{border-top:none}table.dataTable.cell-border tbody td,table.dataTable.cell-border tbody th{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr td:first-child,table.dataTable.cell-border tbody tr th:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child td,table.dataTable.cell-border tbody tr:first-child th{border-top:none}table.dataTable.display tbody tr.odd,table.dataTable.stripe tbody tr.odd{background-color:#f9f9f9}table.dataTable.display tbody tr:hover,table.dataTable.hover tbody tr:hover{background-color:#f6f6f6}table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3,table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap td,table.dataTable.nowrap th{white-space:nowrap}table.dataTable.compact thead td,table.dataTable.compact thead th{padding:4px 17px 4px 4px}table.dataTable.compact tbody td,table.dataTable.compact tbody th,table.dataTable.compact tfoot td,table.dataTable.compact tfoot th{padding:4px}table.dataTable td.dt-left,table.dataTable th.dt-left{text-align:left}table.dataTable td.dataTables_empty,table.dataTable td.dt-center,table.dataTable th.dt-center{text-align:center}table.dataTable td.dt-right,table.dataTable th.dt-right{text-align:right}table.dataTable td.dt-justify,table.dataTable th.dt-justify{text-align:justify}table.dataTable td.dt-nowrap,table.dataTable th.dt-nowrap{white-space:nowrap}table.dataTable tfoot td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable thead th.dt-head-left{text-align:left}table.dataTable tfoot td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable thead th.dt-head-center{text-align:center}table.dataTable tfoot td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable thead th.dt-head-right{text-align:right}table.dataTable tfoot td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable thead th.dt-head-justify{text-align:justify}table.dataTable tfoot td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable thead th.dt-head-nowrap{white-space:nowrap}table.dataTable tbody td.dt-body-left,table.dataTable tbody th.dt-body-left{text-align:left}table.dataTable tbody td.dt-body-center,table.dataTable tbody th.dt-body-center{text-align:center}table.dataTable tbody td.dt-body-right,table.dataTable tbody th.dt-body-right{text-align:right}table.dataTable tbody td.dt-body-justify,table.dataTable tbody th.dt-body-justify{text-align:justify}table.dataTable tbody td.dt-body-nowrap,table.dataTable tbody th.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable td,table.dataTable th{box-sizing:content-box}.dataTables_wrapper{clear:both;position:relative;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;padding-top:.25em;text-align:right}.dataTables_wrapper .dataTables_paginate .paginate_button{border:1px solid transparent;border-radius:3px;box-shadow:none;box-sizing:border-box;color:#555;cursor:pointer;display:inline-block;font-size:13px;height:28px;line-height:26px;margin:0 0 0 2px;padding:0 10px 1px;text-decoration:none;vertical-align:top;white-space:nowrap}.dataTables_wrapper .dataTables_paginate .paginate_button:active,.dataTables_wrapper .dataTables_paginate .paginate_button:hover{background:#fafafa;border-color:#999;color:#23282d}.dataTables_wrapper .dataTables_paginate .paginate_button.next,.dataTables_wrapper .dataTables_paginate .paginate_button.previous{background:transparent;border-color:transparent;box-shadow:none;color:#23282d}.dataTables_wrapper .dataTables_paginate .paginate_button.next.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.previous.disabled{background:transparent;border-color:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button.next.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.previous.disabled:hover{background:transparent;border-color:transparent;box-shadow:none;text-decoration:none}.dataTables_wrapper .dataTables_paginate .paginate_button.next:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.previous:hover{color:#222;text-decoration:underline}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{background:#fcfcfc;border-color:#999;box-shadow:0 1px 0 #ccc;color:#23282d;text-decoration:none}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover{background:#f7f7f7;border-color:#ddd;box-shadow:none;color:#a0a5aa;cursor:default;text-shadow:0 1px 0 #fff;transform:none}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:#fff;background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,.9) 25%,hsla(0,0%,100%,.9) 75%,hsla(0,0%,100%,0))}.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_paginate,.dataTables_wrapper .dataTables_processing{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0!important;padding:0!important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollBody table,.dataTables_wrapper.no-footer div.dataTables_scrollHead table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width:767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width:640px){.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_length{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}
common/src/resources/css/dialog.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-common .tribe-dialog{--tribe-dialog-background-color:#fff;--tribe-dialog-close-background:#fff;--tribe-dialog-close-border-color:#bababa;--tribe-dialog-close-border-width:1px;--tribe-dialog-close-color:#bababa;--tribe-dialog-close-height:12px;--tribe-dialog-close-height-desktop:16px;--tribe-dialog-overlay-color:transparent;--tribe-modal-overlay-color:rgba(20,24,39,.9);--tribe-dialog-border-radius:4px;--tribe-dialog-padding:16px;--tribe-dialog-padding-top:24px;--tribe-dialog-padding-side:28px}.tribe-common div.tribe-dialog{align-items:center;display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:1}.tribe-common div.tribe-dialog[aria-hidden=true]{display:none}.tribe-common .tribe-dialog__overlay{background-color:var(--tribe-dialog-overlay-color);height:100vh;left:0;opacity:.9;position:fixed;top:0;width:100vw;z-index:1}.tribe-common .tribe-dialog__wrapper{background-color:var(--tribe-dialog-background-color);border-radius:var(--tribe-dialog-border-radius);box-shadow:0 2px 54px 0 var(--tribe-modal-overlay-color);width:800px;overflow-y:scroll;padding:var(--tribe-dialog-padding);max-height:100vh;max-width:100vw;z-index:2;-webkit-transform:translateZ(0);-webkit-perspective:1000}.tribe-common .tribe-dialog__wrapper div[role=document]{align-items:flex-end;display:flex;flex-flow:column;justify-content:space-between;position:relative}.tribe-common .tribe-dialog__close-button{background:var(--tribe-dialog-close-background);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%23bababa' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;cursor:pointer;display:inline-block;font-size:14px;height:var(--tribe-dialog-close-height);line-height:var(--tribe-dialog-close-height);padding:0;position:absolute;width:var(--tribe-dialog-close-height);z-index:1}.tribe-common .tribe-dialog__close-button:focus,.tribe-common .tribe-dialog__close-button:hover{background:var(--tribe-dialog-close-background);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%235d5d5d' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E");background-size:contain;outline:none}.tribe-common .tribe-dialog__close-button--hidden{display:none}.tribe-common .tribe-dialog__close-button--round{border-radius:50%}.tribe-common .tribe-dialog__close-button--border{border:var(--tribe-dialog-close-border-width) solid var(--tribe-dialog-close-border-color)}.tribe-common h2.tribe-dialog__title{align-self:flex-start;margin:0 0 22px;padding-right:calc(var(--tribe-dialog-close-height) + .5em);padding-top:0}.tribe-common .tribe-dialog__content{color:#141827;font-size:14px;line-height:1.64em;padding-right:calc(var(--tribe-dialog-close-height) + .5em);padding-top:calc(var(--tribe-dialog-close-height) + .5em);width:100%}.tribe-common .tribe-dialog__title+.tribe-dialog__content{padding:0}.tribe-common .tribe-modal__overlay{background-color:var(--tribe-modal-overlay-color)}.tribe-common .tribe-confirm__content{padding-right:0}.tribe-common .tribe-dialog__button_wrap{display:flex;flex-flow:row wrap;justify-content:flex-end}#top .main_color .tribe-common div.tribe-dialog,#top.tribe-theme-enfold .tribe-common div.tribe-dialog,.tribe-theme-avada .tribe-common div.tribe-dialog,.tribe-theme-divi .tribe-common div.tribe-dialog{z-index:99999}@media screen and (min-width:768px){.tribe-common .tribe-dialog__wrapper{max-height:calc(100vh - 160px);padding:var(--tribe-dialog-padding-top) var(--tribe-dialog-padding-side)}.tribe-common .tribe-dialog__close-button{height:var(--tribe-dialog-close-height-desktop);line-height:var(--tribe-dialog-close-height-desktop);width:var(--tribe-dialog-close-height-desktop)}}@media screen and (max-width:768px){.tribe-common .tribe-dialog__content:last-of-type{padding-bottom:36px}}
1
+ .tribe-common .tribe-dialog{--tribe-dialog-background-color:#fff;--tribe-dialog-close-background:#fff;--tribe-dialog-close-border-color:#bababa;--tribe-dialog-close-border-width:1px;--tribe-dialog-close-color:#bababa;--tribe-dialog-close-height:12px;--tribe-dialog-close-height-desktop:16px;--tribe-dialog-overlay-color:transparent;--tribe-modal-overlay-color:rgba(20,24,39,.9);--tribe-dialog-border-radius:4px;--tribe-dialog-padding:16px;--tribe-dialog-padding-top:24px;--tribe-dialog-padding-side:28px}.tribe-common div.tribe-dialog{align-items:center;display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100vw;z-index:1}.tribe-common div.tribe-dialog[aria-hidden=true]{display:none}.tribe-common .tribe-dialog__overlay{background-color:var(--tribe-dialog-overlay-color);height:100vh;left:0;opacity:.9;position:fixed;top:0;width:100vw;z-index:1}.tribe-common .tribe-dialog__wrapper{background-color:var(--tribe-dialog-background-color);border-radius:var(--tribe-dialog-border-radius);box-shadow:0 2px 54px 0 var(--tribe-modal-overlay-color);width:800px;overflow-y:scroll;padding:var(--tribe-dialog-padding);max-height:100vh;max-width:100vw;z-index:2;-webkit-transform:translateZ(0);-webkit-perspective:1000}.tribe-common .tribe-dialog__wrapper div[role=document]{align-items:flex-end;display:flex;flex-flow:column;justify-content:space-between;position:relative}.tribe-common .tribe-dialog__close-button{background:var(--tribe-dialog-close-background);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%23BABABA' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;cursor:pointer;display:inline-block;font-size:14px;height:var(--tribe-dialog-close-height);line-height:var(--tribe-dialog-close-height);padding:0;position:absolute;width:var(--tribe-dialog-close-height);z-index:1}.tribe-common .tribe-dialog__close-button:focus,.tribe-common .tribe-dialog__close-button:hover{background:var(--tribe-dialog-close-background);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%235D5D5D' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E");background-size:contain;outline:none}.tribe-common .tribe-dialog__close-button--hidden{display:none}.tribe-common .tribe-dialog__close-button--round{border-radius:50%}.tribe-common .tribe-dialog__close-button--border{border:var(--tribe-dialog-close-border-width) solid var(--tribe-dialog-close-border-color)}.tribe-common h2.tribe-dialog__title{align-self:flex-start;margin:0 0 22px;padding-right:calc(var(--tribe-dialog-close-height) + .5em);padding-top:0}.tribe-common .tribe-dialog__content{color:#141827;font-size:14px;line-height:1.64em;padding-right:calc(var(--tribe-dialog-close-height) + .5em);padding-top:calc(var(--tribe-dialog-close-height) + .5em);width:100%}.tribe-common .tribe-dialog__title+.tribe-dialog__content{padding:0}.tribe-common .tribe-modal__overlay{background-color:var(--tribe-modal-overlay-color)}.tribe-common .tribe-confirm__content{padding-right:0}.tribe-common .tribe-dialog__button_wrap{display:flex;flex-flow:row wrap;justify-content:flex-end}#top .main_color .tribe-common div.tribe-dialog,#top.tribe-theme-enfold .tribe-common div.tribe-dialog,.tribe-theme-avada .tribe-common div.tribe-dialog,.tribe-theme-divi .tribe-common div.tribe-dialog{z-index:99999}@media screen and (min-width:768px){.tribe-common .tribe-dialog__wrapper{max-height:calc(100vh - 160px);padding:var(--tribe-dialog-padding-top) var(--tribe-dialog-padding-side)}.tribe-common .tribe-dialog__close-button{height:var(--tribe-dialog-close-height-desktop);line-height:var(--tribe-dialog-close-height-desktop);width:var(--tribe-dialog-close-height-desktop)}}@media screen and (max-width:768px){.tribe-common .tribe-dialog__content:last-of-type{padding-bottom:36px}}
common/src/resources/css/tribe-common-admin.min.css CHANGED
@@ -1 +1 @@
1
- .invalid input,input:out-of-range{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input::-moz-placeholder,textarea::-moz-placeholder{color:#999}input:-ms-input-placeholder,input::-ms-input-placeholder,textarea:-ms-input-placeholder,textarea::-ms-input-placeholder{color:#999}input::placeholder,textarea::placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia,serif!important;font-size:17px!important;font-weight:400;margin:8px 0}.tribe-rating{color:#3d54ff}.tribe-rating:hover{color:#1c39bb}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label>p,.tribe-settings-form .tribe-field-radio label>p{text-indent:0;margin-left:1px}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.tribe-settings-form .tribe-settings-form-wrap #tribe-field-stylesheetOption .description{color:#999;margin-left:1px}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}#modern-tribe-info{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{margin:10px 0}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5}.ui-widget-shadow{background:#000;border-radius:5px;filter:Alpha(Opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none!important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}#ui-datepicker-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page{max-width:850px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p{font-size:15px}p.tribe-update-message{font-size:18px;font-weight:400}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}a.tribe-rating-link{text-decoration:none}.tribe-update-links{margin-top:30px}.tribe_update_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-events-widget-admin-form__input-section p{margin:0}.tribe-events-widget-admin-form__input-section h4{margin:.5em 0}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#ffba00;height:1rem;width:1%;background:#7ad03a}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;overflow-y:scroll;height:300px}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{padding:1em;min-height:100px}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;max-height:150px;max-width:150px;height:100%;width:auto;vertical-align:middle}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-marketing-notice__icon{display:none;flex-shrink:0;padding:0;position:static}.tribe-marketing-notice .tribe-marketing-notice__icon img{display:inline-block;max-height:100%;max-width:none;vertical-align:middle;width:100%}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}#wpcontent .notice-tribe-banner{align-items:center;background:#161b7d;border:0;box-shadow:none;display:flex;justify-content:flex-start;margin:0 0 16px;padding-right:0}.notice-tribe-banner .tribe-marketing-notice__icon{width:47px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:0;padding:1em 0}.notice-tribe-banner h3{color:#fff;display:block;font-size:.875rem;line-height:1.25;margin:0 0 .25rem}.notice-tribe-banner a{border-bottom:1px solid #fff;line-height:1.25;margin:0;text-decoration:none}.notice-tribe-banner a:hover{text-decoration:none}.notice-tribe-banner a,.notice-tribe-banner p{color:#fff;display:inline-block;font-size:.875rem;line-height:1.25}.notice-tribe-banner p{display:inline-block;margin:0;padding:0}.notice-tribe-banner .tribe-marketing-notice{align-items:center;display:flex;justify-content:flex-start;margin:0 auto;min-height:65px;padding:0 .75rem;width:100%}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:100%}.notice-tribe-banner .notice-dismiss{position:static}.notice-tribe-banner .notice-dismiss:before{color:#eaf1ff}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container .selection,.tribe-ea-dropdown.select2-container .selection{margin-top:inherit}.tribe-dropdown .select2-selection--single,.tribe-ea-dropdown .select2-selection--single{height:32px}.tribe-dropdown .select2-selection--single .select2-selection__clear,.tribe-ea-dropdown .select2-selection--single .select2-selection__clear{line-height:28px}.tribe-dropdown .select2-selection--single .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--single .select2-selection__rendered{line-height:32px;padding-right:28px}.tribe-dropdown.select2-container--focus .select2-selection--single,.tribe-ea-dropdown.select2-container--focus .select2-selection--single{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-container--open .select2-search__field,.tribe-ea-dropdown.select2-container--open .select2-search__field{padding:0}.tribe-dropdown.select2-container--open .select2-dropdown--below,.tribe-ea-dropdown.select2-container--open .select2-dropdown--below{margin-top:-1px;border-top:1px solid #aaa}.tribe-dropdown.select2-container--open .select2-dropdown--above,.tribe-ea-dropdown.select2-container--open .select2-dropdown--above{margin-bottom:-16px;border-bottom:1px solid #aaa}.tribe-dropdown.select2-container--open .select2-selection--single,.tribe-ea-dropdown.select2-container--open .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown.select2-container--open .select2-selection__arrow b,.tribe-ea-dropdown.select2-container--open .select2-selection__arrow b{transform:rotate(180deg)}.tribe-dropdown.select2-selection--single,.tribe-ea-dropdown.select2-selection--single{background-image:none;border-radius:3px;border:1px solid #ccc;overflow:hidden}.tribe-dropdown.select2-selection--single>.select2-selection__rendered,.tribe-ea-dropdown.select2-selection--single>.select2-selection__rendered{white-space:normal}.tribe-dropdown.select2-selection--single .select2-selection__arrow,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow{background-image:none;background:transparent;border-left:0;top:2px;width:26px}.tribe-dropdown.select2-selection--single .select2-selection__arrow b,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow b{background:#fff url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E") no-repeat right 5px top 55%;background-size:auto;background-size:16px 16px;border:0;top:0;bottom:0;left:0;right:0;display:block;width:auto;height:auto;margin:0;padding:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered{background-image:none;border-radius:3px;border:1px solid #ccc;min-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline{line-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input{padding-top:0;padding-bottom:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice{margin-top:2px;padding-top:0;padding-bottom:0;line-height:19px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div{line-height:inherit}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove{top:3px;left:4px;transition-property:border,color}.select2-results .select2-results__option{color:#939393;font-weight:400;margin-bottom:0}.select2-results .select2-results__option[aria-disabled=true]{background-color:#e0e0e0}.select2-results.select2-results__option--highlighted{background-color:#efefef;color:#a1a1a1;cursor:default;display:block}.wp-core-ui .button-red{background-color:#a00;border-bottom-color:#8d1f21;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{color:#e79496!important;background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.ticket_form .select2-container .select2-selection--single .select2-selection__arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{content:"";display:block;width:8px;height:15px;border:solid #0ab152;border-width:0 3px 3px 0;transform:rotate(45deg)}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}body.tribe-welcome{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#fff}body.tribe-welcome .update-nag{display:none}body.tribe-welcome #wpcontent{padding:0}body.tribe-welcome .tribe_settings{margin:0}body.tribe-welcome #wpfooter,body.tribe-welcome .tribe_settings>h1{display:none}body.tribe-welcome #wpbody-content{padding-bottom:25px}body.tribe-welcome .tribe-dependency-error{display:none}.tribe-events-admin-content-wrapper{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;margin:0 auto;padding:20px;width:calc(100% - 40px)}.tribe-events-admin-card{background:#fff;border:1px solid #e1e1e4;box-sizing:border-box;border-radius:16px;display:block;margin:0 auto 36px;padding:27px;text-align:center}.tribe-events-admin-card--1up{width:100%}.tribe-events-admin-video{-webkit-mask-image:-webkit-radial-gradient(circle,#fff 100%,#000 0);-webkit-transform:rotate(.000001deg);border-radius:16px;height:200px;margin-bottom:72px;overflow:hidden}.tribe-events-admin-video iframe{width:100%}.tribe-events-admin-card--2up .tribe-events-admin-card__title{max-width:260px}.tribe-events-admin-card--3up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--3up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card--promo-blue{background-color:#3d54ff;background-image:url(../images/welcome/promo.jpg)}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{color:#fff;font-size:16px;text-align:left;margin-bottom:16px}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__title{text-align:left;color:#fff}.tribe-events-admin-graphic{position:absolute;top:106px;right:0;z-index:-1}.tribe-events-admin-graphic--desktop-only{display:none}.tribe-events-admin-graphic--mobile-only{display:block}.tribe-events-admin-card__form{position:relative}input[type=email].tribe-events-admin-card__input{background:#fff;border:1px solid #e1e1e4;box-sizing:border-box;border-radius:16px;font-size:14px;height:54px}input[type=email].tribe-events-admin-card__input::-webkit-input-placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}input[type=email].tribe-events-admin-card__input::-moz-placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}input[type=email].tribe-events-admin-card__input:-ms-input-placeholder,input[type=email].tribe-events-admin-card__input::-ms-input-placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}input[type=email].tribe-events-admin-card__input::placeholder{color:rgba(15,16,49,.72);letter-spacing:.5px;padding-left:10px}.tribe-events-admin-card__button{background-color:#fff;border:none;color:#3d54ff;font-size:14px;font-weight:700;letter-spacing:1px;line-height:16px;position:absolute;right:20px;text-transform:uppercase;top:17px}.tribe-events-admin-card__button:hover{color:#161b7d}.tribe-events-admin-card__description{color:#000;font-size:14px;font-style:normal;font-weight:400;line-height:22px;margin-top:16px}.tribe-events-admin-card__image{display:block;margin:0 auto;height:100px}.tribe-events-admin-card__link{color:#3d54ff;display:inline-block;font-size:16px;font-style:normal;font-weight:700;line-height:18px;margin-top:24px;position:relative;text-decoration:none}.tribe-events-admin-card__link:hover{color:#161b7d}.tribe-events-admin-card__link:after{border-style:solid;border-width:0 0 1px;bottom:-4px;content:"";left:0;position:absolute;width:100%}.tribe-events-admin-card__title{color:#0f1031;font-size:20px;font-weight:700;line-height:23px;margin:auto}.tribe-events-admin-card-grid{max-width:1048px}.tribe-events-admin-quick-nav{background:#fff;border-radius:16px;border:1px solid #e1e1e4;box-sizing:border-box;display:block;margin:40px 0 78px;padding:18px 23px 2px}.tribe-events-admin-quick-nav__link{color:#3d54ff;font-size:16px;font-weight:700;line-height:18px;text-align:center;text-decoration:none}.tribe-events-admin-quick-nav__link:hover{color:#161b7d}.tribe-events-admin-quick-nav__link-item{display:block;padding-bottom:19px}.tribe-events-admin-quick-nav__links{display:inline}.tribe-events-admin-quick-nav__title{color:rgba(15,16,49,.72);display:inline-block;font-size:14px;font-weight:400;line-height:16px;padding-bottom:14px;text-transform:uppercase}.tribe-events-admin-section-header{color:#000;font-size:24px;font-weight:700;line-height:28px;margin:21px 0 24px}.tribe-events-admin-title{padding-top:14px}.tribe-events-admin-title__description{color:#0f1031;font-size:16px;font-weight:400;line-height:24px;max-width:584px;padding-top:15px}.tribe-events-admin-title__heading{color:#0f1031;display:inline-block;font-size:24px;font-weight:700;line-height:28px;margin:5px 0 0}.tribe-events-admin-title__logo{margin-right:8px;vertical-align:top;width:34px}.tribe-events-admin-notice{background-color:#3d54ff;height:65px}.tribe-events-admin-notice .tribe-events-admin-content-wrapper{padding-top:8px;padding-bottom:0}.tribe-events-admin-notice p{color:#fff;display:inline-block;font-family:Helvetica;font-size:16px;line-height:18px;margin-top:0;padding-bottom:12px;padding-left:16px;vertical-align:middle;width:calc(100% - 60px)}.tribe-events-admin-notice__logo{display:inline-block}.tribe-events-admin-tickets .tribe-events-admin-section-header{font-size:28px;line-height:32px}.tribe-events-admin-tickets .tribe-events-admin-graphic--desktop-only{width:365px}.tribe-events-admin-tickets .tribe-events-admin-graphic--mobile-only{width:300px;top:230px}.tribe-events-admin-tickets .tribe-events-admin-title__heading{margin-top:0}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:4px;width:32px}body.tribe-welcome #fs_connect{border:1px solid #e1e1e4;box-sizing:border-box;border-radius:16px;margin-left:22px;box-shadow:none}body.tribe-welcome #fs_connect .fs-actions{background-color:transparent}body.tribe-welcome #fs_connect .fs-permissions{border-top:1px solid #e1e1e4;margin:0 16px}body.tribe-welcome #fs_connect button{background-color:#3d54ff;border-color:#3d54ff}body.tribe-welcome #fs_connect .button-secondary{border-color:#3d54ff;color:#3d54ff;background:#fff}body.tribe-welcome #fs_connect a{color:#3d54ff}body.tribe-welcome #fs_connect a:focus{box-shadow:none;outline:none}body.tribe-welcome #fs_connect a:hover{color:#161b7d}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}}@media screen and (max-width:782px){.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:320px){.tribe-marketing-notice .tribe-marketing-notice__icon{display:block}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:145px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-marketing-notice__content{margin-left:130px}.notice-tribe-banner .tribe-marketing-notice__content{margin-left:22px;padding:0}.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe-welcome .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:642px}}@media screen and (min-width:400px){.notice-tribe-banner .tribe-marketing-notice__icon{width:67px}}@media screen and (min-width:800px){.notice-tribe-banner h3{display:inline-block;font-size:1rem;margin:0 .5rem 0 0}.notice-tribe-banner a{line-height:1.5}.notice-tribe-banner a,.notice-tribe-banner p{font-size:1rem}.notice-tribe-banner p{margin:0 .5rem 0 0}.notice-tribe-banner .tribe-marketing-notice__cta{display:inline-block;margin-left:.5rem}}@media screen and (min-width:1215px){.events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice,.tribe_events_page_tribe-app-shop .notice-tribe-banner .tribe-marketing-notice{max-width:992px}.tribe-welcome .notice-tribe-banner .tribe-marketing-notice{max-width:1036px}}@media screen and (min-width:710px){.tribe-events-admin-content-wrapper{width:670px}.tribe-events-admin-card--1up{display:inline-block;width:calc(50% - 18px);margin-left:32px}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:71px}.tribe-events-admin-card--1up .tribe-events-admin-card__image{margin-bottom:28px}.tribe-events-admin-card--2up{display:inline-block;width:calc(50% - 20px)}.tribe-events-admin-card--2up.tribe-events-admin-card--first{margin-right:36px}.tribe-events-admin-card--2up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--2up .tribe-events-admin-card__image{height:100px;margin-bottom:12px}.tribe-events-admin-card--2up .tribe-events-admin-card__title{max-width:340px;margin-bottom:27px}.tribe-events-admin-card--3up{display:inline-block;margin-bottom:32px;width:calc(50% - 18px)}.tribe-events-admin-card--3up.tribe-events-admin-card--first{margin-right:32px}.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:0}.tribe-events-admin-card--promo-blue{display:block;margin-left:0;min-height:170px;width:100%}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{float:left;max-width:300px}.tribe-events-admin-graphic{top:0;max-width:250px}.tribe-events-admin-graphic--desktop-only{display:block}.tribe-events-admin-graphic--mobile-only{display:none}.tribe-events-admin-card__form{float:right;width:300px}input[type=email].tribe-events-admin-card__input{width:300px}.tribe-events-admin-card__title{font-size:20px;line-height:23px}.tribe-events-admin-section-header{font-size:28px;line-height:32px;margin-bottom:21px}.tribe-events-admin-title{padding-top:50px}.tribe-events-admin-title__description{padding-top:15px}.tribe-events-admin-title__heading{font-size:48px;line-height:55px;margin:0}.tribe-events-admin-title__logo{margin-right:14px;padding-top:5px;width:40px}.tribe-events-admin-tickets .tribe-events-admin-card__title{font-size:18px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{font-size:18px;height:66px}.tribe-events-admin-tickets .tribe-events-admin-title__logo{margin-right:8px;padding-top:4px;width:60px}}@media screen and (min-width:1217px){.tribe-events-admin-content-wrapper{width:100%;max-width:1060px}.tribe-events-admin-card--1up{margin:0 0 36px;padding:33px 44px 30px;text-align:left;width:1012px}.tribe-events-admin-card--1up .tribe-events-admin-card__description{height:auto}.tribe-events-admin-card--1up .tribe-events-admin-card__image{float:left;margin:0 48px 10px 0}.tribe-events-admin-card--2up{margin-right:36px;width:486px}.tribe-events-admin-card--3up{width:310px}.tribe-events-admin-card--3up.tribe-events-admin-card--first,.tribe-events-admin-card--3up.tribe-events-admin-card--middle{margin-right:36px}.tribe-events-admin-card--3up.tribe-events-admin-card--last{margin-right:0}.tribe-events-admin-card--promo-blue{min-height:150px}.tribe-events-admin-card--promo-blue .tribe-events-admin-card__description{max-width:450px}.tribe-events-admin-graphic{max-width:none}.tribe-events-admin-card__form,input[type=email].tribe-events-admin-card__input{width:365px}.tribe-events-admin-quick-nav{display:inline-block;border-radius:100px;margin:24px 0 94px;max-width:1010px;padding:0 36px 0 0;height:54px}.tribe-events-admin-quick-nav__link-item{display:inline-block;padding:18px 10px 0}.tribe-events-admin-quick-nav__title{padding:19px 6px 17px 32px}.tribe-events-admin-tickets .tribe-events-admin-card--2up .tribe-events-admin-card__title{height:auto}}
1
+ .invalid input{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input::-moz-placeholder,textarea::-moz-placeholder{color:#999}input:-ms-input-placeholder,input::-ms-input-placeholder,textarea:-ms-input-placeholder,textarea::-ms-input-placeholder{color:#999}input::placeholder,textarea::placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia,serif!important;font-size:17px!important;font-weight:400;margin:8px 0}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label>p,.tribe-settings-form .tribe-field-radio label>p{text-indent:0;margin-left:1px}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.tribe-settings-form .tribe-settings-form-wrap #tribe-field-stylesheetOption .description{color:#999;margin-left:1px}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}#modern-tribe-info{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{height:18px;margin:10px 0;width:250px}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5}.ui-widget-shadow{background:#000;border-radius:5px;filter:Alpha(Opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none!important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}#ui-datepicker-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page,.tribe_welcome_page{max-width:850px}.tribe_welcome_page.wrap h1{font-size:3em;line-height:1.2;margin-top:1em}.tribe_welcome_page.wrap h1:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:.9em;line-height:1;margin-right:5px;position:relative;top:4px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_welcome_page .tribe-half-column h4,.tribe_welcome_page h2{font-size:24px;line-height:1.2;margin-bottom:20px}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3,.tribe_welcome_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4,.tribe_welcome_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p,.tribe_welcome_page p{font-size:15px}.tribe_welcome_page li{font-size:14px;margin-bottom:10px}p.tribe-welcome-message{font-size:18px;font-weight:400}.tribe_welcome_page .tribe-half-column h4{margin-top:1em}.tribe_welcome_page .tribe-half-column h4:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:21px;line-height:1;margin-right:10px;position:relative;top:2px}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-sos]:before{content:"\f468"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-welcome-learn-more]:before{content:"\f118"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-megaphone]:before{content:"\f488"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-heart]:before{content:"\f487"}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}.tribe-welcome-video-wrapper{height:0;margin-bottom:40px;padding-bottom:56.25%;padding-top:25px;position:relative}.tribe-welcome-video-wrapper iframe{height:100%;left:0;position:absolute;top:0;width:100%}a.tribe-rating-link{text-decoration:none}.tribe-update-links,.tribe-welcome-links{margin-top:30px}.tribe_update_page li:before,.tribe_welcome_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#ffba00;height:1rem;width:1%;background:#7ad03a}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;overflow-y:scroll;height:300px}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{padding:1em;min-height:100px}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;max-height:150px;max-width:150px;height:100%;width:auto;vertical-align:middle}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-notice-icon{bottom:0;display:none;padding:1rem;position:absolute;left:0;top:0;width:125px}.tribe-marketing-notice .tribe-notice-icon:before{content:"";display:inline-block;height:100%;width:1%;vertical-align:middle}.tribe-marketing-notice .tribe-notice-icon img{display:inline-block;max-height:100%;max-width:96%;vertical-align:middle}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:10px 10px 0 0}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container .selection,.tribe-ea-dropdown.select2-container .selection{margin-top:inherit}.tribe-dropdown .select2-selection--single,.tribe-ea-dropdown .select2-selection--single{height:32px}.tribe-dropdown .select2-selection--single .select2-selection__clear,.tribe-ea-dropdown .select2-selection--single .select2-selection__clear{line-height:28px}.tribe-dropdown .select2-selection--single .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--single .select2-selection__rendered{line-height:32px;padding-right:28px}.tribe-dropdown.select2-container--focus .select2-selection--single,.tribe-ea-dropdown.select2-container--focus .select2-selection--single{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-container--open .select2-search__field,.tribe-ea-dropdown.select2-container--open .select2-search__field{padding:0}.tribe-dropdown.select2-container--open .select2-dropdown--below,.tribe-ea-dropdown.select2-container--open .select2-dropdown--below{margin-top:-1px;border-top:1px solid #aaa}.tribe-dropdown.select2-container--open .select2-dropdown--above,.tribe-ea-dropdown.select2-container--open .select2-dropdown--above{margin-bottom:-16px;border-bottom:1px solid #aaa}.tribe-dropdown.select2-container--open .select2-selection--single,.tribe-ea-dropdown.select2-container--open .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown.select2-container--open .select2-selection__arrow b,.tribe-ea-dropdown.select2-container--open .select2-selection__arrow b{transform:rotate(180deg)}.tribe-dropdown.select2-selection--single,.tribe-ea-dropdown.select2-selection--single{background-image:none;border-radius:3px;border:1px solid #ccc;overflow:hidden}.tribe-dropdown.select2-selection--single>.select2-selection__rendered,.tribe-ea-dropdown.select2-selection--single>.select2-selection__rendered{white-space:normal}.tribe-dropdown.select2-selection--single .select2-selection__arrow,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow{background-image:none;background:transparent;border-left:0;top:2px;width:26px}.tribe-dropdown.select2-selection--single .select2-selection__arrow b,.tribe-ea-dropdown.select2-selection--single .select2-selection__arrow b{background:#fff url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E") no-repeat right 5px top 55%;background-size:auto;background-size:16px 16px;border:0;top:0;bottom:0;left:0;right:0;display:block;width:auto;height:auto;margin:0;padding:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered{background-image:none;border-radius:3px;border:1px solid #ccc;min-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline{line-height:25px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-search--inline input{padding-top:0;padding-bottom:0}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice{margin-top:2px;padding-top:0;padding-bottom:0;line-height:19px}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice div{line-height:inherit}.tribe-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove,.tribe-ea-dropdown .select2-selection--multiple .select2-selection__rendered .select2-selection__choice__remove{top:3px;left:4px;transition-property:border,color}.select2-results .select2-results__option{color:#939393;font-weight:400;margin-bottom:0}.select2-results .select2-results__option[aria-disabled=true]{background-color:#e0e0e0}.select2-results.select2-results__option--highlighted{background-color:#efefef;color:#a1a1a1;cursor:default;display:block}.wp-core-ui .button-red{background-color:#a00;border-bottom-color:#8d1f21;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{color:#e79496!important;background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.ticket_form .select2-container .select2-selection--single .select2-selection__arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{content:"";display:block;width:8px;height:15px;border:solid #0ab152;border-width:0 3px 3px 0;transform:rotate(45deg)}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}}@media screen and (max-width:782px){.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-notice-icon{width:135px}.tribe-marketing-notice .tribe-notice-content{margin-left:145px}}@media screen and (min-width:600px){.tribe-marketing-notice .tribe-notice-icon{display:block}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-notice-content{margin-left:130px}}@media screen and (max-width:956px){.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:0 0 10px}.tribe-marketing-notice.tribe-bf-2018-tec em{clear:both;display:block}}
common/src/resources/images/app-shop-banner.jpg ADDED
Binary file
common/src/resources/images/app-shop-community-tickets.jpg ADDED
Binary file
common/src/resources/images/app-shop-community.jpg ADDED
Binary file
common/src/resources/images/app-shop-eventbrite.jpg ADDED
Binary file
common/src/resources/images/app-shop-filter-bar.jpg ADDED
Binary file
common/src/resources/images/app-shop-ical.jpg ADDED
Binary file
common/src/resources/images/app-shop-image-widget-plus.jpg ADDED
Binary file
common/src/resources/images/app-shop-pro.jpg ADDED
Binary file
common/src/resources/images/app-shop-promoter.jpg ADDED
Binary file
common/src/resources/images/app-shop-tickets-plus.jpg ADDED
Binary file
common/src/resources/images/donate-link-screenshot.png CHANGED
Binary file
common/src/resources/images/gutenberg-admin-notice-TEC.png CHANGED
Binary file
common/src/resources/images/gutenberg-admin-notice-tickets.png CHANGED
Binary file
common/src/resources/images/header/all-solutions.jpg DELETED
Binary file
common/src/resources/images/header/bundles.jpg DELETED
Binary file
common/src/resources/images/header/extensions.jpg DELETED
Binary file
common/src/resources/images/header/welcome-desktop-et.jpg DELETED
Binary file
common/src/resources/images/header/welcome-desktop-etplus.jpg DELETED
Binary file
common/src/resources/images/header/welcome-desktop.jpg DELETED
Binary file
common/src/resources/images/header/welcome-mobile-et.jpg DELETED
Binary file
common/src/resources/images/header/welcome-mobile-etplus.jpg DELETED
Binary file
common/src/resources/images/header/welcome-mobile.jpg DELETED
Binary file
common/src/resources/images/icons/caret-down.svg CHANGED
@@ -1 +1 @@
1
- <svg height="8" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m1.21.85 4.79 4.79 4.79-4.79 1.15 1.15-5.94 5.94-5.94-5.94z" fill="#141827"/></svg>
1
+ <svg width="12" height="8" xmlns="http://www.w3.org/2000/svg"><path d="M1.21.85L6 5.64 10.79.85 11.94 2 6 7.94.06 2z" fill="#141827" fill-rule="nonzero"/></svg>
common/src/resources/images/icons/caret-up.svg CHANGED
@@ -1 +1 @@
1
- <svg height="8" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m1.21 7.15 4.79-4.79 4.79 4.79 1.15-1.15-5.94-5.94-5.94 5.94z" fill="#141827"/></svg>
1
+ <svg width="12" height="8" xmlns="http://www.w3.org/2000/svg"><path d="M1.21 7.15L6 2.36l4.79 4.79L11.94 6 6 .06.06 6z" fill="#141827" fill-rule="nonzero"/></svg>
common/src/resources/images/icons/horns-white.svg DELETED
@@ -1 +0,0 @@
1
- <svg fill="none" height="46" viewBox="0 0 37 46" width="37" xmlns="http://www.w3.org/2000/svg"><g stroke="#fff" stroke-linecap="round" stroke-width="2.25"><path d="m27.2161 19.5106c.1047-4.2905-1.1512-6.0698-3.7676-6.0698-2.6163 0-3.827 2.5473-3.5357 5.9545"/><path d="m27.6405 20.0339c0-3.2122.3778-15.48837 3.8955-15.50929 2.9087-.01763 4.1759 5.78649 4.1759 16.38229 0 10.5955-1.0247 19.9527-12.5277 23.128-11.2161 3.0959-21.14822-5.3731-18.32276-13.8498 3.23374-9.7018 23.18836-13.412 24.72666-8.3688 1.0523 3.4503-8.4009 10.2174-13.4245 9.9386-3.4856-.1937-4.2208-3.4538.1047-3.7673 4.3256-.3141 7.5349 1.779 5.8607 8.0582"/><path d="m19.2975 20.1038c.3254-3.9173-1.0116-8.5991-4.766-8.1375-3.3532.4121-3.5758 5.2963-2.6292 10.0038"/><path d="m2.48356 24.2201c-1.92733-9.6366-2.638836-22.75983 1.81843-23.228818 4.06506-.427867 6.44271 11.667118 7.18151 17.996118"/></g></svg>
 
common/src/resources/images/icons/horns.svg DELETED
@@ -1 +0,0 @@
1
- <svg fill="none" height="46" viewBox="0 0 37 46" width="37" xmlns="http://www.w3.org/2000/svg"><g stroke="#0f1031" stroke-linecap="round" stroke-width="2.25"><path d="m27.2161 19.5106c.1047-4.2905-1.1512-6.0698-3.7676-6.0698-2.6163 0-3.827 2.5473-3.5357 5.9545"/><path d="m27.6405 20.0339c0-3.2122.3778-15.48837 3.8955-15.50929 2.9087-.01763 4.1759 5.78649 4.1759 16.38229 0 10.5955-1.0247 19.9527-12.5277 23.128-11.2161 3.0959-21.14822-5.3731-18.32276-13.8498 3.23374-9.7018 23.18836-13.412 24.72666-8.3688 1.0523 3.4503-8.4009 10.2174-13.4245 9.9386-3.4856-.1937-4.2208-3.4538.1047-3.7673 4.3256-.3141 7.5349 1.779 5.8607 8.0582"/><path d="m19.2975 20.1038c.3254-3.9173-1.0116-8.5991-4.766-8.1375-3.3532.4121-3.5758 5.2963-2.6292 10.0038"/><path d="m2.48356 24.2201c-1.92733-9.6366-2.638836-22.75983 1.81843-23.228818 4.06506-.427867 6.44271 11.667118 7.18151 17.996118"/></g></svg>
 
common/src/resources/images/icons/list.svg CHANGED
@@ -1 +1 @@
1
- <svg height="18" width="21" xmlns="http://www.w3.org/2000/svg"><g fill="#141827"><path d="m19.883 3.272c.342 0 .622-.21.622-.467v-.464c0-.257-.28-.467-.622-.467h-12.756c-.342 0-.622.21-.622.467v.464c0 .257.28.467.622.467zm-18.045.935a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5zm18.045 5.773c.342 0 .622-.21.622-.466v-.465c0-.257-.28-.467-.622-.467h-12.756c-.342 0-.622.21-.622.467v.465c0 .256.28.466.622.466zm-18.045.936a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z"/><path d="m19.883 16.689c.342 0 .622-.21.622-.467v-.465c0-.256-.28-.466-.622-.466h-12.756c-.342 0-.622.21-.622.466v.465c0 .257.28.467.622.467zm-18.045.935a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z"/></g></svg>
1
+ <svg width="21" height="18" xmlns="http://www.w3.org/2000/svg"><g fill="#141827" fill-rule="nonzero"><path d="M19.883 3.272c.342 0 .622-.21.622-.467v-.464c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.464c0 .257.28.467.622.467h12.756zM1.838 4.207a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5zM19.883 9.98c.342 0 .622-.21.622-.466v-.465c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.465c0 .256.28.466.622.466h12.756zM1.838 10.916a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z"/><g><path d="M19.883 16.689c.342 0 .622-.21.622-.467v-.465c0-.256-.28-.466-.622-.466H7.127c-.342 0-.622.21-.622.466v.465c0 .257.28.467.622.467h12.756zM1.838 17.624a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z"/></g></g></svg>
common/src/resources/images/icons/map.svg CHANGED
@@ -1 +1 @@
1
- <svg height="21" width="22" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="m13.921 11.632h3.579l3.588 8.421h-20.088l3.488-8.421h4.016" stroke="#141827" stroke-linejoin="round"/><g fill-rule="nonzero"><path d="m11.32 15.506c.2-.248 4.93-6.108 4.93-9.04 0-3.015-2.305-5.468-5.138-5.468s-5.138 2.453-5.138 5.467c0 2.933 4.729 8.793 4.93 9.041a.268.268 0 0 0 .208.101c.08 0 .155-.037.207-.101zm-4.797-9.04c0-2.693 2.058-4.883 4.589-4.883 2.53 0 4.588 2.19 4.588 4.882 0 2.387-3.667 7.22-4.588 8.397-.922-1.177-4.589-6.009-4.589-8.397z" fill="#141827" stroke="#141827" stroke-width=".4"/><path d="m12.85 6.477c0-1.007-.78-1.826-1.738-1.826-.96 0-1.74.819-1.74 1.826s.78 1.826 1.74 1.826c.959 0 1.739-.82 1.739-1.826zm-3.15 0c0-.817.633-1.482 1.412-1.482.778 0 1.41.665 1.41 1.482s-.632 1.482-1.41 1.482c-.779 0-1.412-.665-1.412-1.482z" fill="#000" stroke="#000" stroke-width=".7"/></g></g></svg>
1
+ <svg width="22" height="21" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path stroke="#141827" stroke-linejoin="round" d="M13.921 11.632H17.5l3.588 8.421H1l3.488-8.421h4.016"/><path d="M11.32 15.506c.2-.248 4.93-6.108 4.93-9.04 0-3.015-2.305-5.468-5.138-5.468-2.833 0-5.138 2.453-5.138 5.467 0 2.933 4.729 8.793 4.93 9.041a.268.268 0 0 0 .208.101c.08 0 .155-.037.207-.101zm-4.797-9.04c0-2.693 2.058-4.883 4.589-4.883 2.53 0 4.588 2.19 4.588 4.882 0 2.387-3.667 7.22-4.588 8.397-.922-1.177-4.589-6.009-4.589-8.397z" stroke="#141827" stroke-width=".4" fill="#141827" fill-rule="nonzero"/><path d="M12.85 6.477c0-1.007-.78-1.826-1.738-1.826-.96 0-1.74.819-1.74 1.826 0 1.007.78 1.826 1.74 1.826.959 0 1.739-.82 1.739-1.826zm-3.15 0c0-.817.633-1.482 1.412-1.482.778 0 1.41.665 1.41 1.482s-.632 1.482-1.41 1.482c-.779 0-1.412-.665-1.412-1.482z" stroke="#000" stroke-width=".7" fill="#000" fill-rule="nonzero"/></g></svg>
common/src/resources/images/icons/photo.svg CHANGED
@@ -1 +1 @@
1
- <svg height="17" width="20" xmlns="http://www.w3.org/2000/svg"><g fill="#141827"><path d="m19.348.11h-18.714a.509.509 0 0 0 -.52.508v15.017c0 .284.23.508.52.508h18.714c.29 0 .52-.224.52-.508v-15.017a.509.509 0 0 0 -.52-.508zm-.54 1.035v10.837l-2.87-3.084c-.583-.61-1.664-.61-2.246 0l-1.393 1.481-4.034-4.525a1.625 1.625 0 0 0 -1.227-.528 1.6 1.6 0 0 0 -1.206.548l-4.657 5.175v-9.904h17.632zm-17.634 13.963v-2.496l5.448-6.089a.529.529 0 0 1 .415-.182c.146 0 .333.06.437.182l4.429 4.972c.104.102.25.183.395.183.166.02.291-.06.395-.162l1.788-1.908c.167-.183.5-.183.686 0l3.66 3.917v1.603h-17.652v-.02z"/><path d="m14.19 5.757c1.044 0 1.91-.872 1.91-1.968s-.846-1.969-1.91-1.969c-1.062 0-1.909.873-1.909 1.969s.866 1.968 1.91 1.968zm0-2.902c.493 0 .907.427.907.934s-.414.933-.906.933-.906-.426-.906-.933.414-.934.906-.934z"/></g></svg>
1
+ <svg width="20" height="17" xmlns="http://www.w3.org/2000/svg"><g fill="#141827" fill-rule="nonzero"><path d="M19.348.11H.634a.509.509 0 0 0-.52.508v15.017c0 .284.23.508.52.508h18.714c.29 0 .52-.224.52-.508V.618a.509.509 0 0 0-.52-.508zm-.54 1.035v10.837l-2.87-3.084c-.583-.61-1.664-.61-2.246 0l-1.393 1.481-4.034-4.525a1.625 1.625 0 0 0-1.227-.528 1.6 1.6 0 0 0-1.206.548l-4.657 5.175V1.145h17.632zM1.174 15.108v-2.496l5.448-6.089a.529.529 0 0 1 .415-.182c.146 0 .333.06.437.182l4.429 4.972c.104.102.25.183.395.183.166.02.291-.06.395-.162l1.788-1.908c.167-.183.5-.183.686 0l3.66 3.917v1.603H1.175v-.02z"/><path d="M14.19 5.757c1.044 0 1.91-.872 1.91-1.968s-.846-1.969-1.91-1.969c-1.062 0-1.909.873-1.909 1.969s.866 1.968 1.91 1.968zm0-2.902c.493 0 .907.427.907.934 0 .507-.414.933-.906.933-.492 0-.906-.426-.906-.933 0-.507.414-.934.906-.934z"/></g></svg>
common/src/resources/images/icons/sale-burst.svg DELETED
@@ -1,12 +0,0 @@
1
- <svg width="67" height="55" viewBox="0 0 67 55" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M8.22008 40.7031C13.0328 40.2609 15.4192 37.5595 15.4462 34.2657C15.5014 27.5429 5.18804 30.406 5.2113 27.5711C5.22016 26.4912 6.14006 25.7052 7.75327 25.557C9.58157 25.389 11.5123 25.8321 12.9531 27.0486L15.1007 23.9915C13.3396 22.5076 10.9807 21.8611 8.1307 22.123C3.90948 22.5108 1.30798 25.2319 1.2834 28.2288C1.22781 35.0056 11.5703 31.87 11.5446 35.0019C11.5359 36.0548 10.5334 37.0912 8.40931 37.2864C5.93573 37.5137 3.9823 36.5601 2.72948 35.3532L0.607727 38.5428C2.28764 40.0881 4.75169 41.0218 8.22008 40.7031Z" fill="#FF4B33"/>
3
- <path d="M35.4754 37.8749L28.7132 20.5015L23.9274 20.9412L16.8698 39.5846L21.1985 39.1868L22.3528 36.0321L30.0424 35.3256L31.1466 38.2727L35.4754 37.8749ZM29.0215 32.047L23.4291 32.5609L26.2889 24.5552L29.0215 32.047Z" fill="#B9C1FF"/>
4
- <path d="M49.2036 36.6135L49.2313 33.2386L41.6492 33.9353L41.7692 19.3018L37.9244 19.6551L37.7767 37.6635L49.2036 36.6135Z" fill="#FF8A6A"/>
5
- <path d="M65.2724 35.137L65.3001 31.7621L56.4275 32.5774L56.4611 28.4735L65.1455 27.6755L65.1732 24.3006L56.4888 25.0986L56.5198 21.3188L65.3924 20.5035L65.4201 17.1286L52.7296 18.2947L52.5819 36.3031L65.2724 35.137Z" fill="#50B078"/>
6
- <path d="M25.9998 16L19.9998 10" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
7
- <path d="M39.9998 14.5646L43.3786 8" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
8
- <path d="M31.0486 1L32.277 15.7414" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
9
- <path d="M35.9998 44L37.2548 53.8469" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
10
- <path d="M44.9998 43L49.344 47.3442" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
11
- <path d="M24.8613 44L20.9998 50.7577" stroke="#FFCF48" stroke-linecap="round" stroke-linejoin="round"/>
12
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
common/src/resources/images/logo/bundle-community-manager.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="90" viewBox="0 0 82 90" width="82" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.5)"><path d="m16.166104 79.284389c.3708501.4419619.3438096 1.0853796-.0430249 1.4948051l-.095639.0901309-13.24592059 11.1146471c-.47595899.399377-1.18555904.3372951-1.58493606-.1386639-.37085008-.441962-.34380952-1.0853797.04302492-1.4948052l.09563902-.0901309 13.24592061-11.1146471c.475959-.399377 1.185559-.337295 1.584936.138664zm4.0940823-78.409389c2.8978653 0 4.6500531.48498444 5.6203928 1.62734799.7317536.8614804.8805731 1.6126957.8393969 3.30264202l-.0375106 1.14254537c.0349442.10865188.0538162.22451136.0538162.34477863v61.09667779c0 .2318748-.0716488.4580855-.2051424.6476782l-5.3510953 7.5998332c-.4481142.6364291-1.3916011.6364291-1.8397152 0l-5.3510954-7.5998332c-.1334935-.1895927-.2051424-.4158034-.2051424-.6476782v-61.09667779c0-.12026727.018872-.23612675.0538162-.34477863-.0029085-.16099378-.0095182-.34706954-.0198508-.60635055-.0827705-2.07700073.0168082-2.8912084.8217371-3.83883684.9703397-1.14236355 2.7225275-1.62734799 5.6203929-1.62734799zm2.8238137 64.56-2.0482194 2.4341832c-.4199479.4990507-1.1652581.5318175-1.6279773.098727l-.0946072-.0999355-1.6741961-1.9949747-1.5956427 2.174 2.8114401 3.9926803c.1929588-.531028.6783178-.9217276 1.261425-.9774469l.1439639-.006843c.6458963 0 1.1961157.4096419 1.4050266.9832944l2.7771444-3.9466848zm1.402-57.018h-8.452l-.0006427 55.84.6396365-.8705335c.4315602-.5879618 1.2999064-.6161728 1.7687199-.0574626l1.7332863 2.0669961 2.2786653-2.7063178c.4892851-.5814486 1.3888968-.5143501 1.7959194.0984207l.0665304.1137795.1692422.3321176zm-4.2258137-5.292c-2.2984275 0-3.4733866.3252145-3.9055337.83397355-.2575894.30325536-.3317166.70903233-.3035709 1.8352911l.0122756.37273535h8.393l.0129335-.37273535c.0281457-1.12625877-.0459815-1.53203574-.3035709-1.8352911-.413358-.48663909-1.50634-.80534706-3.6120787-.83214088z" fill="#0f1031" fill-rule="nonzero" transform="matrix(.76604444 .64278761 -.64278761 .76604444 60.044424 .631355)"/><path d="m23.8582322 31.5772348-6.1519432-.1756295 13.9557856-12.8356873-6.1077287 11.4711817 6.1519431.1756294-13.0936047 13.9029739z" fill="#3d54ff"/></g></svg>
 
common/src/resources/images/logo/bundle-event-importer.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="58" viewBox="0 0 82 58" width="82" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(0 .621371)"><path d="m54.5499727 35.892875-6.1519431-.1756294 13.9557856-12.8356873-6.1077288 11.4711816 6.1519432.1756295-13.0936047 13.9029739z" fill="#3d54ff"/><path d="m80.806757 18.575839v-5.2197597c.0608-3.58079976-2.8287998-6.51439959-6.4095996-6.50886299l-38.0199978.0632634c-3.5095998.0048-6.3607996 2.83759983-6.3887996 6.34879959v5.3165597z" fill="#3d54ff"/><path d="m69.2570784.875c.579899 0 1.0573199.43876095 1.1183987 1.00241886l.0066013.12258114-.0000784 3.721 4.0137695.00009226c4.1295049-.00508862 7.4763557 3.31298198 7.536273 7.39406274v34.4822886c0 4.951091-3.9435308 8.9807941-8.8609743 9.1206633l-.2643494.003755-34.8154202-.0011827c-4.9506294-.0011503-8.9803381-3.9438619-9.1215169-8.8608608l-.0038263-.2643258-.0000344-.4550164c-.000047-.6213203.5035946-1.125038 1.1249149-1.125085.579899-.0000438 1.0573531.438681 1.1184745 1.0023343l.0066106.1225807.0000343.4547931c.0010186 3.717737 2.9521143 6.7461415 6.6393116 6.8715397l.2363314.0040403 34.8151587.0011826c3.7179936 0 6.7465789-2.9507499 6.8712773-6.6381407l.0039944-.2363445-.0001096-34.2603965c.048885-2.8790665-2.2166747-5.25123402-5.0696074-5.36185425l-.2150442-.0040287-4.0152675-.00009725.0000784 3.8969994c0 .6213204-.5036796 1.125-1.125 1.125-.579899 0-1.0573198-.4387609-1.1183986-1.0024188l-.0066014-.1225812-.0000784-3.8969994-24.856.002.00056 3.8949994c0 .6213204-.5036796 1.125-1.125 1.125-.579899 0-1.0573198-.4387609-1.1183986-1.0024188l-.0066014-.1225812-.00056-3.8939994-4.6473017.00081677c-2.8776329.00393567-5.2421775 2.38458263-5.2653383 5.28437753l.0015494 20.4982622c.000047.6213203-.5035946 1.125038-1.124915 1.125085-.6213203.0000469-1.125038-.5035946-1.125085-1.124915l-.0015136-20.5073182c.0323403-4.05546953 3.2628794-7.38688902 7.2721805-7.52128305l.2414732-.00420742 4.6489505-.00081783.00056-3.724c0-.62132034.5036797-1.125 1.125-1.125.579899 0 1.0573199.43876095 1.1183987 1.00241886l.0066013.12258114-.00056 3.723 24.856-.002.0000784-3.721c0-.62132034.5036797-1.125 1.125-1.125zm-32.7472495 33.9052027.0981235.0874196 5.6568542 5.6568543c.4079584.4079584.4370983 1.0512845.0874197 1.4928668l-.0874197.0981234-5.6568542 5.6568543c-.4393399.4393398-1.1516505.4393398-1.5909903 0-.4079584-.4079584-.4370983-1.0512845-.0874197-1.4928669l.0874197-.0981234 3.7360379-3.7373308-26.753.0009717c-.6213203 0-1.125-.5036797-1.125-1.125 0-.579899.4387609-1.0573199 1.0024189-1.1183987l.1225811-.0066013 26.751-.0009717-3.7340379-3.7353874c-.4079584-.4079584-.4370983-1.0512845-.0874197-1.4928669l.0874197-.0981234c.4079584-.4079584 1.0512845-.4370983 1.4928668-.0874196zm-17.2375755-14.7844889.0981234.0874196 5.6568543 5.6568543c.4079584.4079584.4370983 1.0512845.0874197 1.4928668l-.0874197.0981234-5.6568543 5.6568543c-.4393398.4393398-1.1516504.4393398-1.5909902 0-.4079584-.4079584-.4370983-1.0512845-.0874197-1.4928668l.0874197-.0981235 3.7346134-3.7368419-19.514.0004828c-.62132034 0-1.125-.5036796-1.125-1.125 0-.579899.43876095-1.0573198 1.00241886-1.1183986l.12258114-.0066014 19.514-.0004828-3.7346134-3.7358763c-.4079584-.4079584-.4370983-1.0512845-.0874197-1.4928668l.0874197-.0981235c.4079584-.4079584 1.0512845-.4370983 1.4928668-.0874196z" fill="#0f1031" fill-rule="nonzero"/></g></svg>
 
common/src/resources/images/logo/bundle-event-marketing.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="52" viewBox="0 0 92 52" width="92" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.541964)"><ellipse cx="55.312756" cy="26.233071" fill="#3d54ff" rx="6.78526" ry="24.233071"/><path d="m55.3127556.875c4.6468233 0 7.7721095 10.8009582 7.9057955 24.4443852l.0044643.9136855c0 14.0717361-3.1601737 25.3580707-7.9102598 25.3580707-.3387437 0-.6694017-.0573974-.9914047-.1691092-.0621771-.0018485-.1248904-.0097015-.1874528-.0230875l-.118476-.0321427-24.9680302-8.2383286c-.3307922.84953-.7681367 1.6531315-1.3008316 2.3926729-2.0199708 2.8043298-5.2605904 4.5014718-8.7834108 4.5014718-5.9747425 0-10.81822829-4.8434858-10.81822829-10.8182283 0-.9725824.12865869-1.9284968.37930192-2.8488153l-6.87674901-2.2689039c-.42261628-.139453-.71952888-.5130005-.76607948-.9482387l-.00639464-.1201014v-11.6318739c0-.4292027.24362438-.8168951.62099737-1.0058235l.11711448-.0505584 52.36794795-19.17918113c.0636163-.02329875.1279786-.04049318.1924449-.05188114.3684676-.14762954.7484792-.22401243 1.1392509-.22401243zm0 2.25c-.1469428 0-.2943753.02984478-.4418238.08828681-.0011879.00098924-.0022241.00150333-.0032614.00201597l-.0687942.02881504c-2.5825566 1.186272-5.1463804 11.08396368-5.1463804 22.98895288l.0011777.4419232c.0666028 12.4941993 2.9462923 22.6661475 5.6590821 22.6661475 2.6808745 0 5.524745-9.9340161 5.6555681-22.2261528l.0046917-.8819179c0-12.6953747-2.9155549-23.1080707-5.6602598-23.1080707zm-4.3289118 1.51920879-47.8588438 17.52679121v10.033l47.967457 15.8295467c-2.2328112-4.2667187-3.5981217-11.9696395-3.685497-20.8867905l-.0044642-.9136855c0-9.1562388 1.3379806-17.13317122 3.581348-21.58886191zm-40.5889226 34.56018101c0 4.7321018 3.8361265 8.5682283 8.5682283 8.5682283 2.7915395 0 5.3562106-1.3431417 6.957722-3.5665233.3990864-.5540525.7304033-1.1531115.9865702-1.7850796l-16.2428317-5.3588626c-.1782798.692864-.2696888 1.4108585-.2696888 2.1422372zm58.9409659-2.9328057c.3446466-.5169698 1.0431246-.6566654 1.5600943-.3120189l11.631874 7.7545827.0983319.0734884c.4351113.3634818.535357 1.0041008.2136869 1.4866059-.3446465.5169698-1.0431245.6566654-1.5600943.3120188l-11.6318739-7.7545826-.0983319-.0734884c-.4351113-.3634818-.535357-1.0041008-.213687-1.4866059zm19.5567103-11.1635134c.6213203 0 1.125.5036797 1.125 1.125 0 .579899-.438761 1.0573199-1.0024189 1.1183987l-.1225811.0066013h-17.2168395c-.6213203 0-1.125-.5036796-1.125-1.125 0-.579899.438761-1.0573198 1.0024189-1.1183986l.1225811-.0066014zm-4.5334232-17.91617145c.3216701.48250512.2214243 1.12312409-.213687 1.48660587l-.0983319.07348843-11.6318739 7.75458265c-.5169698.3446465-1.2154478.2049509-1.5600943-.3120189-.3216701-.4825051-.2214244-1.1231241.2136869-1.4866058l.0983319-.0734885 11.631874-7.75458261c.5169698-.34464652 1.2154478-.20495091 1.5600943.31201886z" fill="#0f1031" fill-rule="nonzero"/><path d="m34.8083209 24.7045451-6.1519431-.1756295 13.9557856-12.8356873-6.1077288 11.4711817 6.1519432.1756294-13.0936047 13.902974z" fill="#3d54ff"/></g></svg>
 
common/src/resources/images/logo/bundle-ultimate.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="67" viewBox="0 0 81 67" width="81" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.333276 .621371)"><path d="m47.3924388 1.04445636c.307782-.27449544.7457226-.36091188 1.1394035-.21504976l30.3585616 11.2481066.120035.0523673c.6145741.3110445.8145343 1.1149037.3864763 1.6810475l-5.5433234 7.3303483.0005673 31.6959015c0 .4653648-.2865266.8826957-.7208205 1.0498876l-30.8441152 11.8741834c-.1163572.0447945-.2340936.0689555-.3498728.0747736h-.1757061c-.0771862-.0038787-.1552422-.0159099-.2331795-.0367721l-.1166933-.0380015-30.8441152-11.8741834c-.3948127-.1519926-.66750355-.5107117-.71382079-.9243127l-.00730374-.1255749v-14.8549478c0-.6213203.50398363-1.1249999 1.12530403-1.1249999.5798989 0 1.0573198.4387609 1.1183986 1.0024188l.0066013.1225811-.0008359 14.08177 28.594 11.008-.0004082-29.1417237-7.2138088 8.6294166c-.2789592.333672-.7220239.4737771-1.1366091.3697046l-.1233287-.0385977-30.50267225-11.4986712c-.74732682-.2817218-.9713011-1.2307209-.42879823-1.8168567l8.79547038-9.5035688c.0842052-.108375.1913363-.203446.3215624-.2780003.0076969-.0030233.0143821-.0068518.0211053-.0106113.0468355-.026763.0975103-.0501085.151181-.0704171l-.0995905.0432547c.0045879-.0022623.0091899-.0044926.0138055-.0066908.0198392-.009435.0401859-.0184141.0607891-.0267895.0096208-.0038897.0189978-.0075454.0284192-.0110737l30.5844747-11.57409878 6.1313129-6.99441622zm24.211153 21.27081994-28.594 9.331.0006113 31.4257237 28.594-11.007zm-60.2935918-.2572763-7.237 7.818 28.19 10.627 7.6245918-9.1197237zm29.4855918-11.3757237-26.4335918 10.0027237 27.522 8.961 27.454-8.958-26.2924082-9.9177237.0003789 13.9822282c0 .6213204-.5036796 1.125-1.1249999 1.125-.579899 0-1.0573199-.4387609-1.1183987-1.0024188l-.0066013-.1225812zm7.6809064-7.4742763-4.7479064 5.41627632 28.61 10.78999998 4.3509064-5.7532763z" fill="#0f1031" fill-rule="nonzero"/><path d="m57.2011536 42.4514426-5.7125187-.1781849 12.9589438-13.0224498-5.6714624 11.6380903 5.7125186.1781848-12.1583472 14.1052657z" fill="#3d54ff" transform="matrix(.9945219 -.10452846 .10452846 .9945219 -4.094644 6.292702)"/></g></svg>
 
common/src/resources/images/logo/bundle-virtual-events.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="49" viewBox="0 0 72 49" width="72" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(1.5 1)"><g fill-rule="nonzero" stroke="#0f1031" stroke-linecap="round" stroke-width="2.25"><path d="m68.340879.76204803c-12.1833605 12.53145647-12.1833605 32.98821247 0 45.51966897" stroke-linejoin="round" transform="matrix(-1 0 0 1 127.544238 0)"/><path d="m54.7200013 9.16151076c-7.7051523 7.92529954-7.7051523 20.79544404.065856 28.78848114" transform="matrix(-1 0 0 1 103.7352 0)"/><path d="m9.93651509.76204803c-12.1833605 12.53145647-12.1833605 32.98821247 0 45.51966897" stroke-linejoin="round"/><path d="m19.6674066 9.16151076c-7.7051523 7.92529954-7.7051523 20.79544404.065856 28.78848114"/></g><path d="m33.72188 22.9017711-6.1519432-.1756295 13.9557856-12.83568733-6.1077287 11.47118173 6.1519431.1756294-13.0936047 13.9029739z" fill="#3d54ff"/></g></svg>
 
common/src/resources/images/logo/community-events.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="67" viewBox="0 0 77 67" width="77" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.711207 -.5)"><path d="m74.8415213 21.289469v-6.3639746c.0692026-4.0756679-3.2197412-7.41469247-7.295409-7.40836384l-43.2743778.07197956c-3.994628.00546336-7.2398649 3.22975738-7.2717345 7.22620648v6.4741524z" fill="#3d54ff"/><g fill-rule="nonzero"><path d="m61.6956722.875c.579899 0 1.0573199.43876095 1.1183987 1.00241886l.0066013.12258114-.0006364 4.391 4.7246775-.00013573c4.6198495-.00573816 8.3631847 3.71029753 8.4223303 8.27990323v40.3335803c0 5.0396027-4.0860433 9.1248847-9.1256432 9.1248847l-29.8162643-.0019166c-.6213203-.0001106-1.1249102-.50388-1.1247996-1.1252003.0001107-.6213204.5038801-1.1249103 1.1252004-1.1247996l29.8158933.0019165c3.7178559.0000517 6.7464776-2.9510376 6.8711016-6.6385471l.0039895-.2363518-.0001198-40.3267165c-.0636494-3.2652541-2.6757554-5.91789171-5.9413141-6.03286708l-.2288661-.00387998-4.7261855.00012996.0006364 4.5907612c0 .6213203-.5036796 1.125-1.125 1.125-.579899 0-1.0573199-.438761-1.1183986-1.0024189l-.0066014-.1225811-.0006364-4.5907612-28.601.003.0001237 4.5877612c0 .6213203-.5036797 1.125-1.125 1.125-.579899 0-1.0573199-.438761-1.1183986-1.0024189l-.0066014-.1225811-.0001237-4.5877612-5.4457627.00106368c-3.2864001.00449474-5.9982604 2.66139402-6.1424447 5.94492952l-.0058285.2248247.0036423 8.2162692c.0002754.6213203-.5031809 1.1252232-1.1245012 1.1254986-.5798989.0002571-1.0575143-.4382922-1.1188429-1.001923l-.0066557-.1225782-.0036066-8.2257389c.0361866-4.5378008 3.6550217-8.26463866 8.1417171-8.40706572l.2548725-.00421514 5.4474104-.00106474.0001237-4.394c0-.62132034.5036797-1.125 1.125-1.125.579899 0 1.0573199.43876095 1.1183987 1.00241886l.0066013.12258114-.0001237 4.394 28.601-.003.0006364-4.391c0-.62132034.5036797-1.125 1.125-1.125z" fill="#0f1031"/><path d="m40.8449849 50.9309813c4.3023976 0 6.8121296-2.0555899 6.8121296-5.0433661 0-2.1990032-1.027795-3.4658203-2.8204607-4.0155711 1.6970568-.5975552 2.5097319-1.8643723 2.5097319-3.776549 0-2.7726563-2.2707098-4.7565396-6.3340854-4.7565396-4.2545932 0-6.6209119 2.2229054-6.6209119 5.5692147v.3346309h2.3424165v-.2629243c0-2.0794922 1.5297414-3.5614291 4.2067888-3.5614291 2.6531452 0 3.9916689 1.2190126 3.9916689 2.9160695 0 1.7687634-1.0755994 2.748754-3.4419181 2.748754h-2.2707098v1.8643723h2.2707098c2.3902209 0 3.6809402.6453597 3.6809402 2.7009496 0 1.9121768-1.6731546 3.1789938-4.350202 3.1789938-2.9877762 0-4.3502021-1.1234038-4.3502021-3.6809402v-.3346309h-2.3902209v.454142c0 3.8721579 2.0316878 5.6648235 6.7643252 5.6648235zm18.7643723-.3346309v-2.2468076h-3.6092336v-14.747663h-1.9121767c-.3346309 1.8643723-1.1712082 2.7009496-3.1550916 2.7965584v1.8165679h2.748754v10.1345367h-3.6092335v2.2468076z" fill="#0f1031"/><path d="m15.5738029 44.9682963c8.276296 0 14.9855596 6.7092636 14.9855596 14.9855596 0 8.2762961-29.97111922 8.2762961-29.97111922 0 0-8.276296 6.70926357-14.9855596 14.98555962-14.9855596zm0-15.299452c4.138148 0 7.4927798 3.3546318 7.4927798 7.4927798s-3.3546318 7.4927798-7.4927798 7.4927798-7.49277982-3.3546318-7.49277982-7.4927798 3.35463182-7.4927798 7.49277982-7.4927798z" stroke="#0f1031" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25"/></g></g></svg>
 
common/src/resources/images/logo/community-tickets.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="67" viewBox="0 0 102 67" width="102" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(-.583333 -.5)"><path d="m78.250003 1.68749998h23.125v17.25167472c-6.4042793 0-11.4874238 4.3644744-11.4874238 9.7483253 0 5.2803174 4.885384 9.580086 11.1193198 9.743509l.368104.003991v17.2525h-23.125z" fill="#3d54ff"/><path d="m53.0625 35.5252579-7.5309985 5.5813985 2.9810188-8.8871522-7.6354319-5.4376582 9.3733695.0888363 2.8120421-8.9420561 2.8120421 8.9420561 9.3733695-.0888363-7.6354319 5.4376582 2.9810188 8.8871522z" fill="#3d54ff" stroke="#3d54ff" stroke-linecap="round" stroke-linejoin="round"/><path d="m17.5377923 27.1401612c4.8678117 0 8.8139528 3.9461411 8.8139528 8.8139528 0 3.0779232-1.5776862 5.787358-3.9684813 7.3637273 6.749305 2.0683245 11.6574341 8.3504554 11.6574341 15.7789413 0 9.9929828-33.00581123 9.9929828-33.00581123 0 0-7.4281204 4.90764622-13.7099987 11.65740943-15.7801056-2.3907705-1.575205-3.96845663-4.2846398-3.96845663-7.362563 0-4.8678117 3.94614113-8.8139528 8.81395283-8.8139528zm0 17.7037158c-7.87166243 0-14.25290563 6.3812432-14.25290563 14.2529056 0 6.9929828 28.50581123 6.9929828 28.50581123 0 0-7.8716624-6.3812432-14.2529056-14.2529056-14.2529056zm83.8372107-44.343877c.579899 0 1.05732.43876095 1.118399 1.00241886l.006601.12258114v17.2516747c0 .6213203-.50368 1.125-1.125 1.125-5.5599533 0-10.0113363 3.8965715-10.0113363 8.6233253 0 4.7267556 4.4513827 8.6233275 10.0113363 8.6233275.579899 0 1.05732.4387609 1.118399 1.0024188l.006601.1225812v17.2516725c0 .579899-.438761 1.0573199-1.002419 1.1183987l-.122581.0066013h-59.1769428c-.6213204 0-1.125-.5036797-1.125-1.125 0-.579899.4387609-1.0573199 1.0024188-1.1183987l.1225812-.0066013 58.0519398-.001v-15.047l-.104604-.0077284c-6.0686844-.5363362-10.8719712-5.0001862-11.0278251-10.5413299l-.0039042-.2779417c0-5.6691977 4.8619005-10.2739944 11.0317293-10.8192694l.104604-.0087306v-15.048l-56.1395437.00073624-.0559684.01043813-.0569038.00763849-.1225811.00660135-25.125003-.00041421.000003 18.4314452c0 .579899-.438761 1.0573199-1.0024189 1.1183987l-.1225811.0066013c-.579899 0-1.0573199-.4387609-1.1183987-1.0024188l-.0066013-.1225812v-19.55603099c0-.57989899.4387609-1.05731986 1.0024188-1.11839865l.1225812-.00660135 26.0145466.00026377.1128722-.01807663.1225812-.00660135zm-83.8372107 28.8901612c-3.6251711 0-6.5639528 2.9387818-6.5639528 6.5639528 0 3.6251711 2.9387817 6.5639528 6.5639528 6.5639528 3.625171 0 6.5639528-2.9387817 6.5639528-6.5639528 0-3.625171-2.9387818-6.5639528-6.5639528-6.5639528z" fill="#0f1031"/></g></svg>
 
common/src/resources/images/logo/event-aggregator.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="66" viewBox="0 0 61 66" width="61" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(-.416667 -.5)"><path d="m40.8675453 32.7054452c0 6.3505556-5.1485926 11.5-11.5 11.5s-11.5-5.1494444-11.5-11.5c0-6.3514074 5.1485926-11.5 11.5-11.5s11.5 5.1485926 11.5 11.5z" fill="#3d54ff"/><path d="m25.4572683 46.6690582c.5417718.2067997.8313352.7869677.6873903 1.3353477l-.0375468.1168758-3.6053197 9.4451814c.6114218.4460757 1.1178676 1.0533201 1.4477892 1.794239.9754446 2.1916322.0497319 4.7463892-2.067823 5.8173411l-.2019909.0959983c-2.2599403 1.0058468-4.9062357-.0100622-5.9129688-2.2694674-1.0060164-2.2603211.0103415-4.9075209 2.2695237-5.9135055.7726638-.3438947 1.5905744-.4514296 2.3726833-.3537496l3.5960391-9.4184173.0498814-.1121676c.2580709-.504817.8605704-.7444757 1.4023422-.5376759zm-6.5058688 12.4775234c-1.1239812.5004943-1.6297932 1.8179292-1.1291977 2.9426689.5009821 1.1243509 1.8177701 1.6298639 2.9426689 1.1291976 1.1243509-.5009821 1.6298639-1.8177701 1.1291976-2.9426688-.5004943-1.1239812-1.8179291-1.6297932-2.9426688-1.1291977zm23.9143274-17.7047718.1124491.0625458.1067333.0766707 3.5255349 2.8532991c.2661032-.2004134.5588805-.3740724.8761726-.5153584 2.2600746-1.0059066 4.9072744.0104512 5.913259 2.2696335 1.0059272 2.2601207-.0099818 4.9064161-2.2698139 5.9133393-2.2599403 1.0058469-4.9062357-.0100621-5.9129688-2.2694673-.535669-1.2035429-.4979555-2.5167734-.0045438-3.6335217l-3.5433915-2.8691685-.0911194-.0822616c-.3996568-.4021384-.4402686-1.0492802-.0753829-1.4999922.3350992-.4139191.903427-.5278186 1.3630714-.3057187zm5.5359671 4.5326702c-1.1239812.5004943-1.6297932 1.8179292-1.1291977 2.9426689.5009821 1.1243509 1.8177701 1.6298639 2.9426689 1.1291976 1.1243509-.5009821 1.6298639-1.8177701 1.1291976-2.9426688-.5004943-1.1239812-1.8179291-1.6297932-2.9426688-1.1291977zm-19.0341487-25.8940348c6.9727277 0 12.625 5.6522723 12.625 12.625 0 6.9721573-5.6525536 12.625-12.625 12.625-6.9724465 0-12.625-5.6528427-12.625-12.625 0-6.9727277 5.6522722-12.625 12.625-12.625zm0 2.25c-5.7300871 0-10.375 4.644913-10.375 10.375 0 5.7295423 4.64522 10.375 10.375 10.375s10.375-4.6454577 10.375-10.375c0-5.730087-4.644913-10.375-10.375-10.375zm-20.03375364 7.3223853c.1294572.2908649.22542824.5881257.28957122.887465l4.19648672.2453153.1219871.0137426c.5591337.0938637.96929.5960725.9354533 1.1749835-.0338366.578911-.4997072 1.0299171-1.0659686 1.0580028l-.1227575-.0005624-4.16436799-.2440202c-.36687077 1.1944044-1.2288906 2.2297647-2.46021815 2.7784127-2.25994032 1.0058469-4.90623569-.0100621-5.91296887-2.2694674-1.0060164-2.260321.01034148-4.9075208 2.26952373-5.9135054 2.26007461-1.0059067 4.90727442.0104512 5.91325904 2.2696335zm-4.99818188-.2141205c-1.12398116.5004943-1.62979311 1.8179291-1.12919764 2.9426689.47920027 1.075466 1.70480895 1.5847364 2.79493754 1.1888276l.1473045-.0594399c1.12477773-.5011722 1.63029074-1.8179602 1.12962447-2.942859-.50049428-1.1239811-1.81792915-1.6297931-2.94266887-1.1291976zm56.12806832-15.3831417c.9754445 2.1916322.0497319 4.7463892-2.067823 5.8173411l-.2019909.0959983c-1.7598415.7832644-3.7539654.3405532-5.0257254-.9606363l-.1035332.0693546-9.8360809 5.7953494-.1089637.0565387c-.5166383.2335075-1.1370176.0449039-1.4313935-.4547217-.2943758-.4996255-.1587056-1.1336882.2959214-1.4724434l.1022616-.0679138 9.8360809-5.7953494.1336737-.0673528c-.5856888-2.1014067.4409857-4.3714777 2.494314-5.2857982 2.2600746-1.0059066 4.9072744.0104513 5.913259 2.2696335zm-33.269029-10.45292895c.9754445 2.19163222.0497318 4.74638918-2.067823 5.81734107l-.0622371.02981376 2.1739678 7.80431992.027911.1284187c.087519.5564266-.254024 1.1023807-.8098092 1.2571805-.5586354.1555936-1.1362749-.1389814-1.34635-.6655831l-.0392492-.1163151-2.2171364-7.96070198c-1.6213732-.09168051-3.1355056-1.06489344-3.8420567-2.65060179-1.0060164-2.26032104.0103415-4.90752085 2.2695238-5.91350546 2.2600746-1.00590664 4.9072744.01045124 5.913259 2.26963348zm28.2708471 10.23880845c-1.1239811.5004943-1.6297931 1.8179292-1.1291976 2.9426689.5009821 1.1243509 1.8177701 1.6298639 2.9426689 1.1291976 1.1243509-.5009821 1.6298639-1.8177701 1.1291976-2.9426688-.5004943-1.1239812-1.8179291-1.6297932-2.9426689-1.1291977zm-33.269029-10.45292892c-1.1239811.50049428-1.6297931 1.81792915-1.1291976 2.94266886.5009821 1.12435091 1.8177701 1.62986391 2.9426688 1.12919765 1.124351-.50098211 1.629864-1.81777009 1.1291977-2.94266887-.5004943-1.12398116-1.8179292-1.62979312-2.9426689-1.12919764z" fill="#0f1031" fill-rule="nonzero"/></g></svg>
 
common/src/resources/images/logo/event-tickets-plus.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="67" viewBox="0 0 76 67" width="76" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(-.25 -.5)"><path d="m55.4232228 54.6290323c5.5258264-2.2808563 15.9120306-9.7902273 20.0122611-15.9354839 0 0-2.7593983-2.4560374-8.2781947-7.3681122-1.4362714 1.8251315-3.6822418 3.0006262-6.20824 3.0006262-4.3367349 0-7.8530952-3.4641902-7.8530952-7.7365836 0-2.1366012 2.3001694-5.4713494 2.3001694-5.4713494l-7.0245087-6.7471617c-1.8842759 2.7470879-5.7718154 7.2560065-10.7362338 10.8903476-2.2856982 1.6733093-4.7996765 3.161223-7.4515194 4.2064266" fill="#3d54ff"/><path d="m13.3613573 1.0892253.1022508.08390325 7.8582716 7.24963971c.4559776.42066164.4853575 1.13105276.0656727 1.58792954-.910328.991-1.424321 2.286368-1.424321 3.6651578 0 2.9852928 2.4020202 5.4026907 5.3614752 5.4026907 1.5287566 0 2.9516941-.6462975 3.9614119-1.7622393.4197125-.463867 1.1372283-.4962526 1.5970231-.072083l4.0314611 3.7191016c.4566752.4212918.4853591 1.1330246.0640673 1.5896998-.4212917.4566751-1.1330246.4853591-1.5896998.0640673l-3.2589702-3.0070927-.0126383.0117496c-1.2619098 1.0300574-2.8302025 1.6368713-4.49745 1.7011159l-.2952051.0056808c-4.2053213 0-7.6114752-3.4279601-7.6114752-7.6526907 0-1.5148196.4409717-2.9627855 1.243144-4.19142417l.0756246-.11243143-6.252-5.768-.0507102.05898686c-6.19704059 7.12997144-9.73706645 14.65255774-10.05665616 21.21398004l-.0160203.4174958c-.1592231 5.6718615 2.12909135 8.2677919 6.17951953 8.8717275 8.72286193 1.2990644 17.62526753-2.2088685 27.36705703-9.4259677l.4863378-.3625488c5.0243311-3.9405374 8.425436-7.1914804 10.7128826-10.6298395.3602938-.5415732 1.095183-.6593421 1.6042454-.2825743l.0986236.0819683 7.2550676 6.7483797c.4771371.4438142.4785815 1.1989054.0031458 1.6445418l-.1895585.1829126c-1.2594567 1.2796322-1.979765 3.0088312-1.979765 4.8571816 0 3.7916451 3.0209663 6.8590103 6.7384935 6.8590103 2.1062854 0 4.0500404-.9898481 5.3208086-2.654282.3763367-.4929205 1.0727727-.5828034 1.5595119-.2246501l.1008986.0836213 7.2394458 6.7341866c.3996899.3717945.4747985.9768687.1781409 1.4351016-5.848702 9.0342139-21.0855424 18.0715836-29.43311 18.8938765-7.46882.7357302-12.5693608-.3149189-18.3679456-4.2136769l-.4029883-.2747061-.4260156-.2977198c-4.1531035-2.9353506-11.3263271-8.9208233-21.55414966-17.9798245-3.11510435-1.6244837-4.8853553-4.9234439-4.7397635-10.1097296.2105659-7.5310454 4.29433312-16.07185364 11.45926996-23.98646606.3897776-.43056042 1.036169-.48914899 1.4945915-.15575984zm35.1566427 14.9847747-.0393128.0560283c-2.314865 3.1347987-5.4846329 6.1236048-9.8686821 9.5986992l-.5502373.4334376c-9.8583677 7.410401-18.9952143 11.2655479-28.12070087 10.4039234l1.93687507 1.6930889c8.0436058 7.0064779 13.6881454 11.6008732 16.909901 13.7670648 5.3327096 3.5855203 9.9135694 4.5291214 16.8919426 3.8417036 7.3555009-.7245674 21.0878558-8.7179968 27.0345947-16.8205865l.2006197-.2803593-5.686-5.289-.1740108.1710426c-1.5664239 1.4792858-3.6183085 2.3612657-5.8192988 2.4351632l-.3010277.0050484c-4.9679092 0-8.9884935-4.0823364-8.9884935-9.1090103 0-2.1250345.7227329-4.1372324 2.0097166-5.7420408l.0501142-.0612031z" fill="#0f1031" fill-rule="nonzero"/><g fill="#fff"><path d="m56.5487652 43.6984442c-.9436647 1.022274-.8778888 2.6138383.146461 3.5556596 1.0252269.9418213 2.6222656.8753604 3.5659303-.1469136.9445418-1.022274.8787659-2.6138383-.1464609-3.5547851-1.0252269-.9409468-2.6213886-.8762349-3.5659304.1460391"/><path d="m48.9787884 36.9891838c-.9445526 1.022204-.8778989 2.6136593.1464626 3.5545417 1.0252386.9426313 2.6222954.8761749 3.5659709-.1460291.9445525-1.022204.8778988-2.6136594-.1473397-3.5554162-1.0252386-.9408824-2.6214183-.8753005-3.5650938.1469036"/><path d="m41.4081051 30.2796268c-.9436648 1.0223556-.8778889 2.6140471.146461 3.555069 1.0252269.9418965 2.6222655.8754303 3.5659303-.1469253.9445418-1.0214811.8787659-2.6140471-.146461-3.5550691s-2.6213885-.8754303-3.5659303.1469254"/></g><g fill-rule="nonzero" transform="translate(14.508153 41.717014)"><path d="m24.8571858 12.4286363c0 6.8638264-5.5641157 12.4279421-12.4288098 12.4279421-6.8638265 0-12.42794218-5.5641157-12.42794218-12.4279421 0-6.86382651 5.56411568-12.42880983 12.42794218-12.42880983 6.8646941 0 12.4288098 5.56498332 12.4288098 12.42880983" fill="#ffcf48"/><path d="m11.8486251 12.5235551-4.34596214-.1240712 9.85888764-9.06760848-4.3147275 8.10367078 4.3459622.1240712-9.24981088 9.8215795z" fill="#161b7d"/></g></g></svg>
 
common/src/resources/images/logo/event-tickets.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="68" viewBox="0 0 88 68" width="88" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(-.166667 -.5)"><path d="m64.6649022 63.5660377c6.4641742-2.6681714 18.6140735-11.4527187 23.4105695-18.6415094 0 0-3.2279753-2.8731004-9.6839258-8.6193011-1.6801666 2.1350595-4.3075282 3.5101665-7.2624695 3.5101665-5.0731616 0-9.1866396-4.0524489-9.1866396-9.050343 0-2.4994203 2.6907641-6.4004465 2.6907641-6.4004465l-8.2173497-7.8929061c-2.2042474 3.2135745-6.751935 8.4881585-12.5593679 12.7396519-2.6738357 1.9574561-5.6147159 3.6980344-8.7168717 4.9207255" fill="#3d54ff"/><path d="m15.348282 1.0892253.1022508.08390325 9.1926951 8.48071061c.4559776.42066164.4853575 1.13105274.0656726 1.58792954-1.0970094 1.1942249-1.7165355 2.7555581-1.7165355 4.4167794 0 3.5974646 2.8951671 6.5111664 6.4629522 6.5111664 1.8429507 0 3.5587617-.7793205 4.7757622-2.1243515.4197125-.463867 1.1372283-.4962526 1.5970231-.072083l4.7160488 4.3506471c.4566752.4212918.4853591 1.1330246.0640674 1.5896998-.4212918.4566752-1.1330246.4853591-1.5896998.0640674l-3.9365189-3.6306943-.0562788.0490947c-1.4657196 1.2274603-3.3042235 1.9490629-5.2605658 2.0181545l-.3098382.0054653c-4.8136514 0-8.7129522-3.924264-8.7129522-8.7611664 0-1.7840454.5340713-3.4868239 1.5029229-4.9187234l.1007121-.1438247-7.58-6.993-.105346.12083894c-7.34172891 8.41571886-11.5336549 17.31110346-11.89698278 25.07431636l-.01670869.44661c-.18903315 6.7337583 2.5597919 9.8521053 7.39169417 10.572562 10.2814553 1.5311801 20.7559781-2.6049464 32.2099273-11.101918l.5193244-.3874329c5.8923371-4.6213066 9.8832538-8.4360208 12.5732117-12.4794118.3602939-.5415732 1.095183-.6593422 1.6042454-.2825744l.0986236.0819684 8.4870602 7.894331c.4771371.4438142.4785815 1.1989053.0031458 1.6445417l-.2272554.2193483c-1.5082155 1.5323759-2.3708361 3.6032151-2.3708361 5.8159925 0 4.5403703 3.6188338 8.2147856 8.0738037 8.2147856 2.5243536 0 4.8539727-1.1863475 6.3761839-3.1801181.3763367-.4929204 1.0727728-.5828034 1.559512-.2246501l.1008985.0836213 8.4687858 7.8777278c.3996898.3717945.4747984.9768687.1781408 1.4351016-6.8098013 10.5187785-24.581548 21.0596676-34.2895482 22.0159725-8.5143128.8387184-14.3700386-.3134778-20.9412654-4.61854l-.4204443-.2790843c-4.4736588-3.0079258-12.6764804-9.7812113-24.64715891-20.3459864l-1.52977053-1.3525177c-3.59672521-1.8638994-5.63597739-5.6615045-5.46739593-11.6667304.24490965-8.7593749 5.0024832-18.7093846 13.35584547-27.93676876.3897776-.43056042 1.036169-.48914899 1.4945915-.15575984zm41.211718 17.0877747-.1111948.1555625c-2.7082981 3.6907788-6.4351558 7.2078569-11.6112495 11.3078604l-.5994071.4720449-1.0954571.8127036c-11.2935589 8.2666706-21.7845075 12.4501927-32.2619309 11.2585712l2.6481662 2.3167518c8.9378418 7.7875315 15.3533522 13.0383268 19.2256987 15.7386487l.6429751.4406562c6.2778195 4.220978 11.680685 5.3339022 19.8857066 4.5256511 8.713033-.8582937 24.9744624-10.3494585 31.8920653-19.9346036l.2026275-.2858468-6.91-6.428-.0547173.0581293c-1.8332265 1.8638339-4.3067442 2.9801038-6.969569 3.0664232l-.3338064.0054052c-5.7053519 0-10.3238037-4.6893864-10.3238037-10.4647856 0-2.4571896.8407531-4.7826815 2.3367599-6.6320772l.1451365-.1730949z" fill="#0f1031" fill-rule="nonzero"/><g fill="#fff"><path d="m65.9815744 50.7793121c-1.1039097 1.1958677-1.0269643 3.0576976.1713318 4.1594508 1.199322 1.1017532 3.0675559 1.0240065 4.1714656-.1718612 1.1049357-1.1958677 1.0279903-3.0576976-.1713317-4.1584278-1.199322-1.1007303-3.06653-1.0250295-4.1714657.1708382"/><path d="m57.1261298 42.9307433c-1.1049482 1.1957858-1.026976 3.0574883.1713337 4.1581432 1.1993356 1.1027007 3.0675907 1.0249593 4.171513-.1708266 1.1049483-1.1957858 1.0269761-3.0574883-.1723596-4.1591661-1.1993356-1.1006549-3.0665648-1.0239364-4.1704871.1718495"/><path d="m48.2698588 35.0818275c-1.1039098 1.1959633-1.0269644 3.0579419.1713317 4.1587601 1.199322 1.1018412 3.0675559 1.0240882 4.1714656-.171875 1.1049357-1.1949401 1.0279903-3.0579419-.1713317-4.15876-1.199322-1.1008182-3.0665299-1.0240883-4.1714656.1718749"/></g></g></svg>
 
common/src/resources/images/logo/eventbrite-tickets.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="66" viewBox="0 0 81 66" width="81" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(1.333333 1)"><path d="m54.5205941 1.74658203h17.5v13.80133977c-4.8628341 0-8.80494 3.4915795-8.80494 7.7986611 0 4.2242531 3.7919443 7.664068 8.5254349 7.7948063l.2795051.0031928v13.8020017h-17.5z" fill="#3d54ff" fill-rule="nonzero" transform="matrix(.93969262 -.34202014 .34202014 .93969262 -4.169318 23.047789)"/><path d="m72.6465025 9.30087199c.579899 0 1.0573199.43876094 1.1183986 1.00241881l.0066014.1225812v13.8013397c0 .6213204-.5036797 1.125-1.125 1.125-3.6857613 0-6.6736611 2.9878999-6.6736611 6.6736611 0 3.6857613 2.9878998 6.6736612 6.6736611 6.6736612.579899 0 1.0573199.4387609 1.1183986 1.0024188l.0066014.1225812v13.8013397c0 .579899-.438761 1.0573199-1.0024189 1.1183987l-.1225811.0066013h-50.2773957c-.6213203 0-1.125-.5036797-1.125-1.125 0-.579899.438761-1.0573199 1.0024189-1.1183987l.1225811-.0066013 49.1518932-.0008737v-11.622l-.1701087-.0218364c-4.2297842-.6152037-7.4977173-4.1974481-7.6242454-8.5671793l-.0038045-.2631115c0-4.488366 3.31367-8.202783 7.6280499-8.8302907l.1701087-.0225821v-11.623l-15.3100763.000872c-.579899 0-1.0573199-.438761-1.1183987-1.0024189l-.0066013-.1225811c0-.579899.4387609-1.05731988 1.0024188-1.11839867l.1225812-.00660134zm-24.2266765 0c.6213204 0 1.125.50367965 1.125 1.12500001 0 .579899-.4387609 1.0573199-1.0024188 1.1183986l-.1225812.0066014-41.648826-.000872v11.623l.17111373.0225821c4.22978417.6152037 7.49771727 4.1974481 7.62424527 8.5671793l.0038046.2631114c0 4.4883661-3.31367 8.2027831-7.62804987 8.8302908l-.17111373.0218364v11.622l7.85006.0008737c.5798989 0 1.0573198.4387609 1.1183986 1.0024189l.0066014.1225811c0 .579899-.438761 1.0573199-1.0024189 1.1183987l-.1225811.0066013h-8.97455751c-.57989898 0-1.05731986-.4387609-1.11839865-1.0024189l-.00660135-.1225811v-13.8013397c0-.6213204.50367966-1.125 1.125-1.125 3.68576126 0 6.67366111-2.9878999 6.67366111-6.6736612 0-3.6857612-2.98789985-6.6736611-6.67366111-6.6736611-.57989898 0-1.05731986-.4387609-1.11839865-1.0024188l-.00660135-.1225812v-13.8013397c0-.579899.43876095-1.05731988 1.00241886-1.11839867l.12258114-.00660134z" fill="#0f1031" fill-rule="nonzero" transform="matrix(.93969262 -.34202014 .34202014 .93969262 -8.592671 15.320289)"/><path d="m39.4227214 29.0818054c-.0138535-.027535-.0151129-.0362961-.0201506-.0425541-.0176317-.021277-.0365228-.0425541-.0566734-.0625795-1.6246378-1.6345771-3.5880567-2.3567447-5.8889972-2.1639998-.6221481.0513152-1.2228863.207764-1.8059927.4280439-2.6548346 1.0125366-4.4469738 3.4869309-4.5705172 6.3092672-.0011381.0300382.0076778.0600764.0139748.1026305 4.1144897-1.5244372 8.2163854-3.0463711 12.3283563-4.5708082m7.7327723 2.7272155c-6.0804275 2.2541143-12.1532985 4.5057255-18.2450606 6.7648461.0377823.0450573.0617111.0775986.0919369.1088884.7405326.782244 1.6183408 1.3679883 2.6271275 1.7572329.7909089.3066397 1.6145625.4643401 2.4634043.4781076.541546.0087611 1.0805731-.0362961 1.6082655-.1602036 2.135958-.5031393 3.7379264-1.7046661 4.7870142-3.6246058.0642299-.1176495.0629705-.1189011.2052837-.1051336 1.9898665.186487 3.9809924.3729739 5.9721183.5619641.0264476.0025032.0541546.0100127.0931963.0175222-.0138535.0500637-.0251882.0951209-.0390417.1389266-1.1737694 3.7322426-3.9507666 6.7247952-7.6068314 8.1979171-.5717717.2290411-1.157397.4180312-1.7568757.5669705-.5516213.1351718-1.1082801.2428085-1.6750142.3041365-.4244209.0463088-.8501012.0750954-1.2783003.0813533-1.0113056.0175223-2.0100171-.0813533-2.9973938-.2966269-1.8702226-.4067669-3.5754626-1.1777466-5.1056448-2.3217002-1.9394901-1.4518449-3.3638819-3.2991923-4.2794723-5.5332812-.2556601-.6245436-.4596844-1.2653579-.6158511-1.9211913-.1372756-.5819895-.2392877-1.1714886-.2921829-1.7672456-.1964679-2.1752641.1146062-4.2791876.9835985-6.285487 1.4067601-3.2428708 3.7530393-5.5620678 7.0174279-6.9600943.5553994-.2365506 1.1284306-.4242891 1.7140559-.5782348.6473363-.1702163 1.3034884-.3041364 1.9709753-.3667159 3.3966265-.3216588 6.4846978.5056425 9.2327286 2.5156967 2.1132885 1.5469657 3.5993914 3.572039 4.5023877 6.0176467.2266937.6082729.4042704 1.2328165.5264331 1.8723792.0289664.1414297.0541546.284111.0806021.4255407.0062971.033793.0088159.0700891.015113.1113916" fill="#3d54ff" transform="matrix(.93969262 -.34202014 .34202014 .93969262 -9.5202 13.706105)"/></g></svg>
 
common/src/resources/images/logo/events-calendar-pro.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="67" viewBox="0 0 65 67" width="65" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(-.083333 .5)"><path d="m57.719639 22.0140549.098758-5.1993865c.0608-3.5807998-2.8287999-6.5143996-6.4095996-6.5088942l-38.0199978.0632946c-3.50959977.0048-6.3607996 2.8375998-6.3887996 6.3487996l.00535317 4.9246862z" fill="#3d54ff" transform="matrix(.93969262 -.34202014 .34202014 .93969262 -3.572474 12.059322)"/><path d="m41.8709796.79985313.0481285.1129308 1.3111163 3.60546649 4.1279014-1.50998336c3.8782903-1.41839592 8.1584347.55468219 9.616637 4.38629145l.0827741.22742014 6.0734585 17.60866845c4.6744103 12.7791106-1.8951829 26.9283747-14.6738058 31.6026067-.583509.213439-1.2295631-.0865621-1.443002-.6700711-.213439-.583509.086562-1.229563.670071-1.443002 7.4211035-2.7145302 12.5376777-8.9458645 14.1535005-16.1264745-2.3270203 1.7997797-5.9765636 2.7982696-10.4020816 2.6781539l-.276107-.009373-.0307752.0622619-.1034889.220136c-.1261403.2806233-.2734198.6497602-.4652347 1.162224l-1.1002072 3.0042827-.1059195.2813519c-.4660805 1.2319987-.9137948 2.3311881-1.3946775 3.3995043-2.2610539 5.0230972-4.9595444 8.6769799-8.5585351 10.7270504-.0985038.0561101-.2019039.0957121-.3070022.1196829-.0571177.0338609-.1187813.0631161-.1839852.0869694l-15.223439 5.5690151c-1.0578999.375541-2.2154057-.1372418-2.6576538-1.1504499l-.0557966-.1412301-13.82607143-38.9480742c-1.3533538-3.8126351.55073319-7.9962152 4.27544303-9.4954516l.230306-.08841 3.9036912-1.4280995-1.2843148-3.5297097c-.2125041-.5838502.0885314-1.22942281.6723815-1.44192688.5449268-.19833714 1.1436208.05067573 1.3937984.55945078l.0481285.1129308 1.2830064 3.526255 23.449-8.57899998-1.3134247-3.60892117c-.2125041-.58385014.0885314-1.22942278.6723815-1.44192686.5449268-.19833713 1.1436208.05067573 1.3937984.55945074zm6.4634105 4.25171422-.2033115.06978459-4.1308542 1.51089848 1.2939383 3.55341978c.212504.5838501-.0885314 1.2294227-.6723816 1.4419268-.5449268.1983372-1.1436207-.0506757-1.3937984-.5594507l-.0481284-.1129308-1.2926299-3.54996508-23.448 8.57899998 1.3220481 3.6326312c.2125041.5838501-.0885314 1.2294228-.6723815 1.4419268-.5449268.1983372-1.1436208-.0506757-1.3937984-.5594507l-.0481285-.1129308-1.3217397-3.6291765-3.8999427 1.4272393c-2.64705304.9675505-4.05305717 3.8383997-3.22792268 6.5077585l.06979557.2102819 13.78375191 38.8290254 15.0858328-5.5186506c.0447842-.0163832.0899369-.0297419.1352342-.04018.0046574-.0024847.0098658-.0055062.0151073-.0084919 3.0983222-1.7648778 5.5370009-5.0669632 7.6204642-9.6955298.4600522-1.0220397.8910022-2.080071 1.3419601-3.2720957l.4286631-1.1546435.6018315-1.6563671.3670011-.9898645c.8076951-2.13374 1.0996628-2.4593581 2.1515156-2.4017858 7.1725442.3942944 11.6769292-2.256562 11.558089-5.9063904-.0021749-.0667957.0015189-.1324207.0106168-.1963791-.076918-2.1824594-.4781874-4.389684-1.2316975-6.5579058l-.1245728-.3493103-6.0807328-17.62826323c-.9387889-2.72223528-3.8789619-4.1762194-6.595829-3.30413042z" fill="#0f1031" fill-rule="nonzero"/><path d="m28.3550086 43.5878639c1.4327742-.5240411 3.0176537.2118795 3.5414213 1.6439019.5247929 1.4325005-.2118795 3.0176537-1.6439019 3.5414212-1.4317488.5245193-3.0176537-.2118795-3.5414212-1.6439018-.5237676-1.4320224.2118795-3.0176537 1.6439018-3.5414213zm12.6184789-4.6169544c1.4327741-.5240411 3.0179273.2126313 3.5416948 1.6446536.5240412 1.4327742-.2118795 3.0176537-1.6439018 3.5414213-1.4320224.5237675-3.0176537-.2118795-3.5414213-1.6439019-.5245193-1.4317487.2118795-3.0176537 1.6436283-3.542173zm-16.7622262-6.1826679c1.4327754-.5240379 3.0179285.2126345 3.5421775 1.6436303.5240379 1.4327753-.2126345 3.0179285-1.6443821 3.5424511-1.4320236.5237642-3.0179285-.2126346-3.5416993-1.6446557-.5237643-1.4320236.2118828-3.0176549 1.6439039-3.5414257zm12.3700116-4.525554c1.4327742-.5240411 3.0179273.2126313 3.5416949 1.6446536.5240411 1.4327742-.2126313 3.0179273-1.6446537 3.5416949-1.4320223.5237675-3.0179272-.2126313-3.5416948-1.6446536-.5237675-1.4320224.2126312-3.0179273 1.6446536-3.5416949zm12.3693065-4.5253861c1.4327741-.5240412 3.0179273.2126312 3.5416948 1.6446536.5240412 1.4327741-.2126312 3.0179273-1.6446536 3.5416948-1.4320224.5237676-3.0176537-.2118795-3.5414212-1.6439018-.5237676-1.4320224.2126312-3.0179273 1.64438-3.5424466z" fill="#334aff"/><g fill-rule="nonzero" transform="translate(.841539 37.606341)"><path d="m23.709931 11.8550069c0 6.5470345-5.3073103 11.8543448-11.8551724 11.8543448-6.54703446 0-11.85434481-5.3073103-11.85434481-11.8543448 0-6.54703449 5.30731035-11.85517242 11.85434481-11.85517242 6.5478621 0 11.8551724 5.30813793 11.8551724 11.85517242" fill="#ffcf48"/><path d="m11.3017655 11.9455448-4.14537929-.1183448 9.40386209-8.64910345-4.1155862 7.72965515 4.1453793.1183449-8.82289657 9.3682758z" fill="#161b7d"/></g></g></svg>
 
common/src/resources/images/logo/filterbar.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="68" viewBox="0 0 68 68" width="68" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.25 .5)"><path d="m0 2.2037037 9.54577706 10.8333333h47.77430774l8.8836189-10.8333333z"/><path d="m0 2.2037037 9.54577706 10.8333333h47.77430774l8.8836189-10.8333333z"/><g transform="translate(.203704)"><path d="m43.1948338 43.5825617-18.8208527 15.5568205-.7102561 6.711698h20.5013253v-13.2104372z" fill="#3d54ff" transform="matrix(1 0 0 -1 0 109.433642)"/><path d="m65.0532859.22857154c1.5060415 0 2.3602503 1.69094636 1.5076349 2.91436363l-.0878749.11686326-22.1940459 26.12720157.000143 35.6586541c0 1.4854715-1.6382186 2.3248218-2.8288362 1.5671454l-.1174925-.0811263-.114045-.0919845-17.5813789-15.2951001c-.3597268-.3116105-.5828067-.7494026-.627939-1.218433l-.0085026-.1771653-.0009488-20.3629903-22.20828245-26.1458779c-.91679441-1.1303931-.22353585-2.78135563 1.14304687-2.98967799l.14373409-.01632393.14830738-.00554864zm-.8692859 2.24942846h-61.089l7.3045402 8.5978116.0363615-.0045395.1225812-.0066014h38.3762249c.6213204 0 1.125.5036797 1.125 1.125 0 .579899-.4387609 1.0573199-1.0024188 1.1183987l-.1225812.0066013-36.6343787-.0000992 12.5370751 14.7587418c.1911732.2352902.320234.5128597.378377.807015l.0263052.178278.0088624.1810253-.0009488 20.3253684 16.779 14.597.000143-34.9223684c0-.3198466.0827727-.6326301.2435943-.9145186l.0868931-.1382594.09977-.1324481z" fill="#0f1031" fill-rule="nonzero"/><path d="m25.009627 43.490743h17.847279" stroke="#0f1031" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25"/></g></g></svg>
 
common/src/resources/images/logo/image-widget-plus.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="67" viewBox="0 0 91 67" width="91" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(.083333 -.5)"><path d="m55.7078071 53.8617021 15.0717717-11.540375c.7023576-.5377914 1.6745762-.550297 2.3905343-.0307493l15.9454856 11.5711243v6.8151261c-.4969459 2.2538176-1.0608695 3.6961769-1.6917706 4.327078-.6309011.6309012-1.944205 1.0657693-3.9399118 1.3046044h-14.8770184z" fill="#3d54ff"/><path d="m84.1155987.875c3.307572 0 6.0028057 2.62173207 6.1209605 5.90045566l.0040395.22454434v54.3085106c0 3.307572-2.6217321 6.0028057-5.9004556 6.1209605l-.2245444.0040395h-77.1155987c-3.307572 0-6.00280567-2.621732-6.12096046-5.9004556l-.00403954-.2245444v-54.3085106c0-3.307572 2.62173207-6.00280567 5.90045566-6.12096046l.22454434-.00403954zm-52.8120625 33.9700069-.1317052.097278-28.046831 22.6507151v3.7155106c0 2.0732252 1.62815979 3.7661733 3.67559301 3.8699579l.19940699.0050421 58.764-.0005106-32.1310826-30.1493436c-.6424102-.6028009-1.6106146-.6728028-2.3293812-.1886495zm52.8120625-31.7200069h-77.1155987c-2.07322517 0-3.76617325 1.62815979-3.86995787 3.67559301l-.00504213.19940699v47.701l26.6331306-21.5091297c1.5447682-1.2476127 3.7486049-1.2123979 5.2504736.0551141l.1639164.1459033 33.8784794 31.7906229h15.0645987c2.0732252 0 3.7661733-1.6281598 3.8699579-3.675593l.0050421-.199407v-54.3085106c0-2.07322517-1.6281598-3.76617325-3.675593-3.86995787zm-27.3117019 13.2835199c4.4182781 0 8 3.581722 8 8s-3.5817219 8-8 8c-4.4182779 0-8-3.581722-8-8s3.5817221-8 8-8zm.0000001 2.25c-3.1756374 0-5.7500001 2.5743627-5.7500001 5.75s2.5743627 5.75 5.7500001 5.75c3.1756373 0 5.7499999-2.5743627 5.7499999-5.75 0-3.1756374-2.5743626-5.75-5.7499999-5.75z" fill="#0f1031" fill-rule="nonzero"/></g></svg>
 
common/src/resources/images/logo/promoter.svg DELETED
@@ -1 +0,0 @@
1
- <svg height="68" viewBox="0 0 69 68" width="69" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd" transform="translate(-.333333 -.5)"><path d="m2 2h32.6483832c1.2146253 0 2.2756467.81031839 2.579303 1.96979125l7.5354717 28.81968245h-33.9766577" fill="#3d54ff"/><path d="m42.0995814 15.6842105h22.7228536l-6.8033246 15.2525374 8.9808896 15.5369363h-33.0635728l-2.8574798-11.8309985" fill="#3d54ff"/><path d="m34.6483832.875c1.6575134 0 3.1172732 1.06612992 3.6129129 2.62127715l.0547999.18892801 2.8756685 10.99873884 25.1716846.0002665-7.2234491 16.1937895 9.5930777 16.5956842h-35.5656575l-3.6036557-13.5597402h-17.155l9.4876598 32.7732407c.1727631.5968181-.1710014 1.220687-.7678195 1.3934501-.5570302.1612456-1.1376247-.1274618-1.3530244-.651908l-.0404257-.1159115-18.8263256-65.03791046-.02319694-.11955349-.01064504-.13093739.00094996-.07729456.01239462-.12140511.02327021-.11105203.02776887-.09066835.04386668-.10608478.05268117-.09803882.06231218-.0926188.06231824-.0764367.09244251-.09202274.1184835-.09217454.07436852-.04589153.08342874-.04279676.10840036-.0432734.1268599-.03478587.13865084-.0209112.09681658-.00395877zm28.6326168 15.808944h-21.5662355l4.1368031 15.8209436-7.1165805 12.9671124 26.5310129.001-8.3680241-14.4775905zm-28.6326168-13.559h-31.15261869l8.26199999 28.539056h31.5472355l-7.165611-27.40919272c-.1618922-.61816467-.7059243-1.06660963-1.3512693-1.12365489z" fill="#0f1031" fill-rule="nonzero"/><path d="m24.2190974 12.6825928h-3.7176953l1.1608071 3.8478527h3.7048788c1.2248896 0 1.9105714-.7440115 1.5681882-1.8985424-.3497069-1.1790395-1.4867119-1.9493103-2.7161788-1.9493103zm-9.4512403-3.71830709h8.9578057c4.0225446 0 6.9804056 2.59003549 7.8885449 5.69387659.9008156 3.0767066-.5355458 5.6159743-4.5196409 5.6159743h-4.3035917l1.7485344 5.7954123h-4.5461894z" fill="#fff"/></g></svg>
 
common/src/resources/images/logo/tec-brand.svg DELETED
@@ -1 +0,0 @@
1
- <svg width="391" height="83" xmlns="http://www.w3.org/2000/svg"><g fill="#0F1031" fill-rule="evenodd"><path d="M36.274 53.661c-2.682 1.088-5.163 1.675-6.967 1.578-2.337-.13-3.335-1.161-3.339-1.549-.002-.276.87-1.14 3.56-1.336.421-.03.866-.05 1.325-.05 1.838 0 3.883.303 5.42 1.357m5.017 23.7c-9.832 2.712-20.223.21-26.474-6.378-4.424-4.662-5.907-10.497-4.07-16.007 3.694-11.087 21.402-17.742 32.718-17.742.122 0 .243.001.363.003 4.217.054 7.137 1.073 7.621 2.661.272.89-.37 2.445-1.716 4.16-2.374 3.03-5.983 5.773-9.653 7.786-2.327-2.553-6.06-3.714-10.833-3.37-5.314.385-7.187 2.964-7.168 5.25.02 2.49 2.436 5.145 7.013 5.4 2.77.15 6.08-.702 9.403-2.157.488 1.914.337 4.425-.46 7.42a1.946 1.946 0 003.758 1.001c1.085-4.068 1.165-7.48.245-10.19 4.34-2.436 8.351-5.671 10.757-8.738 2.257-2.878 3.056-5.468 2.376-7.697-.494-1.62-1.656-2.903-3.408-3.814.133-14.618 2.725-24.716 5.058-24.73h.014c.343 0 .806.077 1.375.642 1.895 1.884 4.153 8.069 4.153 26.836 0 18.518-1.585 34.284-21.072 39.664M22.728 34.17c-.002-.05.004-.097-.002-.147l-.026-.216c-.28-3.992.2-7.138 1.417-8.825.604-.838 1.363-1.286 2.387-1.412 1.428-.173 2.59.196 3.565 1.133 1.89 1.816 2.992 5.743 2.887 10.04-3.239.798-6.556 1.937-9.707 3.402a41.867 41.867 0 01-.52-3.976m16.758-6.778c.716-.78 1.63-1.159 2.796-1.159 1.853 0 2.658.606 3.103 1.062 1.064 1.09 1.638 3.205 1.717 6.284a25.888 25.888 0 00-3.62-.235c-1.757 0-3.67.152-5.669.443-.086-2.822.503-5.121 1.673-6.395m21.465-19.29c-1.167-1.16-2.592-1.774-4.122-1.774h-.034c-5.126.031-6.894 7.679-7.779 13.428-.259 1.688-.46 3.41-.615 5.076-.077-.085-.152-.173-.231-.255-1.448-1.482-3.429-2.234-5.888-2.234-2.252 0-4.21.835-5.662 2.417a8.55 8.55 0 00-1.091 1.534c-.642-1.688-1.539-3.216-2.764-4.395-1.822-1.75-4.15-2.508-6.737-2.19-2.085.256-3.837 1.292-5.068 2.997l-.014.023C18.815 12.097 14.762-.741 7.69-.007 5.95.176 4.413 1.113 3.244 2.7-2.21 10.116.35 32.17 2.721 44.03a1.947 1.947 0 002.29 1.526 1.945 1.945 0 001.525-2.29C2.564 23.407 3.45 8.987 6.38 5.007c.688-.935 1.31-1.1 1.719-1.144C12 3.456 16.81 17.095 18.84 34.31c.163 2.132.486 4.128.797 5.68.001.007.005.013.006.02-5.846 3.37-10.67 7.978-12.589 13.736-2.306 6.917-.505 14.177 4.94 19.915 5.316 5.602 13.159 8.665 21.392 8.665 2.962 0 5.976-.398 8.939-1.215 22.098-6.1 23.928-24.017 23.928-43.414 0-16.596-1.684-26-5.301-29.596M102.82 29.566H85.49a.375.375 0 00-.375.375v2.973c0 .207.168.375.375.375h6.618v19.186c0 .206.168.375.375.375h3.378a.376.376 0 00.375-.375V33.289h6.584a.375.375 0 00.375-.375v-2.973a.375.375 0 00-.375-.375M114.822 35.377c-1.917 0-3.924.8-5.402 2.146V29.94a.376.376 0 00-.375-.375h-3.04a.376.376 0 00-.375.375v22.534c0 .207.168.375.375.375h3.04a.375.375 0 00.375-.375V40.944c.808-1.055 2.388-2.114 4.118-2.114 2.177 0 3.105.939 3.105 3.138v10.507c0 .207.168.375.375.375h3.04a.376.376 0 00.376-.375v-11.52c0-3.649-1.94-5.578-5.612-5.578M131.824 38.627c2.857 0 4.343 2.053 4.565 4.114h-9.145c.314-2.061 1.84-4.114 4.58-4.114m0-3.25c-4.875 0-8.55 3.836-8.55 8.922 0 5.273 3.627 8.956 8.82 8.956 2.763 0 5.12-.878 6.816-2.539a.373.373 0 00.044-.485l-1.42-1.994a.376.376 0 00-.276-.157.393.393 0 00-.298.113c-1.087 1.118-2.835 1.812-4.561 1.812-3.276 0-4.797-2.306-5.117-4.317h12.481a.376.376 0 00.375-.375v-.744c0-5.412-3.419-9.192-8.314-9.192M164.3 29.566h-15.135a.376.376 0 00-.375.375v22.534c0 .206.169.375.375.375H164.3a.376.376 0 00.375-.375v-2.973a.375.375 0 00-.375-.375h-11.382V42.85h11.145a.376.376 0 00.375-.375v-2.973a.375.375 0 00-.375-.375h-11.145V33.29H164.3a.375.375 0 00.375-.375v-2.973a.375.375 0 00-.375-.375M183.119 35.783h-3.278a.374.374 0 00-.348.236l-4.753 11.93-4.752-11.93a.373.373 0 00-.349-.236h-3.243a.375.375 0 00-.346.517l6.722 16.318c.058.14.194.232.346.232h3.278a.374.374 0 00.346-.232l6.723-16.318a.374.374 0 00-.346-.517M192.484 38.627c2.857 0 4.344 2.053 4.565 4.114h-9.145c.314-2.061 1.84-4.114 4.58-4.114m0-3.25c-4.874 0-8.55 3.836-8.55 8.922 0 5.273 3.627 8.956 8.82 8.956 2.763 0 5.12-.878 6.817-2.539a.373.373 0 00.043-.485l-1.419-1.994a.376.376 0 00-.277-.157.394.394 0 00-.297.113c-1.088 1.118-2.836 1.812-4.562 1.812-3.277 0-4.798-2.306-5.117-4.317h12.481a.376.376 0 00.375-.375v-.744c0-5.412-3.418-9.192-8.314-9.192M212.797 35.377c-2.702 0-4.603 1.414-5.402 2.143v-1.362a.375.375 0 00-.375-.375h-3.04a.375.375 0 00-.375.375v16.317c0 .207.168.375.375.375h3.04a.375.375 0 00.375-.375V40.944c.808-1.055 2.388-2.114 4.118-2.114 2.147 0 3.105.988 3.105 3.206v10.439c0 .207.168.375.375.375h3.04a.376.376 0 00.376-.375V41.023c0-3.693-1.94-5.646-5.612-5.646M230.45 49.416a.373.373 0 00-.277-.247.389.389 0 00-.357.115c-.225.25-.751.519-1.377.519-1.125 0-1.212-1.239-1.212-1.619v-8.982h2.936a.376.376 0 00.375-.375v-2.67a.376.376 0 00-.375-.375h-2.936v-4.084a.375.375 0 00-.375-.375h-3.04a.375.375 0 00-.375.375v4.084h-2.328a.376.376 0 00-.375.375v2.67c0 .206.168.375.375.375h2.328v9.658c0 2.834 1.512 4.395 4.26 4.395 1.493 0 2.616-.376 3.433-1.15a.375.375 0 00.097-.392l-.777-2.297zM240.62 42.346c-2.046-.477-3.494-.9-3.494-2 0-1.081 1.137-1.753 2.97-1.753 1.83 0 3.612.73 4.54 1.857.071.087.177.136.29.136h.023a.374.374 0 00.294-.174l1.35-2.128a.376.376 0 00-.057-.473c-1.675-1.592-3.913-2.434-6.474-2.434-4.53 0-6.591 2.699-6.591 5.206 0 3.804 3.496 4.614 6.306 5.264 2.002.453 3.659.936 3.659 2.27 0 1.225-1.173 1.956-3.138 1.956-2.178 0-4.22-1.145-5.197-2.21a.373.373 0 00-.276-.122l-.03.002a.38.38 0 00-.284.169l-1.453 2.23a.375.375 0 00.047.467c1.697 1.73 4.137 2.646 7.058 2.646 4.23 0 6.963-2.11 6.963-5.374 0-4.062-3.607-4.878-6.506-5.535M267.394 32.951c2.36 0 4.568 1.188 5.762 3.1.101.163.321.224.495.134l2.871-1.52a.376.376 0 00.136-.54c-2.181-3.271-5.298-4.93-9.264-4.93-6.801 0-11.93 5.171-11.93 12.03 0 6.858 5.129 12.03 11.93 12.03 3.925 0 7.04-1.658 9.263-4.928a.377.377 0 00-.135-.542l-2.872-1.52a.384.384 0 00-.494.133c-1.195 1.913-3.402 3.1-5.762 3.1-4.246 0-7.1-3.324-7.1-8.273 0-5.026 2.788-8.274 7.1-8.274M289.688 46.253v2.512c-.814 1.01-2.238 1.612-3.814 1.612-1.988 0-3.375-1.18-3.375-2.868 0-1.689 1.387-2.869 3.375-2.869 1.576 0 3 .603 3.814 1.613m-3.138-10.876c-2.737 0-5.076.934-6.952 2.777a.376.376 0 00-.054.467l1.317 2.095a.375.375 0 00.582.065c1.38-1.38 2.896-2.052 4.633-2.052 2.194 0 3.612 1.125 3.612 2.868v1.8c-1.255-1.07-2.967-1.635-4.963-1.635-2.914 0-6.05 1.788-6.05 5.713 0 3.755 3.117 5.78 6.05 5.78 1.944 0 3.656-.583 4.963-1.688v.908c0 .207.168.375.375.375h3.04a.375.375 0 00.375-.375V41.462c0-3.867-2.525-6.085-6.928-6.085M301.347 29.566h-3.04a.375.375 0 00-.375.375v22.534c0 .206.168.375.375.375h3.04a.376.376 0 00.375-.375V29.941a.375.375 0 00-.375-.375M313.678 38.627c2.857 0 4.343 2.053 4.565 4.114h-9.145c.314-2.061 1.84-4.114 4.58-4.114m0-3.25c-4.875 0-8.55 3.836-8.55 8.922 0 5.273 3.627 8.956 8.82 8.956 2.763 0 5.119-.878 6.816-2.539a.373.373 0 00.044-.485l-1.42-1.994a.376.376 0 00-.276-.157.401.401 0 00-.298.113c-1.087 1.118-2.835 1.812-4.561 1.812-3.276 0-4.797-2.306-5.117-4.317h12.481a.376.376 0 00.375-.375v-.744c0-5.412-3.419-9.192-8.314-9.192M333.99 35.377c-2.702 0-4.603 1.414-5.402 2.143v-1.362a.375.375 0 00-.375-.375h-3.04a.375.375 0 00-.375.375v16.317c0 .207.168.375.375.375h3.04a.375.375 0 00.375-.375V40.944c.808-1.055 2.388-2.114 4.118-2.114 2.147 0 3.105.988 3.105 3.206v10.439c0 .207.168.375.375.375h3.04a.376.376 0 00.376-.375V41.023c0-3.693-1.94-5.646-5.612-5.646M355.043 40.966V47.7c-.846 1.239-2.55 2.103-4.152 2.103-2.726 0-4.558-2.199-4.558-5.47 0-3.292 1.832-5.503 4.558-5.503 1.563 0 3.304.897 4.152 2.136m3.415-11.4h-3.04a.375.375 0 00-.375.375v7.57c-1.352-1.378-3.107-2.134-4.963-2.134-4.589 0-7.672 3.6-7.672 8.956 0 5.337 3.083 8.922 7.672 8.922 1.827 0 3.625-.766 4.963-2.107v1.327c0 .206.168.375.375.375h3.04a.376.376 0 00.375-.375V29.941a.375.375 0 00-.375-.375M373.354 46.253v2.512c-.814 1.01-2.238 1.612-3.814 1.612-1.988 0-3.375-1.