The Events Calendar - Version 5.2.1.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.2.1.2
Comparing to
See all releases

Code changes from version 5.2.0.1 to 5.2.1.2

Files changed (217) 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-pt_BR.mo +0 -0
  25. common/lang/tribe-common-pt_PT.mo +0 -0
  26. common/lang/tribe-common-ro_RO.mo +0 -0
  27. common/lang/tribe-common-ru_RU.mo +0 -0
  28. common/lang/tribe-common-sk_SK.mo +0 -0
  29. common/lang/tribe-common-sl_SI.mo +0 -0
  30. common/lang/tribe-common-sr_RS.mo +0 -0
  31. common/lang/tribe-common-sv_SE.mo +0 -0
  32. common/lang/tribe-common-tr_TR.mo +0 -0
  33. common/lang/tribe-common-zh_CN.mo +0 -0
  34. common/lang/tribe-common-zh_TW.mo +0 -0
  35. common/lang/tribe-common.pot +12 -12
  36. common/src/Tribe/Admin/Activation_Page.php +22 -0
  37. common/src/Tribe/Admin/Notice/Marketing.php +85 -114
  38. common/src/Tribe/Ajax/Dropdown.php +14 -8
  39. common/src/Tribe/Assets.php +12 -0
  40. common/src/Tribe/Log/Canonical_Formatter.php +78 -5
  41. common/src/Tribe/Log/Service_Provider.php +1 -1
  42. common/src/Tribe/Main.php +2 -1
  43. common/src/Tribe/Service_Providers/Widgets.php +77 -0
  44. common/src/Tribe/Widget/Manager.php +97 -0
  45. common/src/Tribe/Widget/Widget_Abstract.php +314 -0
  46. common/src/Tribe/Widget/Widget_Interface.php +207 -0
  47. common/src/admin-views/notices/tribe-bf-2018-et.php +0 -20
  48. common/src/admin-views/notices/tribe-bf-2018-general.php +0 -20
  49. common/src/admin-views/notices/tribe-bf-2018-tec.php +0 -20
  50. common/src/admin-views/notices/tribe-bf-general.php +22 -0
  51. common/src/admin-views/notices/tribe-gutenberg-release.php +0 -21
  52. common/src/admin-views/tribe-options-display.php +1 -1
  53. common/src/functions/utils.php +44 -13
  54. common/src/resources/css/app-shop.min.css +1 -1
  55. common/src/resources/css/tribe-common-admin.min.css +1 -1
  56. common/src/resources/images/header/welcome-desktop-et.jpg +0 -0
  57. common/src/resources/images/header/welcome-desktop-etplus.jpg +0 -0
  58. common/src/resources/images/header/welcome-mobile-et.jpg +0 -0
  59. common/src/resources/images/header/welcome-mobile-etplus.jpg +0 -0
  60. common/src/resources/images/icons/horns-white.svg +1 -0
  61. common/src/resources/images/icons/sale-burst.svg +12 -0
  62. common/src/resources/images/mascot.png +0 -0
  63. common/src/resources/images/welcome/calendar.jpg +0 -0
  64. common/src/resources/images/welcome/et-plus-upsell.jpg +0 -0
  65. common/src/resources/images/welcome/extension-library.jpg +0 -0
  66. common/src/resources/images/welcome/guide-book-green.jpg +0 -0
  67. common/src/resources/images/welcome/up-sell.jpg +0 -0
  68. common/vendor/autoload.php +1 -1
  69. common/vendor/autoload_52.php +1 -1
  70. common/vendor/composer/autoload_classmap.php +4 -0
  71. common/vendor/composer/autoload_real.php +4 -4
  72. common/vendor/composer/autoload_real_52.php +3 -3
  73. common/vendor/composer/autoload_static.php +9 -5
  74. common/vendor/composer/installed.json +7 -7
  75. common/vendor/faction23/a11y-dialog/a11y-dialog.min.js +1 -1
  76. common/vendor/freemius/README.md +72 -43
  77. common/vendor/freemius/assets/css/admin/account.css +1 -1
  78. common/vendor/freemius/assets/css/admin/add-ons.css +1 -1
  79. common/vendor/freemius/config.php +4 -1
  80. common/vendor/freemius/includes/class-freemius.php +840 -105
  81. common/vendor/freemius/includes/class-fs-api.php +1 -1
  82. common/vendor/freemius/includes/class-fs-plugin-updater.php +49 -6
  83. common/vendor/freemius/includes/class-fs-storage.php +1 -0
  84. common/vendor/freemius/includes/customizer/class-fs-customizer-support-section.php +2 -2
  85. common/vendor/freemius/includes/entities/class-fs-payment.php +2 -2
  86. common/vendor/freemius/includes/entities/class-fs-plugin-license.php +7 -0
  87. common/vendor/freemius/includes/entities/class-fs-site.php +4 -1
  88. common/vendor/freemius/includes/fs-essential-functions.php +37 -20
  89. common/vendor/freemius/includes/fs-plugin-info-dialog.php +36 -23
  90. common/vendor/freemius/includes/i18n.php +2 -0
  91. common/vendor/freemius/includes/managers/class-fs-admin-menu-manager.php +6 -1
  92. common/vendor/freemius/includes/sdk/FreemiusBase.php +1 -1
  93. common/vendor/freemius/includes/sdk/FreemiusWordPress.php +20 -12
  94. common/vendor/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php +1 -1
  95. common/vendor/freemius/languages/freemius-cs_CZ.mo +0 -0
  96. common/vendor/freemius/languages/freemius-da_DK.mo +0 -0
  97. common/vendor/freemius/languages/freemius-en.mo +0 -0
  98. common/vendor/freemius/languages/freemius-es_ES.mo +0 -0
  99. common/vendor/freemius/languages/freemius-fr_FR.mo +0 -0
  100. common/vendor/freemius/languages/freemius-he_IL.mo +0 -0
  101. common/vendor/freemius/languages/freemius-hu_HU.mo +0 -0
  102. common/vendor/freemius/languages/freemius-it_IT.mo +0 -0
  103. common/vendor/freemius/languages/freemius-ja.mo +0 -0
  104. common/vendor/freemius/languages/freemius-nl_NL.mo +0 -0
  105. common/vendor/freemius/languages/freemius-ru_RU.mo +0 -0
  106. common/vendor/freemius/languages/freemius-ta.mo +0 -0
  107. common/vendor/freemius/languages/freemius.pot +390 -358
  108. common/vendor/freemius/package.json +1 -1
  109. common/vendor/freemius/start.php +529 -521
  110. common/vendor/freemius/templates/account.php +84 -24
  111. common/vendor/freemius/templates/account/partials/addon.php +2 -2
  112. common/vendor/freemius/templates/account/payments.php +1 -1
  113. common/vendor/freemius/templates/add-ons.php +2 -2
  114. common/vendor/freemius/templates/auto-installation.php +1 -1
  115. common/vendor/freemius/templates/connect.php +12 -11
  116. common/vendor/freemius/templates/forms/affiliation.php +28 -5
  117. common/vendor/freemius/templates/forms/deactivation/form.php +18 -14
  118. common/vendor/freemius/templates/forms/license-activation.php +10 -8
  119. common/vendor/freemius/templates/forms/optout.php +17 -10
  120. common/vendor/freemius/templates/forms/subscription-cancellation.php +1 -1
  121. common/vendor/freemius/templates/forms/trial-start.php +1 -1
  122. common/vendor/freemius/templates/pricing.php +208 -176
  123. common/vendor/freemius/templates/secure-https-header.php +1 -1
  124. common/vendor/psr/log/Psr/Log/AbstractLogger.php +16 -16
  125. common/vendor/psr/log/Psr/Log/LoggerAwareTrait.php +1 -1
  126. lang/the-events-calendar-ar.mo +0 -0
  127. lang/the-events-calendar-bg_BG.mo +0 -0
  128. lang/the-events-calendar-ca.mo +0 -0
  129. lang/the-events-calendar-cs_CZ.mo +0 -0
  130. lang/the-events-calendar-da_DK.mo +0 -0
  131. lang/the-events-calendar-de_CH.mo +0 -0
  132. lang/the-events-calendar-de_DE.mo +0 -0
  133. lang/the-events-calendar-el.mo +0 -0
  134. lang/the-events-calendar-en_AU.mo +0 -0
  135. lang/the-events-calendar-en_CA.mo +0 -0
  136. lang/the-events-calendar-en_GB.mo +0 -0
  137. lang/the-events-calendar-en_NZ.mo +0 -0
  138. lang/the-events-calendar-en_ZA.mo +0 -0
  139. lang/the-events-calendar-es_CO.mo +0 -0
  140. lang/the-events-calendar-es_EC.mo +0 -0
  141. lang/the-events-calendar-es_ES.mo +0 -0
  142. lang/the-events-calendar-es_MX.mo +0 -0
  143. lang/the-events-calendar-es_VE.mo +0 -0
  144. lang/the-events-calendar-eu.mo +0 -0
  145. lang/the-events-calendar-fi.mo +0 -0
  146. lang/the-events-calendar-fr_CA.mo +0 -0
  147. lang/the-events-calendar-fr_FR.mo +0 -0
  148. lang/the-events-calendar-gl_ES.mo +0 -0
  149. lang/the-events-calendar-he_IL.mo +0 -0
  150. lang/the-events-calendar-hr.mo +0 -0
  151. lang/the-events-calendar-hu_HU.mo +0 -0
  152. lang/the-events-calendar-is_IS.mo +0 -0
  153. lang/the-events-calendar-it_IT.mo +0 -0
  154. lang/the-events-calendar-ja.mo +0 -0
  155. lang/the-events-calendar-lt_LT.mo +0 -0
  156. lang/the-events-calendar-nb_NO.mo +0 -0
  157. lang/the-events-calendar-nl_NL.mo +0 -0
  158. lang/the-events-calendar-nn_NO.mo +0 -0
  159. lang/the-events-calendar-pl_PL.mo +0 -0
  160. lang/the-events-calendar-pt_BR.mo +0 -0
  161. lang/the-events-calendar-pt_PT.mo +0 -0
  162. lang/the-events-calendar-ro_RO.mo +0 -0
  163. lang/the-events-calendar-ru_RU.mo +0 -0
  164. lang/the-events-calendar-sk_SK.mo +0 -0
  165. lang/the-events-calendar-sl_SI.mo +0 -0
  166. lang/the-events-calendar-sq.mo +0 -0
  167. lang/the-events-calendar-sr_RS.mo +0 -0
  168. lang/the-events-calendar-sv_SE.mo +0 -0
  169. lang/the-events-calendar-tr_TR.mo +0 -0
  170. lang/the-events-calendar-uk.mo +0 -0
  171. lang/the-events-calendar-zh_CN.mo +0 -0
  172. lang/the-events-calendar.pot +222 -204
  173. readme.txt +26 -10
  174. src/Tribe/Aggregator/Record/Queue_Processor.php +34 -2
  175. src/Tribe/Assets.php +0 -13
  176. src/Tribe/Integrations/WPML/Views/V2/Filters.php +165 -0
  177. src/Tribe/Integrations/WPML/WPML.php +14 -0
  178. src/Tribe/Integrations/X_Theme/X_Theme.php +1 -1
  179. src/Tribe/Main.php +2 -1
  180. src/Tribe/Views/V2/Assets.php +43 -0
  181. src/Tribe/Views/V2/Hooks.php +3 -3
  182. src/Tribe/Views/V2/Rest_Endpoint.php +56 -10
  183. src/Tribe/Views/V2/Template.php +9 -1
  184. src/Tribe/Views/V2/Template_Bootstrap.php +19 -2
  185. src/Tribe/Views/V2/View.php +35 -1
  186. src/Tribe/Views/V2/View_Interface.php +9 -0
  187. src/Tribe/Views/V2/Views/Latest_Past_View.php +6 -5
  188. src/Tribe/Views/V2/Views/Traits/iCal_Data.php +6 -2
  189. src/Tribe/Views/V2/Views/Widgets/Widget_List_View.php +88 -0
  190. src/Tribe/Views/V2/Widgets/Service_Provider.php +91 -0
  191. src/Tribe/Views/V2/Widgets/Widget_Abstract.php +141 -0
  192. src/Tribe/Views/V2/Widgets/Widget_List.php +105 -0
  193. src/Tribe/iCal.php +10 -1
  194. src/functions/views/provider.php +15 -0
  195. src/resources/css/freemius.min.css +1 -1
  196. src/resources/css/widgets-full.min.css +1 -0
  197. src/resources/css/widgets-skeleton.min.css +1 -0
  198. src/resources/js/views/manager.js +1 -1
  199. src/views/v2/day.php +3 -1
  200. src/views/v2/list.php +3 -1
  201. src/views/v2/month.php +2 -0
  202. src/views/v2/widgets/events-list.php +120 -0
  203. src/views/v2/widgets/events-list/event.php +46 -0
  204. src/views/v2/widgets/events-list/event/cost.php +28 -0
  205. src/views/v2/widgets/events-list/event/date-tag.php +42 -0
  206. src/views/v2/widgets/events-list/event/date.php +32 -0
  207. src/views/v2/widgets/events-list/event/date/featured.php +31 -0
  208. src/views/v2/widgets/events-list/event/organizer.php +19 -0
  209. src/views/v2/widgets/events-list/event/title.php +31 -0
  210. src/views/v2/widgets/events-list/event/venue.php +91 -0
  211. src/views/v2/widgets/events-list/view-more.php +30 -0
  212. src/views/v2/widgets/widget-list.php +9 -0
  213. the-events-calendar.php +2 -2
  214. vendor/autoload.php +1 -1
  215. vendor/composer/autoload_classmap.php +5 -0
  216. vendor/composer/autoload_real.php +4 -4
  217. vendor/composer/autoload_static.php +9 -4
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-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
@@ -2,29 +2,29 @@
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.7\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
- "POT-Creation-Date: 2020-08-20 16:27:52+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-08-20 16:27\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
 
@@ -223,15 +223,15 @@ msgstr ""
223
  msgid "Cannot look for Terms without a taxonomy"
224
  msgstr ""
225
 
226
- #: src/Tribe/Ajax/Dropdown.php:180
227
  msgid "Missing data source for this dropdown"
228
  msgstr ""
229
 
230
- #: src/Tribe/Ajax/Dropdown.php:193
231
  msgid "Empty data set for this dropdown"
232
  msgstr ""
233
 
234
- #: src/Tribe/Ajax/Dropdown.php:243
235
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
236
  msgstr ""
237
 
@@ -2510,11 +2510,11 @@ msgstr ""
2510
  msgid "Invalid Key"
2511
  msgstr ""
2512
 
2513
- #: src/Tribe/Support.php:371 src/Tribe/Support.php:397
2514
  msgid "Permission Error"
2515
  msgstr ""
2516
 
2517
- #: src/Tribe/Support.php:385
2518
  msgid "Unique System Info Key Generated"
2519
  msgstr ""
2520
 
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.11\n"
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
+ "POT-Creation-Date: 2020-10-14 15:50:53+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-10-14 15:50\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
 
223
  msgid "Cannot look for Terms without a taxonomy"
224
  msgstr ""
225
 
226
+ #: src/Tribe/Ajax/Dropdown.php:186
227
  msgid "Missing data source for this dropdown"
228
  msgstr ""
229
 
230
+ #: src/Tribe/Ajax/Dropdown.php:199
231
  msgid "Empty data set for this dropdown"
232
  msgstr ""
233
 
234
+ #: src/Tribe/Ajax/Dropdown.php:249
235
  msgid "The \"%s\" source is invalid and cannot be reached on \"%s\" instance."
236
  msgstr ""
237
 
2510
  msgid "Invalid Key"
2511
  msgstr ""
2512
 
2513
+ #: src/Tribe/Support.php:376 src/Tribe/Support.php:402
2514
  msgid "Permission Error"
2515
  msgstr ""
2516
 
2517
+ #: src/Tribe/Support.php:390
2518
  msgid "Unique System Info Key Generated"
2519
  msgstr ""
2520
 
common/src/Tribe/Admin/Activation_Page.php CHANGED
@@ -43,6 +43,28 @@ class Tribe__Admin__Activation_Page {
43
  $this->hooks();
44
  }
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  /**
47
  * Listen for opportunities to show update and welcome splash pages.
48
  */
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
  */
common/src/Tribe/Admin/Notice/Marketing.php CHANGED
@@ -4,6 +4,9 @@
4
  *
5
  * @since 4.7.23
6
  */
 
 
 
7
  class Tribe__Admin__Notice__Marketing {
8
 
9
  /**
@@ -36,179 +39,147 @@ class Tribe__Admin__Notice__Marketing {
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
  }
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
  * @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 TBD
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 TBD
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 TBD
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 TBD
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 TBD
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 TBD
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 TBD
153
  *
154
  * @return string
155
  */
156
+ public function black_friday_display_notice() {
 
157
  Tribe__Assets::instance()->enqueue( array( '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://m.tri.be/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
  }
common/src/Tribe/Ajax/Dropdown.php CHANGED
@@ -24,15 +24,15 @@ class Tribe__Ajax__Dropdown {
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' ) );
@@ -43,7 +43,13 @@ class Tribe__Ajax__Dropdown {
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,7 +59,7 @@ class Tribe__Ajax__Dropdown {
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,7 +73,7 @@ class Tribe__Ajax__Dropdown {
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 );
24
  *
25
  * @since 4.6
26
  *
27
+ * @param string|array $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 = [];
36
 
37
  if ( empty( $args['taxonomy'] ) ) {
38
  $this->error( esc_attr__( 'Cannot look for Terms without a taxonomy', 'tribe-common' ) );
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
  $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
  // 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 );
common/src/Tribe/Assets.php CHANGED
@@ -255,6 +255,11 @@ class Tribe__Assets {
255
  $this->localized[] = $localize->name;
256
  }
257
  }
 
 
 
 
 
258
  } else {
259
  wp_enqueue_style( $asset->slug );
260
  }
@@ -443,6 +448,8 @@ class Tribe__Assets {
443
  // Bigger Variables at the end.
444
  'localize' => [],
445
  'conditionals' => [],
 
 
446
  ];
447
 
448
  // Merge Arguments.
@@ -531,6 +538,11 @@ class Tribe__Assets {
531
  $asset->groups = array_unique( $asset->groups );
532
  }
533
 
 
 
 
 
 
534
  /**
535
  * Filter an Asset loading variables.
536
  *
255
  $this->localized[] = $localize->name;
256
  }
257
  }
258
+
259
+ // If available, load the script translations.
260
+ if ( isset( $asset->translations['domain'], $asset->translations['path'] ) && function_exists( 'wp_set_script_translations' ) ) {
261
+ wp_set_script_translations( $asset->slug, $asset->translations['domain'], $asset->translations['path'] );
262
+ }
263
  } else {
264
  wp_enqueue_style( $asset->slug );
265
  }
448
  // Bigger Variables at the end.
449
  'localize' => [],
450
  'conditionals' => [],
451
+ // Used to handle Translations handled in the JavaScript side of the Assets.
452
+ 'translations' => [],
453
  ];
454
 
455
  // Merge Arguments.
538
  $asset->groups = array_unique( $asset->groups );
539
  }
540
 
541
+ if ( isset( $arguments['translations']['domain'], $arguments['translations']['path'] ) ) {
542
+ $asset->translastions['domain'] = $arguments['translations']['domain'];
543
+ $asset->translastions['path'] = $arguments['translations']['path'];
544
+ }
545
+
546
  /**
547
  * Filter an Asset loading variables.
548
  *
common/src/Tribe/Log/Canonical_Formatter.php CHANGED
@@ -11,9 +11,37 @@
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,14 +57,59 @@ class Canonical_Formatter extends LineFormatter {
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
  /**
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 TBD
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 TBD
27
+ *
28
+ * @var string Our standard format Monolog LineFormatter.
29
+ */
30
+ protected $standard_formatter;
31
+
32
+ /**
33
+ * @since TBD
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 TBD
41
+ *
42
+ * @var string Our context-aware Monolog LineFormatter.
43
+ */
44
+ protected $context_formatter;
45
 
46
  /**
47
  * Formats a log record.
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 TBD
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 TBD
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 TBD
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
  /**
common/src/Tribe/Log/Service_Provider.php CHANGED
@@ -70,7 +70,7 @@ class Service_Provider extends \tad_DI52_ServiceProvider {
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.
70
  */
71
  $level_threshold = apply_filters( 'tribe_log_level', Logger::WARNING );
72
 
73
+ $error_log_handler = new ErrorLogHandler( ErrorLogHandler::OPERATING_SYSTEM, $level_threshold );
74
 
75
  /**
76
  * Filters whether to use canonical format for the logs or not.
common/src/Tribe/Main.php CHANGED
@@ -19,7 +19,7 @@ class Tribe__Main {
19
  const OPTIONNAME = 'tribe_events_calendar_options';
20
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
21
 
22
- const VERSION = '4.12.10';
23
 
24
  const FEED_URL = 'https://theeventscalendar.com/feed/';
25
 
@@ -637,6 +637,7 @@ class Tribe__Main {
637
  tribe_register_provider( Tribe\Service_Providers\Body_Classes::class );
638
  tribe_register_provider( Tribe\Log\Service_Provider::class );
639
  tribe_register_provider( Tribe\Service_Providers\Crons::class );
 
640
  }
641
 
642
  /**
19
  const OPTIONNAME = 'tribe_events_calendar_options';
20
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
21
 
22
+ const VERSION = '4.12.12.1';
23
 
24
  const FEED_URL = 'https://theeventscalendar.com/feed/';
25
 
637
  tribe_register_provider( Tribe\Service_Providers\Body_Classes::class );
638
  tribe_register_provider( Tribe\Log\Service_Provider::class );
639
  tribe_register_provider( Tribe\Service_Providers\Crons::class );
640
+ tribe_register_provider( Tribe\Service_Providers\Widgets::class );
641
  }
642
 
643
  /**
common/src/Tribe/Service_Providers/Widgets.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Tribe\Service_Providers;
3
+
4
+ use Tribe\Widget\Manager;
5
+
6
+ /**
7
+ * Class Widget
8
+ *
9
+ * @since 5.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 5.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 5.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 5.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 5.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 5.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/Widget/Manager.php ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widgets manager for Tribe plugins.
4
+ *
5
+ * @since 5.12.12
6
+ *
7
+ * @package Tribe\Widget
8
+ */
9
+
10
+ namespace Tribe\Widget;
11
+
12
+ /**
13
+ * Class Widget Manager.
14
+ *
15
+ * @since 5.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 5.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 5.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 5.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 5.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 5.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 5.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 ADDED
@@ -0,0 +1,314 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Tribe\Widget;
4
+
5
+ use Tribe__Utils__Array as Arr;
6
+
7
+ /**
8
+ * The abstract base without Views that all widgets should implement.
9
+ *
10
+ * @since 5.12.12
11
+ *
12
+ * @package Tribe\Widget
13
+ */
14
+ abstract class Widget_Abstract extends \WP_Widget implements Widget_Interface {
15
+
16
+ /**
17
+ * Slug of the current widget.
18
+ *
19
+ * @since 5.12.12
20
+ *
21
+ * @var string
22
+ */
23
+ protected $slug;
24
+
25
+ /**
26
+ * Default arguments to be merged into final arguments of the widget.
27
+ *
28
+ * @since 5.12.12
29
+ *
30
+ * @var array<string,mixed>
31
+ */
32
+ protected $default_arguments = [];
33
+
34
+ /**
35
+ * Array map allowing aliased widget arguments.
36
+ *
37
+ * The array keys are aliases of the array values (i.e. the "real" widget attributes to parse).
38
+ * Example array: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
39
+ * Example widget usage: [some_tag alias=17 to='Fred'] will be parsed as [some_tag canonical=17 to='Fred']
40
+ *
41
+ * @since 5.12.12
42
+ *
43
+ * @var array<string,string>
44
+ */
45
+ protected $aliased_arguments = [];
46
+
47
+ /**
48
+ * Array of callbacks for validation of arguments.
49
+ *
50
+ * @since 5.12.12
51
+ *
52
+ * @var array<string,callable>
53
+ */
54
+ protected $validate_arguments_map = [];
55
+
56
+ /**
57
+ * Arguments of the current widget.
58
+ *
59
+ * @since 5.12.12
60
+ *
61
+ * @var array<string,mixed>
62
+ */
63
+ protected $arguments;
64
+
65
+ /**
66
+ * HTML content of the current widget.
67
+ *
68
+ * @since 5.12.12
69
+ *
70
+ * @var string
71
+ */
72
+ protected $content;
73
+
74
+ /**
75
+ * {@inheritDoc}
76
+ */
77
+ public function __construct( $id_base = '', $name = '', $widget_options = [], $control_options = [] ) {
78
+ $arguments = $this->get_arguments();
79
+
80
+ parent::__construct(
81
+ Arr::get( $arguments, 'id_base', '' ),
82
+ Arr::get( $arguments, 'name', '' ),
83
+ Arr::get( $arguments, 'widget_options', [] ),
84
+ Arr::get( $arguments, 'control_options', [] )
85
+ );
86
+
87
+ // @todo add what this does in in TEC-3612 & TEC-3613.
88
+ $this->setup();
89
+ }
90
+
91
+ /**
92
+ * Setup the widget.
93
+ *
94
+ * @todo update in TEC-3612 & TEC-3613
95
+ *
96
+ * @since 5.12.12
97
+ *
98
+ * @return mixed
99
+ */
100
+ public abstract function setup();
101
+
102
+ /**
103
+ * Echoes the widget content.
104
+ *
105
+ * @todo Widget display will be handled in TEC-3620 & TEC-3597.
106
+ * @todo Add future support for passing along `$args` and `$instance` for the widget HTML view.
107
+ *
108
+ * @since 5.12.12
109
+ *
110
+ * @param array<string,mixed> $args Display arguments including 'before_title', 'after_title',
111
+ * 'before_widget', and 'after_widget'.
112
+ * @param array<string,mixed> $instance The settings for the particular instance of the widget.
113
+ */
114
+ public function widget( $args, $instance ) {
115
+ echo $this->get_html();
116
+ }
117
+
118
+ /**
119
+ * Returns the rendered View HTML code.
120
+ *
121
+ * @since 5.12.12
122
+ *
123
+ * @return string
124
+ */
125
+ public abstract function get_html();
126
+
127
+ /**
128
+ * {@inheritDoc}
129
+ */
130
+ public function set_aliased_arguments( array $alias_map ) {
131
+ $this->aliased_arguments = Arr::filter_to_flat_scalar_associative_array( (array) $alias_map );
132
+ }
133
+
134
+ /**
135
+ * {@inheritDoc}
136
+ */
137
+ public function get_aliased_arguments() {
138
+ return $this->aliased_arguments;
139
+ }
140
+
141
+ /**
142
+ * {@inheritDoc}
143
+ */
144
+ public function parse_arguments( array $arguments ) {
145
+ $arguments = Arr::parse_associative_array_alias( (array) $arguments, (array) $this->get_aliased_arguments() );
146
+
147
+ return $this->validate_arguments( $arguments );
148
+ }
149
+
150
+ /**
151
+ * {@inheritDoc}
152
+ */
153
+ public function validate_arguments( array $arguments ) {
154
+ $validate_arguments_map = $this->get_validated_arguments_map();
155
+ foreach ( $validate_arguments_map as $key => $callback ) {
156
+ $arguments[ $key ] = $callback( isset( $arguments[ $key ] ) ? $arguments[ $key ] : null );
157
+ }
158
+
159
+ return $arguments;
160
+ }
161
+
162
+ /**
163
+ * {@inheritDoc}
164
+ */
165
+ public function get_registration_slug() {
166
+ return $this->slug;
167
+ }
168
+
169
+ /**
170
+ * {@inheritDoc}
171
+ */
172
+ public function get_validated_arguments_map() {
173
+ /**
174
+ * Applies a filter to the validation map for instance arguments.
175
+ *
176
+ * @since 5.12.12
177
+ *
178
+ * @param array<string,callable> $validate_arguments_map Current set of callbacks for arguments.
179
+ * @param static $instance The widget instance we are dealing with.
180
+ */
181
+ $validate_arguments_map = apply_filters( 'tribe_widget_validate_arguments_map', $this->validate_arguments_map, $this );
182
+
183
+ $registration_slug = $this->get_registration_slug();
184
+
185
+ /**
186
+ * Applies a filter to the validation map for instance arguments for a specific widget. Based on the registration slug of the widget
187
+ *
188
+ * @since 5.12.12
189
+ *
190
+ * @param array<string,callable> $validate_arguments_map Current set of callbacks for arguments.
191
+ * @param static $instance The widget instance we are dealing with.
192
+ */
193
+ $validate_arguments_map = apply_filters( "tribe__widget_{$registration_slug}_validate_arguments_map", $validate_arguments_map, $this );
194
+
195
+ return $validate_arguments_map;
196
+ }
197
+
198
+ /**
199
+ * {@inheritDoc}
200
+ */
201
+ public function get_arguments() {
202
+
203
+ return $this->filter_arguments( $this->arguments );
204
+ }
205
+
206
+ /**
207
+ * {@inheritDoc}
208
+ */
209
+ public function filter_arguments( $arguments ) {
210
+ /**
211
+ * Applies a filter to instance arguments.
212
+ *
213
+ * @since 5.12.12
214
+ *
215
+ * @param array<string,mixed> $arguments Current set of arguments.
216
+ * @param static $instance The widget instance we are dealing with.
217
+ */
218
+ $arguments = apply_filters( 'tribe_widget_arguments', $arguments, $this );
219
+
220
+ $registration_slug = $this->get_registration_slug();
221
+
222
+ /**
223
+ * Applies a filter to instance arguments based on the registration slug of the widget.
224
+ *
225
+ * @since 5.12.12
226
+ *
227
+ * @param array<string,mixed> $arguments Current set of arguments.
228
+ * @param static $instance The widget instance we are dealing with.
229
+ */
230
+ $arguments = apply_filters( "tribe_widget_{$registration_slug}_arguments", $arguments, $this );
231
+
232
+ return $arguments;
233
+ }
234
+
235
+
236
+ /**
237
+ * {@inheritDoc}
238
+ */
239
+ public function get_argument( $index, $default = null ) {
240
+ $arguments = $this->get_arguments();
241
+ $argument = Arr::get( $arguments, $index, $default );
242
+
243
+ return $this->filter_argument( $argument, $index, $default );
244
+ }
245
+
246
+ /**
247
+ * {@inheritDoc}
248
+ */
249
+ public function filter_argument( $argument, $index, $default = null ) {
250
+ /**
251
+ * Applies a filter to a specific widget argument, catch all for all widgets.
252
+ *
253
+ * @since 5.12.12
254
+ *
255
+ * @param mixed $argument The argument.
256
+ * @param string|int $index Which index we intend to fetch from the arguments.
257
+ * @param array<string,mixed> $default Default value if it doesn't exist.
258
+ * @param static $instance The widget instance we are dealing with.
259
+ */
260
+ $argument = apply_filters( 'tribe_widget_argument', $argument, $index, $default, $this );
261
+
262
+ $registration_slug = $this->get_registration_slug();
263
+
264
+ /**
265
+ * Applies a filter to a specific widget argument, to a particular registration slug.
266
+ *
267
+ * @since 5.12.12
268
+ *
269
+ * @param mixed $argument The argument value.
270
+ * @param string|int $index Which index we intend to fetch from the arguments.
271
+ * @param mixed $default Default value if it doesn't exist.
272
+ * @param static $instance The widget instance we are dealing with.
273
+ */
274
+ $argument = apply_filters( "tribe_widget_{$registration_slug}_argument", $argument, $index, $default, $this );
275
+
276
+ return $argument;
277
+ }
278
+
279
+ /**
280
+ * {@inheritDoc}
281
+ */
282
+ public function get_default_arguments() {
283
+ return $this->filter_default_arguments( $this->default_arguments );
284
+ }
285
+
286
+ /**
287
+ * {@inheritDoc}
288
+ */
289
+ public function filter_default_arguments( array $default_arguments = [] ) {
290
+ /**
291
+ * Applies a filter to default instance arguments.
292
+ *
293
+ * @since 5.12.12
294
+ *
295
+ * @param array<string,mixed> $default_arguments Current set of default arguments.
296
+ * @param static $instance The widget instance we are dealing with.
297
+ */
298
+ $default_arguments = apply_filters( 'tribe_widget_default_arguments', $default_arguments, $this );
299
+
300
+ $registration_slug = $this->get_registration_slug();
301
+
302
+ /**
303
+ * Applies a filter to default instance arguments based on the registration slug of the widget.
304
+ *
305
+ * @since 5.12.12
306
+ *
307
+ * @param array<string,mixed> $default_arguments Current set of default arguments.
308
+ * @param static $instance The widget instance we are dealing with.
309
+ */
310
+ $default_arguments = apply_filters( "tribe_widget_{$registration_slug}_default_arguments", $default_arguments, $this );
311
+
312
+ return $default_arguments;
313
+ }
314
+ }
common/src/Tribe/Widget/Widget_Interface.php ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Tribe\Widget;
4
+
5
+ /**
6
+ * Interface Widget_Interface
7
+ *
8
+ * @since 5.12.12
9
+ *
10
+ * @package Tribe\Widget
11
+ *
12
+ */
13
+ interface Widget_Interface {
14
+
15
+ /**
16
+ * Constructor for V2 Widgets.
17
+ *
18
+ * @since 5.12.12
19
+ *
20
+ * @param string $id_base Optional. Base ID for the widget, lowercase. If left empty,
21
+ * a portion of the widget's class name will be used. Has to be unique.
22
+ * @param string $name Name for the widget displayed on the configuration page.
23
+ * @param array<string,mixed> $widget_options Optional. Widget options. See wp_register_sidebar_widget() for
24
+ * information on accepted arguments. Default empty array.
25
+ * @param array<string,mixed> $control_options Optional. Widget control options. See wp_register_widget_control() for
26
+ * information on accepted arguments. Default empty array.
27
+ */
28
+ public function __construct( $id_base = '', $name = '', $widget_options = [], $control_options = [] );
29
+
30
+ /**
31
+ * Echoes the widget content.
32
+ *
33
+ * @since 5.12.12
34
+ *
35
+ * @param array<string,mixed> $args Display arguments including 'before_title', 'after_title',
36
+ * 'before_widget', and 'after_widget'.
37
+ * @param array<string,mixed> $instance The settings for the particular instance of the widget.
38
+ */
39
+ public function widget( $args, $instance );
40
+
41
+ /**
42
+ * Updates a particular instance of a widget.
43
+ *
44
+ * This function should check that `$new_instance` is set correctly. The newly-calculated
45
+ * value of `$instance` should be returned. If false is returned, the instance won't be
46
+ * saved/updated.
47
+ *
48
+ * @since 5.12.12
49
+ *
50
+ * @param array<string,mixed> $new_instance New settings for this instance as input by the user via
51
+ * WP_Widget::form().
52
+ * @param array<string,mixed> $old_instance Old settings for this instance.
53
+ *
54
+ * @return array<string,mixed> Settings to save or bool false to cancel saving.
55
+ */
56
+ public function update( $new_instance, $old_instance );
57
+
58
+ /**
59
+ * Outputs the settings update form.
60
+ *
61
+ * @since 5.12.12
62
+ *
63
+ * @param array<string,mixed> $instance Current settings.
64
+ *
65
+ * @return string Default return is 'noform'.
66
+ */
67
+ public function form( $instance );
68
+
69
+ /**
70
+ * Returns the widget slug that allows the widget to be built via the widget class using that slug.
71
+ *
72
+ * @since 5.12.12
73
+ *
74
+ * @return string The widget slug.
75
+ */
76
+ public function get_registration_slug();
77
+
78
+ /**
79
+ * Sets the aliased arguments array.
80
+ *
81
+ * @see Tribe__Utils__Array::parse_associative_array_alias() The expected format.
82
+ *
83
+ * @since 5.12.12
84
+ *
85
+ * @param array<string,mixed> $alias_map An associative array of aliases: key as alias, value as mapped canonical.
86
+ * Example: [ 'alias' => 'canonical', 'from' => 'to', 'that' => 'becomes_this' ]
87
+ */
88
+ public function set_aliased_arguments( array $alias_map );
89
+
90
+ /**
91
+ * Gets the aliased arguments array.
92
+ *
93
+ * @since 5.12.12
94
+ *
95
+ * @return array<string,string> The associative array map of aliases and their canonical arguments.
96
+ */
97
+ public function get_aliased_arguments();
98
+
99
+ /**
100
+ * Returns the arguments for the widget parsed correctly with defaults applied.
101
+ *
102
+ * @since 5.12.12
103
+ *
104
+ * @param array $arguments Set of arguments passed to the widget at hand.
105
+ *
106
+ * @return array<string,mixed> The parsed widget arguments map.
107
+ */
108
+ public function parse_arguments( array $arguments );
109
+
110
+ /**
111
+ * Returns the array of arguments for this widget after applying the validation callbacks.
112
+ *
113
+ * @since 5.12.12
114
+ *
115
+ * @param array $arguments Set of arguments passed to the widget at hand.
116
+ *
117
+ * @return array<string,mixed> The validated widget arguments map.
118
+ */
119
+ public function validate_arguments( array $arguments );
120
+
121
+ /**
122
+ * Returns the array of callbacks for this widget's arguments.
123
+ *
124
+ * @since 5.12.12
125
+ *
126
+ * @return array<string,mixed> A map of the widget arguments that have survived validation.
127
+ */
128
+ public function get_validated_arguments_map();
129
+
130
+ /**
131
+ * Returns a widget arguments after been parsed.
132
+ *
133
+ * @since 5.12.12
134
+ *
135
+ * @return array<string,mixed> The widget arguments, as set by the user in the widget string.
136
+ */
137
+ public function get_arguments();
138
+
139
+ /**
140
+ * Get a widget's arguments after they have been been parsed.
141
+ *
142
+ * @since 5.12.12
143
+ *
144
+ * @param array<string,mixed> $arguments Current set of arguments.
145
+ *
146
+ * @return array<string,mixed> The widget arguments, as set by the user in the widget string.
147
+ */
148
+ public function filter_arguments( $arguments );
149
+
150
+ /**
151
+ * Get a single widget argument after it has been parsed and filtered.
152
+ *
153
+ * @since 5.12.12
154
+ *
155
+ * @param string|int $index Which index we intend to fetch from the arguments.
156
+ * @param array|mixed $default Default value if it doesn't exist.
157
+ *
158
+ * @uses Tribe__Utils__Array::get For index fetching and Default.
159
+ *
160
+ * @return mixed Value for the Index passed as the first argument.
161
+ */
162
+ public function get_argument( $index, $default = null );
163
+
164
+ /**
165
+ * Filter a widget argument.
166
+ *
167
+ * @since 5.12.12
168
+ *
169
+ * @param mixed $argument The argument value.
170
+ * @param string|int $index Which index we intend to fetch from the arguments.
171
+ * @param array|mixed $default Default value if it doesn't exist.
172
+ *
173
+ * @uses Tribe__Utils__Array::get For index fetching and Default.
174
+ *
175
+ * @return mixed Value for the Index passed as the first argument.
176
+ */
177
+ public function filter_argument( $argument, $index, $default = null );
178
+
179
+ /**
180
+ * Get default arguments for a widget.
181
+ *
182
+ * @since 5.12.12
183
+ *
184
+ * @return array<string,mixed> The map of widget default arguments.
185
+ */
186
+ public function get_default_arguments();
187
+
188
+ /**
189
+ * Get a widget's default arguments.
190
+ *
191
+ * @since 5.12.12
192
+ *
193
+ * @param array<string,mixed> $default_arguments Current set of default arguments.
194
+ *
195
+ * @return array<string,mixed> The map of widget default arguments.
196
+ */
197
+ public function filter_default_arguments( array $default_arguments = [] );
198
+
199
+ /**
200
+ * Returns a widget's HTML.
201
+ *
202
+ * @since 5.12.12
203
+ *
204
+ * @return string The rendered widget's HTML code.
205
+ */
206
+ public function get_html();
207
+ }
common/src/admin-views/notices/tribe-bf-2018-et.php DELETED
@@ -1,20 +0,0 @@
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 DELETED
@@ -1,20 +0,0 @@
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 DELETED
@@ -1,20 +0,0 @@
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 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The Black Friday admin notice.
4
+ *
5
+ * @since TBD
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 DELETED
@@ -1,21 +0,0 @@
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/tribe-options-display.php CHANGED
@@ -27,7 +27,7 @@ $displayTab = array(
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
  ),
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://wordpress.org/support/article/formatting-date-and-time/'
31
  )
32
  . '</p>',
33
  ),
common/src/functions/utils.php CHANGED
@@ -289,21 +289,21 @@ if ( ! function_exists( 'tribe_normalize_terms_list' ) ) {
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
 
@@ -1107,4 +1107,35 @@ if ( ! function_exists( 'tribe_without_filters' ) ) {
1107
 
1108
  return $result;
1109
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1110
  }
289
 
290
  return $normalized;
291
  }
292
+ }
293
 
294
+ if ( ! function_exists( 'tribe_upload_image' ) ) {
295
+ /**
296
+ * @see Tribe__Image__Uploader::upload_and_get_attachment_id()
297
+ *
298
+ * @param string|int $image The path to an image file, an image URL or an attachment post ID.
299
+ *
300
+ * @return int|bool The attachment post ID if the uploading and attachment is successful or the ID refers to an attachment;
301
+ * `false` otherwise.
302
+ */
303
+ function tribe_upload_image( $image ) {
304
+ $uploader = new Tribe__Image__Uploader( $image );
305
 
306
+ return $uploader->upload_and_get_attachment_id();
 
307
  }
308
  }
309
 
1107
 
1108
  return $result;
1109
  }
1110
+
1111
+ /**
1112
+ * Runs a callbacks while suspending, removing and re-adding, a filter or action.
1113
+ *
1114
+ * The function will infer the priority of the filter, required for its correct detachment and re-attachment, on
1115
+ * its own.
1116
+ *
1117
+ * @since 5.12.12
1118
+ *
1119
+ * @param string $filter_tag The filter tag to suspend.
1120
+ * @param callable $filter_callback The filter_callback currently attached to the filter.
1121
+ * @param callable $do The filter_callback that will be run detaching the `$filter_callback`.
1122
+ * @param int $args The number of arguments that should be used to re-attach the filtering callback to the filter.
1123
+ *
1124
+ * @return mixed The return value of the `$do` callback.
1125
+ */
1126
+ function tribe_suspending_filter( $filter_tag, callable $filter_callback, callable $do, $args = 1 ) {
1127
+ $priority = has_filter( $filter_tag, $filter_callback );
1128
+
1129
+ if ( false !== $priority ) {
1130
+ remove_filter( $filter_tag, $filter_callback, $priority );
1131
+ }
1132
+
1133
+ $result = $do();
1134
+
1135
+ if ( false !== $priority ) {
1136
+ add_filter( $filter_tag, $filter_callback, $priority, $args );
1137
+ }
1138
+
1139
+ return $result;
1140
+ }
1141
  }
common/src/resources/css/app-shop.min.css CHANGED
@@ -1 +1 @@
1
- body.tribe_events_page_tribe-app-shop{background-color:#fff;min-width:350px}body.tribe_events_page_tribe-app-shop .update-nag{display:none}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
+ 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}}
common/src/resources/css/tribe-common-admin.min.css CHANGED
@@ -1 +1 @@
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-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-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}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}.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-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}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: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}}@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-quick-nav{border-radius:100px;margin:24px 0 94px;padding:0;height:54px;width:620px}.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-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}}@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}}
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-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-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}}
common/src/resources/images/header/welcome-desktop-et.jpg ADDED
Binary file
common/src/resources/images/header/welcome-desktop-etplus.jpg ADDED
Binary file
common/src/resources/images/header/welcome-mobile-et.jpg ADDED
Binary file
common/src/resources/images/header/welcome-mobile-etplus.jpg ADDED
Binary file
common/src/resources/images/icons/horns-white.svg ADDED
@@ -0,0 +1 @@
 
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/sale-burst.svg ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
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/mascot.png CHANGED
Binary file
common/src/resources/images/welcome/calendar.jpg ADDED
Binary file
common/src/resources/images/welcome/et-plus-upsell.jpg ADDED
Binary file
common/src/resources/images/welcome/extension-library.jpg ADDED
Binary file
common/src/resources/images/welcome/guide-book-green.jpg ADDED
Binary file
common/src/resources/images/welcome/up-sell.jpg ADDED
Binary file
common/vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit2f1d77a6321fb7c67e51955e8298d81d::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit9b3b4c419fbf9b02027aef4a0d7ffee3::getLoader();
common/vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInit05e1eb40ac5b5e70c30698a7ce549a4b::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInit415c9e5d2dd0d5cab926ef2f5cd1aa06::getLoader();
common/vendor/composer/autoload_classmap.php CHANGED
@@ -131,6 +131,7 @@ return array(
131
  'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
132
  'Tribe\\Service_Providers\\Shortcodes' => $baseDir . '/src/Tribe/Service_Providers/Shortcodes.php',
133
  'Tribe\\Service_Providers\\Tooltip' => $baseDir . '/src/Tribe/Service_Providers/Tooltip.php',
 
134
  'Tribe\\Shortcode\\Manager' => $baseDir . '/src/Tribe/Shortcode/Manager.php',
135
  'Tribe\\Shortcode\\Shortcode_Abstract' => $baseDir . '/src/Tribe/Shortcode/Shortcode_Abstract.php',
136
  'Tribe\\Shortcode\\Shortcode_Interface' => $baseDir . '/src/Tribe/Shortcode/Shortcode_Interface.php',
@@ -152,6 +153,9 @@ return array(
152
  'Tribe\\Utils\\Post_Thumbnail' => $baseDir . '/src/Tribe/Utils/Post_Thumbnail.php',
153
  'Tribe\\Utils\\Query' => $baseDir . '/src/Tribe/Utils/Query.php',
154
  'Tribe\\Utils\\Strings' => $baseDir . '/src/Tribe/Utils/Strings.php',
 
 
 
155
  'tad_DI52_Container' => $vendorDir . '/lucatume/di52/src/tad/DI52/Container.php',
156
  'tad_DI52_ContainerInterface' => $vendorDir . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
157
  'tad_DI52_ProtectedValue' => $vendorDir . '/lucatume/di52/src/tad/DI52/ProtectedValue.php',
131
  'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
132
  'Tribe\\Service_Providers\\Shortcodes' => $baseDir . '/src/Tribe/Service_Providers/Shortcodes.php',
133
  'Tribe\\Service_Providers\\Tooltip' => $baseDir . '/src/Tribe/Service_Providers/Tooltip.php',
134
+ 'Tribe\\Service_Providers\\Widgets' => $baseDir . '/src/Tribe/Service_Providers/Widgets.php',
135
  'Tribe\\Shortcode\\Manager' => $baseDir . '/src/Tribe/Shortcode/Manager.php',
136
  'Tribe\\Shortcode\\Shortcode_Abstract' => $baseDir . '/src/Tribe/Shortcode/Shortcode_Abstract.php',
137
  'Tribe\\Shortcode\\Shortcode_Interface' => $baseDir . '/src/Tribe/Shortcode/Shortcode_Interface.php',
153
  'Tribe\\Utils\\Post_Thumbnail' => $baseDir . '/src/Tribe/Utils/Post_Thumbnail.php',
154
  'Tribe\\Utils\\Query' => $baseDir . '/src/Tribe/Utils/Query.php',
155
  'Tribe\\Utils\\Strings' => $baseDir . '/src/Tribe/Utils/Strings.php',
156
+ 'Tribe\\Widget\\Manager' => $baseDir . '/src/Tribe/Widget/Manager.php',
157
+ 'Tribe\\Widget\\Widget_Abstract' => $baseDir . '/src/Tribe/Widget/Widget_Abstract.php',
158
+ 'Tribe\\Widget\\Widget_Interface' => $baseDir . '/src/Tribe/Widget/Widget_Interface.php',
159
  'tad_DI52_Container' => $vendorDir . '/lucatume/di52/src/tad/DI52/Container.php',
160
  'tad_DI52_ContainerInterface' => $vendorDir . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
161
  'tad_DI52_ProtectedValue' => $vendorDir . '/lucatume/di52/src/tad/DI52/ProtectedValue.php',
common/vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit2f1d77a6321fb7c67e51955e8298d81d
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit2f1d77a6321fb7c67e51955e8298d81d
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit2f1d77a6321fb7c67e51955e8298d81d', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit2f1d77a6321fb7c67e51955e8298d81d', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit2f1d77a6321fb7c67e51955e8298d81d::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit9b3b4c419fbf9b02027aef4a0d7ffee3
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit9b3b4c419fbf9b02027aef4a0d7ffee3', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit9b3b4c419fbf9b02027aef4a0d7ffee3', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit9b3b4c419fbf9b02027aef4a0d7ffee3::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
common/vendor/composer/autoload_real_52.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
- class ComposerAutoloaderInit05e1eb40ac5b5e70c30698a7ce549a4b {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit05e1eb40ac5b5e70c30698a7ce549a4b {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit05e1eb40ac5b5e70c30698a7ce549a4b', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit05e1eb40ac5b5e70c30698a7ce549a4b', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
+ class ComposerAutoloaderInit415c9e5d2dd0d5cab926ef2f5cd1aa06 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit415c9e5d2dd0d5cab926ef2f5cd1aa06', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit415c9e5d2dd0d5cab926ef2f5cd1aa06', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
common/vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit2f1d77a6321fb7c67e51955e8298d81d
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
@@ -187,6 +187,7 @@ class ComposerStaticInit2f1d77a6321fb7c67e51955e8298d81d
187
  'Tribe\\Service_Providers\\PUE' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/PUE.php',
188
  'Tribe\\Service_Providers\\Shortcodes' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Shortcodes.php',
189
  'Tribe\\Service_Providers\\Tooltip' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Tooltip.php',
 
190
  'Tribe\\Shortcode\\Manager' => __DIR__ . '/../..' . '/src/Tribe/Shortcode/Manager.php',
191
  'Tribe\\Shortcode\\Shortcode_Abstract' => __DIR__ . '/../..' . '/src/Tribe/Shortcode/Shortcode_Abstract.php',
192
  'Tribe\\Shortcode\\Shortcode_Interface' => __DIR__ . '/../..' . '/src/Tribe/Shortcode/Shortcode_Interface.php',
@@ -208,6 +209,9 @@ class ComposerStaticInit2f1d77a6321fb7c67e51955e8298d81d
208
  'Tribe\\Utils\\Post_Thumbnail' => __DIR__ . '/../..' . '/src/Tribe/Utils/Post_Thumbnail.php',
209
  'Tribe\\Utils\\Query' => __DIR__ . '/../..' . '/src/Tribe/Utils/Query.php',
210
  'Tribe\\Utils\\Strings' => __DIR__ . '/../..' . '/src/Tribe/Utils/Strings.php',
 
 
 
211
  'tad_DI52_Container' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/Container.php',
212
  'tad_DI52_ContainerInterface' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
213
  'tad_DI52_ProtectedValue' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/ProtectedValue.php',
@@ -220,10 +224,10 @@ class ComposerStaticInit2f1d77a6321fb7c67e51955e8298d81d
220
  public static function getInitializer(ClassLoader $loader)
221
  {
222
  return \Closure::bind(function () use ($loader) {
223
- $loader->prefixLengthsPsr4 = ComposerStaticInit2f1d77a6321fb7c67e51955e8298d81d::$prefixLengthsPsr4;
224
- $loader->prefixDirsPsr4 = ComposerStaticInit2f1d77a6321fb7c67e51955e8298d81d::$prefixDirsPsr4;
225
- $loader->prefixesPsr0 = ComposerStaticInit2f1d77a6321fb7c67e51955e8298d81d::$prefixesPsr0;
226
- $loader->classMap = ComposerStaticInit2f1d77a6321fb7c67e51955e8298d81d::$classMap;
227
 
228
  }, null, ClassLoader::class);
229
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit9b3b4c419fbf9b02027aef4a0d7ffee3
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
187
  'Tribe\\Service_Providers\\PUE' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/PUE.php',
188
  'Tribe\\Service_Providers\\Shortcodes' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Shortcodes.php',
189
  'Tribe\\Service_Providers\\Tooltip' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Tooltip.php',
190
+ 'Tribe\\Service_Providers\\Widgets' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Widgets.php',
191
  'Tribe\\Shortcode\\Manager' => __DIR__ . '/../..' . '/src/Tribe/Shortcode/Manager.php',
192
  'Tribe\\Shortcode\\Shortcode_Abstract' => __DIR__ . '/../..' . '/src/Tribe/Shortcode/Shortcode_Abstract.php',
193
  'Tribe\\Shortcode\\Shortcode_Interface' => __DIR__ . '/../..' . '/src/Tribe/Shortcode/Shortcode_Interface.php',
209
  'Tribe\\Utils\\Post_Thumbnail' => __DIR__ . '/../..' . '/src/Tribe/Utils/Post_Thumbnail.php',
210
  'Tribe\\Utils\\Query' => __DIR__ . '/../..' . '/src/Tribe/Utils/Query.php',
211
  'Tribe\\Utils\\Strings' => __DIR__ . '/../..' . '/src/Tribe/Utils/Strings.php',
212
+ 'Tribe\\Widget\\Manager' => __DIR__ . '/../..' . '/src/Tribe/Widget/Manager.php',
213
+ 'Tribe\\Widget\\Widget_Abstract' => __DIR__ . '/../..' . '/src/Tribe/Widget/Widget_Abstract.php',
214
+ 'Tribe\\Widget\\Widget_Interface' => __DIR__ . '/../..' . '/src/Tribe/Widget/Widget_Interface.php',
215
  'tad_DI52_Container' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/Container.php',
216
  'tad_DI52_ContainerInterface' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
217
  'tad_DI52_ProtectedValue' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/ProtectedValue.php',
224
  public static function getInitializer(ClassLoader $loader)
225
  {
226
  return \Closure::bind(function () use ($loader) {
227
+ $loader->prefixLengthsPsr4 = ComposerStaticInit9b3b4c419fbf9b02027aef4a0d7ffee3::$prefixLengthsPsr4;
228
+ $loader->prefixDirsPsr4 = ComposerStaticInit9b3b4c419fbf9b02027aef4a0d7ffee3::$prefixDirsPsr4;
229
+ $loader->prefixesPsr0 = ComposerStaticInit9b3b4c419fbf9b02027aef4a0d7ffee3::$prefixesPsr0;
230
+ $loader->classMap = ComposerStaticInit9b3b4c419fbf9b02027aef4a0d7ffee3::$classMap;
231
 
232
  }, null, ClassLoader::class);
233
  }
common/vendor/composer/installed.json CHANGED
@@ -186,23 +186,23 @@
186
  },
187
  {
188
  "name": "psr/log",
189
- "version": "1.1.4",
190
- "version_normalized": "1.1.4.0",
191
  "source": {
192
  "type": "git",
193
  "url": "https://github.com/php-fig/log.git",
194
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
195
  },
196
  "dist": {
197
  "type": "zip",
198
- "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
199
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
200
  "shasum": ""
201
  },
202
  "require": {
203
  "php": ">=5.3.0"
204
  },
205
- "time": "2021-05-03T11:20:27+00:00",
206
  "type": "library",
207
  "extra": {
208
  "branch-alias": {
@@ -222,7 +222,7 @@
222
  "authors": [
223
  {
224
  "name": "PHP-FIG",
225
- "homepage": "https://www.php-fig.org/"
226
  }
227
  ],
228
  "description": "Common interface for logging libraries",
186
  },
187
  {
188
  "name": "psr/log",
189
+ "version": "1.1.3",
190
+ "version_normalized": "1.1.3.0",
191
  "source": {
192
  "type": "git",
193
  "url": "https://github.com/php-fig/log.git",
194
+ "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
195
  },
196
  "dist": {
197
  "type": "zip",
198
+ "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
199
+ "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
200
  "shasum": ""
201
  },
202
  "require": {
203
  "php": ">=5.3.0"
204
  },
205
+ "time": "2020-03-23T09:12:05+00:00",
206
  "type": "library",
207
  "extra": {
208
  "branch-alias": {
222
  "authors": [
223
  {
224
  "name": "PHP-FIG",
225
+ "homepage": "http://www.php-fig.org/"
226
  }
227
  ],
228
  "description": "Common interface for logging libraries",
common/vendor/faction23/a11y-dialog/a11y-dialog.min.js CHANGED
@@ -1 +1 @@
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);
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,!1,document,!0)[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.addEventListener("click",this._show),this._fire("create"),this},e.prototype.render=function(t){var e=o(this.trigger.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,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.removeEventListener("click",this._show),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;"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;"fade"===this.options.effect&&(this.node.setAttribute("aria-hidden","false"),this.node.style.opacity="0",setTimeout(function(){t.node.style.transition="",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/vendor/freemius/README.md CHANGED
@@ -1,69 +1,99 @@
1
  Freemius WordPress SDK
2
  ======================
3
 
4
- [Monetization](https://freemius.com/wordpress/), [analytics](https://freemius.com/wordpress/insights/), and marketing automation platform for plugin & theme developers. Freemius empower developers to create prosperous subscription based businesses.
5
 
6
- You can see some of the WordPress.org plugins & themes that are utilizing the power of Freemius here:
 
 
 
 
 
 
 
 
7
 
8
- https://includewp.com/freemius/#focus
 
 
9
 
10
- If you are a WordPress plugin or theme developer and you are interested to monetize with Freemius you can [sign-up here for free](https://dashboard.freemius.com/register/):
 
 
 
 
11
 
12
  https://dashboard.freemius.com/register/
13
 
14
- **Below you'll find the integration instructions for our WordPress SDK.**
 
 
 
 
 
15
 
16
  ## Code Documentation
17
 
18
  You can find the SDK's documentation here:
19
  https://freemius.com/help/documentation/wordpress-sdk/
20
 
21
- ## Initializing the SDK
 
 
 
 
22
 
23
- Copy the code below and paste it into the top of your main plugin's PHP file, right after the plugin's header comment:
 
 
24
 
25
  ```php
26
- <?php
27
  // Create a helper function for easy SDK access.
28
  function my_prefix_fs() {
29
  global $my_prefix_fs;
 
30
  if ( ! isset( $my_prefix_fs ) ) {
31
  // Include Freemius SDK.
32
  require_once dirname(__FILE__) . '/freemius/start.php';
33
-
34
  $my_prefix_fs = fs_dynamic_init( array(
35
- 'id' => '1234',
36
- 'slug' => 'my-plugin-slug',
37
- 'menu_slug' => 'my_menu_slug', // You can also use __FILE__
38
- 'public_key' => 'pk_MY_PUBLIC_KEY',
39
- 'is_live' => true,
40
- 'is_premium' => true,
41
- 'has_addons' => false,
42
- 'has_paid_plans' => false,
 
 
 
 
 
 
 
 
43
  // Set the SDK to work in a sandbox mode (for development & testing).
44
  // IMPORTANT: MAKE SURE TO REMOVE SECRET KEY BEFORE DEPLOYMENT.
45
- 'secret_key' => 'sk_MY_SECRET_KEY',
46
  ) );
47
  }
48
-
49
  return $my_prefix_fs;
50
  }
51
-
52
  // Init Freemius.
53
  my_prefix_fs();
54
- ?>
55
- ```
56
-
57
- - **1234** - Replace with your plugin's ID.
58
- - **pk_MY_PUBLIC_KEY** - Replace with your plugin's public key.
59
- - **sk_MY_SECRET_KEY** - Replace with your plugin's secret key.
60
- - **my-plugin-slug** - Replace with your plugin's WordPress.org slug.
61
- - **my_menu_slug** - Replace with your admin dashboard settings menu slug.
62
 
 
63
 
64
  ## Usage example
65
 
66
- You can call the SDK by using the shortcode function:
67
 
68
  ```php
69
  <?php my_prefix_fs()->get_upgrade_url(); ?>
@@ -78,6 +108,8 @@ Or when calling Freemius multiple times in a scope, it's recommended to use it w
78
  ?>
79
  ```
80
 
 
 
81
  ## Adding license based logic examples
82
 
83
  Add marketing content to encourage your users to upgrade for your paid version:
@@ -200,10 +232,10 @@ Add logic for specified paid plan:
200
  ```
201
 
202
  ## Excluding files and folders from the free plugin version
203
- There are two ways to exclude files from your free version.
204
 
205
- 1. Add `__premium_only` just before the file extension. For example, functions__premium_only.php will be only included in the premium plugin version. This works for all type of files, not only PHP.
206
- 2. Add `@fs_premium_only` a sepcial meta tag to the plugin's main PHP file header. Example:
207
  ```php
208
  <?php
209
  /**
@@ -227,27 +259,24 @@ There are two ways to exclude files from your free version.
227
  // ... my code ...
228
  ?>
229
  ```
230
- The file `/lib/functions.php` and the directory `/premium-files/` will be removed from the free plugin version.
231
 
232
  # WordPress.org Compliance
233
  Based on [WordPress.org Guidelines](https://wordpress.org/plugins/about/guidelines/) you are not allowed to submit a plugin that has premium code in it:
234
  > All code hosted by WordPress.org servers must be free and fully-functional. If you want to sell advanced features for a plugin (such as a "pro" version), then you must sell and serve that code from your own site, we will not host it on our servers.
235
 
236
- Therefore, if you want to deploy your free plugin's version to WordPress.org, make sure you wrap all your premium code with `if ( my_prefix_fs()->{{ method }}__premium_only() )` or the other methods provided to exclude premium features & files from the free version.
237
 
238
  ## Deployment
239
- Zip your plugin's root folder and upload it in the Deployment section in the *Freemius Developer's Dashboard*.
240
- The plugin will be scanned and processed by a custom developed *PHP Processor* which will auto-generate two versions of your plugin:
241
 
242
  1. **Premium version**: Identical to your uploaded version, including all code (except your `secret_key`). Will be enabled for download ONLY for your paying or in trial customers.
243
  2. **Free version**: The code stripped from all your paid features (based on the logic added wrapped in `{ method }__premium_only()`).
244
 
245
- The free version is the one that you should give your users to download. Therefore, download the free generated version and upload to your site. Or, if your plugin was WordPress.org complaint and you made sure to exclude all your premium code with the different provided techniques, you can deploy the downloaded free version to the .org repo.
246
-
247
- ## Reporting Bugs
248
- Email dev [at] freemius [dot] com
249
 
250
- ## FAQ
 
251
 
252
- ## Copyright
253
- Freemius, Inc.
1
  Freemius WordPress SDK
2
  ======================
3
 
4
+ Welcome to the official repository for the Freemius SDK! Adding the SDK to your WordPress plugin, theme, or add-ons, enables all the benefits that come with using the [Freemius platform](https://freemius.com) such as:
5
 
6
+ * [Software Licensing](https://freemius.com/wordpress/software-licensing/)
7
+ * [Secure Checkout](https://freemius.com/wordpress/checkout/)
8
+ * [Subscriptions](https://freemius.com/wordpress/recurring-payments-subscriptions/)
9
+ * [Automatic Updates](https://freemius.com/wordpress/automatic-software-updates/)
10
+ * [Seamless EU VAT](https://freemius.com/wordpress/collecting-eu-vat-europe/)
11
+ * [Cart Abandonment Recovery](https://freemius.com/wordpress/cart-abandonment-recovery/)
12
+ * [Affiliate Platform](https://freemius.com/wordpress/affiliate-platform/)
13
+ * [Analytics & Usage Tracking](https://freemius.com/wordpress/insights/)
14
+ * [User Dashboard](https://freemius.com/wordpress/user-dashboard/)
15
 
16
+ * [Monetization](https://freemius.com/wordpress/)
17
+ * [Analytics](https://freemius.com/wordpress/insights/)
18
+ * [More...](https://freemius.com/wordpress/features-comparison/)
19
 
20
+ Freemius truly empowers developers to create prosperous subscription-based businesses.
21
+
22
+ If you're new to Freemius then we recommend taking a look at our [Getting Started](https://freemius.com/help/documentation/getting-started/) guide first.
23
+
24
+ If you're a WordPress plugin or theme developer and are interested in monetizing with Freemius then you can [sign-up for a FREE account](https://dashboard.freemius.com/register/):
25
 
26
  https://dashboard.freemius.com/register/
27
 
28
+ Once you have your account setup and are familiar with how it all works you're ready to begin [integrating Freemius](https://freemius.com/help/documentation/wordpress-sdk/integrating-freemius-sdk/) into your WordPress product
29
+
30
+ You can see some of the existing WordPress.org plugins & themes that are already utilizing the power of Freemius here:
31
+
32
+ * https://profiles.wordpress.org/freemius/#content-plugins
33
+ * https://includewp.com/freemius/#focus
34
 
35
  ## Code Documentation
36
 
37
  You can find the SDK's documentation here:
38
  https://freemius.com/help/documentation/wordpress-sdk/
39
 
40
+ ## Integrating & Initializing the SDK
41
+
42
+ As part of the integration process, you'll need to [add the latest version](https://freemius.com/help/documentation/getting-started/#add_the_latest_wordpress_sdk_into_your_product) of the Freemius SDK into your WordPress project.
43
+
44
+ Then, when you've completed the [SDK integration form](https://freemius.com/help/documentation/getting-started/#fill_out_the_sdk_integration_form) a snippet of code is generated which you'll need to copy and paste into the top of your main plugin's PHP file, right after the plugin's header comment.
45
 
46
+ Note: For themes, this will be in the root `functions.php` file instead.
47
+
48
+ A typical SDK snippet will look similar to the following (your particular snippet may differ slightly depending on your integration):
49
 
50
  ```php
51
+ if ( ! function_exists( 'my_prefix_fs' ) ) {
52
  // Create a helper function for easy SDK access.
53
  function my_prefix_fs() {
54
  global $my_prefix_fs;
55
+
56
  if ( ! isset( $my_prefix_fs ) ) {
57
  // Include Freemius SDK.
58
  require_once dirname(__FILE__) . '/freemius/start.php';
59
+
60
  $my_prefix_fs = fs_dynamic_init( array(
61
+ 'id' => '1234',
62
+ 'slug' => 'my-new-plugin',
63
+ 'premium_slug' => 'my-new-plugin-premium',
64
+ 'type' => 'plugin',
65
+ 'public_key' => 'pk_bAEfta69seKymZzmf2xtqq8QXHz9y',
66
+ 'is_premium' => true,
67
+ // If your plugin is a serviceware, set this option to false.
68
+ 'has_premium_version' => true,
69
+ 'has_paid_plans' => true,
70
+ 'is_org_compliant' => true,
71
+ 'menu' => array(
72
+ 'slug' => 'my-new-plugin',
73
+ 'parent' => array(
74
+ 'slug' => 'options-general.php',
75
+ ),
76
+ ),
77
  // Set the SDK to work in a sandbox mode (for development & testing).
78
  // IMPORTANT: MAKE SURE TO REMOVE SECRET KEY BEFORE DEPLOYMENT.
79
+ 'secret_key' => 'sk_ubb4yN3mzqGR2x8#P7r5&@*xC$utE',
80
  ) );
81
  }
82
+
83
  return $my_prefix_fs;
84
  }
85
+
86
  // Init Freemius.
87
  my_prefix_fs();
88
+ // Signal that SDK was initiated.
89
+ do_action( 'my_prefix_fs_loaded' );
90
+ }
 
 
 
 
 
91
 
92
+ ```
93
 
94
  ## Usage example
95
 
96
+ You can call anySDK methods by prefixing them with the shortcode function for your particular plugin/theme (specified when completing the SDK integration form in the Developer Dashboard):
97
 
98
  ```php
99
  <?php my_prefix_fs()->get_upgrade_url(); ?>
108
  ?>
109
  ```
110
 
111
+ There are many other SDK methods available that you can use to enhance the functionality of your WordPress product. Some of the more common use-cases are covered in the [Freemius SDK Gists](https://freemius.com/help/documentation/wordpress-sdk/gists/) documentation.
112
+
113
  ## Adding license based logic examples
114
 
115
  Add marketing content to encourage your users to upgrade for your paid version:
232
  ```
233
 
234
  ## Excluding files and folders from the free plugin version
235
+ There are [two ways](https://freemius.com/help/documentation/wordpress-sdk/software-licensing/#excluding_files_and_folders_from_the_free_plugin_version) to exclude files from your free version.
236
 
237
+ 1. Add `__premium_only` just before the file extension. For example, functions__premium_only.php will be only included in the premium plugin version. This works for all types of files, not only PHP.
238
+ 2. Add `@fs_premium_only` a special meta tag to the plugin's main PHP file header. Example:
239
  ```php
240
  <?php
241
  /**
259
  // ... my code ...
260
  ?>
261
  ```
262
+ In the example plugin header above, the file `/lib/functions.php` and the directory `/premium-files/` will be removed from the free plugin version.
263
 
264
  # WordPress.org Compliance
265
  Based on [WordPress.org Guidelines](https://wordpress.org/plugins/about/guidelines/) you are not allowed to submit a plugin that has premium code in it:
266
  > All code hosted by WordPress.org servers must be free and fully-functional. If you want to sell advanced features for a plugin (such as a "pro" version), then you must sell and serve that code from your own site, we will not host it on our servers.
267
 
268
+ Therefore, if you want to deploy your free plugin's version to WordPress.org, make sure you wrap all your premium code with `if ( my_prefix_fs()->{{ method }}__premium_only() )` or use [some of the other methods](https://freemius.com/help/documentation/wordpress-sdk/software-licensing/) provided by the SDK to exclude premium features & files from the free version.
269
 
270
  ## Deployment
271
+ Zip your Freemius product’s root folder and [upload it in the Deployment section](https://freemius.com/help/documentation/selling-with-freemius/deployment/) in the *Freemius Developer's Dashboard*.
272
+ The plugin/theme will automatically be scanned and processed by a custom-developed *PHP Processor* which will auto-generate two versions of your plugin:
273
 
274
  1. **Premium version**: Identical to your uploaded version, including all code (except your `secret_key`). Will be enabled for download ONLY for your paying or in trial customers.
275
  2. **Free version**: The code stripped from all your paid features (based on the logic added wrapped in `{ method }__premium_only()`).
276
 
277
+ The free version is the one that you should give your users to download. Therefore, download the free generated version and upload to your site. Or, if your plugin was WordPress.org compliant and you made sure to exclude all your premium code with the different provided techniques, you can deploy the downloaded free version to the .org repo.
 
 
 
278
 
279
+ ## License
280
+ Copyright (c) Freemius®, Inc.
281
 
282
+ Licensed under the GNU general public license (version 3).
 
common/vendor/freemius/assets/css/admin/account.css CHANGED
@@ -1 +1 @@
1
- label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type="text"]{color:#0073AA;font-size:16px;background:none}.fs-key-value-table input[type="text"]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:grey;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
1
+ label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.fs-notice[data-id="license_not_whitelabeled"].success,.fs-notice[data-id="license_whitelabeled"].success{color:inherit;border-left-color:#00a0d2}.fs-notice[data-id="license_not_whitelabeled"].success label.fs-plugin-title,.fs-notice[data-id="license_whitelabeled"].success label.fs-plugin-title{display:none}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type="text"]{color:#0073AA;font-size:16px;background:none}.fs-key-value-table input[type="text"]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:grey;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
common/vendor/freemius/assets/css/admin/add-ons.css CHANGED
@@ -1,2 +1,2 @@
1
  .fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:0.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:0.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}
2
- #TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:0.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid white;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
1
  .fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,0.15s;-o-transition:all,0.15s;-ms-transition:all,0.15s;-webkit-transition:all,0.15s;transition:all,0.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:0.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:greenyellow;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3);text-transform:uppercase;font-size:0.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}
2
+ #TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description iframe{max-width:100%}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:greenyellow;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid darkgreen;padding:2px;text-align:center;font-size:0.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#F3F3F3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:greenyellow}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:0.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid white;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
common/vendor/freemius/config.php CHANGED
@@ -385,4 +385,7 @@
385
 
386
  if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
387
  define( 'WP_FS__DEMO_MODE', false );
388
- }
 
 
 
385
 
386
  if ( ! defined( 'WP_FS__DEMO_MODE' ) ) {
387
  define( 'WP_FS__DEMO_MODE', false );
388
+ }
389
+ if ( ! defined( 'FS_SDK__SSLVERIFY' ) ) {
390
+ define( 'FS_SDK__SSLVERIFY', false );
391
+ }
common/vendor/freemius/includes/class-freemius.php CHANGED
@@ -351,6 +351,14 @@
351
  */
352
  private $is_whitelabeled;
353
 
 
 
 
 
 
 
 
 
354
  #region Uninstall Reasons IDs
355
 
356
  const REASON_NO_LONGER_NEEDED = 1;
@@ -369,6 +377,14 @@
369
  const REASON_DIDNT_WORK_AS_EXPECTED = 14;
370
  const REASON_TEMPORARY_DEACTIVATION = 15;
371
 
 
 
 
 
 
 
 
 
372
  #endregion
373
 
374
  /* Ctor
@@ -816,7 +832,11 @@
816
  return false;
817
  }
818
 
819
- if ( ! $is_tabs_visibility_check && $this->show_settings_with_tabs() ) {
 
 
 
 
820
  /**
821
  * wp.org themes are limited to a single submenu item, and
822
  * sub-submenu items are most likely not allowed (never verified).
@@ -1457,7 +1477,10 @@
1457
  if ( $this->is_plugin() &&
1458
  ! isset( $this->_storage->is_plugin_new_install )
1459
  ) {
1460
- $this->_storage->is_plugin_new_install = false;
 
 
 
1461
  }
1462
  }
1463
 
@@ -1480,6 +1503,13 @@
1480
  -1 < settings.url.indexOf('admin-ajax.php') &&
1481
  ! ( settings.url.indexOf( '<?php echo $admin_param ?>' ) > 0 )
1482
  ) {
 
 
 
 
 
 
 
1483
  if (settings.url.indexOf('?') > 0) {
1484
  settings.url += '&';
1485
  } else {
@@ -1487,7 +1517,6 @@
1487
  }
1488
 
1489
  settings.url += '<?php echo $admin_param ?>=true';
1490
-
1491
  }
1492
  });
1493
  })(jQuery);
@@ -1505,7 +1534,7 @@
1505
  ?>
1506
  <script type="text/javascript">
1507
  (function ($) {
1508
- $('.fs-submenu-item.wp-support-forum').parent().attr('target', '_blank');
1509
  })(jQuery);
1510
  </script>
1511
  <?php
@@ -1601,6 +1630,7 @@
1601
  }
1602
 
1603
  add_action( 'init', array( &$this, '_maybe_add_gdpr_optin_ajax_handler') );
 
1604
  }
1605
 
1606
  if ( $this->is_plugin() ) {
@@ -1632,7 +1662,7 @@
1632
 
1633
  add_action( 'admin_init', array( &$this, '_redirect_on_clicked_menu_link' ), WP_FS__LOWEST_PRIORITY );
1634
 
1635
- if ( $this->is_theme() ) {
1636
  add_action( 'admin_init', array( &$this, '_add_tracking_links' ) );
1637
  }
1638
 
@@ -1644,6 +1674,7 @@
1644
  $this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
1645
  $this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
1646
  $this->add_ajax_action( 'set_data_debug_mode', array( &$this, '_set_data_debug_mode' ) );
 
1647
 
1648
  if ( $this->_is_network_active && fs_is_network_admin() ) {
1649
  $this->add_ajax_action( 'network_activate', array( &$this, '_network_activate_ajax_action' ) );
@@ -2006,6 +2037,10 @@
2006
  * @since 2.0.0
2007
  */
2008
  function _hook_action_links_and_register_account_hooks() {
 
 
 
 
2009
  $this->_add_tracking_links();
2010
 
2011
  if ( self::is_plugins_page() && $this->is_plugin() ) {
@@ -2186,6 +2221,12 @@
2186
  );
2187
 
2188
  $store_option = true;
 
 
 
 
 
 
2189
  }
2190
 
2191
  if ( empty( $id_slug_type_path_map[ $module_id ]['path'] ) ||
@@ -4259,7 +4300,7 @@
4259
  )
4260
  ),
4261
  sprintf(
4262
- '<a href="%s" target="_blank"><b>%s</b></a> - %s',
4263
  sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
4264
  $install_previous_title,
4265
  $install_previous_desc
@@ -4366,7 +4407,7 @@
4366
  )
4367
  ),
4368
  sprintf(
4369
- '<a href="%s" target="_blank"><b>%s</b></a> - %s',
4370
  sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
4371
  $install_previous_title,
4372
  $install_previous_desc
@@ -4887,10 +4928,12 @@
4887
  } else {
4888
  $is_network_admin = fs_is_network_admin();
4889
 
4890
- if (
 
 
 
4891
  $this->_parent->is_registered() &&
4892
  ! $this->is_registered() &&
4893
- $this->has_free_plan() &&
4894
  /**
4895
  * If not registered for add-on and the following conditions for the add-on are met, activate add-on account.
4896
  * * Network active and in network admin - network activate add-on account.
@@ -4904,16 +4947,40 @@
4904
  */
4905
  ( $this->is_network_active() || ! $is_network_admin )
4906
  ) {
4907
- // If parent plugin activated, automatically install add-on for the user.
4908
- $this->_activate_addon_account(
4909
- $this->_parent,
4910
- ( $this->is_network_active() && $is_network_admin ) ?
4911
- true :
4912
- get_current_blog_id()
4913
- );
4914
- } else if ( ! $this->_parent->is_registered() && $this->is_registered() ) {
4915
- // If add-on activated and parent not, automatically install parent for the user.
4916
- $this->activate_parent_account( $this->_parent );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4917
  }
4918
 
4919
  // @todo This should be only executed on activation. It should be migrated to register_activation_hook() together with other activation related logic.
@@ -5415,7 +5482,10 @@
5415
  * @return bool
5416
  */
5417
  function is_extensions_tracking_allowed() {
5418
- return (true === $this->_storage->get( 'is_extensions_tracking_allowed', true ) );
 
 
 
5419
  }
5420
 
5421
  /**
@@ -5601,6 +5671,7 @@
5601
  $this->_anonymous_mode = $this->get_bool_option( $plugin_info, 'anonymous_mode', false );
5602
  }
5603
  $this->_permissions = $this->get_option( $plugin_info, 'permissions', array() );
 
5604
 
5605
  if ( ! empty( $plugin_info['trial'] ) ) {
5606
  $this->_trial_days = $this->get_numeric_option(
@@ -7078,6 +7149,8 @@
7078
  * @since 1.0.7
7079
  */
7080
  function _admin_init_action() {
 
 
7081
  /**
7082
  * Automatically redirect to connect/activation page after plugin activation.
7083
  *
@@ -7090,12 +7163,16 @@
7090
  /**
7091
  * Don't redirect if activating multiple plugins at once (bulk activation).
7092
  */
7093
- } else {
7094
  $this->_redirect_on_activation_hook();
7095
  return;
7096
  }
7097
  }
7098
 
 
 
 
 
7099
  if ( fs_request_is_action( $this->get_unique_affix() . '_skip_activation' ) ) {
7100
  check_admin_referer( $this->get_unique_affix() . '_skip_activation' );
7101
 
@@ -7126,7 +7203,7 @@
7126
  )
7127
  ) {
7128
  if ( ! $this->is_pending_activation() ) {
7129
- if ( ! $this->_menu->is_activation_page( $this->show_opt_in_on_themes_page() ) ) {
7130
  /**
7131
  * If a user visits any other admin page before activating the premium-only theme with a valid
7132
  * license, reactivate the previous theme.
@@ -7660,7 +7737,10 @@
7660
  * @author Leo Fajardo (@leorw)
7661
  * @since 1.2.2
7662
  */
7663
- if ( is_plugin_active( $other_version_basename ) ) {
 
 
 
7664
  deactivate_plugins( $other_version_basename );
7665
  }
7666
  }
@@ -7769,8 +7849,17 @@
7769
  $this->_storage->is_plugin_new_install = empty( $this->_storage->plugin_last_version );
7770
  }
7771
 
 
 
 
 
 
 
 
 
 
7772
  if ( ! $this->_anonymous_mode &&
7773
- $this->has_api_connectivity( WP_FS__DEV_MODE ) &&
7774
  ! $this->_isAutoInstall
7775
  ) {
7776
  // Store hint that the plugin was just activated to enable auto-redirection to settings.
@@ -7803,11 +7892,20 @@
7803
  return;
7804
  }
7805
 
7806
- $license = $this->get_addon_active_parent_license();
7807
  if ( ! is_object( $license ) ) {
7808
  return;
7809
  }
7810
 
 
 
 
 
 
 
 
 
 
7811
  if ( ! $this->is_registered() ) {
7812
  // Opt in with a license key.
7813
  $this->opt_in(
@@ -7830,7 +7928,6 @@
7830
  }
7831
  }
7832
 
7833
-
7834
  /**
7835
  * @author Leo Fajardo (@leorw)
7836
  * @since 2.3.0
@@ -7846,12 +7943,21 @@
7846
 
7847
  $license = ( ! is_null( $license ) ) ?
7848
  $license :
7849
- $this->get_addon_active_parent_license();
7850
 
7851
  if ( ! is_object( $license ) ) {
7852
  return;
7853
  }
7854
 
 
 
 
 
 
 
 
 
 
7855
  if ( ! $this->is_network_registered() ) {
7856
  $sites = $this->get_sites_for_network_level_optin();
7857
 
@@ -7915,16 +8021,217 @@
7915
  }
7916
 
7917
  /**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7918
  * @author Leo Fajardo (@leorw)
7919
  * @since 2.3.0
7920
  *
 
 
 
7921
  * @return FS_Plugin_License
7922
  */
7923
- private function get_addon_active_parent_license() {
7924
  $parent_licenses_endpoint = "/plugins/{$this->get_id()}/parent_licenses.json?filter=activatable";
7925
- $parent_instance = $this->get_parent_instance();
7926
 
7927
- $foreign_licenses = $parent_instance->get_foreign_licenses_info(
 
 
 
 
 
 
 
 
 
 
7928
  self::get_all_licenses( $this->get_parent_id() )
7929
  );
7930
 
@@ -7938,7 +8245,7 @@
7938
  $parent_licenses_endpoint = add_query_arg( $foreign_licenses, $parent_licenses_endpoint );
7939
  }
7940
 
7941
- $result = $parent_instance->get_current_or_network_user_api_scope()->get( $parent_licenses_endpoint, true );
7942
 
7943
  if (
7944
  ! $this->is_api_result_object( $result, 'licenses' ) ||
@@ -7948,9 +8255,24 @@
7948
  return null;
7949
  }
7950
 
7951
- $license = new FS_Plugin_License( $result->licenses[ 0 ] );
7952
 
7953
- return $license;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7954
  }
7955
 
7956
  /**
@@ -8703,12 +9025,25 @@
8703
  'is_uninstalled' => false,
8704
  );
8705
 
8706
- $plugins_update_data[] = $new_plugin;
8707
  $network_plugins_cache->plugins[ $basename ] = $new_plugin;
8708
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8709
  if ( isset( $site_active_plugins[ $basename ] ) ) {
8710
  $site_active_plugins_cache->plugins[ $basename ] = $new_plugin;
8711
- $site_active_plugins_cache->plugins[ $basename ]['is_active'] = true;
8712
  }
8713
  }
8714
  }
@@ -10108,6 +10443,10 @@
10108
 
10109
  $class_name = '';
10110
 
 
 
 
 
10111
  switch ( $option_name ) {
10112
  case 'plugins':
10113
  case 'themes':
@@ -10392,6 +10731,18 @@
10392
  return ( is_object( $this->_site ) && $this->_site->is_tracking_allowed() );
10393
  }
10394
 
 
 
 
 
 
 
 
 
 
 
 
 
10395
  /**
10396
  * @author Vova Feldman (@svovaf)
10397
  * @since 1.0.4
@@ -12675,6 +13026,10 @@
12675
  * @since 1.2.0
12676
  */
12677
  function _add_license_activation() {
 
 
 
 
12678
  if ( ! $this->is_user_admin() ) {
12679
  // Only admins can activate a license.
12680
  return;
@@ -12733,7 +13088,9 @@
12733
  return;
12734
  }
12735
 
12736
- if ( empty( $this->get_installs_ids_with_foreign_licenses() ) ) {
 
 
12737
  // Handle user change only when the parent product or one of its add-ons is activated with a foreign license.
12738
  return;
12739
  }
@@ -12790,6 +13147,61 @@
12790
  }
12791
  }
12792
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12793
  /**
12794
  * @author Leo Fajardo (@leorw)
12795
  * @since 2.3.0
@@ -12869,11 +13281,13 @@
12869
  exit;
12870
  }
12871
 
 
 
 
 
12872
  $result = $this->activate_license(
12873
  $license_key,
12874
- fs_is_network_admin() ?
12875
- fs_request_get( 'sites', array(), 'post' ) :
12876
- array(),
12877
  fs_request_get_bool( 'is_marketing_allowed', null ),
12878
  fs_request_get( 'blog_id', null ),
12879
  fs_request_get( 'module_id', null, 'post' ),
@@ -12881,6 +13295,16 @@
12881
  fs_request_get_bool( 'is_extensions_tracking_allowed', true )
12882
  );
12883
 
 
 
 
 
 
 
 
 
 
 
12884
  echo json_encode( $result );
12885
 
12886
  exit;
@@ -12967,6 +13391,46 @@
12967
  }
12968
 
12969
  /**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12970
  * A helper method to activate migrated licenses. If the product is network activated and integrated, the method will network activate the license.
12971
  *
12972
  * @author Vova Feldman (@svovaf)
@@ -12975,6 +13439,8 @@
12975
  * @param string $license_key
12976
  * @param null|bool $is_marketing_allowed
12977
  * @param null|number $plugin_id
 
 
12978
  *
12979
  * @return array {
12980
  * @var bool $success
@@ -12987,17 +13453,19 @@
12987
  function activate_migrated_license(
12988
  $license_key,
12989
  $is_marketing_allowed = null,
12990
- $plugin_id = null
 
 
12991
  ) {
12992
  $this->_logger->entrance();
12993
 
12994
  $result = $this->activate_license(
12995
  $license_key,
12996
- $this->is_network_active() ?
12997
  $this->get_sites_for_network_level_optin() :
12998
- array(),
12999
  $is_marketing_allowed,
13000
- null,
13001
  $plugin_id
13002
  );
13003
 
@@ -13007,6 +13475,32 @@
13007
  return $result;
13008
  }
13009
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13010
  /**
13011
  * The implementation of this method was previously in `_activate_license_ajax_action()`.
13012
  *
@@ -13039,7 +13533,12 @@
13039
 
13040
  $license_key = trim( $license_key );
13041
 
13042
- if ( ! fs_is_network_admin() ) {
 
 
 
 
 
13043
  // If the license activation is executed outside the context of a network admin, ignore the sites collection.
13044
  $sites = array();
13045
  }
@@ -13068,8 +13567,17 @@
13068
  $user = $fs->get_current_or_network_user();
13069
  }
13070
 
 
 
 
 
 
 
 
 
 
13071
  if ( is_object( $user ) ) {
13072
- if ( fs_is_network_admin() && ! $has_valid_blog_id ) {
13073
  // If no specific blog ID was provided, activate the license for all sites in the network.
13074
  $blog_2_install_map = array();
13075
  $site_ids = array();
@@ -13108,16 +13616,6 @@
13108
  }
13109
  }
13110
  } else {
13111
- if ( $has_valid_blog_id ) {
13112
- /**
13113
- * If a specific blog ID was provided, activate the license only for the install that is
13114
- * associated with the given blog ID.
13115
- *
13116
- * @author Leo Fajardo (@leorw)
13117
- */
13118
- $fs->switch_to_blog( $blog_id );
13119
- }
13120
-
13121
  if ( $fs->is_registered() ) {
13122
  $params = array(
13123
  'license_key' => $fs->apply_filters( 'license_key', $license_key )
@@ -13172,13 +13670,19 @@
13172
  if ( empty( $error ) ) {
13173
  $fs->network_upgrade_mode_completed();
13174
 
 
 
 
 
 
 
13175
  $fs->_sync_license( true, $has_valid_blog_id );
13176
 
13177
  $this->maybe_sync_install_user();
13178
 
13179
  $next_page = $fs->is_addon() ?
13180
  $fs->get_parent_instance()->get_account_url() :
13181
- $fs->get_account_url();
13182
  }
13183
  } else {
13184
  $next_page = $fs->opt_in(
@@ -13196,7 +13700,7 @@
13196
  if ( isset( $next_page->error ) ) {
13197
  $error = $next_page->error;
13198
  } else {
13199
- if ( fs_is_network_admin() ) {
13200
  /**
13201
  * Get the list of sites that were just opted-in (and license activated).
13202
  * This is an optimization for the next part below saving some DB queries.
@@ -14310,7 +14814,12 @@
14310
  * @return bool
14311
  */
14312
  function is_user_in_admin() {
14313
- return is_admin() && ! self::is_ajax() && ! self::is_cron();
 
 
 
 
 
14314
  }
14315
 
14316
  /**
@@ -14622,9 +15131,18 @@
14622
  if ( function_exists( 'get_sites' ) ) {
14623
  // For WP 4.6 and above.
14624
  return get_sites( $args );
14625
- } else if ( function_exists( 'wp_get_sites' ) ) {
14626
  // For WP 3.7 to WP 4.5.
14627
- return wp_get_sites( $args );
 
 
 
 
 
 
 
 
 
14628
  } else {
14629
  // For WP 3.6 and below.
14630
  return get_blog_list( 0, 'all' );
@@ -14801,7 +15319,7 @@
14801
  * @return bool Since 2.3.1 returns if a switch was made.
14802
  */
14803
  function switch_to_blog( $blog_id, FS_Site $install = null ) {
14804
- if ( $blog_id == $this->_context_is_network_or_blog_id ) {
14805
  return false;
14806
  }
14807
 
@@ -16188,6 +16706,8 @@
16188
  'http' => 402
16189
  );
16190
 
 
 
16191
  return $result;
16192
  }
16193
 
@@ -17034,10 +17554,15 @@
17034
  * @author Vova Feldman (@svovaf)
17035
  * @since 1.0.6
17036
  *
17037
- * @param Freemius $parent_fs
17038
- * @param bool|int|null $network_level_or_blog_id True for network level opt-in and integer for opt-in for specified blog in the network.
 
17039
  */
17040
- private function _activate_addon_account( Freemius $parent_fs, $network_level_or_blog_id = null ) {
 
 
 
 
17041
  if ( $this->is_registered() ) {
17042
  // Already activated.
17043
  return;
@@ -17076,6 +17601,10 @@
17076
  }
17077
  }
17078
 
 
 
 
 
17079
  // Activate add-on with parent plugin credentials.
17080
  $result = $parent_fs->get_api_site_scope()->call(
17081
  "/addons/{$this->_plugin->id}/installs.json",
@@ -17084,16 +17613,25 @@
17084
  );
17085
 
17086
  if ( ! $this->is_api_result_object( $result, 'installs' ) ) {
17087
- $error_message = FS_Api::is_api_error_object( $result ) ?
17088
- $result->error->message :
17089
- $this->get_text_inline( 'An unknown error has occurred.', 'unknown-error' );
 
 
 
 
 
 
 
 
17090
 
17091
- $this->_admin_notices->add(
17092
- sprintf( $this->get_text_inline( 'Couldn\'t activate %s.', 'could-not-activate-x' ), $this->get_plugin_name() ) . ' ' .
17093
- $this->get_text_inline( 'Please contact us with the following message:', 'contact-us-with-error-message' ) . ' ' . '<b>' . $error_message . '</b>',
17094
- $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
17095
- 'error'
17096
- );
 
17097
 
17098
  return;
17099
  }
@@ -17126,21 +17664,29 @@
17126
 
17127
  if ( ! fs_is_network_admin() ) {
17128
  // Try to activate premium license.
17129
- $this->_activate_license( true );
17130
- } else {
17131
- $license_id = fs_request_get( 'license_id' );
17132
 
17133
- if ( is_object( $this->_site ) &&
17134
- FS_Plugin_License::is_valid_id( $license_id ) &&
17135
- $license_id == $this->_site->license_id
17136
- ) {
17137
- // License is already activated.
17138
- return;
17139
  }
 
 
 
 
 
17140
 
17141
- $premium_license = FS_Plugin_License::is_valid_id( $license_id ) ?
17142
- $this->_get_license_by_id( $license_id ) :
17143
- $this->_get_available_premium_license();
 
 
 
 
 
 
 
 
 
17144
 
17145
  if ( is_object( $premium_license ) ) {
17146
  $this->maybe_network_activate_addon_license( $premium_license );
@@ -19438,9 +19984,11 @@
19438
  *
19439
  * @author Vova Feldman (@svovaf)
19440
  * @since 1.2.1
 
 
19441
  */
19442
- function has_active_valid_license() {
19443
- return self::is_active_valid_license( $this->_license );
19444
  }
19445
 
19446
  /**
@@ -19532,15 +20080,16 @@
19532
  * @since 2.1.3
19533
  *
19534
  * @param FS_Plugin_License $license
 
19535
  *
19536
  * @return bool
19537
  */
19538
- private static function is_active_valid_license( $license ) {
19539
  return (
19540
  is_object( $license ) &&
19541
  FS_Plugin_License::is_valid_id( $license->id ) &&
19542
  $license->is_active() &&
19543
- $license->is_valid()
19544
  );
19545
  }
19546
 
@@ -19594,6 +20143,22 @@
19594
  );
19595
  }
19596
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19597
  /**
19598
  * Check if user is a trial or have feature enabled license.
19599
  *
@@ -20186,6 +20751,13 @@
20186
  }
20187
 
20188
  if ( 'none' !== $plan_change ) {
 
 
 
 
 
 
 
20189
  $this->do_action( 'after_license_change', $plan_change, $this->get_plan() );
20190
  }
20191
  }
@@ -20909,7 +21481,7 @@
20909
  */
20910
  private function get_latest_download_link( $label, $plugin_id = false ) {
20911
  return sprintf(
20912
- '<a target="_blank" href="%s">%s</a>',
20913
  $this->_get_latest_download_local_url( $plugin_id ),
20914
  $label
20915
  );
@@ -20980,7 +21552,7 @@
20980
  $this->get_text_inline( 'Version %s was released.', 'version-x-released' ) . ' ' . $this->get_text_inline( 'Please download %s.', 'please-download-x' ),
20981
  $update->version,
20982
  sprintf(
20983
- '<a href="%s" target="_blank">%s</a>',
20984
  $this->get_account_url( 'download_latest' ),
20985
  sprintf(
20986
  /* translators: %s: plan name (e.g. latest "Professional" version) */
@@ -21467,7 +22039,7 @@
21467
  $this->get_plugin_title(),
21468
  fs_strip_url_protocol( get_site_url( $blog_id ) ),
21469
  sprintf(
21470
- '<a href="%s" target="_blank">%s</a>',
21471
  'https://freemius.com',
21472
  'freemius.com'
21473
  )
@@ -21566,6 +22138,18 @@
21566
 
21567
  if ( is_object( $fs ) ) {
21568
  $fs->_activate_license();
 
 
 
 
 
 
 
 
 
 
 
 
21569
  }
21570
 
21571
  return;
@@ -21788,6 +22372,26 @@
21788
 
21789
  $this->_handle_account_edits();
21790
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21791
  $this->do_action( 'account_page_load_before_departure' );
21792
  }
21793
 
@@ -21924,6 +22528,86 @@
21924
  }
21925
  }
21926
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21927
  #----------------------------------------------------------------------------------
21928
  #region Contact Us
21929
  #----------------------------------------------------------------------------------
@@ -22152,6 +22836,43 @@
22152
  $this->get_api_plugin_scope();
22153
  }
22154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22155
  /**
22156
  * Show trial promotional notice (if any trial exist).
22157
  *
@@ -22705,14 +23426,18 @@
22705
  return;
22706
  }
22707
 
22708
- if ( $this->is_registered() && $this->is_tracking_allowed() ) {
22709
- if ( ! $this->is_enable_anonymous() ) {
22710
- // If opted in and tracking is allowed, don't allow to opt out if anonymous mode is disabled.
22711
- return;
22712
- }
 
 
 
22713
 
22714
- if ( ! $this->is_free_plan() ) {
22715
- // Don't allow to opt out if running in paid plan.
 
22716
  return;
22717
  }
22718
  }
@@ -22792,7 +23517,7 @@
22792
  if ( ! empty( $this->_dynamically_added_top_level_page_hook_name ) ) {
22793
  if ( $this->is_network_registered() ) {
22794
  $page = 'account';
22795
- } else if ( $this->is_network_anonymous() ) {
22796
  $this->maybe_set_slug_and_network_menu_exists_flag();
22797
  }
22798
  }
@@ -22827,10 +23552,12 @@
22827
  * @since 1.0.3
22828
  */
22829
  function _redirect_on_activation_hook() {
22830
- $url = $this->get_after_plugin_activation_redirect_url();
 
22831
 
22832
- if ( is_string( $url ) ) {
22833
- fs_redirect( $url );
 
22834
  }
22835
  }
22836
 
@@ -22870,7 +23597,7 @@
22870
 
22871
  foreach ( $this->_action_links as $new_links ) {
22872
  foreach ( $new_links as $link ) {
22873
- $before_deactivate[ $link['key'] ] = '<a href="' . $link['href'] . '"' . ( $link['external'] ? ' target="_blank"' : '' ) . '>' . $link['label'] . '</a>';
22874
  }
22875
  }
22876
 
@@ -22990,7 +23717,7 @@
22990
  '';
22991
 
22992
  return sprintf(
22993
- ' %s: <ol><li>%s.</li>%s<li>%s (<a href="%s" target="_blank">%s</a>).</li></ol>',
22994
  $this->get_text_inline( 'Please follow these steps to complete the upgrade', 'follow-steps-to-complete-upgrade' ),
22995
  ( empty( $activate_license_string ) ? '' : $activate_license_string . '</li><li>' ) .
22996
  $this->get_latest_download_link( sprintf(
@@ -23243,6 +23970,14 @@
23243
  */
23244
  function set_plugin_upgrade_complete() {
23245
  $this->_storage->plugin_upgrade_mode = false;
 
 
 
 
 
 
 
 
23246
  }
23247
 
23248
  #endregion
351
  */
352
  private $is_whitelabeled;
353
 
354
+ /**
355
+ * @author Leo Fajardo (@leorw)
356
+ * @since 2.4.0
357
+ *
358
+ * @var bool
359
+ */
360
+ private $_is_bundle_license_auto_activation_enabled = false;
361
+
362
  #region Uninstall Reasons IDs
363
 
364
  const REASON_NO_LONGER_NEEDED = 1;
377
  const REASON_DIDNT_WORK_AS_EXPECTED = 14;
378
  const REASON_TEMPORARY_DEACTIVATION = 15;
379
 
380
+ /**
381
+ * @author Leo Fajardo (@leorw)
382
+ * @since 2.3.1
383
+ *
384
+ * @var boolean|null
385
+ */
386
+ private $_use_external_pricing = null;
387
+
388
  #endregion
389
 
390
  /* Ctor
832
  return false;
833
  }
834
 
835
+ if (
836
+ ! $is_tabs_visibility_check &&
837
+ $this->is_org_repo_compliant() &&
838
+ $this->show_settings_with_tabs()
839
+ ) {
840
  /**
841
  * wp.org themes are limited to a single submenu item, and
842
  * sub-submenu items are most likely not allowed (never verified).
1477
  if ( $this->is_plugin() &&
1478
  ! isset( $this->_storage->is_plugin_new_install )
1479
  ) {
1480
+ $this->_storage->is_plugin_new_install = (
1481
+ ! is_plugin_active( $this->_plugin_basename ) &&
1482
+ empty( $this->_storage->plugin_last_version )
1483
+ );
1484
  }
1485
  }
1486
 
1503
  -1 < settings.url.indexOf('admin-ajax.php') &&
1504
  ! ( settings.url.indexOf( '<?php echo $admin_param ?>' ) > 0 )
1505
  ) {
1506
+ if (
1507
+ 'string' === typeof settings.data &&
1508
+ settings.data.indexOf( 'action=heartbeat' ) > 0
1509
+ ) {
1510
+ return;
1511
+ }
1512
+
1513
  if (settings.url.indexOf('?') > 0) {
1514
  settings.url += '&';
1515
  } else {
1517
  }
1518
 
1519
  settings.url += '<?php echo $admin_param ?>=true';
 
1520
  }
1521
  });
1522
  })(jQuery);
1534
  ?>
1535
  <script type="text/javascript">
1536
  (function ($) {
1537
+ $('.fs-submenu-item.wp-support-forum').parent().attr( { target: '_blank', rel: 'noopener noreferrer' } );
1538
  })(jQuery);
1539
  </script>
1540
  <?php
1630
  }
1631
 
1632
  add_action( 'init', array( &$this, '_maybe_add_gdpr_optin_ajax_handler') );
1633
+ add_action( 'init', array( &$this, '_maybe_add_pricing_ajax_handler' ) );
1634
  }
1635
 
1636
  if ( $this->is_plugin() ) {
1662
 
1663
  add_action( 'admin_init', array( &$this, '_redirect_on_clicked_menu_link' ), WP_FS__LOWEST_PRIORITY );
1664
 
1665
+ if ( $this->is_theme() && ! $this->is_migration() ) {
1666
  add_action( 'admin_init', array( &$this, '_add_tracking_links' ) );
1667
  }
1668
 
1674
  $this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
1675
  $this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
1676
  $this->add_ajax_action( 'set_data_debug_mode', array( &$this, '_set_data_debug_mode' ) );
1677
+ $this->add_ajax_action( 'toggle_whitelabel_mode', array( &$this, '_toggle_whitelabel_mode_ajax_handler' ) );
1678
 
1679
  if ( $this->_is_network_active && fs_is_network_admin() ) {
1680
  $this->add_ajax_action( 'network_activate', array( &$this, '_network_activate_ajax_action' ) );
2037
  * @since 2.0.0
2038
  */
2039
  function _hook_action_links_and_register_account_hooks() {
2040
+ if ( $this->is_migration() ) {
2041
+ return;
2042
+ }
2043
+
2044
  $this->_add_tracking_links();
2045
 
2046
  if ( self::is_plugins_page() && $this->is_plugin() ) {
2221
  );
2222
 
2223
  $store_option = true;
2224
+ } else if (
2225
+ isset( $id_slug_type_path_map[ $module_id ]['slug'] ) &&
2226
+ $slug !== $id_slug_type_path_map[ $module_id ]['slug']
2227
+ ) {
2228
+ $id_slug_type_path_map[ $module_id ]['slug'] = $slug;
2229
+ $store_option = true;
2230
  }
2231
 
2232
  if ( empty( $id_slug_type_path_map[ $module_id ]['path'] ) ||
4300
  )
4301
  ),
4302
  sprintf(
4303
+ '<a href="%s" target="_blank" rel="noopener noreferrer"><b>%s</b></a> - %s',
4304
  sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
4305
  $install_previous_title,
4306
  $install_previous_desc
4407
  )
4408
  ),
4409
  sprintf(
4410
+ '<a href="%s" target="_blank" rel="noopener noreferrer"><b>%s</b></a> - %s',
4411
  sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
4412
  $install_previous_title,
4413
  $install_previous_desc
4928
  } else {
4929
  $is_network_admin = fs_is_network_admin();
4930
 
4931
+ if ( ! $this->_parent->is_registered() && $this->is_registered() ) {
4932
+ // If add-on activated and parent not, automatically install parent for the user.
4933
+ $this->activate_parent_account( $this->_parent );
4934
+ } else if (
4935
  $this->_parent->is_registered() &&
4936
  ! $this->is_registered() &&
 
4937
  /**
4938
  * If not registered for add-on and the following conditions for the add-on are met, activate add-on account.
4939
  * * Network active and in network admin - network activate add-on account.
4947
  */
4948
  ( $this->is_network_active() || ! $is_network_admin )
4949
  ) {
4950
+ $premium_license = null;
4951
+
4952
+ if (
4953
+ ! $this->has_free_plan() &&
4954
+ $this->is_bundle_license_auto_activation_enabled() &&
4955
+ $this->_parent->is_activated_with_bundle_license()
4956
+ ) {
4957
+ /**
4958
+ * If the add-on has no free plan, try to activate the account only when there's a bundle license.
4959
+ *
4960
+ * @author Leo Fajardo (@leorw)
4961
+ * @since 2.4.0
4962
+ */
4963
+ $bundle_license = $this->get_active_parent_license( $this->_parent->_get_license()->secret_key, false );
4964
+
4965
+ if (
4966
+ is_object( $bundle_license ) &&
4967
+ ! empty( $bundle_license->products ) &&
4968
+ in_array( $this->get_id(), $bundle_license->products )
4969
+ ) {
4970
+ $premium_license = $bundle_license;
4971
+ }
4972
+ }
4973
+
4974
+ if ( $this->has_free_plan() || is_object( $premium_license) ) {
4975
+ // If parent plugin activated, automatically install add-on for the user.
4976
+ $this->_activate_addon_account(
4977
+ $this->_parent,
4978
+ ( $this->is_network_active() && $is_network_admin ) ?
4979
+ true :
4980
+ get_current_blog_id(),
4981
+ $premium_license
4982
+ );
4983
+ }
4984
  }
4985
 
4986
  // @todo This should be only executed on activation. It should be migrated to register_activation_hook() together with other activation related logic.
5482
  * @return bool
5483
  */
5484
  function is_extensions_tracking_allowed() {
5485
+ return ( true === $this->apply_filters(
5486
+ 'is_extensions_tracking_allowed',
5487
+ $this->_storage->get( 'is_extensions_tracking_allowed', true )
5488
+ ) );
5489
  }
5490
 
5491
  /**
5671
  $this->_anonymous_mode = $this->get_bool_option( $plugin_info, 'anonymous_mode', false );
5672
  }
5673
  $this->_permissions = $this->get_option( $plugin_info, 'permissions', array() );
5674
+ $this->_is_bundle_license_auto_activation_enabled = $this->get_option( $plugin_info, 'bundle_license_auto_activation', false );
5675
 
5676
  if ( ! empty( $plugin_info['trial'] ) ) {
5677
  $this->_trial_days = $this->get_numeric_option(
7149
  * @since 1.0.7
7150
  */
7151
  function _admin_init_action() {
7152
+ $is_migration = $this->is_migration();
7153
+
7154
  /**
7155
  * Automatically redirect to connect/activation page after plugin activation.
7156
  *
7163
  /**
7164
  * Don't redirect if activating multiple plugins at once (bulk activation).
7165
  */
7166
+ } else if ( ! $is_migration ) {
7167
  $this->_redirect_on_activation_hook();
7168
  return;
7169
  }
7170
  }
7171
 
7172
+ if ( $is_migration ) {
7173
+ return;
7174
+ }
7175
+
7176
  if ( fs_request_is_action( $this->get_unique_affix() . '_skip_activation' ) ) {
7177
  check_admin_referer( $this->get_unique_affix() . '_skip_activation' );
7178
 
7203
  )
7204
  ) {
7205
  if ( ! $this->is_pending_activation() ) {
7206
+ if ( ! $this->is_activation_page() ) {
7207
  /**
7208
  * If a user visits any other admin page before activating the premium-only theme with a valid
7209
  * license, reactivate the previous theme.
7737
  * @author Leo Fajardo (@leorw)
7738
  * @since 1.2.2
7739
  */
7740
+ if (
7741
+ is_plugin_active( $other_version_basename ) &&
7742
+ $this->apply_filters( 'deactivate_on_activation', true )
7743
+ ) {
7744
  deactivate_plugins( $other_version_basename );
7745
  }
7746
  }
7849
  $this->_storage->is_plugin_new_install = empty( $this->_storage->plugin_last_version );
7850
  }
7851
 
7852
+ /**
7853
+ * Also flush when activating the premium version so that even if Freemius was off before, the API
7854
+ * connectivity test can be run again.
7855
+ *
7856
+ * @author Leo Fajardo (@leorw)
7857
+ * @since 2.2.3.1
7858
+ */
7859
+ $has_api_connectivity = $this->has_api_connectivity( WP_FS__DEV_MODE || $is_premium_version_activation );
7860
+
7861
  if ( ! $this->_anonymous_mode &&
7862
+ $has_api_connectivity &&
7863
  ! $this->_isAutoInstall
7864
  ) {
7865
  // Store hint that the plugin was just activated to enable auto-redirection to settings.
7892
  return;
7893
  }
7894
 
7895
+ $license = $this->get_active_parent_license();
7896
  if ( ! is_object( $license ) ) {
7897
  return;
7898
  }
7899
 
7900
+ if (
7901
+ $this->is_bundle_license_auto_activation_enabled() &&
7902
+ ! empty( $license->products )
7903
+ ) {
7904
+ $this->activate_bundle_license( $license );
7905
+
7906
+ return;
7907
+ }
7908
+
7909
  if ( ! $this->is_registered() ) {
7910
  // Opt in with a license key.
7911
  $this->opt_in(
7928
  }
7929
  }
7930
 
 
7931
  /**
7932
  * @author Leo Fajardo (@leorw)
7933
  * @since 2.3.0
7943
 
7944
  $license = ( ! is_null( $license ) ) ?
7945
  $license :
7946
+ $this->get_active_parent_license();
7947
 
7948
  if ( ! is_object( $license ) ) {
7949
  return;
7950
  }
7951
 
7952
+ if (
7953
+ $this->is_bundle_license_auto_activation_enabled() &&
7954
+ ! empty( $license->products )
7955
+ ) {
7956
+ $this->activate_bundle_license( $license );
7957
+
7958
+ return;
7959
+ }
7960
+
7961
  if ( ! $this->is_network_registered() ) {
7962
  $sites = $this->get_sites_for_network_level_optin();
7963
 
8021
  }
8022
 
8023
  /**
8024
+ * Tries to activate a bundle license for all supported products if the current product is activated with a bundle license. This is called after activating an available license (not via the license activation dialog but by clicking on a license activation button) for a product via its "Account" page.
8025
+ *
8026
+ * @author Leo Fajardo (@leorw)
8027
+ * @since 2.4.0
8028
+ *
8029
+ * @param FS_Plugin_License $license
8030
+ * @param array $sites
8031
+ * @param int $blog_id
8032
+ */
8033
+ private function maybe_activate_bundle_license( FS_Plugin_License $license = null, $sites = array(), $blog_id = 0 ) {
8034
+ if ( ! is_object( $license ) && $this->has_active_valid_license() ) {
8035
+ $license = $this->_license;
8036
+ }
8037
+
8038
+ if ( ! is_object( $license ) ) {
8039
+ return;
8040
+ }
8041
+
8042
+ $parent_license = ( ! empty( $license->products ) ) ?
8043
+ $license :
8044
+ $this->get_active_parent_license( $license->secret_key );
8045
+
8046
+ if ( is_object( $parent_license ) ) {
8047
+ $this->activate_bundle_license( $parent_license, $sites, $blog_id );
8048
+ }
8049
+ }
8050
+
8051
+ /**
8052
+ * Try to activate a bundle license for all the bundle products installed on the site.
8053
+ * (1) If a child product install already has a license, the bundle license won't be activated.
8054
+ * (2) On multi-site networks, if the attempt to activate the bundle license is triggered from the network admin, the bundle license activation will only work for non-delegated sites and only if none of them is associated with a license. Even if one of the sites has the product installed with a license key, skip the bundle license activation for the product.
8055
+ * (3) On multi-site networks, if the attempt to activate the bundle license is triggered from a site-level admin, only activate the license if the product is site-level activated or delegated, and the product installation is not yet associated with a license.
8056
+ *
8057
+ * @author Leo Fajardo (@leorw)
8058
+ * @since 2.4.0
8059
+ *
8060
+ * @param FS_Plugin_License $license
8061
+ * @param array $sites
8062
+ * @param int $current_blog_id
8063
+ */
8064
+ private function activate_bundle_license( $license, $sites = array(), $current_blog_id = 0 ) {
8065
+ $is_network_admin = fs_is_network_admin();
8066
+
8067
+ $installs_by_blog_map = array();
8068
+ $site_info_by_blog_map = array();
8069
+
8070
+ /**
8071
+ * Try to activate the license for all supported products.
8072
+ *
8073
+ * @author Leo Fajardo
8074
+ */
8075
+ foreach ( $license->products as $product_id ) {
8076
+ $fs = self::get_instance_by_id( $product_id );
8077
+
8078
+ if ( ! is_object( $fs ) ) {
8079
+ continue;
8080
+ }
8081
+
8082
+ if ( ! $fs->has_paid_plan() ) {
8083
+ continue;
8084
+ }
8085
+
8086
+ if (
8087
+ ! $fs->is_addon() &&
8088
+ ! FS_Plan_Manager::instance()->has_paid_plan( $fs->_plans )
8089
+ ) {
8090
+ /**
8091
+ * The parent product can be free-only but can have its `has_paid_plan` flag set to `true` when
8092
+ * there is a context bundle.
8093
+ */
8094
+ continue;
8095
+ }
8096
+
8097
+ if ( $current_blog_id > 0 ) {
8098
+ $fs->switch_to_blog( $current_blog_id );
8099
+ }
8100
+
8101
+ if ( $fs->has_active_valid_license() ) {
8102
+ continue;
8103
+ }
8104
+
8105
+ if ( ! $is_network_admin || $current_blog_id > 0 ) {
8106
+ if ( $fs->is_network_active() && ! $fs->is_delegated_connection( $current_blog_id ) ) {
8107
+ // Do not try to activate the license in the site level if the product is network active and the connection was not delegated.
8108
+ continue;
8109
+ }
8110
+ } else {
8111
+ if ( ! $fs->is_network_active() ) {
8112
+ // Do not try to activate the license in the network level if the product is not network active.
8113
+ continue;
8114
+ }
8115
+
8116
+ if ( $fs->is_network_delegated_connection() ) {
8117
+ // Do not try to activate the license in the network level if the activation has been delegated to site admins.
8118
+ continue;
8119
+ }
8120
+
8121
+ $has_install_with_license = false;
8122
+
8123
+ // Collection of sites that have an install entity that is not activated with a license or non-delegated sites that have no install entity, or both types of site.
8124
+ $filtered_sites = array();
8125
+
8126
+ if ( empty( $sites ) ) {
8127
+ $all_sites = self::get_sites();
8128
+
8129
+ foreach ( $all_sites as $site ) {
8130
+ $sites[] = array( 'blog_id' => self::get_site_blog_id( $site ) );
8131
+ }
8132
+ } else {
8133
+ // Populate the map here to avoid calling `$fs->get_site_info( $site );` in the other `for` loop below.
8134
+ foreach ( $sites as $site ) {
8135
+ if ( ! isset( $site['blog_id'] ) || ! is_numeric( $site['blog_id'] ) ) {
8136
+ continue;
8137
+ }
8138
+
8139
+ $site_info_by_blog_map[ $site['blog_id'] ] = $site;
8140
+ }
8141
+ }
8142
+
8143
+ foreach ( $sites as $site ) {
8144
+ if ( ! isset( $site['blog_id'] ) || ! is_numeric( $site['blog_id'] ) ) {
8145
+ continue;
8146
+ }
8147
+
8148
+ $blog_id = $site['blog_id'];
8149
+
8150
+ if ( ! isset( $installs_by_blog_map[ $blog_id ] ) ) {
8151
+ $installs_by_blog_map[ $blog_id ] = self::get_all_sites( $fs->get_module_type(), $blog_id );
8152
+ }
8153
+
8154
+ $installs = $installs_by_blog_map[ $blog_id ];
8155
+ $install = null;
8156
+
8157
+ if ( isset( $installs[ $fs->get_slug() ] ) ) {
8158
+ $install = $installs[ $fs->get_slug() ];
8159
+
8160
+ if (
8161
+ is_object( $install ) &&
8162
+ (
8163
+ ! FS_Site::is_valid_id( $install->id ) ||
8164
+ ! FS_User::is_valid_id( $install->user_id ) ||
8165
+ ! FS_Plugin_Plan::is_valid_id( $install->plan_id )
8166
+ )
8167
+ ) {
8168
+ $install = null;
8169
+ }
8170
+ }
8171
+
8172
+ if (
8173
+ is_object( $install ) &&
8174
+ FS_Plugin_License::is_valid_id( $install->license_id )
8175
+ ) {
8176
+ $has_install_with_license = true;
8177
+ break;
8178
+ }
8179
+
8180
+ if ( $fs->is_site_delegated_connection( $blog_id ) ) {
8181
+ // Site activation delegated, don't activate bundle license on the site in the network admin.
8182
+ continue;
8183
+ }
8184
+
8185
+ if ( ! isset( $site_info_by_blog_map[ $blog_id ] ) ) {
8186
+ $site_info_by_blog_map[ $blog_id ] = $fs->get_site_info( $site );
8187
+ }
8188
+
8189
+ $filtered_sites[] = $site_info_by_blog_map[ $blog_id ];
8190
+ }
8191
+
8192
+ if ( $has_install_with_license || empty( $filtered_sites ) ) {
8193
+ // Do not try to activate the license at the network level if there's any install with a license or there's no site to activate the license on.
8194
+ continue;
8195
+ }
8196
+
8197
+ $sites = $filtered_sites;
8198
+ }
8199
+
8200
+ $fs->activate_migrated_license(
8201
+ $license->secret_key,
8202
+ null,
8203
+ null,
8204
+ $sites,
8205
+ ( $current_blog_id > 0 ? $current_blog_id : null )
8206
+ );
8207
+ }
8208
+ }
8209
+
8210
+ /**
8211
+ * Returns a parent license that can be activated for the context product.
8212
+ *
8213
  * @author Leo Fajardo (@leorw)
8214
  * @since 2.3.0
8215
  *
8216
+ * @param string|null $license_key
8217
+ * @param bool $flush
8218
+ *
8219
  * @return FS_Plugin_License
8220
  */
8221
+ function get_active_parent_license( $license_key = null, $flush = true ) {
8222
  $parent_licenses_endpoint = "/plugins/{$this->get_id()}/parent_licenses.json?filter=activatable";
 
8223
 
8224
+ $fs = $this;
8225
+
8226
+ if ( $this->is_addon() ) {
8227
+ $parent_instance = $this->get_parent_instance();
8228
+
8229
+ if ( is_object( $parent_instance ) && $parent_instance->is_registered() ) {
8230
+ $fs = $parent_instance;
8231
+ }
8232
+ }
8233
+
8234
+ $foreign_licenses = $fs->get_foreign_licenses_info(
8235
  self::get_all_licenses( $this->get_parent_id() )
8236
  );
8237
 
8245
  $parent_licenses_endpoint = add_query_arg( $foreign_licenses, $parent_licenses_endpoint );
8246
  }
8247
 
8248
+ $result = $fs->get_current_or_network_user_api_scope()->get( $parent_licenses_endpoint, $flush );
8249
 
8250
  if (
8251
  ! $this->is_api_result_object( $result, 'licenses' ) ||
8255
  return null;
8256
  }
8257
 
8258
+ $parent_license = null;
8259
 
8260
+ if ( empty( $license_key ) ) {
8261
+ $parent_license = $result->licenses[0];
8262
+ } else {
8263
+ foreach ( $result->licenses as $license ) {
8264
+ if ( $license_key === $license->secret_key ) {
8265
+ $parent_license = $license;
8266
+ break;
8267
+ }
8268
+ }
8269
+ }
8270
+
8271
+ if ( ! is_null( $parent_license ) ) {
8272
+ $parent_license = new FS_Plugin_License( $parent_license );
8273
+ }
8274
+
8275
+ return $parent_license;
8276
  }
8277
 
8278
  /**
9025
  'is_uninstalled' => false,
9026
  );
9027
 
 
9028
  $network_plugins_cache->plugins[ $basename ] = $new_plugin;
9029
 
9030
+ $is_site_level_active = (
9031
+ isset( $site_active_plugins[ $basename ] ) &&
9032
+ $site_active_plugins[ $basename ]['is_active']
9033
+ );
9034
+
9035
+ /**
9036
+ * If not network active, set the activity status based on the site-level plugin status.
9037
+ */
9038
+ if ( ! $new_plugin['is_active'] ) {
9039
+ $new_plugin['is_active'] = $is_site_level_active;
9040
+ }
9041
+
9042
+ $plugins_update_data[] = $new_plugin;
9043
+
9044
  if ( isset( $site_active_plugins[ $basename ] ) ) {
9045
  $site_active_plugins_cache->plugins[ $basename ] = $new_plugin;
9046
+ $site_active_plugins_cache->plugins[ $basename ]['is_active'] = $is_site_level_active;
9047
  }
9048
  }
9049
  }
10443
 
10444
  $class_name = '';
10445
 
10446
+ if ( fs_starts_with( $option_name, WP_FS__MODULE_TYPE_THEME . '_' ) ) {
10447
+ $option_name = str_replace( WP_FS__MODULE_TYPE_THEME . '_', '', $option_name );
10448
+ }
10449
+
10450
  switch ( $option_name ) {
10451
  case 'plugins':
10452
  case 'themes':
10731
  return ( is_object( $this->_site ) && $this->_site->is_tracking_allowed() );
10732
  }
10733
 
10734
+ /**
10735
+ * @author Leo Fajardo (@leorw)
10736
+ * @since 2.4.0
10737
+ *
10738
+ * @return bool
10739
+ */
10740
+ function is_bundle_license_auto_activation_enabled() {
10741
+ return $this->is_addon() ?
10742
+ ( is_object( $this->_parent ) && $this->_parent->is_bundle_license_auto_activation_enabled() ) :
10743
+ $this->_is_bundle_license_auto_activation_enabled;
10744
+ }
10745
+
10746
  /**
10747
  * @author Vova Feldman (@svovaf)
10748
  * @since 1.0.4
13026
  * @since 1.2.0
13027
  */
13028
  function _add_license_activation() {
13029
+ if ( $this->is_migration() ) {
13030
+ return;
13031
+ }
13032
+
13033
  if ( ! $this->is_user_admin() ) {
13034
  // Only admins can activate a license.
13035
  return;
13088
  return;
13089
  }
13090
 
13091
+ $installs_ids_with_foreign_licenses = $this->get_installs_ids_with_foreign_licenses();
13092
+
13093
+ if ( empty( $installs_ids_with_foreign_licenses ) ) {
13094
  // Handle user change only when the parent product or one of its add-ons is activated with a foreign license.
13095
  return;
13096
  }
13147
  }
13148
  }
13149
 
13150
+ /**
13151
+ * @author Edgar Melkonyan
13152
+ * @since 2.4.1
13153
+ *
13154
+ * @throws Freemius_Exception
13155
+ */
13156
+ function _toggle_whitelabel_mode_ajax_handler() {
13157
+ $this->_logger->entrance();
13158
+
13159
+ $this->check_ajax_referer( 'toggle_whitelabel_mode' );
13160
+
13161
+ if ( ! $this->is_user_admin() ) {
13162
+ // Only for admins.
13163
+ self::shoot_ajax_failure();
13164
+ }
13165
+
13166
+ $license = $this->get_api_user_scope()->call(
13167
+ "/licenses/{$this->_site->license_id}.json",
13168
+ 'put',
13169
+ array( 'is_whitelabeled' => ! $this->_license->is_whitelabeled )
13170
+ );
13171
+
13172
+ if ( ! $this->is_api_result_entity( $license ) ) {
13173
+ self::shoot_ajax_failure(
13174
+ FS_Api::is_api_error_object( $license ) ?
13175
+ $license->error->message :
13176
+ fs_text_inline( "An unknown error has occurred while trying to toggle the license's white-label mode.", 'unknown-error-occurred', $this->get_slug() )
13177
+ );
13178
+ }
13179
+
13180
+ $this->_license->is_whitelabeled = $license->is_whitelabeled;
13181
+ $this->_store_licenses();
13182
+
13183
+ $this->_sync_license();
13184
+
13185
+ if ( ! $license->is_whitelabeled ) {
13186
+ $this->_admin_notices->remove_sticky( 'license_whitelabeled' );
13187
+ } else {
13188
+ $this->_admin_notices->add_sticky(
13189
+ sprintf(
13190
+ $this->get_text_inline(
13191
+ 'Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s.',
13192
+ 'license_whitelabeled'
13193
+ ),
13194
+ "<strong>{$this->get_plugin_title()}</strong>",
13195
+ sprintf( '<a href="https://users.freemius.com" target="_blank">%s</a>', $this->get_text_inline( 'User Dashboard', 'user-dashboard' ) ),
13196
+ sprintf( '<a href="#" class="fs-toggle-whitelabel-mode">%s</a>', $this->get_text_inline( 'revert it now', 'revert-it-now' ) )
13197
+ ),
13198
+ 'license_whitelabeled'
13199
+ );
13200
+ }
13201
+
13202
+ self::shoot_ajax_response( array( 'success' => true ) );
13203
+ }
13204
+
13205
  /**
13206
  * @author Leo Fajardo (@leorw)
13207
  * @since 2.3.0
13281
  exit;
13282
  }
13283
 
13284
+ $sites = fs_is_network_admin() ?
13285
+ fs_request_get( 'sites', array(), 'post' ) :
13286
+ array();
13287
+
13288
  $result = $this->activate_license(
13289
  $license_key,
13290
+ $sites,
 
 
13291
  fs_request_get_bool( 'is_marketing_allowed', null ),
13292
  fs_request_get( 'blog_id', null ),
13293
  fs_request_get( 'module_id', null, 'post' ),
13295
  fs_request_get_bool( 'is_extensions_tracking_allowed', true )
13296
  );
13297
 
13298
+ if (
13299
+ $result['success'] &&
13300
+ $this->is_bundle_license_auto_activation_enabled()
13301
+ ) {
13302
+ $license = new FS_Plugin_License();
13303
+ $license->secret_key = $license_key;
13304
+
13305
+ $this->maybe_activate_bundle_license( $license, $sites );
13306
+ }
13307
+
13308
  echo json_encode( $result );
13309
 
13310
  exit;
13391
  }
13392
 
13393
  /**
13394
+ * @author Leo Fajardo (@leorw)
13395
+ * @since 2.3.2.14
13396
+ */
13397
+ function starting_migration() {
13398
+ if ( ! empty( $this->_storage->license_migration ) ) {
13399
+ // Do not overwrite the data if already set.
13400
+ return;
13401
+ }
13402
+
13403
+ $this->_storage->license_migration = array(
13404
+ 'is_migrating' => true,
13405
+ 'start_timestamp' => time()
13406
+ );
13407
+ }
13408
+
13409
+ /**
13410
+ * @author Leo Fajardo (@leorw)
13411
+ * @since 2.3.2.14
13412
+ */
13413
+ function is_migration() {
13414
+ if ( $this->is_addon() ) {
13415
+ return $this->get_parent_instance()->is_migration();
13416
+ }
13417
+
13418
+ if ( empty( $this->_storage->license_migration ) ) {
13419
+ return false;
13420
+ }
13421
+
13422
+ if ( ! $this->_storage->license_migration['is_migrating'] ) {
13423
+ return false;
13424
+ }
13425
+
13426
+ return (
13427
+ // Return `true` if the migration is within 5 minutes from the starting time.
13428
+ ( time() - $this->_storage->license_migration['start_timestamp'] ) <= WP_FS__TIME_5_MIN_IN_SEC
13429
+ );
13430
+ }
13431
+
13432
+ /**
13433
+ *
13434
  * A helper method to activate migrated licenses. If the product is network activated and integrated, the method will network activate the license.
13435
  *
13436
  * @author Vova Feldman (@svovaf)
13439
  * @param string $license_key
13440
  * @param null|bool $is_marketing_allowed
13441
  * @param null|number $plugin_id
13442
+ * @param array $sites
13443
+ * @param int $blog_id
13444
  *
13445
  * @return array {
13446
  * @var bool $success
13453
  function activate_migrated_license(
13454
  $license_key,
13455
  $is_marketing_allowed = null,
13456
+ $plugin_id = null,
13457
+ $sites = array(),
13458
+ $blog_id = null
13459
  ) {
13460
  $this->_logger->entrance();
13461
 
13462
  $result = $this->activate_license(
13463
  $license_key,
13464
+ ( empty( $sites ) && is_null( $blog_id ) && $this->is_network_active() ) ?
13465
  $this->get_sites_for_network_level_optin() :
13466
+ $sites,
13467
  $is_marketing_allowed,
13468
+ $blog_id,
13469
  $plugin_id
13470
  );
13471
 
13475
  return $result;
13476
  }
13477
 
13478
+ /**
13479
+ * @author Leo Fajardo (@leorw)
13480
+ * @since 2.3.1
13481
+ *
13482
+ * @return string
13483
+ */
13484
+ function get_pricing_js_path() {
13485
+ return $this->apply_filters( 'freemius_pricing_js_path', WP_FS__DIR_INCLUDES . '/freemius-pricing/freemius-pricing.js' );
13486
+ }
13487
+
13488
+ /**
13489
+ * @author Leo Fajardo (@leorw)
13490
+ * @since 2.3.1
13491
+ *
13492
+ * @return bool
13493
+ */
13494
+ function should_use_external_pricing() {
13495
+ if ( is_null( $this->_use_external_pricing ) ) {
13496
+ $pricing_js_path = $this->get_pricing_js_path();
13497
+
13498
+ $this->_use_external_pricing = ( empty( $pricing_js_path ) || ! file_exists( $pricing_js_path ) );
13499
+ }
13500
+
13501
+ return $this->_use_external_pricing;
13502
+ }
13503
+
13504
  /**
13505
  * The implementation of this method was previously in `_activate_license_ajax_action()`.
13506
  *
13533
 
13534
  $license_key = trim( $license_key );
13535
 
13536
+ $is_network_activation_or_migration = (
13537
+ fs_is_network_admin() ||
13538
+ ( ! empty( $sites ) && $this->is_migration() )
13539
+ );
13540
+
13541
+ if ( ! $is_network_activation_or_migration ) {
13542
  // If the license activation is executed outside the context of a network admin, ignore the sites collection.
13543
  $sites = array();
13544
  }
13567
  $user = $fs->get_current_or_network_user();
13568
  }
13569
 
13570
+ if ( $has_valid_blog_id ) {
13571
+ /**
13572
+ * If a specific blog ID was provided, activate the license only on the specific blog that is associated with the given blog ID.
13573
+ *
13574
+ * @author Leo Fajardo (@leorw)
13575
+ */
13576
+ $fs->switch_to_blog( $blog_id );
13577
+ }
13578
+
13579
  if ( is_object( $user ) ) {
13580
+ if ( $is_network_activation_or_migration && ! $has_valid_blog_id ) {
13581
  // If no specific blog ID was provided, activate the license for all sites in the network.
13582
  $blog_2_install_map = array();
13583
  $site_ids = array();
13616
  }
13617
  }
13618
  } else {
 
 
 
 
 
 
 
 
 
 
13619
  if ( $fs->is_registered() ) {
13620
  $params = array(
13621
  'license_key' => $fs->apply_filters( 'license_key', $license_key )
13670
  if ( empty( $error ) ) {
13671
  $fs->network_upgrade_mode_completed();
13672
 
13673
+ $fs->_user = $user;
13674
+
13675
+ if ( fs_is_network_admin() && ! $has_valid_blog_id ) {
13676
+ $fs->_site = $fs->get_network_install();
13677
+ }
13678
+
13679
  $fs->_sync_license( true, $has_valid_blog_id );
13680
 
13681
  $this->maybe_sync_install_user();
13682
 
13683
  $next_page = $fs->is_addon() ?
13684
  $fs->get_parent_instance()->get_account_url() :
13685
+ $fs->get_after_activation_url( 'after_connect_url' );
13686
  }
13687
  } else {
13688
  $next_page = $fs->opt_in(
13700
  if ( isset( $next_page->error ) ) {
13701
  $error = $next_page->error;
13702
  } else {
13703
+ if ( $is_network_activation_or_migration ) {
13704
  /**
13705
  * Get the list of sites that were just opted-in (and license activated).
13706
  * This is an optimization for the next part below saving some DB queries.
14814
  * @return bool
14815
  */
14816
  function is_user_in_admin() {
14817
+ return (
14818
+ is_admin() &&
14819
+ ! self::is_ajax() &&
14820
+ ! self::is_cron() &&
14821
+ ( 'admin-post.php' !== self::get_current_page() )
14822
+ );
14823
  }
14824
 
14825
  /**
15131
  if ( function_exists( 'get_sites' ) ) {
15132
  // For WP 4.6 and above.
15133
  return get_sites( $args );
15134
+ } else if ( function_exists( 'wp_' . 'get_sites' ) ) {
15135
  // For WP 3.7 to WP 4.5.
15136
+ /**
15137
+ * This is a hack suggested previously proposed by the TRT. Our SDK is compliant with older WP versions and we'd like to keep it that way.
15138
+ *
15139
+ * @todo Remove this hack once this false-positive error is removed from the Theme Sniffer.
15140
+ *
15141
+ * @since 2.3.3
15142
+ * @author Vova Feldman (@svovaf)
15143
+ */
15144
+ $fn = 'wp_' . 'get_sites';
15145
+ return $fn( $args );
15146
  } else {
15147
  // For WP 3.6 and below.
15148
  return get_blog_list( 0, 'all' );
15319
  * @return bool Since 2.3.1 returns if a switch was made.
15320
  */
15321
  function switch_to_blog( $blog_id, FS_Site $install = null ) {
15322
+ if ( ! is_numeric( $blog_id ) || $blog_id == $this->_context_is_network_or_blog_id ) {
15323
  return false;
15324
  }
15325
 
16706
  'http' => 402
16707
  );
16708
 
16709
+ $this->maybe_modify_api_curl_error_message( $result );
16710
+
16711
  return $result;
16712
  }
16713
 
17554
  * @author Vova Feldman (@svovaf)
17555
  * @since 1.0.6
17556
  *
17557
+ * @param Freemius $parent_fs
17558
+ * @param bool|int|null $network_level_or_blog_id True for network level opt-in and integer for opt-in for specified blog in the network.
17559
+ * @param FS_Plugin_License $bundle_license Since 2.4.0. If provided, this license will be activated for the add-on.
17560
  */
17561
+ private function _activate_addon_account(
17562
+ Freemius $parent_fs,
17563
+ $network_level_or_blog_id = null,
17564
+ FS_Plugin_License $bundle_license = null
17565
+ ) {
17566
  if ( $this->is_registered() ) {
17567
  // Already activated.
17568
  return;
17601
  }
17602
  }
17603
 
17604
+ if ( is_object( $bundle_license ) ) {
17605
+ $params['license_key'] = $bundle_license->secret_key;
17606
+ }
17607
+
17608
  // Activate add-on with parent plugin credentials.
17609
  $result = $parent_fs->get_api_site_scope()->call(
17610
  "/addons/{$this->_plugin->id}/installs.json",
17613
  );
17614
 
17615
  if ( ! $this->is_api_result_object( $result, 'installs' ) ) {
17616
+ if ( is_object( $bundle_license ) ) {
17617
+ /**
17618
+ * When a license object is provided, it's an attempt by the SDK to activate a bundle license and not a user-initiated action, therefore, do not show any admin notice to avoid confusion (e.g.: the notice will show up just above the opt-in link). If the license activation fails, the admin will see an opt-in link instead.
17619
+ *
17620
+ * @author Leo Fajardo (@leorw)
17621
+ * @since 2.4.0
17622
+ */
17623
+ } else {
17624
+ $error_message = FS_Api::is_api_error_object( $result ) ?
17625
+ $result->error->message :
17626
+ $this->get_text_inline( 'An unknown error has occurred.', 'unknown-error' );
17627
 
17628
+ $this->_admin_notices->add(
17629
+ sprintf( $this->get_text_inline( 'Couldn\'t activate %s.', 'could-not-activate-x' ), $this->get_plugin_name() ) . ' ' .
17630
+ $this->get_text_inline( 'Please contact us with the following message:', 'contact-us-with-error-message' ) . ' ' . '<b>' . $error_message . '</b>',
17631
+ $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
17632
+ 'error'
17633
+ );
17634
+ }
17635
 
17636
  return;
17637
  }
17664
 
17665
  if ( ! fs_is_network_admin() ) {
17666
  // Try to activate premium license.
17667
+ $this->_activate_license( true, $bundle_license );
 
 
17668
 
17669
+ if ( is_object( $bundle_license ) ) {
17670
+ $this->maybe_activate_bundle_license( $bundle_license );
 
 
 
 
17671
  }
17672
+ } else {
17673
+ if ( is_object( $bundle_license ) ) {
17674
+ $premium_license = $bundle_license;
17675
+ } else {
17676
+ $license_id = fs_request_get( 'license_id' );
17677
 
17678
+ if ( is_object( $this->_site ) &&
17679
+ FS_Plugin_License::is_valid_id( $license_id ) &&
17680
+ $license_id == $this->_site->license_id
17681
+ ) {
17682
+ // License is already activated.
17683
+ return;
17684
+ }
17685
+
17686
+ $premium_license = FS_Plugin_License::is_valid_id( $license_id ) ?
17687
+ $this->_get_license_by_id( $license_id ) :
17688
+ $this->_get_available_premium_license();
17689
+ }
17690
 
17691
  if ( is_object( $premium_license ) ) {
17692
  $this->maybe_network_activate_addon_license( $premium_license );
19984
  *
19985
  * @author Vova Feldman (@svovaf)
19986
  * @since 1.2.1
19987
+ *
19988
+ * @param bool $check_expiration
19989
  */
19990
+ function has_active_valid_license( $check_expiration = true ) {
19991
+ return self::is_active_valid_license( $this->_license, $check_expiration );
19992
  }
19993
 
19994
  /**
20080
  * @since 2.1.3
20081
  *
20082
  * @param FS_Plugin_License $license
20083
+ * @param bool $check_expiration
20084
  *
20085
  * @return bool
20086
  */
20087
+ private static function is_active_valid_license( $license, $check_expiration = true ) {
20088
  return (
20089
  is_object( $license ) &&
20090
  FS_Plugin_License::is_valid_id( $license->id ) &&
20091
  $license->is_active() &&
20092
+ ( ! $check_expiration || $license->is_valid() )
20093
  );
20094
  }
20095
 
20143
  );
20144
  }
20145
 
20146
+ /**
20147
+ * Checks if the product is activated with a bundle license.
20148
+ *
20149
+ * @author Leo Fajardo (@leorw)
20150
+ * @since 2.4.0
20151
+ *
20152
+ * @return bool
20153
+ */
20154
+ function is_activated_with_bundle_license() {
20155
+ if ( ! $this->has_features_enabled_license() ) {
20156
+ return false;
20157
+ }
20158
+
20159
+ return FS_Plugin_License::is_valid_id( $this->_license->parent_license_id );
20160
+ }
20161
+
20162
  /**
20163
  * Check if user is a trial or have feature enabled license.
20164
  *
20751
  }
20752
 
20753
  if ( 'none' !== $plan_change ) {
20754
+ if (
20755
+ ! is_object( $this->_license ) ||
20756
+ ! $this->_license->is_whitelabeled
20757
+ ) {
20758
+ $this->_admin_notices->remove_sticky( 'license_whitelabeled' );
20759
+ }
20760
+
20761
  $this->do_action( 'after_license_change', $plan_change, $this->get_plan() );
20762
  }
20763
  }
21481
  */
21482
  private function get_latest_download_link( $label, $plugin_id = false ) {
21483
  return sprintf(
21484
+ '<a target="_blank" rel="noopener" href="%s">%s</a>',
21485
  $this->_get_latest_download_local_url( $plugin_id ),
21486
  $label
21487
  );
21552
  $this->get_text_inline( 'Version %s was released.', 'version-x-released' ) . ' ' . $this->get_text_inline( 'Please download %s.', 'please-download-x' ),
21553
  $update->version,
21554
  sprintf(
21555
+ '<a href="%s" target="_blank" rel="noopener">%s</a>',
21556
  $this->get_account_url( 'download_latest' ),
21557
  sprintf(
21558
  /* translators: %s: plan name (e.g. latest "Professional" version) */
22039
  $this->get_plugin_title(),
22040
  fs_strip_url_protocol( get_site_url( $blog_id ) ),
22041
  sprintf(
22042
+ '<a href="%s" target="_blank" rel="noopener">%s</a>',
22043
  'https://freemius.com',
22044
  'freemius.com'
22045
  )
22138
 
22139
  if ( is_object( $fs ) ) {
22140
  $fs->_activate_license();
22141
+
22142
+ /**
22143
+ * Remove the product ID from `$_REQUEST` so that the syncing of the license for the other products will work properly.
22144
+ *
22145
+ * @author Leo Fajardo (@leorw)
22146
+ * @since 2.4.0
22147
+ */
22148
+ unset( $_REQUEST['plugin_id'] );
22149
+
22150
+ if ( $this->is_bundle_license_auto_activation_enabled() ) {
22151
+ $fs->maybe_activate_bundle_license( null, array(), is_numeric( $blog_id ) ? $blog_id : 0 );
22152
+ }
22153
  }
22154
 
22155
  return;
22372
 
22373
  $this->_handle_account_edits();
22374
 
22375
+ if (
22376
+ is_object( $this->_license ) &&
22377
+ $this->_license->user_id == $this->_user->id &&
22378
+ ! $this->is_whitelabeled( true )
22379
+ ) {
22380
+ $this->_admin_notices->add(
22381
+ sprintf(
22382
+ $this->get_text_inline( "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin.", 'license_not_whitelabeled' ),
22383
+ sprintf(
22384
+ '<a href="#" class="fs-toggle-whitelabel-mode">%s</a>',
22385
+ $this->get_text_inline( 'Click here', 'click-here' )
22386
+ )
22387
+ ),
22388
+ '',
22389
+ 'success',
22390
+ false,
22391
+ 'license_not_whitelabeled'
22392
+ );
22393
+ }
22394
+
22395
  $this->do_action( 'account_page_load_before_departure' );
22396
  }
22397
 
22528
  }
22529
  }
22530
 
22531
+ /**
22532
+ * @author Leo Fajardo (@leorw)
22533
+ * @since 2.3.1
22534
+ */
22535
+ function _maybe_add_pricing_ajax_handler() {
22536
+ if ( ! $this->should_use_external_pricing() ) {
22537
+ $this->add_ajax_action( 'pricing_ajax_action', array( &$this, '_fs_pricing_ajax_action_handler' ) );
22538
+ }
22539
+ }
22540
+
22541
+ /**
22542
+ * @author Leo Fajardo (@leorw)
22543
+ * @since 2.3.1
22544
+ */
22545
+ function _fs_pricing_ajax_action_handler() {
22546
+ $this->check_ajax_referer( 'pricing_ajax_action' );
22547
+
22548
+ $result = null;
22549
+ $pricing_action = fs_request_get( 'pricing_action' );
22550
+
22551
+ switch ( $pricing_action ) {
22552
+ case 'fetch_pricing_data':
22553
+ $params = array(
22554
+ 'is_enriched' => true,
22555
+ 'trial' => fs_request_get_bool( 'trial' ),
22556
+ 'sandbox' => fs_request_get( 'sandbox' ),
22557
+ 's_ctx_type' => fs_request_get( 's_ctx_type' ),
22558
+ 's_ctx_id' => fs_request_get( 's_ctx_id' ),
22559
+ 's_ctx_ts' => fs_request_get( 's_ctx_ts' ),
22560
+ 's_ctx_secure' => fs_request_get( 's_ctx_secure' ),
22561
+ );
22562
+
22563
+ $bundle_id = $this->get_bundle_id();
22564
+ $bundle_public_key = $this->get_bundle_public_key();
22565
+
22566
+ $has_bundle_context = ( FS_Plugin::is_valid_id( $bundle_id ) && ! empty( $bundle_public_key ) );
22567
+
22568
+ if ( ! $has_bundle_context ) {
22569
+ $api = $this->get_api_plugin_scope();
22570
+ } else {
22571
+ $api = FS_Api::instance(
22572
+ $bundle_id,
22573
+ 'plugin',
22574
+ $bundle_id,
22575
+ $bundle_public_key,
22576
+ ! $this->is_live(),
22577
+ false,
22578
+ $this->get_sdk_version()
22579
+ );
22580
+
22581
+ $params['plugin_id'] = $this->get_id();
22582
+ $params['plugin_public_key'] = $this->get_public_key();
22583
+ }
22584
+
22585
+ $result = $api->get( 'pricing.json?' . http_build_query( $params ) );
22586
+ break;
22587
+ case 'start_trial':
22588
+ $result = $this->opt_in(
22589
+ false,
22590
+ false,
22591
+ false,
22592
+ false,
22593
+ false,
22594
+ fs_request_get( 'plan_id' )
22595
+ );
22596
+ }
22597
+
22598
+ if ( is_object( $result ) && $this->is_api_error( $result ) ) {
22599
+ $this->_logger->api_error( $result );
22600
+
22601
+ self::shoot_ajax_failure(
22602
+ isset( $result->error ) ?
22603
+ ( is_string( $result->error ) ? $result->error : $result->error->message ) :
22604
+ var_export( $result, true )
22605
+ );
22606
+ }
22607
+
22608
+ $this->shoot_ajax_success( $result );
22609
+ }
22610
+
22611
  #----------------------------------------------------------------------------------
22612
  #region Contact Us
22613
  #----------------------------------------------------------------------------------
22836
  $this->get_api_plugin_scope();
22837
  }
22838
 
22839
+ /**
22840
+ * @author Leo Fajardo (@leorw)
22841
+ * @since 2.2.3.1
22842
+ *
22843
+ * @param object $result
22844
+ */
22845
+ private function maybe_modify_api_curl_error_message( $result ) {
22846
+ if (
22847
+ 'cUrlMissing' !== $result->error->type &&
22848
+ ( 'CurlException' !== $result->error->type || CURLE_COULDNT_CONNECT != $result->error->code ) &&
22849
+ ( 'HttpRequestFailed' !== $result->error->type || false === strpos( $result->error->message, 'cURL error ' . CURLE_COULDNT_CONNECT ) )
22850
+ ) {
22851
+ return;
22852
+ }
22853
+
22854
+ $result->error->message = $this->esc_html_inline( 'We use PHP cURL library for the API calls, which is a very common library and usually installed and activated out of the box. Unfortunately, cURL is not activated (or disabled) on your server.', 'curl-missing-message' ) .
22855
+ ' ' .
22856
+ $this->esc_html_inline(
22857
+ sprintf(
22858
+ 'Please contact your hosting provider and ask them to whitelist %s for external connection.',
22859
+ implode(
22860
+ ', ',
22861
+ $this->apply_filters( 'api_domains', array(
22862
+ 'api.freemius.com',
22863
+ 'wp.freemius.com'
22864
+ ) )
22865
+ )
22866
+ ),
22867
+ 'connectivity-whitelist'
22868
+ ) .
22869
+ ' ' .
22870
+ sprintf(
22871
+ $this->esc_html_inline( 'Once you are done, deactivate the %s and activate it again.', 'connectivity-reactivate-module' ),
22872
+ $this->get_module_type()
22873
+ );
22874
+ }
22875
+
22876
  /**
22877
  * Show trial promotional notice (if any trial exist).
22878
  *
23426
  return;
23427
  }
23428
 
23429
+ if (
23430
+ $this->is_activation_mode() &&
23431
+ $this->is_premium() &&
23432
+ ! $this->is_registered()
23433
+ ) {
23434
+ // If not yet registered and running the premium code base, a license activation link will already be shown.
23435
+ return;
23436
+ }
23437
 
23438
+ if ( $this->is_registered() && $this->is_tracking_allowed() ) {
23439
+ if ( ! $this->is_premium() && ! $this->is_enable_anonymous() ) {
23440
+ // If opted in and tracking is allowed, don't allow to opt out if not premium and anonymous mode is disabled.
23441
  return;
23442
  }
23443
  }
23517
  if ( ! empty( $this->_dynamically_added_top_level_page_hook_name ) ) {
23518
  if ( $this->is_network_registered() ) {
23519
  $page = 'account';
23520
+ } else if ( $this->is_pending_activation() || $this->is_network_anonymous() ) {
23521
  $this->maybe_set_slug_and_network_menu_exists_flag();
23522
  }
23523
  }
23552
  * @since 1.0.3
23553
  */
23554
  function _redirect_on_activation_hook() {
23555
+ if ( $this->apply_filters( 'redirect_on_activation', true ) ) {
23556
+ $url = $this->get_after_plugin_activation_redirect_url();
23557
 
23558
+ if ( is_string( $url ) ) {
23559
+ fs_redirect( $url );
23560
+ }
23561
  }
23562
  }
23563
 
23597
 
23598
  foreach ( $this->_action_links as $new_links ) {
23599
  foreach ( $new_links as $link ) {
23600
+ $before_deactivate[ $link['key'] ] = '<a href="' . $link['href'] . '"' . ( $link['external'] ? ' target="_blank" rel="noopener"' : '' ) . '>' . $link['label'] . '</a>';
23601
  }
23602
  }
23603
 
23717
  '';
23718
 
23719
  return sprintf(
23720
+ ' %s: <ol><li>%s.</li>%s<li>%s (<a href="%s" target="_blank" rel="noopener">%s</a>).</li></ol>',
23721
  $this->get_text_inline( 'Please follow these steps to complete the upgrade', 'follow-steps-to-complete-upgrade' ),
23722
  ( empty( $activate_license_string ) ? '' : $activate_license_string . '</li><li>' ) .
23723
  $this->get_latest_download_link( sprintf(
23970
  */
23971
  function set_plugin_upgrade_complete() {
23972
  $this->_storage->plugin_upgrade_mode = false;
23973
+
23974
+ $license_migration = ! empty( $this->_storage->license_migration ) ?
23975
+ $this->_storage->license_migration :
23976
+ array();
23977
+
23978
+ $license_migration['is_migrating'] = false;
23979
+
23980
+ $this->_storage->license_migration = $license_migration;
23981
  }
23982
 
23983
  #endregion
common/vendor/freemius/includes/class-fs-api.php CHANGED
@@ -287,7 +287,7 @@
287
  $this->_logger->warn( 'Fallback to cached API result: ' . var_export( $cached_result, true ) );
288
  }
289
  } else {
290
- if ( is_object( $result ) && 404 == $result->error->http ) {
291
  /**
292
  * If the response code is 404, cache the result for half of the `$expiration`.
293
  *
287
  $this->_logger->warn( 'Fallback to cached API result: ' . var_export( $cached_result, true ) );
288
  }
289
  } else {
290
+ if ( is_object( $result ) && isset( $result->error->http ) && 404 == $result->error->http ) {
291
  /**
292
  * If the response code is 404, cache the result for half of the `$expiration`.
293
  *
common/vendor/freemius/includes/class-fs-plugin-updater.php CHANGED
@@ -542,23 +542,66 @@
542
  }
543
  }
544
 
 
 
 
545
  if ( is_object( $this->_update_details ) ) {
 
 
 
 
546
  if ( ! isset( $transient_data->response ) ) {
547
  $transient_data->response = array();
548
  }
549
 
550
  // Add plugin to transient data.
551
- $transient_data->response[ $this->_fs->premium_plugin_basename() ] = $this->_fs->is_plugin() ?
552
  $this->_update_details :
553
  (array) $this->_update_details;
554
- } else if ( isset( $transient_data->response ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
555
  /**
556
- * Ensure that there's no update data for the plugin to prevent upgrading the premium version to the latest free version.
557
  *
558
- * @author Leo Fajardo (@leorw)
559
- * @since 2.3.0
560
  */
561
- unset( $transient_data->response[ $this->_fs->premium_plugin_basename() ] );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
562
  }
563
 
564
  $slug = $this->_fs->get_slug();
542
  }
543
  }
544
 
545
+ // Alias.
546
+ $basename = $this->_fs->premium_plugin_basename();
547
+
548
  if ( is_object( $this->_update_details ) ) {
549
+ if ( isset( $transient_data->no_update ) ) {
550
+ unset( $transient_data->no_update[ $basename ] );
551
+ }
552
+
553
  if ( ! isset( $transient_data->response ) ) {
554
  $transient_data->response = array();
555
  }
556
 
557
  // Add plugin to transient data.
558
+ $transient_data->response[ $basename ] = $this->_fs->is_plugin() ?
559
  $this->_update_details :
560
  (array) $this->_update_details;
561
+ } else {
562
+ if ( isset( $transient_data->response ) ) {
563
+ /**
564
+ * Ensure that there's no update data for the plugin to prevent upgrading the premium version to the latest free version.
565
+ *
566
+ * @author Leo Fajardo (@leorw)
567
+ * @since 2.3.0
568
+ */
569
+ unset( $transient_data->response[ $basename ] );
570
+ }
571
+
572
+ if ( ! isset( $transient_data->no_update ) ) {
573
+ $transient_data->no_update = array();
574
+ }
575
+
576
  /**
577
+ * Add product to no_update transient data to properly integrate with WP 5.5 auto-updates UI.
578
  *
579
+ * @since 2.4.1
580
+ * @link https://make.wordpress.org/core/2020/07/30/recommended-usage-of-the-updates-api-to-support-the-auto-updates-ui-for-plugins-and-themes-in-wordpress-5-5/
581
  */
582
+ $transient_data->no_update[ $basename ] = $this->_fs->is_plugin() ?
583
+ (object) array(
584
+ 'id' => $basename,
585
+ 'slug' => $this->_fs->get_slug(),
586
+ 'plugin' => $basename,
587
+ 'new_version' => $this->_fs->get_plugin_version(),
588
+ 'url' => '',
589
+ 'package' => '',
590
+ 'icons' => array(),
591
+ 'banners' => array(),
592
+ 'banners_rtl' => array(),
593
+ 'tested' => '',
594
+ 'requires_php' => '',
595
+ 'compatibility' => new stdClass(),
596
+ ) :
597
+ array(
598
+ 'theme' => $basename,
599
+ 'new_version' => $this->_fs->get_plugin_version(),
600
+ 'url' => '',
601
+ 'package' => '',
602
+ 'requires' => '',
603
+ 'requires_php' => '',
604
+ );
605
  }
606
 
607
  $slug = $this->_fs->get_slug();
common/vendor/freemius/includes/class-fs-storage.php CHANGED
@@ -371,6 +371,7 @@
371
  * sites in the network.
372
  */
373
  'is_network_activation' => 0,
 
374
 
375
  // When network activated, then network level.
376
  'install_timestamp' => 1,
371
  * sites in the network.
372
  */
373
  'is_network_activation' => 0,
374
+ 'license_migration' => 0,
375
 
376
  // When network activated, then network level.
377
  'install_timestamp' => 1,
common/vendor/freemius/includes/customizer/class-fs-customizer-support-section.php CHANGED
@@ -87,10 +87,10 @@
87
  <div class="button-group">
88
  <# } #>
89
  <# if ( data.contact ) { #>
90
- <a class="button" href="{{ data.contact.url }}" target="_blank">{{ data.contact.label }} </a>
91
  <# } #>
92
  <# if ( data.support ) { #>
93
- <a class="button" href="{{ data.support.url }}" target="_blank">{{ data.support.label }} </a>
94
  <# } #>
95
  <# if ( data.contact && data.support ) { #>
96
  </div>
87
  <div class="button-group">
88
  <# } #>
89
  <# if ( data.contact ) { #>
90
+ <a class="button" href="{{ data.contact.url }}" target="_blank" rel="noopener noreferrer">{{ data.contact.label }} </a>
91
  <# } #>
92
  <# if ( data.support ) { #>
93
+ <a class="button" href="{{ data.support.url }}" target="_blank" rel="noopener noreferrer">{{ data.support.label }} </a>
94
  <# } #>
95
  <# if ( data.contact && data.support ) { #>
96
  </div>
common/vendor/freemius/includes/entities/class-fs-payment.php CHANGED
@@ -158,8 +158,8 @@
158
  // Lazy load.
159
  self::$CURRENCY_2_SYMBOL = array(
160
  self::CURRENCY_USD => '$',
161
- self::CURRENCY_GBP => '£',
162
- self::CURRENCY_EUR => '',
163
  );
164
  }
165
 
158
  // Lazy load.
159
  self::$CURRENCY_2_SYMBOL = array(
160
  self::CURRENCY_USD => '$',
161
+ self::CURRENCY_GBP => '&pound;',
162
+ self::CURRENCY_EUR => '&euro;',
163
  );
164
  }
165
 
common/vendor/freemius/includes/entities/class-fs-plugin-license.php CHANGED
@@ -50,6 +50,13 @@
50
  * @var number
51
  */
52
  public $parent_license_id;
 
 
 
 
 
 
 
53
  /**
54
  * @var number
55
  */
50
  * @var number
51
  */
52
  public $parent_license_id;
53
+ /**
54
+ * @author Leo Fajardo (@leorw)
55
+ * @since 2.4.0
56
+ *
57
+ * @var array
58
+ */
59
+ public $products;
60
  /**
61
  * @var number
62
  */
common/vendor/freemius/includes/entities/class-fs-site.php CHANGED
@@ -171,6 +171,7 @@
171
  // WPEngine staging.
172
  fs_ends_with( $subdomain, '.staging.wpengine.com' ) ||
173
  fs_ends_with( $subdomain, '.dev.wpengine.com' ) ||
 
174
  // Pantheon
175
  ( fs_ends_with( $subdomain, 'pantheonsite.io' ) &&
176
  ( fs_starts_with( $subdomain, 'test-' ) || fs_starts_with( $subdomain, 'dev-' ) ) ) ||
@@ -179,7 +180,9 @@
179
  // Kinsta
180
  ( fs_starts_with( $subdomain, 'staging-' ) && ( fs_ends_with( $subdomain, '.kinsta.com' ) || fs_ends_with( $subdomain, '.kinsta.cloud' ) ) ) ||
181
  // DesktopServer
182
- fs_ends_with( $subdomain, '.dev.cc' )
 
 
183
  );
184
  }
185
 
171
  // WPEngine staging.
172
  fs_ends_with( $subdomain, '.staging.wpengine.com' ) ||
173
  fs_ends_with( $subdomain, '.dev.wpengine.com' ) ||
174
+ fs_ends_with( $subdomain, '.wpengine.com' ) ||
175
  // Pantheon
176
  ( fs_ends_with( $subdomain, 'pantheonsite.io' ) &&
177
  ( fs_starts_with( $subdomain, 'test-' ) || fs_starts_with( $subdomain, 'dev-' ) ) ) ||
180
  // Kinsta
181
  ( fs_starts_with( $subdomain, 'staging-' ) && ( fs_ends_with( $subdomain, '.kinsta.com' ) || fs_ends_with( $subdomain, '.kinsta.cloud' ) ) ) ||
182
  // DesktopServer
183
+ fs_ends_with( $subdomain, '.dev.cc' ) ||
184
+ // Pressable
185
+ fs_ends_with( $subdomain, '.mystagingwebsite.com' )
186
  );
187
  }
188
 
common/vendor/freemius/includes/fs-essential-functions.php CHANGED
@@ -380,45 +380,62 @@
380
  global $fs_active_plugins;
381
 
382
  /**
383
- * @todo Multi-site network activated plugin are always loaded prior to site plugins so if there's a a plugin activated in the network mode that has an older version of the SDK of another plugin which is site activated that has new SDK version, the fs-essential-functions.php will be loaded from the older SDK. Same thing about MU plugins (loaded even before network activated plugins).
384
  *
385
  * @link https://github.com/Freemius/wordpress-sdk/issues/26
386
  */
387
 
388
  $newest_sdk_plugin_path = $fs_active_plugins->newest->plugin_path;
389
 
390
- $active_plugins = get_option( 'active_plugins', array() );
391
- $newest_sdk_plugin_key = array_search( $newest_sdk_plugin_path, $active_plugins );
392
- if ( 0 === $newest_sdk_plugin_key ) {
393
- // if it's 0 it's the first plugin already, no need to continue
394
- return false;
395
- } else if ( is_numeric( $newest_sdk_plugin_key ) ) {
396
- // Remove plugin from its current position.
397
- array_splice( $active_plugins, $newest_sdk_plugin_key, 1 );
398
 
399
- // Set it to be included first.
400
- array_unshift( $active_plugins, $newest_sdk_plugin_path );
401
 
402
- update_option( 'active_plugins', $active_plugins );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
403
 
404
  return true;
405
- } else if ( is_multisite() && false === $newest_sdk_plugin_key ) {
 
 
406
  // Plugin is network active.
407
  $network_active_plugins = get_site_option( 'active_sitewide_plugins', array() );
408
 
409
- if (isset($network_active_plugins[$newest_sdk_plugin_path])) {
410
- reset($network_active_plugins);
411
- if ( $newest_sdk_plugin_path === key($network_active_plugins) ) {
412
  // Plugin is already activated first on the network level.
413
  return false;
414
- } else if ( is_numeric( $newest_sdk_plugin_key ) ) {
415
- $time = $network_active_plugins[$newest_sdk_plugin_path];
416
 
417
  // Remove plugin from its current position.
418
- unset($network_active_plugins[$newest_sdk_plugin_path]);
419
 
420
  // Set it to be included first.
421
- $network_active_plugins = array($newest_sdk_plugin_path => $time) + $network_active_plugins;
422
 
423
  update_site_option( 'active_sitewide_plugins', $network_active_plugins );
424
 
380
  global $fs_active_plugins;
381
 
382
  /**
383
+ * @todo Multi-site network activated plugin are always loaded prior to site plugins so if there's a plugin activated in the network mode that has an older version of the SDK of another plugin which is site activated that has new SDK version, the fs-essential-functions.php will be loaded from the older SDK. Same thing about MU plugins (loaded even before network activated plugins).
384
  *
385
  * @link https://github.com/Freemius/wordpress-sdk/issues/26
386
  */
387
 
388
  $newest_sdk_plugin_path = $fs_active_plugins->newest->plugin_path;
389
 
390
+ $active_plugins = get_option( 'active_plugins', array() );
391
+ $updated_active_plugins = array( $newest_sdk_plugin_path );
 
 
 
 
 
 
392
 
393
+ $plugin_found = false;
394
+ $is_first_path = true;
395
 
396
+ foreach ( $active_plugins as $key => $plugin_path ) {
397
+ if ( $plugin_path === $newest_sdk_plugin_path ) {
398
+ if ( $is_first_path ) {
399
+ // if it's the first plugin already, no need to continue
400
+ return false;
401
+ }
402
+
403
+ $plugin_found = true;
404
+
405
+ // Skip the plugin (it is already added as the 1st item of $updated_active_plugins).
406
+ continue;
407
+ }
408
+
409
+ $updated_active_plugins[] = $plugin_path;
410
+
411
+ if ( $is_first_path ) {
412
+ $is_first_path = false;
413
+ }
414
+ }
415
+
416
+ if ( $plugin_found ) {
417
+ update_option( 'active_plugins', $updated_active_plugins );
418
 
419
  return true;
420
+ }
421
+
422
+ if ( is_multisite() ) {
423
  // Plugin is network active.
424
  $network_active_plugins = get_site_option( 'active_sitewide_plugins', array() );
425
 
426
+ if ( isset( $network_active_plugins[ $newest_sdk_plugin_path ] ) ) {
427
+ reset( $network_active_plugins );
428
+ if ( $newest_sdk_plugin_path === key( $network_active_plugins ) ) {
429
  // Plugin is already activated first on the network level.
430
  return false;
431
+ } else {
432
+ $time = $network_active_plugins[ $newest_sdk_plugin_path ];
433
 
434
  // Remove plugin from its current position.
435
+ unset( $network_active_plugins[ $newest_sdk_plugin_path ] );
436
 
437
  // Set it to be included first.
438
+ $network_active_plugins = array( $newest_sdk_plugin_path => $time ) + $network_active_plugins;
439
 
440
  update_site_option( 'active_sitewide_plugins', $network_active_plugins );
441
 
common/vendor/freemius/includes/fs-plugin-info-dialog.php CHANGED
@@ -260,14 +260,20 @@
260
  if ( $has_valid_blog_id ) {
261
  restore_current_blog();
262
  }
 
263
 
264
- if ( is_object( $fs_addon ) ) {
265
- $data->has_purchased_license = $fs_addon->has_active_valid_license();
266
- } else {
267
- $account_addons = $this->_fs->get_account_addons();
268
- if ( ! empty( $account_addons ) && in_array( $selected_addon->id, $account_addons ) ) {
269
- $data->has_purchased_license = true;
270
- }
 
 
 
 
 
271
  }
272
  }
273
 
@@ -577,7 +583,7 @@
577
 
578
  $has_installed_version = ( 'install' !== $this->status['status'] );
579
 
580
- if ( ! $api->has_paid_plan ) {
581
  /**
582
  * Free-only add-on.
583
  *
@@ -880,9 +886,11 @@
880
  $classes[] = 'disabled';
881
  }
882
 
 
 
883
  return sprintf(
884
  '<a %s class="button %s">%s</a>',
885
- empty( $href ) ? '' : 'href="' . $href . '" target="' . $target . '"',
886
  implode( ' ', $classes ),
887
  $label
888
  );
@@ -1201,7 +1209,7 @@
1201
 
1202
  $(document).ready(function () {
1203
  var $plan = $('.plugin-information-pricing .fs-plan[data-plan-id=<?php echo $plan->id ?>]');
1204
- $plan.find('input[type=radio]').live('click', function () {
1205
  _updateCtaUrl(
1206
  $plan.attr('data-plan-id'),
1207
  $(this).val(),
@@ -1367,6 +1375,7 @@
1367
  if ( ! empty( $api->slug ) && true == $api->is_wp_org_compliant ) {
1368
  ?>
1369
  <li><a target="_blank"
 
1370
  href="https://wordpress.org/plugins/<?php echo $api->slug; ?>/"><?php fs_esc_html_echo_inline( 'WordPress.org Plugin Page', 'wp-org-plugin-page', $api->slug ) ?>
1371
  &#187;</a>
1372
  </li>
@@ -1375,6 +1384,7 @@
1375
  if ( ! empty( $api->homepage ) ) {
1376
  ?>
1377
  <li><a target="_blank"
 
1378
  href="<?php echo esc_url( $api->homepage ); ?>"><?php fs_esc_html_echo_inline( 'Plugin Homepage', 'plugin-homepage', $api->slug ) ?>
1379
  &#187;</a>
1380
  </li>
@@ -1383,6 +1393,7 @@
1383
  if ( ! empty( $api->donate_link ) && empty( $api->contributors ) ) {
1384
  ?>
1385
  <li><a target="_blank"
 
1386
  href="<?php echo esc_url( $api->donate_link ); ?>"><?php fs_esc_html_echo_inline( 'Donate to this plugin', 'donate-to-plugin', $api->slug ) ?>
1387
  &#187;</a>
1388
  </li>
@@ -1426,18 +1437,19 @@
1426
  );
1427
  ?>
1428
  <div class="counter-container">
1429
- <span class="counter-label"><a
1430
- href="https://wordpress.org/support/view/plugin-reviews/<?php echo $api->slug; ?>?filter=<?php echo $key; ?>"
1431
- target="_blank"
1432
- title="<?php echo esc_attr( sprintf(
1433
- /* translators: %s: # of stars (e.g. 5 stars) */
1434
- fs_text_inline( 'Click to see reviews that provided a rating of %s', 'click-to-reviews', $api->slug ),
1435
- $stars_label
1436
- ) ) ?>"><?php echo $stars_label ?></a></span>
 
1437
  <span class="counter-back">
1438
- <span class="counter-bar" style="width: <?php echo absint(92 * $_rating); ?>px;"></span>
1439
- </span>
1440
- <span class="counter-count"><?php echo number_format_i18n( $ratecount ); ?></span>
1441
  </div>
1442
  <?php
1443
  }
@@ -1458,13 +1470,14 @@
1458
  if ( empty( $contrib_profile ) ) {
1459
  echo "<li><img src='https://wordpress.org/grav-redirect.php?user={$contrib_username}&amp;s=36' width='18' height='18' />{$contrib_username}</li>";
1460
  } else {
1461
- echo "<li><a href='{$contrib_profile}' target='_blank'><img src='https://wordpress.org/grav-redirect.php?user={$contrib_username}&amp;s=36' width='18' height='18' />{$contrib_username}</a></li>";
1462
  }
1463
  }
1464
  ?>
1465
  </ul>
1466
  <?php if ( ! empty( $api->donate_link ) ) { ?>
1467
  <a target="_blank"
 
1468
  href="<?php echo esc_url( $api->donate_link ); ?>"><?php fs_echo_inline( 'Donate to this plugin', 'donate-to-plugin', $api->slug ) ?>
1469
  &#187;</a>
1470
  <?php } ?>
@@ -1628,4 +1641,4 @@
1628
  iframe_footer();
1629
  exit;
1630
  }
1631
- }
260
  if ( $has_valid_blog_id ) {
261
  restore_current_blog();
262
  }
263
+ }
264
 
265
+ /**
266
+ * Check if there's a purchased license in case the add-on can only be installed/downloaded as part of a purchased bundle.
267
+ *
268
+ * @author Leo Fajardo (@leorw)
269
+ * @since 2.4.1
270
+ */
271
+ if ( is_object( $fs_addon ) ) {
272
+ $data->has_purchased_license = $fs_addon->has_active_valid_license();
273
+ } else {
274
+ $account_addons = $this->_fs->get_account_addons();
275
+ if ( ! empty( $account_addons ) && in_array( $selected_addon->id, $account_addons ) ) {
276
+ $data->has_purchased_license = true;
277
  }
278
  }
279
 
583
 
584
  $has_installed_version = ( 'install' !== $this->status['status'] );
585
 
586
+ if ( ! $api->has_paid_plan && ! $api->has_purchased_license ) {
587
  /**
588
  * Free-only add-on.
589
  *
886
  $classes[] = 'disabled';
887
  }
888
 
889
+ $rel = ( '_blank' === $target ) ? ' rel="noopener noreferrer"' : '';
890
+
891
  return sprintf(
892
  '<a %s class="button %s">%s</a>',
893
+ empty( $href ) ? '' : 'href="' . $href . '" target="' . $target . '"' . $rel,
894
  implode( ' ', $classes ),
895
  $label
896
  );
1209
 
1210
  $(document).ready(function () {
1211
  var $plan = $('.plugin-information-pricing .fs-plan[data-plan-id=<?php echo $plan->id ?>]');
1212
+ $plan.find('input[type=radio]').on('click', function () {
1213
  _updateCtaUrl(
1214
  $plan.attr('data-plan-id'),
1215
  $(this).val(),
1375
  if ( ! empty( $api->slug ) && true == $api->is_wp_org_compliant ) {
1376
  ?>
1377
  <li><a target="_blank"
1378
+ rel="noopener noreferrer"
1379
  href="https://wordpress.org/plugins/<?php echo $api->slug; ?>/"><?php fs_esc_html_echo_inline( 'WordPress.org Plugin Page', 'wp-org-plugin-page', $api->slug ) ?>
1380
  &#187;</a>
1381
  </li>
1384
  if ( ! empty( $api->homepage ) ) {
1385
  ?>
1386
  <li><a target="_blank"
1387
+ rel="noopener noreferrer"
1388
  href="<?php echo esc_url( $api->homepage ); ?>"><?php fs_esc_html_echo_inline( 'Plugin Homepage', 'plugin-homepage', $api->slug ) ?>
1389
  &#187;</a>
1390
  </li>
1393
  if ( ! empty( $api->donate_link ) && empty( $api->contributors ) ) {
1394
  ?>
1395
  <li><a target="_blank"
1396
+ rel="noopener noreferrer"
1397
  href="<?php echo esc_url( $api->donate_link ); ?>"><?php fs_esc_html_echo_inline( 'Donate to this plugin', 'donate-to-plugin', $api->slug ) ?>
1398
  &#187;</a>
1399
  </li>
1437
  );
1438
  ?>
1439
  <div class="counter-container">
1440
+ <span class="counter-label"><a
1441
+ href="https://wordpress.org/support/view/plugin-reviews/<?php echo $api->slug; ?>?filter=<?php echo $key; ?>"
1442
+ target="_blank"
1443
+ rel="noopener noreferrer"
1444
+ title="<?php echo esc_attr( sprintf(
1445
+ /* translators: %s: # of stars (e.g. 5 stars) */
1446
+ fs_text_inline( 'Click to see reviews that provided a rating of %s', 'click-to-reviews', $api->slug ),
1447
+ $stars_label
1448
+ ) ) ?>"><?php echo $stars_label ?></a></span>
1449
  <span class="counter-back">
1450
+ <span class="counter-bar" style="width: <?php echo absint(92 * $_rating); ?>px;"></span>
1451
+ </span>
1452
+ <span class="counter-count"><?php echo number_format_i18n( $ratecount ); ?></span>
1453
  </div>
1454
  <?php
1455
  }
1470
  if ( empty( $contrib_profile ) ) {
1471
  echo "<li><img src='https://wordpress.org/grav-redirect.php?user={$contrib_username}&amp;s=36' width='18' height='18' />{$contrib_username}</li>";
1472
  } else {
1473
+ echo "<li><a href='{$contrib_profile}' target='_blank' rel='noopener noreferrer'><img src='https://wordpress.org/grav-redirect.php?user={$contrib_username}&amp;s=36' width='18' height='18' />{$contrib_username}</a></li>";
1474
  }
1475
  }
1476
  ?>
1477
  </ul>
1478
  <?php if ( ! empty( $api->donate_link ) ) { ?>
1479
  <a target="_blank"
1480
+ rel="noopener noreferrer"
1481
  href="<?php echo esc_url( $api->donate_link ); ?>"><?php fs_echo_inline( 'Donate to this plugin', 'donate-to-plugin', $api->slug ) ?>
1482
  &#187;</a>
1483
  <?php } ?>
1641
  iframe_footer();
1642
  exit;
1643
  }
1644
+ }
common/vendor/freemius/includes/i18n.php CHANGED
@@ -98,6 +98,8 @@
98
  'error' => _fs_text( 'Error' ),
99
  'failed-finding-main-path' => _fs_text( 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.' ),
100
  'learn-more' => _fs_text( 'Learn more' ),
 
 
101
 
102
  #region Affiliation
103
  'affiliation' => _fs_text( 'Affiliation' ),
98
  'error' => _fs_text( 'Error' ),
99
  'failed-finding-main-path' => _fs_text( 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.' ),
100
  'learn-more' => _fs_text( 'Learn more' ),
101
+ 'license_not_whitelabeled' => _fs_text( "Is this your client's site? %s if you wish to hide sensitive info like your billing address and invoices from the WP Admin."),
102
+ 'license_whitelabeled' => _fs_text( 'Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your billing address and invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s.'),
103
 
104
  #region Affiliation
105
  'affiliation' => _fs_text( 'Affiliation' ),
common/vendor/freemius/includes/managers/class-fs-admin-menu-manager.php CHANGED
@@ -703,7 +703,12 @@
703
  $menu['parent_slug'] :
704
  'admin.php';
705
 
706
- return admin_url( $parent_slug . '?page=' . $menu['menu'][2] );
 
 
 
 
 
707
  }
708
 
709
  /**
703
  $menu['parent_slug'] :
704
  'admin.php';
705
 
706
+ return admin_url(
707
+ $parent_slug .
708
+ ( false === strpos( $parent_slug, '?' ) ? '?' : '&' ) .
709
+ 'page=' .
710
+ $menu['menu'][2]
711
+ );
712
  }
713
 
714
  /**
common/vendor/freemius/includes/sdk/FreemiusBase.php CHANGED
@@ -137,7 +137,7 @@
137
  } catch ( Exception $e ) {
138
  // Map to error object.
139
  $result = (object) array(
140
- 'error' => array(
141
  'type' => 'Unknown',
142
  'message' => $e->getMessage() . ' (' . $e->getFile() . ': ' . $e->getLine() . ')',
143
  'code' => 'unknown',
137
  } catch ( Exception $e ) {
138
  // Map to error object.
139
  $result = (object) array(
140
+ 'error' => (object) array(
141
  'type' => 'Unknown',
142
  'message' => $e->getMessage() . ' (' . $e->getFile() . ': ' . $e->getLine() . ')',
143
  'code' => 'unknown',
common/vendor/freemius/includes/sdk/FreemiusWordPress.php CHANGED
@@ -59,6 +59,10 @@
59
  }
60
  }
61
 
 
 
 
 
62
  $curl_version = FS_SDK__HAS_CURL ?
63
  curl_version() :
64
  array( 'version' => '7.37' );
@@ -228,10 +232,13 @@
228
  $now = ( time() - self::$_clock_diff );
229
  $date = date( 'r', $now );
230
 
231
- if ( in_array( $pMethod, array( 'POST', 'PUT' ) ) && ! empty( $pPostParams ) ) {
232
- $content_md5 = md5( $pPostParams );
233
- $content_type = 'application/json';
234
- }
 
 
 
235
 
236
  $string_to_sign = implode( $eol, array(
237
  $pMethod,
@@ -380,10 +387,11 @@
380
  }
381
 
382
  if ( in_array( $pMethod, array( 'POST', 'PUT' ) ) ) {
383
- if ( is_array( $pParams ) && 0 < count( $pParams ) ) {
384
- $pWPRemoteArgs['headers']['Content-type'] = 'application/json';
385
- $pWPRemoteArgs['body'] = json_encode( $pParams );
386
- }
 
387
  }
388
 
389
  $request_url = self::GetUrl( $pCanonizedPath, $pIsSandbox );
@@ -397,7 +405,7 @@
397
  }
398
 
399
  if ( 'https' === substr( strtolower( $request_url ), 0, 5 ) ) {
400
- $pWPRemoteArgs['sslverify'] = false;
401
  }
402
 
403
  if ( false !== $pBeforeExecutionFunction &&
@@ -570,7 +578,7 @@
570
  } catch ( Exception $e ) {
571
  // Map to error object.
572
  $result = (object) array(
573
- 'error' => array(
574
  'type' => 'Unknown',
575
  'message' => $e->getMessage() . ' (' . $e->getFile() . ': ' . $e->getLine() . ')',
576
  'code' => 'unknown',
@@ -649,7 +657,7 @@
649
  $message = ( 1 < count( $parts ) ) ? $parts[1] : $message;
650
 
651
  $e = new Freemius_Exception( array(
652
- 'error' => array(
653
  'code' => $code,
654
  'message' => $message,
655
  'type' => 'CurlException',
@@ -657,7 +665,7 @@
657
  ) );
658
  } else {
659
  $e = new Freemius_Exception( array(
660
- 'error' => array(
661
  'code' => $pError->get_error_code(),
662
  'message' => $pError->get_error_message(),
663
  'type' => 'WPRemoteException',
59
  }
60
  }
61
 
62
+ if ( ! defined( 'FS_SDK__SSLVERIFY' ) ) {
63
+ define( 'FS_SDK__SSLVERIFY', false );
64
+ }
65
+
66
  $curl_version = FS_SDK__HAS_CURL ?
67
  curl_version() :
68
  array( 'version' => '7.37' );
232
  $now = ( time() - self::$_clock_diff );
233
  $date = date( 'r', $now );
234
 
235
+ if ( in_array( $pMethod, array( 'POST', 'PUT' ) ) ) {
236
+ $content_type = 'application/json';
237
+
238
+ if ( ! empty( $pPostParams ) ) {
239
+ $content_md5 = md5( $pPostParams );
240
+ }
241
+ }
242
 
243
  $string_to_sign = implode( $eol, array(
244
  $pMethod,
387
  }
388
 
389
  if ( in_array( $pMethod, array( 'POST', 'PUT' ) ) ) {
390
+ $pWPRemoteArgs['headers']['Content-type'] = 'application/json';
391
+
392
+ if ( is_array( $pParams ) && 0 < count( $pParams ) ) {
393
+ $pWPRemoteArgs['body'] = json_encode( $pParams );
394
+ }
395
  }
396
 
397
  $request_url = self::GetUrl( $pCanonizedPath, $pIsSandbox );
405
  }
406
 
407
  if ( 'https' === substr( strtolower( $request_url ), 0, 5 ) ) {
408
+ $pWPRemoteArgs['sslverify'] = FS_SDK__SSLVERIFY;
409
  }
410
 
411
  if ( false !== $pBeforeExecutionFunction &&
578
  } catch ( Exception $e ) {
579
  // Map to error object.
580
  $result = (object) array(
581
+ 'error' => (object) array(
582
  'type' => 'Unknown',
583
  'message' => $e->getMessage() . ' (' . $e->getFile() . ': ' . $e->getLine() . ')',
584
  'code' => 'unknown',
657
  $message = ( 1 < count( $parts ) ) ? $parts[1] : $message;
658
 
659
  $e = new Freemius_Exception( array(
660
+ 'error' => (object) array(
661
  'code' => $code,
662
  'message' => $message,
663
  'type' => 'CurlException',
665
  ) );
666
  } else {
667
  $e = new Freemius_Exception( array(
668
+ 'error' => (object) array(
669
  'code' => $pError->get_error_code(),
670
  'message' => $pError->get_error_message(),
671
  'type' => 'WPRemoteException',
common/vendor/freemius/includes/supplements/fs-essential-functions-1.1.7.1.php CHANGED
@@ -32,7 +32,7 @@
32
 
33
  // Get active plugin's main files real full names (might be symlinks).
34
  foreach ( $all_plugins as $relative_path => $data ) {
35
- if ( 0 === strpos( $file_real_path, fs_normalize_path( dirname( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) ) ) ) ) {
36
  if ( '.' !== dirname( trailingslashit( $relative_path ) ) ) {
37
  return $relative_path;
38
  }
32
 
33
  // Get active plugin's main files real full names (might be symlinks).
34
  foreach ( $all_plugins as $relative_path => $data ) {
35
+ if ( 0 === strpos( $file_real_path, fs_normalize_path( dirname( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) ) . '/' ) ) ) {
36
  if ( '.' !== dirname( trailingslashit( $relative_path ) ) ) {
37
  return $relative_path;
38
  }
common/vendor/freemius/languages/freemius-cs_CZ.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius-da_DK.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius-en.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius-es_ES.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius-fr_FR.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius-he_IL.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius-hu_HU.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius-it_IT.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius-ja.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius-nl_NL.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius-ru_RU.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius-ta.mo CHANGED
Binary file
common/vendor/freemius/languages/freemius.pot CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2019 freemius
2
  # This file is distributed under the same license as the freemius package.
3
  msgid ""
4
  msgstr ""
@@ -16,771 +16,795 @@ msgstr ""
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
 
19
- #: includes/class-freemius.php:1881, templates/account.php:873
20
  msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
21
  msgstr ""
22
 
23
- #: includes/class-freemius.php:1888
24
  msgid "Would you like to proceed with the update?"
25
  msgstr ""
26
 
27
- #: includes/class-freemius.php:2096
28
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
29
  msgstr ""
30
 
31
- #: includes/class-freemius.php:2098
32
  msgid "Error"
33
  msgstr ""
34
 
35
- #: includes/class-freemius.php:2492
36
  msgid "I found a better %s"
37
  msgstr ""
38
 
39
- #: includes/class-freemius.php:2494
40
  msgid "What's the %s's name?"
41
  msgstr ""
42
 
43
- #: includes/class-freemius.php:2500
44
  msgid "It's a temporary %s. I'm just debugging an issue."
45
  msgstr ""
46
 
47
- #: includes/class-freemius.php:2502
48
  msgid "Deactivation"
49
  msgstr ""
50
 
51
- #: includes/class-freemius.php:2503
52
  msgid "Theme Switch"
53
  msgstr ""
54
 
55
- #: includes/class-freemius.php:2512, templates/forms/resend-key.php:24, templates/forms/user-change.php:29
56
  msgid "Other"
57
  msgstr ""
58
 
59
- #: includes/class-freemius.php:2520
60
  msgid "I no longer need the %s"
61
  msgstr ""
62
 
63
- #: includes/class-freemius.php:2527
64
  msgid "I only needed the %s for a short period"
65
  msgstr ""
66
 
67
- #: includes/class-freemius.php:2533
68
  msgid "The %s broke my site"
69
  msgstr ""
70
 
71
- #: includes/class-freemius.php:2540
72
  msgid "The %s suddenly stopped working"
73
  msgstr ""
74
 
75
- #: includes/class-freemius.php:2550
76
  msgid "I can't pay for it anymore"
77
  msgstr ""
78
 
79
- #: includes/class-freemius.php:2552
80
  msgid "What price would you feel comfortable paying?"
81
  msgstr ""
82
 
83
- #: includes/class-freemius.php:2558
84
  msgid "I don't like to share my information with you"
85
  msgstr ""
86
 
87
- #: includes/class-freemius.php:2579
88
  msgid "The %s didn't work"
89
  msgstr ""
90
 
91
- #: includes/class-freemius.php:2589
92
  msgid "I couldn't understand how to make it work"
93
  msgstr ""
94
 
95
- #: includes/class-freemius.php:2597
96
  msgid "The %s is great, but I need specific feature that you don't support"
97
  msgstr ""
98
 
99
- #: includes/class-freemius.php:2599
100
  msgid "What feature?"
101
  msgstr ""
102
 
103
- #: includes/class-freemius.php:2603
104
  msgid "The %s is not working"
105
  msgstr ""
106
 
107
- #: includes/class-freemius.php:2605
108
  msgid "Kindly share what didn't work so we can fix it for future users..."
109
  msgstr ""
110
 
111
- #: includes/class-freemius.php:2609
112
  msgid "It's not what I was looking for"
113
  msgstr ""
114
 
115
- #: includes/class-freemius.php:2611
116
  msgid "What you've been looking for?"
117
  msgstr ""
118
 
119
- #: includes/class-freemius.php:2615
120
  msgid "The %s didn't work as expected"
121
  msgstr ""
122
 
123
- #: includes/class-freemius.php:2617
124
  msgid "What did you expect?"
125
  msgstr ""
126
 
127
- #: includes/class-freemius.php:3472, templates/debug.php:20
128
  msgid "Freemius Debug"
129
  msgstr ""
130
 
131
- #: includes/class-freemius.php:4224
132
  msgid "I don't know what is cURL or how to install it, help me!"
133
  msgstr ""
134
 
135
- #: includes/class-freemius.php:4226
136
  msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
137
  msgstr ""
138
 
139
- #: includes/class-freemius.php:4233
140
  msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
141
  msgstr ""
142
 
143
- #: includes/class-freemius.php:4338
144
  msgid "Yes - do your thing"
145
  msgstr ""
146
 
147
- #: includes/class-freemius.php:4343
148
  msgid "No - just deactivate"
149
  msgstr ""
150
 
151
- #: includes/class-freemius.php:4388, includes/class-freemius.php:4882, includes/class-freemius.php:6111, includes/class-freemius.php:12933, includes/class-freemius.php:13571, includes/class-freemius.php:17006, includes/class-freemius.php:17094, includes/class-freemius.php:17260, includes/class-freemius.php:19492, includes/class-freemius.php:19833, includes/class-freemius.php:19843, includes/class-freemius.php:20507, includes/class-freemius.php:21413, includes/class-freemius.php:21546, includes/class-freemius.php:21690, templates/add-ons.php:57
152
  msgctxt "exclamation"
153
  msgid "Oops"
154
  msgstr ""
155
 
156
- #: includes/class-freemius.php:4457
157
  msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
158
  msgstr ""
159
 
160
- #: includes/class-freemius.php:4879
161
  msgctxt "addonX cannot run without pluginY"
162
  msgid "%s cannot run without %s."
163
  msgstr ""
164
 
165
- #: includes/class-freemius.php:4880
166
  msgctxt "addonX cannot run..."
167
  msgid "%s cannot run without the plugin."
168
  msgstr ""
169
 
170
- #: includes/class-freemius.php:5053, includes/class-freemius.php:5078, includes/class-freemius.php:20578
171
  msgid "Unexpected API error. Please contact the %s's author with the following error."
172
  msgstr ""
173
 
174
- #: includes/class-freemius.php:5777
175
  msgid "Premium %s version was successfully activated."
176
  msgstr ""
177
 
178
- #: includes/class-freemius.php:5789, includes/class-freemius.php:7682
179
  msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
180
  msgid "W00t"
181
  msgstr ""
182
 
183
- #: includes/class-freemius.php:5804
184
  msgid "You have a %s license."
185
  msgstr ""
186
 
187
- #: includes/class-freemius.php:5808, includes/class-freemius.php:16405, includes/class-freemius.php:16416, includes/class-freemius.php:19744, includes/class-freemius.php:20094, includes/class-freemius.php:20163, includes/class-freemius.php:20328
188
  msgctxt "interjection expressing joy or exuberance"
189
  msgid "Yee-haw"
190
  msgstr ""
191
 
192
- #: includes/class-freemius.php:6094
193
  msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
194
  msgstr ""
195
 
196
- #: includes/class-freemius.php:6098
197
  msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
198
  msgstr ""
199
 
200
- #: includes/class-freemius.php:6107, templates/add-ons.php:186, templates/account/partials/addon.php:381
201
  msgid "More information about %s"
202
  msgstr ""
203
 
204
- #: includes/class-freemius.php:6108
205
  msgid "Purchase License"
206
  msgstr ""
207
 
208
- #: includes/class-freemius.php:7047, templates/connect.php:171
209
  msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
210
  msgstr ""
211
 
212
- #: includes/class-freemius.php:7051
213
  msgid "start the trial"
214
  msgstr ""
215
 
216
- #: includes/class-freemius.php:7052, templates/connect.php:175
217
  msgid "complete the install"
218
  msgstr ""
219
 
220
- #: includes/class-freemius.php:7164
221
  msgid "You are just one step away - %s"
222
  msgstr ""
223
 
224
- #: includes/class-freemius.php:7167
225
  msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
226
  msgid "Complete \"%s\" Activation Now"
227
  msgstr ""
228
 
229
- #: includes/class-freemius.php:7245
230
  msgid "We made a few tweaks to the %s, %s"
231
  msgstr ""
232
 
233
- #: includes/class-freemius.php:7249
234
  msgid "Opt in to make \"%s\" better!"
235
  msgstr ""
236
 
237
- #: includes/class-freemius.php:7681
238
  msgid "The upgrade of %s was successfully completed."
239
  msgstr ""
240
 
241
- #: includes/class-freemius.php:9908, includes/class-fs-plugin-updater.php:1044, includes/class-fs-plugin-updater.php:1239, includes/class-fs-plugin-updater.php:1246, templates/auto-installation.php:32
242
  msgid "Add-On"
243
  msgstr ""
244
 
245
- #: includes/class-freemius.php:9910, templates/account.php:343, templates/account.php:351, templates/debug.php:358, templates/debug.php:549
246
  msgid "Plugin"
247
  msgstr ""
248
 
249
- #: includes/class-freemius.php:9911, templates/account.php:344, templates/account.php:352, templates/debug.php:358, templates/debug.php:549, templates/forms/deactivation/form.php:71
250
  msgid "Theme"
251
  msgstr ""
252
 
253
- #: includes/class-freemius.php:12843
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
254
  msgid "An unknown error has occurred while trying to set the user's beta mode."
255
  msgstr ""
256
 
257
- #: includes/class-freemius.php:12904
258
  msgid "Invalid new user ID or email address."
259
  msgstr ""
260
 
261
- #: includes/class-freemius.php:12934, includes/class-freemius.php:21645
262
  msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
263
  msgstr ""
264
 
265
- #: includes/class-freemius.php:12935, includes/class-freemius.php:21646
266
  msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
267
  msgstr ""
268
 
269
- #: includes/class-freemius.php:12942, includes/class-freemius.php:21653
270
  msgid "Change Ownership"
271
  msgstr ""
272
 
273
- #: includes/class-freemius.php:13438
274
  msgid "Invalid site details collection."
275
  msgstr ""
276
 
277
- #: includes/class-freemius.php:13558
278
  msgid "We couldn't find your email address in the system, are you sure it's the right address?"
279
  msgstr ""
280
 
281
- #: includes/class-freemius.php:13560
282
  msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
283
  msgstr ""
284
 
285
- #: includes/class-freemius.php:13834
286
  msgid "Account is pending activation."
287
  msgstr ""
288
 
289
- #: includes/class-freemius.php:13946, templates/forms/premium-versions-upgrade-handler.php:47
290
  msgid "Buy a license now"
291
  msgstr ""
292
 
293
- #: includes/class-freemius.php:13958, templates/forms/premium-versions-upgrade-handler.php:46
294
  msgid "Renew your license now"
295
  msgstr ""
296
 
297
- #: includes/class-freemius.php:13962
298
  msgid "%s to access version %s security & feature updates, and support."
299
  msgstr ""
300
 
301
- #: includes/class-freemius.php:16387
302
  msgid "%s activation was successfully completed."
303
  msgstr ""
304
 
305
- #: includes/class-freemius.php:16401
306
  msgid "Your account was successfully activated with the %s plan."
307
  msgstr ""
308
 
309
- #: includes/class-freemius.php:16412, includes/class-freemius.php:20159
310
  msgid "Your trial has been successfully started."
311
  msgstr ""
312
 
313
- #: includes/class-freemius.php:17004, includes/class-freemius.php:17092, includes/class-freemius.php:17258
314
  msgid "Couldn't activate %s."
315
  msgstr ""
316
 
317
- #: includes/class-freemius.php:17005, includes/class-freemius.php:17093, includes/class-freemius.php:17259
318
  msgid "Please contact us with the following message:"
319
  msgstr ""
320
 
321
- #: includes/class-freemius.php:17089, templates/forms/data-debug-mode.php:162
322
  msgid "An unknown error has occurred."
323
  msgstr ""
324
 
325
- #: includes/class-freemius.php:17616, includes/class-freemius.php:22589
326
  msgid "Upgrade"
327
  msgstr ""
328
 
329
- #: includes/class-freemius.php:17622
330
  msgid "Start Trial"
331
  msgstr ""
332
 
333
- #: includes/class-freemius.php:17624
334
  msgid "Pricing"
335
  msgstr ""
336
 
337
- #: includes/class-freemius.php:17704, includes/class-freemius.php:17706
338
  msgid "Affiliation"
339
  msgstr ""
340
 
341
- #: includes/class-freemius.php:17734, includes/class-freemius.php:17736, templates/account.php:191, templates/debug.php:324
342
  msgid "Account"
343
  msgstr ""
344
 
345
- #: includes/class-freemius.php:17750, includes/class-freemius.php:17752, includes/customizer/class-fs-customizer-support-section.php:60
346
  msgid "Contact Us"
347
  msgstr ""
348
 
349
- #: includes/class-freemius.php:17763, includes/class-freemius.php:17765, includes/class-freemius.php:22603, templates/account.php:119, templates/account/partials/addon.php:44
350
  msgid "Add-Ons"
351
  msgstr ""
352
 
353
- #: includes/class-freemius.php:17799
354
  msgctxt "ASCII arrow left icon"
355
  msgid "&#x2190;"
356
  msgstr ""
357
 
358
- #: includes/class-freemius.php:17799
359
  msgctxt "ASCII arrow right icon"
360
  msgid "&#x27a4;"
361
  msgstr ""
362
 
363
- #: includes/class-freemius.php:17801, templates/pricing.php:103
364
  msgctxt "noun"
365
  msgid "Pricing"
366
  msgstr ""
367
 
368
- #: includes/class-freemius.php:18014, includes/customizer/class-fs-customizer-support-section.php:67
369
  msgid "Support Forum"
370
  msgstr ""
371
 
372
- #: includes/class-freemius.php:18988
373
  msgid "Your email has been successfully verified - you are AWESOME!"
374
  msgstr ""
375
 
376
- #: includes/class-freemius.php:18989
377
  msgctxt "a positive response"
378
  msgid "Right on"
379
  msgstr ""
380
 
381
- #: includes/class-freemius.php:19493
382
  msgid "seems like the key you entered doesn't match our records."
383
  msgstr ""
384
 
385
- #: includes/class-freemius.php:19517
386
  msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
387
  msgstr ""
388
 
389
- #: includes/class-freemius.php:19735
390
  msgid "Your %s Add-on plan was successfully upgraded."
391
  msgstr ""
392
 
393
- #: includes/class-freemius.php:19737
394
  msgid "%s Add-on was successfully purchased."
395
  msgstr ""
396
 
397
- #: includes/class-freemius.php:19740
398
  msgid "Download the latest version"
399
  msgstr ""
400
 
401
- #: includes/class-freemius.php:19826
402
  msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
403
  msgstr ""
404
 
405
- #: includes/class-freemius.php:19832, includes/class-freemius.php:19842, includes/class-freemius.php:20287, includes/class-freemius.php:20376
406
  msgid "Error received from the server:"
407
  msgstr ""
408
 
409
- #: includes/class-freemius.php:19842
410
  msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
411
  msgstr ""
412
 
413
- #: includes/class-freemius.php:20056, includes/class-freemius.php:20292, includes/class-freemius.php:20347, includes/class-freemius.php:20454
414
  msgctxt "something somebody says when they are thinking about what you have just said."
415
  msgid "Hmm"
416
  msgstr ""
417
 
418
- #: includes/class-freemius.php:20069
419
  msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
420
  msgstr ""
421
 
422
- #: includes/class-freemius.php:20070, templates/account.php:121, templates/add-ons.php:250, templates/account/partials/addon.php:46
423
  msgctxt "trial period"
424
  msgid "Trial"
425
  msgstr ""
426
 
427
- #: includes/class-freemius.php:20075
428
  msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
429
  msgstr ""
430
 
431
- #: includes/class-freemius.php:20079, includes/class-freemius.php:20138
432
  msgid "Please contact us here"
433
  msgstr ""
434
 
435
- #: includes/class-freemius.php:20090
436
  msgid "Your plan was successfully activated."
437
  msgstr ""
438
 
439
- #: includes/class-freemius.php:20091
440
  msgid "Your plan was successfully upgraded."
441
  msgstr ""
442
 
443
- #: includes/class-freemius.php:20108
444
  msgid "Your plan was successfully changed to %s."
445
  msgstr ""
446
 
447
- #: includes/class-freemius.php:20124
448
  msgid "Your license has expired. You can still continue using the free %s forever."
449
  msgstr ""
450
 
451
- #: includes/class-freemius.php:20126
452
  msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
453
  msgstr ""
454
 
455
- #: includes/class-freemius.php:20134
456
  msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
457
  msgstr ""
458
 
459
- #: includes/class-freemius.php:20147
460
  msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
461
  msgstr ""
462
 
463
- #: includes/class-freemius.php:20173
464
  msgid "Your free trial has expired. You can still continue using all our free features."
465
  msgstr ""
466
 
467
- #: includes/class-freemius.php:20175
468
  msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
469
  msgstr ""
470
 
471
- #: includes/class-freemius.php:20283
472
  msgid "It looks like the license could not be activated."
473
  msgstr ""
474
 
475
- #: includes/class-freemius.php:20325
476
  msgid "Your license was successfully activated."
477
  msgstr ""
478
 
479
- #: includes/class-freemius.php:20351
480
  msgid "It looks like your site currently doesn't have an active license."
481
  msgstr ""
482
 
483
- #: includes/class-freemius.php:20375
484
  msgid "It looks like the license deactivation failed."
485
  msgstr ""
486
 
487
- #: includes/class-freemius.php:20404
488
  msgid "Your %s license was successfully deactivated."
489
  msgstr ""
490
 
491
- #: includes/class-freemius.php:20405
492
  msgid "Your license was successfully deactivated, you are back to the %s plan."
493
  msgstr ""
494
 
495
- #: includes/class-freemius.php:20408
496
  msgid "O.K"
497
  msgstr ""
498
 
499
- #: includes/class-freemius.php:20461
500
  msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
501
  msgstr ""
502
 
503
- #: includes/class-freemius.php:20470
504
  msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
505
  msgstr ""
506
 
507
- #: includes/class-freemius.php:20512
508
  msgid "You are already running the %s in a trial mode."
509
  msgstr ""
510
 
511
- #: includes/class-freemius.php:20523
512
  msgid "You already utilized a trial before."
513
  msgstr ""
514
 
515
- #: includes/class-freemius.php:20537
516
  msgid "Plan %s do not exist, therefore, can't start a trial."
517
  msgstr ""
518
 
519
- #: includes/class-freemius.php:20548
520
  msgid "Plan %s does not support a trial period."
521
  msgstr ""
522
 
523
- #: includes/class-freemius.php:20559
524
  msgid "None of the %s's plans supports a trial period."
525
  msgstr ""
526
 
527
- #: includes/class-freemius.php:20609
528
  msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
529
  msgstr ""
530
 
531
- #: includes/class-freemius.php:20645
532
  msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
533
  msgstr ""
534
 
535
- #: includes/class-freemius.php:20664
536
  msgid "Your %s free trial was successfully cancelled."
537
  msgstr ""
538
 
539
- #: includes/class-freemius.php:20980
540
  msgid "Version %s was released."
541
  msgstr ""
542
 
543
- #: includes/class-freemius.php:20980
544
  msgid "Please download %s."
545
  msgstr ""
546
 
547
- #: includes/class-freemius.php:20987
548
  msgid "the latest %s version here"
549
  msgstr ""
550
 
551
- #: includes/class-freemius.php:20992
552
  msgid "New"
553
  msgstr ""
554
 
555
- #: includes/class-freemius.php:20997
556
  msgid "Seems like you got the latest release."
557
  msgstr ""
558
 
559
- #: includes/class-freemius.php:20998
560
  msgid "You are all good!"
561
  msgstr ""
562
 
563
- #: includes/class-freemius.php:21301
564
  msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
565
  msgstr ""
566
 
567
- #: includes/class-freemius.php:21441
568
  msgid "Site successfully opted in."
569
  msgstr ""
570
 
571
- #: includes/class-freemius.php:21442, includes/class-freemius.php:22299
572
  msgid "Awesome"
573
  msgstr ""
574
 
575
- #: includes/class-freemius.php:21458, templates/forms/optout.php:41
576
  msgid "We appreciate your help in making the %s better by letting us track some usage data."
577
  msgstr ""
578
 
579
- #: includes/class-freemius.php:21459
580
  msgid "Thank you!"
581
  msgstr ""
582
 
583
- #: includes/class-freemius.php:21466
584
  msgid "We will no longer be sending any usage data of %s on %s to %s."
585
  msgstr ""
586
 
587
- #: includes/class-freemius.php:21612
588
  msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
589
  msgstr ""
590
 
591
- #: includes/class-freemius.php:21618
592
  msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
593
  msgstr ""
594
 
595
- #: includes/class-freemius.php:21623
596
  msgid "%s is the new owner of the account."
597
  msgstr ""
598
 
599
- #: includes/class-freemius.php:21625
600
  msgctxt "as congratulations"
601
  msgid "Congrats"
602
  msgstr ""
603
 
604
- #: includes/class-freemius.php:21661
605
  msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
606
  msgstr ""
607
 
608
- #: includes/class-freemius.php:21673
609
  msgid "Please provide your full name."
610
  msgstr ""
611
 
612
- #: includes/class-freemius.php:21678
613
  msgid "Your name was successfully updated."
614
  msgstr ""
615
 
616
- #: includes/class-freemius.php:21739
617
  msgid "You have successfully updated your %s."
618
  msgstr ""
619
 
620
- #: includes/class-freemius.php:21879
 
 
 
 
 
 
 
 
621
  msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
622
  msgstr ""
623
 
624
- #: includes/class-freemius.php:21880
625
  msgctxt "advance notice of something that will need attention."
626
  msgid "Heads up"
627
  msgstr ""
628
 
629
- #: includes/class-freemius.php:22339
630
  msgctxt "exclamation"
631
  msgid "Hey"
632
  msgstr ""
633
 
634
- #: includes/class-freemius.php:22339
635
  msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
636
  msgstr ""
637
 
638
- #: includes/class-freemius.php:22347
639
  msgid "No commitment for %s days - cancel anytime!"
640
  msgstr ""
641
 
642
- #: includes/class-freemius.php:22348
643
  msgid "No credit card required"
644
  msgstr ""
645
 
646
- #: includes/class-freemius.php:22355, templates/forms/trial-start.php:53
647
  msgctxt "call to action"
648
  msgid "Start free trial"
649
  msgstr ""
650
 
651
- #: includes/class-freemius.php:22432
652
  msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
653
  msgstr ""
654
 
655
- #: includes/class-freemius.php:22441
656
  msgid "Learn more"
657
  msgstr ""
658
 
659
- #: includes/class-freemius.php:22627, templates/account.php:507, templates/account.php:657, templates/connect.php:179, templates/connect.php:455, templates/forms/license-activation.php:27, templates/account/partials/addon.php:321
660
  msgid "Activate License"
661
  msgstr ""
662
 
663
- #: includes/class-freemius.php:22628, templates/account.php:601, templates/account.php:656, templates/account/partials/addon.php:322, templates/account/partials/site.php:271
664
  msgid "Change License"
665
  msgstr ""
666
 
667
- #: includes/class-freemius.php:22737, templates/account/partials/site.php:169
668
  msgid "Opt Out"
669
  msgstr ""
670
 
671
- #: includes/class-freemius.php:22739, includes/class-freemius.php:22745, templates/account/partials/site.php:49, templates/account/partials/site.php:169
672
  msgid "Opt In"
673
  msgstr ""
674
 
675
- #: includes/class-freemius.php:22973
676
  msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
677
  msgstr ""
678
 
679
- #: includes/class-freemius.php:22981
680
  msgid "Activate %s features"
681
  msgstr ""
682
 
683
- #: includes/class-freemius.php:22994
684
  msgid "Please follow these steps to complete the upgrade"
685
  msgstr ""
686
 
687
- #: includes/class-freemius.php:22998
688
  msgid "Download the latest %s version"
689
  msgstr ""
690
 
691
- #: includes/class-freemius.php:23002
692
  msgid "Upload and activate the downloaded version"
693
  msgstr ""
694
 
695
- #: includes/class-freemius.php:23004
696
  msgid "How to upload and activate?"
697
  msgstr ""
698
 
699
- #: includes/class-freemius.php:23138
700
  msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
701
  msgstr ""
702
 
703
- #: includes/class-freemius.php:23299
704
  msgid "Auto installation only works for opted-in users."
705
  msgstr ""
706
 
707
- #: includes/class-freemius.php:23309, includes/class-freemius.php:23342, includes/class-fs-plugin-updater.php:1218, includes/class-fs-plugin-updater.php:1232
708
  msgid "Invalid module ID."
709
  msgstr ""
710
 
711
- #: includes/class-freemius.php:23318, includes/class-fs-plugin-updater.php:1254
712
  msgid "Premium version already active."
713
  msgstr ""
714
 
715
- #: includes/class-freemius.php:23325
716
  msgid "You do not have a valid license to access the premium version."
717
  msgstr ""
718
 
719
- #: includes/class-freemius.php:23332
720
  msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
721
  msgstr ""
722
 
723
- #: includes/class-freemius.php:23350, includes/class-fs-plugin-updater.php:1253
724
  msgid "Premium add-on version already installed."
725
  msgstr ""
726
 
727
- #: includes/class-freemius.php:23700
728
  msgid "View paid features"
729
  msgstr ""
730
 
731
- #: includes/class-freemius.php:24022
732
  msgid "Thank you so much for using %s and its add-ons!"
733
  msgstr ""
734
 
735
- #: includes/class-freemius.php:24023
736
  msgid "Thank you so much for using %s!"
737
  msgstr ""
738
 
739
- #: includes/class-freemius.php:24029
740
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
741
  msgstr ""
742
 
743
- #: includes/class-freemius.php:24033
744
  msgid "Thank you so much for using our products!"
745
  msgstr ""
746
 
747
- #: includes/class-freemius.php:24034
748
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
749
  msgstr ""
750
 
751
- #: includes/class-freemius.php:24053
752
  msgid "%s and its add-ons"
753
  msgstr ""
754
 
755
- #: includes/class-freemius.php:24062
756
  msgid "Products"
757
  msgstr ""
758
 
759
- #: includes/class-freemius.php:24069, templates/connect.php:280
760
  msgid "Yes"
761
  msgstr ""
762
 
763
- #: includes/class-freemius.php:24070, templates/connect.php:281
764
  msgid "send me security & feature updates, educational content and offers."
765
  msgstr ""
766
 
767
- #: includes/class-freemius.php:24071, templates/connect.php:286
768
  msgid "No"
769
  msgstr ""
770
 
771
- #: includes/class-freemius.php:24073, templates/connect.php:288
772
  msgid "do %sNOT%s send me security & feature updates, educational content and offers."
773
  msgstr ""
774
 
775
- #: includes/class-freemius.php:24083
776
  msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
777
  msgstr ""
778
 
779
- #: includes/class-freemius.php:24085, templates/connect.php:295
780
  msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
781
  msgstr ""
782
 
783
- #: includes/class-freemius.php:24367
784
  msgid "License key is empty."
785
  msgstr ""
786
 
@@ -808,314 +832,314 @@ msgstr ""
808
  msgid "Important Upgrade Notice:"
809
  msgstr ""
810
 
811
- #: includes/class-fs-plugin-updater.php:1283
812
  msgid "Installing plugin: %s"
813
  msgstr ""
814
 
815
- #: includes/class-fs-plugin-updater.php:1324
816
  msgid "Unable to connect to the filesystem. Please confirm your credentials."
817
  msgstr ""
818
 
819
- #: includes/class-fs-plugin-updater.php:1506
820
  msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
821
  msgstr ""
822
 
823
- #: includes/fs-plugin-info-dialog.php:535
824
  msgid "Purchase More"
825
  msgstr ""
826
 
827
- #: includes/fs-plugin-info-dialog.php:536, templates/account/partials/addon.php:385
828
  msgctxt "verb"
829
  msgid "Purchase"
830
  msgstr ""
831
 
832
- #: includes/fs-plugin-info-dialog.php:540
833
  msgid "Start my free %s"
834
  msgstr ""
835
 
836
- #: includes/fs-plugin-info-dialog.php:738
837
  msgid "Install Free Version Update Now"
838
  msgstr ""
839
 
840
- #: includes/fs-plugin-info-dialog.php:739, templates/account.php:590
841
  msgid "Install Update Now"
842
  msgstr ""
843
 
844
- #: includes/fs-plugin-info-dialog.php:748
845
  msgid "Install Free Version Now"
846
  msgstr ""
847
 
848
- #: includes/fs-plugin-info-dialog.php:749, templates/add-ons.php:323, templates/auto-installation.php:111, templates/account/partials/addon.php:365, templates/account/partials/addon.php:418
849
  msgid "Install Now"
850
  msgstr ""
851
 
852
- #: includes/fs-plugin-info-dialog.php:765
853
  msgctxt "as download latest version"
854
  msgid "Download Latest Free Version"
855
  msgstr ""
856
 
857
- #: includes/fs-plugin-info-dialog.php:766, templates/account.php:99, templates/add-ons.php:37, templates/account/partials/addon.php:25
858
  msgctxt "as download latest version"
859
  msgid "Download Latest"
860
  msgstr ""
861
 
862
- #: includes/fs-plugin-info-dialog.php:781, templates/add-ons.php:329, templates/account/partials/addon.php:356, templates/account/partials/addon.php:412
863
  msgid "Activate this add-on"
864
  msgstr ""
865
 
866
- #: includes/fs-plugin-info-dialog.php:783, templates/connect.php:452
867
  msgid "Activate Free Version"
868
  msgstr ""
869
 
870
- #: includes/fs-plugin-info-dialog.php:784, templates/account.php:123, templates/add-ons.php:330, templates/account/partials/addon.php:48
871
  msgid "Activate"
872
  msgstr ""
873
 
874
- #: includes/fs-plugin-info-dialog.php:994
875
  msgctxt "Plugin installer section title"
876
  msgid "Description"
877
  msgstr ""
878
 
879
- #: includes/fs-plugin-info-dialog.php:995
880
  msgctxt "Plugin installer section title"
881
  msgid "Installation"
882
  msgstr ""
883
 
884
- #: includes/fs-plugin-info-dialog.php:996
885
  msgctxt "Plugin installer section title"
886
  msgid "FAQ"
887
  msgstr ""
888
 
889
- #: includes/fs-plugin-info-dialog.php:997, templates/plugin-info/description.php:55
890
  msgid "Screenshots"
891
  msgstr ""
892
 
893
- #: includes/fs-plugin-info-dialog.php:998
894
  msgctxt "Plugin installer section title"
895
  msgid "Changelog"
896
  msgstr ""
897
 
898
- #: includes/fs-plugin-info-dialog.php:999
899
  msgctxt "Plugin installer section title"
900
  msgid "Reviews"
901
  msgstr ""
902
 
903
- #: includes/fs-plugin-info-dialog.php:1000
904
  msgctxt "Plugin installer section title"
905
  msgid "Other Notes"
906
  msgstr ""
907
 
908
- #: includes/fs-plugin-info-dialog.php:1015
909
  msgctxt "Plugin installer section title"
910
  msgid "Features & Pricing"
911
  msgstr ""
912
 
913
- #: includes/fs-plugin-info-dialog.php:1025
914
  msgid "Plugin Install"
915
  msgstr ""
916
 
917
- #: includes/fs-plugin-info-dialog.php:1097
918
  msgctxt "e.g. Professional Plan"
919
  msgid "%s Plan"
920
  msgstr ""
921
 
922
- #: includes/fs-plugin-info-dialog.php:1123
923
  msgctxt "e.g. the best product"
924
  msgid "Best"
925
  msgstr ""
926
 
927
- #: includes/fs-plugin-info-dialog.php:1129, includes/fs-plugin-info-dialog.php:1149
928
  msgctxt "as every month"
929
  msgid "Monthly"
930
  msgstr ""
931
 
932
- #: includes/fs-plugin-info-dialog.php:1132
933
  msgctxt "as once a year"
934
  msgid "Annual"
935
  msgstr ""
936
 
937
- #: includes/fs-plugin-info-dialog.php:1135
938
  msgid "Lifetime"
939
  msgstr ""
940
 
941
- #: includes/fs-plugin-info-dialog.php:1149, includes/fs-plugin-info-dialog.php:1151, includes/fs-plugin-info-dialog.php:1153
942
  msgctxt "e.g. billed monthly"
943
  msgid "Billed %s"
944
  msgstr ""
945
 
946
- #: includes/fs-plugin-info-dialog.php:1151
947
  msgctxt "as once a year"
948
  msgid "Annually"
949
  msgstr ""
950
 
951
- #: includes/fs-plugin-info-dialog.php:1153
952
  msgctxt "as once a year"
953
  msgid "Once"
954
  msgstr ""
955
 
956
- #: includes/fs-plugin-info-dialog.php:1159
957
  msgid "Single Site License"
958
  msgstr ""
959
 
960
- #: includes/fs-plugin-info-dialog.php:1161
961
  msgid "Unlimited Licenses"
962
  msgstr ""
963
 
964
- #: includes/fs-plugin-info-dialog.php:1163
965
  msgid "Up to %s Sites"
966
  msgstr ""
967
 
968
- #: includes/fs-plugin-info-dialog.php:1173, templates/plugin-info/features.php:82
969
  msgctxt "as monthly period"
970
  msgid "mo"
971
  msgstr ""
972
 
973
- #: includes/fs-plugin-info-dialog.php:1180, templates/plugin-info/features.php:80
974
  msgctxt "as annual period"
975
  msgid "year"
976
  msgstr ""
977
 
978
- #: includes/fs-plugin-info-dialog.php:1234
979
  msgctxt "noun"
980
  msgid "Price"
981
  msgstr ""
982
 
983
- #: includes/fs-plugin-info-dialog.php:1282
984
  msgid "Save %s"
985
  msgstr ""
986
 
987
- #: includes/fs-plugin-info-dialog.php:1292
988
  msgid "No commitment for %s - cancel anytime"
989
  msgstr ""
990
 
991
- #: includes/fs-plugin-info-dialog.php:1295
992
  msgid "After your free %s, pay as little as %s"
993
  msgstr ""
994
 
995
- #: includes/fs-plugin-info-dialog.php:1306
996
  msgid "Details"
997
  msgstr ""
998
 
999
- #: includes/fs-plugin-info-dialog.php:1310, templates/account.php:110, templates/debug.php:201, templates/debug.php:238, templates/debug.php:455, templates/account/partials/addon.php:36
1000
  msgctxt "product version"
1001
  msgid "Version"
1002
  msgstr ""
1003
 
1004
- #: includes/fs-plugin-info-dialog.php:1317
1005
  msgctxt "as the plugin author"
1006
  msgid "Author"
1007
  msgstr ""
1008
 
1009
- #: includes/fs-plugin-info-dialog.php:1324
1010
  msgid "Last Updated"
1011
  msgstr ""
1012
 
1013
- #: includes/fs-plugin-info-dialog.php:1329, templates/account.php:476
1014
  msgctxt "x-ago"
1015
  msgid "%s ago"
1016
  msgstr ""
1017
 
1018
- #: includes/fs-plugin-info-dialog.php:1338
1019
  msgid "Requires WordPress Version"
1020
  msgstr ""
1021
 
1022
- #: includes/fs-plugin-info-dialog.php:1339
1023
  msgid "%s or higher"
1024
  msgstr ""
1025
 
1026
- #: includes/fs-plugin-info-dialog.php:1346
1027
  msgid "Compatible up to"
1028
  msgstr ""
1029
 
1030
- #: includes/fs-plugin-info-dialog.php:1354
1031
  msgid "Downloaded"
1032
  msgstr ""
1033
 
1034
- #: includes/fs-plugin-info-dialog.php:1358
1035
  msgid "%s time"
1036
  msgstr ""
1037
 
1038
- #: includes/fs-plugin-info-dialog.php:1360
1039
  msgid "%s times"
1040
  msgstr ""
1041
 
1042
- #: includes/fs-plugin-info-dialog.php:1370
1043
  msgid "WordPress.org Plugin Page"
1044
  msgstr ""
1045
 
1046
- #: includes/fs-plugin-info-dialog.php:1378
1047
  msgid "Plugin Homepage"
1048
  msgstr ""
1049
 
1050
- #: includes/fs-plugin-info-dialog.php:1386, includes/fs-plugin-info-dialog.php:1468
1051
  msgid "Donate to this plugin"
1052
  msgstr ""
1053
 
1054
- #: includes/fs-plugin-info-dialog.php:1393
1055
  msgid "Average Rating"
1056
  msgstr ""
1057
 
1058
- #: includes/fs-plugin-info-dialog.php:1400
1059
  msgid "based on %s"
1060
  msgstr ""
1061
 
1062
- #: includes/fs-plugin-info-dialog.php:1404
1063
  msgid "%s rating"
1064
  msgstr ""
1065
 
1066
- #: includes/fs-plugin-info-dialog.php:1406
1067
  msgid "%s ratings"
1068
  msgstr ""
1069
 
1070
- #: includes/fs-plugin-info-dialog.php:1421
1071
  msgid "%s star"
1072
  msgstr ""
1073
 
1074
- #: includes/fs-plugin-info-dialog.php:1423
1075
  msgid "%s stars"
1076
  msgstr ""
1077
 
1078
- #: includes/fs-plugin-info-dialog.php:1434
1079
  msgid "Click to see reviews that provided a rating of %s"
1080
  msgstr ""
1081
 
1082
- #: includes/fs-plugin-info-dialog.php:1447
1083
  msgid "Contributors"
1084
  msgstr ""
1085
 
1086
- #: includes/fs-plugin-info-dialog.php:1476, includes/fs-plugin-info-dialog.php:1478
1087
  msgid "Warning"
1088
  msgstr ""
1089
 
1090
- #: includes/fs-plugin-info-dialog.php:1476
1091
  msgid "This plugin has not been tested with your current version of WordPress."
1092
  msgstr ""
1093
 
1094
- #: includes/fs-plugin-info-dialog.php:1478
1095
  msgid "This plugin has not been marked as compatible with your version of WordPress."
1096
  msgstr ""
1097
 
1098
- #: includes/fs-plugin-info-dialog.php:1497
1099
  msgid "Paid add-on must be deployed to Freemius."
1100
  msgstr ""
1101
 
1102
- #: includes/fs-plugin-info-dialog.php:1498
1103
  msgid "Add-on must be deployed to WordPress.org or Freemius."
1104
  msgstr ""
1105
 
1106
- #: includes/fs-plugin-info-dialog.php:1519
1107
  msgid "Newer Version (%s) Installed"
1108
  msgstr ""
1109
 
1110
- #: includes/fs-plugin-info-dialog.php:1520
1111
  msgid "Newer Free Version (%s) Installed"
1112
  msgstr ""
1113
 
1114
- #: includes/fs-plugin-info-dialog.php:1527
1115
  msgid "Latest Version Installed"
1116
  msgstr ""
1117
 
1118
- #: includes/fs-plugin-info-dialog.php:1528
1119
  msgid "Latest Free Version Installed"
1120
  msgstr ""
1121
 
@@ -1199,208 +1223,216 @@ msgstr ""
1199
  msgid "Bundle Plan"
1200
  msgstr ""
1201
 
1202
- #: templates/account.php:199
1203
  msgid "Free Trial"
1204
  msgstr ""
1205
 
1206
- #: templates/account.php:210
1207
  msgid "Account Details"
1208
  msgstr ""
1209
 
1210
- #: templates/account.php:217, templates/forms/data-debug-mode.php:33
1211
  msgid "Start Debug"
1212
  msgstr ""
1213
 
1214
- #: templates/account.php:219
1215
  msgid "Stop Debug"
1216
  msgstr ""
1217
 
1218
- #: templates/account.php:226
1219
  msgid "Billing & Invoices"
1220
  msgstr ""
1221
 
1222
- #: templates/account.php:237
1223
  msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1224
  msgstr ""
1225
 
1226
- #: templates/account.php:239
1227
  msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1228
  msgstr ""
1229
 
1230
- #: templates/account.php:242
1231
  msgid "Delete Account"
1232
  msgstr ""
1233
 
1234
- #: templates/account.php:254, templates/account/partials/addon.php:231, templates/account/partials/deactivate-license-button.php:35
1235
  msgid "Deactivate License"
1236
  msgstr ""
1237
 
1238
- #: templates/account.php:277, templates/forms/subscription-cancellation.php:125
1239
  msgid "Are you sure you want to proceed?"
1240
  msgstr ""
1241
 
1242
- #: templates/account.php:277, templates/account/partials/addon.php:255
1243
  msgid "Cancel Subscription"
1244
  msgstr ""
1245
 
1246
- #: templates/account.php:306, templates/account/partials/addon.php:340
1247
  msgctxt "as synchronize"
1248
  msgid "Sync"
1249
  msgstr ""
1250
 
1251
- #: templates/account.php:321, templates/debug.php:505
1252
  msgid "Name"
1253
  msgstr ""
1254
 
1255
- #: templates/account.php:327, templates/debug.php:506
1256
  msgid "Email"
1257
  msgstr ""
1258
 
1259
- #: templates/account.php:334, templates/debug.php:369, templates/debug.php:555
1260
  msgid "User ID"
1261
  msgstr ""
1262
 
1263
- #: templates/account.php:352, templates/account.php:670, templates/account.php:715, templates/debug.php:236, templates/debug.php:363, templates/debug.php:452, templates/debug.php:504, templates/debug.php:553, templates/debug.php:632, templates/account/payments.php:35, templates/debug/logger.php:21
1264
  msgid "ID"
1265
  msgstr ""
1266
 
1267
- #: templates/account.php:359
1268
  msgid "Site ID"
1269
  msgstr ""
1270
 
1271
- #: templates/account.php:362
1272
  msgid "No ID"
1273
  msgstr ""
1274
 
1275
- #: templates/account.php:367, templates/debug.php:243, templates/debug.php:372, templates/debug.php:456, templates/debug.php:508, templates/account/partials/site.php:227
1276
  msgid "Public Key"
1277
  msgstr ""
1278
 
1279
- #: templates/account.php:373, templates/debug.php:373, templates/debug.php:457, templates/debug.php:509, templates/account/partials/site.php:239
1280
  msgid "Secret Key"
1281
  msgstr ""
1282
 
1283
- #: templates/account.php:376
1284
  msgctxt "as secret encryption key missing"
1285
  msgid "No Secret"
1286
  msgstr ""
1287
 
1288
- #: templates/account.php:403, templates/account/partials/site.php:120, templates/account/partials/site.php:122
1289
  msgid "Trial"
1290
  msgstr ""
1291
 
1292
- #: templates/account.php:430, templates/debug.php:561, templates/account/partials/site.php:260
1293
  msgid "License Key"
1294
  msgstr ""
1295
 
1296
- #: templates/account.php:461
1297
  msgid "Join the Beta program"
1298
  msgstr ""
1299
 
1300
- #: templates/account.php:467
1301
  msgid "not verified"
1302
  msgstr ""
1303
 
1304
- #: templates/account.php:476, templates/account/partials/addon.php:190
1305
  msgid "Expired"
1306
  msgstr ""
1307
 
1308
- #: templates/account.php:536
1309
  msgid "Premium version"
1310
  msgstr ""
1311
 
1312
- #: templates/account.php:538
1313
  msgid "Free version"
1314
  msgstr ""
1315
 
1316
- #: templates/account.php:550
1317
  msgid "Verify Email"
1318
  msgstr ""
1319
 
1320
- #: templates/account.php:564
1321
  msgid "Download %s Version"
1322
  msgstr ""
1323
 
1324
- #: templates/account.php:580
1325
  msgid "Download Paid Version"
1326
  msgstr ""
1327
 
1328
- #: templates/account.php:598, templates/account.php:853, templates/account/partials/site.php:248, templates/account/partials/site.php:270
1329
  msgctxt "verb"
1330
  msgid "Show"
1331
  msgstr ""
1332
 
1333
- #: templates/account.php:613
1334
  msgid "What is your %s?"
1335
  msgstr ""
1336
 
1337
- #: templates/account.php:621, templates/account/billing.php:21
1338
  msgctxt "verb"
1339
  msgid "Edit"
1340
  msgstr ""
1341
 
1342
- #: templates/account.php:625, templates/forms/user-change.php:27
1343
  msgid "Change User"
1344
  msgstr ""
1345
 
1346
- #: templates/account.php:649
1347
  msgid "Sites"
1348
  msgstr ""
1349
 
1350
- #: templates/account.php:662
1351
  msgid "Search by address"
1352
  msgstr ""
1353
 
1354
- #: templates/account.php:671, templates/debug.php:366
1355
  msgid "Address"
1356
  msgstr ""
1357
 
1358
- #: templates/account.php:672
1359
  msgid "License"
1360
  msgstr ""
1361
 
1362
- #: templates/account.php:673
1363
  msgid "Plan"
1364
  msgstr ""
1365
 
1366
- #: templates/account.php:718
1367
  msgctxt "as software license"
1368
  msgid "License"
1369
  msgstr ""
1370
 
1371
- #: templates/account.php:847
1372
  msgctxt "verb"
1373
  msgid "Hide"
1374
  msgstr ""
1375
 
1376
- #: templates/account.php:869, templates/forms/data-debug-mode.php:31
1377
  msgid "Processing"
1378
  msgstr ""
1379
 
1380
- #: templates/account.php:872
1381
  msgid "Get updates for bleeding edge Beta versions of %s."
1382
  msgstr ""
1383
 
1384
- #: templates/account.php:930
1385
  msgid "Cancelling %s"
1386
  msgstr ""
1387
 
1388
- #: templates/account.php:930, templates/account.php:947, templates/forms/subscription-cancellation.php:27, templates/forms/deactivation/form.php:133
1389
  msgid "trial"
1390
  msgstr ""
1391
 
1392
- #: templates/account.php:945, templates/forms/deactivation/form.php:150
1393
  msgid "Cancelling %s..."
1394
  msgstr ""
1395
 
1396
- #: templates/account.php:948, templates/forms/subscription-cancellation.php:28, templates/forms/deactivation/form.php:134
1397
  msgid "subscription"
1398
  msgstr ""
1399
 
1400
- #: templates/account.php:962
1401
  msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1402
  msgstr ""
1403
 
 
 
 
 
 
 
 
 
1404
  #: templates/add-ons.php:38
1405
  msgid "View details"
1406
  msgstr ""
@@ -1530,7 +1562,7 @@ msgstr ""
1530
  msgid "Can't find your license key?"
1531
  msgstr ""
1532
 
1533
- #: templates/connect.php:323, templates/connect.php:694, templates/forms/deactivation/retry-skip.php:20
1534
  msgctxt "verb"
1535
  msgid "Skip"
1536
  msgstr ""
@@ -1587,40 +1619,40 @@ msgstr ""
1587
  msgid "Title, slug, version, and is active"
1588
  msgstr ""
1589
 
1590
- #: templates/connect.php:420, templates/forms/license-activation.php:41
1591
  msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1592
  msgstr ""
1593
 
1594
- #: templates/connect.php:425
1595
  msgid "What permissions are being granted?"
1596
  msgstr ""
1597
 
1598
- #: templates/connect.php:451
1599
  msgid "Don't have a license key?"
1600
  msgstr ""
1601
 
1602
- #: templates/connect.php:454
1603
  msgid "Have a license key?"
1604
  msgstr ""
1605
 
1606
- #: templates/connect.php:462
1607
  msgid "Privacy Policy"
1608
  msgstr ""
1609
 
1610
- #: templates/connect.php:464
1611
  msgid "License Agreement"
1612
  msgstr ""
1613
 
1614
- #: templates/connect.php:464
1615
  msgid "Terms of Service"
1616
  msgstr ""
1617
 
1618
- #: templates/connect.php:853
1619
  msgctxt "as in the process of sending an email"
1620
  msgid "Sending email"
1621
  msgstr ""
1622
 
1623
- #: templates/connect.php:854
1624
  msgctxt "as activating plugin"
1625
  msgid "Activating"
1626
  msgstr ""
@@ -2053,135 +2085,135 @@ msgstr ""
2053
  msgid "Apply to become an affiliate"
2054
  msgstr ""
2055
 
2056
- #: templates/forms/affiliation.php:104
2057
  msgid "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
2058
  msgstr ""
2059
 
2060
- #: templates/forms/affiliation.php:119
2061
  msgid "Thank you for applying for our affiliate program, we'll review your details during the next 14 days and will get back to you with further information."
2062
  msgstr ""
2063
 
2064
- #: templates/forms/affiliation.php:122
2065
  msgid "Your affiliation account was temporarily suspended."
2066
  msgstr ""
2067
 
2068
- #: templates/forms/affiliation.php:125
2069
  msgid "Thank you for applying for our affiliate program, unfortunately, we've decided at this point to reject your application. Please try again in 30 days."
2070
  msgstr ""
2071
 
2072
- #: templates/forms/affiliation.php:128
2073
  msgid "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
2074
  msgstr ""
2075
 
2076
- #: templates/forms/affiliation.php:141
2077
  msgid "Like the %s? Become our ambassador and earn cash ;-)"
2078
  msgstr ""
2079
 
2080
- #: templates/forms/affiliation.php:142
2081
  msgid "Refer new customers to our %s and earn %s commission on each successful sale you refer!"
2082
  msgstr ""
2083
 
2084
- #: templates/forms/affiliation.php:145
2085
  msgid "Program Summary"
2086
  msgstr ""
2087
 
2088
- #: templates/forms/affiliation.php:147
2089
  msgid "%s commission when a customer purchases a new license."
2090
  msgstr ""
2091
 
2092
- #: templates/forms/affiliation.php:149
2093
  msgid "Get commission for automated subscription renewals."
2094
  msgstr ""
2095
 
2096
- #: templates/forms/affiliation.php:152
2097
  msgid "%s tracking cookie after the first visit to maximize earnings potential."
2098
  msgstr ""
2099
 
2100
- #: templates/forms/affiliation.php:155
2101
  msgid "Unlimited commissions."
2102
  msgstr ""
2103
 
2104
- #: templates/forms/affiliation.php:157
2105
  msgid "%s minimum payout amount."
2106
  msgstr ""
2107
 
2108
- #: templates/forms/affiliation.php:158
2109
  msgid "Payouts are in USD and processed monthly via PayPal."
2110
  msgstr ""
2111
 
2112
- #: templates/forms/affiliation.php:159
2113
  msgid "As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days."
2114
  msgstr ""
2115
 
2116
- #: templates/forms/affiliation.php:162
2117
  msgid "Affiliate"
2118
  msgstr ""
2119
 
2120
- #: templates/forms/affiliation.php:165, templates/forms/resend-key.php:23
2121
  msgid "Email address"
2122
  msgstr ""
2123
 
2124
- #: templates/forms/affiliation.php:169
2125
  msgid "Full name"
2126
  msgstr ""
2127
 
2128
- #: templates/forms/affiliation.php:173
2129
  msgid "PayPal account email address"
2130
  msgstr ""
2131
 
2132
- #: templates/forms/affiliation.php:177
2133
  msgid "Where are you going to promote the %s?"
2134
  msgstr ""
2135
 
2136
- #: templates/forms/affiliation.php:179
2137
  msgid "Enter the domain of your website or other websites from where you plan to promote the %s."
2138
  msgstr ""
2139
 
2140
- #: templates/forms/affiliation.php:181
2141
  msgid "Add another domain"
2142
  msgstr ""
2143
 
2144
- #: templates/forms/affiliation.php:185
2145
  msgid "Extra Domains"
2146
  msgstr ""
2147
 
2148
- #: templates/forms/affiliation.php:186
2149
  msgid "Extra domains where you will be marketing the product from."
2150
  msgstr ""
2151
 
2152
- #: templates/forms/affiliation.php:196
2153
  msgid "Promotion methods"
2154
  msgstr ""
2155
 
2156
- #: templates/forms/affiliation.php:199
2157
  msgid "Social media (Facebook, Twitter, etc.)"
2158
  msgstr ""
2159
 
2160
- #: templates/forms/affiliation.php:203
2161
  msgid "Mobile apps"
2162
  msgstr ""
2163
 
2164
- #: templates/forms/affiliation.php:207
2165
  msgid "Website, email, and social media statistics (optional)"
2166
  msgstr ""
2167
 
2168
- #: templates/forms/affiliation.php:210
2169
  msgid "Please feel free to provide any relevant website or social media statistics, e.g. monthly unique site visits, number of email subscribers, followers, etc. (we will keep this information confidential)."
2170
  msgstr ""
2171
 
2172
- #: templates/forms/affiliation.php:214
2173
  msgid "How will you promote us?"
2174
  msgstr ""
2175
 
2176
- #: templates/forms/affiliation.php:217
2177
  msgid "Please provide details on how you intend to promote %s (please be as specific as possible)."
2178
  msgstr ""
2179
 
2180
- #: templates/forms/affiliation.php:223, templates/forms/resend-key.php:22
2181
  msgid "Cancel"
2182
  msgstr ""
2183
 
2184
- #: templates/forms/affiliation.php:225
2185
  msgid "Become an affiliate"
2186
  msgstr ""
2187
 
@@ -2255,7 +2287,7 @@ msgstr ""
2255
  msgid "Plugins & themes tracking"
2256
  msgstr ""
2257
 
2258
- #: templates/forms/optout.php:256
2259
  msgid "Saved"
2260
  msgstr ""
2261
 
@@ -2467,19 +2499,19 @@ msgstr ""
2467
  msgid "switching"
2468
  msgstr ""
2469
 
2470
- #: templates/forms/deactivation/form.php:365
2471
  msgid "Submit & %s"
2472
  msgstr ""
2473
 
2474
- #: templates/forms/deactivation/form.php:386
2475
  msgid "Kindly tell us the reason so we can improve."
2476
  msgstr ""
2477
 
2478
- #: templates/forms/deactivation/form.php:511
2479
  msgid "Yes - %s"
2480
  msgstr ""
2481
 
2482
- #: templates/forms/deactivation/form.php:518
2483
  msgid "Skip & %s"
2484
  msgstr ""
2485
 
1
+ # Copyright (C) 2020 freemius
2
  # This file is distributed under the same license as the freemius package.
3
  msgid ""
4
  msgstr ""
16
  "X-Poedit-SourceCharset: UTF-8\n"
17
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
 
19
+ #: includes/class-freemius.php:1912, templates/account.php:910
20
  msgid "An update to a Beta version will replace your installed version of %s with the latest Beta release - use with caution, and not on production sites. You have been warned."
21
  msgstr ""
22
 
23
+ #: includes/class-freemius.php:1919
24
  msgid "Would you like to proceed with the update?"
25
  msgstr ""
26
 
27
+ #: includes/class-freemius.php:2131
28
  msgid "Freemius SDK couldn't find the plugin's main file. Please contact sdk@freemius.com with the current error."
29
  msgstr ""
30
 
31
+ #: includes/class-freemius.php:2133
32
  msgid "Error"
33
  msgstr ""
34
 
35
+ #: includes/class-freemius.php:2533
36
  msgid "I found a better %s"
37
  msgstr ""
38
 
39
+ #: includes/class-freemius.php:2535
40
  msgid "What's the %s's name?"
41
  msgstr ""
42
 
43
+ #: includes/class-freemius.php:2541
44
  msgid "It's a temporary %s. I'm just debugging an issue."
45
  msgstr ""
46
 
47
+ #: includes/class-freemius.php:2543
48
  msgid "Deactivation"
49
  msgstr ""
50
 
51
+ #: includes/class-freemius.php:2544
52
  msgid "Theme Switch"
53
  msgstr ""
54
 
55
+ #: includes/class-freemius.php:2553, templates/forms/resend-key.php:24, templates/forms/user-change.php:29
56
  msgid "Other"
57
  msgstr ""
58
 
59
+ #: includes/class-freemius.php:2561
60
  msgid "I no longer need the %s"
61
  msgstr ""
62
 
63
+ #: includes/class-freemius.php:2568
64
  msgid "I only needed the %s for a short period"
65
  msgstr ""
66
 
67
+ #: includes/class-freemius.php:2574
68
  msgid "The %s broke my site"
69
  msgstr ""
70
 
71
+ #: includes/class-freemius.php:2581
72
  msgid "The %s suddenly stopped working"
73
  msgstr ""
74
 
75
+ #: includes/class-freemius.php:2591
76
  msgid "I can't pay for it anymore"
77
  msgstr ""
78
 
79
+ #: includes/class-freemius.php:2593
80
  msgid "What price would you feel comfortable paying?"
81
  msgstr ""
82
 
83
+ #: includes/class-freemius.php:2599
84
  msgid "I don't like to share my information with you"
85
  msgstr ""
86
 
87
+ #: includes/class-freemius.php:2620
88
  msgid "The %s didn't work"
89
  msgstr ""
90
 
91
+ #: includes/class-freemius.php:2630
92
  msgid "I couldn't understand how to make it work"
93
  msgstr ""
94
 
95
+ #: includes/class-freemius.php:2638
96
  msgid "The %s is great, but I need specific feature that you don't support"
97
  msgstr ""
98
 
99
+ #: includes/class-freemius.php:2640
100
  msgid "What feature?"
101
  msgstr ""
102
 
103
+ #: includes/class-freemius.php:2644
104
  msgid "The %s is not working"
105
  msgstr ""
106
 
107
+ #: includes/class-freemius.php:2646
108
  msgid "Kindly share what didn't work so we can fix it for future users..."
109
  msgstr ""
110
 
111
+ #: includes/class-freemius.php:2650
112
  msgid "It's not what I was looking for"
113
  msgstr ""
114
 
115
+ #: includes/class-freemius.php:2652
116
  msgid "What you've been looking for?"
117
  msgstr ""
118
 
119
+ #: includes/class-freemius.php:2656
120
  msgid "The %s didn't work as expected"
121
  msgstr ""
122
 
123
+ #: includes/class-freemius.php:2658
124
  msgid "What did you expect?"
125
  msgstr ""
126
 
127
+ #: includes/class-freemius.php:3513, templates/debug.php:20
128
  msgid "Freemius Debug"
129
  msgstr ""
130
 
131
+ #: includes/class-freemius.php:4265
132
  msgid "I don't know what is cURL or how to install it, help me!"
133
  msgstr ""
134
 
135
+ #: includes/class-freemius.php:4267
136
  msgid "We'll make sure to contact your hosting company and resolve the issue. You will get a follow-up email to %s once we have an update."
137
  msgstr ""
138
 
139
+ #: includes/class-freemius.php:4274
140
  msgid "Great, please install cURL and enable it in your php.ini file. In addition, search for the 'disable_functions' directive in your php.ini file and remove any disabled methods starting with 'curl_'. To make sure it was successfully activated, use 'phpinfo()'. Once activated, deactivate the %s and reactivate it back again."
141
  msgstr ""
142
 
143
+ #: includes/class-freemius.php:4379
144
  msgid "Yes - do your thing"
145
  msgstr ""
146
 
147
+ #: includes/class-freemius.php:4384
148
  msgid "No - just deactivate"
149
  msgstr ""
150
 
151
+ #: includes/class-freemius.php:4429, includes/class-freemius.php:4923, includes/class-freemius.php:6182, includes/class-freemius.php:13357, includes/class-freemius.php:14075, includes/class-freemius.php:17526, includes/class-freemius.php:17631, includes/class-freemius.php:17806, includes/class-freemius.php:20040, includes/class-freemius.php:20398, includes/class-freemius.php:20408, includes/class-freemius.php:21079, includes/class-freemius.php:21985, includes/class-freemius.php:22118, includes/class-freemius.php:22274, templates/add-ons.php:57
152
  msgctxt "exclamation"
153
  msgid "Oops"
154
  msgstr ""
155
 
156
+ #: includes/class-freemius.php:4498
157
  msgid "Thank for giving us the chance to fix it! A message was just sent to our technical staff. We will get back to you as soon as we have an update to %s. Appreciate your patience."
158
  msgstr ""
159
 
160
+ #: includes/class-freemius.php:4920
161
  msgctxt "addonX cannot run without pluginY"
162
  msgid "%s cannot run without %s."
163
  msgstr ""
164
 
165
+ #: includes/class-freemius.php:4921
166
  msgctxt "addonX cannot run..."
167
  msgid "%s cannot run without the plugin."
168
  msgstr ""
169
 
170
+ #: includes/class-freemius.php:5120, includes/class-freemius.php:5145, includes/class-freemius.php:21150
171
  msgid "Unexpected API error. Please contact the %s's author with the following error."
172
  msgstr ""
173
 
174
+ #: includes/class-freemius.php:5848
175
  msgid "Premium %s version was successfully activated."
176
  msgstr ""
177
 
178
+ #: includes/class-freemius.php:5860, includes/class-freemius.php:7762
179
  msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
180
  msgid "W00t"
181
  msgstr ""
182
 
183
+ #: includes/class-freemius.php:5875
184
  msgid "You have a %s license."
185
  msgstr ""
186
 
187
+ #: includes/class-freemius.php:5879, includes/class-freemius.php:16925, includes/class-freemius.php:16936, includes/class-freemius.php:20309, includes/class-freemius.php:20659, includes/class-freemius.php:20728, includes/class-freemius.php:20900
188
  msgctxt "interjection expressing joy or exuberance"
189
  msgid "Yee-haw"
190
  msgstr ""
191
 
192
+ #: includes/class-freemius.php:6165
193
  msgid "%s free trial was successfully cancelled. Since the add-on is premium only it was automatically deactivated. If you like to use it in the future, you'll have to purchase a license."
194
  msgstr ""
195
 
196
+ #: includes/class-freemius.php:6169
197
  msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
198
  msgstr ""
199
 
200
+ #: includes/class-freemius.php:6178, templates/add-ons.php:186, templates/account/partials/addon.php:381
201
  msgid "More information about %s"
202
  msgstr ""
203
 
204
+ #: includes/class-freemius.php:6179
205
  msgid "Purchase License"
206
  msgstr ""
207
 
208
+ #: includes/class-freemius.php:7118, templates/connect.php:171
209
  msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
210
  msgstr ""
211
 
212
+ #: includes/class-freemius.php:7122
213
  msgid "start the trial"
214
  msgstr ""
215
 
216
+ #: includes/class-freemius.php:7123, templates/connect.php:175
217
  msgid "complete the install"
218
  msgstr ""
219
 
220
+ #: includes/class-freemius.php:7241
221
  msgid "You are just one step away - %s"
222
  msgstr ""
223
 
224
+ #: includes/class-freemius.php:7244
225
  msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
226
  msgid "Complete \"%s\" Activation Now"
227
  msgstr ""
228
 
229
+ #: includes/class-freemius.php:7322
230
  msgid "We made a few tweaks to the %s, %s"
231
  msgstr ""
232
 
233
+ #: includes/class-freemius.php:7326
234
  msgid "Opt in to make \"%s\" better!"
235
  msgstr ""
236
 
237
+ #: includes/class-freemius.php:7761
238
  msgid "The upgrade of %s was successfully completed."
239
  msgstr ""
240
 
241
+ #: includes/class-freemius.php:10243, includes/class-fs-plugin-updater.php:1099, includes/class-fs-plugin-updater.php:1294, includes/class-fs-plugin-updater.php:1301, templates/auto-installation.php:32
242
  msgid "Add-On"
243
  msgstr ""
244
 
245
+ #: includes/class-freemius.php:10245, templates/account.php:392, templates/account.php:400, templates/debug.php:358, templates/debug.php:549
246
  msgid "Plugin"
247
  msgstr ""
248
 
249
+ #: includes/class-freemius.php:10246, templates/account.php:393, templates/account.php:401, templates/debug.php:358, templates/debug.php:549, templates/forms/deactivation/form.php:71
250
  msgid "Theme"
251
  msgstr ""
252
 
253
+ #: includes/class-freemius.php:13176
254
+ msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
255
+ msgstr ""
256
+
257
+ #: includes/class-freemius.php:13190
258
+ msgid "Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s."
259
+ msgstr ""
260
+
261
+ #: includes/class-freemius.php:13195
262
+ msgid "User Dashboard"
263
+ msgstr ""
264
+
265
+ #: includes/class-freemius.php:13196
266
+ msgid "revert it now"
267
+ msgstr ""
268
+
269
+ #: includes/class-freemius.php:13255
270
  msgid "An unknown error has occurred while trying to set the user's beta mode."
271
  msgstr ""
272
 
273
+ #: includes/class-freemius.php:13328
274
  msgid "Invalid new user ID or email address."
275
  msgstr ""
276
 
277
+ #: includes/class-freemius.php:13358, includes/class-freemius.php:22229
278
  msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
279
  msgstr ""
280
 
281
+ #: includes/class-freemius.php:13359, includes/class-freemius.php:22230
282
  msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
283
  msgstr ""
284
 
285
+ #: includes/class-freemius.php:13366, includes/class-freemius.php:22237
286
  msgid "Change Ownership"
287
  msgstr ""
288
 
289
+ #: includes/class-freemius.php:13942
290
  msgid "Invalid site details collection."
291
  msgstr ""
292
 
293
+ #: includes/class-freemius.php:14062
294
  msgid "We couldn't find your email address in the system, are you sure it's the right address?"
295
  msgstr ""
296
 
297
+ #: includes/class-freemius.php:14064
298
  msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
299
  msgstr ""
300
 
301
+ #: includes/class-freemius.php:14338
302
  msgid "Account is pending activation."
303
  msgstr ""
304
 
305
+ #: includes/class-freemius.php:14450, templates/forms/premium-versions-upgrade-handler.php:47
306
  msgid "Buy a license now"
307
  msgstr ""
308
 
309
+ #: includes/class-freemius.php:14462, templates/forms/premium-versions-upgrade-handler.php:46
310
  msgid "Renew your license now"
311
  msgstr ""
312
 
313
+ #: includes/class-freemius.php:14466
314
  msgid "%s to access version %s security & feature updates, and support."
315
  msgstr ""
316
 
317
+ #: includes/class-freemius.php:16907
318
  msgid "%s activation was successfully completed."
319
  msgstr ""
320
 
321
+ #: includes/class-freemius.php:16921
322
  msgid "Your account was successfully activated with the %s plan."
323
  msgstr ""
324
 
325
+ #: includes/class-freemius.php:16932, includes/class-freemius.php:20724
326
  msgid "Your trial has been successfully started."
327
  msgstr ""
328
 
329
+ #: includes/class-freemius.php:17524, includes/class-freemius.php:17629, includes/class-freemius.php:17804
330
  msgid "Couldn't activate %s."
331
  msgstr ""
332
 
333
+ #: includes/class-freemius.php:17525, includes/class-freemius.php:17630, includes/class-freemius.php:17805
334
  msgid "Please contact us with the following message:"
335
  msgstr ""
336
 
337
+ #: includes/class-freemius.php:17626, templates/forms/data-debug-mode.php:162
338
  msgid "An unknown error has occurred."
339
  msgstr ""
340
 
341
+ #: includes/class-freemius.php:18162, includes/class-freemius.php:23310
342
  msgid "Upgrade"
343
  msgstr ""
344
 
345
+ #: includes/class-freemius.php:18168
346
  msgid "Start Trial"
347
  msgstr ""
348
 
349
+ #: includes/class-freemius.php:18170
350
  msgid "Pricing"
351
  msgstr ""
352
 
353
+ #: includes/class-freemius.php:18250, includes/class-freemius.php:18252
354
  msgid "Affiliation"
355
  msgstr ""
356
 
357
+ #: includes/class-freemius.php:18280, includes/class-freemius.php:18282, templates/account.php:240, templates/debug.php:324
358
  msgid "Account"
359
  msgstr ""
360
 
361
+ #: includes/class-freemius.php:18296, includes/class-freemius.php:18298, includes/customizer/class-fs-customizer-support-section.php:60
362
  msgid "Contact Us"
363
  msgstr ""
364
 
365
+ #: includes/class-freemius.php:18309, includes/class-freemius.php:18311, includes/class-freemius.php:23324, templates/account.php:119, templates/account/partials/addon.php:44
366
  msgid "Add-Ons"
367
  msgstr ""
368
 
369
+ #: includes/class-freemius.php:18345
370
  msgctxt "ASCII arrow left icon"
371
  msgid "&#x2190;"
372
  msgstr ""
373
 
374
+ #: includes/class-freemius.php:18345
375
  msgctxt "ASCII arrow right icon"
376
  msgid "&#x27a4;"
377
  msgstr ""
378
 
379
+ #: includes/class-freemius.php:18347, templates/pricing.php:109
380
  msgctxt "noun"
381
  msgid "Pricing"
382
  msgstr ""
383
 
384
+ #: includes/class-freemius.php:18560, includes/customizer/class-fs-customizer-support-section.php:67
385
  msgid "Support Forum"
386
  msgstr ""
387
 
388
+ #: includes/class-freemius.php:19534
389
  msgid "Your email has been successfully verified - you are AWESOME!"
390
  msgstr ""
391
 
392
+ #: includes/class-freemius.php:19535
393
  msgctxt "a positive response"
394
  msgid "Right on"
395
  msgstr ""
396
 
397
+ #: includes/class-freemius.php:20041
398
  msgid "seems like the key you entered doesn't match our records."
399
  msgstr ""
400
 
401
+ #: includes/class-freemius.php:20065
402
  msgid "Debug mode was successfully enabled and will be automatically disabled in 60 min. You can also disable it earlier by clicking the \"Stop Debug\" link."
403
  msgstr ""
404
 
405
+ #: includes/class-freemius.php:20300
406
  msgid "Your %s Add-on plan was successfully upgraded."
407
  msgstr ""
408
 
409
+ #: includes/class-freemius.php:20302
410
  msgid "%s Add-on was successfully purchased."
411
  msgstr ""
412
 
413
+ #: includes/class-freemius.php:20305
414
  msgid "Download the latest version"
415
  msgstr ""
416
 
417
+ #: includes/class-freemius.php:20391
418
  msgid "Your server is blocking the access to Freemius' API, which is crucial for %1$s synchronization. Please contact your host to whitelist %2$s"
419
  msgstr ""
420
 
421
+ #: includes/class-freemius.php:20397, includes/class-freemius.php:20407, includes/class-freemius.php:20859, includes/class-freemius.php:20948
422
  msgid "Error received from the server:"
423
  msgstr ""
424
 
425
+ #: includes/class-freemius.php:20407
426
  msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
427
  msgstr ""
428
 
429
+ #: includes/class-freemius.php:20621, includes/class-freemius.php:20864, includes/class-freemius.php:20919, includes/class-freemius.php:21026
430
  msgctxt "something somebody says when they are thinking about what you have just said."
431
  msgid "Hmm"
432
  msgstr ""
433
 
434
+ #: includes/class-freemius.php:20634
435
  msgid "It looks like you are still on the %s plan. If you did upgrade or change your plan, it's probably an issue on our side - sorry."
436
  msgstr ""
437
 
438
+ #: includes/class-freemius.php:20635, templates/account.php:121, templates/add-ons.php:250, templates/account/partials/addon.php:46
439
  msgctxt "trial period"
440
  msgid "Trial"
441
  msgstr ""
442
 
443
+ #: includes/class-freemius.php:20640
444
  msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
445
  msgstr ""
446
 
447
+ #: includes/class-freemius.php:20644, includes/class-freemius.php:20703
448
  msgid "Please contact us here"
449
  msgstr ""
450
 
451
+ #: includes/class-freemius.php:20655
452
  msgid "Your plan was successfully activated."
453
  msgstr ""
454
 
455
+ #: includes/class-freemius.php:20656
456
  msgid "Your plan was successfully upgraded."
457
  msgstr ""
458
 
459
+ #: includes/class-freemius.php:20673
460
  msgid "Your plan was successfully changed to %s."
461
  msgstr ""
462
 
463
+ #: includes/class-freemius.php:20689
464
  msgid "Your license has expired. You can still continue using the free %s forever."
465
  msgstr ""
466
 
467
+ #: includes/class-freemius.php:20691
468
  msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
469
  msgstr ""
470
 
471
+ #: includes/class-freemius.php:20699
472
  msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
473
  msgstr ""
474
 
475
+ #: includes/class-freemius.php:20712
476
  msgid "Your license has expired. You can still continue using all the %s features, but you'll need to renew your license to continue getting updates and support."
477
  msgstr ""
478
 
479
+ #: includes/class-freemius.php:20738
480
  msgid "Your free trial has expired. You can still continue using all our free features."
481
  msgstr ""
482
 
483
+ #: includes/class-freemius.php:20740
484
  msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
485
  msgstr ""
486
 
487
+ #: includes/class-freemius.php:20855
488
  msgid "It looks like the license could not be activated."
489
  msgstr ""
490
 
491
+ #: includes/class-freemius.php:20897
492
  msgid "Your license was successfully activated."
493
  msgstr ""
494
 
495
+ #: includes/class-freemius.php:20923
496
  msgid "It looks like your site currently doesn't have an active license."
497
  msgstr ""
498
 
499
+ #: includes/class-freemius.php:20947
500
  msgid "It looks like the license deactivation failed."
501
  msgstr ""
502
 
503
+ #: includes/class-freemius.php:20976
504
  msgid "Your %s license was successfully deactivated."
505
  msgstr ""
506
 
507
+ #: includes/class-freemius.php:20977
508
  msgid "Your license was successfully deactivated, you are back to the %s plan."
509
  msgstr ""
510
 
511
+ #: includes/class-freemius.php:20980
512
  msgid "O.K"
513
  msgstr ""
514
 
515
+ #: includes/class-freemius.php:21033
516
  msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
517
  msgstr ""
518
 
519
+ #: includes/class-freemius.php:21042
520
  msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
521
  msgstr ""
522
 
523
+ #: includes/class-freemius.php:21084
524
  msgid "You are already running the %s in a trial mode."
525
  msgstr ""
526
 
527
+ #: includes/class-freemius.php:21095
528
  msgid "You already utilized a trial before."
529
  msgstr ""
530
 
531
+ #: includes/class-freemius.php:21109
532
  msgid "Plan %s do not exist, therefore, can't start a trial."
533
  msgstr ""
534
 
535
+ #: includes/class-freemius.php:21120
536
  msgid "Plan %s does not support a trial period."
537
  msgstr ""
538
 
539
+ #: includes/class-freemius.php:21131
540
  msgid "None of the %s's plans supports a trial period."
541
  msgstr ""
542
 
543
+ #: includes/class-freemius.php:21181
544
  msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
545
  msgstr ""
546
 
547
+ #: includes/class-freemius.php:21217
548
  msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
549
  msgstr ""
550
 
551
+ #: includes/class-freemius.php:21236
552
  msgid "Your %s free trial was successfully cancelled."
553
  msgstr ""
554
 
555
+ #: includes/class-freemius.php:21552
556
  msgid "Version %s was released."
557
  msgstr ""
558
 
559
+ #: includes/class-freemius.php:21552
560
  msgid "Please download %s."
561
  msgstr ""
562
 
563
+ #: includes/class-freemius.php:21559
564
  msgid "the latest %s version here"
565
  msgstr ""
566
 
567
+ #: includes/class-freemius.php:21564
568
  msgid "New"
569
  msgstr ""
570
 
571
+ #: includes/class-freemius.php:21569
572
  msgid "Seems like you got the latest release."
573
  msgstr ""
574
 
575
+ #: includes/class-freemius.php:21570
576
  msgid "You are all good!"
577
  msgstr ""
578
 
579
+ #: includes/class-freemius.php:21873
580
  msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
581
  msgstr ""
582
 
583
+ #: includes/class-freemius.php:22013
584
  msgid "Site successfully opted in."
585
  msgstr ""
586
 
587
+ #: includes/class-freemius.php:22014, includes/class-freemius.php:23020
588
  msgid "Awesome"
589
  msgstr ""
590
 
591
+ #: includes/class-freemius.php:22030, templates/forms/optout.php:41
592
  msgid "We appreciate your help in making the %s better by letting us track some usage data."
593
  msgstr ""
594
 
595
+ #: includes/class-freemius.php:22031
596
  msgid "Thank you!"
597
  msgstr ""
598
 
599
+ #: includes/class-freemius.php:22038
600
  msgid "We will no longer be sending any usage data of %s on %s to %s."
601
  msgstr ""
602
 
603
+ #: includes/class-freemius.php:22196
604
  msgid "Please check your mailbox, you should receive an email via %s to confirm the ownership change. From security reasons, you must confirm the change within the next 15 min. If you cannot find the email, please check your spam folder."
605
  msgstr ""
606
 
607
+ #: includes/class-freemius.php:22202
608
  msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
609
  msgstr ""
610
 
611
+ #: includes/class-freemius.php:22207
612
  msgid "%s is the new owner of the account."
613
  msgstr ""
614
 
615
+ #: includes/class-freemius.php:22209
616
  msgctxt "as congratulations"
617
  msgid "Congrats"
618
  msgstr ""
619
 
620
+ #: includes/class-freemius.php:22245
621
  msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
622
  msgstr ""
623
 
624
+ #: includes/class-freemius.php:22257
625
  msgid "Please provide your full name."
626
  msgstr ""
627
 
628
+ #: includes/class-freemius.php:22262
629
  msgid "Your name was successfully updated."
630
  msgstr ""
631
 
632
+ #: includes/class-freemius.php:22323
633
  msgid "You have successfully updated your %s."
634
  msgstr ""
635
 
636
+ #: includes/class-freemius.php:22382
637
+ msgid "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin."
638
+ msgstr ""
639
+
640
+ #: includes/class-freemius.php:22385
641
+ msgid "Click here"
642
+ msgstr ""
643
+
644
+ #: includes/class-freemius.php:22483
645
  msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
646
  msgstr ""
647
 
648
+ #: includes/class-freemius.php:22484
649
  msgctxt "advance notice of something that will need attention."
650
  msgid "Heads up"
651
  msgstr ""
652
 
653
+ #: includes/class-freemius.php:23060
654
  msgctxt "exclamation"
655
  msgid "Hey"
656
  msgstr ""
657
 
658
+ #: includes/class-freemius.php:23060
659
  msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
660
  msgstr ""
661
 
662
+ #: includes/class-freemius.php:23068
663
  msgid "No commitment for %s days - cancel anytime!"
664
  msgstr ""
665
 
666
+ #: includes/class-freemius.php:23069
667
  msgid "No credit card required"
668
  msgstr ""
669
 
670
+ #: includes/class-freemius.php:23076, templates/forms/trial-start.php:53
671
  msgctxt "call to action"
672
  msgid "Start free trial"
673
  msgstr ""
674
 
675
+ #: includes/class-freemius.php:23153
676
  msgid "Hey there, did you know that %s has an affiliate program? If you like the %s you can become our ambassador and earn some cash!"
677
  msgstr ""
678
 
679
+ #: includes/class-freemius.php:23162
680
  msgid "Learn more"
681
  msgstr ""
682
 
683
+ #: includes/class-freemius.php:23348, templates/account.php:556, templates/account.php:706, templates/connect.php:179, templates/connect.php:456, templates/forms/license-activation.php:27, templates/account/partials/addon.php:321
684
  msgid "Activate License"
685
  msgstr ""
686
 
687
+ #: includes/class-freemius.php:23349, templates/account.php:650, templates/account.php:705, templates/account/partials/addon.php:322, templates/account/partials/site.php:271
688
  msgid "Change License"
689
  msgstr ""
690
 
691
+ #: includes/class-freemius.php:23462, templates/account/partials/site.php:169
692
  msgid "Opt Out"
693
  msgstr ""
694
 
695
+ #: includes/class-freemius.php:23464, includes/class-freemius.php:23470, templates/account/partials/site.php:49, templates/account/partials/site.php:169
696
  msgid "Opt In"
697
  msgstr ""
698
 
699
+ #: includes/class-freemius.php:23700
700
  msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
701
  msgstr ""
702
 
703
+ #: includes/class-freemius.php:23708
704
  msgid "Activate %s features"
705
  msgstr ""
706
 
707
+ #: includes/class-freemius.php:23721
708
  msgid "Please follow these steps to complete the upgrade"
709
  msgstr ""
710
 
711
+ #: includes/class-freemius.php:23725
712
  msgid "Download the latest %s version"
713
  msgstr ""
714
 
715
+ #: includes/class-freemius.php:23729
716
  msgid "Upload and activate the downloaded version"
717
  msgstr ""
718
 
719
+ #: includes/class-freemius.php:23731
720
  msgid "How to upload and activate?"
721
  msgstr ""
722
 
723
+ #: includes/class-freemius.php:23865
724
  msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
725
  msgstr ""
726
 
727
+ #: includes/class-freemius.php:24034
728
  msgid "Auto installation only works for opted-in users."
729
  msgstr ""
730
 
731
+ #: includes/class-freemius.php:24044, includes/class-freemius.php:24077, includes/class-fs-plugin-updater.php:1273, includes/class-fs-plugin-updater.php:1287
732
  msgid "Invalid module ID."
733
  msgstr ""
734
 
735
+ #: includes/class-freemius.php:24053, includes/class-fs-plugin-updater.php:1309
736
  msgid "Premium version already active."
737
  msgstr ""
738
 
739
+ #: includes/class-freemius.php:24060
740
  msgid "You do not have a valid license to access the premium version."
741
  msgstr ""
742
 
743
+ #: includes/class-freemius.php:24067
744
  msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
745
  msgstr ""
746
 
747
+ #: includes/class-freemius.php:24085, includes/class-fs-plugin-updater.php:1308
748
  msgid "Premium add-on version already installed."
749
  msgstr ""
750
 
751
+ #: includes/class-freemius.php:24435
752
  msgid "View paid features"
753
  msgstr ""
754
 
755
+ #: includes/class-freemius.php:24757
756
  msgid "Thank you so much for using %s and its add-ons!"
757
  msgstr ""
758
 
759
+ #: includes/class-freemius.php:24758
760
  msgid "Thank you so much for using %s!"
761
  msgstr ""
762
 
763
+ #: includes/class-freemius.php:24764
764
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
765
  msgstr ""
766
 
767
+ #: includes/class-freemius.php:24768
768
  msgid "Thank you so much for using our products!"
769
  msgstr ""
770
 
771
+ #: includes/class-freemius.php:24769
772
  msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
773
  msgstr ""
774
 
775
+ #: includes/class-freemius.php:24788
776
  msgid "%s and its add-ons"
777
  msgstr ""
778
 
779
+ #: includes/class-freemius.php:24797
780
  msgid "Products"
781
  msgstr ""
782
 
783
+ #: includes/class-freemius.php:24804, templates/connect.php:280
784
  msgid "Yes"
785
  msgstr ""
786
 
787
+ #: includes/class-freemius.php:24805, templates/connect.php:281
788
  msgid "send me security & feature updates, educational content and offers."
789
  msgstr ""
790
 
791
+ #: includes/class-freemius.php:24806, templates/connect.php:286
792
  msgid "No"
793
  msgstr ""
794
 
795
+ #: includes/class-freemius.php:24808, templates/connect.php:288
796
  msgid "do %sNOT%s send me security & feature updates, educational content and offers."
797
  msgstr ""
798
 
799
+ #: includes/class-freemius.php:24818
800
  msgid "Due to the new %sEU General Data Protection Regulation (GDPR)%s compliance requirements it is required that you provide your explicit consent, again, confirming that you are onboard :-)"
801
  msgstr ""
802
 
803
+ #: includes/class-freemius.php:24820, templates/connect.php:295
804
  msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
805
  msgstr ""
806
 
807
+ #: includes/class-freemius.php:25102
808
  msgid "License key is empty."
809
  msgstr ""
810
 
832
  msgid "Important Upgrade Notice:"
833
  msgstr ""
834
 
835
+ #: includes/class-fs-plugin-updater.php:1338
836
  msgid "Installing plugin: %s"
837
  msgstr ""
838
 
839
+ #: includes/class-fs-plugin-updater.php:1379
840
  msgid "Unable to connect to the filesystem. Please confirm your credentials."
841
  msgstr ""
842
 
843
+ #: includes/class-fs-plugin-updater.php:1561
844
  msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
845
  msgstr ""
846
 
847
+ #: includes/fs-plugin-info-dialog.php:541
848
  msgid "Purchase More"
849
  msgstr ""
850
 
851
+ #: includes/fs-plugin-info-dialog.php:542, templates/account/partials/addon.php:385
852
  msgctxt "verb"
853
  msgid "Purchase"
854
  msgstr ""
855
 
856
+ #: includes/fs-plugin-info-dialog.php:546
857
  msgid "Start my free %s"
858
  msgstr ""
859
 
860
+ #: includes/fs-plugin-info-dialog.php:744
861
  msgid "Install Free Version Update Now"
862
  msgstr ""
863
 
864
+ #: includes/fs-plugin-info-dialog.php:745, templates/account.php:639
865
  msgid "Install Update Now"
866
  msgstr ""
867
 
868
+ #: includes/fs-plugin-info-dialog.php:754
869
  msgid "Install Free Version Now"
870
  msgstr ""
871
 
872
+ #: includes/fs-plugin-info-dialog.php:755, templates/add-ons.php:323, templates/auto-installation.php:111, templates/account/partials/addon.php:365, templates/account/partials/addon.php:418
873
  msgid "Install Now"
874
  msgstr ""
875
 
876
+ #: includes/fs-plugin-info-dialog.php:771
877
  msgctxt "as download latest version"
878
  msgid "Download Latest Free Version"
879
  msgstr ""
880
 
881
+ #: includes/fs-plugin-info-dialog.php:772, templates/account.php:99, templates/add-ons.php:37, templates/account/partials/addon.php:25
882
  msgctxt "as download latest version"
883
  msgid "Download Latest"
884
  msgstr ""
885
 
886
+ #: includes/fs-plugin-info-dialog.php:787, templates/add-ons.php:329, templates/account/partials/addon.php:356, templates/account/partials/addon.php:412
887
  msgid "Activate this add-on"
888
  msgstr ""
889
 
890
+ #: includes/fs-plugin-info-dialog.php:789, templates/connect.php:453
891
  msgid "Activate Free Version"
892
  msgstr ""
893
 
894
+ #: includes/fs-plugin-info-dialog.php:790, templates/account.php:123, templates/add-ons.php:330, templates/account/partials/addon.php:48
895
  msgid "Activate"
896
  msgstr ""
897
 
898
+ #: includes/fs-plugin-info-dialog.php:1002
899
  msgctxt "Plugin installer section title"
900
  msgid "Description"
901
  msgstr ""
902
 
903
+ #: includes/fs-plugin-info-dialog.php:1003
904
  msgctxt "Plugin installer section title"
905
  msgid "Installation"
906
  msgstr ""
907
 
908
+ #: includes/fs-plugin-info-dialog.php:1004
909
  msgctxt "Plugin installer section title"
910
  msgid "FAQ"
911
  msgstr ""
912
 
913
+ #: includes/fs-plugin-info-dialog.php:1005, templates/plugin-info/description.php:55
914
  msgid "Screenshots"
915
  msgstr ""
916
 
917
+ #: includes/fs-plugin-info-dialog.php:1006
918
  msgctxt "Plugin installer section title"
919
  msgid "Changelog"
920
  msgstr ""
921
 
922
+ #: includes/fs-plugin-info-dialog.php:1007
923
  msgctxt "Plugin installer section title"
924
  msgid "Reviews"
925
  msgstr ""
926
 
927
+ #: includes/fs-plugin-info-dialog.php:1008
928
  msgctxt "Plugin installer section title"
929
  msgid "Other Notes"
930
  msgstr ""
931
 
932
+ #: includes/fs-plugin-info-dialog.php:1023
933
  msgctxt "Plugin installer section title"
934
  msgid "Features & Pricing"
935
  msgstr ""
936
 
937
+ #: includes/fs-plugin-info-dialog.php:1033
938
  msgid "Plugin Install"
939
  msgstr ""
940
 
941
+ #: includes/fs-plugin-info-dialog.php:1105
942
  msgctxt "e.g. Professional Plan"
943
  msgid "%s Plan"
944
  msgstr ""
945
 
946
+ #: includes/fs-plugin-info-dialog.php:1131
947
  msgctxt "e.g. the best product"
948
  msgid "Best"
949
  msgstr ""
950
 
951
+ #: includes/fs-plugin-info-dialog.php:1137, includes/fs-plugin-info-dialog.php:1157
952
  msgctxt "as every month"
953
  msgid "Monthly"
954
  msgstr ""
955
 
956
+ #: includes/fs-plugin-info-dialog.php:1140
957
  msgctxt "as once a year"
958
  msgid "Annual"
959
  msgstr ""
960
 
961
+ #: includes/fs-plugin-info-dialog.php:1143
962
  msgid "Lifetime"
963
  msgstr ""
964
 
965
+ #: includes/fs-plugin-info-dialog.php:1157, includes/fs-plugin-info-dialog.php:1159, includes/fs-plugin-info-dialog.php:1161
966
  msgctxt "e.g. billed monthly"
967
  msgid "Billed %s"
968
  msgstr ""
969
 
970
+ #: includes/fs-plugin-info-dialog.php:1159
971
  msgctxt "as once a year"
972
  msgid "Annually"
973
  msgstr ""
974
 
975
+ #: includes/fs-plugin-info-dialog.php:1161
976
  msgctxt "as once a year"
977
  msgid "Once"
978
  msgstr ""
979
 
980
+ #: includes/fs-plugin-info-dialog.php:1167
981
  msgid "Single Site License"
982
  msgstr ""
983
 
984
+ #: includes/fs-plugin-info-dialog.php:1169
985
  msgid "Unlimited Licenses"
986
  msgstr ""
987
 
988
+ #: includes/fs-plugin-info-dialog.php:1171
989
  msgid "Up to %s Sites"
990
  msgstr ""
991
 
992
+ #: includes/fs-plugin-info-dialog.php:1181, templates/plugin-info/features.php:82
993
  msgctxt "as monthly period"
994
  msgid "mo"
995
  msgstr ""
996
 
997
+ #: includes/fs-plugin-info-dialog.php:1188, templates/plugin-info/features.php:80
998
  msgctxt "as annual period"
999
  msgid "year"
1000
  msgstr ""
1001
 
1002
+ #: includes/fs-plugin-info-dialog.php:1242
1003
  msgctxt "noun"
1004
  msgid "Price"
1005
  msgstr ""
1006
 
1007
+ #: includes/fs-plugin-info-dialog.php:1290
1008
  msgid "Save %s"
1009
  msgstr ""
1010
 
1011
+ #: includes/fs-plugin-info-dialog.php:1300
1012
  msgid "No commitment for %s - cancel anytime"
1013
  msgstr ""
1014
 
1015
+ #: includes/fs-plugin-info-dialog.php:1303
1016
  msgid "After your free %s, pay as little as %s"
1017
  msgstr ""
1018
 
1019
+ #: includes/fs-plugin-info-dialog.php:1314
1020
  msgid "Details"
1021
  msgstr ""
1022
 
1023
+ #: includes/fs-plugin-info-dialog.php:1318, templates/account.php:110, templates/debug.php:201, templates/debug.php:238, templates/debug.php:455, templates/account/partials/addon.php:36
1024
  msgctxt "product version"
1025
  msgid "Version"
1026
  msgstr ""
1027
 
1028
+ #: includes/fs-plugin-info-dialog.php:1325
1029
  msgctxt "as the plugin author"
1030
  msgid "Author"
1031
  msgstr ""
1032
 
1033
+ #: includes/fs-plugin-info-dialog.php:1332
1034
  msgid "Last Updated"
1035
  msgstr ""
1036
 
1037
+ #: includes/fs-plugin-info-dialog.php:1337, templates/account.php:525
1038
  msgctxt "x-ago"
1039
  msgid "%s ago"
1040
  msgstr ""
1041
 
1042
+ #: includes/fs-plugin-info-dialog.php:1346
1043
  msgid "Requires WordPress Version"
1044
  msgstr ""
1045
 
1046
+ #: includes/fs-plugin-info-dialog.php:1347
1047
  msgid "%s or higher"
1048
  msgstr ""
1049
 
1050
+ #: includes/fs-plugin-info-dialog.php:1354
1051
  msgid "Compatible up to"
1052
  msgstr ""
1053
 
1054
+ #: includes/fs-plugin-info-dialog.php:1362
1055
  msgid "Downloaded"
1056
  msgstr ""
1057
 
1058
+ #: includes/fs-plugin-info-dialog.php:1366
1059
  msgid "%s time"
1060
  msgstr ""
1061
 
1062
+ #: includes/fs-plugin-info-dialog.php:1368
1063
  msgid "%s times"
1064
  msgstr ""
1065
 
1066
+ #: includes/fs-plugin-info-dialog.php:1379
1067
  msgid "WordPress.org Plugin Page"
1068
  msgstr ""
1069
 
1070
+ #: includes/fs-plugin-info-dialog.php:1388
1071
  msgid "Plugin Homepage"
1072
  msgstr ""
1073
 
1074
+ #: includes/fs-plugin-info-dialog.php:1397, includes/fs-plugin-info-dialog.php:1481
1075
  msgid "Donate to this plugin"
1076
  msgstr ""
1077
 
1078
+ #: includes/fs-plugin-info-dialog.php:1404
1079
  msgid "Average Rating"
1080
  msgstr ""
1081
 
1082
+ #: includes/fs-plugin-info-dialog.php:1411
1083
  msgid "based on %s"
1084
  msgstr ""
1085
 
1086
+ #: includes/fs-plugin-info-dialog.php:1415
1087
  msgid "%s rating"
1088
  msgstr ""
1089
 
1090
+ #: includes/fs-plugin-info-dialog.php:1417
1091
  msgid "%s ratings"
1092
  msgstr ""
1093
 
1094
+ #: includes/fs-plugin-info-dialog.php:1432
1095
  msgid "%s star"
1096
  msgstr ""
1097
 
1098
+ #: includes/fs-plugin-info-dialog.php:1434
1099
  msgid "%s stars"
1100
  msgstr ""
1101
 
1102
+ #: includes/fs-plugin-info-dialog.php:1446
1103
  msgid "Click to see reviews that provided a rating of %s"
1104
  msgstr ""
1105
 
1106
+ #: includes/fs-plugin-info-dialog.php:1459
1107
  msgid "Contributors"
1108
  msgstr ""
1109
 
1110
+ #: includes/fs-plugin-info-dialog.php:1489, includes/fs-plugin-info-dialog.php:1491
1111
  msgid "Warning"
1112
  msgstr ""
1113
 
1114
+ #: includes/fs-plugin-info-dialog.php:1489
1115
  msgid "This plugin has not been tested with your current version of WordPress."
1116
  msgstr ""
1117
 
1118
+ #: includes/fs-plugin-info-dialog.php:1491
1119
  msgid "This plugin has not been marked as compatible with your version of WordPress."
1120
  msgstr ""
1121
 
1122
+ #: includes/fs-plugin-info-dialog.php:1510
1123
  msgid "Paid add-on must be deployed to Freemius."
1124
  msgstr ""
1125
 
1126
+ #: includes/fs-plugin-info-dialog.php:1511
1127
  msgid "Add-on must be deployed to WordPress.org or Freemius."
1128
  msgstr ""
1129
 
1130
+ #: includes/fs-plugin-info-dialog.php:1532
1131
  msgid "Newer Version (%s) Installed"
1132
  msgstr ""
1133
 
1134
+ #: includes/fs-plugin-info-dialog.php:1533
1135
  msgid "Newer Free Version (%s) Installed"
1136
  msgstr ""
1137
 
1138
+ #: includes/fs-plugin-info-dialog.php:1540
1139
  msgid "Latest Version Installed"
1140
  msgstr ""
1141
 
1142
+ #: includes/fs-plugin-info-dialog.php:1541
1143
  msgid "Latest Free Version Installed"
1144
  msgstr ""
1145
 
1223
  msgid "Bundle Plan"
1224
  msgstr ""
1225
 
1226
+ #: templates/account.php:248
1227
  msgid "Free Trial"
1228
  msgstr ""
1229
 
1230
+ #: templates/account.php:259
1231
  msgid "Account Details"
1232
  msgstr ""
1233
 
1234
+ #: templates/account.php:266, templates/forms/data-debug-mode.php:33
1235
  msgid "Start Debug"
1236
  msgstr ""
1237
 
1238
+ #: templates/account.php:268
1239
  msgid "Stop Debug"
1240
  msgstr ""
1241
 
1242
+ #: templates/account.php:275
1243
  msgid "Billing & Invoices"
1244
  msgstr ""
1245
 
1246
+ #: templates/account.php:286
1247
  msgid "Deleting the account will automatically deactivate your %s plan license so you can use it on other sites. If you want to terminate the recurring payments as well, click the \"Cancel\" button, and first \"Downgrade\" your account. Are you sure you would like to continue with the deletion?"
1248
  msgstr ""
1249
 
1250
+ #: templates/account.php:288
1251
  msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
1252
  msgstr ""
1253
 
1254
+ #: templates/account.php:291
1255
  msgid "Delete Account"
1256
  msgstr ""
1257
 
1258
+ #: templates/account.php:303, templates/account/partials/addon.php:231, templates/account/partials/deactivate-license-button.php:35
1259
  msgid "Deactivate License"
1260
  msgstr ""
1261
 
1262
+ #: templates/account.php:326, templates/forms/subscription-cancellation.php:125
1263
  msgid "Are you sure you want to proceed?"
1264
  msgstr ""
1265
 
1266
+ #: templates/account.php:326, templates/account/partials/addon.php:255
1267
  msgid "Cancel Subscription"
1268
  msgstr ""
1269
 
1270
+ #: templates/account.php:355, templates/account/partials/addon.php:340
1271
  msgctxt "as synchronize"
1272
  msgid "Sync"
1273
  msgstr ""
1274
 
1275
+ #: templates/account.php:370, templates/debug.php:505
1276
  msgid "Name"
1277
  msgstr ""
1278
 
1279
+ #: templates/account.php:376, templates/debug.php:506
1280
  msgid "Email"
1281
  msgstr ""
1282
 
1283
+ #: templates/account.php:383, templates/debug.php:369, templates/debug.php:555
1284
  msgid "User ID"
1285
  msgstr ""
1286
 
1287
+ #: templates/account.php:401, templates/account.php:719, templates/account.php:752, templates/debug.php:236, templates/debug.php:363, templates/debug.php:452, templates/debug.php:504, templates/debug.php:553, templates/debug.php:632, templates/account/payments.php:35, templates/debug/logger.php:21
1288
  msgid "ID"
1289
  msgstr ""
1290
 
1291
+ #: templates/account.php:408
1292
  msgid "Site ID"
1293
  msgstr ""
1294
 
1295
+ #: templates/account.php:411
1296
  msgid "No ID"
1297
  msgstr ""
1298
 
1299
+ #: templates/account.php:416, templates/debug.php:243, templates/debug.php:372, templates/debug.php:456, templates/debug.php:508, templates/account/partials/site.php:227
1300
  msgid "Public Key"
1301
  msgstr ""
1302
 
1303
+ #: templates/account.php:422, templates/debug.php:373, templates/debug.php:457, templates/debug.php:509, templates/account/partials/site.php:239
1304
  msgid "Secret Key"
1305
  msgstr ""
1306
 
1307
+ #: templates/account.php:425
1308
  msgctxt "as secret encryption key missing"
1309
  msgid "No Secret"
1310
  msgstr ""
1311
 
1312
+ #: templates/account.php:452, templates/account/partials/site.php:120, templates/account/partials/site.php:122
1313
  msgid "Trial"
1314
  msgstr ""
1315
 
1316
+ #: templates/account.php:479, templates/debug.php:561, templates/account/partials/site.php:260
1317
  msgid "License Key"
1318
  msgstr ""
1319
 
1320
+ #: templates/account.php:510
1321
  msgid "Join the Beta program"
1322
  msgstr ""
1323
 
1324
+ #: templates/account.php:516
1325
  msgid "not verified"
1326
  msgstr ""
1327
 
1328
+ #: templates/account.php:525, templates/account/partials/addon.php:190
1329
  msgid "Expired"
1330
  msgstr ""
1331
 
1332
+ #: templates/account.php:585
1333
  msgid "Premium version"
1334
  msgstr ""
1335
 
1336
+ #: templates/account.php:587
1337
  msgid "Free version"
1338
  msgstr ""
1339
 
1340
+ #: templates/account.php:599
1341
  msgid "Verify Email"
1342
  msgstr ""
1343
 
1344
+ #: templates/account.php:613
1345
  msgid "Download %s Version"
1346
  msgstr ""
1347
 
1348
+ #: templates/account.php:629
1349
  msgid "Download Paid Version"
1350
  msgstr ""
1351
 
1352
+ #: templates/account.php:647, templates/account.php:890, templates/account/partials/site.php:248, templates/account/partials/site.php:270
1353
  msgctxt "verb"
1354
  msgid "Show"
1355
  msgstr ""
1356
 
1357
+ #: templates/account.php:662
1358
  msgid "What is your %s?"
1359
  msgstr ""
1360
 
1361
+ #: templates/account.php:670, templates/account/billing.php:21
1362
  msgctxt "verb"
1363
  msgid "Edit"
1364
  msgstr ""
1365
 
1366
+ #: templates/account.php:674, templates/forms/user-change.php:27
1367
  msgid "Change User"
1368
  msgstr ""
1369
 
1370
+ #: templates/account.php:698
1371
  msgid "Sites"
1372
  msgstr ""
1373
 
1374
+ #: templates/account.php:711
1375
  msgid "Search by address"
1376
  msgstr ""
1377
 
1378
+ #: templates/account.php:720, templates/debug.php:366
1379
  msgid "Address"
1380
  msgstr ""
1381
 
1382
+ #: templates/account.php:721
1383
  msgid "License"
1384
  msgstr ""
1385
 
1386
+ #: templates/account.php:722
1387
  msgid "Plan"
1388
  msgstr ""
1389
 
1390
+ #: templates/account.php:755
1391
  msgctxt "as software license"
1392
  msgid "License"
1393
  msgstr ""
1394
 
1395
+ #: templates/account.php:884
1396
  msgctxt "verb"
1397
  msgid "Hide"
1398
  msgstr ""
1399
 
1400
+ #: templates/account.php:906, templates/forms/data-debug-mode.php:31
1401
  msgid "Processing"
1402
  msgstr ""
1403
 
1404
+ #: templates/account.php:909
1405
  msgid "Get updates for bleeding edge Beta versions of %s."
1406
  msgstr ""
1407
 
1408
+ #: templates/account.php:967
1409
  msgid "Cancelling %s"
1410
  msgstr ""
1411
 
1412
+ #: templates/account.php:967, templates/account.php:984, templates/forms/subscription-cancellation.php:27, templates/forms/deactivation/form.php:133
1413
  msgid "trial"
1414
  msgstr ""
1415
 
1416
+ #: templates/account.php:982, templates/forms/deactivation/form.php:150
1417
  msgid "Cancelling %s..."
1418
  msgstr ""
1419
 
1420
+ #: templates/account.php:985, templates/forms/subscription-cancellation.php:28, templates/forms/deactivation/form.php:134
1421
  msgid "subscription"
1422
  msgstr ""
1423
 
1424
+ #: templates/account.php:999
1425
  msgid "Deactivating your license will block all premium features, but will enable activating the license on another site. Are you sure you want to proceed?"
1426
  msgstr ""
1427
 
1428
+ #: templates/account.php:1073
1429
+ msgid "Disabling white-label mode"
1430
+ msgstr ""
1431
+
1432
+ #: templates/account.php:1074
1433
+ msgid "Enabling white-label mode"
1434
+ msgstr ""
1435
+
1436
  #: templates/add-ons.php:38
1437
  msgid "View details"
1438
  msgstr ""
1562
  msgid "Can't find your license key?"
1563
  msgstr ""
1564
 
1565
+ #: templates/connect.php:323, templates/connect.php:695, templates/forms/deactivation/retry-skip.php:20
1566
  msgctxt "verb"
1567
  msgid "Skip"
1568
  msgstr ""
1619
  msgid "Title, slug, version, and is active"
1620
  msgstr ""
1621
 
1622
+ #: templates/connect.php:421, templates/forms/license-activation.php:41
1623
  msgid "The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license."
1624
  msgstr ""
1625
 
1626
+ #: templates/connect.php:426
1627
  msgid "What permissions are being granted?"
1628
  msgstr ""
1629
 
1630
+ #: templates/connect.php:452
1631
  msgid "Don't have a license key?"
1632
  msgstr ""
1633
 
1634
+ #: templates/connect.php:455
1635
  msgid "Have a license key?"
1636
  msgstr ""
1637
 
1638
+ #: templates/connect.php:463
1639
  msgid "Privacy Policy"
1640
  msgstr ""
1641
 
1642
+ #: templates/connect.php:465
1643
  msgid "License Agreement"
1644
  msgstr ""
1645
 
1646
+ #: templates/connect.php:465
1647
  msgid "Terms of Service"
1648
  msgstr ""
1649
 
1650
+ #: templates/connect.php:854
1651
  msgctxt "as in the process of sending an email"
1652
  msgid "Sending email"
1653
  msgstr ""
1654
 
1655
+ #: templates/connect.php:855
1656
  msgctxt "as activating plugin"
1657
  msgid "Activating"
1658
  msgstr ""
2085
  msgid "Apply to become an affiliate"
2086
  msgstr ""
2087
 
2088
+ #: templates/forms/affiliation.php:107
2089
  msgid "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
2090
  msgstr ""
2091
 
2092
+ #: templates/forms/affiliation.php:122
2093
  msgid "Thank you for applying for our affiliate program, we'll review your details during the next 14 days and will get back to you with further information."
2094
  msgstr ""
2095
 
2096
+ #: templates/forms/affiliation.php:125
2097
  msgid "Your affiliation account was temporarily suspended."
2098
  msgstr ""
2099
 
2100
+ #: templates/forms/affiliation.php:128
2101
  msgid "Thank you for applying for our affiliate program, unfortunately, we've decided at this point to reject your application. Please try again in 30 days."
2102
  msgstr ""
2103
 
2104
+ #: templates/forms/affiliation.php:131
2105
  msgid "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
2106
  msgstr ""
2107
 
2108
+ #: templates/forms/affiliation.php:144
2109
  msgid "Like the %s? Become our ambassador and earn cash ;-)"
2110
  msgstr ""
2111
 
2112
+ #: templates/forms/affiliation.php:145
2113
  msgid "Refer new customers to our %s and earn %s commission on each successful sale you refer!"
2114
  msgstr ""
2115
 
2116
+ #: templates/forms/affiliation.php:148
2117
  msgid "Program Summary"
2118
  msgstr ""
2119
 
2120
+ #: templates/forms/affiliation.php:150
2121
  msgid "%s commission when a customer purchases a new license."
2122
  msgstr ""
2123
 
2124
+ #: templates/forms/affiliation.php:152
2125
  msgid "Get commission for automated subscription renewals."
2126
  msgstr ""
2127
 
2128
+ #: templates/forms/affiliation.php:155
2129
  msgid "%s tracking cookie after the first visit to maximize earnings potential."
2130
  msgstr ""
2131
 
2132
+ #: templates/forms/affiliation.php:158
2133
  msgid "Unlimited commissions."
2134
  msgstr ""
2135
 
2136
+ #: templates/forms/affiliation.php:160
2137
  msgid "%s minimum payout amount."
2138
  msgstr ""
2139
 
2140
+ #: templates/forms/affiliation.php:161
2141
  msgid "Payouts are in USD and processed monthly via PayPal."
2142
  msgstr ""
2143
 
2144
+ #: templates/forms/affiliation.php:162
2145
  msgid "As we reserve 30 days for potential refunds, we only pay commissions that are older than 30 days."
2146
  msgstr ""
2147
 
2148
+ #: templates/forms/affiliation.php:165
2149
  msgid "Affiliate"
2150
  msgstr ""
2151
 
2152
+ #: templates/forms/affiliation.php:168, templates/forms/resend-key.php:23
2153
  msgid "Email address"
2154
  msgstr ""
2155
 
2156
+ #: templates/forms/affiliation.php:172
2157
  msgid "Full name"
2158
  msgstr ""
2159
 
2160
+ #: templates/forms/affiliation.php:176
2161
  msgid "PayPal account email address"
2162
  msgstr ""
2163
 
2164
+ #: templates/forms/affiliation.php:180
2165
  msgid "Where are you going to promote the %s?"
2166
  msgstr ""
2167
 
2168
+ #: templates/forms/affiliation.php:182
2169
  msgid "Enter the domain of your website or other websites from where you plan to promote the %s."
2170
  msgstr ""
2171
 
2172
+ #: templates/forms/affiliation.php:184
2173
  msgid "Add another domain"
2174
  msgstr ""
2175
 
2176
+ #: templates/forms/affiliation.php:188
2177
  msgid "Extra Domains"
2178
  msgstr ""
2179
 
2180
+ #: templates/forms/affiliation.php:189
2181
  msgid "Extra domains where you will be marketing the product from."
2182
  msgstr ""
2183
 
2184
+ #: templates/forms/affiliation.php:199
2185
  msgid "Promotion methods"
2186
  msgstr ""
2187
 
2188
+ #: templates/forms/affiliation.php:202
2189
  msgid "Social media (Facebook, Twitter, etc.)"
2190
  msgstr ""
2191
 
2192
+ #: templates/forms/affiliation.php:206
2193
  msgid "Mobile apps"
2194
  msgstr ""
2195
 
2196
+ #: templates/forms/affiliation.php:210
2197
  msgid "Website, email, and social media statistics (optional)"
2198
  msgstr ""
2199
 
2200
+ #: templates/forms/affiliation.php:213
2201
  msgid "Please feel free to provide any relevant website or social media statistics, e.g. monthly unique site visits, number of email subscribers, followers, etc. (we will keep this information confidential)."
2202
  msgstr ""
2203
 
2204
+ #: templates/forms/affiliation.php:217
2205
  msgid "How will you promote us?"
2206
  msgstr ""
2207
 
2208
+ #: templates/forms/affiliation.php:220
2209
  msgid "Please provide details on how you intend to promote %s (please be as specific as possible)."
2210
  msgstr ""
2211
 
2212
+ #: templates/forms/affiliation.php:232, templates/forms/resend-key.php:22
2213
  msgid "Cancel"
2214
  msgstr ""
2215
 
2216
+ #: templates/forms/affiliation.php:234
2217
  msgid "Become an affiliate"
2218
  msgstr ""
2219
 
2287
  msgid "Plugins & themes tracking"
2288
  msgstr ""
2289
 
2290
+ #: templates/forms/optout.php:261
2291
  msgid "Saved"
2292
  msgstr ""
2293
 
2499
  msgid "switching"
2500
  msgstr ""
2501
 
2502
+ #: templates/forms/deactivation/form.php:369
2503
  msgid "Submit & %s"
2504
  msgstr ""
2505
 
2506
+ #: templates/forms/deactivation/form.php:390
2507
  msgid "Kindly tell us the reason so we can improve."
2508
  msgstr ""
2509
 
2510
+ #: templates/forms/deactivation/form.php:515
2511
  msgid "Yes - %s"
2512
  msgstr ""
2513
 
2514
+ #: templates/forms/deactivation/form.php:522
2515
  msgid "Skip & %s"
2516
  msgstr ""
2517
 
common/vendor/freemius/package.json CHANGED
@@ -4,7 +4,7 @@
4
  "author": "Freemius, Inc.",
5
  "license": "GPL-3.0",
6
  "homepage": "https://freemius.com",
7
- "version": "2.3.2",
8
  "main": "gulpfile.js",
9
  "dependencies": {},
10
  "scripts": {
4
  "author": "Freemius, Inc.",
5
  "license": "GPL-3.0",
6
  "homepage": "https://freemius.com",
7
+ "version": "2.4.0",
8
  "main": "gulpfile.js",
9
  "dependencies": {},
10
  "scripts": {
common/vendor/freemius/start.php CHANGED
@@ -1,522 +1,530 @@
1
- <?php
2
- /**
3
- * @package Freemius
4
- * @copyright Copyright (c) 2015, Freemius, Inc.
5
- * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6
- * @since 1.0.3
7
- */
8
-
9
- if ( ! defined( 'ABSPATH' ) ) {
10
- exit;
11
- }
12
-
13
- /**
14
- * Freemius SDK Version.
15
- *
16
- * @var string
17
- */
18
- $this_sdk_version = '2.3.2';
19
-
20
- #region SDK Selection Logic --------------------------------------------------------------------
21
-
22
- /**
23
- * Special logic added on 1.1.6 to make sure that every Freemius powered plugin
24
- * will ALWAYS be loaded with the newest SDK from the active Freemius powered plugins.
25
- *
26
- * Since Freemius SDK is backward compatible, this will make sure that all Freemius powered
27
- * plugins will run correctly.
28
- *
29
- * @since 1.1.6
30
- */
31
-
32
- global $fs_active_plugins;
33
-
34
- if ( ! function_exists( 'fs_find_caller_plugin_file' ) ) {
35
- // Require SDK essentials.
36
- require_once dirname( __FILE__ ) . '/includes/fs-essential-functions.php';
37
- }
38
-
39
- /**
40
- * This complex logic fixes symlink issues (e.g. with Vargant). The logic assumes
41
- * that if it's a file from an SDK running in a theme, the location of the SDK
42
- * is in the main theme's folder.
43
- *
44
- * @author Vova Feldman (@svovaf)
45
- * @since 1.2.2.6
46
- */
47
- $file_path = fs_normalize_path( __FILE__ );
48
- $fs_root_path = dirname( $file_path );
49
- /**
50
- * Get the themes directory where the active theme is located (not passing the stylesheet will make WordPress
51
- * assume that the themes directory is inside `wp-content`.
52
- *
53
- * @author Leo Fajardo (@leorw)
54
- * @since 2.2.3
55
- */
56
- $themes_directory = get_theme_root( get_stylesheet() );
57
- $themes_directory_name = basename( $themes_directory );
58
- $theme_candidate_basename = basename( dirname( $fs_root_path ) ) . '/' . basename( $fs_root_path );
59
-
60
- if ( $file_path == fs_normalize_path( realpath( trailingslashit( $themes_directory ) . $theme_candidate_basename . '/' . basename( $file_path ) ) )
61
- ) {
62
- $this_sdk_relative_path = '../' . $themes_directory_name . '/' . $theme_candidate_basename;
63
- $is_theme = true;
64
- } else {
65
- $this_sdk_relative_path = plugin_basename( $fs_root_path );
66
- $is_theme = false;
67
- }
68
-
69
- if ( ! isset( $fs_active_plugins ) ) {
70
- // Load all Freemius powered active plugins.
71
- $fs_active_plugins = get_option( 'fs_active_plugins', new stdClass() );
72
-
73
- if ( ! isset( $fs_active_plugins->plugins ) ) {
74
- $fs_active_plugins->plugins = array();
75
- }
76
- }
77
-
78
- if ( empty( $fs_active_plugins->abspath ) ) {
79
- /**
80
- * Store the WP install absolute path reference to identify environment change
81
- * while replicating the storage.
82
- *
83
- * @author Vova Feldman (@svovaf)
84
- * @since 1.2.1.7
85
- */
86
- $fs_active_plugins->abspath = ABSPATH;
87
- } else {
88
- if ( ABSPATH !== $fs_active_plugins->abspath ) {
89
- /**
90
- * WordPress path has changed, cleanup the SDK references cache.
91
- * This resolves issues triggered when spinning a staging environments
92
- * while replicating the database.
93
- *
94
- * @author Vova Feldman (@svovaf)
95
- * @since 1.2.1.7
96
- */
97
- $fs_active_plugins->abspath = ABSPATH;
98
- $fs_active_plugins->plugins = array();
99
- unset( $fs_active_plugins->newest );
100
- } else {
101
- /**
102
- * Make sure SDK references are still valid. This resolves
103
- * issues when users hard delete modules via FTP.
104
- *
105
- * @author Vova Feldman (@svovaf)
106
- * @since 1.2.1.7
107
- */
108
- $has_changes = false;
109
- foreach ( $fs_active_plugins->plugins as $sdk_path => $data ) {
110
- if ( ! file_exists( ( isset( $data->type ) && 'theme' === $data->type ? $themes_directory : WP_PLUGIN_DIR ) . '/' . $sdk_path ) ) {
111
- unset( $fs_active_plugins->plugins[ $sdk_path ] );
112
- $has_changes = true;
113
- }
114
- }
115
-
116
- if ( $has_changes ) {
117
- if ( empty( $fs_active_plugins->plugins ) ) {
118
- unset( $fs_active_plugins->newest );
119
- }
120
-
121
- update_option( 'fs_active_plugins', $fs_active_plugins );
122
- }
123
- }
124
- }
125
-
126
- if ( ! function_exists( 'fs_find_direct_caller_plugin_file' ) ) {
127
- require_once dirname( __FILE__ ) . '/includes/supplements/fs-essential-functions-1.1.7.1.php';
128
- }
129
-
130
- if ( ! function_exists( 'fs_get_plugins' ) ) {
131
- require_once dirname( __FILE__ ) . '/includes/supplements/fs-essential-functions-2.2.1.php';
132
- }
133
-
134
- // Update current SDK info based on the SDK path.
135
- if ( ! isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) ||
136
- $this_sdk_version != $fs_active_plugins->plugins[ $this_sdk_relative_path ]->version
137
- ) {
138
- if ( $is_theme ) {
139
- $plugin_path = basename( dirname( $this_sdk_relative_path ) );
140
- } else {
141
- $plugin_path = plugin_basename( fs_find_direct_caller_plugin_file( $file_path ) );
142
- }
143
-
144
- $fs_active_plugins->plugins[ $this_sdk_relative_path ] = (object) array(
145
- 'version' => $this_sdk_version,
146
- 'type' => ( $is_theme ? 'theme' : 'plugin' ),
147
- 'timestamp' => time(),
148
- 'plugin_path' => $plugin_path,
149
- );
150
- }
151
-
152
- $is_current_sdk_newest = isset( $fs_active_plugins->newest ) && ( $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path );
153
-
154
- if ( ! isset( $fs_active_plugins->newest ) ) {
155
- /**
156
- * This will be executed only once, for the first time a Freemius powered plugin is activated.
157
- */
158
- fs_update_sdk_newest_version( $this_sdk_relative_path, $fs_active_plugins->plugins[ $this_sdk_relative_path ]->plugin_path );
159
-
160
- $is_current_sdk_newest = true;
161
- } else if ( version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '<' ) ) {
162
- /**
163
- * Current SDK is newer than the newest stored SDK.
164
- */
165
- fs_update_sdk_newest_version( $this_sdk_relative_path, $fs_active_plugins->plugins[ $this_sdk_relative_path ]->plugin_path );
166
-
167
- if ( class_exists( 'Freemius' ) ) {
168
- // Older SDK version was already loaded.
169
-
170
- if ( ! $fs_active_plugins->newest->in_activation ) {
171
- // Re-order plugins to load this plugin first.
172
- fs_newest_sdk_plugin_first();
173
- }
174
-
175
- // Refresh page.
176
- fs_redirect( $_SERVER['REQUEST_URI'] );
177
- }
178
- } else {
179
- if ( ! function_exists( 'get_plugins' ) ) {
180
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
181
- }
182
-
183
- $fs_newest_sdk = $fs_active_plugins->newest;
184
- $fs_newest_sdk = $fs_active_plugins->plugins[ $fs_newest_sdk->sdk_path ];
185
-
186
- $is_newest_sdk_type_theme = ( isset( $fs_newest_sdk->type ) && 'theme' === $fs_newest_sdk->type );
187
-
188
- if ( ! $is_newest_sdk_type_theme ) {
189
- $is_newest_sdk_plugin_active = is_plugin_active( $fs_newest_sdk->plugin_path );
190
- } else {
191
- $current_theme = wp_get_theme();
192
- $is_newest_sdk_plugin_active = ( $current_theme->stylesheet === $fs_newest_sdk->plugin_path );
193
-
194
- $current_theme_parent = $current_theme->parent();
195
-
196
- /**
197
- * If the current theme is a child of the theme that has the newest SDK, this prevents a redirects loop
198
- * from happening by keeping the SDK info stored in the `fs_active_plugins` option.
199
- */
200
- if ( ! $is_newest_sdk_plugin_active && $current_theme_parent instanceof WP_Theme ) {
201
- $is_newest_sdk_plugin_active = ( $fs_newest_sdk->plugin_path === $current_theme_parent->stylesheet );
202
- }
203
- }
204
-
205
- if ( $is_current_sdk_newest &&
206
- ! $is_newest_sdk_plugin_active &&
207
- ! $fs_active_plugins->newest->in_activation
208
- ) {
209
- // If current SDK is the newest and the plugin is NOT active, it means
210
- // that the current plugin in activation mode.
211
- $fs_active_plugins->newest->in_activation = true;
212
- update_option( 'fs_active_plugins', $fs_active_plugins );
213
- }
214
-
215
- if ( ! $is_theme ) {
216
- $sdk_starter_path = fs_normalize_path( WP_PLUGIN_DIR . '/' . $this_sdk_relative_path . '/start.php' );
217
- } else {
218
- $sdk_starter_path = fs_normalize_path(
219
- $themes_directory
220
- . '/'
221
- . str_replace( "../{$themes_directory_name}/", '', $this_sdk_relative_path )
222
- . '/start.php' );
223
- }
224
-
225
- $is_newest_sdk_path_valid = ( $is_newest_sdk_plugin_active || $fs_active_plugins->newest->in_activation ) && file_exists( $sdk_starter_path );
226
-
227
- if ( ! $is_newest_sdk_path_valid && ! $is_current_sdk_newest ) {
228
- // Plugin with newest SDK is no longer active, or SDK was moved to a different location.
229
- unset( $fs_active_plugins->plugins[ $fs_active_plugins->newest->sdk_path ] );
230
- }
231
-
232
- if ( ! ( $is_newest_sdk_plugin_active || $fs_active_plugins->newest->in_activation ) ||
233
- ! $is_newest_sdk_path_valid ||
234
- // Is newest SDK downgraded.
235
- ( $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path &&
236
- version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '>' ) )
237
- ) {
238
- /**
239
- * Plugin with newest SDK is no longer active.
240
- * OR
241
- * The newest SDK was in the current plugin. BUT, seems like the version of
242
- * the SDK was downgraded to a lower SDK.
243
- */
244
- // Find the active plugin with the newest SDK version and update the newest reference.
245
- fs_fallback_to_newest_active_sdk();
246
- } else {
247
- if ( $is_newest_sdk_plugin_active &&
248
- $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path &&
249
- ( $fs_active_plugins->newest->in_activation ||
250
- ( class_exists( 'Freemius' ) && ( ! defined( 'WP_FS__SDK_VERSION' ) || version_compare( WP_FS__SDK_VERSION, $this_sdk_version, '<' ) ) )
251
- )
252
-
253
- ) {
254
- if ( $fs_active_plugins->newest->in_activation && ! $is_newest_sdk_type_theme ) {
255
- // Plugin no more in activation.
256
- $fs_active_plugins->newest->in_activation = false;
257
- update_option( 'fs_active_plugins', $fs_active_plugins );
258
- }
259
-
260
- // Reorder plugins to load plugin with newest SDK first.
261
- if ( fs_newest_sdk_plugin_first() ) {
262
- // Refresh page after re-order to make sure activated plugin loads newest SDK.
263
- if ( class_exists( 'Freemius' ) ) {
264
- fs_redirect( $_SERVER['REQUEST_URI'] );
265
- }
266
- }
267
- }
268
- }
269
- }
270
-
271
- if ( class_exists( 'Freemius' ) ) {
272
- // SDK was already loaded.
273
- return;
274
- }
275
-
276
- if ( version_compare( $this_sdk_version, $fs_active_plugins->newest->version, '<' ) ) {
277
- $newest_sdk = $fs_active_plugins->plugins[ $fs_active_plugins->newest->sdk_path ];
278
-
279
- $plugins_or_theme_dir_path = ( ! isset( $newest_sdk->type ) || 'theme' !== $newest_sdk->type ) ?
280
- WP_PLUGIN_DIR :
281
- $themes_directory;
282
-
283
- $newest_sdk_starter = fs_normalize_path(
284
- $plugins_or_theme_dir_path
285
- . '/'
286
- . str_replace( "../{$themes_directory_name}/", '', $fs_active_plugins->newest->sdk_path )
287
- . '/start.php' );
288
-
289
- if ( file_exists( $newest_sdk_starter ) ) {
290
- // Reorder plugins to load plugin with newest SDK first.
291
- fs_newest_sdk_plugin_first();
292
-
293
- // There's a newer SDK version, load it instead of the current one!
294
- require_once $newest_sdk_starter;
295
-
296
- return;
297
- }
298
- }
299
-
300
- #endregion SDK Selection Logic --------------------------------------------------------------------
301
-
302
- #region Hooks & Filters Collection --------------------------------------------------------------------
303
-
304
- /**
305
- * Freemius hooks (actions & filters) tags structure:
306
- *
307
- * fs_{filter/action_name}_{plugin_slug}
308
- *
309
- * --------------------------------------------------------
310
- *
311
- * Usage with WordPress' add_action() / add_filter():
312
- *
313
- * add_action('fs_{filter/action_name}_{plugin_slug}', $callable);
314
- *
315
- * --------------------------------------------------------
316
- *
317
- * Usage with Freemius' instance add_action() / add_filter():
318
- *
319
- * // No need to add 'fs_' prefix nor '_{plugin_slug}' suffix.
320
- * my_freemius()->add_action('{action_name}', $callable);
321
- *
322
- * --------------------------------------------------------
323
- *
324
- * Freemius filters collection:
325
- *
326
- * fs_connect_url_{plugin_slug}
327
- * fs_trial_promotion_message_{plugin_slug}
328
- * fs_is_long_term_user_{plugin_slug}
329
- * fs_uninstall_reasons_{plugin_slug}
330
- * fs_is_plugin_update_{plugin_slug}
331
- * fs_api_domains_{plugin_slug}
332
- * fs_email_template_sections_{plugin_slug}
333
- * fs_support_forum_submenu_{plugin_slug}
334
- * fs_support_forum_url_{plugin_slug}
335
- * fs_connect_message_{plugin_slug}
336
- * fs_connect_message_on_update_{plugin_slug}
337
- * fs_uninstall_confirmation_message_{plugin_slug}
338
- * fs_pending_activation_message_{plugin_slug}
339
- * fs_is_submenu_visible_{plugin_slug}
340
- * fs_plugin_icon_{plugin_slug}
341
- * fs_show_trial_{plugin_slug}
342
- *
343
- * --------------------------------------------------------
344
- *
345
- * Freemius actions collection:
346
- *
347
- * fs_after_license_loaded_{plugin_slug}
348
- * fs_after_license_change_{plugin_slug}
349
- * fs_after_plans_sync_{plugin_slug}
350
- *
351
- * fs_after_account_details_{plugin_slug}
352
- * fs_after_account_user_sync_{plugin_slug}
353
- * fs_after_account_plan_sync_{plugin_slug}
354
- * fs_before_account_load_{plugin_slug}
355
- * fs_after_account_connection_{plugin_slug}
356
- * fs_account_property_edit_{plugin_slug}
357
- * fs_account_email_verified_{plugin_slug}
358
- * fs_account_page_load_before_departure_{plugin_slug}
359
- * fs_before_account_delete_{plugin_slug}
360
- * fs_after_account_delete_{plugin_slug}
361
- *
362
- * fs_sdk_version_update_{plugin_slug}
363
- * fs_plugin_version_update_{plugin_slug}
364
- *
365
- * fs_initiated_{plugin_slug}
366
- * fs_after_init_plugin_registered_{plugin_slug}
367
- * fs_after_init_plugin_anonymous_{plugin_slug}
368
- * fs_after_init_plugin_pending_activations_{plugin_slug}
369
- * fs_after_init_addon_registered_{plugin_slug}
370
- * fs_after_init_addon_anonymous_{plugin_slug}
371
- * fs_after_init_addon_pending_activations_{plugin_slug}
372
- *
373
- * fs_after_premium_version_activation_{plugin_slug}
374
- * fs_after_free_version_reactivation_{plugin_slug}
375
- *
376
- * fs_after_uninstall_{plugin_slug}
377
- * fs_before_admin_menu_init_{plugin_slug}
378
- */
379
-
380
- #endregion Hooks & Filters Collection --------------------------------------------------------------------
381
-
382
- if ( ! class_exists( 'Freemius' ) ) {
383
-
384
- if ( ! defined( 'WP_FS__SDK_VERSION' ) ) {
385
- define( 'WP_FS__SDK_VERSION', $this_sdk_version );
386
- }
387
-
388
- $plugins_or_theme_dir_path = fs_normalize_path( trailingslashit( $is_theme ?
389
- $themes_directory :
390
- WP_PLUGIN_DIR ) );
391
-
392
- if ( 0 === strpos( $file_path, $plugins_or_theme_dir_path ) ) {
393
- // No symlinks
394
- } else {
395
- /**
396
- * This logic finds the SDK symlink and set WP_FS__DIR to use it.
397
- *
398
- * @author Vova Feldman (@svovaf)
399
- * @since 1.2.2.5
400
- */
401
- $sdk_symlink = null;
402
-
403
- // Try to load SDK's symlink from cache.
404
- if ( isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
405
- is_object( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
406
- ! empty( $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink )
407
- ) {
408
- $sdk_symlink = $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink;
409
- if ( 0 === strpos( $sdk_symlink, $plugins_or_theme_dir_path ) ) {
410
- /**
411
- * Make the symlink path relative.
412
- *
413
- * @author Leo Fajardo (@leorw)
414
- */
415
- $sdk_symlink = substr( $sdk_symlink, strlen( $plugins_or_theme_dir_path ) );
416
-
417
- $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink = $sdk_symlink;
418
- update_option( 'fs_active_plugins', $fs_active_plugins );
419
- }
420
-
421
- $realpath = realpath( $plugins_or_theme_dir_path . $sdk_symlink );
422
- if ( ! is_string( $realpath ) || ! file_exists( $realpath ) ) {
423
- $sdk_symlink = null;
424
- }
425
- }
426
-
427
- if ( empty( $sdk_symlink ) ) // Has symlinks, therefore, we need to configure WP_FS__DIR based on the symlink.
428
- {
429
- $partial_path_right = basename( $file_path );
430
- $partial_path_left = dirname( $file_path );
431
- $realpath = realpath( $plugins_or_theme_dir_path . $partial_path_right );
432
-
433
- while ( '/' !== $partial_path_left &&
434
- ( false === $realpath || $file_path !== fs_normalize_path( $realpath ) )
435
- ) {
436
- $partial_path_right = trailingslashit( basename( $partial_path_left ) ) . $partial_path_right;
437
- $partial_path_left_prev = $partial_path_left;
438
- $partial_path_left = dirname( $partial_path_left_prev );
439
-
440
- /**
441
- * Avoid infinite loop if for example `$partial_path_left_prev` is `C:/`, in this case,
442
- * `dirname( 'C:/' )` will return `C:/`.
443
- *
444
- * @author Leo Fajardo (@leorw)
445
- */
446
- if ( $partial_path_left === $partial_path_left_prev ) {
447
- $partial_path_left = '';
448
- break;
449
- }
450
-
451
- $realpath = realpath( $plugins_or_theme_dir_path . $partial_path_right );
452
- }
453
-
454
- if ( ! empty( $partial_path_left ) && '/' !== $partial_path_left ) {
455
- $sdk_symlink = fs_normalize_path( dirname( $partial_path_right ) );
456
-
457
- // Cache value.
458
- if ( isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
459
- is_object( $fs_active_plugins->plugins[ $this_sdk_relative_path ] )
460
- ) {
461
- $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink = $sdk_symlink;
462
- update_option( 'fs_active_plugins', $fs_active_plugins );
463
- }
464
- }
465
- }
466
-
467
- if ( ! empty( $sdk_symlink ) ) {
468
- // Set SDK dir to the symlink path.
469
- define( 'WP_FS__DIR', $plugins_or_theme_dir_path . $sdk_symlink );
470
- }
471
- }
472
-
473
- // Load SDK files.
474
- require_once dirname( __FILE__ ) . '/require.php';
475
-
476
- /**
477
- * Quick shortcut to get Freemius for specified plugin.
478
- * Used by various templates.
479
- *
480
- * @param number $module_id
481
- *
482
- * @return Freemius
483
- */
484
- function freemius( $module_id ) {
485
- return Freemius::instance( $module_id );
486
- }
487
-
488
- /**
489
- * @param string $slug
490
- * @param number $plugin_id
491
- * @param string $public_key
492
- * @param bool $is_live Is live or test plugin.
493
- * @param bool $is_premium Hints freemius if running the premium plugin or not.
494
- *
495
- * @return Freemius
496
- *
497
- * @deprecated Please use fs_dynamic_init().
498
- */
499
- function fs_init( $slug, $plugin_id, $public_key, $is_live = true, $is_premium = true ) {
500
- $fs = Freemius::instance( $plugin_id, $slug, true );
501
- $fs->init( $plugin_id, $public_key, $is_live, $is_premium );
502
-
503
- return $fs;
504
- }
505
-
506
- /**
507
- * @param array <string,string> $module Plugin or Theme details.
508
- *
509
- * @return Freemius
510
- * @throws Freemius_Exception
511
- */
512
- function fs_dynamic_init( $module ) {
513
- $fs = Freemius::instance( $module['id'], $module['slug'], true );
514
- $fs->dynamic_init( $module );
515
-
516
- return $fs;
517
- }
518
-
519
- function fs_dump_log() {
520
- FS_Logger::dump();
521
- }
 
 
 
 
 
 
 
 
522
  }
1
+ <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6
+ * @since 1.0.3
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
+ /**
14
+ * Freemius SDK Version.
15
+ *
16
+ * @var string
17
+ */
18
+ $this_sdk_version = '2.4.1';
19
+
20
+ #region SDK Selection Logic --------------------------------------------------------------------
21
+
22
+ /**
23
+ * Special logic added on 1.1.6 to make sure that every Freemius powered plugin
24
+ * will ALWAYS be loaded with the newest SDK from the active Freemius powered plugins.
25
+ *
26
+ * Since Freemius SDK is backward compatible, this will make sure that all Freemius powered
27
+ * plugins will run correctly.
28
+ *
29
+ * @since 1.1.6
30
+ */
31
+
32
+ global $fs_active_plugins;
33
+
34
+ if ( ! function_exists( 'fs_find_caller_plugin_file' ) ) {
35
+ // Require SDK essentials.
36
+ require_once dirname( __FILE__ ) . '/includes/fs-essential-functions.php';
37
+ }
38
+
39
+ /**
40
+ * This complex logic fixes symlink issues (e.g. with Vargant). The logic assumes
41
+ * that if it's a file from an SDK running in a theme, the location of the SDK
42
+ * is in the main theme's folder.
43
+ *
44
+ * @author Vova Feldman (@svovaf)
45
+ * @since 1.2.2.6
46
+ */
47
+ $file_path = fs_normalize_path( __FILE__ );
48
+ $fs_root_path = dirname( $file_path );
49
+ /**
50
+ * Get the themes directory where the active theme is located (not passing the stylesheet will make WordPress
51
+ * assume that the themes directory is inside `wp-content`.
52
+ *
53
+ * @author Leo Fajardo (@leorw)
54
+ * @since 2.2.3
55
+ */
56
+ $themes_directory = get_theme_root( get_stylesheet() );
57
+ $themes_directory_name = basename( $themes_directory );
58
+ $theme_candidate_basename = basename( dirname( $fs_root_path ) ) . '/' . basename( $fs_root_path );
59
+
60
+ if ( $file_path == fs_normalize_path( realpath( trailingslashit( $themes_directory ) . $theme_candidate_basename . '/' . basename( $file_path ) ) )
61
+ ) {
62
+ $this_sdk_relative_path = '../' . $themes_directory_name . '/' . $theme_candidate_basename;
63
+ $is_theme = true;
64
+ } else {
65
+ $this_sdk_relative_path = plugin_basename( $fs_root_path );
66
+ $is_theme = false;
67
+ }
68
+
69
+ if ( ! isset( $fs_active_plugins ) ) {
70
+ // Load all Freemius powered active plugins.
71
+ $fs_active_plugins = get_option( 'fs_active_plugins', new stdClass() );
72
+
73
+ if ( ! isset( $fs_active_plugins->plugins ) ) {
74
+ $fs_active_plugins->plugins = array();
75
+ }
76
+ }
77
+
78
+ if ( empty( $fs_active_plugins->abspath ) ) {
79
+ /**
80
+ * Store the WP install absolute path reference to identify environment change
81
+ * while replicating the storage.
82
+ *
83
+ * @author Vova Feldman (@svovaf)
84
+ * @since 1.2.1.7
85
+ */
86
+ $fs_active_plugins->abspath = ABSPATH;
87
+ } else {
88
+ if ( ABSPATH !== $fs_active_plugins->abspath ) {
89
+ /**
90
+ * WordPress path has changed, cleanup the SDK references cache.
91
+ * This resolves issues triggered when spinning a staging environments
92
+ * while replicating the database.
93
+ *
94
+ * @author Vova Feldman (@svovaf)
95
+ * @since 1.2.1.7
96
+ */
97
+ $fs_active_plugins->abspath = ABSPATH;
98
+ $fs_active_plugins->plugins = array();
99
+ unset( $fs_active_plugins->newest );
100
+ } else {
101
+ /**
102
+ * Make sure SDK references are still valid. This resolves
103
+ * issues when users hard delete modules via FTP.
104
+ *
105
+ * @author Vova Feldman (@svovaf)
106
+ * @since 1.2.1.7
107
+ */
108
+ $has_changes = false;
109
+ foreach ( $fs_active_plugins->plugins as $sdk_path => $data ) {
110
+ if ( ! file_exists( ( isset( $data->type ) && 'theme' === $data->type ? $themes_directory : WP_PLUGIN_DIR ) . '/' . $sdk_path ) ) {
111
+ unset( $fs_active_plugins->plugins[ $sdk_path ] );
112
+
113
+ if (
114
+ ! empty( $fs_active_plugins->newest ) &&
115
+ $sdk_path === $fs_active_plugins->newest->sdk_path
116
+ ) {
117
+ unset( $fs_active_plugins->newest );
118
+ }
119
+
120
+ $has_changes = true;
121
+ }
122
+ }
123
+
124
+ if ( $has_changes ) {
125
+ if ( empty( $fs_active_plugins->plugins ) ) {
126
+ unset( $fs_active_plugins->newest );
127
+ }
128
+
129
+ update_option( 'fs_active_plugins', $fs_active_plugins );
130
+ }
131
+ }
132
+ }
133
+
134
+ if ( ! function_exists( 'fs_find_direct_caller_plugin_file' ) ) {
135
+ require_once dirname( __FILE__ ) . '/includes/supplements/fs-essential-functions-1.1.7.1.php';
136
+ }
137
+
138
+ if ( ! function_exists( 'fs_get_plugins' ) ) {
139
+ require_once dirname( __FILE__ ) . '/includes/supplements/fs-essential-functions-2.2.1.php';
140
+ }
141
+
142
+ // Update current SDK info based on the SDK path.
143
+ if ( ! isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) ||
144
+ $this_sdk_version != $fs_active_plugins->plugins[ $this_sdk_relative_path ]->version
145
+ ) {
146
+ if ( $is_theme ) {
147
+ $plugin_path = basename( dirname( $this_sdk_relative_path ) );
148
+ } else {
149
+ $plugin_path = plugin_basename( fs_find_direct_caller_plugin_file( $file_path ) );
150
+ }
151
+
152
+ $fs_active_plugins->plugins[ $this_sdk_relative_path ] = (object) array(
153
+ 'version' => $this_sdk_version,
154
+ 'type' => ( $is_theme ? 'theme' : 'plugin' ),
155
+ 'timestamp' => time(),
156
+ 'plugin_path' => $plugin_path,
157
+ );
158
+ }
159
+
160
+ $is_current_sdk_newest = isset( $fs_active_plugins->newest ) && ( $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path );
161
+
162
+ if ( ! isset( $fs_active_plugins->newest ) ) {
163
+ /**
164
+ * This will be executed only once, for the first time a Freemius powered plugin is activated.
165
+ */
166
+ fs_update_sdk_newest_version( $this_sdk_relative_path, $fs_active_plugins->plugins[ $this_sdk_relative_path ]->plugin_path );
167
+
168
+ $is_current_sdk_newest = true;
169
+ } else if ( version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '<' ) ) {
170
+ /**
171
+ * Current SDK is newer than the newest stored SDK.
172
+ */
173
+ fs_update_sdk_newest_version( $this_sdk_relative_path, $fs_active_plugins->plugins[ $this_sdk_relative_path ]->plugin_path );
174
+
175
+ if ( class_exists( 'Freemius' ) ) {
176
+ // Older SDK version was already loaded.
177
+
178
+ if ( ! $fs_active_plugins->newest->in_activation ) {
179
+ // Re-order plugins to load this plugin first.
180
+ fs_newest_sdk_plugin_first();
181
+ }
182
+
183
+ // Refresh page.
184
+ fs_redirect( $_SERVER['REQUEST_URI'] );
185
+ }
186
+ } else {
187
+ if ( ! function_exists( 'get_plugins' ) ) {
188
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
189
+ }
190
+
191
+ $fs_newest_sdk = $fs_active_plugins->newest;
192
+ $fs_newest_sdk = $fs_active_plugins->plugins[ $fs_newest_sdk->sdk_path ];
193
+
194
+ $is_newest_sdk_type_theme = ( isset( $fs_newest_sdk->type ) && 'theme' === $fs_newest_sdk->type );
195
+
196
+ if ( ! $is_newest_sdk_type_theme ) {
197
+ $is_newest_sdk_plugin_active = is_plugin_active( $fs_newest_sdk->plugin_path );
198
+ } else {
199
+ $current_theme = wp_get_theme();
200
+ $is_newest_sdk_plugin_active = ( $current_theme->stylesheet === $fs_newest_sdk->plugin_path );
201
+
202
+ $current_theme_parent = $current_theme->parent();
203
+
204
+ /**
205
+ * If the current theme is a child of the theme that has the newest SDK, this prevents a redirects loop
206
+ * from happening by keeping the SDK info stored in the `fs_active_plugins` option.
207
+ */
208
+ if ( ! $is_newest_sdk_plugin_active && $current_theme_parent instanceof WP_Theme ) {
209
+ $is_newest_sdk_plugin_active = ( $fs_newest_sdk->plugin_path === $current_theme_parent->stylesheet );
210
+ }
211
+ }
212
+
213
+ if ( $is_current_sdk_newest &&
214
+ ! $is_newest_sdk_plugin_active &&
215
+ ! $fs_active_plugins->newest->in_activation
216
+ ) {
217
+ // If current SDK is the newest and the plugin is NOT active, it means
218
+ // that the current plugin in activation mode.
219
+ $fs_active_plugins->newest->in_activation = true;
220
+ update_option( 'fs_active_plugins', $fs_active_plugins );
221
+ }
222
+
223
+ if ( ! $is_theme ) {
224
+ $sdk_starter_path = fs_normalize_path( WP_PLUGIN_DIR . '/' . $this_sdk_relative_path . '/start.php' );
225
+ } else {
226
+ $sdk_starter_path = fs_normalize_path(
227
+ $themes_directory
228
+ . '/'
229
+ . str_replace( "../{$themes_directory_name}/", '', $this_sdk_relative_path )
230
+ . '/start.php' );
231
+ }
232
+
233
+ $is_newest_sdk_path_valid = ( $is_newest_sdk_plugin_active || $fs_active_plugins->newest->in_activation ) && file_exists( $sdk_starter_path );
234
+
235
+ if ( ! $is_newest_sdk_path_valid && ! $is_current_sdk_newest ) {
236
+ // Plugin with newest SDK is no longer active, or SDK was moved to a different location.
237
+ unset( $fs_active_plugins->plugins[ $fs_active_plugins->newest->sdk_path ] );
238
+ }
239
+
240
+ if ( ! ( $is_newest_sdk_plugin_active || $fs_active_plugins->newest->in_activation ) ||
241
+ ! $is_newest_sdk_path_valid ||
242
+ // Is newest SDK downgraded.
243
+ ( $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path &&
244
+ version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '>' ) )
245
+ ) {
246
+ /**
247
+ * Plugin with newest SDK is no longer active.
248
+ * OR
249
+ * The newest SDK was in the current plugin. BUT, seems like the version of
250
+ * the SDK was downgraded to a lower SDK.
251
+ */
252
+ // Find the active plugin with the newest SDK version and update the newest reference.
253
+ fs_fallback_to_newest_active_sdk();
254
+ } else {
255
+ if ( $is_newest_sdk_plugin_active &&
256
+ $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path &&
257
+ ( $fs_active_plugins->newest->in_activation ||
258
+ ( class_exists( 'Freemius' ) && ( ! defined( 'WP_FS__SDK_VERSION' ) || version_compare( WP_FS__SDK_VERSION, $this_sdk_version, '<' ) ) )
259
+ )
260
+
261
+ ) {
262
+ if ( $fs_active_plugins->newest->in_activation && ! $is_newest_sdk_type_theme ) {
263
+ // Plugin no more in activation.
264
+ $fs_active_plugins->newest->in_activation = false;
265
+ update_option( 'fs_active_plugins', $fs_active_plugins );
266
+ }
267
+
268
+ // Reorder plugins to load plugin with newest SDK first.
269
+ if ( fs_newest_sdk_plugin_first() ) {
270
+ // Refresh page after re-order to make sure activated plugin loads newest SDK.
271
+ if ( class_exists( 'Freemius' ) ) {
272
+ fs_redirect( $_SERVER['REQUEST_URI'] );
273
+ }
274
+ }
275
+ }
276
+ }
277
+ }
278
+
279
+ if ( class_exists( 'Freemius' ) ) {
280
+ // SDK was already loaded.
281
+ return;
282
+ }
283
+
284
+ if ( version_compare( $this_sdk_version, $fs_active_plugins->newest->version, '<' ) ) {
285
+ $newest_sdk = $fs_active_plugins->plugins[ $fs_active_plugins->newest->sdk_path ];
286
+
287
+ $plugins_or_theme_dir_path = ( ! isset( $newest_sdk->type ) || 'theme' !== $newest_sdk->type ) ?
288
+ WP_PLUGIN_DIR :
289
+ $themes_directory;
290
+
291
+ $newest_sdk_starter = fs_normalize_path(
292
+ $plugins_or_theme_dir_path
293
+ . '/'
294
+ . str_replace( "../{$themes_directory_name}/", '', $fs_active_plugins->newest->sdk_path )
295
+ . '/start.php' );
296
+
297
+ if ( file_exists( $newest_sdk_starter ) ) {
298
+ // Reorder plugins to load plugin with newest SDK first.
299
+ fs_newest_sdk_plugin_first();
300
+
301
+ // There's a newer SDK version, load it instead of the current one!
302
+ require_once $newest_sdk_starter;
303
+
304
+ return;
305
+ }
306
+ }
307
+
308
+ #endregion SDK Selection Logic --------------------------------------------------------------------
309
+
310
+ #region Hooks & Filters Collection --------------------------------------------------------------------
311
+
312
+ /**
313
+ * Freemius hooks (actions & filters) tags structure:
314
+ *
315
+ * fs_{filter/action_name}_{plugin_slug}
316
+ *
317
+ * --------------------------------------------------------
318
+ *
319
+ * Usage with WordPress' add_action() / add_filter():
320
+ *
321
+ * add_action('fs_{filter/action_name}_{plugin_slug}', $callable);
322
+ *
323
+ * --------------------------------------------------------
324
+ *
325
+ * Usage with Freemius' instance add_action() / add_filter():
326
+ *
327
+ * // No need to add 'fs_' prefix nor '_{plugin_slug}' suffix.
328
+ * my_freemius()->add_action('{action_name}', $callable);
329
+ *
330
+ * --------------------------------------------------------
331
+ *
332
+ * Freemius filters collection:
333
+ *
334
+ * fs_connect_url_{plugin_slug}
335
+ * fs_trial_promotion_message_{plugin_slug}
336
+ * fs_is_long_term_user_{plugin_slug}
337
+ * fs_uninstall_reasons_{plugin_slug}
338
+ * fs_is_plugin_update_{plugin_slug}
339
+ * fs_api_domains_{plugin_slug}
340
+ * fs_email_template_sections_{plugin_slug}
341
+ * fs_support_forum_submenu_{plugin_slug}
342
+ * fs_support_forum_url_{plugin_slug}
343
+ * fs_connect_message_{plugin_slug}
344
+ * fs_connect_message_on_update_{plugin_slug}
345
+ * fs_uninstall_confirmation_message_{plugin_slug}
346
+ * fs_pending_activation_message_{plugin_slug}
347
+ * fs_is_submenu_visible_{plugin_slug}
348
+ * fs_plugin_icon_{plugin_slug}
349
+ * fs_show_trial_{plugin_slug}
350
+ *
351
+ * --------------------------------------------------------
352
+ *
353
+ * Freemius actions collection:
354
+ *
355
+ * fs_after_license_loaded_{plugin_slug}
356
+ * fs_after_license_change_{plugin_slug}
357
+ * fs_after_plans_sync_{plugin_slug}
358
+ *
359
+ * fs_after_account_details_{plugin_slug}
360
+ * fs_after_account_user_sync_{plugin_slug}
361
+ * fs_after_account_plan_sync_{plugin_slug}
362
+ * fs_before_account_load_{plugin_slug}
363
+ * fs_after_account_connection_{plugin_slug}
364
+ * fs_account_property_edit_{plugin_slug}
365
+ * fs_account_email_verified_{plugin_slug}
366
+ * fs_account_page_load_before_departure_{plugin_slug}
367
+ * fs_before_account_delete_{plugin_slug}
368
+ * fs_after_account_delete_{plugin_slug}
369
+ *
370
+ * fs_sdk_version_update_{plugin_slug}
371
+ * fs_plugin_version_update_{plugin_slug}
372
+ *
373
+ * fs_initiated_{plugin_slug}
374
+ * fs_after_init_plugin_registered_{plugin_slug}
375
+ * fs_after_init_plugin_anonymous_{plugin_slug}
376
+ * fs_after_init_plugin_pending_activations_{plugin_slug}
377
+ * fs_after_init_addon_registered_{plugin_slug}
378
+ * fs_after_init_addon_anonymous_{plugin_slug}
379
+ * fs_after_init_addon_pending_activations_{plugin_slug}
380
+ *
381
+ * fs_after_premium_version_activation_{plugin_slug}
382
+ * fs_after_free_version_reactivation_{plugin_slug}
383
+ *
384
+ * fs_after_uninstall_{plugin_slug}
385
+ * fs_before_admin_menu_init_{plugin_slug}
386
+ */
387
+
388
+ #endregion Hooks & Filters Collection --------------------------------------------------------------------
389
+
390
+ if ( ! class_exists( 'Freemius' ) ) {
391
+
392
+ if ( ! defined( 'WP_FS__SDK_VERSION' ) ) {
393
+ define( 'WP_FS__SDK_VERSION', $this_sdk_version );
394
+ }
395
+
396
+ $plugins_or_theme_dir_path = fs_normalize_path( trailingslashit( $is_theme ?
397
+ $themes_directory :
398
+ WP_PLUGIN_DIR ) );
399
+
400
+ if ( 0 === strpos( $file_path, $plugins_or_theme_dir_path ) ) {
401
+ // No symlinks
402
+ } else {
403
+ /**
404
+ * This logic finds the SDK symlink and set WP_FS__DIR to use it.
405
+ *
406
+ * @author Vova Feldman (@svovaf)
407
+ * @since 1.2.2.5
408
+ */
409
+ $sdk_symlink = null;
410
+
411
+ // Try to load SDK's symlink from cache.
412
+ if ( isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
413
+ is_object( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
414
+ ! empty( $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink )
415
+ ) {
416
+ $sdk_symlink = $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink;
417
+ if ( 0 === strpos( $sdk_symlink, $plugins_or_theme_dir_path ) ) {
418
+ /**
419
+ * Make the symlink path relative.
420
+ *
421
+ * @author Leo Fajardo (@leorw)
422
+ */
423
+ $sdk_symlink = substr( $sdk_symlink, strlen( $plugins_or_theme_dir_path ) );
424
+
425
+ $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink = $sdk_symlink;
426
+ update_option( 'fs_active_plugins', $fs_active_plugins );
427
+ }
428
+
429
+ $realpath = realpath( $plugins_or_theme_dir_path . $sdk_symlink );
430
+ if ( ! is_string( $realpath ) || ! file_exists( $realpath ) ) {
431
+ $sdk_symlink = null;
432
+ }
433
+ }
434
+
435
+ if ( empty( $sdk_symlink ) ) // Has symlinks, therefore, we need to configure WP_FS__DIR based on the symlink.
436
+ {
437
+ $partial_path_right = basename( $file_path );
438
+ $partial_path_left = dirname( $file_path );
439
+ $realpath = realpath( $plugins_or_theme_dir_path . $partial_path_right );
440
+
441
+ while ( '/' !== $partial_path_left &&
442
+ ( false === $realpath || $file_path !== fs_normalize_path( $realpath ) )
443
+ ) {
444
+ $partial_path_right = trailingslashit( basename( $partial_path_left ) ) . $partial_path_right;
445
+ $partial_path_left_prev = $partial_path_left;
446
+ $partial_path_left = dirname( $partial_path_left_prev );
447
+
448
+ /**
449
+ * Avoid infinite loop if for example `$partial_path_left_prev` is `C:/`, in this case,
450
+ * `dirname( 'C:/' )` will return `C:/`.
451
+ *
452
+ * @author Leo Fajardo (@leorw)
453
+ */
454
+ if ( $partial_path_left === $partial_path_left_prev ) {
455
+ $partial_path_left = '';
456
+ break;
457
+ }
458
+
459
+ $realpath = realpath( $plugins_or_theme_dir_path . $partial_path_right );
460
+ }
461
+
462
+ if ( ! empty( $partial_path_left ) && '/' !== $partial_path_left ) {
463
+ $sdk_symlink = fs_normalize_path( dirname( $partial_path_right ) );
464
+
465
+ // Cache value.
466
+ if ( isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) &&
467
+ is_object( $fs_active_plugins->plugins[ $this_sdk_relative_path ] )
468
+ ) {
469
+ $fs_active_plugins->plugins[ $this_sdk_relative_path ]->sdk_symlink = $sdk_symlink;
470
+ update_option( 'fs_active_plugins', $fs_active_plugins );
471
+ }
472
+ }
473
+ }
474
+
475
+ if ( ! empty( $sdk_symlink ) ) {
476
+ // Set SDK dir to the symlink path.
477
+ define( 'WP_FS__DIR', $plugins_or_theme_dir_path . $sdk_symlink );
478
+ }
479
+ }
480
+
481
+ // Load SDK files.
482
+ require_once dirname( __FILE__ ) . '/require.php';
483
+
484
+ /**
485
+ * Quick shortcut to get Freemius for specified plugin.
486
+ * Used by various templates.
487
+ *
488
+ * @param number $module_id
489
+ *
490
+ * @return Freemius
491
+ */
492
+ function freemius( $module_id ) {
493
+ return Freemius::instance( $module_id );
494
+ }
495
+
496
+ /**
497
+ * @param string $slug
498
+ * @param number $plugin_id
499
+ * @param string $public_key
500
+ * @param bool $is_live Is live or test plugin.
501
+ * @param bool $is_premium Hints freemius if running the premium plugin or not.
502
+ *
503
+ * @return Freemius
504
+ *
505
+ * @deprecated Please use fs_dynamic_init().
506
+ */
507
+ function fs_init( $slug, $plugin_id, $public_key, $is_live = true, $is_premium = true ) {
508
+ $fs = Freemius::instance( $plugin_id, $slug, true );
509
+ $fs->init( $plugin_id, $public_key, $is_live, $is_premium );
510
+
511
+ return $fs;
512
+ }
513
+
514
+ /**
515
+ * @param array <string,string> $module Plugin or Theme details.
516
+ *
517
+ * @return Freemius
518
+ * @throws Freemius_Exception
519
+ */
520
+ function fs_dynamic_init( $module ) {
521
+ $fs = Freemius::instance( $module['id'], $module['slug'], true );
522
+ $fs->dynamic_init( $module );
523
+
524
+ return $fs;
525
+ }
526
+
527
+ function fs_dump_log() {
528
+ FS_Logger::dump();
529
+ }
530
  }
common/vendor/freemius/templates/account.php CHANGED
@@ -163,19 +163,28 @@
163
  }
164
  }
165
 
166
- $is_child_license = ( is_object( $license ) && FS_Plugin_License::is_valid_id( $license->parent_license_id ) );
167
- $bundle_subscription = null;
 
 
 
 
 
 
 
 
 
168
 
169
  if (
170
  $show_plan_row &&
171
  is_object( $license ) &&
172
- FS_Plugin_License::is_valid_id( $license->parent_license_id )
173
  ) {
174
- $bundle_subscription = $fs->_get_subscription( $license->parent_license_id );
 
 
175
  }
176
 
177
- $is_active_bundle_subscription = ( is_object( $bundle_subscription ) && $bundle_subscription->is_active() );
178
-
179
  $fs_blog_id = ( is_multisite() && ! is_network_admin() ) ?
180
  get_current_blog_id() :
181
  0;
@@ -183,6 +192,46 @@
183
  $active_plugins_directories_map = Freemius::get_active_plugins_directories_map( $fs_blog_id );
184
 
185
  $is_premium = $fs->is_premium();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  ?>
187
  <div class="wrap fs-section">
188
  <?php if ( ! $has_tabs && ! $fs->apply_filters( 'hide_account_tabs', false ) ) : ?>
@@ -392,7 +441,7 @@
392
  );
393
  }
394
 
395
- if ( $has_paid_plan ) {
396
  if ( $fs->is_trial() ) {
397
  if ( $show_plan_row ) {
398
  $profile[] = array(
@@ -407,18 +456,18 @@
407
  if ( $show_plan_row ) {
408
  $profile[] = array(
409
  'id' => 'plan',
410
- 'title' => ( $is_child_license ? ucfirst( $fs->get_module_type() ) . ' ' : '' ) . $plan_text,
411
  'value' => strtoupper( is_string( $plan->name ) ?
412
  $plan->title :
413
  strtoupper( $free_text )
414
  )
415
  );
416
 
417
- if ( $is_child_license ) {
418
  $profile[] = array(
419
  'id' => 'bundle_plan',
420
  'title' => $bundle_plan_text,
421
- 'value' => strtoupper( $license->parent_plan_title )
422
  );
423
  }
424
  }
@@ -525,7 +574,7 @@
525
  <?php endif ?>
526
  <?php elseif ( 'bundle_plan' === $p['id'] ) : ?>
527
  <?php if ( is_object( $bundle_subscription ) ) : ?>
528
- <?php if ( $is_active_bundle_subscription && ! $license->is_first_payment_pending() ) : ?>
529
  <label class="fs-tag fs-success"><?php echo esc_html( sprintf( $renews_in_text, human_time_diff( time(), strtotime( $bundle_subscription->next_payment ) ) ) ) ?></label>
530
  <?php endif ?>
531
  <?php endif ?>
@@ -555,7 +604,7 @@
555
  <div class="button-group">
556
  <?php if ( $is_paying || $fs->is_trial() ) : ?>
557
  <?php if ( ! $fs->is_allowed_to_install() ) : ?>
558
- <a target="_blank" class="button button-primary"
559
  href="<?php echo $fs->_get_latest_download_local_url() ?>"><?php
560
  $download_version_text_suffix = ( is_object( $update ) ? ' [' . $update->version . ']' : '' );
561
 
@@ -691,18 +740,6 @@
691
  </div>
692
  </div>
693
  <?php endif ?>
694
-
695
- <?php
696
- $account_addons = $fs->get_updated_account_addons();
697
-
698
- $installed_addons = $fs->get_installed_addons();
699
- $installed_addons_ids = array();
700
- foreach ( $installed_addons as $fs_addon ) {
701
- $installed_addons_ids[] = $fs_addon->get_id();
702
- }
703
-
704
- $addons_to_show = array_unique( array_merge( $installed_addons_ids, $account_addons ) );
705
- ?>
706
  <?php if ( 0 < count( $addons_to_show ) ) : ?>
707
  <!-- Add-Ons -->
708
  <div class="postbox">
@@ -1019,6 +1056,29 @@
1019
  });
1020
  });
1021
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1022
  })(jQuery);
1023
  </script>
1024
  <?php
163
  }
164
  }
165
 
166
+ $has_bundle_license = false;
167
+
168
+ if ( is_object( $license ) &&
169
+ FS_Plugin_License::is_valid_id( $license->parent_license_id )
170
+ ) {
171
+ // Context license has a parent license, therefore, the account has a bundle license.
172
+ $has_bundle_license = true;
173
+ }
174
+
175
+ $bundle_subscription = null;
176
+ $is_bundle_first_payment_pending = false;
177
 
178
  if (
179
  $show_plan_row &&
180
  is_object( $license ) &&
181
+ $has_bundle_license
182
  ) {
183
+ $bundle_plan_title = strtoupper( $license->parent_plan_title );
184
+ $bundle_subscription = $fs->_get_subscription( $license->parent_license_id );
185
+ $is_bundle_first_payment_pending = $license->is_first_payment_pending();
186
  }
187
 
 
 
188
  $fs_blog_id = ( is_multisite() && ! is_network_admin() ) ?
189
  get_current_blog_id() :
190
  0;
192
  $active_plugins_directories_map = Freemius::get_active_plugins_directories_map( $fs_blog_id );
193
 
194
  $is_premium = $fs->is_premium();
195
+
196
+ $account_addons = $fs->get_updated_account_addons();
197
+ $installed_addons = $fs->get_installed_addons();
198
+ $installed_addons_ids = array();
199
+
200
+ /**
201
+ * Store the installed add-ons' IDs into a collection which will be used in determining the add-ons to show on the "Account" page, and at the same time try to find an add-on that is activated with a bundle license if the core product is not.
202
+ *
203
+ * @author Leo Fajardo
204
+ *
205
+ * @since 2.4.0
206
+ */
207
+ foreach ( $installed_addons as $fs_addon ) {
208
+ $installed_addons_ids[] = $fs_addon->get_id();
209
+
210
+ if ( $has_bundle_license ) {
211
+ // We already have the context bundle license details, skip.
212
+ continue;
213
+ }
214
+
215
+ if (
216
+ $show_plan_row &&
217
+ $fs_addon->has_active_valid_license()
218
+ ) {
219
+ $addon_license = $fs_addon->_get_license();
220
+
221
+ if ( FS_Plugin_License::is_valid_id( $addon_license->parent_license_id ) ) {
222
+ // Add-on's license is associated with a parent/bundle license.
223
+ $has_bundle_license = true;
224
+
225
+ $bundle_plan_title = strtoupper( $addon_license->parent_plan_title );
226
+ $bundle_subscription = $fs_addon->_get_subscription( $addon_license->parent_license_id );
227
+ $is_bundle_first_payment_pending = $addon_license->is_first_payment_pending();
228
+ }
229
+ }
230
+ }
231
+
232
+ $addons_to_show = array_unique( array_merge( $installed_addons_ids, $account_addons ) );
233
+
234
+ $is_active_bundle_subscription = ( is_object( $bundle_subscription ) && $bundle_subscription->is_active() );
235
  ?>
236
  <div class="wrap fs-section">
237
  <?php if ( ! $has_tabs && ! $fs->apply_filters( 'hide_account_tabs', false ) ) : ?>
441
  );
442
  }
443
 
444
+ if ( $has_paid_plan || $has_bundle_license ) {
445
  if ( $fs->is_trial() ) {
446
  if ( $show_plan_row ) {
447
  $profile[] = array(
456
  if ( $show_plan_row ) {
457
  $profile[] = array(
458
  'id' => 'plan',
459
+ 'title' => ( $has_bundle_license ? ucfirst( $fs->get_module_type() ) . ' ' : '' ) . $plan_text,
460
  'value' => strtoupper( is_string( $plan->name ) ?
461
  $plan->title :
462
  strtoupper( $free_text )
463
  )
464
  );
465
 
466
+ if ( $has_bundle_license ) {
467
  $profile[] = array(
468
  'id' => 'bundle_plan',
469
  'title' => $bundle_plan_text,
470
+ 'value' => $bundle_plan_title
471
  );
472
  }
473
  }
574
  <?php endif ?>
575
  <?php elseif ( 'bundle_plan' === $p['id'] ) : ?>
576
  <?php if ( is_object( $bundle_subscription ) ) : ?>
577
+ <?php if ( $is_active_bundle_subscription && ! $is_bundle_first_payment_pending ) : ?>
578
  <label class="fs-tag fs-success"><?php echo esc_html( sprintf( $renews_in_text, human_time_diff( time(), strtotime( $bundle_subscription->next_payment ) ) ) ) ?></label>
579
  <?php endif ?>
580
  <?php endif ?>
604
  <div class="button-group">
605
  <?php if ( $is_paying || $fs->is_trial() ) : ?>
606
  <?php if ( ! $fs->is_allowed_to_install() ) : ?>
607
+ <a target="_blank" rel="noopener" class="button button-primary"
608
  href="<?php echo $fs->_get_latest_download_local_url() ?>"><?php
609
  $download_version_text_suffix = ( is_object( $update ) ? ' [' . $update->version . ']' : '' );
610
 
740
  </div>
741
  </div>
742
  <?php endif ?>
 
 
 
 
 
 
 
 
 
 
 
 
743
  <?php if ( 0 < count( $addons_to_show ) ) : ?>
744
  <!-- Add-Ons -->
745
  <div class="postbox">
1056
  });
1057
  });
1058
 
1059
+ $( '.fs-toggle-whitelabel-mode' ).click( function () {
1060
+ var $toggleLink = $( this );
1061
+
1062
+ $.ajax( {
1063
+ url : ajaxurl,
1064
+ method: 'POST',
1065
+ data : {
1066
+ action : '<?php echo $fs->get_ajax_action( 'toggle_whitelabel_mode' ) ?>',
1067
+ security : '<?php echo $fs->get_ajax_security( 'toggle_whitelabel_mode' ) ?>',
1068
+ module_id: <?php echo $fs->get_id() ?>
1069
+ },
1070
+ beforeSend: function () {
1071
+ $toggleLink.parent().text( '<?php
1072
+ $is_whitelabeled ?
1073
+ fs_esc_html_echo_inline( 'Disabling white-label mode', 'disabling-whitelabel-mode' ) :
1074
+ fs_esc_html_echo_inline( 'Enabling white-label mode', 'enabling-whitelabel-mode' )
1075
+ ?>' + '...' );
1076
+ },
1077
+ complete: function () {
1078
+ location.reload();
1079
+ }
1080
+ } );
1081
+ });
1082
  })(jQuery);
1083
  </script>
1084
  <?php
common/vendor/freemius/templates/account/partials/addon.php CHANGED
@@ -366,7 +366,7 @@
366
  );
367
  } else {
368
  $buttons[] = sprintf(
369
- '<a target="_blank" class="button button-primary edit" href="%s">%s</a>',
370
  $fs->_get_latest_download_local_url( $addon_id ),
371
  esc_html( $download_latest_text )
372
  );
@@ -417,7 +417,7 @@
417
  <a class="button button-primary"
418
  href="<?php echo wp_nonce_url( self_admin_url( 'update.php?' . ( ( isset( $addon_info['has_paid_plan'] ) && $addon_info['has_paid_plan'] ) ? 'fs_allow_updater_and_dialog=true&' : '' ) . 'action=install-plugin&plugin=' . $addon_info['slug'] ), 'install-plugin_' . $addon_info['slug'] ) ?>"><?php fs_esc_html_echo_inline( 'Install Now', 'install-now', $slug ) ?></a>
419
  <?php else : ?>
420
- <a target="_blank" class="button button-primary"
421
  href="<?php echo $fs->_get_latest_download_local_url( $addon_id ) ?>"><?php echo esc_html( $download_latest_text ) ?></a>
422
  <?php endif ?>
423
  <?php endif ?>
366
  );
367
  } else {
368
  $buttons[] = sprintf(
369
+ '<a target="_blank" rel="noopener" class="button button-primary edit" href="%s">%s</a>',
370
  $fs->_get_latest_download_local_url( $addon_id ),
371
  esc_html( $download_latest_text )
372
  );
417
  <a class="button button-primary"
418
  href="<?php echo wp_nonce_url( self_admin_url( 'update.php?' . ( ( isset( $addon_info['has_paid_plan'] ) && $addon_info['has_paid_plan'] ) ? 'fs_allow_updater_and_dialog=true&' : '' ) . 'action=install-plugin&plugin=' . $addon_info['slug'] ), 'install-plugin_' . $addon_info['slug'] ) ?>"><?php fs_esc_html_echo_inline( 'Install Now', 'install-now', $slug ) ?></a>
419
  <?php else : ?>
420
+ <a target="_blank" rel="noopener" class="button button-primary"
421
  href="<?php echo $fs->_get_latest_download_local_url( $addon_id ) ?>"><?php echo esc_html( $download_latest_text ) ?></a>
422
  <?php endif ?>
423
  <?php endif ?>
common/vendor/freemius/templates/account/payments.php CHANGED
@@ -47,7 +47,7 @@
47
  <td><?php echo $payment->formatted_gross() ?></td>
48
  <td><?php if (! $payment->is_migrated() ) : ?><a href="<?php echo $fs->_get_invoice_api_url( $payment->id ) ?>"
49
  class="button button-small"
50
- target="_blank"><?php fs_esc_html_echo_inline( 'Invoice', 'invoice', $slug ) ?></a><?php endif ?></td>
51
  </tr>
52
  <?php $odd = ! $odd; endforeach ?>
53
  </tbody>
47
  <td><?php echo $payment->formatted_gross() ?></td>
48
  <td><?php if (! $payment->is_migrated() ) : ?><a href="<?php echo $fs->_get_invoice_api_url( $payment->id ) ?>"
49
  class="button button-small"
50
+ target="_blank" rel="noopener"><?php fs_esc_html_echo_inline( 'Invoice', 'invoice', $slug ) ?></a><?php endif ?></td>
51
  </tr>
52
  <?php $odd = ! $odd; endforeach ?>
53
  </tbody>
common/vendor/freemius/templates/add-ons.php CHANGED
@@ -332,11 +332,11 @@
332
  }
333
  ?>
334
  <?php else : ?>
335
- <a target="_blank" class="button button-primary" href="<?php echo $latest_download_local_url ?>"><?php echo esc_html( $download_latest_text ) ?></a>
336
  <?php endif ?>
337
  <div class="button button-primary fs-dropdown-arrow-button"><span class="fs-dropdown-arrow"></span><ul class="fs-dropdown-list" style="display: none">
338
  <?php if ( $is_allowed_to_install && ! empty( $latest_download_local_url ) ) : ?>
339
- <li><a target="_blank" href="<?php echo $latest_download_local_url ?>"><?php echo esc_html( $download_latest_text ) ?></a></li>
340
  <?php endif ?>
341
  <li><?php
342
  echo sprintf(
332
  }
333
  ?>
334
  <?php else : ?>
335
+ <a target="_blank" rel="noopener" class="button button-primary" href="<?php echo $latest_download_local_url ?>"><?php echo esc_html( $download_latest_text ) ?></a>
336
  <?php endif ?>
337
  <div class="button button-primary fs-dropdown-arrow-button"><span class="fs-dropdown-arrow"></span><ul class="fs-dropdown-list" style="display: none">
338
  <?php if ( $is_allowed_to_install && ! empty( $latest_download_local_url ) ) : ?>
339
+ <li><a target="_blank" rel="noopener" href="<?php echo $latest_download_local_url ?>"><?php echo esc_html( $download_latest_text ) ?></a></li>
340
  <?php endif ?>
341
  <li><?php
342
  echo sprintf(
common/vendor/freemius/templates/auto-installation.php CHANGED
@@ -93,7 +93,7 @@
93
  fs_esc_html_inline( 'An automated download and installation of %s (paid version) from %s will start in %s. If you would like to do it manually - click the cancellation button now.', 'installing-in-n', $slug ),
94
  $plugin_title,
95
  sprintf(
96
- '<a href="%s" target="_blank">%s</a>',
97
  'https://freemius.com',
98
  'freemius.com'
99
  ),
93
  fs_esc_html_inline( 'An automated download and installation of %s (paid version) from %s will start in %s. If you would like to do it manually - click the cancellation button now.', 'installing-in-n', $slug ),
94
  $plugin_title,
95
  sprintf(
96
+ '<a href="%s" target="_blank" rel="noopener">%s</a>',
97
  'https://freemius.com',
98
  'freemius.com'
99
  ),
common/vendor/freemius/templates/connect.php CHANGED
@@ -54,7 +54,7 @@
54
  ) );
55
  }
56
 
57
- $freemius_link = '<a href="' . $freemius_site_url . '" target="_blank" tabindex="1">freemius.com</a>';
58
 
59
  $error = fs_request_get( 'error' );
60
 
@@ -222,13 +222,13 @@
222
  esc_html( $default_optin_message ),
223
  '<b>' . esc_html( $fs->get_plugin_name() ) . '</b>',
224
  '<b>' . $current_user->user_login . '</b>',
225
- '<a href="' . $site_url . '" target="_blank">' . $site_url . '</a>',
226
  $freemius_link
227
  ),
228
  $first_name,
229
  $fs->get_plugin_name(),
230
  $current_user->user_login,
231
- '<a href="' . $site_url . '" target="_blank">' . $site_url . '</a>',
232
  $freemius_link,
233
  $is_gdpr_required
234
  );
@@ -399,11 +399,12 @@
399
  }
400
 
401
  $permissions['extensions'] = array(
402
- 'icon-class' => 'dashicons dashicons-menu',
403
- 'label' => $fs->get_text_inline( 'Plugins & Themes', 'permissions-extensions' ),
404
- 'desc' => $fs->get_text_inline( 'Title, slug, version, and is active', 'permissions-extensions_desc' ),
405
- 'priority' => 25,
406
- 'optional' => true,
 
407
  );
408
 
409
  // Allow filtering of the permissions list.
@@ -429,7 +430,7 @@
429
  class="fs-permission fs-<?php echo esc_attr( $id ); ?>">
430
  <i class="<?php echo esc_attr( $permission['icon-class'] ); ?>"></i>
431
  <?php if ( isset( $permission['optional'] ) && true === $permission['optional'] ) : ?>
432
- <div class="fs-switch fs-small fs-round fs-on">
433
  <div class="fs-toggle"></div>
434
  </div>
435
  <?php endif ?>
@@ -458,10 +459,10 @@
458
  </div>
459
  <?php endif ?>
460
  <div class="fs-terms">
461
- <a href="https://freemius.com/privacy/" target="_blank"
462
  tabindex="1"><?php fs_esc_html_echo_inline( 'Privacy Policy', 'privacy-policy', $slug ) ?></a>
463
  &nbsp;&nbsp;-&nbsp;&nbsp;
464
- <a href="<?php echo $require_license_key ? $freemius_plugin_terms_url : $freemius_usage_tracking_url ?>" target="_blank" tabindex="1"><?php $require_license_key ? fs_echo_inline( 'License Agreement', 'license-agreement', $slug ) : fs_echo_inline( 'Terms of Service', 'tos', $slug ) ?></a>
465
  </div>
466
  </div>
467
  <?php
54
  ) );
55
  }
56
 
57
+ $freemius_link = '<a href="' . $freemius_site_url . '" target="_blank" rel="noopener" tabindex="1">freemius.com</a>';
58
 
59
  $error = fs_request_get( 'error' );
60
 
222
  esc_html( $default_optin_message ),
223
  '<b>' . esc_html( $fs->get_plugin_name() ) . '</b>',
224
  '<b>' . $current_user->user_login . '</b>',
225
+ '<a href="' . $site_url . '" target="_blank" rel="noopener noreferrer">' . $site_url . '</a>',
226
  $freemius_link
227
  ),
228
  $first_name,
229
  $fs->get_plugin_name(),
230
  $current_user->user_login,
231
+ '<a href="' . $site_url . '" target="_blank" rel="noopener noreferrer">' . $site_url . '</a>',
232
  $freemius_link,
233
  $is_gdpr_required
234
  );
399
  }
400
 
401
  $permissions['extensions'] = array(
402
+ 'icon-class' => 'dashicons dashicons-menu',
403
+ 'label' => $fs->get_text_inline( 'Plugins & Themes', 'permissions-extensions' ),
404
+ 'desc' => $fs->get_text_inline( 'Title, slug, version, and is active', 'permissions-extensions_desc' ),
405
+ 'priority' => 25,
406
+ 'optional' => true,
407
+ 'default' => $fs->apply_filters( 'permission_extensions_default', true )
408
  );
409
 
410
  // Allow filtering of the permissions list.
430
  class="fs-permission fs-<?php echo esc_attr( $id ); ?>">
431
  <i class="<?php echo esc_attr( $permission['icon-class'] ); ?>"></i>
432
  <?php if ( isset( $permission['optional'] ) && true === $permission['optional'] ) : ?>
433
+ <div class="fs-switch fs-small fs-round fs-<?php echo (! isset( $permission['default'] ) || true === $permission['default'] ) ? 'on' : 'off' ?>">
434
  <div class="fs-toggle"></div>
435
  </div>
436
  <?php endif ?>
459
  </div>
460
  <?php endif ?>
461
  <div class="fs-terms">
462
+ <a href="https://freemius.com/privacy/" target="_blank" rel="noopener"
463
  tabindex="1"><?php fs_esc_html_echo_inline( 'Privacy Policy', 'privacy-policy', $slug ) ?></a>
464
  &nbsp;&nbsp;-&nbsp;&nbsp;
465
+ <a href="<?php echo $require_license_key ? $freemius_plugin_terms_url : $freemius_usage_tracking_url ?>" target="_blank" rel="noopener" tabindex="1"><?php $require_license_key ? fs_echo_inline( 'License Agreement', 'license-agreement', $slug ) : fs_echo_inline( 'Terms of Service', 'tos', $slug ) ?></a>
466
  </div>
467
  </div>
468
  <?php
common/vendor/freemius/templates/forms/affiliation.php CHANGED
@@ -83,6 +83,9 @@
83
  }
84
 
85
  $apply_to_become_affiliate_text = fs_text_inline( 'Apply to become an affiliate', 'apply-to-become-an-affiliate', $slug );
 
 
 
86
  ?>
87
  <div id="fs_affiliation_content_wrapper" class="wrap">
88
  <form method="post" action="">
@@ -104,7 +107,7 @@
104
  fs_esc_html_inline( "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s.", 'affiliate-application-accepted', $slug ),
105
  $plugin_title,
106
  sprintf(
107
- '<a href="%s" target="_blank">%s</a>',
108
  $members_dashboard_login_url,
109
  $members_dashboard_login_url
110
  )
@@ -217,11 +220,17 @@
217
  <p class="description"><?php echo esc_html( sprintf( fs_text_inline( 'Please provide details on how you intend to promote %s (please be as specific as possible).', 'promotion-method-desc-field-desc', $slug ), $plugin_title ) ) ?></p>
218
  <?php endif ?>
219
  </div>
 
 
 
 
 
 
220
  </form>
221
  </div>
222
  <?php if ( ! $is_affiliate ) : ?>
223
  <a id="cancel_button" href="#" class="button button-secondary button-cancel" style="display: none"><?php fs_esc_html_echo_inline( 'Cancel', 'cancel', $slug ) ?></a>
224
- <a id="submit_button" class="button button-primary" href="#" style="display: none"><?php echo esc_html( $apply_to_become_affiliate_text ) ?></a>
225
  <a id="apply_button" class="button button-primary" href="#"><?php fs_esc_html_echo_inline( 'Become an affiliate', 'become-an-affiliate', $slug ) ?></a>
226
  <?php endif ?>
227
  </div>
@@ -242,7 +251,8 @@
242
  $errorMessageContainer = $('#error_message'),
243
  $domain = $('#domain'),
244
  $addDomain = $('#add_domain'),
245
- $extraDomainsContainer = $('#extra_domains_container');
 
246
 
247
  $applyButton.click(function (evt) {
248
  evt.preventDefault();
@@ -360,7 +370,7 @@
360
  data : {
361
  action : '<?php echo $fs->get_ajax_action( 'submit_affiliate_application' ) ?>',
362
  security : '<?php echo $fs->get_ajax_security( 'submit_affiliate_application' ) ?>',
363
- module_id: '<?php echo $fs->get_id() ?>',
364
  affiliate: affiliate
365
  },
366
  beforeSend: function () {
@@ -472,13 +482,26 @@
472
 
473
  window.scrollTo(0, 0);
474
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
475
  });
476
  </script>
477
  </div>
478
  <?php
479
  $params = array(
480
  'page' => 'affiliation',
481
- 'module_id' => $fs->get_id(),
482
  'module_slug' => $slug,
483
  'module_version' => $fs->get_plugin_version(),
484
  );
83
  }
84
 
85
  $apply_to_become_affiliate_text = fs_text_inline( 'Apply to become an affiliate', 'apply-to-become-an-affiliate', $slug );
86
+
87
+ $module_id = $fs->get_id();
88
+ $affiliate_program_terms_url = "https://freemius.com/plugin/{$module_id}/{$slug}/legal/affiliate-program/";
89
  ?>
90
  <div id="fs_affiliation_content_wrapper" class="wrap">
91
  <form method="post" action="">
107
  fs_esc_html_inline( "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s.", 'affiliate-application-accepted', $slug ),
108
  $plugin_title,
109
  sprintf(
110
+ '<a href="%s" target="_blank" rel="noopener">%s</a>',
111
  $members_dashboard_login_url,
112
  $members_dashboard_login_url
113
  )
220
  <p class="description"><?php echo esc_html( sprintf( fs_text_inline( 'Please provide details on how you intend to promote %s (please be as specific as possible).', 'promotion-method-desc-field-desc', $slug ), $plugin_title ) ) ?></p>
221
  <?php endif ?>
222
  </div>
223
+ <?php if ( ! $is_affiliate ) : ?>
224
+ <div>
225
+ <input type="checkbox" id="legal_consent_checkbox">
226
+ <label for="legal_consent_checkbox">I agree to the <a href="<?php echo $affiliate_program_terms_url ?>" target="_blank" rel="noopener">Referrer Program</a>'s terms & conditions.</label>
227
+ </div>
228
+ <?php endif ?>
229
  </form>
230
  </div>
231
  <?php if ( ! $is_affiliate ) : ?>
232
  <a id="cancel_button" href="#" class="button button-secondary button-cancel" style="display: none"><?php fs_esc_html_echo_inline( 'Cancel', 'cancel', $slug ) ?></a>
233
+ <a id="submit_button" class="button button-primary disabled" href="#" style="display: none"><?php echo esc_html( $apply_to_become_affiliate_text ) ?></a>
234
  <a id="apply_button" class="button button-primary" href="#"><?php fs_esc_html_echo_inline( 'Become an affiliate', 'become-an-affiliate', $slug ) ?></a>
235
  <?php endif ?>
236
  </div>
251
  $errorMessageContainer = $('#error_message'),
252
  $domain = $('#domain'),
253
  $addDomain = $('#add_domain'),
254
+ $extraDomainsContainer = $('#extra_domains_container'),
255
+ $legalConsentCheckbox = $( '#legal_consent_checkbox' );
256
 
257
  $applyButton.click(function (evt) {
258
  evt.preventDefault();
370
  data : {
371
  action : '<?php echo $fs->get_ajax_action( 'submit_affiliate_application' ) ?>',
372
  security : '<?php echo $fs->get_ajax_security( 'submit_affiliate_application' ) ?>',
373
+ module_id: '<?php echo $module_id ?>',
374
  affiliate: affiliate
375
  },
376
  beforeSend: function () {
482
 
483
  window.scrollTo(0, 0);
484
  }
485
+
486
+ /**
487
+ * @author Xiaheng Chen (@xhchen)
488
+ *
489
+ * @since 2.4.0
490
+ */
491
+ $legalConsentCheckbox.click( function () {
492
+ if ( $( this ).prop( 'checked' ) ) {
493
+ $submitButton.removeClass( 'disabled' );
494
+ } else {
495
+ $submitButton.addClass( 'disabled' );
496
+ }
497
+ } );
498
  });
499
  </script>
500
  </div>
501
  <?php
502
  $params = array(
503
  'page' => 'affiliation',
504
+ 'module_id' => $module_id,
505
  'module_slug' => $slug,
506
  'module_version' => $fs->get_plugin_version(),
507
  );
common/vendor/freemius/templates/forms/deactivation/form.php CHANGED
@@ -79,8 +79,8 @@ HTML;
79
  ?>
80
  <script type="text/javascript">
81
  (function ($) {
82
- var reasonsHtml = <?php echo json_encode( $reasons_list_items_html ) ?>,
83
- modalHtml =
84
  '<div class="fs-modal fs-modal-deactivation-feedback<?php echo empty( $confirmation_message ) ? ' no-confirmation-message' : ''; ?>">'
85
  + ' <div class="fs-modal-dialog">'
86
  + ' <div class="fs-modal-header">'
@@ -97,19 +97,19 @@ HTML;
97
  + ' </div>'
98
  + ' </div>'
99
  + '</div>',
100
- $modal = $(modalHtml),
101
- $deactivateLink = $('#the-list .deactivate > [data-module-id=<?php echo $fs->get_id() ?>].fs-module-id').prev(),
102
- selectedReasonID = false,
103
- redirectLink = '',
104
- $anonymousFeedback = $modal.find( '.anonymous-feedback-label' ),
105
- isAnonymous = <?php echo ( $is_anonymous ? 'true' : 'false' ); ?>,
106
- otherReasonID = <?php echo Freemius::REASON_OTHER; ?>,
107
- dontShareDataReasonID = <?php echo Freemius::REASON_DONT_LIKE_TO_SHARE_MY_INFORMATION; ?>,
108
- deleteThemeUpdateData = <?php echo $fs->is_theme() && $fs->is_premium() && ! $fs->has_any_active_valid_license() ? 'true' : 'false' ?>,
109
  $subscriptionCancellationModal = $( '.fs-modal-subscription-cancellation-<?php echo $fs->get_id() ?>' ),
110
- showDeactivationFeedbackForm = <?php echo ( $show_deactivation_feedback_form ? 'true' : 'false' ) ?>;
 
111
 
112
- $modal.appendTo($('body'));
113
 
114
  if ( 0 !== $subscriptionCancellationModal.length ) {
115
  $subscriptionCancellationModal.on( '<?php echo $fs->get_action_tag( 'subscription_cancellation_action' ) ?>', function( evt, cancelSubscription ) {
@@ -181,7 +181,11 @@ HTML;
181
  registerEventHandlers();
182
 
183
  function registerEventHandlers() {
184
- $deactivateLink.click(function (evt) {
 
 
 
 
185
  evt.preventDefault();
186
 
187
  redirectLink = $(this).attr('href');
79
  ?>
80
  <script type="text/javascript">
81
  (function ($) {
82
+ var reasonsHtml = <?php echo json_encode( $reasons_list_items_html ) ?>,
83
+ modalHtml =
84
  '<div class="fs-modal fs-modal-deactivation-feedback<?php echo empty( $confirmation_message ) ? ' no-confirmation-message' : ''; ?>">'
85
  + ' <div class="fs-modal-dialog">'
86
  + ' <div class="fs-modal-header">'
97
  + ' </div>'
98
  + ' </div>'
99
  + '</div>',
100
+ $modal = $(modalHtml),
101
+ selectedReasonID = false,
102
+ redirectLink = '',
103
+ $anonymousFeedback = $modal.find( '.anonymous-feedback-label' ),
104
+ isAnonymous = <?php echo ( $is_anonymous ? 'true' : 'false' ); ?>,
105
+ otherReasonID = <?php echo Freemius::REASON_OTHER; ?>,
106
+ dontShareDataReasonID = <?php echo Freemius::REASON_DONT_LIKE_TO_SHARE_MY_INFORMATION; ?>,
107
+ deleteThemeUpdateData = <?php echo $fs->is_theme() && $fs->is_premium() && ! $fs->has_any_active_valid_license() ? 'true' : 'false' ?>,
 
108
  $subscriptionCancellationModal = $( '.fs-modal-subscription-cancellation-<?php echo $fs->get_id() ?>' ),
109
+ showDeactivationFeedbackForm = <?php echo ( $show_deactivation_feedback_form ? 'true' : 'false' ) ?>,
110
+ $body = $( 'body' );
111
 
112
+ $modal.appendTo( $body );
113
 
114
  if ( 0 !== $subscriptionCancellationModal.length ) {
115
  $subscriptionCancellationModal.on( '<?php echo $fs->get_action_tag( 'subscription_cancellation_action' ) ?>', function( evt, cancelSubscription ) {
181
  registerEventHandlers();
182
 
183
  function registerEventHandlers() {
184
+ $body.on( 'click', '#the-list .deactivate > a', function ( evt ) {
185
+ if ( 0 === $( this ).next( '[data-module-id=<?php echo $fs->get_id() ?>].fs-module-id' ).length ) {
186
+ return true;
187
+ }
188
+
189
  evt.preventDefault();
190
 
191
  redirectLink = $(this).attr('href');
common/vendor/freemius/templates/forms/license-activation.php CHANGED
@@ -35,7 +35,7 @@
35
  // Insights platform information.
36
  $fs->get_usage_tracking_terms_url();
37
 
38
- $freemius_link = '<a href="' . $freemius_site_url . '" target="_blank" tabindex="0">freemius.com</a>';
39
 
40
  $message_below_input_field = sprintf(
41
  fs_text_inline( 'The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license.', 'license-sync-disclaimer', $slug ),
@@ -229,16 +229,16 @@ HTML;
229
  + ' </div>'
230
  + '</div>',
231
  $modal = $(modalHtml),
232
- $activateLicenseLink = $('span.activate-license.<?php echo $unique_affix ?> a, .activate-license-trigger.<?php echo $unique_affix ?>'),
233
  $activateLicenseButton = $modal.find('.button-activate-license'),
234
  $licenseKeyInput = $modal.find( 'input.fs-license-key' ),
235
  $licenseActivationMessage = $modal.find( '.license-activation-message' ),
236
  isNetworkActivation = <?php echo $is_network_activation ? 'true' : 'false' ?>,
237
  isUserChangeSupported = <?php echo $is_user_change_supported ? 'true' : 'false' ?>,
238
  isSingleSiteActivation = false,
239
- $ownershipChangeOptionContainer = $modal.find( '.ownership-change-option-container' );
 
240
 
241
- $modal.appendTo($('body'));
242
 
243
  var
244
  $licensesDropdown = $modal.find( '.fs-licenses' ),
@@ -459,7 +459,7 @@ HTML;
459
  });
460
  }
461
 
462
- $activateLicenseLink.click(function (evt) {
463
  evt.preventDefault();
464
 
465
  showModal( evt );
@@ -635,7 +635,7 @@ HTML;
635
 
636
  registerEventHandlers();
637
 
638
- $('body').trigger('licenseActivationLoaded');
639
 
640
  /**
641
  * @author Leo Fajardo (@leorw)
@@ -800,7 +800,7 @@ HTML;
800
 
801
  // Display the dialog box.
802
  $modal.addClass('active');
803
- $('body').addClass('has-fs-modal');
804
 
805
  var
806
  $singleInstallDetails = $( evt.target ).parents( 'tr.fs-install-details' ),
@@ -812,7 +812,9 @@ HTML;
812
  $singleInstallDetails.prev().data( 'blog-id' ) :
813
  null;
814
 
 
815
  $multisiteOptionsContainer.toggle( isNetworkActivation && ! isSingleSiteActivation );
 
816
 
817
  if ( hasLicenseTypes ) {
818
  $licenseTypes.attr( 'checked', false );
@@ -832,7 +834,7 @@ HTML;
832
 
833
  function closeModal() {
834
  $modal.removeClass('active');
835
- $('body').removeClass('has-fs-modal');
836
  }
837
 
838
  function resetActivateLicenseButton() {
35
  // Insights platform information.
36
  $fs->get_usage_tracking_terms_url();
37
 
38
+ $freemius_link = '<a href="' . $freemius_site_url . '" target="_blank" rel="noopener" tabindex="0">freemius.com</a>';
39
 
40
  $message_below_input_field = sprintf(
41
  fs_text_inline( 'The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license.', 'license-sync-disclaimer', $slug ),
229
  + ' </div>'
230
  + '</div>',
231
  $modal = $(modalHtml),
 
232
  $activateLicenseButton = $modal.find('.button-activate-license'),
233
  $licenseKeyInput = $modal.find( 'input.fs-license-key' ),
234
  $licenseActivationMessage = $modal.find( '.license-activation-message' ),
235
  isNetworkActivation = <?php echo $is_network_activation ? 'true' : 'false' ?>,
236
  isUserChangeSupported = <?php echo $is_user_change_supported ? 'true' : 'false' ?>,
237
  isSingleSiteActivation = false,
238
+ $ownershipChangeOptionContainer = $modal.find( '.ownership-change-option-container' ),
239
+ $body = $( 'body' );
240
 
241
+ $modal.appendTo( $body );
242
 
243
  var
244
  $licensesDropdown = $modal.find( '.fs-licenses' ),
459
  });
460
  }
461
 
462
+ $body.on( 'click', 'span.activate-license.<?php echo $unique_affix ?> a, .activate-license-trigger.<?php echo $unique_affix ?>', function (evt) {
463
  evt.preventDefault();
464
 
465
  showModal( evt );
635
 
636
  registerEventHandlers();
637
 
638
+ $body.trigger('licenseActivationLoaded');
639
 
640
  /**
641
  * @author Leo Fajardo (@leorw)
800
 
801
  // Display the dialog box.
802
  $modal.addClass('active');
803
+ $body.addClass('has-fs-modal');
804
 
805
  var
806
  $singleInstallDetails = $( evt.target ).parents( 'tr.fs-install-details' ),
812
  $singleInstallDetails.prev().data( 'blog-id' ) :
813
  null;
814
 
815
+ <?php if ( $fs->apply_filters( 'enable_per_site_activation', true ) ) : ?>
816
  $multisiteOptionsContainer.toggle( isNetworkActivation && ! isSingleSiteActivation );
817
+ <?php endif ?>
818
 
819
  if ( hasLicenseTypes ) {
820
  $licenseTypes.attr( 'checked', false );
834
 
835
  function closeModal() {
836
  $modal.removeClass('active');
837
+ $body.removeClass('has-fs-modal');
838
  }
839
 
840
  function resetActivateLicenseButton() {
common/vendor/freemius/templates/forms/optout.php CHANGED
@@ -49,7 +49,7 @@
49
  fs_text_inline( 'By clicking "Opt Out", we will no longer be sending any data from %s to %s.', 'opt-out-message-clicking-opt-out', $slug ),
50
  $plugin_title,
51
  sprintf(
52
- '<a href="%s" target="_blank">%s</a>',
53
  'https://freemius.com',
54
  'freemius.com'
55
  )
@@ -98,20 +98,21 @@
98
  $modal = $(modalHtml),
99
  $adminNotice = $( <?php echo json_encode( $admin_notice_html ) ?> ),
100
  action = '<?php echo $action ?>',
101
- $actionLink = $( 'span.opt-in-or-opt-out.<?php echo $slug ?> a' ),
102
  $optOutButton = $modal.find( '.button-opt-out' ),
103
  $optOutErrorMessage = $modal.find( '.opt-out-error-message' ),
104
  $extensionsTracking = $modal.find( '.fs-permission-extensions' ),
 
105
  moduleID = '<?php echo $fs->get_id() ?>';
106
 
107
- $actionLink.attr( 'data-action', action );
108
- $modal.appendTo( $( 'body' ) );
109
 
110
  function registerActionLinkClick() {
111
- $actionLink.click(function( evt ) {
112
  evt.preventDefault();
113
 
114
- if ( 'stop_tracking' == $actionLink.attr( 'data-action' ) ) {
115
  showModal();
116
  } else {
117
  optIn();
@@ -151,12 +152,12 @@
151
 
152
  // Display the dialog box.
153
  $modal.addClass( 'active' );
154
- $( 'body' ).addClass( 'has-fs-modal' );
155
  }
156
 
157
  function closeModal() {
158
  $modal.removeClass( 'active' );
159
- $( 'body' ).removeClass( 'has-fs-modal' );
160
  }
161
 
162
  function resetOptOutButton() {
@@ -178,6 +179,8 @@
178
  }
179
 
180
  function sendRequest() {
 
 
181
  $.ajax({
182
  url: ajaxurl,
183
  method: 'POST',
@@ -216,7 +219,7 @@
216
  }
217
  }
218
 
219
- $actionLink.attr( 'data-action', action );
220
  } else {
221
  showError( resultObj.error );
222
  resetOptOutButton();
@@ -315,7 +318,11 @@
315
  '<?php echo ( $fs->is_registered() ? '' : esc_js( $reconnect_url ) ) ?>' :
316
  '');
317
 
318
- $actionLink = $('<a id="fs_theme_opt_in_out" href="' + encodeURI(href) + '" class="button" data-action="' + action + '">' + label + '</a>');
 
 
 
 
319
 
320
  $('.theme-wrap .theme-actions .active-theme').append($actionLink);
321
 
49
  fs_text_inline( 'By clicking "Opt Out", we will no longer be sending any data from %s to %s.', 'opt-out-message-clicking-opt-out', $slug ),
50
  $plugin_title,
51
  sprintf(
52
+ '<a href="%s" target="_blank" rel="noopener">%s</a>',
53
  'https://freemius.com',
54
  'freemius.com'
55
  )
98
  $modal = $(modalHtml),
99
  $adminNotice = $( <?php echo json_encode( $admin_notice_html ) ?> ),
100
  action = '<?php echo $action ?>',
101
+ actionLinkSelector = 'span.opt-in-or-opt-out.<?php echo $slug ?> a',
102
  $optOutButton = $modal.find( '.button-opt-out' ),
103
  $optOutErrorMessage = $modal.find( '.opt-out-error-message' ),
104
  $extensionsTracking = $modal.find( '.fs-permission-extensions' ),
105
+ $body = $( 'body' ),
106
  moduleID = '<?php echo $fs->get_id() ?>';
107
 
108
+ $modal.data( 'action', action );
109
+ $modal.appendTo( $body );
110
 
111
  function registerActionLinkClick() {
112
+ $body.on( 'click', actionLinkSelector, function( evt ) {
113
  evt.preventDefault();
114
 
115
+ if ( 'stop_tracking' == $modal.data( 'action' ) ) {
116
  showModal();
117
  } else {
118
  optIn();
152
 
153
  // Display the dialog box.
154
  $modal.addClass( 'active' );
155
+ $body.addClass( 'has-fs-modal' );
156
  }
157
 
158
  function closeModal() {
159
  $modal.removeClass( 'active' );
160
+ $body.removeClass( 'has-fs-modal' );
161
  }
162
 
163
  function resetOptOutButton() {
179
  }
180
 
181
  function sendRequest() {
182
+ var $actionLink = $( actionLinkSelector );
183
+
184
  $.ajax({
185
  url: ajaxurl,
186
  method: 'POST',
219
  }
220
  }
221
 
222
+ $modal.data( 'action', action );
223
  } else {
224
  showError( resultObj.error );
225
  resetOptOutButton();
318
  '<?php echo ( $fs->is_registered() ? '' : esc_js( $reconnect_url ) ) ?>' :
319
  '');
320
 
321
+ var $actionLink = $('<a id="fs_theme_opt_in_out" href="' + encodeURI(href) + '" class="button">' + label + '</a>');
322
+
323
+ actionLinkSelector = '#fs_theme_opt_in_out';
324
+
325
+ $modal.data( 'action', action );
326
 
327
  $('.theme-wrap .theme-actions .active-theme').append($actionLink);
328
 
common/vendor/freemius/templates/forms/subscription-cancellation.php CHANGED
@@ -133,7 +133,7 @@ fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
133
  '<div class="fs-modal fs-modal-subscription-cancellation fs-modal-subscription-cancellation-<?php echo $fs->get_id() ?>">'
134
  + ' <div class="fs-modal-dialog">'
135
  + ' <div class="fs-modal-header">'
136
- + ' <h4><?php echo esc_attr( sprintf( fs_text_inline( 'Cancel %s?', 'cancel-x', $slug ), ucfirst( $subscription_cancellation_context ) ) ) ?></h4>'
137
  + ' </div>'
138
  + ' <div class="fs-modal-body">'
139
  + ' <div class="fs-modal-panel active">' + <?php echo json_encode( $subscription_cancellation_html ) ?> + '<p class="fs-price-increase-warning" style="display: none;">' + <?php echo json_encode( $prices_increase_text ) ?> + '</p></div>'
133
  '<div class="fs-modal fs-modal-subscription-cancellation fs-modal-subscription-cancellation-<?php echo $fs->get_id() ?>">'
134
  + ' <div class="fs-modal-dialog">'
135
  + ' <div class="fs-modal-header">'
136
+ + ' <h4><?php echo esc_html( sprintf( fs_text_inline( 'Cancel %s?', 'cancel-x', $slug ), ucfirst( $subscription_cancellation_context ) ) ) ?></h4>'
137
  + ' </div>'
138
  + ' <div class="fs-modal-body">'
139
  + ' <div class="fs-modal-panel active">' + <?php echo json_encode( $subscription_cancellation_html ) ?> + '<p class="fs-price-increase-warning" style="display: none;">' + <?php echo json_encode( $prices_increase_text ) ?> + '</p></div>'
common/vendor/freemius/templates/forms/trial-start.php CHANGED
@@ -28,7 +28,7 @@
28
  fs_text_inline( 'For compliance with the WordPress.org guidelines, before we start the trial we ask that you opt in with your user and non-sensitive site information, allowing the %s to periodically send data to %s to check for version updates and to validate your trial.', 'start-trial-prompt-message', $slug ),
29
  $fs->get_module_type(),
30
  sprintf(
31
- '<a href="%s" target="_blank">%s</a>',
32
  'https://freemius.com',
33
  'freemius.com'
34
  )
28
  fs_text_inline( 'For compliance with the WordPress.org guidelines, before we start the trial we ask that you opt in with your user and non-sensitive site information, allowing the %s to periodically send data to %s to check for version updates and to validate your trial.', 'start-trial-prompt-message', $slug ),
29
  $fs->get_module_type(),
30
  sprintf(
31
+ '<a href="%s" target="_blank" rel="noopener">%s</a>',
32
  'https://freemius.com',
33
  'freemius.com'
34
  )
common/vendor/freemius/templates/pricing.php CHANGED
@@ -1,177 +1,209 @@
1
- <?php
2
- /**
3
- * @package Freemius
4
- * @copyright Copyright (c) 2015, Freemius, Inc.
5
- * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6
- * @since 1.0.3
7
- */
8
-
9
- /**
10
- * Note for WordPress.org Theme/Plugin reviewer:
11
- * Freemius is an SDK for plugin and theme developers. Since the core
12
- * of the SDK is relevant both for plugins and themes, for obvious reasons,
13
- * we only develop and maintain one code base.
14
- *
15
- * This code (and page) will not run for wp.org themes (only plugins).
16
- *
17
- * In addition, this page loads an i-frame. We intentionally named it 'frame'
18
- * so it will pass the "Theme Check" that is looking for the string "i" . "frame".
19
- *
20
- * UPDATE:
21
- * After ongoing conversations with the WordPress.org TRT we received
22
- * an official approval for including i-frames in the theme's WP Admin setting's
23
- * page tab (the SDK will never add any i-frames on the sitefront). i-frames
24
- * were never against the guidelines, but we wanted to get the team's blessings
25
- * before we move forward. For the record, I got the final approval from
26
- * Ulrich Pogson (@grapplerulrich), a team lead at the TRT during WordCamp
27
- * Europe 2017 (June 16th, 2017).
28
- *
29
- * If you have any questions or need clarifications, please don't hesitate
30
- * pinging me on slack, my username is @svovaf.
31
- *
32
- * @author Vova Feldman (@svovaf)
33
- * @since 1.2.2
34
- */
35
-
36
- if ( ! defined( 'ABSPATH' ) ) {
37
- exit;
38
- }
39
-
40
- wp_enqueue_script( 'jquery' );
41
- wp_enqueue_script( 'json2' );
42
- fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
43
- fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
44
- fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
45
-
46
- /**
47
- * @var array $VARS
48
- * @var Freemius $fs
49
- */
50
- $fs = freemius( $VARS['id'] );
51
- $slug = $fs->get_slug();
52
- $timestamp = time();
53
-
54
- $context_params = array(
55
- 'plugin_id' => $fs->get_id(),
56
- 'plugin_public_key' => $fs->get_public_key(),
57
- 'plugin_version' => $fs->get_plugin_version(),
58
- );
59
-
60
- $bundle_id = $fs->get_bundle_id();
61
- if ( ! is_null( $bundle_id ) ) {
62
- $context_params['bundle_id'] = $bundle_id;
63
- }
64
-
65
- // Get site context secure params.
66
- if ( $fs->is_registered() ) {
67
- $context_params = array_merge( $context_params, FS_Security::instance()->get_context_params(
68
- $fs->get_site(),
69
- $timestamp,
70
- 'upgrade'
71
- ) );
72
- } else {
73
- $context_params['home_url'] = home_url();
74
- }
75
-
76
- if ( $fs->is_payments_sandbox() ) // Append plugin secure token for sandbox mode authentication.)
77
- {
78
- $context_params['sandbox'] = FS_Security::instance()->get_secure_token(
79
- $fs->get_plugin(),
80
- $timestamp,
81
- 'checkout'
82
- );
83
- }
84
-
85
- $query_params = array_merge( $context_params, $_GET, array(
86
- 'next' => $fs->_get_sync_license_url( false, false ),
87
- 'plugin_version' => $fs->get_plugin_version(),
88
- // Billing cycle.
89
- 'billing_cycle' => fs_request_get( 'billing_cycle', WP_FS__PERIOD_ANNUALLY ),
90
- 'is_network_admin' => fs_is_network_admin() ? 'true' : 'false',
91
- 'currency' => $fs->apply_filters( 'default_currency', 'usd' ),
92
- ) );
93
-
94
- if ( ! $fs->is_registered() ) {
95
- $template_data = array(
96
- 'id' => $fs->get_id(),
97
- );
98
- fs_require_template( 'forms/trial-start.php', $template_data);
99
- }
100
-
101
- $view_params = array(
102
- 'id' => $VARS['id'],
103
- 'page' => strtolower( $fs->get_text_x_inline( 'Pricing', 'noun', 'pricing' ) ),
104
- );
105
- fs_require_once_template('secure-https-header.php', $view_params);
106
-
107
- $has_tabs = $fs->_add_tabs_before_content();
108
-
109
- if ( $has_tabs ) {
110
- $query_params['tabs'] = 'true';
111
- }
112
- ?>
113
- <div id="fs_pricing" class="wrap fs-section fs-full-size-wrapper">
114
- <div id="fs_frame"></div>
115
- <form action="" method="POST">
116
- <input type="hidden" name="user_id"/>
117
- <input type="hidden" name="user_email"/>
118
- <input type="hidden" name="site_id"/>
119
- <input type="hidden" name="public_key"/>
120
- <input type="hidden" name="secret_key"/>
121
- <input type="hidden" name="action" value="account"/>
122
- </form>
123
-
124
- <script type="text/javascript">
125
- (function ($, undef) {
126
- $(function () {
127
- var
128
- // Keep track of the i-frame height.
129
- frame_height = 800,
130
- base_url = '<?php echo WP_FS__ADDRESS ?>',
131
- // Pass the parent page URL into the i-frame in a meaningful way (this URL could be
132
- // passed via query string or hard coded into the child page, it depends on your needs).
133
- src = base_url + '/pricing/?<?php echo http_build_query( $query_params ) ?>#' + encodeURIComponent(document.location.href),
134
-
135
- // Append the I-frame into the DOM.
136
- frame = $('<i' + 'frame " src="' + src + '" width="100%" height="' + frame_height + 'px" scrolling="no" frameborder="0" style="background: transparent; width: 1px; min-width: 100%;"><\/i' + 'frame>')
137
- .appendTo('#fs_frame');
138
-
139
- FS.PostMessage.init(base_url, [frame[0]]);
140
-
141
- FS.PostMessage.receive('height', function (data) {
142
- var h = data.height;
143
- if (!isNaN(h) && h > 0 && h != frame_height) {
144
- frame_height = h;
145
- frame.height(frame_height + 'px');
146
-
147
- FS.PostMessage.postScroll(frame[0]);
148
- }
149
- });
150
-
151
- FS.PostMessage.receive('get_dimensions', function (data) {
152
- FS.PostMessage.post('dimensions', {
153
- height : $(document.body).height(),
154
- scrollTop: $(document).scrollTop()
155
- }, frame[0]);
156
- });
157
-
158
- FS.PostMessage.receive('start_trial', function (data) {
159
- openTrialConfirmationModal(data);
160
- });
161
- });
162
- })(jQuery);
163
- </script>
164
- </div>
165
- <?php
166
- if ( $has_tabs ) {
167
- $fs->_add_tabs_after_content();
168
- }
169
-
170
- $params = array(
171
- 'page' => 'pricing',
172
- 'module_id' => $fs->get_id(),
173
- 'module_type' => $fs->get_module_type(),
174
- 'module_slug' => $slug,
175
- 'module_version' => $fs->get_plugin_version(),
176
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  fs_require_template( 'powered-by.php', $params );
1
+ <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
6
+ * @since 1.0.3
7
+ */
8
+
9
+ /**
10
+ * Note for WordPress.org Theme/Plugin reviewer:
11
+ * Freemius is an SDK for plugin and theme developers. Since the core
12
+ * of the SDK is relevant both for plugins and themes, for obvious reasons,
13
+ * we only develop and maintain one code base.
14
+ *
15
+ * This code (and page) will not run for wp.org themes (only plugins).
16
+ *
17
+ * In addition, this page loads an i-frame. We intentionally named it 'frame'
18
+ * so it will pass the "Theme Check" that is looking for the string "i" . "frame".
19
+ *
20
+ * UPDATE:
21
+ * After ongoing conversations with the WordPress.org TRT we received
22
+ * an official approval for including i-frames in the theme's WP Admin setting's
23
+ * page tab (the SDK will never add any i-frames on the sitefront). i-frames
24
+ * were never against the guidelines, but we wanted to get the team's blessings
25
+ * before we move forward. For the record, I got the final approval from
26
+ * Ulrich Pogson (@grapplerulrich), a team lead at the TRT during WordCamp
27
+ * Europe 2017 (June 16th, 2017).
28
+ *
29
+ * If you have any questions or need clarifications, please don't hesitate
30
+ * pinging me on slack, my username is @svovaf.
31
+ *
32
+ * @author Vova Feldman (@svovaf)
33
+ * @since 1.2.2
34
+ */
35
+
36
+ if ( ! defined( 'ABSPATH' ) ) {
37
+ exit;
38
+ }
39
+
40
+ wp_enqueue_script( 'jquery' );
41
+ wp_enqueue_script( 'json2' );
42
+ fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
43
+ fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
44
+ fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
45
+
46
+ /**
47
+ * @var array $VARS
48
+ * @var Freemius $fs
49
+ */
50
+ $fs = freemius( $VARS['id'] );
51
+ $slug = $fs->get_slug();
52
+ $timestamp = time();
53
+
54
+ $context_params = array(
55
+ 'plugin_id' => $fs->get_id(),
56
+ 'plugin_public_key' => $fs->get_public_key(),
57
+ 'plugin_version' => $fs->get_plugin_version(),
58
+ );
59
+
60
+ $bundle_id = $fs->get_bundle_id();
61
+ if ( ! is_null( $bundle_id ) ) {
62
+ $context_params['bundle_id'] = $bundle_id;
63
+ }
64
+
65
+ // Get site context secure params.
66
+ if ( $fs->is_registered() ) {
67
+ $context_params = array_merge( $context_params, FS_Security::instance()->get_context_params(
68
+ $fs->get_site(),
69
+ $timestamp,
70
+ 'upgrade'
71
+ ) );
72
+ } else {
73
+ $context_params['home_url'] = home_url();
74
+ }
75
+
76
+ if ( $fs->is_payments_sandbox() ) // Append plugin secure token for sandbox mode authentication.)
77
+ {
78
+ $context_params['sandbox'] = FS_Security::instance()->get_secure_token(
79
+ $fs->get_plugin(),
80
+ $timestamp,
81
+ 'checkout'
82
+ );
83
+ }
84
+
85
+ $query_params = array_merge( $context_params, $_GET, array(
86
+ 'next' => $fs->_get_sync_license_url( false, false ),
87
+ 'plugin_version' => $fs->get_plugin_version(),
88
+ // Billing cycle.
89
+ 'billing_cycle' => fs_request_get( 'billing_cycle', WP_FS__PERIOD_ANNUALLY ),
90
+ 'is_network_admin' => fs_is_network_admin() ? 'true' : 'false',
91
+ 'currency' => $fs->apply_filters( 'default_currency', 'usd' ),
92
+ ) );
93
+
94
+ $use_external_pricing = $fs->should_use_external_pricing();
95
+
96
+ if ( ! $use_external_pricing ) {
97
+ $pricing_js_url = fs_asset_url( $fs->get_pricing_js_path() );
98
+ wp_enqueue_script( 'freemius-pricing', $pricing_js_url );
99
+ } else {
100
+ if ( ! $fs->is_registered() ) {
101
+ $template_data = array(
102
+ 'id' => $fs->get_id(),
103
+ );
104
+ fs_require_template( 'forms/trial-start.php', $template_data);
105
+ }
106
+
107
+ $view_params = array(
108
+ 'id' => $VARS['id'],
109
+ 'page' => strtolower( $fs->get_text_x_inline( 'Pricing', 'noun', 'pricing' ) ),
110
+ );
111
+ fs_require_once_template('secure-https-header.php', $view_params);
112
+ }
113
+
114
+ $has_tabs = $fs->_add_tabs_before_content();
115
+
116
+ if ( $has_tabs ) {
117
+ $query_params['tabs'] = 'true';
118
+ }
119
+ ?>
120
+ <div id="fs_pricing" class="wrap fs-section fs-full-size-wrapper">
121
+ <?php if ( ! $use_external_pricing ) : ?>
122
+ <div id="fs_pricing_wrapper" data-public-url="<?php echo trailingslashit( dirname( $pricing_js_url ) ) ?>"></div>
123
+ <?php
124
+ $pricing_config = array_merge( array(
125
+ 'contact_url' => $fs->contact_url(),
126
+ 'is_network_admin' => fs_is_network_admin(),
127
+ 'is_production' => ( defined( 'WP_FS__IS_PRODUCTION_MODE' ) ? WP_FS__IS_PRODUCTION_MODE : null ),
128
+ 'menu_slug' => $fs->get_menu_slug(),
129
+ 'mode' => 'dashboard',
130
+ 'fs_wp_endpoint_url' => WP_FS__ADDRESS,
131
+ 'request_handler_url' => admin_url(
132
+ 'admin-ajax.php?' . http_build_query( array(
133
+ 'module_id' => $fs->get_id(),
134
+ 'action' => $fs->get_ajax_action( 'pricing_ajax_action' ),
135
+ 'security' => $fs->get_ajax_security( 'pricing_ajax_action' )
136
+ ) )
137
+ ),
138
+ 'selector' => '#fs_pricing_wrapper',
139
+ 'unique_affix' => $fs->get_unique_affix(),
140
+ ), $query_params );
141
+
142
+ wp_add_inline_script( 'freemius-pricing', 'Freemius.pricing.new( ' . json_encode( $pricing_config ) . ' )' );
143
+ ?>
144
+ <?php else : ?>
145
+ <div id="fs_frame"></div>
146
+ <form action="" method="POST">
147
+ <input type="hidden" name="user_id"/>
148
+ <input type="hidden" name="user_email"/>
149
+ <input type="hidden" name="site_id"/>
150
+ <input type="hidden" name="public_key"/>
151
+ <input type="hidden" name="secret_key"/>
152
+ <input type="hidden" name="action" value="account"/>
153
+ </form>
154
+
155
+ <script type="text/javascript">
156
+ (function ($, undef) {
157
+ $(function () {
158
+ var
159
+ // Keep track of the i-frame height.
160
+ frame_height = 800,
161
+ base_url = '<?php echo WP_FS__ADDRESS ?>',
162
+ // Pass the parent page URL into the i-frame in a meaningful way (this URL could be
163
+ // passed via query string or hard coded into the child page, it depends on your needs).
164
+ src = base_url + '/pricing/?<?php echo http_build_query( $query_params ) ?>#' + encodeURIComponent(document.location.href),
165
+
166
+ // Append the I-frame into the DOM.
167
+ frame = $('<i' + 'frame " src="' + src + '" width="100%" height="' + frame_height + 'px" scrolling="no" frameborder="0" style="background: transparent; width: 1px; min-width: 100%;"><\/i' + 'frame>')
168
+ .appendTo('#fs_frame');
169
+
170
+ FS.PostMessage.init(base_url, [frame[0]]);
171
+
172
+ FS.PostMessage.receive('height', function (data) {
173
+ var h = data.height;
174
+ if (!isNaN(h) && h > 0 && h != frame_height) {
175
+ frame_height = h;
176
+ frame.height(frame_height + 'px');
177
+
178
+ FS.PostMessage.postScroll(frame[0]);
179
+ }
180
+ });
181
+
182
+ FS.PostMessage.receive('get_dimensions', function (data) {
183
+ FS.PostMessage.post('dimensions', {
184
+ height : $(document.body).height(),
185
+ scrollTop: $(document).scrollTop()
186
+ }, frame[0]);
187
+ });
188
+
189
+ FS.PostMessage.receive('start_trial', function (data) {
190
+ openTrialConfirmationModal(data);
191
+ });
192
+ });
193
+ })(jQuery);
194
+ </script>
195
+ <?php endif ?>
196
+ </div>
197
+ <?php
198
+ if ( $has_tabs ) {
199
+ $fs->_add_tabs_after_content();
200
+ }
201
+
202
+ $params = array(
203
+ 'page' => 'pricing',
204
+ 'module_id' => $fs->get_id(),
205
+ 'module_type' => $fs->get_module_type(),
206
+ 'module_slug' => $slug,
207
+ 'module_version' => $fs->get_plugin_version(),
208
+ );
209
  fs_require_template( 'powered-by.php', $params );
common/vendor/freemius/templates/secure-https-header.php CHANGED
@@ -30,7 +30,7 @@
30
  ) ) .
31
  ' - ' .
32
  sprintf(
33
- '<a class="fs-security-proof" href="%s" target="_blank">%s</a>',
34
  'https://www.mcafeesecure.com/verify?host=' . WP_FS__ROOT_DOMAIN_PRODUCTION,
35
  'Freemius Inc. [US]'
36
  );
30
  ) ) .
31
  ' - ' .
32
  sprintf(
33
+ '<a class="fs-security-proof" href="%s" target="_blank" rel="noopener">%s</a>',
34
  'https://www.mcafeesecure.com/verify?host=' . WP_FS__ROOT_DOMAIN_PRODUCTION,
35
  'Freemius Inc. [US]'
36
  );
common/vendor/psr/log/Psr/Log/AbstractLogger.php CHANGED
@@ -14,8 +14,8 @@ abstract class AbstractLogger implements LoggerInterface
14
  /**
15
  * System is unusable.
16
  *
17
- * @param string $message
18
- * @param mixed[] $context
19
  *
20
  * @return void
21
  */
@@ -30,8 +30,8 @@ abstract class AbstractLogger implements LoggerInterface
30
  * Example: Entire website down, database unavailable, etc. This should
31
  * trigger the SMS alerts and wake you up.
32
  *
33
- * @param string $message
34
- * @param mixed[] $context
35
  *
36
  * @return void
37
  */
@@ -45,8 +45,8 @@ abstract class AbstractLogger implements LoggerInterface
45
  *
46
  * Example: Application component unavailable, unexpected exception.
47
  *
48
- * @param string $message
49
- * @param mixed[] $context
50
  *
51
  * @return void
52
  */
@@ -59,8 +59,8 @@ abstract class AbstractLogger implements LoggerInterface
59
  * Runtime errors that do not require immediate action but should typically
60
  * be logged and monitored.
61
  *
62
- * @param string $message
63
- * @param mixed[] $context
64
  *
65
  * @return void
66
  */
@@ -75,8 +75,8 @@ abstract class AbstractLogger implements LoggerInterface
75
  * Example: Use of deprecated APIs, poor use of an API, undesirable things
76
  * that are not necessarily wrong.
77
  *
78
- * @param string $message
79
- * @param mixed[] $context
80
  *
81
  * @return void
82
  */
@@ -88,8 +88,8 @@ abstract class AbstractLogger implements LoggerInterface
88
  /**
89
  * Normal but significant events.
90
  *
91
- * @param string $message
92
- * @param mixed[] $context
93
  *
94
  * @return void
95
  */
@@ -103,8 +103,8 @@ abstract class AbstractLogger implements LoggerInterface
103
  *
104
  * Example: User logs in, SQL logs.
105
  *
106
- * @param string $message
107
- * @param mixed[] $context
108
  *
109
  * @return void
110
  */
@@ -116,8 +116,8 @@ abstract class AbstractLogger implements LoggerInterface
116
  /**
117
  * Detailed debug information.
118
  *
119
- * @param string $message
120
- * @param mixed[] $context
121
  *
122
  * @return void
123
  */
14
  /**
15
  * System is unusable.
16
  *
17
+ * @param string $message
18
+ * @param array $context
19
  *
20
  * @return void
21
  */
30
  * Example: Entire website down, database unavailable, etc. This should
31
  * trigger the SMS alerts and wake you up.
32
  *
33
+ * @param string $message
34
+ * @param array $context
35
  *
36
  * @return void
37
  */
45
  *
46
  * Example: Application component unavailable, unexpected exception.
47
  *
48
+ * @param string $message
49
+ * @param array $context
50
  *
51
  * @return void
52
  */
59
  * Runtime errors that do not require immediate action but should typically
60
  * be logged and monitored.
61
  *
62
+ * @param string $message
63
+ * @param array $context
64
  *
65
  * @return void
66
  */
75
  * Example: Use of deprecated APIs, poor use of an API, undesirable things
76
  * that are not necessarily wrong.
77
  *
78
+ * @param string $message
79
+ * @param array $context
80
  *
81
  * @return void
82
  */
88
  /**
89
  * Normal but significant events.
90
  *
91
+ * @param string $message
92
+ * @param array $context
93
  *
94
  * @return void
95
  */
103
  *
104
  * Example: User logs in, SQL logs.
105
  *
106
+ * @param string $message
107
+ * @param array $context
108
  *
109
  * @return void
110
  */
116
  /**
117
  * Detailed debug information.
118
  *
119
+ * @param string $message
120
+ * @param array $context
121
  *
122
  * @return void
123
  */
common/vendor/psr/log/Psr/Log/LoggerAwareTrait.php CHANGED
@@ -10,7 +10,7 @@ trait LoggerAwareTrait
10
  /**
11
  * The logger instance.
12
  *
13
- * @var LoggerInterface|null
14
  */
15
  protected $logger;
16
 
10
  /**
11
  * The logger instance.
12
  *
13
+ * @var LoggerInterface
14
  */
15
  protected $logger;
16
 
lang/the-events-calendar-ar.mo CHANGED
Binary file
lang/the-events-calendar-bg_BG.mo CHANGED
Binary file
lang/the-events-calendar-ca.mo CHANGED
Binary file
lang/the-events-calendar-cs_CZ.mo CHANGED
Binary file
lang/the-events-calendar-da_DK.mo CHANGED
Binary file
lang/the-events-calendar-de_CH.mo CHANGED
Binary file
lang/the-events-calendar-de_DE.mo CHANGED
Binary file
lang/the-events-calendar-el.mo CHANGED
Binary file
lang/the-events-calendar-en_AU.mo CHANGED
Binary file
lang/the-events-calendar-en_CA.mo CHANGED
Binary file
lang/the-events-calendar-en_GB.mo CHANGED
Binary file
lang/the-events-calendar-en_NZ.mo CHANGED
Binary file
lang/the-events-calendar-en_ZA.mo CHANGED
Binary file
lang/the-events-calendar-es_CO.mo DELETED
Binary file
lang/the-events-calendar-es_EC.mo DELETED
Binary file
lang/the-events-calendar-es_ES.mo CHANGED
Binary file
lang/the-events-calendar-es_MX.mo CHANGED
Binary file
lang/the-events-calendar-es_VE.mo CHANGED
Binary file
lang/the-events-calendar-eu.mo CHANGED
Binary file
lang/the-events-calendar-fi.mo CHANGED
Binary file
lang/the-events-calendar-fr_CA.mo CHANGED
Binary file
lang/the-events-calendar-fr_FR.mo CHANGED
Binary file
lang/the-events-calendar-gl_ES.mo CHANGED
Binary file
lang/the-events-calendar-he_IL.mo CHANGED
Binary file
lang/the-events-calendar-hr.mo CHANGED
Binary file
lang/the-events-calendar-hu_HU.mo CHANGED
Binary file
lang/the-events-calendar-is_IS.mo ADDED
Binary file
lang/the-events-calendar-it_IT.mo CHANGED
Binary file
lang/the-events-calendar-ja.mo CHANGED
Binary file
lang/the-events-calendar-lt_LT.mo CHANGED
Binary file
lang/the-events-calendar-nb_NO.mo CHANGED
Binary file
lang/the-events-calendar-nl_NL.mo CHANGED
Binary file
lang/the-events-calendar-nn_NO.mo CHANGED
Binary file
lang/the-events-calendar-pl_PL.mo CHANGED
Binary file
lang/the-events-calendar-pt_BR.mo CHANGED
Binary file
lang/the-events-calendar-pt_PT.mo CHANGED
Binary file
lang/the-events-calendar-ro_RO.mo CHANGED
Binary file
lang/the-events-calendar-ru_RU.mo CHANGED
Binary file
lang/the-events-calendar-sk_SK.mo CHANGED
Binary file
lang/the-events-calendar-sl_SI.mo CHANGED
Binary file
lang/the-events-calendar-sq.mo CHANGED
Binary file
lang/the-events-calendar-sr_RS.mo CHANGED
Binary file
lang/the-events-calendar-sv_SE.mo CHANGED
Binary file
lang/the-events-calendar-tr_TR.mo CHANGED
Binary file
lang/the-events-calendar-uk.mo CHANGED
Binary file
lang/the-events-calendar-zh_CN.mo CHANGED
Binary file
lang/the-events-calendar.pot CHANGED
@@ -5,11 +5,11 @@ msgstr ""
5
  "Project-Id-Version: The Events Calendar 5.2.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/the-events-"
7
  "calendar\n"
8
- "POT-Creation-Date: 2020-09-24 06:38:54+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "PO-Revision-Date: 2020-09-24 06:38\n"
13
  "Last-Translator: \n"
14
  "Language-Team: \n"
15
 
@@ -47,7 +47,7 @@ msgstr ""
47
  msgid "%s"
48
  msgstr ""
49
 
50
- #: src/Tribe/Admin/Bar/Default_Configurator.php:45 src/Tribe/Main.php:4177
51
  #: src/admin-views/tribe-options-upgrade.php:20
52
  msgid "View Calendar"
53
  msgstr ""
@@ -57,8 +57,8 @@ msgid "Add %s"
57
  msgstr ""
58
 
59
  #: src/Tribe/Admin/Bar/Default_Configurator.php:62
60
- #: src/Tribe/Linked_Posts/Chooser_Meta_Box.php:211 src/Tribe/Main.php:2045
61
- #: src/Tribe/Main.php:5273 src/Tribe/Main.php:5320 src/Tribe/Organizer.php:93
62
  #: src/Tribe/Venue.php:112
63
  msgid "Edit %s"
64
  msgstr ""
@@ -69,7 +69,7 @@ msgstr ""
69
  msgid "Import"
70
  msgstr ""
71
 
72
- #: src/Tribe/Admin/Bar/Default_Configurator.php:89 src/Tribe/Main.php:4225
73
  msgid "Settings"
74
  msgstr ""
75
 
@@ -129,7 +129,7 @@ msgid ""
129
  "refresh and try again."
130
  msgstr ""
131
 
132
- #: src/Tribe/Admin_List.php:246 src/Tribe/Main.php:2064
133
  msgid "%s Categories"
134
  msgstr ""
135
 
@@ -165,7 +165,7 @@ msgstr ""
165
 
166
  #: src/Tribe/Aggregator/API/Origins.php:47
167
  #: src/Tribe/Aggregator/Record/gCal.php:14
168
- #: src/Tribe/Editor/Blocks/Event_Links.php:26 src/Tribe/iCal.php:122
169
  #: src/admin-views/aggregator/settings.php:618
170
  msgid "Google Calendar"
171
  msgstr ""
@@ -1652,182 +1652,182 @@ msgstr ""
1652
  msgid "Merge Duplicates"
1653
  msgstr ""
1654
 
1655
- #: src/Tribe/Assets.php:720 src/deprecated/Tribe__Events__Asset__Dynamic.php:26
1656
  msgid "Sunday"
1657
  msgstr ""
1658
 
1659
- #: src/Tribe/Assets.php:721 src/deprecated/Tribe__Events__Asset__Dynamic.php:27
1660
  msgid "Monday"
1661
  msgstr ""
1662
 
1663
- #: src/Tribe/Assets.php:722 src/deprecated/Tribe__Events__Asset__Dynamic.php:28
1664
  msgid "Tuesday"
1665
  msgstr ""
1666
 
1667
- #: src/Tribe/Assets.php:723 src/deprecated/Tribe__Events__Asset__Dynamic.php:29
1668
  msgid "Wednesday"
1669
  msgstr ""
1670
 
1671
- #: src/Tribe/Assets.php:724 src/deprecated/Tribe__Events__Asset__Dynamic.php:30
1672
  msgid "Thursday"
1673
  msgstr ""
1674
 
1675
- #: src/Tribe/Assets.php:725 src/deprecated/Tribe__Events__Asset__Dynamic.php:31
1676
  msgid "Friday"
1677
  msgstr ""
1678
 
1679
- #: src/Tribe/Assets.php:726 src/deprecated/Tribe__Events__Asset__Dynamic.php:32
1680
  msgid "Saturday"
1681
  msgstr ""
1682
 
1683
- #: src/Tribe/Assets.php:729 src/deprecated/Tribe__Events__Asset__Dynamic.php:35
1684
  msgid "Sun"
1685
  msgstr ""
1686
 
1687
- #: src/Tribe/Assets.php:730 src/deprecated/Tribe__Events__Asset__Dynamic.php:36
1688
  msgid "Mon"
1689
  msgstr ""
1690
 
1691
- #: src/Tribe/Assets.php:731 src/deprecated/Tribe__Events__Asset__Dynamic.php:37
1692
  msgid "Tue"
1693
  msgstr ""
1694
 
1695
- #: src/Tribe/Assets.php:732 src/deprecated/Tribe__Events__Asset__Dynamic.php:38
1696
  msgid "Wed"
1697
  msgstr ""
1698
 
1699
- #: src/Tribe/Assets.php:733 src/deprecated/Tribe__Events__Asset__Dynamic.php:39
1700
  msgid "Thu"
1701
  msgstr ""
1702
 
1703
- #: src/Tribe/Assets.php:734 src/deprecated/Tribe__Events__Asset__Dynamic.php:40
1704
  msgid "Fri"
1705
  msgstr ""
1706
 
1707
- #: src/Tribe/Assets.php:735 src/deprecated/Tribe__Events__Asset__Dynamic.php:41
1708
  msgid "Sat"
1709
  msgstr ""
1710
 
1711
- #: src/Tribe/Assets.php:738 src/deprecated/Tribe__Events__Asset__Dynamic.php:44
1712
  msgid "January"
1713
  msgstr ""
1714
 
1715
- #: src/Tribe/Assets.php:739 src/deprecated/Tribe__Events__Asset__Dynamic.php:45
1716
  msgid "February"
1717
  msgstr ""
1718
 
1719
- #: src/Tribe/Assets.php:740 src/deprecated/Tribe__Events__Asset__Dynamic.php:46
1720
  msgid "March"
1721
  msgstr ""
1722
 
1723
- #: src/Tribe/Assets.php:741 src/deprecated/Tribe__Events__Asset__Dynamic.php:47
1724
  msgid "April"
1725
  msgstr ""
1726
 
1727
- #: src/Tribe/Assets.php:742 src/Tribe/Assets.php:756
1728
  #: src/deprecated/Tribe__Events__Asset__Dynamic.php:48
1729
  #: src/deprecated/Tribe__Events__Asset__Dynamic.php:62
1730
  msgid "May"
1731
  msgstr ""
1732
 
1733
- #: src/Tribe/Assets.php:743 src/deprecated/Tribe__Events__Asset__Dynamic.php:49
1734
  msgid "June"
1735
  msgstr ""
1736
 
1737
- #: src/Tribe/Assets.php:744 src/deprecated/Tribe__Events__Asset__Dynamic.php:50
1738
  msgid "July"
1739
  msgstr ""
1740
 
1741
- #: src/Tribe/Assets.php:745 src/deprecated/Tribe__Events__Asset__Dynamic.php:51
1742
  msgid "August"
1743
  msgstr ""
1744
 
1745
- #: src/Tribe/Assets.php:746 src/deprecated/Tribe__Events__Asset__Dynamic.php:52
1746
  msgid "September"
1747
  msgstr ""
1748
 
1749
- #: src/Tribe/Assets.php:747 src/deprecated/Tribe__Events__Asset__Dynamic.php:53
1750
  msgid "October"
1751
  msgstr ""
1752
 
1753
- #: src/Tribe/Assets.php:748 src/deprecated/Tribe__Events__Asset__Dynamic.php:54
1754
  msgid "November"
1755
  msgstr ""
1756
 
1757
- #: src/Tribe/Assets.php:749 src/deprecated/Tribe__Events__Asset__Dynamic.php:55
1758
  msgid "December"
1759
  msgstr ""
1760
 
1761
- #: src/Tribe/Assets.php:752 src/deprecated/Tribe__Events__Asset__Dynamic.php:58
1762
  msgid "Jan"
1763
  msgstr ""
1764
 
1765
- #: src/Tribe/Assets.php:753 src/deprecated/Tribe__Events__Asset__Dynamic.php:59
1766
  msgid "Feb"
1767
  msgstr ""
1768
 
1769
- #: src/Tribe/Assets.php:754 src/deprecated/Tribe__Events__Asset__Dynamic.php:60
1770
  msgid "Mar"
1771
  msgstr ""
1772
 
1773
- #: src/Tribe/Assets.php:755 src/deprecated/Tribe__Events__Asset__Dynamic.php:61
1774
  msgid "Apr"
1775
  msgstr ""
1776
 
1777
- #: src/Tribe/Assets.php:757 src/deprecated/Tribe__Events__Asset__Dynamic.php:63
1778
  msgid "Jun"
1779
  msgstr ""
1780
 
1781
- #: src/Tribe/Assets.php:758 src/deprecated/Tribe__Events__Asset__Dynamic.php:64
1782
  msgid "Jul"
1783
  msgstr ""
1784
 
1785
- #: src/Tribe/Assets.php:759 src/deprecated/Tribe__Events__Asset__Dynamic.php:65
1786
  msgid "Aug"
1787
  msgstr ""
1788
 
1789
- #: src/Tribe/Assets.php:760 src/deprecated/Tribe__Events__Asset__Dynamic.php:66
1790
  msgid "Sep"
1791
  msgstr ""
1792
 
1793
- #: src/Tribe/Assets.php:761 src/deprecated/Tribe__Events__Asset__Dynamic.php:67
1794
  msgid "Oct"
1795
  msgstr ""
1796
 
1797
- #: src/Tribe/Assets.php:762 src/deprecated/Tribe__Events__Asset__Dynamic.php:68
1798
  msgid "Nov"
1799
  msgstr ""
1800
 
1801
- #: src/Tribe/Assets.php:763 src/deprecated/Tribe__Events__Asset__Dynamic.php:69
1802
  msgid "Dec"
1803
  msgstr ""
1804
 
1805
- #: src/Tribe/Assets.php:766 src/deprecated/Tribe__Events__Asset__Dynamic.php:72
1806
  msgid ""
1807
  "This event is from %%starttime%% to %%endtime%% on %%startdatewithyear%%."
1808
  msgstr ""
1809
 
1810
- #: src/Tribe/Assets.php:767 src/deprecated/Tribe__Events__Asset__Dynamic.php:73
1811
  msgid "This event is at %%starttime%% on %%startdatewithyear%%."
1812
  msgstr ""
1813
 
1814
- #: src/Tribe/Assets.php:768 src/deprecated/Tribe__Events__Asset__Dynamic.php:74
1815
  msgid "This event is all day on %%startdatewithyear%%."
1816
  msgstr ""
1817
 
1818
- #: src/Tribe/Assets.php:769 src/deprecated/Tribe__Events__Asset__Dynamic.php:75
1819
  msgid ""
1820
  "This event starts at %%starttime%% on %%startdatenoyear%% and ends at %"
1821
  "%endtime%% on %%enddatewithyear%%"
1822
  msgstr ""
1823
 
1824
- #: src/Tribe/Assets.php:770 src/deprecated/Tribe__Events__Asset__Dynamic.php:76
1825
  msgid ""
1826
  "This event starts at %%starttime%% on %%startdatenoyear%% and ends on %"
1827
  "%enddatewithyear%%"
1828
  msgstr ""
1829
 
1830
- #: src/Tribe/Assets.php:771 src/deprecated/Tribe__Events__Asset__Dynamic.php:77
1831
  msgid ""
1832
  "This event is all day starting on %%startdatenoyear%% and ending on %"
1833
  "%enddatewithyear%%."
@@ -1999,7 +1999,7 @@ msgstr ""
1999
  msgid "Show Featured Event Images"
2000
  msgstr ""
2001
 
2002
- #: src/Tribe/Editor/Blocks/Event_Links.php:27 src/Tribe/iCal.php:123
2003
  msgid "iCal Export"
2004
  msgstr ""
2005
 
@@ -2027,7 +2027,7 @@ msgstr ""
2027
  #: src/Tribe/Template/Single_Event.php:121
2028
  #: src/Tribe/Views/V2/Template_Bootstrap.php:136
2029
  #: src/Tribe/Views/V2/Template_Bootstrap.php:176
2030
- #: src/Tribe/Views/V2/Template_Bootstrap.php:468
2031
  msgid "This %s has passed."
2032
  msgstr ""
2033
 
@@ -2614,7 +2614,8 @@ msgctxt ""
2614
  msgid "Create or Find %s"
2615
  msgstr ""
2616
 
2617
- #: src/Tribe/List_Widget.php:32
 
2618
  msgid "A widget that displays upcoming events."
2619
  msgstr ""
2620
 
@@ -2628,201 +2629,201 @@ msgstr ""
2628
 
2629
  #. #-#-#-#-# the-events-calendar.pot (The Events Calendar 5.2.0) #-#-#-#-#
2630
  #. Plugin Name of the plugin/theme
2631
- #: src/Tribe/Main.php:945 src/Tribe/Main.php:1400 src/Tribe/Privacy.php:29
2632
  #: src/admin-views/admin-welcome-message.php:29
2633
  #: src/functions/template-tags/general.php:1421 the-events-calendar.php:57
2634
  msgid "The Events Calendar"
2635
  msgstr ""
2636
 
2637
- #: src/Tribe/Main.php:952
2638
  msgid "month"
2639
  msgstr ""
2640
 
2641
- #: src/Tribe/Main.php:953
2642
  msgid "list"
2643
  msgstr ""
2644
 
2645
- #: src/Tribe/Main.php:954
2646
  msgid "upcoming"
2647
  msgstr ""
2648
 
2649
- #: src/Tribe/Main.php:955
2650
  msgid "past"
2651
  msgstr ""
2652
 
2653
- #: src/Tribe/Main.php:956
2654
  msgid "day"
2655
  msgstr ""
2656
 
2657
- #: src/Tribe/Main.php:957
2658
  msgid "today"
2659
  msgstr ""
2660
 
2661
- #: src/Tribe/Main.php:958
2662
  msgctxt "featured events slug"
2663
  msgid "featured"
2664
  msgstr ""
2665
 
2666
- #: src/Tribe/Main.php:959
2667
  msgctxt "all events slug"
2668
  msgid "all"
2669
  msgstr ""
2670
 
2671
- #: src/Tribe/Main.php:983
2672
  msgid "Initializing Tribe Events on %s"
2673
  msgstr ""
2674
 
2675
- #: src/Tribe/Main.php:1041 src/Tribe/Main.php:1043
2676
  msgid "Welcome to The Events Calendar!"
2677
  msgstr ""
2678
 
2679
- #: src/Tribe/Main.php:1189
2680
  msgid ""
2681
  "The %3$s \"%1$s\" uses the \"/%2$s\" slug: the Events Calendar plugin will "
2682
  "show its calendar in place of the page."
2683
  msgstr ""
2684
 
2685
- #: src/Tribe/Main.php:1192
2686
  msgid "Ask the site administrator to edit the %s slug"
2687
  msgstr ""
2688
 
2689
- #: src/Tribe/Main.php:1194
2690
  msgid "Edit the %s slug"
2691
  msgstr ""
2692
 
2693
- #: src/Tribe/Main.php:1198
2694
  msgid " ask the site administrator to set a different Events URL slug."
2695
  msgstr ""
2696
 
2697
- #: src/Tribe/Main.php:1203
2698
  msgid "edit Events settings."
2699
  msgstr ""
2700
 
2701
- #: src/Tribe/Main.php:1206
2702
  msgid "%1$s or %2$s"
2703
  msgstr ""
2704
 
2705
- #: src/Tribe/Main.php:1275
2706
  msgid "Upgrade your calendar views"
2707
  msgstr ""
2708
 
2709
- #: src/Tribe/Main.php:1311
2710
  msgid "Upgrade"
2711
  msgstr ""
2712
 
2713
- #: src/Tribe/Main.php:1360
2714
  msgid "New User Primer"
2715
  msgstr ""
2716
 
2717
- #: src/Tribe/Main.php:1362
2718
  msgid ""
2719
  "We are committed to helping make your calendar spectacular and have a wealth "
2720
  "of resources available, including a handy %s to get your calendar up and "
2721
  "running."
2722
  msgstr ""
2723
 
2724
- #: src/Tribe/Main.php:1373
2725
  msgid "Support for The Events Calendar"
2726
  msgstr ""
2727
 
2728
- #: src/Tribe/Main.php:1376
2729
  msgid ""
2730
  "%s: A thorough walkthrough of The Events Calendar and the settings that are "
2731
  "available to you."
2732
  msgstr ""
2733
 
2734
- #: src/Tribe/Main.php:1376
2735
  msgid "Settings overview"
2736
  msgstr ""
2737
 
2738
- #: src/Tribe/Main.php:1378
2739
  msgid ""
2740
  "%s: A complete look at the features you can expect to see right out of the "
2741
  "box as well as how to use them."
2742
  msgstr ""
2743
 
2744
- #: src/Tribe/Main.php:1378
2745
  msgid "Features overview"
2746
  msgstr ""
2747
 
2748
- #: src/Tribe/Main.php:1380
2749
  msgid ""
2750
  "%s: Our most comprehensive outline for customizing the calendar to suit your "
2751
  "needs, including custom layouts and styles."
2752
  msgstr ""
2753
 
2754
- #: src/Tribe/Main.php:1380
2755
  msgid "Themer's Guide"
2756
  msgstr ""
2757
 
2758
- #: src/Tribe/Main.php:1382
2759
  msgid ""
2760
  "%s: An overview of the default templates and styles that are included in the "
2761
  "plugin, as well as how to change them."
2762
  msgstr ""
2763
 
2764
- #: src/Tribe/Main.php:1382
2765
  msgid "Using stylesheets and page templates"
2766
  msgstr ""
2767
 
2768
- #: src/Tribe/Main.php:1384
2769
  msgid ""
2770
  "%s: Do you see an issue with your calendar? Go here first to find where it’s "
2771
  "coming from and how to fix it."
2772
  msgstr ""
2773
 
2774
- #: src/Tribe/Main.php:1384
2775
  msgid "Troubleshooting common problems"
2776
  msgstr ""
2777
 
2778
- #: src/Tribe/Main.php:1386
2779
  msgid ""
2780
  "%s: Code and guides for customizing your calendar in useful and interesting "
2781
  "ways."
2782
  msgstr ""
2783
 
2784
- #: src/Tribe/Main.php:1386
2785
  msgid "Customizing the Events plugins"
2786
  msgstr ""
2787
 
2788
- #: src/Tribe/Main.php:1401
2789
  msgid "Events Tickets"
2790
  msgstr ""
2791
 
2792
- #: src/Tribe/Main.php:1402
2793
  msgid ""
2794
  "If you have tried the above steps and are still having trouble, you can post "
2795
  "a new thread to our WordPress.org forums for %1$s or %2$s. Our support staff "
2796
  "monitors these forums once a week and would be happy to assist you there. "
2797
  msgstr ""
2798
 
2799
- #: src/Tribe/Main.php:1404 src/Tribe/Main.php:1412
2800
  msgid "premium support on our website"
2801
  msgstr ""
2802
 
2803
- #: src/Tribe/Main.php:1405
2804
  msgid ""
2805
  "<strong>Looking for more immediate support?</strong> We offer %s with the "
2806
  "purchase of any of our premium plugins. Pick up a license and you can post "
2807
  "there directly and expect a response within 24-48 hours during weekdays"
2808
  msgstr ""
2809
 
2810
- #: src/Tribe/Main.php:1409
2811
  msgid "open-source forum on WordPress.org"
2812
  msgstr ""
2813
 
2814
- #: src/Tribe/Main.php:1410
2815
  msgid ""
2816
  "If you have tried the above steps and are still having trouble, you can post "
2817
  "a new thread to our %s. Our support staff monitors these forums once a week "
2818
  "and would be happy to assist you there."
2819
  msgstr ""
2820
 
2821
- #: src/Tribe/Main.php:1413
2822
  msgid "Events Calendar PRO"
2823
  msgstr ""
2824
 
2825
- #: src/Tribe/Main.php:1414
2826
  msgid ""
2827
  "<strong>Looking for more immediate support?</strong> We offer %1$s with the "
2828
  "purchase of any of our premium plugins (like %2$s). Pick up a license and "
@@ -2830,427 +2831,427 @@ msgid ""
2830
  "weekdays."
2831
  msgstr ""
2832
 
2833
- #: src/Tribe/Main.php:1418
2834
  msgid "post a thread"
2835
  msgstr ""
2836
 
2837
- #: src/Tribe/Main.php:1419
2838
  msgid ""
2839
  "If you have a valid license for one of our paid plugins, you can %s in our "
2840
  "premium support forums. Our support team monitors the forums and will "
2841
  "respond to your thread within 24-48 hours (during the week)."
2842
  msgstr ""
2843
 
2844
- #: src/Tribe/Main.php:1462
2845
  #: src/deprecated/Tribe__Events__Importer__Admin_Page.php:207
2846
  #: src/functions/template-tags/general.php:130
2847
  msgid "Events"
2848
  msgstr ""
2849
 
2850
- #: src/Tribe/Main.php:1470 src/admin-views/aggregator/tabs/import-form.php:227
2851
  #: src/admin-views/aggregator/tabs/import-form.php:239
2852
  #: src/functions/template-tags/general.php:74
2853
  msgid "Event"
2854
  msgstr ""
2855
 
2856
- #: src/Tribe/Main.php:1687
2857
  msgid ""
2858
  "Sorry, The Events Calendar requires WordPress %s or higher. Please upgrade "
2859
  "your WordPress install."
2860
  msgstr ""
2861
 
2862
- #: src/Tribe/Main.php:1690
2863
  msgid ""
2864
  "Sorry, The Events Calendar requires PHP %s or higher. Talk to your Web host "
2865
  "about moving you to a newer version of PHP."
2866
  msgstr ""
2867
 
2868
- #: src/Tribe/Main.php:1722
2869
  msgid ""
2870
  "To continue using The Events Calendar, please install the latest version of"
2871
  msgstr ""
2872
 
2873
- #: src/Tribe/Main.php:1724 src/Tribe/Main.php:1725
2874
  msgid "Event Tickets"
2875
  msgstr ""
2876
 
2877
- #: src/Tribe/Main.php:1760
2878
  msgid ""
2879
  "It appears as if the tribe-common libraries cannot be found! The directory "
2880
  "should be in the \"common/\" directory in the events calendar plugin."
2881
  msgstr ""
2882
 
2883
- #: src/Tribe/Main.php:1996 src/Tribe/Main.php:2455
2884
  msgid "category"
2885
  msgstr ""
2886
 
2887
- #: src/Tribe/Main.php:2010 src/Tribe/Main.php:2454
2888
  msgid "tag"
2889
  msgstr ""
2890
 
2891
- #: src/Tribe/Main.php:2043 src/Tribe/Organizer.php:91 src/Tribe/Venue.php:110
2892
  msgid "Add New"
2893
  msgstr ""
2894
 
2895
- #: src/Tribe/Main.php:2044 src/Tribe/Main.php:2181 src/Tribe/Main.php:2182
2896
  #: src/Tribe/Organizer.php:92 src/Tribe/Venue.php:111
2897
  msgid "Add New %s"
2898
  msgstr ""
2899
 
2900
- #: src/Tribe/Main.php:2046 src/Tribe/Organizer.php:94 src/Tribe/Venue.php:113
2901
  msgid "New %s"
2902
  msgstr ""
2903
 
2904
- #: src/Tribe/Main.php:2047 src/Tribe/Organizer.php:95 src/Tribe/Venue.php:114
2905
  #: src/views/month/single-day.php:26
2906
  msgid "View %s"
2907
  msgstr ""
2908
 
2909
- #: src/Tribe/Main.php:2048 src/Tribe/Organizer.php:96 src/Tribe/Venue.php:115
2910
  msgid "Search %s"
2911
  msgstr ""
2912
 
2913
- #: src/Tribe/Main.php:2049 src/Tribe/Organizer.php:97 src/Tribe/Venue.php:116
2914
  msgid "No %s found"
2915
  msgstr ""
2916
 
2917
- #: src/Tribe/Main.php:2050 src/Tribe/Organizer.php:98 src/Tribe/Venue.php:117
2918
  msgid "No %s found in Trash"
2919
  msgstr ""
2920
 
2921
- #: src/Tribe/Main.php:2051 src/Tribe/Main.php:2138 src/Tribe/Main.php:2158
2922
  #: src/Tribe/Organizer.php:99 src/Tribe/Venue.php:118
2923
  msgid "%s published."
2924
  msgstr ""
2925
 
2926
- #: src/Tribe/Main.php:2052 src/Tribe/Organizer.php:100 src/Tribe/Venue.php:119
2927
  msgid "%s published privately."
2928
  msgstr ""
2929
 
2930
- #: src/Tribe/Main.php:2053 src/Tribe/Organizer.php:101 src/Tribe/Venue.php:120
2931
  msgid "%s reverted to draft."
2932
  msgstr ""
2933
 
2934
- #: src/Tribe/Main.php:2054 src/Tribe/Organizer.php:102 src/Tribe/Venue.php:121
2935
  msgid "%s scheduled."
2936
  msgstr ""
2937
 
2938
- #: src/Tribe/Main.php:2055 src/Tribe/Main.php:2097 src/Tribe/Main.php:2132
2939
- #: src/Tribe/Main.php:2135 src/Tribe/Main.php:2152 src/Tribe/Main.php:2155
2940
  #: src/Tribe/Organizer.php:103 src/Tribe/Venue.php:122
2941
  msgid "%s updated."
2942
  msgstr ""
2943
 
2944
- #: src/Tribe/Main.php:2065
2945
  msgid "%s Category"
2946
  msgstr ""
2947
 
2948
- #: src/Tribe/Main.php:2066
2949
  msgid "Search %s Categories"
2950
  msgstr ""
2951
 
2952
- #: src/Tribe/Main.php:2067
2953
  msgid "All %s Categories"
2954
  msgstr ""
2955
 
2956
- #: src/Tribe/Main.php:2068
2957
  msgid "Parent %s Category"
2958
  msgstr ""
2959
 
2960
- #: src/Tribe/Main.php:2069
2961
  msgid "Parent %s Category:"
2962
  msgstr ""
2963
 
2964
- #: src/Tribe/Main.php:2070
2965
  msgid "Edit %s Category"
2966
  msgstr ""
2967
 
2968
- #: src/Tribe/Main.php:2071
2969
  msgid "Update %s Category"
2970
  msgstr ""
2971
 
2972
- #: src/Tribe/Main.php:2072
2973
  msgid "Add New %s Category"
2974
  msgstr ""
2975
 
2976
- #: src/Tribe/Main.php:2073
2977
  msgid "New %s Category Name"
2978
  msgstr ""
2979
 
2980
- #: src/Tribe/Main.php:2090
2981
  msgid "%1$s updated. %2$sView %1$s%3$s"
2982
  msgstr ""
2983
 
2984
- #: src/Tribe/Main.php:2095 src/Tribe/Main.php:2133 src/Tribe/Main.php:2153
2985
  msgid "Custom field updated."
2986
  msgstr ""
2987
 
2988
- #: src/Tribe/Main.php:2096 src/Tribe/Main.php:2134 src/Tribe/Main.php:2154
2989
  msgid "Custom field deleted."
2990
  msgstr ""
2991
 
2992
  #. translators: %s: date and time of the revision
2993
- #: src/Tribe/Main.php:2099 src/Tribe/Main.php:2137
2994
  msgid "%1$s restored to revision from %2$s"
2995
  msgstr ""
2996
 
2997
- #: src/Tribe/Main.php:2101
2998
  msgid "%1$s published. %2$sView %3$s"
2999
  msgstr ""
3000
 
3001
- #: src/Tribe/Main.php:2106 src/Tribe/Main.php:2139 src/Tribe/Main.php:2159
3002
  msgid "%s saved."
3003
  msgstr ""
3004
 
3005
- #: src/Tribe/Main.php:2108
3006
  msgid "%1$s submitted. %2$sPreview %3$s"
3007
  msgstr ""
3008
 
3009
- #: src/Tribe/Main.php:2114
3010
  msgid "%1$s scheduled for: %2$s. %3$sPreview %4$s"
3011
  msgstr ""
3012
 
3013
  #. translators: Publish box date format, see http://php.net/date
3014
- #: src/Tribe/Main.php:2117 src/Tribe/Main.php:2145 src/Tribe/Main.php:2165
3015
  msgid "M j, Y @ G:i"
3016
  msgstr ""
3017
 
3018
- #: src/Tribe/Main.php:2123
3019
  msgid "%1$s draft updated. %2$sPreview %3$s"
3020
  msgstr ""
3021
 
3022
- #: src/Tribe/Main.php:2140 src/Tribe/Main.php:2160
3023
  msgid "%s submitted."
3024
  msgstr ""
3025
 
3026
- #: src/Tribe/Main.php:2142 src/Tribe/Main.php:2162
3027
  msgid "%1$s scheduled for: %2$s."
3028
  msgstr ""
3029
 
3030
- #: src/Tribe/Main.php:2147 src/Tribe/Main.php:2167
3031
  msgid "%s draft updated."
3032
  msgstr ""
3033
 
3034
  #. translators: %s: date and time of the revision
3035
- #: src/Tribe/Main.php:2157
3036
  msgid "%s restored to revision from %s"
3037
  msgstr ""
3038
 
3039
- #: src/Tribe/Main.php:2211
3040
  msgid ""
3041
  "Without a defined location your event will not display a %sGoogle Rich "
3042
  "Snippet%s on the search results."
3043
  msgstr ""
3044
 
3045
- #: src/Tribe/Main.php:2456
3046
  msgid "page"
3047
  msgstr ""
3048
 
3049
- #: src/Tribe/Main.php:2457 src/functions/template-tags/general.php:102
3050
  msgid "event"
3051
  msgstr ""
3052
 
3053
- #: src/Tribe/Main.php:2458 src/functions/template-tags/general.php:158
3054
  msgid "events"
3055
  msgstr ""
3056
 
3057
- #: src/Tribe/Main.php:2459
3058
  msgid "all"
3059
  msgstr ""
3060
 
3061
- #: src/Tribe/Main.php:2841
3062
  msgid " (View Full %1$s Description Here: %2$s)"
3063
  msgstr ""
3064
 
3065
- #: src/Tribe/Main.php:3620 src/Tribe/Main.php:3655
3066
  #: src/functions/template-tags/day.php:157
3067
  #: src/functions/template-tags/day.php:178
3068
  msgid "Date out of range."
3069
  msgstr ""
3070
 
3071
- #: src/Tribe/Main.php:3697
3072
  msgid "%s Options"
3073
  msgstr ""
3074
 
3075
- #: src/Tribe/Main.php:3706 src/Tribe/Main.php:3719
3076
  msgid "%s Information"
3077
  msgstr ""
3078
 
3079
- #: src/Tribe/Main.php:4051
3080
  msgid "Support"
3081
  msgstr ""
3082
 
3083
- #: src/Tribe/Main.php:4054
3084
  msgid "View All Add-Ons"
3085
  msgstr ""
3086
 
3087
- #: src/Tribe/Main.php:4074
3088
  msgid "News from Modern Tribe"
3089
  msgstr ""
3090
 
3091
- #: src/Tribe/Main.php:4119
3092
  msgid "Additional Functionality"
3093
  msgstr ""
3094
 
3095
- #: src/Tribe/Main.php:4124
3096
  msgid ""
3097
  "Looking for additional functionality including recurring events, ticket "
3098
  "sales, publicly submitted events, new views and more?"
3099
  msgstr ""
3100
 
3101
- #: src/Tribe/Main.php:4125
3102
  msgid "Check out the %savailable add-ons%s."
3103
  msgstr ""
3104
 
3105
- #: src/Tribe/Main.php:4226
3106
  msgid "Calendar"
3107
  msgstr ""
3108
 
3109
- #: src/Tribe/Main.php:4242
3110
  msgid "List"
3111
  msgstr ""
3112
 
3113
- #: src/Tribe/Main.php:4260
3114
  msgid "Month"
3115
  msgstr ""
3116
 
3117
- #: src/Tribe/Main.php:4277 src/admin-views/aggregator/fields/schedule.php:43
3118
  #: src/admin-views/aggregator/fields/schedule.php:61
3119
  msgid "Day"
3120
  msgstr ""
3121
 
3122
- #: src/Tribe/Main.php:4300
3123
  msgid "Search for %s by Keyword."
3124
  msgstr ""
3125
 
3126
- #: src/Tribe/Main.php:4303
3127
  #: src/views/v2/components/events-bar/search-button.php:24
3128
  msgid "Search"
3129
  msgstr ""
3130
 
3131
- #: src/Tribe/Main.php:4304
3132
  msgid "Keyword"
3133
  msgstr ""
3134
 
3135
- #: src/Tribe/Main.php:4321
3136
  msgid "4 digit year hyphen 2 digit month hyphen 2 digit day"
3137
  msgstr ""
3138
 
3139
- #: src/Tribe/Main.php:4322
3140
  msgid "1 digit month slash 1 digit day slash 4 digit year"
3141
  msgstr ""
3142
 
3143
- #: src/Tribe/Main.php:4323
3144
  msgid "2 digit month slash 2 digit day slash 4 digit year"
3145
  msgstr ""
3146
 
3147
- #: src/Tribe/Main.php:4324
3148
  msgid "1 digit day slash 1 digit month slash 4 digit year"
3149
  msgstr ""
3150
 
3151
- #: src/Tribe/Main.php:4325
3152
  msgid "2 digit day slash 2 digit month slash 4 digit year"
3153
  msgstr ""
3154
 
3155
- #: src/Tribe/Main.php:4326
3156
  msgid "1 digit month hyphen 1 digit day hyphen 4 digit year"
3157
  msgstr ""
3158
 
3159
- #: src/Tribe/Main.php:4327
3160
  msgid "1 digit month hyphen 2 digit day hyphen 4 digit year"
3161
  msgstr ""
3162
 
3163
- #: src/Tribe/Main.php:4328
3164
  msgid "1 digit day hyphen 1 digit month hyphen 4 digit year"
3165
  msgstr ""
3166
 
3167
- #: src/Tribe/Main.php:4329
3168
  msgid "2 digit day hyphen 2 digit month hyphen 4 digit year"
3169
  msgstr ""
3170
 
3171
- #: src/Tribe/Main.php:4330
3172
  msgid "4 digit year dot 2 digit month dot 2 digit day"
3173
  msgstr ""
3174
 
3175
- #: src/Tribe/Main.php:4331
3176
  msgid "2 digit month dot 2 digit day dot 4 digit year"
3177
  msgstr ""
3178
 
3179
- #: src/Tribe/Main.php:4332
3180
  msgid "2 digit day dot 2 digit month dot 4 digit year"
3181
  msgstr ""
3182
 
3183
- #: src/Tribe/Main.php:4336
3184
  msgid "4 digit year hyphen 2 digit month"
3185
  msgstr ""
3186
 
3187
- #: src/Tribe/Main.php:4337 src/Tribe/Main.php:4339
3188
  msgid "1 digit month slash 4 digit year"
3189
  msgstr ""
3190
 
3191
- #: src/Tribe/Main.php:4338 src/Tribe/Main.php:4340
3192
  msgid "2 digit month slash 4 digit year"
3193
  msgstr ""
3194
 
3195
- #: src/Tribe/Main.php:4341 src/Tribe/Main.php:4342 src/Tribe/Main.php:4343
3196
  msgid "1 digit month hyphen 4 digit year"
3197
  msgstr ""
3198
 
3199
- #: src/Tribe/Main.php:4344
3200
  msgid "2 digit month hyphen 4 digit year"
3201
  msgstr ""
3202
 
3203
- #: src/Tribe/Main.php:4345
3204
  msgid "4 digit year dot 2 digit month"
3205
  msgstr ""
3206
 
3207
- #: src/Tribe/Main.php:4346 src/Tribe/Main.php:4347
3208
  msgid "2 digit month dot 4 digit year"
3209
  msgstr ""
3210
 
3211
- #: src/Tribe/Main.php:4376 src/Tribe/Main.php:4413
3212
  #: src/admin-views/aggregator/origins/refine.php:7
3213
  msgid "Date"
3214
  msgstr ""
3215
 
3216
- #: src/Tribe/Main.php:4378
3217
  msgid "Search for %s by Date. Please use the format %s."
3218
  msgstr ""
3219
 
3220
- #: src/Tribe/Main.php:4391
3221
  msgid "%s In"
3222
  msgstr ""
3223
 
3224
- #: src/Tribe/Main.php:4393
3225
  msgid "Search for %s by month. Please use the format %s."
3226
  msgstr ""
3227
 
3228
- #: src/Tribe/Main.php:4396
3229
  msgid "%s From"
3230
  msgstr ""
3231
 
3232
- #: src/Tribe/Main.php:4399
3233
  msgid "Day Of"
3234
  msgstr ""
3235
 
3236
- #: src/Tribe/Main.php:4479
3237
  msgid "Once Every 30 Mins"
3238
  msgstr ""
3239
 
3240
- #: src/Tribe/Main.php:5206
3241
  msgid ""
3242
  "Your version of The Events Calendar is not up-to-date with one of your The "
3243
  "Events Calendar add-ons. Please %supdate now.%s"
3244
  msgstr ""
3245
 
3246
- #: src/Tribe/Main.php:5218
3247
  msgid ""
3248
  "The following plugins are out of date: %1$s. All add-ons contain "
3249
  "dependencies on The Events Calendar and will not function properly unless "
3250
  "paired with the right version. %2$sLearn More%3$s."
3251
  msgstr ""
3252
 
3253
- #: src/Tribe/Main.php:5257 src/Tribe/Main.php:5314
3254
  msgid "Use Saved %s:"
3255
  msgstr ""
3256
 
@@ -4753,7 +4754,7 @@ msgctxt "day_view"
4753
  msgid "%1$s for %2$s"
4754
  msgstr ""
4755
 
4756
- #: src/Tribe/Views/V2/View.php:1882 src/views/v2/day/event/date/featured.php:27
4757
  #: src/views/v2/day/event/date/featured.php:28
4758
  #: src/views/v2/day/event/date/featured.php:32
4759
  #: src/views/v2/latest-past/event/date/featured.php:27
@@ -4773,6 +4774,9 @@ msgstr ""
4773
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date/featured.php:27
4774
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date/featured.php:28
4775
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date/featured.php:32
 
 
 
4776
  msgid "Featured"
4777
  msgstr ""
4778
 
@@ -4802,38 +4806,42 @@ msgid "Jump to the %1$snext upcoming event(s)%2$s."
4802
  msgstr ""
4803
 
4804
  #. translators: %s: Events (plural).
4805
- #: src/Tribe/Views/V2/Views/Traits/iCal_Data.php:54
4806
  msgid "Export %s"
4807
  msgstr ""
4808
 
4809
- #: src/Tribe/Views/V2/Views/Traits/iCal_Data.php:59 src/Tribe/iCal.php:176
4810
  msgid ""
4811
  "Use this to share calendar data with Google Calendar, Apple iCal and other "
4812
  "compatible apps"
4813
  msgstr ""
4814
 
4815
- #: src/Tribe/iCal.php:53
 
 
 
 
4816
  msgctxt "feed link"
4817
  msgid "&raquo;"
4818
  msgstr ""
4819
 
4820
- #: src/Tribe/iCal.php:54
4821
  msgid "%1$s %2$s iCal Feed"
4822
  msgstr ""
4823
 
4824
- #: src/Tribe/iCal.php:122 src/views/blocks/event-links.php:35
4825
  msgid "Add to Google Calendar"
4826
  msgstr ""
4827
 
4828
- #: src/Tribe/iCal.php:123 src/views/blocks/event-links.php:46
4829
  msgid "Download .ics file"
4830
  msgstr ""
4831
 
4832
- #: src/Tribe/iCal.php:175
4833
  msgid "Export Events"
4834
  msgstr ""
4835
 
4836
- #: src/Tribe/iCal.php:423
4837
  msgctxt "iCal feed description"
4838
  msgid "Events for %s"
4839
  msgstr ""
@@ -7543,7 +7551,7 @@ msgstr ""
7543
  msgid "Previous day"
7544
  msgstr ""
7545
 
7546
- #: src/views/v2/day.php:44 src/views/v2/list.php:43 src/views/v2/month.php:42
7547
  msgid "Loading..."
7548
  msgstr ""
7549
 
@@ -7622,6 +7630,16 @@ msgstr ""
7622
  msgid "Previous month"
7623
  msgstr ""
7624
 
 
 
 
 
 
 
 
 
 
 
7625
  #: src/views/widgets/list-widget.php:112
7626
  msgid "View All %s"
7627
  msgstr ""
5
  "Project-Id-Version: The Events Calendar 5.2.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/the-events-"
7
  "calendar\n"
8
+ "POT-Creation-Date: 2020-10-20 15:45:50+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2020-10-20 15:45\n"
13
  "Last-Translator: \n"
14
  "Language-Team: \n"
15
 
47
  msgid "%s"
48
  msgstr ""
49
 
50
+ #: src/Tribe/Admin/Bar/Default_Configurator.php:45 src/Tribe/Main.php:4178
51
  #: src/admin-views/tribe-options-upgrade.php:20
52
  msgid "View Calendar"
53
  msgstr ""
57
  msgstr ""
58
 
59
  #: src/Tribe/Admin/Bar/Default_Configurator.php:62
60
+ #: src/Tribe/Linked_Posts/Chooser_Meta_Box.php:211 src/Tribe/Main.php:2046
61
+ #: src/Tribe/Main.php:5274 src/Tribe/Main.php:5321 src/Tribe/Organizer.php:93
62
  #: src/Tribe/Venue.php:112
63
  msgid "Edit %s"
64
  msgstr ""
69
  msgid "Import"
70
  msgstr ""
71
 
72
+ #: src/Tribe/Admin/Bar/Default_Configurator.php:89 src/Tribe/Main.php:4226
73
  msgid "Settings"
74
  msgstr ""
75
 
129
  "refresh and try again."
130
  msgstr ""
131
 
132
+ #: src/Tribe/Admin_List.php:246 src/Tribe/Main.php:2065
133
  msgid "%s Categories"
134
  msgstr ""
135
 
165
 
166
  #: src/Tribe/Aggregator/API/Origins.php:47
167
  #: src/Tribe/Aggregator/Record/gCal.php:14
168
+ #: src/Tribe/Editor/Blocks/Event_Links.php:26 src/Tribe/iCal.php:131
169
  #: src/admin-views/aggregator/settings.php:618
170
  msgid "Google Calendar"
171
  msgstr ""
1652
  msgid "Merge Duplicates"
1653
  msgstr ""
1654
 
1655
+ #: src/Tribe/Assets.php:707 src/deprecated/Tribe__Events__Asset__Dynamic.php:26
1656
  msgid "Sunday"
1657
  msgstr ""
1658
 
1659
+ #: src/Tribe/Assets.php:708 src/deprecated/Tribe__Events__Asset__Dynamic.php:27
1660
  msgid "Monday"
1661
  msgstr ""
1662
 
1663
+ #: src/Tribe/Assets.php:709 src/deprecated/Tribe__Events__Asset__Dynamic.php:28
1664
  msgid "Tuesday"
1665
  msgstr ""
1666
 
1667
+ #: src/Tribe/Assets.php:710 src/deprecated/Tribe__Events__Asset__Dynamic.php:29
1668
  msgid "Wednesday"
1669
  msgstr ""
1670
 
1671
+ #: src/Tribe/Assets.php:711 src/deprecated/Tribe__Events__Asset__Dynamic.php:30
1672
  msgid "Thursday"
1673
  msgstr ""
1674
 
1675
+ #: src/Tribe/Assets.php:712 src/deprecated/Tribe__Events__Asset__Dynamic.php:31
1676
  msgid "Friday"
1677
  msgstr ""
1678
 
1679
+ #: src/Tribe/Assets.php:713 src/deprecated/Tribe__Events__Asset__Dynamic.php:32
1680
  msgid "Saturday"
1681
  msgstr ""
1682
 
1683
+ #: src/Tribe/Assets.php:716 src/deprecated/Tribe__Events__Asset__Dynamic.php:35
1684
  msgid "Sun"
1685
  msgstr ""
1686
 
1687
+ #: src/Tribe/Assets.php:717 src/deprecated/Tribe__Events__Asset__Dynamic.php:36
1688
  msgid "Mon"
1689
  msgstr ""
1690
 
1691
+ #: src/Tribe/Assets.php:718 src/deprecated/Tribe__Events__Asset__Dynamic.php:37
1692
  msgid "Tue"
1693
  msgstr ""
1694
 
1695
+ #: src/Tribe/Assets.php:719 src/deprecated/Tribe__Events__Asset__Dynamic.php:38
1696
  msgid "Wed"
1697
  msgstr ""
1698
 
1699
+ #: src/Tribe/Assets.php:720 src/deprecated/Tribe__Events__Asset__Dynamic.php:39
1700
  msgid "Thu"
1701
  msgstr ""
1702
 
1703
+ #: src/Tribe/Assets.php:721 src/deprecated/Tribe__Events__Asset__Dynamic.php:40
1704
  msgid "Fri"
1705
  msgstr ""
1706
 
1707
+ #: src/Tribe/Assets.php:722 src/deprecated/Tribe__Events__Asset__Dynamic.php:41
1708
  msgid "Sat"
1709
  msgstr ""
1710
 
1711
+ #: src/Tribe/Assets.php:725 src/deprecated/Tribe__Events__Asset__Dynamic.php:44
1712
  msgid "January"
1713
  msgstr ""
1714
 
1715
+ #: src/Tribe/Assets.php:726 src/deprecated/Tribe__Events__Asset__Dynamic.php:45
1716
  msgid "February"
1717
  msgstr ""
1718
 
1719
+ #: src/Tribe/Assets.php:727 src/deprecated/Tribe__Events__Asset__Dynamic.php:46
1720
  msgid "March"
1721
  msgstr ""
1722
 
1723
+ #: src/Tribe/Assets.php:728 src/deprecated/Tribe__Events__Asset__Dynamic.php:47
1724
  msgid "April"
1725
  msgstr ""
1726
 
1727
+ #: src/Tribe/Assets.php:729 src/Tribe/Assets.php:743
1728
  #: src/deprecated/Tribe__Events__Asset__Dynamic.php:48
1729
  #: src/deprecated/Tribe__Events__Asset__Dynamic.php:62
1730
  msgid "May"
1731
  msgstr ""
1732
 
1733
+ #: src/Tribe/Assets.php:730 src/deprecated/Tribe__Events__Asset__Dynamic.php:49
1734
  msgid "June"
1735
  msgstr ""
1736
 
1737
+ #: src/Tribe/Assets.php:731 src/deprecated/Tribe__Events__Asset__Dynamic.php:50
1738
  msgid "July"
1739
  msgstr ""
1740
 
1741
+ #: src/Tribe/Assets.php:732 src/deprecated/Tribe__Events__Asset__Dynamic.php:51
1742
  msgid "August"
1743
  msgstr ""
1744
 
1745
+ #: src/Tribe/Assets.php:733 src/deprecated/Tribe__Events__Asset__Dynamic.php:52
1746
  msgid "September"
1747
  msgstr ""
1748
 
1749
+ #: src/Tribe/Assets.php:734 src/deprecated/Tribe__Events__Asset__Dynamic.php:53
1750
  msgid "October"
1751
  msgstr ""
1752
 
1753
+ #: src/Tribe/Assets.php:735 src/deprecated/Tribe__Events__Asset__Dynamic.php:54
1754
  msgid "November"
1755
  msgstr ""
1756
 
1757
+ #: src/Tribe/Assets.php:736 src/deprecated/Tribe__Events__Asset__Dynamic.php:55
1758
  msgid "December"
1759
  msgstr ""
1760
 
1761
+ #: src/Tribe/Assets.php:739 src/deprecated/Tribe__Events__Asset__Dynamic.php:58
1762
  msgid "Jan"
1763
  msgstr ""
1764
 
1765
+ #: src/Tribe/Assets.php:740 src/deprecated/Tribe__Events__Asset__Dynamic.php:59
1766
  msgid "Feb"
1767
  msgstr ""
1768
 
1769
+ #: src/Tribe/Assets.php:741 src/deprecated/Tribe__Events__Asset__Dynamic.php:60
1770
  msgid "Mar"
1771
  msgstr ""
1772
 
1773
+ #: src/Tribe/Assets.php:742 src/deprecated/Tribe__Events__Asset__Dynamic.php:61
1774
  msgid "Apr"
1775
  msgstr ""
1776
 
1777
+ #: src/Tribe/Assets.php:744 src/deprecated/Tribe__Events__Asset__Dynamic.php:63
1778
  msgid "Jun"
1779
  msgstr ""
1780
 
1781
+ #: src/Tribe/Assets.php:745 src/deprecated/Tribe__Events__Asset__Dynamic.php:64
1782
  msgid "Jul"
1783
  msgstr ""
1784
 
1785
+ #: src/Tribe/Assets.php:746 src/deprecated/Tribe__Events__Asset__Dynamic.php:65
1786
  msgid "Aug"
1787
  msgstr ""
1788
 
1789
+ #: src/Tribe/Assets.php:747 src/deprecated/Tribe__Events__Asset__Dynamic.php:66
1790
  msgid "Sep"
1791
  msgstr ""
1792
 
1793
+ #: src/Tribe/Assets.php:748 src/deprecated/Tribe__Events__Asset__Dynamic.php:67
1794
  msgid "Oct"
1795
  msgstr ""
1796
 
1797
+ #: src/Tribe/Assets.php:749 src/deprecated/Tribe__Events__Asset__Dynamic.php:68
1798
  msgid "Nov"
1799
  msgstr ""
1800
 
1801
+ #: src/Tribe/Assets.php:750 src/deprecated/Tribe__Events__Asset__Dynamic.php:69
1802
  msgid "Dec"
1803
  msgstr ""
1804
 
1805
+ #: src/Tribe/Assets.php:753 src/deprecated/Tribe__Events__Asset__Dynamic.php:72
1806
  msgid ""
1807
  "This event is from %%starttime%% to %%endtime%% on %%startdatewithyear%%."
1808
  msgstr ""
1809
 
1810
+ #: src/Tribe/Assets.php:754 src/deprecated/Tribe__Events__Asset__Dynamic.php:73
1811
  msgid "This event is at %%starttime%% on %%startdatewithyear%%."
1812
  msgstr ""
1813
 
1814
+ #: src/Tribe/Assets.php:755 src/deprecated/Tribe__Events__Asset__Dynamic.php:74
1815
  msgid "This event is all day on %%startdatewithyear%%."
1816
  msgstr ""
1817
 
1818
+ #: src/Tribe/Assets.php:756 src/deprecated/Tribe__Events__Asset__Dynamic.php:75
1819
  msgid ""
1820
  "This event starts at %%starttime%% on %%startdatenoyear%% and ends at %"
1821
  "%endtime%% on %%enddatewithyear%%"
1822
  msgstr ""
1823
 
1824
+ #: src/Tribe/Assets.php:757 src/deprecated/Tribe__Events__Asset__Dynamic.php:76
1825
  msgid ""
1826
  "This event starts at %%starttime%% on %%startdatenoyear%% and ends on %"
1827
  "%enddatewithyear%%"
1828
  msgstr ""
1829
 
1830
+ #: src/Tribe/Assets.php:758 src/deprecated/Tribe__Events__Asset__Dynamic.php:77
1831
  msgid ""
1832
  "This event is all day starting on %%startdatenoyear%% and ending on %"
1833
  "%enddatewithyear%%."
1999
  msgid "Show Featured Event Images"
2000
  msgstr ""
2001
 
2002
+ #: src/Tribe/Editor/Blocks/Event_Links.php:27 src/Tribe/iCal.php:132
2003
  msgid "iCal Export"
2004
  msgstr ""
2005
 
2027
  #: src/Tribe/Template/Single_Event.php:121
2028
  #: src/Tribe/Views/V2/Template_Bootstrap.php:136
2029
  #: src/Tribe/Views/V2/Template_Bootstrap.php:176
2030
+ #: src/Tribe/Views/V2/Template_Bootstrap.php:485
2031
  msgid "This %s has passed."
2032
  msgstr ""
2033
 
2614
  msgid "Create or Find %s"
2615
  msgstr ""
2616
 
2617
+ #: src/Tribe/List_Widget.php:32 src/Tribe/Views/V2/Widgets/Widget_List.php:96
2618
+ #: src/Tribe/Views/V2/Widgets/Widget_List.php:99
2619
  msgid "A widget that displays upcoming events."
2620
  msgstr ""
2621
 
2629
 
2630
  #. #-#-#-#-# the-events-calendar.pot (The Events Calendar 5.2.0) #-#-#-#-#
2631
  #. Plugin Name of the plugin/theme
2632
+ #: src/Tribe/Main.php:946 src/Tribe/Main.php:1401 src/Tribe/Privacy.php:29
2633
  #: src/admin-views/admin-welcome-message.php:29
2634
  #: src/functions/template-tags/general.php:1421 the-events-calendar.php:57
2635
  msgid "The Events Calendar"
2636
  msgstr ""
2637
 
2638
+ #: src/Tribe/Main.php:953
2639
  msgid "month"
2640
  msgstr ""
2641
 
2642
+ #: src/Tribe/Main.php:954
2643
  msgid "list"
2644
  msgstr ""
2645
 
2646
+ #: src/Tribe/Main.php:955
2647
  msgid "upcoming"
2648
  msgstr ""
2649
 
2650
+ #: src/Tribe/Main.php:956
2651
  msgid "past"
2652
  msgstr ""
2653
 
2654
+ #: src/Tribe/Main.php:957
2655
  msgid "day"
2656
  msgstr ""
2657
 
2658
+ #: src/Tribe/Main.php:958
2659
  msgid "today"
2660
  msgstr ""
2661
 
2662
+ #: src/Tribe/Main.php:959
2663
  msgctxt "featured events slug"
2664
  msgid "featured"
2665
  msgstr ""
2666
 
2667
+ #: src/Tribe/Main.php:960
2668
  msgctxt "all events slug"
2669
  msgid "all"
2670
  msgstr ""
2671
 
2672
+ #: src/Tribe/Main.php:984
2673
  msgid "Initializing Tribe Events on %s"
2674
  msgstr ""
2675
 
2676
+ #: src/Tribe/Main.php:1042 src/Tribe/Main.php:1044
2677
  msgid "Welcome to The Events Calendar!"
2678
  msgstr ""
2679
 
2680
+ #: src/Tribe/Main.php:1190
2681
  msgid ""
2682
  "The %3$s \"%1$s\" uses the \"/%2$s\" slug: the Events Calendar plugin will "
2683
  "show its calendar in place of the page."
2684
  msgstr ""
2685
 
2686
+ #: src/Tribe/Main.php:1193
2687
  msgid "Ask the site administrator to edit the %s slug"
2688
  msgstr ""
2689
 
2690
+ #: src/Tribe/Main.php:1195
2691
  msgid "Edit the %s slug"
2692
  msgstr ""
2693
 
2694
+ #: src/Tribe/Main.php:1199
2695
  msgid " ask the site administrator to set a different Events URL slug."
2696
  msgstr ""
2697
 
2698
+ #: src/Tribe/Main.php:1204
2699
  msgid "edit Events settings."
2700
  msgstr ""
2701
 
2702
+ #: src/Tribe/Main.php:1207
2703
  msgid "%1$s or %2$s"
2704
  msgstr ""
2705
 
2706
+ #: src/Tribe/Main.php:1276
2707
  msgid "Upgrade your calendar views"
2708
  msgstr ""
2709
 
2710
+ #: src/Tribe/Main.php:1312
2711
  msgid "Upgrade"
2712
  msgstr ""
2713
 
2714
+ #: src/Tribe/Main.php:1361
2715
  msgid "New User Primer"
2716
  msgstr ""
2717
 
2718
+ #: src/Tribe/Main.php:1363
2719
  msgid ""
2720
  "We are committed to helping make your calendar spectacular and have a wealth "
2721
  "of resources available, including a handy %s to get your calendar up and "
2722
  "running."
2723
  msgstr ""
2724
 
2725
+ #: src/Tribe/Main.php:1374
2726
  msgid "Support for The Events Calendar"
2727
  msgstr ""
2728
 
2729
+ #: src/Tribe/Main.php:1377
2730
  msgid ""
2731
  "%s: A thorough walkthrough of The Events Calendar and the settings that are "
2732
  "available to you."
2733
  msgstr ""
2734
 
2735
+ #: src/Tribe/Main.php:1377
2736
  msgid "Settings overview"
2737
  msgstr ""
2738
 
2739
+ #: src/Tribe/Main.php:1379
2740
  msgid ""
2741
  "%s: A complete look at the features you can expect to see right out of the "
2742
  "box as well as how to use them."
2743
  msgstr ""
2744
 
2745
+ #: src/Tribe/Main.php:1379
2746
  msgid "Features overview"
2747
  msgstr ""
2748
 
2749
+ #: src/Tribe/Main.php:1381
2750
  msgid ""
2751
  "%s: Our most comprehensive outline for customizing the calendar to suit your "
2752
  "needs, including custom layouts and styles."
2753
  msgstr ""
2754
 
2755
+ #: src/Tribe/Main.php:1381
2756
  msgid "Themer's Guide"
2757
  msgstr ""
2758
 
2759
+ #: src/Tribe/Main.php:1383
2760
  msgid ""
2761
  "%s: An overview of the default templates and styles that are included in the "
2762
  "plugin, as well as how to change them."
2763
  msgstr ""
2764
 
2765
+ #: src/Tribe/Main.php:1383
2766
  msgid "Using stylesheets and page templates"
2767
  msgstr ""
2768
 
2769
+ #: src/Tribe/Main.php:1385
2770
  msgid ""
2771
  "%s: Do you see an issue with your calendar? Go here first to find where it’s "
2772
  "coming from and how to fix it."
2773
  msgstr ""
2774
 
2775
+ #: src/Tribe/Main.php:1385
2776
  msgid "Troubleshooting common problems"
2777
  msgstr ""
2778
 
2779
+ #: src/Tribe/Main.php:1387
2780
  msgid ""
2781
  "%s: Code and guides for customizing your calendar in useful and interesting "
2782
  "ways."
2783
  msgstr ""
2784
 
2785
+ #: src/Tribe/Main.php:1387
2786
  msgid "Customizing the Events plugins"
2787
  msgstr ""
2788
 
2789
+ #: src/Tribe/Main.php:1402
2790
  msgid "Events Tickets"
2791
  msgstr ""
2792
 
2793
+ #: src/Tribe/Main.php:1403
2794
  msgid ""
2795
  "If you have tried the above steps and are still having trouble, you can post "
2796
  "a new thread to our WordPress.org forums for %1$s or %2$s. Our support staff "
2797
  "monitors these forums once a week and would be happy to assist you there. "
2798
  msgstr ""
2799
 
2800
+ #: src/Tribe/Main.php:1405 src/Tribe/Main.php:1413
2801
  msgid "premium support on our website"
2802
  msgstr ""
2803
 
2804
+ #: src/Tribe/Main.php:1406
2805
  msgid ""
2806
  "<strong>Looking for more immediate support?</strong> We offer %s with the "
2807
  "purchase of any of our premium plugins. Pick up a license and you can post "
2808
  "there directly and expect a response within 24-48 hours during weekdays"
2809
  msgstr ""
2810
 
2811
+ #: src/Tribe/Main.php:1410
2812
  msgid "open-source forum on WordPress.org"
2813
  msgstr ""
2814
 
2815
+ #: src/Tribe/Main.php:1411
2816
  msgid ""
2817
  "If you have tried the above steps and are still having trouble, you can post "
2818
  "a new thread to our %s. Our support staff monitors these forums once a week "
2819
  "and would be happy to assist you there."
2820
  msgstr ""
2821
 
2822
+ #: src/Tribe/Main.php:1414
2823
  msgid "Events Calendar PRO"
2824
  msgstr ""
2825
 
2826
+ #: src/Tribe/Main.php:1415
2827
  msgid ""
2828
  "<strong>Looking for more immediate support?</strong> We offer %1$s with the "
2829
  "purchase of any of our premium plugins (like %2$s). Pick up a license and "
2831
  "weekdays."
2832
  msgstr ""
2833
 
2834
+ #: src/Tribe/Main.php:1419
2835
  msgid "post a thread"
2836
  msgstr ""
2837
 
2838
+ #: src/Tribe/Main.php:1420
2839
  msgid ""
2840
  "If you have a valid license for one of our paid plugins, you can %s in our "
2841
  "premium support forums. Our support team monitors the forums and will "
2842
  "respond to your thread within 24-48 hours (during the week)."
2843
  msgstr ""
2844
 
2845
+ #: src/Tribe/Main.php:1463
2846
  #: src/deprecated/Tribe__Events__Importer__Admin_Page.php:207
2847
  #: src/functions/template-tags/general.php:130
2848
  msgid "Events"
2849
  msgstr ""
2850
 
2851
+ #: src/Tribe/Main.php:1471 src/admin-views/aggregator/tabs/import-form.php:227
2852
  #: src/admin-views/aggregator/tabs/import-form.php:239
2853
  #: src/functions/template-tags/general.php:74
2854
  msgid "Event"
2855
  msgstr ""
2856
 
2857
+ #: src/Tribe/Main.php:1688
2858
  msgid ""
2859
  "Sorry, The Events Calendar requires WordPress %s or higher. Please upgrade "
2860
  "your WordPress install."
2861
  msgstr ""
2862
 
2863
+ #: src/Tribe/Main.php:1691
2864
  msgid ""
2865
  "Sorry, The Events Calendar requires PHP %s or higher. Talk to your Web host "
2866
  "about moving you to a newer version of PHP."
2867
  msgstr ""
2868
 
2869
+ #: src/Tribe/Main.php:1723
2870
  msgid ""
2871
  "To continue using The Events Calendar, please install the latest version of"
2872
  msgstr ""
2873
 
2874
+ #: src/Tribe/Main.php:1725 src/Tribe/Main.php:1726
2875
  msgid "Event Tickets"
2876
  msgstr ""
2877
 
2878
+ #: src/Tribe/Main.php:1761
2879
  msgid ""
2880
  "It appears as if the tribe-common libraries cannot be found! The directory "
2881
  "should be in the \"common/\" directory in the events calendar plugin."
2882
  msgstr ""
2883
 
2884
+ #: src/Tribe/Main.php:1997 src/Tribe/Main.php:2456
2885
  msgid "category"
2886
  msgstr ""
2887
 
2888
+ #: src/Tribe/Main.php:2011 src/Tribe/Main.php:2455
2889
  msgid "tag"
2890
  msgstr ""
2891
 
2892
+ #: src/Tribe/Main.php:2044 src/Tribe/Organizer.php:91 src/Tribe/Venue.php:110
2893
  msgid "Add New"
2894
  msgstr ""
2895
 
2896
+ #: src/Tribe/Main.php:2045 src/Tribe/Main.php:2182 src/Tribe/Main.php:2183
2897
  #: src/Tribe/Organizer.php:92 src/Tribe/Venue.php:111
2898
  msgid "Add New %s"
2899
  msgstr ""
2900
 
2901
+ #: src/Tribe/Main.php:2047 src/Tribe/Organizer.php:94 src/Tribe/Venue.php:113
2902
  msgid "New %s"
2903
  msgstr ""
2904
 
2905
+ #: src/Tribe/Main.php:2048 src/Tribe/Organizer.php:95 src/Tribe/Venue.php:114
2906
  #: src/views/month/single-day.php:26
2907
  msgid "View %s"
2908
  msgstr ""
2909
 
2910
+ #: src/Tribe/Main.php:2049 src/Tribe/Organizer.php:96 src/Tribe/Venue.php:115
2911
  msgid "Search %s"
2912
  msgstr ""
2913
 
2914
+ #: src/Tribe/Main.php:2050 src/Tribe/Organizer.php:97 src/Tribe/Venue.php:116
2915
  msgid "No %s found"
2916
  msgstr ""
2917
 
2918
+ #: src/Tribe/Main.php:2051 src/Tribe/Organizer.php:98 src/Tribe/Venue.php:117
2919
  msgid "No %s found in Trash"
2920
  msgstr ""
2921
 
2922
+ #: src/Tribe/Main.php:2052 src/Tribe/Main.php:2139 src/Tribe/Main.php:2159
2923
  #: src/Tribe/Organizer.php:99 src/Tribe/Venue.php:118
2924
  msgid "%s published."
2925
  msgstr ""
2926
 
2927
+ #: src/Tribe/Main.php:2053 src/Tribe/Organizer.php:100 src/Tribe/Venue.php:119
2928
  msgid "%s published privately."
2929
  msgstr ""
2930
 
2931
+ #: src/Tribe/Main.php:2054 src/Tribe/Organizer.php:101 src/Tribe/Venue.php:120
2932
  msgid "%s reverted to draft."
2933
  msgstr ""
2934
 
2935
+ #: src/Tribe/Main.php:2055 src/Tribe/Organizer.php:102 src/Tribe/Venue.php:121
2936
  msgid "%s scheduled."
2937
  msgstr ""
2938
 
2939
+ #: src/Tribe/Main.php:2056 src/Tribe/Main.php:2098 src/Tribe/Main.php:2133
2940
+ #: src/Tribe/Main.php:2136 src/Tribe/Main.php:2153 src/Tribe/Main.php:2156
2941
  #: src/Tribe/Organizer.php:103 src/Tribe/Venue.php:122
2942
  msgid "%s updated."
2943
  msgstr ""
2944
 
2945
+ #: src/Tribe/Main.php:2066
2946
  msgid "%s Category"
2947
  msgstr ""
2948
 
2949
+ #: src/Tribe/Main.php:2067
2950
  msgid "Search %s Categories"
2951
  msgstr ""
2952
 
2953
+ #: src/Tribe/Main.php:2068
2954
  msgid "All %s Categories"
2955
  msgstr ""
2956
 
2957
+ #: src/Tribe/Main.php:2069
2958
  msgid "Parent %s Category"
2959
  msgstr ""
2960
 
2961
+ #: src/Tribe/Main.php:2070
2962
  msgid "Parent %s Category:"
2963
  msgstr ""
2964
 
2965
+ #: src/Tribe/Main.php:2071
2966
  msgid "Edit %s Category"
2967
  msgstr ""
2968
 
2969
+ #: src/Tribe/Main.php:2072
2970
  msgid "Update %s Category"
2971
  msgstr ""
2972
 
2973
+ #: src/Tribe/Main.php:2073
2974
  msgid "Add New %s Category"
2975
  msgstr ""
2976
 
2977
+ #: src/Tribe/Main.php:2074
2978
  msgid "New %s Category Name"
2979
  msgstr ""
2980
 
2981
+ #: src/Tribe/Main.php:2091
2982
  msgid "%1$s updated. %2$sView %1$s%3$s"
2983
  msgstr ""
2984
 
2985
+ #: src/Tribe/Main.php:2096 src/Tribe/Main.php:2134 src/Tribe/Main.php:2154
2986
  msgid "Custom field updated."
2987
  msgstr ""
2988
 
2989
+ #: src/Tribe/Main.php:2097 src/Tribe/Main.php:2135 src/Tribe/Main.php:2155
2990
  msgid "Custom field deleted."
2991
  msgstr ""
2992
 
2993
  #. translators: %s: date and time of the revision
2994
+ #: src/Tribe/Main.php:2100 src/Tribe/Main.php:2138
2995
  msgid "%1$s restored to revision from %2$s"
2996
  msgstr ""
2997
 
2998
+ #: src/Tribe/Main.php:2102
2999
  msgid "%1$s published. %2$sView %3$s"
3000
  msgstr ""
3001
 
3002
+ #: src/Tribe/Main.php:2107 src/Tribe/Main.php:2140 src/Tribe/Main.php:2160
3003
  msgid "%s saved."
3004
  msgstr ""
3005
 
3006
+ #: src/Tribe/Main.php:2109
3007
  msgid "%1$s submitted. %2$sPreview %3$s"
3008
  msgstr ""
3009
 
3010
+ #: src/Tribe/Main.php:2115
3011
  msgid "%1$s scheduled for: %2$s. %3$sPreview %4$s"
3012
  msgstr ""
3013
 
3014
  #. translators: Publish box date format, see http://php.net/date
3015
+ #: src/Tribe/Main.php:2118 src/Tribe/Main.php:2146 src/Tribe/Main.php:2166
3016
  msgid "M j, Y @ G:i"
3017
  msgstr ""
3018
 
3019
+ #: src/Tribe/Main.php:2124
3020
  msgid "%1$s draft updated. %2$sPreview %3$s"
3021
  msgstr ""
3022
 
3023
+ #: src/Tribe/Main.php:2141 src/Tribe/Main.php:2161
3024
  msgid "%s submitted."
3025
  msgstr ""
3026
 
3027
+ #: src/Tribe/Main.php:2143 src/Tribe/Main.php:2163
3028
  msgid "%1$s scheduled for: %2$s."
3029
  msgstr ""
3030
 
3031
+ #: src/Tribe/Main.php:2148 src/Tribe/Main.php:2168
3032
  msgid "%s draft updated."
3033
  msgstr ""
3034
 
3035
  #. translators: %s: date and time of the revision
3036
+ #: src/Tribe/Main.php:2158
3037
  msgid "%s restored to revision from %s"
3038
  msgstr ""
3039
 
3040
+ #: src/Tribe/Main.php:2212
3041
  msgid ""
3042
  "Without a defined location your event will not display a %sGoogle Rich "
3043
  "Snippet%s on the search results."
3044
  msgstr ""
3045
 
3046
+ #: src/Tribe/Main.php:2457
3047
  msgid "page"
3048
  msgstr ""
3049
 
3050
+ #: src/Tribe/Main.php:2458 src/functions/template-tags/general.php:102
3051
  msgid "event"
3052
  msgstr ""
3053
 
3054
+ #: src/Tribe/Main.php:2459 src/functions/template-tags/general.php:158
3055
  msgid "events"
3056
  msgstr ""
3057
 
3058
+ #: src/Tribe/Main.php:2460
3059
  msgid "all"
3060
  msgstr ""
3061
 
3062
+ #: src/Tribe/Main.php:2842
3063
  msgid " (View Full %1$s Description Here: %2$s)"
3064
  msgstr ""
3065
 
3066
+ #: src/Tribe/Main.php:3621 src/Tribe/Main.php:3656
3067
  #: src/functions/template-tags/day.php:157
3068
  #: src/functions/template-tags/day.php:178
3069
  msgid "Date out of range."
3070
  msgstr ""
3071
 
3072
+ #: src/Tribe/Main.php:3698
3073
  msgid "%s Options"
3074
  msgstr ""
3075
 
3076
+ #: src/Tribe/Main.php:3707 src/Tribe/Main.php:3720
3077
  msgid "%s Information"
3078
  msgstr ""
3079
 
3080
+ #: src/Tribe/Main.php:4052
3081
  msgid "Support"
3082
  msgstr ""
3083
 
3084
+ #: src/Tribe/Main.php:4055
3085
  msgid "View All Add-Ons"
3086
  msgstr ""
3087
 
3088
+ #: src/Tribe/Main.php:4075
3089
  msgid "News from Modern Tribe"
3090
  msgstr ""
3091
 
3092
+ #: src/Tribe/Main.php:4120
3093
  msgid "Additional Functionality"
3094
  msgstr ""
3095
 
3096
+ #: src/Tribe/Main.php:4125
3097
  msgid ""
3098
  "Looking for additional functionality including recurring events, ticket "
3099
  "sales, publicly submitted events, new views and more?"
3100
  msgstr ""
3101
 
3102
+ #: src/Tribe/Main.php:4126
3103
  msgid "Check out the %savailable add-ons%s."
3104
  msgstr ""
3105
 
3106
+ #: src/Tribe/Main.php:4227
3107
  msgid "Calendar"
3108
  msgstr ""
3109
 
3110
+ #: src/Tribe/Main.php:4243
3111
  msgid "List"
3112
  msgstr ""
3113
 
3114
+ #: src/Tribe/Main.php:4261
3115
  msgid "Month"
3116
  msgstr ""
3117
 
3118
+ #: src/Tribe/Main.php:4278 src/admin-views/aggregator/fields/schedule.php:43
3119
  #: src/admin-views/aggregator/fields/schedule.php:61
3120
  msgid "Day"
3121
  msgstr ""
3122
 
3123
+ #: src/Tribe/Main.php:4301
3124
  msgid "Search for %s by Keyword."
3125
  msgstr ""
3126
 
3127
+ #: src/Tribe/Main.php:4304
3128
  #: src/views/v2/components/events-bar/search-button.php:24
3129
  msgid "Search"
3130
  msgstr ""
3131
 
3132
+ #: src/Tribe/Main.php:4305
3133
  msgid "Keyword"
3134
  msgstr ""
3135
 
3136
+ #: src/Tribe/Main.php:4322
3137
  msgid "4 digit year hyphen 2 digit month hyphen 2 digit day"
3138
  msgstr ""
3139
 
3140
+ #: src/Tribe/Main.php:4323
3141
  msgid "1 digit month slash 1 digit day slash 4 digit year"
3142
  msgstr ""
3143
 
3144
+ #: src/Tribe/Main.php:4324
3145
  msgid "2 digit month slash 2 digit day slash 4 digit year"
3146
  msgstr ""
3147
 
3148
+ #: src/Tribe/Main.php:4325
3149
  msgid "1 digit day slash 1 digit month slash 4 digit year"
3150
  msgstr ""
3151
 
3152
+ #: src/Tribe/Main.php:4326
3153
  msgid "2 digit day slash 2 digit month slash 4 digit year"
3154
  msgstr ""
3155
 
3156
+ #: src/Tribe/Main.php:4327
3157
  msgid "1 digit month hyphen 1 digit day hyphen 4 digit year"
3158
  msgstr ""
3159
 
3160
+ #: src/Tribe/Main.php:4328
3161
  msgid "1 digit month hyphen 2 digit day hyphen 4 digit year"
3162
  msgstr ""
3163
 
3164
+ #: src/Tribe/Main.php:4329
3165
  msgid "1 digit day hyphen 1 digit month hyphen 4 digit year"
3166
  msgstr ""
3167
 
3168
+ #: src/Tribe/Main.php:4330
3169
  msgid "2 digit day hyphen 2 digit month hyphen 4 digit year"
3170
  msgstr ""
3171
 
3172
+ #: src/Tribe/Main.php:4331
3173
  msgid "4 digit year dot 2 digit month dot 2 digit day"
3174
  msgstr ""
3175
 
3176
+ #: src/Tribe/Main.php:4332
3177
  msgid "2 digit month dot 2 digit day dot 4 digit year"
3178
  msgstr ""
3179
 
3180
+ #: src/Tribe/Main.php:4333
3181
  msgid "2 digit day dot 2 digit month dot 4 digit year"
3182
  msgstr ""
3183
 
3184
+ #: src/Tribe/Main.php:4337
3185
  msgid "4 digit year hyphen 2 digit month"
3186
  msgstr ""
3187
 
3188
+ #: src/Tribe/Main.php:4338 src/Tribe/Main.php:4340
3189
  msgid "1 digit month slash 4 digit year"
3190
  msgstr ""
3191
 
3192
+ #: src/Tribe/Main.php:4339 src/Tribe/Main.php:4341
3193
  msgid "2 digit month slash 4 digit year"
3194
  msgstr ""
3195
 
3196
+ #: src/Tribe/Main.php:4342 src/Tribe/Main.php:4343 src/Tribe/Main.php:4344
3197
  msgid "1 digit month hyphen 4 digit year"
3198
  msgstr ""
3199
 
3200
+ #: src/Tribe/Main.php:4345
3201
  msgid "2 digit month hyphen 4 digit year"
3202
  msgstr ""
3203
 
3204
+ #: src/Tribe/Main.php:4346
3205
  msgid "4 digit year dot 2 digit month"
3206
  msgstr ""
3207
 
3208
+ #: src/Tribe/Main.php:4347 src/Tribe/Main.php:4348
3209
  msgid "2 digit month dot 4 digit year"
3210
  msgstr ""
3211
 
3212
+ #: src/Tribe/Main.php:4377 src/Tribe/Main.php:4414
3213
  #: src/admin-views/aggregator/origins/refine.php:7
3214
  msgid "Date"
3215
  msgstr ""
3216
 
3217
+ #: src/Tribe/Main.php:4379
3218
  msgid "Search for %s by Date. Please use the format %s."
3219
  msgstr ""
3220
 
3221
+ #: src/Tribe/Main.php:4392
3222
  msgid "%s In"
3223
  msgstr ""
3224
 
3225
+ #: src/Tribe/Main.php:4394
3226
  msgid "Search for %s by month. Please use the format %s."
3227
  msgstr ""
3228
 
3229
+ #: src/Tribe/Main.php:4397
3230
  msgid "%s From"
3231
  msgstr ""
3232
 
3233
+ #: src/Tribe/Main.php:4400
3234
  msgid "Day Of"
3235
  msgstr ""
3236
 
3237
+ #: src/Tribe/Main.php:4480
3238
  msgid "Once Every 30 Mins"
3239
  msgstr ""
3240
 
3241
+ #: src/Tribe/Main.php:5207
3242
  msgid ""
3243
  "Your version of The Events Calendar is not up-to-date with one of your The "
3244
  "Events Calendar add-ons. Please %supdate now.%s"
3245
  msgstr ""
3246
 
3247
+ #: src/Tribe/Main.php:5219
3248
  msgid ""
3249
  "The following plugins are out of date: %1$s. All add-ons contain "
3250
  "dependencies on The Events Calendar and will not function properly unless "
3251
  "paired with the right version. %2$sLearn More%3$s."
3252
  msgstr ""
3253
 
3254
+ #: src/Tribe/Main.php:5258 src/Tribe/Main.php:5315
3255
  msgid "Use Saved %s:"
3256
  msgstr ""
3257
 
4754
  msgid "%1$s for %2$s"
4755
  msgstr ""
4756
 
4757
+ #: src/Tribe/Views/V2/View.php:1916 src/views/v2/day/event/date/featured.php:27
4758
  #: src/views/v2/day/event/date/featured.php:28
4759
  #: src/views/v2/day/event/date/featured.php:32
4760
  #: src/views/v2/latest-past/event/date/featured.php:27
4774
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date/featured.php:27
4775
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date/featured.php:28
4776
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date/featured.php:32
4777
+ #: src/views/v2/widgets/events-list/event/date/featured.php:25
4778
+ #: src/views/v2/widgets/events-list/event/date/featured.php:26
4779
+ #: src/views/v2/widgets/events-list/event/date/featured.php:30
4780
  msgid "Featured"
4781
  msgstr ""
4782
 
4806
  msgstr ""
4807
 
4808
  #. translators: %s: Events (plural).
4809
+ #: src/Tribe/Views/V2/Views/Traits/iCal_Data.php:55
4810
  msgid "Export %s"
4811
  msgstr ""
4812
 
4813
+ #: src/Tribe/Views/V2/Views/Traits/iCal_Data.php:60 src/Tribe/iCal.php:185
4814
  msgid ""
4815
  "Use this to share calendar data with Google Calendar, Apple iCal and other "
4816
  "compatible apps"
4817
  msgstr ""
4818
 
4819
+ #: src/Tribe/Views/V2/Widgets/Widget_List.php:98
4820
+ msgid "Events List V2"
4821
+ msgstr ""
4822
+
4823
+ #: src/Tribe/iCal.php:55
4824
  msgctxt "feed link"
4825
  msgid "&raquo;"
4826
  msgstr ""
4827
 
4828
+ #: src/Tribe/iCal.php:56
4829
  msgid "%1$s %2$s iCal Feed"
4830
  msgstr ""
4831
 
4832
+ #: src/Tribe/iCal.php:131 src/views/blocks/event-links.php:35
4833
  msgid "Add to Google Calendar"
4834
  msgstr ""
4835
 
4836
+ #: src/Tribe/iCal.php:132 src/views/blocks/event-links.php:46
4837
  msgid "Download .ics file"
4838
  msgstr ""
4839
 
4840
+ #: src/Tribe/iCal.php:184
4841
  msgid "Export Events"
4842
  msgstr ""
4843
 
4844
+ #: src/Tribe/iCal.php:432
4845
  msgctxt "iCal feed description"
4846
  msgid "Events for %s"
4847
  msgstr ""
7551
  msgid "Previous day"
7552
  msgstr ""
7553
 
7554
+ #: src/views/v2/day.php:46 src/views/v2/list.php:45 src/views/v2/month.php:44
7555
  msgid "Loading..."
7556
  msgstr ""
7557
 
7630
  msgid "Previous month"
7631
  msgstr ""
7632
 
7633
+ #: src/views/v2/widgets/events-list/view-more.php:28
7634
+ msgid "View more"
7635
+ msgstr ""
7636
+
7637
+ #. translators: %1$s: Event (plural).
7638
+ #: src/views/v2/widgets/events-list.php:87
7639
+ msgctxt "Title for events list widget."
7640
+ msgid "Upcoming %1$s"
7641
+ msgstr ""
7642
+
7643
  #: src/views/widgets/list-widget.php:112
7644
  msgid "View All %s"
7645
  msgstr ""
readme.txt CHANGED
@@ -1,11 +1,11 @@
1
  === The Events Calendar ===
2
 
3
- Contributors: ModernTribe, borkweb, barry.hughes, bordoni, brianjessee, aguseo, Camwyn, cliffpaulick, courane01, faction23, GeoffBel, geoffgraham, jbrinley, jentheo, leahkoerper, lucatume, neillmcshea, nicosantos, patriciahillebrandt, peterchester, paulskim, reid.peifer, roblagatta, ryancurban, shane.pearlman, vicskf, zbtirrell, juanfra
4
  Tags: events, calendar, event, venue, organizer, dates, date, google maps, conference, workshop, concert, meeting, seminar, summit, class, modern tribe, tribe, widget
5
  Donate link: https://m.tri.be/29
6
  Requires at least: 4.9.14
7
- Stable tag: 5.2.0.1
8
- Tested up to: 5.5.1
9
  Requires PHP: 5.6
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -26,7 +26,7 @@ See the calendar in action on our [demo experience](https://m.tri.be/1ajs). Just
26
 
27
  Looking for additional features like recurring events, ticket sales, user-submitted events, automatic imports, and more?
28
 
29
- <strong>Check out [Events Calendar Pro](https://m.tri.be/mj), [Event Aggregator](https://m.tri.be/197u), and [more add-ons](https://m.tri.be/2a)</strong>
30
 
31
  = 🔌🎨 Plug and Play or Customize =
32
 
@@ -222,10 +222,26 @@ Remember to always make a backup of your database and files before updating!
222
 
223
  == Changelog ==
224
 
225
- = [5.2.0.1] 2021-05-05 =
226
 
227
  * Fix - Improve escaping for messages when no results were found using search (Thanks Steve Pollak)
228
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229
  = [5.2.0] 2020-09-28 =
230
 
231
  * Fix - Fix the order of the List View when the PRO is set to show only the first instance of a Recurring Event. [ECP-467]
@@ -719,16 +735,16 @@ Remember to always make a backup of your database and files before updating!
719
  = [4.7.2] 2018-12-13 =
720
 
721
  * Feature - Added new action `tribe_events_before_event_template_data_date_display` and `tribe_events_after_event_template_data_date_display`
722
- * Tweak - Corrected font on time picker components in Event Date Time block [116907]
723
- * Tweak - Adjusted padding on the Event Date Time block [118697]
724
- * Tweak - Set default start time to 8:00am and default end time to 5:00pm in Event Date Time block [118112]
725
- * Fix - Corrected an issue where feature detection of async-process support would fire too many requests [118876]
726
  * Fix - Removed tribe_events_template_data()'s dependency on Events Calendar PRO, which could lead to a fatal error under some conditions [119263]
727
  * Fix - Made the Event Date Time block respect the timezone settings [118682]
728
  * Fix - Removed Price block dashboard gap [118683]
729
  * Fix - Made sure all block editor code for Meta saving is PHP 5.2 compatible
730
  * Fix - Prevented `undefined` from been displayed at the Event Date Time separator fields [119337]
731
- * Fix - Solved 500 error when trying to update an event [118058]s
732
 
733
  = [4.7.1] 2018-12-05 =
734
 
1
  === The Events Calendar ===
2
 
3
+ Contributors: ModernTribe, borkweb,bordoni, brianjessee, aguseo, camwynsp, cliffpaulick, GeoffBel, geoffgraham, jentheo, leahkoerper, lucatume, neillmcshea, patriciahillebrandt, peterchester, paulskim, reid.peifer, shane.pearlman, vicskf, zbtirrell, juanfra
4
  Tags: events, calendar, event, venue, organizer, dates, date, google maps, conference, workshop, concert, meeting, seminar, summit, class, modern tribe, tribe, widget
5
  Donate link: https://m.tri.be/29
6
  Requires at least: 4.9.14
7
+ Stable tag: 5.2.1.2
8
+ Tested up to: 5.5.3
9
  Requires PHP: 5.6
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
26
 
27
  Looking for additional features like recurring events, ticket sales, user-submitted events, automatic imports, and more?
28
 
29
+ <strong>Check out [Events Calendar Pro](https://m.tri.be/mj), [Event Aggregator](https://m.tri.be/197u), and [more add-ons](https://m.tri.be/2a)</strong> ...and all of them are on sale from November 23-30 during our annual 💰[Black Friday Sale](https://m.tri.be/1aod)💰
30
 
31
  = 🔌🎨 Plug and Play or Customize =
32
 
222
 
223
  == Changelog ==
224
 
225
+ = [5.2.1.2] 2021-05-05 =
226
 
227
  * Fix - Improve escaping for messages when no results were found using search (Thanks Steve Pollak)
228
 
229
+ = [5.2.1.1] 2020-11-19 =
230
+
231
+ * Tweak - Update version of Freemius to the latest version 2.4.1 [TEC-3668]
232
+
233
+ = [5.2.1] 2020-10-22 =
234
+
235
+ * Tweak - Change Views v2 AJAX request method from GET to POST to avoid issues with too long URLs. [TEC-3283]
236
+ * Tweak - Add the `tribe_events_views_v2_endpoint_method` filter to allow controlling the HTTP method Views should use to fetch their content from the back-end endpoint. [TEC-3283]
237
+ * Tweak - Add the `tribe_events_views_v2_endpoint_url` filter to allow controlling the URL Views should use to fetch their content from the back-end endpoint. [TEC-3283]
238
+ * Fix - Prevent Event Aggregator 15 minute Cron Schedule from being created when not required (props @jetxpert) [EA-317]
239
+ * Fix - Add filter to toggle off the event templates hijack. [TEC-3521]
240
+ * Fix - Correct url for current month iCal export link. [TEC-3575]
241
+ * Fix - Avoid loading the same CSS file twice on the back-end. [TEC-3623]
242
+ * Fix - Ensure ECP shortcode prev/next urls handle categories gracefully. [ECP-492]
243
+ * Language - 3 new strings added, 200 updated, 0 fuzzied, and 0 obsoleted
244
+
245
  = [5.2.0] 2020-09-28 =
246
 
247
  * Fix - Fix the order of the List View when the PRO is set to show only the first instance of a Recurring Event. [ECP-467]
735
  = [4.7.2] 2018-12-13 =
736
 
737
  * Feature - Added new action `tribe_events_before_event_template_data_date_display` and `tribe_events_after_event_template_data_date_display`
738
+ * Tweak - Corrected font on time picker components in Event Date Time block [116907]
739
+ * Tweak - Adjusted padding on the Event Date Time block [118697]
740
+ * Tweak - Set default start time to 8:00am and default end time to 5:00pm in Event Date Time block [118112]
741
+ * Fix - Corrected an issue where feature detection of async-process support would fire too many requests [118876]
742
  * Fix - Removed tribe_events_template_data()'s dependency on Events Calendar PRO, which could lead to a fatal error under some conditions [119263]
743
  * Fix - Made the Event Date Time block respect the timezone settings [118682]
744
  * Fix - Removed Price block dashboard gap [118683]
745
  * Fix - Made sure all block editor code for Meta saving is PHP 5.2 compatible
746
  * Fix - Prevented `undefined` from been displayed at the Event Date Time separator fields [119337]
747
+ * Fix - Solved 500 error when trying to update an event [118058]s
748
 
749
  = [4.7.1] 2018-12-05 =
750
 
src/Tribe/Aggregator/Record/Queue_Processor.php CHANGED
@@ -68,6 +68,20 @@ class Tribe__Events__Aggregator__Record__Queue_Processor {
68
  * batches of pending import record inserts/updates.
69
  */
70
  public function register_scheduled_task() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  if ( wp_next_scheduled( self::$scheduled_key ) ) {
72
  return;
73
  }
@@ -164,11 +178,23 @@ class Tribe__Events__Aggregator__Record__Queue_Processor {
164
  *
165
  * If no records in need of further processing can be found it will return bool false.
166
  *
 
 
167
  * @param boolean $interactive_only Whether or not we should look for imports that were kicked off interactively
 
168
  *
169
- * @return boolean
170
  */
171
- public function next_waiting_record( $interactive_only = false ) {
 
 
 
 
 
 
 
 
 
172
  $args = array(
173
  'post_type' => Tribe__Events__Aggregator__Records::$post_type,
174
  'post_status' => 'any',
@@ -195,6 +221,12 @@ class Tribe__Events__Aggregator__Record__Queue_Processor {
195
  }
196
 
197
  $next_record = array_shift( $waiting_records );
 
 
 
 
 
 
198
  return $this->current_record_id = $next_record->ID;
199
  }
200
 
68
  * batches of pending import record inserts/updates.
69
  */
70
  public function register_scheduled_task() {
71
+ // Bail on registration of scheduled event in case we dont have an API setup.
72
+ if ( is_wp_error( tribe( 'events-aggregator.service' )->api() ) ) {
73
+ // Also clear in case we dont have an API key.
74
+ $this->clear_scheduled_task();
75
+ return;
76
+ }
77
+
78
+ // Prevent from trying to schedule in case we dont have any scheduled records to process, value will either be false or 0.
79
+ if ( ! $this->next_waiting_record( false, true ) ) {
80
+ // Also clear in case we don't have any records to process.
81
+ $this->clear_scheduled_task();
82
+ return;
83
+ }
84
+
85
  if ( wp_next_scheduled( self::$scheduled_key ) ) {
86
  return;
87
  }
178
  *
179
  * If no records in need of further processing can be found it will return bool false.
180
  *
181
+ * @since TBD Inclusion of a $cache param for performance purposes.
182
+ *
183
  * @param boolean $interactive_only Whether or not we should look for imports that were kicked off interactively
184
+ * @param boolean $cache When checking on every request we should utilize transient caching to prevent hitting the DB every time.
185
  *
186
+ * @return boolean|integer
187
  */
188
+ public function next_waiting_record( $interactive_only = false, $cache = false ) {
189
+ if ( true === $cache ) {
190
+ $transient_key = 'tribe-event-aggregator-next_waiting_record' . ( ! $interactive_only ?: '_interactive_only' );
191
+ $next_waiting_record = get_transient( $transient_key );
192
+
193
+ if ( ! empty( $next_waiting_record ) ) {
194
+ return $this->current_record_id = $next_waiting_record;
195
+ }
196
+ }
197
+
198
  $args = array(
199
  'post_type' => Tribe__Events__Aggregator__Records::$post_type,
200
  'post_status' => 'any',
221
  }
222
 
223
  $next_record = array_shift( $waiting_records );
224
+
225
+ // Set cache in case of usage.
226
+ if ( true === $cache ) {
227
+ set_transient( $transient_key, $next_record->ID, 5 * MINUTE_IN_SECONDS );
228
+ }
229
+
230
  return $this->current_record_id = $next_record->ID;
231
  }
232
 
src/Tribe/Assets.php CHANGED
@@ -82,19 +82,6 @@ class Tribe__Events__Assets {
82
  )
83
  );
84
 
85
- // All tribe events pages
86
- tribe_asset(
87
- $plugin,
88
- 'tribe_events-admin',
89
- 'events-admin.css',
90
- array(),
91
- 'admin_enqueue_scripts',
92
- array(
93
- 'groups' => array( 'events-admin' ),
94
- 'conditionals' => array( $this, 'should_enqueue_admin' ),
95
- )
96
- );
97
-
98
  // Post Type admin page
99
  tribe_assets(
100
  $plugin,
82
  )
83
  );
84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  // Post Type admin page
86
  tribe_assets(
87
  $plugin,
src/Tribe/Integrations/WPML/Views/V2/Filters.php ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Manages integration between WPML and Views v2 filters of The Events Calendar.
4
+ *
5
+ * @since 5.2.1
6
+ *
7
+ * @package Tribe\Events\Integrations\WPML\Views\V2
8
+ */
9
+
10
+ namespace Tribe\Events\Integrations\WPML\Views\V2;
11
+
12
+ /**
13
+ * Class Filters
14
+ *
15
+ * @since 5.2.1
16
+ *
17
+ * @package Tribe\Events\Integrations\WPML\Views\V2
18
+ */
19
+ class Filters {
20
+ /**
21
+ * Translates the View URL.
22
+ *
23
+ * @since 5.2.1
24
+ *
25
+ * @param string $url The original View URL.
26
+ *
27
+ * @return string The translated View URL.
28
+ */
29
+ public static function translate_view_url( $url ) {
30
+ $lang = static::get_request_lang();
31
+ if ( false === $lang ) {
32
+ return $url;
33
+ }
34
+
35
+ return apply_filters( 'wpml_permalink', $url, $lang );
36
+ }
37
+
38
+ /**
39
+ * Returns the current request language, read from the request cookie.
40
+ *
41
+ * @since 5.2.1
42
+ *
43
+ * @return string|false Either the request language, e.g. `fr`, or `false` to indicate the language could not be
44
+ * parsed from the request context.
45
+ */
46
+ protected static function get_request_lang() {
47
+ return defined( 'ICL_LANGUAGE_CODE' ) ? ICL_LANGUAGE_CODE : false;
48
+ }
49
+
50
+ /**
51
+ * Translates the URls contained in the View template variables.
52
+ *
53
+ * @since 5.2.1
54
+ *
55
+ * @param array<string,mixed> $template_vars The original View template variables.
56
+ *
57
+ * @return array<string,mixed> The View template variables, with the URLs there contained translated, if required.
58
+ */
59
+ public static function translate_template_vars_urls( $template_vars = [] ) {
60
+ if ( ! is_array( $template_vars ) ) {
61
+ return $template_vars;
62
+ }
63
+
64
+ $url_keys = array_filter(
65
+ $template_vars,
66
+ static function ( $value, $key ) {
67
+ return strpos( $key, 'url' ) !== false && (bool) filter_var( $value, FILTER_VALIDATE_URL );
68
+ },
69
+ ARRAY_FILTER_USE_BOTH
70
+ );
71
+
72
+ if ( 0 === count( $url_keys ) ) {
73
+ return $template_vars;
74
+ }
75
+
76
+ $lang = static::get_request_lang();
77
+
78
+ if ( false === $lang ) {
79
+ return $template_vars;
80
+ }
81
+
82
+ foreach ( $url_keys as $key => $value ) {
83
+ $template_vars[ $key ] = apply_filters( 'wpml_permalink', $value, $lang );
84
+ }
85
+
86
+ return $template_vars;
87
+ }
88
+
89
+ /**
90
+ * Translates the URL of the public Views, the ones selectable in the Views selector.
91
+ *
92
+ * @since 5.2.1
93
+ *
94
+ * @param array<string,array<string,mixed>> $public_views The original data for the current public Views.
95
+ *
96
+ * @return array<string,array<string,mixed>> $public_views The modified data for the current public Views.
97
+ */
98
+ public static function translate_public_views_urls( $public_views = [] ) {
99
+ if ( ! is_array( $public_views ) ) {
100
+ return $public_views;
101
+ }
102
+
103
+ $lang = static::get_request_lang();
104
+
105
+ if ( false === $lang ) {
106
+ return $public_views;
107
+ }
108
+
109
+ array_walk(
110
+ $public_views,
111
+ static function ( $view_data ) use ( $lang ) {
112
+ if ( ! isset( $view_data->view_url ) ) {
113
+ return;
114
+ }
115
+ $view_data->view_url = apply_filters( 'wpml_permalink', $view_data->view_url, $lang );
116
+ }
117
+ );
118
+
119
+ return $public_views;
120
+ }
121
+
122
+ /**
123
+ * Updates the Views v2 request URI used to set up the `$_SERVER['REQUEST_URI']` in the `View::setup_the_loop`
124
+ * method to make sure it will point to the correct URL.
125
+ *
126
+ * @since 5.2.1
127
+ *
128
+ * @param string $request_uri The original request URI.
129
+ *
130
+ * @return string The corrected request URI.
131
+ */
132
+ public static function translate_view_request_uri( $request_uri ) {
133
+ if ( ! is_string( $request_uri ) ) {
134
+ return $request_uri;
135
+ }
136
+
137
+ $lang = static::get_request_lang();
138
+
139
+ if ( false === $lang ) {
140
+ return $request_uri;
141
+ }
142
+
143
+ if ( static::using_subdir() && strpos( $request_uri, '/' . $lang ) !== 0 ) {
144
+ $request_uri = '/' . $lang . $request_uri;
145
+ }
146
+
147
+ return $request_uri;
148
+ }
149
+
150
+ /**
151
+ * Returns whether the current WPML URL translation setting is the sub-directory one (e.g. `http://foo.bar/it`) or
152
+ * not.
153
+ *
154
+ * @since 5.2.1
155
+ *
156
+ * @return bool Whether the current WPML URL translation setting is the sub-directory one or not.
157
+ */
158
+ protected static function using_subdir() {
159
+ /** @var \SitePress $sitepress */
160
+ global $sitepress;
161
+ $lang_negotiation = (int) $sitepress->get_setting( 'language_negotiation_type' );
162
+
163
+ return WPML_LANGUAGE_NEGOTIATION_TYPE_DIRECTORY === $lang_negotiation;
164
+ }
165
+ }
src/Tribe/Integrations/WPML/WPML.php CHANGED
@@ -1,4 +1,7 @@
1
  <?php
 
 
 
2
  /**
3
  * Class Tribe__Events__Integrations__WPML__WPML
4
  *
@@ -83,6 +86,17 @@ class Tribe__Events__Integrations__WPML__WPML {
83
  $option = Tribe__Events__Integrations__WPML__Option::instance();
84
  add_filter( 'tribe_get_single_option', [ $option, 'translate' ], 20, 3 );
85
  }
 
 
 
 
 
 
 
 
 
 
 
86
  }
87
 
88
  protected function setup_cache_expiration_triggers() {
1
  <?php
2
+
3
+ use Tribe\Events\Integrations\WPML\Views\V2\Filters as Views_V2_Filters;
4
+
5
  /**
6
  * Class Tribe__Events__Integrations__WPML__WPML
7
  *
86
  $option = Tribe__Events__Integrations__WPML__Option::instance();
87
  add_filter( 'tribe_get_single_option', [ $option, 'translate' ], 20, 3 );
88
  }
89
+
90
+ /*
91
+ * Handle Views v2 URLs in all the places that's required.
92
+ *
93
+ * Commented out as this is not a reliably working implementation.
94
+ *
95
+ add_filter( 'tribe_events_views_v2_view_url', [ Views_V2_Filters::class, 'translate_view_url' ] );
96
+ add_filter( 'tribe_events_views_v2_view_template_vars', [ Views_V2_Filters::class, 'translate_template_vars_urls' ] );
97
+ add_filter( 'tribe_events_views_v2_view_public_views', [ Views_V2_Filters::class, 'translate_public_views_urls' ] );
98
+ add_filter( 'tribe_events_views_v2_request_uri', [ Views_V2_Filters::class, 'translate_view_request_uri' ] );
99
+ */
100
  }
101
 
102
  protected function setup_cache_expiration_triggers() {
src/Tribe/Integrations/X_Theme/X_Theme.php CHANGED
@@ -27,7 +27,7 @@ class Tribe__Events__Integrations__X_Theme__X_Theme {
27
  }
28
 
29
  /**
30
- * Hooks the filters and actions neede for this integration to work.
31
  */
32
  public function hook() {
33
  add_filter( 'template_include', array( $this, 'filter_template_include' ) );
27
  }
28
 
29
  /**
30
+ * Hooks the filters and actions needed for this integration to work.
31
  */
32
  public function hook() {
33
  add_filter( 'template_include', array( $this, 'filter_template_include' ) );
src/Tribe/Main.php CHANGED
@@ -35,7 +35,7 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
35
  const VENUE_POST_TYPE = 'tribe_venue';
36
  const ORGANIZER_POST_TYPE = 'tribe_organizer';
37
 
38
- const VERSION = '5.2.0.1';
39
 
40
  /**
41
  * Min Pro Addon
@@ -615,6 +615,7 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
615
 
616
  // The Views v2 service provider.
617
  tribe_register_provider( Tribe\Events\Views\V2\Service_Provider::class );
 
618
 
619
  // Register and start the Customizer Sections
620
  if ( ! tribe_events_views_v2_is_enabled() ) {
35
  const VENUE_POST_TYPE = 'tribe_venue';
36
  const ORGANIZER_POST_TYPE = 'tribe_organizer';
37
 
38
+ const VERSION = '5.2.1.2';
39
 
40
  /**
41
  * Min Pro Addon
615
 
616
  // The Views v2 service provider.
617
  tribe_register_provider( Tribe\Events\Views\V2\Service_Provider::class );
618
+ tribe_register_provider( Tribe\Events\Views\V2\Widgets\Service_Provider::class );
619
 
620
  // Register and start the Customizer Sections
621
  if ( ! tribe_events_views_v2_is_enabled() ) {
src/Tribe/Views/V2/Assets.php CHANGED
@@ -99,6 +99,49 @@ class Assets extends \tad_DI52_ServiceProvider {
99
  ]
100
  );
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  tribe_asset(
103
  $plugin,
104
  'tribe-events-views-v2-bootstrap-datepicker',
99
  ]
100
  );
101
 
102
+ /**
103
+ * @todo: @paulmskim figure out how to enqueue only when widget is available.
104
+ * @todo: @paulmskim commented out for release so widget styles do not enqueue, uncomment when actually releasing.
105
+ */
106
+ // tribe_asset(
107
+ // $plugin,
108
+ // 'tribe-events-widgets-v2-skeleton',
109
+ // 'widgets-skeleton.css',
110
+ // [
111
+ // 'tribe-common-skeleton-style',
112
+ // ],
113
+ // 'wp_enqueue_scripts',
114
+ // [
115
+ // 'priority' => 10,
116
+ // 'conditionals' => [ $this, 'should_enqueue_frontend' ],
117
+ // 'groups' => [ static::$group_key ],
118
+ // ]
119
+ // );
120
+
121
+ /**
122
+ * @todo: @paulmskim figure out how to enqueue only when widget is available.
123
+ * @todo: @paulmskim commented out for release so widget styles do not enqueue, uncomment when actually releasing.
124
+ */
125
+ // tribe_asset(
126
+ // $plugin,
127
+ // 'tribe-events-widgets-v2-full',
128
+ // 'widgets-full.css',
129
+ // [
130
+ // 'tribe-common-full-style',
131
+ // 'tribe-events-widgets-v2-skeleton',
132
+ // ],
133
+ // 'wp_enqueue_scripts',
134
+ // [
135
+ // 'priority' => 10,
136
+ // 'conditionals' => [
137
+ // 'operator' => 'AND',
138
+ // [ $this, 'should_enqueue_frontend' ],
139
+ // [ $this, 'should_enqueue_full_styles' ],
140
+ // ],
141
+ // 'groups' => [ static::$group_key ],
142
+ // ]
143
+ // );
144
+
145
  tribe_asset(
146
  $plugin,
147
  'tribe-events-views-v2-bootstrap-datepicker',
src/Tribe/Views/V2/Hooks.php CHANGED
@@ -552,7 +552,7 @@ class Hooks extends \tad_DI52_ServiceProvider {
552
  *
553
  * @since 4.9.13
554
  *
555
- * @param array $fields Fields that were passed for the Settigns tab.
556
  *
557
  * @return array Fields after changing the tooltip.
558
  */
@@ -571,7 +571,7 @@ class Hooks extends \tad_DI52_ServiceProvider {
571
  *
572
  * @since 4.9.13
573
  *
574
- * @param array $plugins List of plugisn to be checked.
575
  *
576
  * @return array
577
  */
@@ -833,7 +833,7 @@ class Hooks extends \tad_DI52_ServiceProvider {
833
  'tribe-events-views-v2-full',
834
  ];
835
 
836
- // Unenqueue legacy sheets.
837
  $keys = array_keys( $sheets, 'tribe-events-calendar-style' );
838
  if ( ! empty( $keys ) ) {
839
  foreach ( $keys as $key ) {
552
  *
553
  * @since 4.9.13
554
  *
555
+ * @param array $fields Fields that were passed for the Settings tab.
556
  *
557
  * @return array Fields after changing the tooltip.
558
  */
571
  *
572
  * @since 4.9.13
573
  *
574
+ * @param array $plugins List of plugins to be checked.
575
  *
576
  * @return array
577
  */
833
  'tribe-events-views-v2-full',
834
  ];
835
 
836
+ // Dequeue legacy sheets.
837
  $keys = array_keys( $sheets, 'tribe-events-calendar-style' );
838
  if ( ! empty( $keys ) ) {
839
  foreach ( $keys as $key ) {
src/Tribe/Views/V2/Rest_Endpoint.php CHANGED
@@ -48,19 +48,38 @@ class Rest_Endpoint {
48
  protected static $did_rest_authentication_errors;
49
 
50
  /**
51
- * Returns the final REST URL for the HTML
 
 
 
52
  *
53
  * @since 4.9.2
 
54
  *
55
- * @return string
56
  */
57
  public function get_url() {
58
- if ( ! $this->is_available() ) {
 
 
59
  $url = admin_url( 'admin-ajax.php' );
60
- return add_query_arg( [ 'action' => static::$ajax_action ], $url );
 
 
61
  }
62
 
63
- return get_rest_url( null, static::ROOT_NAMESPACE . '/html' );
 
 
 
 
 
 
 
 
 
 
 
64
  }
65
 
66
  /**
@@ -140,12 +159,14 @@ class Rest_Endpoint {
140
  * Register the endpoint if available.
141
  *
142
  * @since 4.9.7
 
143
  *
144
  * @return boolean If we registered the endpoint.
145
  */
146
  public function register() {
147
  return register_rest_route( static::ROOT_NAMESPACE, '/html', [
148
- 'methods' => Server::READABLE,
 
149
  // @todo Make sure we do proper handling of cache longer then 12h.
150
  'permission_callback' => static function ( Request $request ) {
151
 
@@ -188,13 +209,14 @@ class Rest_Endpoint {
188
  * the REST API still have the Views V2 working.
189
  *
190
  * @since 4.9.7
 
191
  *
192
  * @param array $params Associative array with the params that will be used on this mocked request
193
  *
194
  * @return Request The mocked request.
195
  */
196
  public function get_mocked_rest_request( array $params ) {
197
- $request = new Request( 'GET', static::ROOT_NAMESPACE . '/html' );
198
  $arguments = $this->get_request_arguments();
199
 
200
  foreach ( $params as $key => $value ) {
@@ -224,11 +246,12 @@ class Rest_Endpoint {
224
  * and use the same method behind the scenes to make sure we have consistency.
225
  *
226
  * @since 4.9.7
227
- *
228
- * @return void
229
  */
230
  public function handle_ajax_request() {
231
- $request = $this->get_mocked_rest_request( $_GET );
 
 
232
  if ( is_wp_error( $request ) ) {
233
  /**
234
  * @todo Once we have a error handling on the new view we need to throw it here.
@@ -300,4 +323,27 @@ class Rest_Endpoint {
300
 
301
  return $errors;
302
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
303
  }
48
  protected static $did_rest_authentication_errors;
49
 
50
  /**
51
+ * Returns the URL View will use to fetch their content.
52
+ *
53
+ * Depending on whether the REST API is enabled or not on the site, the URL might be a REST API one or an
54
+ * admin AJAX one.
55
  *
56
  * @since 4.9.2
57
+ * @since 5.2.1 Add filtering to the URL.
58
  *
59
+ * @return string The URL of the backend endpoint Views will use to fetch their content.
60
  */
61
  public function get_url() {
62
+ $rest_available = $this->is_available();
63
+
64
+ if ( ! $rest_available ) {
65
  $url = admin_url( 'admin-ajax.php' );
66
+ $url = add_query_arg( [ 'action' => static::$ajax_action ], $url );
67
+ } else {
68
+ $url = get_rest_url( null, static::ROOT_NAMESPACE . '/html' );
69
  }
70
 
71
+ /**
72
+ * Filters the URL Views should use to fetch their contents from the backend.
73
+ *
74
+ * @since 5.2.1
75
+ *
76
+ * @param string $url The View endpoint URL, either a REST API URL or a admin-ajax.php fallback URL if REST API
77
+ * is not available.
78
+ * @param bool $rest_available Whether the REST API endpoing URL is available on the current site or not.
79
+ */
80
+ $url = apply_filters( 'tribe_events_views_v2_endpoint_url', $url, $rest_available );
81
+
82
+ return $url;
83
  }
84
 
85
  /**
159
  * Register the endpoint if available.
160
  *
161
  * @since 4.9.7
162
+ * @since 5.2.1 Add support for the POST method.
163
  *
164
  * @return boolean If we registered the endpoint.
165
  */
166
  public function register() {
167
  return register_rest_route( static::ROOT_NAMESPACE, '/html', [
168
+ // Support both GET and POST HTTP methods: we originally used GET.
169
+ 'methods' => [ Server::READABLE, Server::CREATABLE ],
170
  // @todo Make sure we do proper handling of cache longer then 12h.
171
  'permission_callback' => static function ( Request $request ) {
172
 
209
  * the REST API still have the Views V2 working.
210
  *
211
  * @since 4.9.7
212
+ * @since 5.2.1 Changed the mock request HTTP method to POST (was GET).
213
  *
214
  * @param array $params Associative array with the params that will be used on this mocked request
215
  *
216
  * @return Request The mocked request.
217
  */
218
  public function get_mocked_rest_request( array $params ) {
219
+ $request = new Request( 'POST', static::ROOT_NAMESPACE . '/html' );
220
  $arguments = $this->get_request_arguments();
221
 
222
  foreach ( $params as $key => $value ) {
246
  * and use the same method behind the scenes to make sure we have consistency.
247
  *
248
  * @since 4.9.7
249
+ * @since 5.2.1 Look up the POST data before the GET one to process the request.
 
250
  */
251
  public function handle_ajax_request() {
252
+ // Use the POST method data, if set; else fallback on the GET data.
253
+ $source = isset( $_POST ) ? $_POST : $_GET;
254
+ $request = $this->get_mocked_rest_request( $source );
255
  if ( is_wp_error( $request ) ) {
256
  /**
257
  * @todo Once we have a error handling on the new view we need to throw it here.
323
 
324
  return $errors;
325
  }
326
+
327
+ /**
328
+ * Returns the filtered HTTP method Views should use to fetch their content from the backend endpoint.
329
+ *
330
+ * @since 5.2.1
331
+ *
332
+ * @return string The filtered HTTP method Views should use to fetch their content from the back-end endpoint.
333
+ */
334
+ public function get_method() {
335
+ /**
336
+ * Filters the HTTP method Views should use to fetch their contents calling the back-end endpoint.
337
+ *
338
+ * @since 5.2.1
339
+ *
340
+ * @param string $method The HTTP method Views will use to fetch their content. Either `POST` (default) or
341
+ * `GET`. Invalid values will be set to the default `POST`.
342
+ */
343
+ $method = strtoupper( (string) apply_filters( 'tribe_events_views_v2_endpoint_method', 'POST' ) );
344
+
345
+ $method = in_array( $method, [ 'POST', 'GET' ], true ) ? $method : 'POST';
346
+
347
+ return $method;
348
+ }
349
  }
src/Tribe/Views/V2/Template.php CHANGED
@@ -60,7 +60,15 @@ class Template extends Base_Template {
60
  $context = wp_parse_args( $context_overrides, $this->context );
61
  $context['_context'] = $context;
62
 
63
- return parent::template( $this->view->get_template_slug(), $context, false );
 
 
 
 
 
 
 
 
64
  }
65
 
66
  /**
60
  $context = wp_parse_args( $context_overrides, $this->context );
61
  $context['_context'] = $context;
62
 
63
+ $template_slug = $this->view->get_template_slug();
64
+ if ( ! empty( $this->view->get_template_path() ) ) {
65
+ $template_slug = [
66
+ $this->view->get_template_path(),
67
+ $template_slug,
68
+ ];
69
+ }
70
+
71
+ return parent::template( $template_slug, $context, false );
72
  }
73
 
74
  /**
src/Tribe/Views/V2/Template_Bootstrap.php CHANGED
@@ -338,7 +338,25 @@ class Template_Bootstrap {
338
  * @return string Path to the File that initializes the template
339
  */
340
  public function filter_template_include( $template ) {
341
- $query = tribe_get_global_query_object();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
342
 
343
  // Global 404 needs to be respected.
344
  if ( $query->is_404() ) {
@@ -350,7 +368,6 @@ class Template_Bootstrap {
350
  return $template;
351
  }
352
 
353
- $context = tribe_context();
354
  $view_slug = $context->get( 'view' );
355
  $is_embed = V1_Templates::is_embed() || 'embed' === $view_slug;
356
 
338
  * @return string Path to the File that initializes the template
339
  */
340
  public function filter_template_include( $template ) {
341
+ $query = tribe_get_global_query_object();
342
+ $context = tribe_context();
343
+
344
+ /**
345
+ * Allows filtering the loading of our proprietary templates.
346
+ *
347
+ * @since 5.2.1
348
+ *
349
+ * @param boolean $load Whether we should load the theme templates instead of the Tribe templates. Default false.
350
+ * @param string $template The template located by WordPress.
351
+ * @param Tribe__Context $context The singleton, immutable, global object instance.
352
+ * @param WP_Query $query The global $wp_query, the $wp_the_query if $wp_query empty, null otherwise. From tribe_get_global_query_object() above.
353
+ */
354
+ $load_template = apply_filters( 'tribe_events_views_v2_use_wp_template_hierarchy', false, $template, $context, $query );
355
+
356
+ // Let others decide if they want to load our templates or not.
357
+ if ( (bool) $load_template ) {
358
+ return $template;
359
+ }
360
 
361
  // Global 404 needs to be respected.
362
  if ( $query->is_404() ) {
368
  return $template;
369
  }
370
 
 
371
  $view_slug = $context->get( 'view' );
372
  $is_embed = V1_Templates::is_embed() || 'embed' === $view_slug;
373
 
src/Tribe/Views/V2/View.php CHANGED
@@ -78,6 +78,15 @@ class View implements View_Interface {
78
  */
79
  protected $template_slug;
80
 
 
 
 
 
 
 
 
 
 
81
  /**
82
  * The Template instance the view will use to locate, manage and render its template.
83
  *
@@ -640,6 +649,13 @@ class View implements View_Interface {
640
  return $this->slug;
641
  }
642
 
 
 
 
 
 
 
 
643
  /**
644
  * {@inheritDoc}
645
  */
@@ -720,6 +736,10 @@ class View implements View_Interface {
720
  public function get_url( $canonical = false, $force = false ) {
721
  $category = $this->context->get( 'event_category', false );
722
 
 
 
 
 
723
  $query_args = [
724
  'post_type' => TEC::POSTTYPE,
725
  'eventDisplay' => $this->slug,
@@ -1356,6 +1376,7 @@ class View implements View_Interface {
1356
  * Sets up the View template variables.
1357
  *
1358
  * @since 4.9.4
 
1359
  *
1360
  * @return array An array of Template variables for the View Template.
1361
  */
@@ -1405,6 +1426,9 @@ class View implements View_Interface {
1405
  }
1406
  );
1407
 
 
 
 
1408
  $template_vars = [
1409
  'title' => $this->get_title( $events ),
1410
  'events' => $events,
@@ -1419,7 +1443,8 @@ class View implements View_Interface {
1419
  'today' => $today,
1420
  'now' => $this->context->get( 'now', 'now' ),
1421
  'request_date' => Dates::build_date_object( $this->context->get( 'event_date', $today ) ),
1422
- 'rest_url' => tribe( Rest_Endpoint::class )->get_url(),
 
1423
  'rest_nonce' => $rest_nonce,
1424
  'should_manage_url' => $this->should_manage_url,
1425
  'today_url' => $today_url,
@@ -1516,6 +1541,15 @@ class View implements View_Interface {
1516
  '/'
1517
  );
1518
 
 
 
 
 
 
 
 
 
 
1519
  return $request_uri;
1520
  }
1521
 
78
  */
79
  protected $template_slug;
80
 
81
+ /**
82
+ * The template path will be used as a prefix for template slug when locating its template files.
83
+ *
84
+ * @since 5.2.1
85
+ *
86
+ * @var string
87
+ */
88
+ protected $template_path = '';
89
+
90
  /**
91
  * The Template instance the view will use to locate, manage and render its template.
92
  *
649
  return $this->slug;
650
  }
651
 
652
+ /**
653
+ * {@inheritDoc}
654
+ */
655
+ public function get_template_path() {
656
+ return $this->template_path;
657
+ }
658
+
659
  /**
660
  * {@inheritDoc}
661
  */
736
  public function get_url( $canonical = false, $force = false ) {
737
  $category = $this->context->get( 'event_category', false );
738
 
739
+ if ( is_array( $category ) ) {
740
+ $category = Arr::to_list( reset( $category ) );
741
+ }
742
+
743
  $query_args = [
744
  'post_type' => TEC::POSTTYPE,
745
  'eventDisplay' => $this->slug,
1376
  * Sets up the View template variables.
1377
  *
1378
  * @since 4.9.4
1379
+ * @since 5.2.1 Add the `rest_method` to the template variables.
1380
  *
1381
  * @return array An array of Template variables for the View Template.
1382
  */
1426
  }
1427
  );
1428
 
1429
+ /** @var Rest_Endpoint $endpoint */
1430
+ $endpoint = tribe( Rest_Endpoint::class );
1431
+
1432
  $template_vars = [
1433
  'title' => $this->get_title( $events ),
1434
  'events' => $events,
1443
  'today' => $today,
1444
  'now' => $this->context->get( 'now', 'now' ),
1445
  'request_date' => Dates::build_date_object( $this->context->get( 'event_date', $today ) ),
1446
+ 'rest_url' => $endpoint->get_url(),
1447
+ 'rest_method' => $endpoint->get_method(),
1448
  'rest_nonce' => $rest_nonce,
1449
  'should_manage_url' => $this->should_manage_url,
1450
  'today_url' => $today_url,
1541
  '/'
1542
  );
1543
 
1544
+ /**
1545
+ * Allows filtering the Views request URI that will be used to set up the loop.
1546
+ *
1547
+ * @since 5.2.1
1548
+ *
1549
+ * @param string $request_uri The parsed request URI.
1550
+ */
1551
+ $request_uri = apply_filters( 'tribe_events_views_v2_request_uri', $request_uri );
1552
+
1553
  return $request_uri;
1554
  }
1555
 
src/Tribe/Views/V2/View_Interface.php CHANGED
@@ -89,6 +89,15 @@ interface View_Interface extends View_Url_Provider_Interface, Repository_User_I
89
  */
90
  public function get_slug();
91
 
 
 
 
 
 
 
 
 
 
92
  /**
93
  * Returns all the parent views that the current class as an array of slugs.
94
  *
89
  */
90
  public function get_slug();
91
 
92
+ /**
93
+ * Returns a View template path, usually a prefix for the template slug.
94
+ *
95
+ * @since 5.2.1
96
+ *
97
+ * @return string The view template path, usually a prefix for the template slug.
98
+ */
99
+ public function get_template_path();
100
+
101
  /**
102
  * Returns all the parent views that the current class as an array of slugs.
103
  *
src/Tribe/Views/V2/Views/Latest_Past_View.php CHANGED
@@ -34,12 +34,13 @@ class Latest_Past_View extends View {
34
  protected static $publicly_visible = true;
35
 
36
  /**
37
- * Whitelist of Templates to display when Latest Past Events is Active.
38
  *
39
  * @since 5.1.0
40
  *
41
  * @var array
42
  */
 
43
  protected $safelist = [
44
  // Standard View Components.
45
  'components/loader',
@@ -152,7 +153,7 @@ class Latest_Past_View extends View {
152
  }
153
 
154
  /**
155
- * Add Filters for Whitelist and Adding View HTML.
156
  *
157
  * @since 5.1.0
158
  */
@@ -162,19 +163,19 @@ class Latest_Past_View extends View {
162
  }
163
 
164
  /**
165
- * Connect Whitelist Filter to Tribe Template Done to Prevent some of the current View's
166
  * Templates from Displaying when the Latest Past Events Displays.
167
  *
168
  * @since 5.1.0
169
  */
170
  public function filter_template_done( $html ) {
171
- add_filter( 'tribe_template_done', [ $this, 'filter_template_display_by_safelist' ], 10, 4 );
172
 
 
173
  return $html;
174
  }
175
 
176
  /**
177
- * Filter the Template Files and Only Return HTML if in Whitelist.
178
  *
179
  * @since 5.1.0
180
  *
34
  protected static $publicly_visible = true;
35
 
36
  /**
37
+ * Safe list of Templates to display when Latest Past Events is Active.
38
  *
39
  * @since 5.1.0
40
  *
41
  * @var array
42
  */
43
+
44
  protected $safelist = [
45
  // Standard View Components.
46
  'components/loader',
153
  }
154
 
155
  /**
156
+ * Add Filters for safe list and Adding View HTML.
157
  *
158
  * @since 5.1.0
159
  */
163
  }
164
 
165
  /**
166
+ * Connect safe list Filter to Tribe Template Done to Prevent some of the current View's
167
  * Templates from Displaying when the Latest Past Events Displays.
168
  *
169
  * @since 5.1.0
170
  */
171
  public function filter_template_done( $html ) {
 
172
 
173
+ add_filter( 'tribe_template_done', [ $this, 'filter_template_display_by_safelist' ], 10, 4 );
174
  return $html;
175
  }
176
 
177
  /**
178
+ * Filter the Template Files and Only Return HTML if in safe list.
179
  *
180
  * @since 5.1.0
181
  *
src/Tribe/Views/V2/Views/Traits/iCal_Data.php CHANGED
@@ -10,6 +10,7 @@
10
  namespace Tribe\Events\Views\V2\Views\Traits;
11
 
12
  use Tribe\Events\Views\V2\View;
 
13
 
14
  /**
15
  * Trait iCal_Data
@@ -107,10 +108,13 @@ trait iCal_Data {
107
  * @return string The iCAl URL for the month view.
108
  */
109
  public function get_month_view_url() {
110
- $event_date = $this->context->get( 'event_date', 'now' );
111
 
112
  // If we don't have a date for some reason, give them the default iCal link.
113
- $url = ! empty( $event_date ) ? tribe( 'tec.iCal' )->month_view_ical_link( $event_date ) : tribe( 'tec.iCal' )->get_ical_link();
 
 
 
114
  return $url;
115
  }
116
  }
10
  namespace Tribe\Events\Views\V2\Views\Traits;
11
 
12
  use Tribe\Events\Views\V2\View;
13
+ use Tribe__Date_Utils as Dates;
14
 
15
  /**
16
  * Trait iCal_Data
108
  * @return string The iCAl URL for the month view.
109
  */
110
  public function get_month_view_url() {
111
+ $event_date = $this->context->get( 'event_date', Dates::build_date_object()->format( Dates::DBYEARMONTHTIMEFORMAT ) );
112
 
113
  // If we don't have a date for some reason, give them the default iCal link.
114
+ $url = ! empty( $event_date )
115
+ ? tribe( 'tec.iCal' )->month_view_ical_link( $event_date )
116
+ : tribe( 'tec.iCal' )->get_ical_link();
117
+
118
  return $url;
119
  }
120
  }
src/Tribe/Views/V2/Views/Widgets/Widget_List_View.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The List Widget View.
4
+ *
5
+ * @package Tribe\Events\Views\V2\Views\Widgets
6
+ * @since 5.2.1
7
+ */
8
+
9
+ namespace Tribe\Events\Views\V2\Views\Widgets;
10
+
11
+ use Tribe\Events\Views\V2\View;
12
+ use Tribe__Context as Context;
13
+
14
+ /**
15
+ * Class List_Widget_View
16
+ *
17
+ * @since 5.2.1
18
+ *
19
+ * @package Tribe\Events\Views\V2\Views\Widgets
20
+ */
21
+ class Widget_List_View extends View {
22
+
23
+ /**
24
+ * The slug for this view.
25
+ *
26
+ * @since 5.2.1
27
+ *
28
+ * @var string
29
+ */
30
+ protected $slug = 'widget-list';
31
+
32
+ /**
33
+ * The slug for the template path.
34
+ *
35
+ * @since 5.2.1
36
+ *
37
+ * @var string
38
+ */
39
+ protected $template_path = 'widgets';
40
+
41
+ /**
42
+ * Visibility for this view.
43
+ *
44
+ * @since 5.2.1
45
+ *
46
+ * @var bool
47
+ */
48
+ protected static $publicly_visible = false;
49
+
50
+ /**
51
+ * Whether the View should display the events bar or not.
52
+ *
53
+ * @since 5.2.1
54
+ *
55
+ * @var bool
56
+ */
57
+ protected $display_events_bar = false;
58
+
59
+ /**
60
+ * Sets up the View repository arguments from the View context or a provided Context object.
61
+ *
62
+ * @since 5.2.1
63
+ *
64
+ * @param Context|null $context A context to use to setup the args, or `null` to use the View Context.
65
+ *
66
+ * @return array<string,mixed> The arguments, ready to be set on the View repository instance.
67
+ */
68
+ protected function setup_repository_args( Context $context = null ) {
69
+ $context = null !== $context ? $context : $this->context;
70
+
71
+ $args = parent::setup_repository_args( $context );
72
+
73
+ return $args;
74
+ }
75
+
76
+ /**
77
+ * Overrides the base View method to fix the order of the events in the `past` display mode.
78
+ *
79
+ * @since 5.2.1
80
+ *
81
+ * @return array<string,mixed> The List View template vars, modified if required.
82
+ */
83
+ protected function setup_template_vars() {
84
+ $template_vars = parent::setup_template_vars();
85
+
86
+ return $template_vars;
87
+ }
88
+ }
src/Tribe/Views/V2/Widgets/Service_Provider.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The main service provider for the version 2 of the Widgets.
4
+ *
5
+ * @since 5.2.1
6
+ *
7
+ * @package Tribe\Events\Views\V2\Widgets
8
+ */
9
+
10
+ namespace Tribe\Events\Views\V2\Widgets;
11
+
12
+ use Tribe\Events\Views\V2\Views\Widgets\Widget_List_View;
13
+
14
+ /**
15
+ * Class Service_Provider
16
+ *
17
+ * @since 5.2.1
18
+ *
19
+ * @package Tribe\Events\Views\V2\Widgets
20
+ */
21
+ class Service_Provider extends \tad_DI52_ServiceProvider {
22
+
23
+ /**
24
+ * Variable that holds the name of the widgets being created.
25
+ *
26
+ * @since 5.2.1
27
+ *
28
+ * @var array<string>
29
+ */
30
+ protected $widgets = [
31
+ 'tribe_events_list_widget',
32
+ ];
33
+
34
+ /**
35
+ * Binds and sets up implementations.
36
+ *
37
+ * @since 5.2.1
38
+ */
39
+ public function register() {
40
+ if ( ! tribe_events_views_v2_is_enabled() ) {
41
+ return;
42
+ }
43
+
44
+ // Determine if V2 widgets should load.
45
+ if ( ! tribe_events_widgets_v2_is_enabled() ) {
46
+ return;
47
+ }
48
+
49
+ $this->hook();
50
+ }
51
+
52
+ /**
53
+ * Function used to attach the hooks associated with this class.
54
+ *
55
+ * @since 5.2.1
56
+ */
57
+ public function hook() {
58
+ add_filter( 'tribe_widgets', [ $this, 'register_widget' ] );
59
+ add_filter( 'tribe_events_views', [ $this, 'add_views' ] );
60
+ }
61
+
62
+ /**
63
+ * Add the widgets to register with WordPress.
64
+ *
65
+ * @since 5.2.1
66
+ *
67
+ * @param array<string,string> $widgets An array of widget classes to register.
68
+ *
69
+ * @return array<string,string> An array of registered widget classes.
70
+ */
71
+ public function register_widget( $widgets ) {
72
+ $widgets['tribe_events_list_widget'] = Widget_List::class;
73
+
74
+ return $widgets;
75
+ }
76
+
77
+ /**
78
+ * Add the widget views to the view manager.
79
+ *
80
+ * @since 5.2.1
81
+ *
82
+ * @param array<string,string> $views An associative array of views in the shape `[ <slug> => <class> ]`.
83
+ *
84
+ * @return array<string,string> $views The modified array of views in the shape `[ <slug> => <class> ]`.
85
+ */
86
+ public function add_views( $views ) {
87
+ $views['widget-list'] = Widget_List_View::class;
88
+
89
+ return $views;
90
+ }
91
+ }
src/Tribe/Views/V2/Widgets/Widget_Abstract.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widget Abstract
4
+ *
5
+ * @since 5.2.1
6
+ *
7
+ * @package Tribe\Events\Views\V2\Widgets
8
+ */
9
+
10
+ namespace Tribe\Events\Views\V2\Widgets;
11
+
12
+ use Tribe\Events\Views\V2\View;
13
+ use Tribe\Events\Views\V2\View_Interface;
14
+ use Tribe__Context as Context;
15
+
16
+ /**
17
+ * The abstract all widgets should implement.
18
+ *
19
+ * @since 5.2.1
20
+ *
21
+ * @package Tribe\Widget
22
+ */
23
+ abstract class Widget_Abstract extends \Tribe\Widget\Widget_Abstract {
24
+
25
+ /**
26
+ * The view interface for the widget.
27
+ *
28
+ * @since 5.2.1
29
+ *
30
+ * @var View_Interface;
31
+ */
32
+ protected $view;
33
+
34
+ /**
35
+ * The slug of the widget view.
36
+ *
37
+ * @since 5.2.1
38
+ *
39
+ * @var string
40
+ */
41
+ protected $view_slug;
42
+
43
+ /**
44
+ * Setup the view for the widget.
45
+ *
46
+ * @since 5.2.1
47
+ */
48
+ public function setup_view() {
49
+ $context = tribe_context();
50
+
51
+ // Modifies the Context for the widget params.
52
+ // @todo update per https://github.com/moderntribe/tribe-common/pull/1451#discussion_r501498990.
53
+ $context = $this->alter_context( $context );
54
+
55
+ // Setup the view instance.
56
+ $view = View::make( $this->get_view_slug(), $context );
57
+
58
+ $view->get_template()->set_values( $this->get_arguments(), false );
59
+
60
+ $this->set_view( $view );
61
+ }
62
+
63
+ /**
64
+ * Returns the rendered View HTML code.
65
+ *
66
+ * @since 5.2.1
67
+ *
68
+ * @return string
69
+ */
70
+ public function get_html() {
71
+ return $this->get_view()->get_html();
72
+ }
73
+
74
+ /**
75
+ * Sets the template view.
76
+ *
77
+ * @since 5.2.1
78
+ *
79
+ * @param View_Interface $view Which view we are using this template on.
80
+ */
81
+ public function set_view( View_Interface $view ) {
82
+ $this->view = $view;
83
+ }
84
+
85
+ /**
86
+ * Returns the current template view, either set in the constructor or using the `set_view` method.
87
+ *
88
+ * @since 5.2.1
89
+ *
90
+ * @return View_Interface The current template view.
91
+ */
92
+ public function get_view() {
93
+ return $this->view;
94
+ }
95
+
96
+ /**
97
+ * {@inheritDoc}
98
+ */
99
+ public function get_view_slug() {
100
+ return $this->view_slug;
101
+ }
102
+
103
+ /**
104
+ * Alters the widget context with its arguments.
105
+ *
106
+ * @todo update in TEC-3620 & TEC-3597
107
+ *
108
+ * @since 5.2.1
109
+ *
110
+ * @param \Tribe__Context $context Context we will use to build the view.
111
+ * @param array<string,mixed> $arguments Current set of arguments.
112
+ *
113
+ * @return \Tribe__Context Context after widget changes.
114
+ */
115
+ public function alter_context( Context $context, array $arguments = [] ) {
116
+ // @todo update per https://github.com/moderntribe/tribe-common/pull/1451#discussion_r501498990.
117
+ $alter_context = $this->args_to_context( $arguments, $context );
118
+
119
+ $context = $context->alter( $alter_context );
120
+
121
+ return $context;
122
+ }
123
+
124
+ /**
125
+ * Translates widget arguments to their Context argument counterpart.
126
+ *
127
+ * @todo update in TEC-3620 & TEC-3597
128
+ *
129
+ * @since 5.2.1
130
+ *
131
+ * @param array<string,mixed> $arguments Current set of arguments.
132
+ * @param Context $context The request context.
133
+ *
134
+ * @return array<string,mixed> The translated widget arguments.
135
+ */
136
+ protected function args_to_context( array $arguments, Context $context ) {
137
+ $context_args = [ 'widget' => true ];
138
+
139
+ return $context_args;
140
+ }
141
+ }
src/Tribe/Views/V2/Widgets/Widget_List.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * List Widget
4
+ *
5
+ * @since 5.2.1
6
+ *
7
+ * @package Tribe\Events\Views\V2\Widgets
8
+ */
9
+
10
+ namespace Tribe\Events\Views\V2\Widgets;
11
+
12
+ /**
13
+ * Class for the List Widget.
14
+ *
15
+ * @since 5.2.1
16
+ *
17
+ * @package Tribe\Events\Views\V2\Widgets
18
+ */
19
+ class Widget_List extends Widget_Abstract {
20
+
21
+ /**
22
+ * {@inheritDoc}
23
+ *
24
+ * @var string
25
+ */
26
+ protected $slug = 'tribe_events_list_widget';
27
+
28
+ /**
29
+ * {@inheritDoc}
30
+ *
31
+ * @var string
32
+ */
33
+ protected $view_slug = 'widget-list';
34
+
35
+ /**
36
+ * {@inheritDoc}
37
+ *
38
+ * @var array<string,mixed>
39
+ */
40
+ protected $default_arguments = [
41
+ // View options.
42
+ 'view' => null,
43
+ 'should_manage_url' => false,
44
+
45
+ // Event widget options.
46
+ 'id' => null,
47
+ 'alias-slugs' => null,
48
+ 'title' => '',
49
+ 'limit' => 5,
50
+ 'no_upcoming_events' => '',
51
+ 'featured_events_only' => false,
52
+ 'tribe_is_list_widget' => true,
53
+ 'jsonld_enable' => true,
54
+
55
+ // WP_Widget properties.
56
+ 'id_base' => 'tribe-events-list-widget',
57
+ 'name' => null,
58
+ 'widget_options' => [
59
+ 'classname' => 'tribe-events-list-widget',
60
+ 'description' => null,
61
+ ],
62
+ 'control_options' => [
63
+ 'id_base' => 'tribe-events-list-widget',
64
+ ],
65
+ ];
66
+
67
+ /**
68
+ * @todo update in TEC-3612 & TEC-3613
69
+ *
70
+ * {@inheritDoc}
71
+ *
72
+ * @var array<string,mixed>
73
+ */
74
+ protected $validate_arguments_map = [
75
+ 'should_manage_url' => 'tribe_is_truthy',
76
+ 'no_upcoming_events' => 'tribe_is_truthy',
77
+ 'featured_events_only' => 'tribe_is_truthy',
78
+ 'jsonld_enable' => 'tribe_is_truthy',
79
+ ];
80
+
81
+ /**
82
+ * @todo update in TEC-3612 & TEC-3613
83
+ *
84
+ * {@inheritDoc}
85
+ */
86
+ public function setup() {
87
+ $this->setup_view();
88
+ }
89
+
90
+ /**
91
+ * {@inheritDoc}
92
+ */
93
+ public function get_arguments() {
94
+ $arguments = $this->arguments;
95
+
96
+ $arguments['description'] = esc_html__( 'A widget that displays upcoming events.', 'the-events-calendar' );
97
+ // @todo update name once this widget is ready to replace the existing list widget.
98
+ $arguments['name'] = esc_html__( 'Events List V2', 'the-events-calendar' );
99
+ $arguments['widget_options']['description'] = esc_html__( 'A widget that displays upcoming events.', 'the-events-calendar' );
100
+
101
+ $arguments = wp_parse_args( $arguments, $this->get_default_arguments() );
102
+
103
+ return $this->filter_arguments( $arguments );
104
+ }
105
+ }
src/Tribe/iCal.php CHANGED
@@ -1,5 +1,7 @@
1
  <?php
2
 
 
 
3
  /**
4
  * Class that implements the export to iCal functionality
5
  * both for list and single events
@@ -85,7 +87,14 @@ class Tribe__Events__iCal {
85
  public function month_view_ical_link( $event_date = null ) {
86
  $tec = Tribe__Events__Main::instance();
87
 
88
- return add_query_arg( [ 'ical' => 1 ], $tec->getLink( 'month', $event_date ) );
 
 
 
 
 
 
 
89
  }
90
 
91
  /**
1
  <?php
2
 
3
+ use Tribe__Date_Utils as Dates;
4
+
5
  /**
6
  * Class that implements the export to iCal functionality
7
  * both for list and single events
87
  public function month_view_ical_link( $event_date = null ) {
88
  $tec = Tribe__Events__Main::instance();
89
 
90
+ // Default to current month if not set.
91
+ if ( empty( $event_date ) ) {
92
+ $event_date = Dates::build_date_object()->format( Dates::DBYEARMONTHTIMEFORMAT );
93
+ }
94
+
95
+ $url = $tec->getLink( 'month', $event_date );
96
+
97
+ return add_query_arg( [ 'ical' => 1 ], $url );
98
  }
99
 
100
  /**
src/functions/views/provider.php CHANGED
@@ -111,3 +111,18 @@ function tribe_events_view_v2_use_period_repository() {
111
  */
112
  return (bool) apply_filters( 'tribe_events_views_v2_use_period_repository', $enabled );
113
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  */
112
  return (bool) apply_filters( 'tribe_events_views_v2_use_period_repository', $enabled );
113
  }
114
+
115
+ /**
116
+ * Checks whether V2 widgets should load.
117
+ *
118
+ * In order the function will check the `TRIBE_EVENTS_WIDGETS_V2_ENABLED` constant,
119
+ * the `TRIBE_EVENTS_WIDGETS_V2_ENABLED` environment variable.
120
+ *
121
+ * @since 5.2.1
122
+ *
123
+ * @return bool Whether Widgets v2 should load.
124
+ */
125
+ function tribe_events_widgets_v2_is_enabled() {
126
+
127
+ return (bool) defined( 'TRIBE_EVENTS_WIDGETS_V2_ENABLED' ) && TRIBE_EVENTS_WIDGETS_V2_ENABLED;
128
+ }
src/resources/css/freemius.min.css CHANGED
@@ -1 +1 @@
1
- #toplevel_page_aggregator.menu-top,#toplevel_page_tribe-app-shop.menu-top,#toplevel_page_tribe-common.menu-top,#toplevel_page_tribe-help.menu-top{display:none}.events-cal #fs_connect,.toplevel_page_tribe-common #fs_connect{background-color:#fff;margin:20px 20px 0 2px;max-width:1200px;position:relative;width:auto}.events-cal #fs_connect .fs-visual,.toplevel_page_tribe-common #fs_connect .fs-visual{align-content:center;align-items:center;background-color:transparent;display:flex;margin:0 35px;padding:20px 0 0}.events-cal #fs_connect .fs-visual .fs-site-icon,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-site-icon{border:0;bottom:auto;left:auto;margin:0;position:relative;right:auto;top:auto;width:340px}.events-cal #fs_connect .fs-visual .fs-connect-logo,.events-cal #fs_connect .fs-visual .fs-first.dashicons-plus,.events-cal #fs_connect .fs-visual .fs-plugin-icon,.events-cal #fs_connect .fs-visual .fs-second.dashicons-plus,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-connect-logo,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-first.dashicons-plus,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-plugin-icon,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-second.dashicons-plus{display:none}.events-cal #fs_connect .fs-visual .fs-site-icon .dashicons,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-site-icon .dashicons{visibility:hidden}.events-cal #fs_connect .fs-visual .fs-site-icon:before,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-site-icon:before{background-image:url(../icons/tec-logo-2020.svg);background-position:0;background-repeat:no-repeat;background-size:85%;content:"";display:block;height:100%;position:absolute;width:100%}.events-cal #fs_connect .fs-visual .fs-plugin-icon img,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-plugin-icon img{visibility:hidden}.events-cal #fs_connect .fs-visual .fs-plugin-icon:before,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-plugin-icon:before{background-image:url(../icons/stethoscope.svg);background-position:50%;background-repeat:no-repeat;background-size:75%;content:"";display:block;height:100%;position:absolute;width:100%}.events-cal #fs_connect .fs-content,.toplevel_page_tribe-common #fs_connect .fs-content{padding:20px 35px}.events-cal #fs_connect .fs-content h3,.toplevel_page_tribe-common #fs_connect .fs-content h3{font-size:1.7em;margin-top:0}.events-cal #fs_connect .fs-content p,.toplevel_page_tribe-common #fs_connect .fs-content p{margin-bottom:20px}.events-cal #fs_connect .fs-content p:first-child,.events-cal #fs_connect .fs-content p:last-child,.events-cal #fs_connect .fs-content p:last-of-type,.toplevel_page_tribe-common #fs_connect .fs-content p:first-child,.toplevel_page_tribe-common #fs_connect .fs-content p:last-child,.toplevel_page_tribe-common #fs_connect .fs-content p:last-of-type{margin-bottom:0}.events-cal #fs_connect .fs-content .tribe-powered-by-freemius,.toplevel_page_tribe-common #fs_connect .fs-content .tribe-powered-by-freemius{background-image:url(../icons/freemius-logo.svg);background-position:100%;background-repeat:no-repeat;background-size:100px;font-size:1.1em;font-style:italic;height:30px;line-height:30px;position:absolute;right:45px;top:25px;width:184px}.events-cal #fs_connect .fs-actions,.toplevel_page_tribe-common #fs_connect .fs-actions{background-color:#fff;display:flex;flex-flow:row wrap;padding:20px 35px}.events-cal #fs_connect .fs-actions form,.toplevel_page_tribe-common #fs_connect .fs-actions form{float:none;margin-right:15px;order:1}.events-cal #fs_connect .fs-actions #skip_activation,.toplevel_page_tribe-common #fs_connect .fs-actions #skip_activation{float:none;order:2}.events-cal #fs_connect .fs-actions .button,.toplevel_page_tribe-common #fs_connect .fs-actions .button{height:auto;padding:7px 35px}.events-cal #fs_connect .fs-actions .button.button-primary,.toplevel_page_tribe-common #fs_connect .fs-actions .button.button-primary{padding-left:35px;padding-right:35px}.events-cal #fs_connect .fs-permissions,.toplevel_page_tribe-common #fs_connect .fs-permissions{padding:0;position:relative}.events-cal #fs_connect .fs-permissions .fs-trigger,.toplevel_page_tribe-common #fs_connect .fs-permissions .fs-trigger{left:380px;padding:10px;position:absolute;top:-65px}.events-cal #fs_connect .fs-permissions .fs-switch,.toplevel_page_tribe-common #fs_connect .fs-permissions .fs-switch{height:0;visibility:hidden;width:0}.events-cal #fs_connect .fs-permissions.fs-open,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open{box-shadow:0 1px 2px rgba(0,0,0,.3);-moz-box-shadow:0 1px 2px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);padding:20px 35px;position:absolute}.events-cal #fs_connect .fs-permissions.fs-open ul,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul{display:flex;flex-wrap:wrap;margin:0}.events-cal #fs_connect .fs-permissions.fs-open ul li,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul li{flex:0 50%;padding-bottom:10px}.events-cal #fs_connect .fs-permissions.fs-open ul li .dashicons,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul li .dashicons{padding-right:15px}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons{background-position:0;background-repeat:no-repeat;background-size:65%}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons:before,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons:before{content:""}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons-admin-users,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons-admin-users{background-image:url(../icons/freemius-icon-profile.svg)}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons-admin-settings,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons-admin-settings{background-image:url(../icons/freemius-icon-site.svg)}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons-testimonial,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons-testimonial{background-image:url(../icons/freemius-icon-notice.svg)}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons-admin-plugins,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons-admin-plugins{background-image:url(../icons/freemius-icon-plugin.svg)}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons-menu,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons-menu{background-image:url(../icons/freemius-icon-themes.svg)}.events-cal #fs_connect .fs-terms,.toplevel_page_tribe-common #fs_connect .fs-terms{background-color:transparent;bottom:30px;position:absolute;right:10px;width:240px}
1
+ #toplevel_page_aggregator.menu-top,#toplevel_page_tribe-app-shop.menu-top,#toplevel_page_tribe-common.menu-top,#toplevel_page_tribe-help.menu-top{display:none}.events-cal #fs_connect,.toplevel_page_tribe-common #fs_connect{background-color:#fff;margin:20px 20px 0 2px;max-width:1200px;position:relative;width:auto}.events-cal #fs_connect .fs-visual,.toplevel_page_tribe-common #fs_connect .fs-visual{align-content:center;align-items:center;background-color:transparent;display:flex;margin:0 35px;padding:20px 0 0}.events-cal #fs_connect .fs-visual .fs-site-icon,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-site-icon{border:0;bottom:auto;left:auto;margin:0;position:relative;right:auto;top:auto;width:340px}.events-cal #fs_connect .fs-visual .fs-connect-logo,.events-cal #fs_connect .fs-visual .fs-first.dashicons-plus,.events-cal #fs_connect .fs-visual .fs-plugin-icon,.events-cal #fs_connect .fs-visual .fs-second.dashicons-plus,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-connect-logo,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-first.dashicons-plus,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-plugin-icon,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-second.dashicons-plus{display:none}.events-cal #fs_connect .fs-visual .fs-site-icon .dashicons,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-site-icon .dashicons{visibility:hidden}.events-cal #fs_connect .fs-visual .fs-site-icon:before,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-site-icon:before{background-image:url(../icons/tec-logo-2020.svg);background-position:0;background-repeat:no-repeat;background-size:85%;content:"";display:block;height:100%;position:absolute;width:100%}.events-cal #fs_connect .fs-visual .fs-plugin-icon img,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-plugin-icon img{visibility:hidden}.events-cal #fs_connect .fs-visual .fs-plugin-icon:before,.toplevel_page_tribe-common #fs_connect .fs-visual .fs-plugin-icon:before{background-image:url(../icons/stethoscope.svg);background-position:50%;background-repeat:no-repeat;background-size:75%;content:"";display:block;height:100%;position:absolute;width:100%}.events-cal #fs_connect .fs-content,.toplevel_page_tribe-common #fs_connect .fs-content{padding:20px 35px}.events-cal #fs_connect .fs-content h3,.toplevel_page_tribe-common #fs_connect .fs-content h3{font-size:1.7em;margin-top:0}.events-cal #fs_connect .fs-content p,.toplevel_page_tribe-common #fs_connect .fs-content p{margin-bottom:20px}.events-cal #fs_connect .fs-content p:first-child,.events-cal #fs_connect .fs-content p:last-child,.events-cal #fs_connect .fs-content p:last-of-type,.toplevel_page_tribe-common #fs_connect .fs-content p:first-child,.toplevel_page_tribe-common #fs_connect .fs-content p:last-child,.toplevel_page_tribe-common #fs_connect .fs-content p:last-of-type{margin-bottom:0}.events-cal #fs_connect .fs-content .tribe-powered-by-freemius,.toplevel_page_tribe-common #fs_connect .fs-content .tribe-powered-by-freemius{background-image:url(../icons/freemius-logo.svg);background-position:100%;background-repeat:no-repeat;background-size:100px;font-size:1.1em;font-style:italic;height:30px;line-height:30px;position:absolute;right:45px;top:25px;width:184px}.events-cal #fs_connect .fs-actions,.toplevel_page_tribe-common #fs_connect .fs-actions{background-color:#fff;display:flex;flex-flow:row wrap;padding:20px 35px}.events-cal #fs_connect .fs-actions form,.toplevel_page_tribe-common #fs_connect .fs-actions form{float:none;margin-right:15px;order:1}.events-cal #fs_connect .fs-actions #skip_activation,.toplevel_page_tribe-common #fs_connect .fs-actions #skip_activation{float:none;order:2}.events-cal #fs_connect .fs-actions .button,.toplevel_page_tribe-common #fs_connect .fs-actions .button{height:auto;padding:7px 35px}.events-cal #fs_connect .fs-actions .button.button-primary,.toplevel_page_tribe-common #fs_connect .fs-actions .button.button-primary{padding-left:35px;padding-right:35px}.events-cal #fs_connect .fs-permissions,.toplevel_page_tribe-common #fs_connect .fs-permissions{padding:0;position:relative}.events-cal #fs_connect .fs-permissions .fs-trigger,.toplevel_page_tribe-common #fs_connect .fs-permissions .fs-trigger{left:380px;padding:10px;position:absolute;top:-65px}.events-cal #fs_connect .fs-permissions .fs-switch,.toplevel_page_tribe-common #fs_connect .fs-permissions .fs-switch{height:0;visibility:hidden;width:0}.events-cal #fs_connect .fs-permissions.fs-open,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open{box-shadow:0 1px 2px rgba(0,0,0,.3);-moz-box-shadow:0 1px 2px rgba(0,0,0,.3);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);padding:20px 35px;position:absolute}.events-cal #fs_connect .fs-permissions.fs-open ul,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul{display:flex;flex-wrap:wrap;margin:0}.events-cal #fs_connect .fs-permissions.fs-open ul li,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul li{flex:0 50%;padding-bottom:10px}.events-cal #fs_connect .fs-permissions.fs-open ul li .dashicons,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul li .dashicons{padding-right:15px}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons{background-position:0;background-repeat:no-repeat;background-size:65%}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons:before,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons:before{content:""}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons-admin-users,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons-admin-users{background-image:url(../icons/freemius-icon-profile.svg)}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons-admin-settings,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons-admin-settings{background-image:url(../icons/freemius-icon-site.svg)}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons-testimonial,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons-testimonial{background-image:url(../icons/freemius-icon-notice.svg)}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons-admin-plugins,.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons-menu,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons-admin-plugins,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons-menu{background-image:url(../icons/freemius-icon-plugin.svg)}.events-cal #fs_connect .fs-permissions.fs-open ul .dashicons-menu,.toplevel_page_tribe-common #fs_connect .fs-permissions.fs-open ul .dashicons-menu{background-image:url(../icons/freemius-icon-themes.svg)}.events-cal #fs_connect .fs-terms,.toplevel_page_tribe-common #fs_connect .fs-terms{background-color:transparent;bottom:30px;position:absolute;right:10px;width:240px}
src/resources/css/widgets-full.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .tribe-events .tribe-events-widget-events-list__header{margin-bottom:24px}.tribe-events .tribe-events-widget-events-list__event-row--featured .tribe-events-widget-events-list__event-date-tag-datetime:after{background-color:#334aff;content:"";height:100%;left:0;position:absolute;width:3px}.tribe-events .tribe-events-widget-events-list__event-date-tag-month{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5;color:#5d5d5d;text-transform:uppercase}.tribe-common--breakpoint-xsmall.tribe-events .tribe-events-widget-events-list__event-title{font-size:18px;line-height:1.5}.tribe-common--breakpoint-medium.tribe-events .tribe-events-widget-events-list__event-title{font-size:24px;line-height:1.42}.tribe-events .tribe-events-widget-events-list__view-more-link{color:#334aff;text-transform:capitalize}.tribe-events .tribe-events-widget-events-list__view-more-link:active,.tribe-events .tribe-events-widget-events-list__view-more-link:focus,.tribe-events .tribe-events-widget-events-list__view-more-link:hover{color:#334aff;border-bottom-color:#334aff}.tribe-theme-twentyseventeen .tribe-events .tribe-events-widget-events-list__view-more-link:focus,.tribe-theme-twentyseventeen .tribe-events .tribe-events-widget-events-list__view-more-link:hover{color:#334aff}
src/resources/css/widgets-skeleton.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .tribe-events-view{position:relative}.tribe-events .tribe-events-l-container{padding-bottom:80px;padding-top:64px;min-height:600px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-l-container{padding-bottom:160px;padding-top:96px;min-height:700px}.tribe-events .tribe-events-widget-events-list__header{margin-bottom:24px}.tribe-events .tribe-events-widget-events-list__event-row{flex-wrap:nowrap;margin-bottom:16px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-widget-events-list__event-row{margin-bottom:20px}.tribe-events .tribe-events-widget-events-list__event-row:last-child{margin-bottom:0}.tribe-events .tribe-events-widget-events-list__event-date-tag{flex:none;position:relative;width:64px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-widget-events-list__event-date-tag{width:72px}.tribe-events .tribe-events-widget-events-list__event-date-tag-datetime{display:flex;flex-direction:column;height:100%;text-align:center}.tribe-events .tribe-events-widget-events-list__event-date-tag-daynum,.tribe-events .tribe-events-widget-events-list__event-date-tag-month{margin-bottom:-4px}.tribe-events .tribe-events-widget-events-list__event-datetime-wrapper{margin-bottom:4px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-widget-events-list__event-datetime-wrapper{margin-bottom:0}.tribe-events .tribe-events-widget-events-list__view-more{margin-top:20px}
src/resources/js/views/manager.js CHANGED
@@ -471,7 +471,7 @@ tribe.events.views.manager = {};
471
  url: $container.data( 'view-rest-url' ),
472
  accepts: 'html',
473
  dataType: 'html',
474
- method: 'GET',
475
  'async': true, // async is keyword
476
  beforeSend: obj.ajaxBeforeSend,
477
  complete: obj.ajaxComplete,
471
  url: $container.data( 'view-rest-url' ),
472
  accepts: 'html',
473
  dataType: 'html',
474
+ method: $container.data( 'view-rest-method' ) || 'POST',
475
  'async': true, // async is keyword
476
  beforeSend: obj.ajaxBeforeSend,
477
  complete: obj.ajaxComplete,
src/views/v2/day.php CHANGED
@@ -9,10 +9,11 @@
9
  *
10
  * @link http://m.tri.be/1aiy
11
  *
12
- * @version 5.0.2
13
  *
14
  * @var array $events The array containing the events.
15
  * @var string $rest_url The REST URL.
 
16
  * @var string $rest_nonce The REST nonce.
17
  * @var bool $disable_event_search Boolean on whether to disable the event search.
18
  * @var string[] $container_classes Classes used for the container of the view.
@@ -32,6 +33,7 @@ if ( empty( $disable_event_search ) ) {
32
  data-js="tribe-events-view"
33
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
34
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
 
35
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
36
  <?php foreach ( $container_data as $key => $value ) : ?>
37
  data-view-<?php echo esc_attr( $key ) ?>="<?php echo esc_attr( $value ) ?>"
9
  *
10
  * @link http://m.tri.be/1aiy
11
  *
12
+ * @version 5.2.1
13
  *
14
  * @var array $events The array containing the events.
15
  * @var string $rest_url The REST URL.
16
+ * @var string $rest_method The HTTP method, either `POST` or `GET`, the View will use to make requests.
17
  * @var string $rest_nonce The REST nonce.
18
  * @var bool $disable_event_search Boolean on whether to disable the event search.
19
  * @var string[] $container_classes Classes used for the container of the view.
33
  data-js="tribe-events-view"
34
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
35
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
36
+ data-view-rest-method="<?php echo esc_attr( $rest_method ); ?>"
37
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
38
  <?php foreach ( $container_data as $key => $value ) : ?>
39
  data-view-<?php echo esc_attr( $key ) ?>="<?php echo esc_attr( $value ) ?>"
src/views/v2/list.php CHANGED
@@ -9,10 +9,11 @@
9
  *
10
  * @link http://m.tri.be/1aiy
11
  *
12
- * @version 5.0.2
13
  *
14
  * @var array $events The array containing the events.
15
  * @var string $rest_url The REST URL.
 
16
  * @var string $rest_nonce The REST nonce.
17
  * @var int $should_manage_url int containing if it should manage the URL.
18
  * @var bool $disable_event_search Boolean on whether to disable the event search.
@@ -31,6 +32,7 @@ if ( empty( $disable_event_search ) ) {
31
  data-js="tribe-events-view"
32
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
33
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
 
34
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
35
  <?php foreach ( $container_data as $key => $value ) : ?>
36
  data-view-<?php echo esc_attr( $key ) ?>="<?php echo esc_attr( $value ) ?>"
9
  *
10
  * @link http://m.tri.be/1aiy
11
  *
12
+ * @version 5.2.1
13
  *
14
  * @var array $events The array containing the events.
15
  * @var string $rest_url The REST URL.
16
+ * @var string $rest_method The HTTP method, either `POST` or `GET`, the View will use to make requests.
17
  * @var string $rest_nonce The REST nonce.
18
  * @var int $should_manage_url int containing if it should manage the URL.
19
  * @var bool $disable_event_search Boolean on whether to disable the event search.
32
  data-js="tribe-events-view"
33
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
34
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
35
+ data-view-rest-method="<?php echo esc_attr( $rest_method ); ?>"
36
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
37
  <?php foreach ( $container_data as $key => $value ) : ?>
38
  data-view-<?php echo esc_attr( $key ) ?>="<?php echo esc_attr( $value ) ?>"
src/views/v2/month.php CHANGED
@@ -12,6 +12,7 @@
12
  * @version 5.0.2
13
  *
14
  * @var string $rest_url The REST URL.
 
15
  * @var string $rest_nonce The REST nonce.
16
  * @var int $should_manage_url int containing if it should manage the URL.
17
  * @var bool $disable_event_search Boolean on whether to disable the event search.
@@ -30,6 +31,7 @@ if ( empty( $disable_event_search ) ) {
30
  data-js="tribe-events-view"
31
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
32
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
 
33
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
34
  <?php foreach ( $container_data as $key => $value ) : ?>
35
  data-view-<?php echo esc_attr( $key ) ?>="<?php echo esc_attr( $value ) ?>"
12
  * @version 5.0.2
13
  *
14
  * @var string $rest_url The REST URL.
15
+ * @var string $rest_method The HTTP method, either `POST` or `GET`, the View will use to make requests.
16
  * @var string $rest_nonce The REST nonce.
17
  * @var int $should_manage_url int containing if it should manage the URL.
18
  * @var bool $disable_event_search Boolean on whether to disable the event search.
31
  data-js="tribe-events-view"
32
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
33
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
34
+ data-view-rest-method="<?php echo esc_attr( $rest_method ); ?>"
35
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
36
  <?php foreach ( $container_data as $key => $value ) : ?>
37
  data-view-<?php echo esc_attr( $key ) ?>="<?php echo esc_attr( $value ) ?>"
src/views/v2/widgets/events-list.php ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widget: Events List
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/widgets/events-list.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link http://m.tri.be/1aiy
11
+ *
12
+ * @version 5.2.1
13
+ *
14
+ * @var array<\WP_Post> $events The array containing the events.
15
+ * @var string $rest_url The REST URL.
16
+ * @var string $rest_nonce The REST nonce.
17
+ * @var int $should_manage_url int containing if it should manage the URL.
18
+ * @var array<string> $container_classes Classes used for the container of the view.
19
+ * @var array<string,mixed> $container_data An additional set of container `data` attributes.
20
+ * @var string $breakpoint_pointer String we use as pointer to the current view we are setting up with breakpoints.
21
+ * @var array<string,string> $messages An array of user-facing messages, managed by the View.
22
+ * @var array<string,bool> $display An array of whether to display specific event meta or not.
23
+ * @var string $view_more_link The URL to view all events.
24
+ */
25
+
26
+ $event = (object) [
27
+ 'ID' => 1234,
28
+ 'permalink' => 'https://tri.be/',
29
+ 'title' => 'Puppy time',
30
+ 'cost' => '$12 - $15',
31
+ 'venues' => [
32
+ (object) [
33
+ 'post_title' => 'BC Place',
34
+ 'address' => '777 Pacific Blvd',
35
+ 'city' => 'Vancouver',
36
+ 'state_province' => 'BC',
37
+ 'zip' => 'V6B 4Y8',
38
+ 'country' => 'Canada',
39
+ ],
40
+ ],
41
+ 'featured' => false,
42
+ ];
43
+ $events = [
44
+ $event,
45
+ ];
46
+ $rest_url = 'https://tri.be/';
47
+ $rest_nonce = 'a3ghv98awe98';
48
+ $should_manage_url = '0';
49
+ $container_classes = [ 'tribe-common', 'tribe-events', 'tribe-events-view', 'tribe-events-widget', 'tribe-events-widget--events-list' ];
50
+ $container_data = [];
51
+ $breakpoint_pointer = 'e1a5c9c2-2781-4fcb-b4fa-0ab738292e04';
52
+ $messages = [];
53
+ $display = [
54
+ 'cost' => true,
55
+ 'venue' => true,
56
+ 'street' => true,
57
+ 'city' => true,
58
+ 'region' => true,
59
+ 'zip' => true,
60
+ 'country' => true,
61
+ 'phone' => true,
62
+ 'organizer' => true,
63
+ ];
64
+ $view_more_link = '#';
65
+ ?>
66
+ <div
67
+ <?php tribe_classes( $container_classes ); ?>
68
+ data-js="tribe-events-view"
69
+ data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
70
+ data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
71
+ data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
72
+ <?php foreach ( $container_data as $key => $value ) : ?>
73
+ data-view-<?php echo esc_attr( $key ); ?>="<?php echo esc_attr( $value ); ?>"
74
+ <?php endforeach; ?>
75
+ <?php if ( ! empty( $breakpoint_pointer ) ) : ?>
76
+ data-view-breakpoint-pointer="<?php echo esc_attr( $breakpoint_pointer ); ?>"
77
+ <?php endif; ?>
78
+ >
79
+ <div class="tribe-common-l-container">
80
+ <div class="tribe-events-widget-events-list">
81
+ <header class="tribe-events-widget-events-list__header">
82
+ <h3 class="tribe-events-widget-events-list__header-title tribe-common-h6 tribe-common-h--alt">
83
+ <?php
84
+ echo esc_html(
85
+ sprintf(
86
+ /* translators: %1$s: Event (plural). */
87
+ _x( 'Upcoming %1$s', 'Title for events list widget.', 'the-events-calendar' ),
88
+ tribe_get_event_label_plural()
89
+ )
90
+ );
91
+ ?>
92
+ </h3>
93
+ </header>
94
+
95
+ <?php if ( ! empty( $events ) ) : ?>
96
+
97
+ <div class="tribe-events-widget-events-list__events">
98
+ <?php foreach ( $events as $event ) : ?>
99
+ <?php
100
+ $this->template(
101
+ 'widgets/events-list/event',
102
+ [
103
+ 'event' => $event,
104
+ 'display' => $display,
105
+ ]
106
+ );
107
+ ?>
108
+ <?php endforeach; ?>
109
+ </div>
110
+
111
+ <?php $this->template( 'widgets/events-list/view-more', [ 'view_more_link' => $view_more_link ] ); ?>
112
+
113
+ <?php else : ?>
114
+
115
+ <?php // get messages component ?>
116
+
117
+ <?php endif; ?>
118
+ </div>
119
+ </div>
120
+ </div>
src/views/v2/widgets/events-list/event.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widget: Events List Event
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/widgets/events-list/event.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link http://m.tri.be/1aiy
11
+ *
12
+ * @version 5.2.1
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ * @var array<string,bool> $display Associative array of display settings for event meta.
16
+ *
17
+ * @see tribe_get_event() For the format of the event object.
18
+ */
19
+
20
+ $container_classes = [ 'tribe-common-g-row', 'tribe-events-widget-events-list__event-row' ];
21
+ $container_classes['tribe-events-widget-events-list__event-row--featured'] = $event->featured;
22
+
23
+ $event_classes = tribe_get_post_class( [ 'tribe-events-widget-events-list__event' ], $event->ID );
24
+ ?>
25
+ <div <?php tribe_classes( $container_classes ); ?>>
26
+
27
+ <?php $this->template( 'widgets/events-list/event/date-tag', [ 'event' => $event ] ); ?>
28
+
29
+ <div class="tribe-events-widget-events-list__event-wrapper tribe-common-g-col">
30
+ <article <?php tribe_classes( $event_classes ) ?>>
31
+ <div class="tribe-events-widget-events-list__event-details">
32
+
33
+ <header class="tribe-events-widget-events-list__event-header">
34
+ <?php $this->template( 'widgets/events-list/event/date', [ 'event' => $event ] ); ?>
35
+ <?php $this->template( 'widgets/events-list/event/title', [ 'event' => $event ] ); ?>
36
+ </header>
37
+
38
+ <?php // $this->template( 'widgets/events-list/event/cost', [ 'event' => $event, 'display' => $display ] ); ?>
39
+ <?php // $this->template( 'widgets/events-list/event/venue', [ 'event' => $event, 'display' => $display ] ); ?>
40
+ <?php // $this->template( 'widgets/events-list/event/organizer', [ 'event' => $event, 'display' => $display ] ); ?>
41
+
42
+ </div>
43
+ </article>
44
+ </div>
45
+
46
+ </div>
src/views/v2/widgets/events-list/event/cost.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widget: Events List Event Cost
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/widgets/events-list/event/cost.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link http://m.tri.be/1aiy
11
+ *
12
+ * @version 5.2.1
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ * @var array<string,bool> $display Associative array of display settings for event meta.
16
+ *
17
+ * @see tribe_get_event() For the format of the event object.
18
+ */
19
+
20
+ if ( empty( $event->cost ) || empty( $display['cost'] ) ) {
21
+ return;
22
+ }
23
+ ?>
24
+ <div class="tribe-events-widget-events-list__event-cost tribe-common-b2">
25
+ <span class="tribe-events-widget-events-list__event-cost-price">
26
+ <?php echo esc_html( $event->cost ); ?>
27
+ </span>
28
+ </div>
src/views/v2/widgets/events-list/event/date-tag.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widget: Events List Event Venue
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/widgets/events-list/event/venue.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link http://m.tri.be/1aiy
11
+ *
12
+ * @version 5.2.1
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ */
18
+
19
+ use Tribe__Date_Utils as Dates;
20
+
21
+ /*
22
+ * If the request date is after the event start date, show the request date to avoid users from seeing dates "in the
23
+ * past" in relation to the date they requested (or today's date).
24
+ */
25
+ $display_date = empty( $is_past ) && ! empty( $request_date )
26
+ ? max( $event->dates->start_display, $request_date )
27
+ : $event->dates->start_display;
28
+
29
+ $event_month = $display_date->format_i18n( 'M' );
30
+ $event_day_num = $display_date->format_i18n( 'j' );
31
+ $event_date_attr = $display_date->format( Dates::DBDATEFORMAT );
32
+ ?>
33
+ <div class="tribe-events-widget-events-list__event-date-tag tribe-common-g-col">
34
+ <time class="tribe-events-widget-events-list__event-date-tag-datetime" datetime="<?php echo esc_attr( $event_date_attr ); ?>">
35
+ <span class="tribe-events-widget-events-list__event-date-tag-month">
36
+ <?php echo esc_html( $event_month ); ?>
37
+ </span>
38
+ <span class="tribe-events-widget-events-list__event-date-tag-daynum tribe-common-h2 tribe-common-h4--min-medium">
39
+ <?php echo esc_html( $event_day_num ); ?>
40
+ </span>
41
+ </time>
42
+ </div>
src/views/v2/widgets/events-list/event/date.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widget: Events List Event Date
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/widgets/events-list/event/date.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link http://m.tri.be/1aiy
11
+ *
12
+ * @version 5.2.1
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ */
18
+ use Tribe__Date_Utils as Dates;
19
+
20
+ $event_date_attr = $event->dates->start->format( Dates::DBDATEFORMAT );
21
+
22
+ ?>
23
+ <div class="tribe-events-widget-events-list__event-datetime-wrapper tribe-common-b2 tribe-common-b3--min-medium">
24
+ <?php $this->template( 'widgets/events-list/event/date/featured', [ 'event' => $event ] ); ?>
25
+ <time class="tribe-events-widget-events-list__event-datetime" datetime="<?php echo esc_attr( $event_date_attr ); ?>">
26
+ <?php
27
+ // The date returned back contains HTML and is already escaped.
28
+ echo $event->schedule_details->value();
29
+ ?>
30
+ </time>
31
+ <?php $this->do_entry_point( 'after_event_datetime' ); ?>
32
+ </div>
src/views/v2/widgets/events-list/event/date/featured.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widget: Events List Event Featured Icon
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/widgets/events-list/event/date/featured.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link http://m.tri.be/1aiy
11
+ *
12
+ * @version 5.2.1
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ */
18
+
19
+ if ( empty( $event->featured ) ) {
20
+ return;
21
+ }
22
+ ?>
23
+ <em
24
+ class="tribe-events-widget-events-list__event-datetime-featured-icon"
25
+ aria-label="<?php esc_attr_e( 'Featured', 'the-events-calendar' ); ?>"
26
+ title="<?php esc_attr_e( 'Featured', 'the-events-calendar' ); ?>"
27
+ >
28
+ </em>
29
+ <span class="tribe-events-widget-events-list__event-datetime-featured-text tribe-common-a11y-visual-hide">
30
+ <?php esc_html_e( 'Featured', 'the-events-calendar' ); ?>
31
+ </span>
src/views/v2/widgets/events-list/event/organizer.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widget: Events List Event Organizer
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/widgets/events-list/event/organizer.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link http://m.tri.be/1aiy
11
+ *
12
+ * @version 5.2.1
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ * @var array<string,bool> $display Associative array of display settings for event meta.
16
+ *
17
+ * @see tribe_get_event() For the format of the event object.
18
+ */
19
+ ?>
src/views/v2/widgets/events-list/event/title.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widget: Events List Event Title
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/widgets/events-list/event/title.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link http://m.tri.be/1aiy
11
+ *
12
+ * @version 5.2.1
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ */
18
+ ?>
19
+ <h3 class="tribe-events-widget-events-list__event-title tribe-common-h7">
20
+ <a
21
+ href="<?php echo esc_url( $event->permalink ); ?>"
22
+ title="<?php echo esc_attr( $event->title ); ?>"
23
+ rel="bookmark"
24
+ class="tribe-events-widget-events-list__event-title-link tribe-common-anchor-thin"
25
+ >
26
+ <?php
27
+ // phpcs:ignore
28
+ echo $event->title;
29
+ ?>
30
+ </a>
31
+ </h3>
src/views/v2/widgets/events-list/event/venue.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widget: Events List Event Venue
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/widgets/events-list/event/venue.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link http://m.tri.be/1aiy
11
+ *
12
+ * @version 5.2.1
13
+ *
14
+ * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
+ * @var array<string,bool> $display Associative array of display settings for event meta.
16
+ *
17
+ * @see tribe_get_event() For the format of the event object.
18
+ */
19
+
20
+ if ( ! $event->venues->count() ) {
21
+ return;
22
+ }
23
+
24
+ if (
25
+ empty( $display['venue'] )
26
+ && empty( $display['street'] )
27
+ && empty( $display['city'] )
28
+ && empty( $display['region'] )
29
+ && empty( $display['zip'] )
30
+ && empty( $display['country'] )
31
+ ) {
32
+ return;
33
+ }
34
+
35
+ $venue = $event->venues[0];
36
+ ?>
37
+ <div class="tribe-events-widget-events-list__event-venue tribe-common-b2">
38
+
39
+ <?php if ( ! empty( $display['venue'] ) ) : ?>
40
+ <span class="tribe-events-widget-events-list__event-venue-name tribe-common-b2--bold">
41
+ <?php echo wp_kses_post( $venue->post_title ); ?>
42
+ </span>
43
+ <?php endif; ?>
44
+
45
+ <?php
46
+ if (
47
+ ! empty( $display['street'] )
48
+ || ! empty( $display['city'] )
49
+ || ! empty( $display['region'] )
50
+ || ! empty( $display['zip'] )
51
+ || ! empty( $display['country'] )
52
+ ) :
53
+ ?>
54
+ <address class="tribe-events-widget-events-list__event-venue-address">
55
+
56
+ <?php if ( ! empty( $display['street'] ) ) : ?>
57
+ <div class="tribe-events-widget-events-list__event-venue-address-street">
58
+ <?php echo esc_html( $venue->address ); ?>
59
+ </div>
60
+ <?php endif; ?>
61
+
62
+ <?php if ( ! empty( $display['city'] ) || ! empty( $display['region'] ) || ! empty( $display['zip'] ) ) : ?>
63
+ <div class="tribe-events-widget-events-list__event-venue-address-">
64
+ <?php if ( ! empty( $display['city'] ) ) : ?>
65
+ <span class="tribe-events-widget-events-list__event-venue-address-city">
66
+ <?php echo esc_html( $venue->city ); ?>
67
+ </span>
68
+ <?php endif; ?>
69
+ <?php if ( ! empty( $display['region'] ) ) : ?>
70
+ <span class="tribe-events-widget-events-list__event-venue-address-region">
71
+ <?php echo esc_html( $venue->state_province ); ?>
72
+ </span>
73
+ <?php endif; ?>
74
+ <?php if ( ! empty( $display['zip'] ) ) : ?>
75
+ <span class="tribe-events-widget-events-list__event-venue-address-zip">
76
+ <?php echo esc_html( $venue->zip ); ?>
77
+ </span>
78
+ <?php endif; ?>
79
+ </div>
80
+ <?php endif; ?>
81
+
82
+ <?php if ( ! empty( $display['country'] ) ) : ?>
83
+ <div class="tribe-events-widget-events-list__event-venue-address-country">
84
+ <?php echo esc_html( $venue->country ); ?>
85
+ </div>
86
+ <?php endif; ?>
87
+
88
+ </address>
89
+ <?php endif; ?>
90
+
91
+ </div>
src/views/v2/widgets/events-list/view-more.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Widget: Events List Event
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/widgets/events-list/event.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link http://m.tri.be/1aiy
11
+ *
12
+ * @version 5.2.1
13
+ *
14
+ * @var string $view_more_link The URL to view all events.
15
+ *
16
+ * @see tribe_get_event() For the format of the event object.
17
+ */
18
+
19
+ if ( empty( $view_more_link ) ) {
20
+ return;
21
+ }
22
+ ?>
23
+ <div class="tribe-events-widget-events-list__view-more tribe-common-b1 tribe-common-b2--min-medium">
24
+ <a
25
+ href="<?php echo esc_url( $view_more_link ); ?>"
26
+ class="tribe-events-widget-events-list__view-more-link tribe-common-anchor-thin"
27
+ >
28
+ <?php esc_html_e( 'View more', 'the-events-calendar' ); ?>
29
+ </a>
30
+ </div>
src/views/v2/widgets/widget-list.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Temporary Display of V2 List Widget
4
+ */
5
+
6
+ ?>
7
+ <div>
8
+ <?php echo esc_html( "Widget Name: {$name}" ); ?>
9
+ </div>
the-events-calendar.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Plugin Name: The Events Calendar
4
  * Description: The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events. Beautiful. Solid. Awesome.
5
- * Version: 5.2.0.1
6
  * Author: Modern Tribe, Inc.
7
  * Author URI: http://m.tri.be/1x
8
  * Text Domain: the-events-calendar
@@ -73,4 +73,4 @@ require_once dirname( TRIBE_EVENTS_FILE ) . '/src/Tribe/Main.php';
73
  Tribe__Events__Main::instance();
74
 
75
  register_activation_hook( TRIBE_EVENTS_FILE, array( 'Tribe__Events__Main', 'activate' ) );
76
- register_deactivation_hook( TRIBE_EVENTS_FILE, array( 'Tribe__Events__Main', 'deactivate' ) );
2
  /**
3
  * Plugin Name: The Events Calendar
4
  * Description: The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events. Beautiful. Solid. Awesome.
5
+ * Version: 5.2.1.2
6
  * Author: Modern Tribe, Inc.
7
  * Author URI: http://m.tri.be/1x
8
  * Text Domain: the-events-calendar
73
  Tribe__Events__Main::instance();
74
 
75
  register_activation_hook( TRIBE_EVENTS_FILE, array( 'Tribe__Events__Main', 'activate' ) );
76
+ register_deactivation_hook( TRIBE_EVENTS_FILE, array( 'Tribe__Events__Main', 'deactivate' ) );
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit2c46dc55b6979383036e1946cd78869f::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit8c8d990936afd8fe718fade27afe59e9::getLoader();
vendor/composer/autoload_classmap.php CHANGED
@@ -11,6 +11,7 @@ return array(
11
  'Tribe\\Events\\Editor\\Objects\\Event' => $baseDir . '/src/Tribe/Editor/Objects/Event.php',
12
  'Tribe\\Events\\I18n' => $baseDir . '/src/Tribe/I18n.php',
13
  'Tribe\\Events\\Integrations\\Beaver_Builder' => $baseDir . '/src/Tribe/Integrations/Beaver_Builder.php',
 
14
  'Tribe\\Events\\Integrations\\WP_Rocket' => $baseDir . '/src/Tribe/Integrations/WP_Rocket.php',
15
  'Tribe\\Events\\Models\\Post_Types\\Event' => $baseDir . '/src/Tribe/Models/Post_Types/Event.php',
16
  'Tribe\\Events\\Models\\Post_Types\\Venue' => $baseDir . '/src/Tribe/Models/Post_Types/Venue.php',
@@ -64,4 +65,8 @@ return array(
64
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_Behavior' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/List_Behavior.php',
65
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\With_Fast_Forward_Link' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/With_Fast_Forward_Link.php',
66
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\iCal_Data' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/iCal_Data.php',
 
 
 
 
67
  );
11
  'Tribe\\Events\\Editor\\Objects\\Event' => $baseDir . '/src/Tribe/Editor/Objects/Event.php',
12
  'Tribe\\Events\\I18n' => $baseDir . '/src/Tribe/I18n.php',
13
  'Tribe\\Events\\Integrations\\Beaver_Builder' => $baseDir . '/src/Tribe/Integrations/Beaver_Builder.php',
14
+ 'Tribe\\Events\\Integrations\\WPML\\Views\\V2\\Filters' => $baseDir . '/src/Tribe/Integrations/WPML/Views/V2/Filters.php',
15
  'Tribe\\Events\\Integrations\\WP_Rocket' => $baseDir . '/src/Tribe/Integrations/WP_Rocket.php',
16
  'Tribe\\Events\\Models\\Post_Types\\Event' => $baseDir . '/src/Tribe/Models/Post_Types/Event.php',
17
  'Tribe\\Events\\Models\\Post_Types\\Venue' => $baseDir . '/src/Tribe/Models/Post_Types/Venue.php',
65
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_Behavior' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/List_Behavior.php',
66
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\With_Fast_Forward_Link' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/With_Fast_Forward_Link.php',
67
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\iCal_Data' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/iCal_Data.php',
68
+ 'Tribe\\Events\\Views\\V2\\Views\\Widgets\\Widget_List_View' => $baseDir . '/src/Tribe/Views/V2/Views/Widgets/Widget_List_View.php',
69
+ 'Tribe\\Events\\Views\\V2\\Widgets\\Service_Provider' => $baseDir . '/src/Tribe/Views/V2/Widgets/Service_Provider.php',
70
+ 'Tribe\\Events\\Views\\V2\\Widgets\\Widget_Abstract' => $baseDir . '/src/Tribe/Views/V2/Widgets/Widget_Abstract.php',
71
+ 'Tribe\\Events\\Views\\V2\\Widgets\\Widget_List' => $baseDir . '/src/Tribe/Views/V2/Widgets/Widget_List.php',
72
  );
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit2c46dc55b6979383036e1946cd78869f
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit2c46dc55b6979383036e1946cd78869f
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit2c46dc55b6979383036e1946cd78869f', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit2c46dc55b6979383036e1946cd78869f', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit2c46dc55b6979383036e1946cd78869f::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit8c8d990936afd8fe718fade27afe59e9
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit8c8d990936afd8fe718fade27afe59e9', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit8c8d990936afd8fe718fade27afe59e9', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit8c8d990936afd8fe718fade27afe59e9::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit2c46dc55b6979383036e1946cd78869f
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
@@ -26,6 +26,7 @@ class ComposerStaticInit2c46dc55b6979383036e1946cd78869f
26
  'Tribe\\Events\\Editor\\Objects\\Event' => __DIR__ . '/../..' . '/src/Tribe/Editor/Objects/Event.php',
27
  'Tribe\\Events\\I18n' => __DIR__ . '/../..' . '/src/Tribe/I18n.php',
28
  'Tribe\\Events\\Integrations\\Beaver_Builder' => __DIR__ . '/../..' . '/src/Tribe/Integrations/Beaver_Builder.php',
 
29
  'Tribe\\Events\\Integrations\\WP_Rocket' => __DIR__ . '/../..' . '/src/Tribe/Integrations/WP_Rocket.php',
30
  'Tribe\\Events\\Models\\Post_Types\\Event' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Event.php',
31
  'Tribe\\Events\\Models\\Post_Types\\Venue' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Venue.php',
@@ -79,14 +80,18 @@ class ComposerStaticInit2c46dc55b6979383036e1946cd78869f
79
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_Behavior' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/List_Behavior.php',
80
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\With_Fast_Forward_Link' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/With_Fast_Forward_Link.php',
81
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\iCal_Data' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/iCal_Data.php',
 
 
 
 
82
  );
83
 
84
  public static function getInitializer(ClassLoader $loader)
85
  {
86
  return \Closure::bind(function () use ($loader) {
87
- $loader->prefixLengthsPsr4 = ComposerStaticInit2c46dc55b6979383036e1946cd78869f::$prefixLengthsPsr4;
88
- $loader->prefixDirsPsr4 = ComposerStaticInit2c46dc55b6979383036e1946cd78869f::$prefixDirsPsr4;
89
- $loader->classMap = ComposerStaticInit2c46dc55b6979383036e1946cd78869f::$classMap;
90
 
91
  }, null, ClassLoader::class);
92
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit8c8d990936afd8fe718fade27afe59e9
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
26
  'Tribe\\Events\\Editor\\Objects\\Event' => __DIR__ . '/../..' . '/src/Tribe/Editor/Objects/Event.php',
27
  'Tribe\\Events\\I18n' => __DIR__ . '/../..' . '/src/Tribe/I18n.php',
28
  'Tribe\\Events\\Integrations\\Beaver_Builder' => __DIR__ . '/../..' . '/src/Tribe/Integrations/Beaver_Builder.php',
29
+ 'Tribe\\Events\\Integrations\\WPML\\Views\\V2\\Filters' => __DIR__ . '/../..' . '/src/Tribe/Integrations/WPML/Views/V2/Filters.php',
30
  'Tribe\\Events\\Integrations\\WP_Rocket' => __DIR__ . '/../..' . '/src/Tribe/Integrations/WP_Rocket.php',
31
  'Tribe\\Events\\Models\\Post_Types\\Event' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Event.php',
32
  'Tribe\\Events\\Models\\Post_Types\\Venue' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Venue.php',
80
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_Behavior' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/List_Behavior.php',
81
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\With_Fast_Forward_Link' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/With_Fast_Forward_Link.php',
82
  'Tribe\\Events\\Views\\V2\\Views\\Traits\\iCal_Data' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/iCal_Data.php',
83
+ 'Tribe\\Events\\Views\\V2\\Views\\Widgets\\Widget_List_View' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Widgets/Widget_List_View.php',
84
+ 'Tribe\\Events\\Views\\V2\\Widgets\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Widgets/Service_Provider.php',
85
+ 'Tribe\\Events\\Views\\V2\\Widgets\\Widget_Abstract' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Widgets/Widget_Abstract.php',
86
+ 'Tribe\\Events\\Views\\V2\\Widgets\\Widget_List' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Widgets/Widget_List.php',
87
  );
88
 
89
  public static function getInitializer(ClassLoader $loader)
90
  {
91
  return \Closure::bind(function () use ($loader) {
92
+ $loader->prefixLengthsPsr4 = ComposerStaticInit8c8d990936afd8fe718fade27afe59e9::$prefixLengthsPsr4;
93
+ $loader->prefixDirsPsr4 = ComposerStaticInit8c8d990936afd8fe718fade27afe59e9::$prefixDirsPsr4;
94
+ $loader->classMap = ComposerStaticInit8c8d990936afd8fe718fade27afe59e9::$classMap;
95
 
96
  }, null, ClassLoader::class);
97
  }