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 | The Events Calendar |
Version | 5.0.2 |
Comparing to | |
See all releases |
Code changes from version 5.0.1 to 5.0.2
- common/lang/tribe-common-cs_CZ.mo +0 -0
- common/lang/tribe-common.pot +44 -39
- common/src/Tribe/Context.php +4 -1
- common/src/Tribe/Context/locations.php +23 -2
- common/src/Tribe/Date_Utils.php +107 -1
- common/src/Tribe/Debug_Bar/Panels/Json_Ld.php +84 -0
- common/src/Tribe/Freemius.php +3 -2
- common/src/Tribe/Main.php +115 -83
- common/src/Tribe/Repository/Query_Filters.php +3 -3
- common/src/Tribe/Rewrite.php +14 -0
- common/src/Tribe/Service_Providers/Debug_Bar.php +2 -0
- common/src/Tribe/Validate.php +4 -1
- common/src/functions/template-tags/general.php +14 -1
- common/src/functions/template-tags/post.php +4 -4
- common/src/functions/utils.php +1 -1
- common/src/resources/css/tooltip.css +1 -1
- common/src/resources/css/tooltip.min.css +1 -1
- common/src/resources/postcss/tooltip.pcss +1 -1
- common/vendor/autoload.php +1 -1
- common/vendor/autoload_52.php +1 -1
- common/vendor/composer/autoload_real.php +4 -4
- common/vendor/composer/autoload_real_52.php +3 -3
- common/vendor/composer/autoload_static.php +5 -5
- common/vendor/freemius/assets/css/admin/account.css +1 -1
- common/vendor/freemius/assets/css/admin/common.css +2 -2
- common/vendor/freemius/assets/css/admin/connect.css +1 -1
- common/vendor/freemius/assets/css/admin/debug.css +1 -1
- common/vendor/freemius/assets/css/admin/dialog-boxes.css +1 -1
- common/vendor/freemius/assets/css/admin/plugins.css +1 -0
- common/vendor/freemius/assets/css/customizer.css +1 -1
- common/vendor/freemius/assets/scss/_colors.scss +0 -79
- common/vendor/freemius/assets/scss/_functions.scss +0 -0
- common/vendor/freemius/assets/scss/_load.scss +0 -4
- common/vendor/freemius/assets/scss/_mixins.scss +0 -270
- common/vendor/freemius/assets/scss/_start.scss +0 -4
- common/vendor/freemius/assets/scss/_vars.scss +0 -6
- common/vendor/freemius/assets/scss/admin/_ajax-loader.scss +0 -49
- common/vendor/freemius/assets/scss/admin/_auto-install.scss +0 -33
- common/vendor/freemius/assets/scss/admin/_badge.scss +0 -14
- common/vendor/freemius/assets/scss/admin/_buttons.scss +0 -28
- common/vendor/freemius/assets/scss/admin/_deactivation-feedback.scss +0 -55
- common/vendor/freemius/assets/scss/admin/_gdpr-consent.scss +0 -81
- common/vendor/freemius/assets/scss/admin/_license-activation.scss +0 -47
- common/vendor/freemius/assets/scss/admin/_license-key-resend.scss +0 -68
- common/vendor/freemius/assets/scss/admin/_modal-common.scss +0 -194
- common/vendor/freemius/assets/scss/admin/_multisite-options.scss +0 -40
- common/vendor/freemius/assets/scss/admin/_plugin-upgrade-notice.scss +0 -8
- common/vendor/freemius/assets/scss/admin/_subscription-cancellation.scss +0 -30
- common/vendor/freemius/assets/scss/admin/_tag.scss +0 -28
- common/vendor/freemius/assets/scss/admin/_themes.scss +0 -28
- common/vendor/freemius/assets/scss/admin/_tooltip.scss +0 -66
- common/vendor/freemius/assets/scss/admin/account.scss +0 -307
- common/vendor/freemius/assets/scss/admin/add-ons.scss +0 -609
- common/vendor/freemius/assets/scss/admin/affiliation.scss +0 -97
- common/vendor/freemius/assets/scss/admin/checkout.scss +0 -5
- common/vendor/freemius/assets/scss/admin/common.scss +0 -220
- common/vendor/freemius/assets/scss/admin/connect.scss +0 -548
- common/vendor/freemius/assets/scss/admin/debug.scss +0 -135
- common/vendor/freemius/assets/scss/admin/dialog-boxes.scss +0 -10
- common/vendor/freemius/assets/scss/admin/gdpr-optin-notice.scss +0 -17
- common/vendor/freemius/assets/scss/admin/index.php +0 -3
- common/vendor/freemius/assets/scss/admin/plugins.scss +0 -12
- common/vendor/freemius/assets/scss/customizer.scss +0 -125
- common/vendor/freemius/assets/scss/index.php +0 -3
- common/vendor/freemius/composer.json +0 -10
- common/vendor/freemius/gulpfile.js +0 -167
- common/vendor/freemius/includes/class-freemius.php +1589 -281
- common/vendor/freemius/includes/class-fs-plugin-updater.php +32 -2
- common/vendor/freemius/includes/class-fs-storage.php +45 -40
- common/vendor/freemius/includes/customizer/class-fs-customizer-upsell-control.php +5 -1
- common/vendor/freemius/includes/entities/class-fs-entity.php +10 -0
- common/vendor/freemius/includes/entities/class-fs-plugin-license.php +33 -0
- common/vendor/freemius/includes/entities/class-fs-plugin.php +5 -0
- common/vendor/freemius/includes/entities/class-fs-pricing.php +16 -0
- common/vendor/freemius/includes/entities/class-fs-site.php +3 -3
- common/vendor/freemius/includes/entities/class-fs-subscription.php +136 -114
- common/vendor/freemius/includes/fs-core-functions.php +282 -217
- common/vendor/freemius/includes/fs-essential-functions.php +5 -1
- common/vendor/freemius/includes/fs-plugin-info-dialog.php +27 -6
- common/vendor/freemius/includes/managers/class-fs-admin-menu-manager.php +53 -32
- common/vendor/freemius/includes/managers/class-fs-cache-manager.php +1 -1
- common/vendor/freemius/includes/managers/class-fs-option-manager.php +35 -11
- common/vendor/freemius/includes/managers/class-fs-plugin-manager.php +3 -3
- common/vendor/freemius/languages/freemius-cs_CZ.mo +0 -0
- common/vendor/freemius/languages/freemius-da_DK.mo +0 -0
- common/vendor/freemius/languages/freemius-en.mo +0 -0
- common/vendor/freemius/languages/freemius-es_ES.mo +0 -0
- common/vendor/freemius/languages/freemius-fr_FR.mo +0 -0
- common/vendor/freemius/languages/freemius-he_IL.mo +0 -0
- common/vendor/freemius/languages/freemius-hu_HU.mo +0 -0
- common/vendor/freemius/languages/freemius-it_IT.mo +0 -0
- common/vendor/freemius/languages/freemius-ja.mo +0 -0
- common/vendor/freemius/languages/freemius-ja_JP.mo +0 -0
- common/vendor/freemius/languages/freemius-nl_NL.mo +0 -0
- common/vendor/freemius/languages/freemius-ru_RU.mo +0 -0
- common/vendor/freemius/languages/freemius-ta.mo +0 -0
- common/vendor/freemius/languages/freemius.pot +560 -451
- common/vendor/freemius/package.json +1 -1
- common/vendor/freemius/start.php +1 -1
- common/vendor/freemius/templates/account.php +225 -121
- common/vendor/freemius/templates/account/partials/addon.php +123 -84
- common/vendor/freemius/templates/account/partials/site.php +45 -29
- common/vendor/freemius/templates/add-ons.php +501 -440
- common/vendor/freemius/templates/connect.php +79 -25
- common/vendor/freemius/templates/debug.php +759 -726
- common/vendor/freemius/templates/debug/scheduled-crons.php +1 -1
- common/vendor/freemius/templates/forms/data-debug-mode.php +213 -0
- common/vendor/freemius/templates/forms/deactivation/form.php +1 -1
- common/vendor/freemius/templates/forms/license-activation.php +865 -700
- common/vendor/freemius/templates/forms/optout.php +329 -267
- common/vendor/freemius/templates/forms/subscription-cancellation.php +1 -1
- common/vendor/freemius/templates/forms/user-change.php +296 -0
- common/vendor/freemius/templates/powered-by.php +5 -2
- common/vendor/freemius/templates/pricing.php +1 -0
- common/vendor/freemius/templates/tabs.php +2 -2
- lang/the-events-calendar-de_CH.mo +0 -0
- lang/the-events-calendar-de_DE.mo +0 -0
- lang/the-events-calendar-en_CA.mo +0 -0
- lang/the-events-calendar-es_ES.mo +0 -0
- lang/the-events-calendar-fr_CA.mo +0 -0
- lang/the-events-calendar-nl_NL.mo +0 -0
- lang/the-events-calendar-pl_PL.mo +0 -0
- lang/the-events-calendar-ru_RU.mo +0 -0
- lang/the-events-calendar-uk.mo +0 -0
- lang/the-events-calendar.pot +317 -314
- readme.txt +17 -1
- src/Tribe/Customizer/Global_Elements.php +28 -9
- src/Tribe/Editor/Compatibility.php +4 -4
- src/Tribe/Integrations/Beaver_Builder.php +57 -0
- src/Tribe/Integrations/Freemius.php +205 -148
- src/Tribe/Integrations/Manager.php +22 -1
- src/Tribe/Main.php +4 -5
- src/Tribe/Plugin_Register.php +2 -2
- src/Tribe/REST/V1/Endpoints/Single_Event.php +3 -1
- src/Tribe/Repositories/Event.php +11 -7
- src/Tribe/Rewrite.php +3 -1
- src/Tribe/Views/V2/Assets.php +2 -2
- src/Tribe/Views/V2/Hooks.php +34 -0
- src/Tribe/Views/V2/Template/Page.php +142 -65
- src/Tribe/Views/V2/View.php +51 -23
- src/Tribe/Views/V2/Views/Traits/HTML_Cache.php +2 -1
- src/Tribe/Views/V2/Views/Traits/Json_Ld_Data.php +84 -0
- src/admin-views/tribe-options-display.php +50 -21
- src/admin-views/tribe-options-general.php +31 -10
- src/{Tribe/Customizer/Text.php → deprecated/Tribe__Events__Customizer__Text.php} +2 -0
- src/views/v2/components/data.php +3 -0
- src/views/v2/components/json-ld-data.php +34 -0
- src/views/v2/day.php +3 -1
- src/views/v2/list.php +3 -1
- src/views/v2/month.php +3 -1
- the-events-calendar.php +1 -1
- vendor/autoload.php +1 -1
- vendor/composer/autoload_classmap.php +2 -0
- vendor/composer/autoload_real.php +4 -4
- vendor/composer/autoload_static.php +6 -4
common/lang/tribe-common-cs_CZ.mo
CHANGED
Binary file
|
common/lang/tribe-common.pot
CHANGED
@@ -2,13 +2,13 @@
|
|
2 |
# This file is distributed under the same license as the Tribe Common package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Tribe Common 4.11.
|
6 |
"Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
|
7 |
-
"POT-Creation-Date: 2020-
|
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-
|
12 |
"Last-Translator: \n"
|
13 |
"Language-Team: \n"
|
14 |
|
@@ -290,6 +290,11 @@ msgstr ""
|
|
290 |
msgid "State"
|
291 |
msgstr ""
|
292 |
|
|
|
|
|
|
|
|
|
|
|
293 |
#: src/Tribe/Dialog/View.php:153
|
294 |
msgid "Open the modal window"
|
295 |
msgstr ""
|
@@ -1710,87 +1715,87 @@ msgstr ""
|
|
1710 |
msgid "Full debug (all events)"
|
1711 |
msgstr ""
|
1712 |
|
1713 |
-
#: src/Tribe/Main.php:
|
1714 |
msgid ": activate to sort column ascending"
|
1715 |
msgstr ""
|
1716 |
|
1717 |
-
#: src/Tribe/Main.php:
|
1718 |
msgid ": activate to sort column descending"
|
1719 |
msgstr ""
|
1720 |
|
1721 |
-
#: src/Tribe/Main.php:
|
1722 |
msgid "Show _MENU_ entries"
|
1723 |
msgstr ""
|
1724 |
|
1725 |
-
#: src/Tribe/Main.php:
|
1726 |
msgid "No data available in table"
|
1727 |
msgstr ""
|
1728 |
|
1729 |
-
#: src/Tribe/Main.php:
|
1730 |
msgid "Showing _START_ to _END_ of _TOTAL_ entries"
|
1731 |
msgstr ""
|
1732 |
|
1733 |
-
#: src/Tribe/Main.php:
|
1734 |
msgid "Showing 0 to 0 of 0 entries"
|
1735 |
msgstr ""
|
1736 |
|
1737 |
-
#: src/Tribe/Main.php:
|
1738 |
msgid "(filtered from _MAX_ total entries)"
|
1739 |
msgstr ""
|
1740 |
|
1741 |
-
#: src/Tribe/Main.php:
|
1742 |
msgid "No matching records found"
|
1743 |
msgstr ""
|
1744 |
|
1745 |
-
#: src/Tribe/Main.php:
|
1746 |
msgid "Search:"
|
1747 |
msgstr ""
|
1748 |
|
1749 |
-
#: src/Tribe/Main.php:
|
1750 |
msgid "All items on this page were selected. "
|
1751 |
msgstr ""
|
1752 |
|
1753 |
-
#: src/Tribe/Main.php:
|
1754 |
msgid "Select all pages"
|
1755 |
msgstr ""
|
1756 |
|
1757 |
-
#: src/Tribe/Main.php:
|
1758 |
msgid "Clear Selection."
|
1759 |
msgstr ""
|
1760 |
|
1761 |
-
#: src/Tribe/Main.php:
|
1762 |
msgid "All"
|
1763 |
msgstr ""
|
1764 |
|
1765 |
-
#: src/Tribe/Main.php:
|
1766 |
msgid "Next"
|
1767 |
msgstr ""
|
1768 |
|
1769 |
-
#: src/Tribe/Main.php:
|
1770 |
msgid "Previous"
|
1771 |
msgstr ""
|
1772 |
|
1773 |
-
#: src/Tribe/Main.php:
|
1774 |
msgid ": Selected %d rows"
|
1775 |
msgstr ""
|
1776 |
|
1777 |
-
#: src/Tribe/Main.php:
|
1778 |
msgid ": Selected 1 row"
|
1779 |
msgstr ""
|
1780 |
|
1781 |
-
#: src/Tribe/Main.php:
|
1782 |
msgid "Prev"
|
1783 |
msgstr ""
|
1784 |
|
1785 |
-
#: src/Tribe/Main.php:
|
1786 |
msgid "Today"
|
1787 |
msgstr ""
|
1788 |
|
1789 |
-
#: src/Tribe/Main.php:
|
1790 |
msgid "Done"
|
1791 |
msgstr ""
|
1792 |
|
1793 |
-
#: src/Tribe/Main.php:
|
1794 |
msgid "Clear"
|
1795 |
msgstr ""
|
1796 |
|
@@ -2263,65 +2268,65 @@ msgstr ""
|
|
2263 |
msgid "%s must be a whole number."
|
2264 |
msgstr ""
|
2265 |
|
2266 |
-
#: src/Tribe/Validate.php:
|
2267 |
msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
|
2268 |
msgstr ""
|
2269 |
|
2270 |
-
#: src/Tribe/Validate.php:
|
2271 |
msgid "%s must be a valid URL."
|
2272 |
msgstr ""
|
2273 |
|
2274 |
-
#: src/Tribe/Validate.php:
|
2275 |
-
#: src/Tribe/Validate.php:
|
2276 |
msgid "%s must have a value that's part of its options."
|
2277 |
msgstr ""
|
2278 |
|
2279 |
-
#: src/Tribe/Validate.php:
|
2280 |
msgid ""
|
2281 |
"Comparison validation failed because no comparison value was provided, for "
|
2282 |
"field %s"
|
2283 |
msgstr ""
|
2284 |
|
2285 |
-
#: src/Tribe/Validate.php:
|
2286 |
msgid "%s cannot be the same as %s."
|
2287 |
msgstr ""
|
2288 |
|
2289 |
-
#: src/Tribe/Validate.php:
|
2290 |
msgid "%s cannot be a duplicate"
|
2291 |
msgstr ""
|
2292 |
|
2293 |
-
#: src/Tribe/Validate.php:
|
2294 |
msgid "%s must be a number or percentage."
|
2295 |
msgstr ""
|
2296 |
|
2297 |
-
#: src/Tribe/Validate.php:
|
2298 |
msgid "%s must be a number between 0 and 21."
|
2299 |
msgstr ""
|
2300 |
|
2301 |
-
#: src/Tribe/Validate.php:
|
2302 |
msgid ""
|
2303 |
"%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
|
2304 |
msgstr ""
|
2305 |
|
2306 |
-
#: src/Tribe/Validate.php:
|
2307 |
msgid "%s must consist of letters, spaces, apostrophes, and dashes."
|
2308 |
msgstr ""
|
2309 |
|
2310 |
-
#: src/Tribe/Validate.php:
|
2311 |
msgid "%s must consist of 5 numbers."
|
2312 |
msgstr ""
|
2313 |
|
2314 |
-
#: src/Tribe/Validate.php:
|
2315 |
msgid "%s must be a phone number."
|
2316 |
msgstr ""
|
2317 |
|
2318 |
-
#: src/Tribe/Validate.php:
|
2319 |
msgid ""
|
2320 |
"Country List must be formatted as one country per line in the following "
|
2321 |
"format: <br>US, United States <br> UK, United Kingdom."
|
2322 |
msgstr ""
|
2323 |
|
2324 |
-
#: src/Tribe/Validate.php:
|
2325 |
msgid "%s must be an email address."
|
2326 |
msgstr ""
|
2327 |
|
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.11.2\n"
|
6 |
"Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
|
7 |
+
"POT-Creation-Date: 2020-02-19 15:59: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-02-19 15:59\n"
|
12 |
"Last-Translator: \n"
|
13 |
"Language-Team: \n"
|
14 |
|
290 |
msgid "State"
|
291 |
msgstr ""
|
292 |
|
293 |
+
#: src/Tribe/Debug_Bar/Panels/Json_Ld.php:21
|
294 |
+
#: src/Tribe/Debug_Bar/Panels/Json_Ld.php:40
|
295 |
+
msgid "Modern Tribe JSON-LD Data"
|
296 |
+
msgstr ""
|
297 |
+
|
298 |
#: src/Tribe/Dialog/View.php:153
|
299 |
msgid "Open the modal window"
|
300 |
msgstr ""
|
1715 |
msgid "Full debug (all events)"
|
1716 |
msgstr ""
|
1717 |
|
1718 |
+
#: src/Tribe/Main.php:283
|
1719 |
msgid ": activate to sort column ascending"
|
1720 |
msgstr ""
|
1721 |
|
1722 |
+
#: src/Tribe/Main.php:284
|
1723 |
msgid ": activate to sort column descending"
|
1724 |
msgstr ""
|
1725 |
|
1726 |
+
#: src/Tribe/Main.php:286
|
1727 |
msgid "Show _MENU_ entries"
|
1728 |
msgstr ""
|
1729 |
|
1730 |
+
#: src/Tribe/Main.php:287
|
1731 |
msgid "No data available in table"
|
1732 |
msgstr ""
|
1733 |
|
1734 |
+
#: src/Tribe/Main.php:288
|
1735 |
msgid "Showing _START_ to _END_ of _TOTAL_ entries"
|
1736 |
msgstr ""
|
1737 |
|
1738 |
+
#: src/Tribe/Main.php:289
|
1739 |
msgid "Showing 0 to 0 of 0 entries"
|
1740 |
msgstr ""
|
1741 |
|
1742 |
+
#: src/Tribe/Main.php:290
|
1743 |
msgid "(filtered from _MAX_ total entries)"
|
1744 |
msgstr ""
|
1745 |
|
1746 |
+
#: src/Tribe/Main.php:291
|
1747 |
msgid "No matching records found"
|
1748 |
msgstr ""
|
1749 |
|
1750 |
+
#: src/Tribe/Main.php:292
|
1751 |
msgid "Search:"
|
1752 |
msgstr ""
|
1753 |
|
1754 |
+
#: src/Tribe/Main.php:293
|
1755 |
msgid "All items on this page were selected. "
|
1756 |
msgstr ""
|
1757 |
|
1758 |
+
#: src/Tribe/Main.php:294
|
1759 |
msgid "Select all pages"
|
1760 |
msgstr ""
|
1761 |
|
1762 |
+
#: src/Tribe/Main.php:295
|
1763 |
msgid "Clear Selection."
|
1764 |
msgstr ""
|
1765 |
|
1766 |
+
#: src/Tribe/Main.php:297
|
1767 |
msgid "All"
|
1768 |
msgstr ""
|
1769 |
|
1770 |
+
#: src/Tribe/Main.php:298 src/Tribe/Main.php:315
|
1771 |
msgid "Next"
|
1772 |
msgstr ""
|
1773 |
|
1774 |
+
#: src/Tribe/Main.php:299
|
1775 |
msgid "Previous"
|
1776 |
msgstr ""
|
1777 |
|
1778 |
+
#: src/Tribe/Main.php:304
|
1779 |
msgid ": Selected %d rows"
|
1780 |
msgstr ""
|
1781 |
|
1782 |
+
#: src/Tribe/Main.php:305
|
1783 |
msgid ": Selected 1 row"
|
1784 |
msgstr ""
|
1785 |
|
1786 |
+
#: src/Tribe/Main.php:316
|
1787 |
msgid "Prev"
|
1788 |
msgstr ""
|
1789 |
|
1790 |
+
#: src/Tribe/Main.php:317 src/Tribe/Main.php:319
|
1791 |
msgid "Today"
|
1792 |
msgstr ""
|
1793 |
|
1794 |
+
#: src/Tribe/Main.php:318
|
1795 |
msgid "Done"
|
1796 |
msgstr ""
|
1797 |
|
1798 |
+
#: src/Tribe/Main.php:320
|
1799 |
msgid "Clear"
|
1800 |
msgstr ""
|
1801 |
|
2268 |
msgid "%s must be a whole number."
|
2269 |
msgstr ""
|
2270 |
|
2271 |
+
#: src/Tribe/Validate.php:250
|
2272 |
msgid "%s must be a valid slug (numbers, letters, dashes, and underscores)."
|
2273 |
msgstr ""
|
2274 |
|
2275 |
+
#: src/Tribe/Validate.php:263
|
2276 |
msgid "%s must be a valid URL."
|
2277 |
msgstr ""
|
2278 |
|
2279 |
+
#: src/Tribe/Validate.php:277 src/Tribe/Validate.php:289
|
2280 |
+
#: src/Tribe/Validate.php:302 src/Tribe/Validate.php:322
|
2281 |
msgid "%s must have a value that's part of its options."
|
2282 |
msgstr ""
|
2283 |
|
2284 |
+
#: src/Tribe/Validate.php:334
|
2285 |
msgid ""
|
2286 |
"Comparison validation failed because no comparison value was provided, for "
|
2287 |
"field %s"
|
2288 |
msgstr ""
|
2289 |
|
2290 |
+
#: src/Tribe/Validate.php:341
|
2291 |
msgid "%s cannot be the same as %s."
|
2292 |
msgstr ""
|
2293 |
|
2294 |
+
#: src/Tribe/Validate.php:343
|
2295 |
msgid "%s cannot be a duplicate"
|
2296 |
msgstr ""
|
2297 |
|
2298 |
+
#: src/Tribe/Validate.php:357
|
2299 |
msgid "%s must be a number or percentage."
|
2300 |
msgstr ""
|
2301 |
|
2302 |
+
#: src/Tribe/Validate.php:401
|
2303 |
msgid "%s must be a number between 0 and 21."
|
2304 |
msgstr ""
|
2305 |
|
2306 |
+
#: src/Tribe/Validate.php:415
|
2307 |
msgid ""
|
2308 |
"%s must consist of letters, numbers, dashes, apostrophes, and spaces only."
|
2309 |
msgstr ""
|
2310 |
|
2311 |
+
#: src/Tribe/Validate.php:429
|
2312 |
msgid "%s must consist of letters, spaces, apostrophes, and dashes."
|
2313 |
msgstr ""
|
2314 |
|
2315 |
+
#: src/Tribe/Validate.php:441
|
2316 |
msgid "%s must consist of 5 numbers."
|
2317 |
msgstr ""
|
2318 |
|
2319 |
+
#: src/Tribe/Validate.php:453
|
2320 |
msgid "%s must be a phone number."
|
2321 |
msgstr ""
|
2322 |
|
2323 |
+
#: src/Tribe/Validate.php:467
|
2324 |
msgid ""
|
2325 |
"Country List must be formatted as one country per line in the following "
|
2326 |
"format: <br>US, United States <br> UK, United Kingdom."
|
2327 |
msgstr ""
|
2328 |
|
2329 |
+
#: src/Tribe/Validate.php:496
|
2330 |
msgid "%s must be an email address."
|
2331 |
msgstr ""
|
2332 |
|
common/src/Tribe/Context.php
CHANGED
@@ -376,6 +376,7 @@ class Tribe__Context {
|
|
376 |
|
377 |
$value = $default;
|
378 |
$locations = $this->get_locations();
|
|
|
379 |
|
380 |
if ( ! $force && isset( $this->request_cache[ $key ] ) ) {
|
381 |
$value = $this->request_cache[ $key ];
|
@@ -384,6 +385,7 @@ class Tribe__Context {
|
|
384 |
$the_value = $this->$location( (array) $keys, $default );
|
385 |
|
386 |
if ( $default !== $the_value && static::NOT_FOUND !== $the_value ) {
|
|
|
387 |
$value = $the_value;
|
388 |
break;
|
389 |
}
|
@@ -401,7 +403,8 @@ class Tribe__Context {
|
|
401 |
*/
|
402 |
$value = apply_filters( "tribe_context_{$key}", $value );
|
403 |
|
404 |
-
if
|
|
|
405 |
$this->request_cache[ $key ] = $value;
|
406 |
}
|
407 |
|
376 |
|
377 |
$value = $default;
|
378 |
$locations = $this->get_locations();
|
379 |
+
$found = false;
|
380 |
|
381 |
if ( ! $force && isset( $this->request_cache[ $key ] ) ) {
|
382 |
$value = $this->request_cache[ $key ];
|
385 |
$the_value = $this->$location( (array) $keys, $default );
|
386 |
|
387 |
if ( $default !== $the_value && static::NOT_FOUND !== $the_value ) {
|
388 |
+
$found = true;
|
389 |
$value = $the_value;
|
390 |
break;
|
391 |
}
|
403 |
*/
|
404 |
$value = apply_filters( "tribe_context_{$key}", $value );
|
405 |
|
406 |
+
// Only cache if the value was found.
|
407 |
+
if ( $found ) {
|
408 |
$this->request_cache[ $key ] = $value;
|
409 |
}
|
410 |
|
common/src/Tribe/Context/locations.php
CHANGED
@@ -9,7 +9,6 @@
|
|
9 |
*
|
10 |
* @since 4.9.11
|
11 |
*/
|
12 |
-
|
13 |
return [
|
14 |
'post_id' => [
|
15 |
'read' => [
|
@@ -18,6 +17,21 @@ return [
|
|
18 |
}
|
19 |
],
|
20 |
],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
'posts_per_page' => [
|
22 |
'read' => [
|
23 |
Tribe__Context::REQUEST_VAR => 'posts_per_page',
|
@@ -90,5 +104,12 @@ return [
|
|
90 |
Tribe__Context::QUERY_VAR => [ 'taxonomy' ],
|
91 |
Tribe__Context::REQUEST_VAR => [ 'taxonomy' ],
|
92 |
],
|
93 |
-
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
];
|
9 |
*
|
10 |
* @since 4.9.11
|
11 |
*/
|
|
|
12 |
return [
|
13 |
'post_id' => [
|
14 |
'read' => [
|
17 |
}
|
18 |
],
|
19 |
],
|
20 |
+
'permalink_structure' => [
|
21 |
+
'read' => [
|
22 |
+
Tribe__Context::OPTION => [ 'permalink_structure' ],
|
23 |
+
],
|
24 |
+
],
|
25 |
+
'plain_permalink' => [
|
26 |
+
'read' => [
|
27 |
+
Tribe__Context::LOCATION_FUNC => [
|
28 |
+
'permalink_structure',
|
29 |
+
static function( $struct ){
|
30 |
+
return empty( $struct );
|
31 |
+
},
|
32 |
+
],
|
33 |
+
],
|
34 |
+
],
|
35 |
'posts_per_page' => [
|
36 |
'read' => [
|
37 |
Tribe__Context::REQUEST_VAR => 'posts_per_page',
|
104 |
Tribe__Context::QUERY_VAR => [ 'taxonomy' ],
|
105 |
Tribe__Context::REQUEST_VAR => [ 'taxonomy' ],
|
106 |
],
|
107 |
+
],
|
108 |
+
'post_tag' => [
|
109 |
+
'read' => [
|
110 |
+
Tribe__Context::QUERY_PROP => [ 'post_tag', 'tag' ],
|
111 |
+
Tribe__Context::QUERY_VAR => [ 'post_tag', 'tag' ],
|
112 |
+
Tribe__Context::REQUEST_VAR => [ 'post_tag', 'tag' ],
|
113 |
+
],
|
114 |
+
],
|
115 |
];
|
common/src/Tribe/Date_Utils.php
CHANGED
@@ -69,7 +69,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
69 |
*/
|
70 |
public static function maybe_format_from_datepicker( $date, $datepicker = null ) {
|
71 |
if ( ! is_numeric( $datepicker ) ) {
|
72 |
-
$datepicker = tribe_get_option( 'datepickerFormat' );
|
73 |
}
|
74 |
|
75 |
if ( is_numeric( $datepicker ) ) {
|
@@ -1318,6 +1318,8 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
1318 |
*
|
1319 |
* @since 4.9.21
|
1320 |
*
|
|
|
|
|
1321 |
* @param string|int|\DateTime $date The date string, timestamp or object.
|
1322 |
* @param int|null $start_of_week The number representing the start of week day as handled by
|
1323 |
* WordPress: `0` (for Sunday) through `6` (for Saturday).
|
@@ -1399,6 +1401,110 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
|
|
1399 |
return [ $week_start, $week_end ];
|
1400 |
}
|
1401 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1402 |
/**
|
1403 |
* Builds and returns a `DateInterval` object from the interval specification.
|
1404 |
*
|
69 |
*/
|
70 |
public static function maybe_format_from_datepicker( $date, $datepicker = null ) {
|
71 |
if ( ! is_numeric( $datepicker ) ) {
|
72 |
+
$datepicker = tribe_get_option( 'datepickerFormat', self::get_datepicker_format_index() );
|
73 |
}
|
74 |
|
75 |
if ( is_numeric( $datepicker ) ) {
|
1318 |
*
|
1319 |
* @since 4.9.21
|
1320 |
*
|
1321 |
+
* @throws Exception
|
1322 |
+
*
|
1323 |
* @param string|int|\DateTime $date The date string, timestamp or object.
|
1324 |
* @param int|null $start_of_week The number representing the start of week day as handled by
|
1325 |
* WordPress: `0` (for Sunday) through `6` (for Saturday).
|
1401 |
return [ $week_start, $week_end ];
|
1402 |
}
|
1403 |
|
1404 |
+
/**
|
1405 |
+
* Given a specific DateTime we determine the end of that day based on our Internal End of Day Cut-off.
|
1406 |
+
*
|
1407 |
+
* @since 4.11.2
|
1408 |
+
*
|
1409 |
+
* @param string|DateTimeInterface $date Date that we are getting the end of day from.
|
1410 |
+
* @param null|string $cutoff Which cutoff to use.
|
1411 |
+
*
|
1412 |
+
* @return DateTimeInterface|false Returns a DateTimeInterface when a valid date is given or false.
|
1413 |
+
*/
|
1414 |
+
public static function get_shifted_end_of_day( $date, $cutoff = null ) {
|
1415 |
+
$date_obj = static::build_date_object( $date );
|
1416 |
+
|
1417 |
+
if ( ! $date_obj ) {
|
1418 |
+
return false;
|
1419 |
+
}
|
1420 |
+
|
1421 |
+
$start_of_day = clone $date_obj;
|
1422 |
+
$end_of_day = clone $date_obj;
|
1423 |
+
|
1424 |
+
if ( empty( $cutoff ) || ! is_string( $cutoff ) || false === strpos( $cutoff, ':' ) ) {
|
1425 |
+
$cutoff = tribe_get_option( 'multiDayCutoff', '00:00' );
|
1426 |
+
}
|
1427 |
+
|
1428 |
+
list( $hours_to_add, $minutes_to_add ) = array_map( 'absint', explode( ':', $cutoff ) );
|
1429 |
+
|
1430 |
+
$seconds_to_add = ( $hours_to_add * HOUR_IN_SECONDS ) + ( $minutes_to_add * MINUTE_IN_SECONDS );
|
1431 |
+
if ( 0 !== $seconds_to_add ) {
|
1432 |
+
$interval = static::interval( "PT{$seconds_to_add}S" );
|
1433 |
+
}
|
1434 |
+
|
1435 |
+
$start_of_day->setTime( '0', '0', '0' );
|
1436 |
+
$end_of_day->setTime( '23', '59', '59' );
|
1437 |
+
|
1438 |
+
if ( 0 !== $seconds_to_add ) {
|
1439 |
+
$start_of_day->add( $interval );
|
1440 |
+
$end_of_day->add( $interval );
|
1441 |
+
}
|
1442 |
+
|
1443 |
+
if ( $end_of_day >= $date_obj && $date_obj >= $start_of_day ) {
|
1444 |
+
return $end_of_day;
|
1445 |
+
}
|
1446 |
+
|
1447 |
+
$start_of_day->sub( static::interval( 'P1D' ) );
|
1448 |
+
|
1449 |
+
if ( $start_of_day < $date_obj ) {
|
1450 |
+
$end_of_day->sub( static::interval( 'P1D' ) );
|
1451 |
+
}
|
1452 |
+
|
1453 |
+
return $end_of_day;
|
1454 |
+
}
|
1455 |
+
|
1456 |
+
/**
|
1457 |
+
* Given a specific DateTime we determine the start of that day based on our Internal End of Day Cut-off.
|
1458 |
+
*
|
1459 |
+
* @since 4.11.2
|
1460 |
+
*
|
1461 |
+
* @param string|DateTimeInterface $date Date that we are getting the start of day from.
|
1462 |
+
* @param null|string $cutoff Which cutoff to use.
|
1463 |
+
*
|
1464 |
+
* @return DateTimeInterface|false Returns a DateTimeInterface when a valid date is given or false.
|
1465 |
+
*/
|
1466 |
+
public static function get_shifted_start_of_day( $date, $cutoff = null ) {
|
1467 |
+
$date_obj = static::build_date_object( $date );
|
1468 |
+
|
1469 |
+
if ( ! $date_obj ) {
|
1470 |
+
return false;
|
1471 |
+
}
|
1472 |
+
|
1473 |
+
$start_of_day = clone $date_obj;
|
1474 |
+
$end_of_day = clone $date_obj;
|
1475 |
+
|
1476 |
+
if ( empty( $cutoff ) || ! is_string( $cutoff ) || false === strpos( $cutoff, ':' ) ) {
|
1477 |
+
$cutoff = tribe_get_option( 'multiDayCutoff', '00:00' );
|
1478 |
+
}
|
1479 |
+
|
1480 |
+
list( $hours_to_add, $minutes_to_add ) = array_map( 'absint', explode( ':', $cutoff ) );
|
1481 |
+
|
1482 |
+
$seconds_to_add = ( $hours_to_add * HOUR_IN_SECONDS ) + ( $minutes_to_add * MINUTE_IN_SECONDS );
|
1483 |
+
if ( 0 !== $seconds_to_add ) {
|
1484 |
+
$interval = static::interval( "PT{$seconds_to_add}S" );
|
1485 |
+
}
|
1486 |
+
|
1487 |
+
$start_of_day->setTime( '0', '0', '0' );
|
1488 |
+
$end_of_day->setTime( '23', '59', '59' );
|
1489 |
+
|
1490 |
+
if ( 0 !== $seconds_to_add ) {
|
1491 |
+
$start_of_day->add( $interval );
|
1492 |
+
$end_of_day->add( $interval );
|
1493 |
+
}
|
1494 |
+
|
1495 |
+
if ( $end_of_day <= $date_obj && $date_obj >= $start_of_day ) {
|
1496 |
+
return $start_of_day;
|
1497 |
+
}
|
1498 |
+
|
1499 |
+
$end_of_day->sub( static::interval( 'P1D' ) );
|
1500 |
+
|
1501 |
+
if ( $end_of_day > $date_obj ) {
|
1502 |
+
$start_of_day->sub( static::interval( 'P1D' ) );
|
1503 |
+
}
|
1504 |
+
|
1505 |
+
return $start_of_day;
|
1506 |
+
}
|
1507 |
+
|
1508 |
/**
|
1509 |
* Builds and returns a `DateInterval` object from the interval specification.
|
1510 |
*
|
common/src/Tribe/Debug_Bar/Panels/Json_Ld.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* JSON-LD information Debug Bar panel.
|
4 |
+
*
|
5 |
+
* @since 4.11.2
|
6 |
+
*
|
7 |
+
* @package Tribe\Debug_Bar\Panels
|
8 |
+
*/
|
9 |
+
|
10 |
+
class Tribe__Debug_Bar__Panels__Json_Ld extends Debug_Bar_Panel {
|
11 |
+
/**
|
12 |
+
* Returns the Panel name.
|
13 |
+
*
|
14 |
+
* @since 4.11.2
|
15 |
+
*
|
16 |
+
* @param null $title The panel input title.
|
17 |
+
*
|
18 |
+
* @return string The panel title
|
19 |
+
*/
|
20 |
+
public function title( $title = null ) {
|
21 |
+
return __( 'Modern Tribe JSON-LD Data', 'tribe-common' );
|
22 |
+
}
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Renders the panel contents.
|
26 |
+
*
|
27 |
+
* @since 4.9.5
|
28 |
+
*/
|
29 |
+
public function render() {
|
30 |
+
$html = '<style>
|
31 |
+
#mt-debug-bar .mt-debug-bar-title {
|
32 |
+
margin-bottom: 1em;
|
33 |
+
}
|
34 |
+
#mt-debug-bar .mt-debug-bar-section {
|
35 |
+
padding: .5em .5em .5em 1em;
|
36 |
+
}
|
37 |
+
</style>';
|
38 |
+
$html .= '<div id="mt-debug-bar" class="mt-debug-bar-json-ld">';
|
39 |
+
|
40 |
+
$html .= '<header class="mt-debug-bar-title"><h2>' . esc_html__( 'Modern Tribe JSON-LD Data',
|
41 |
+
'tribe-common' ) . '</h2></header>';
|
42 |
+
|
43 |
+
|
44 |
+
$json_ld_data = array_filter( (array) tribe_cache()['json-ld-data'] );
|
45 |
+
|
46 |
+
if ( ! empty( $json_ld_data ) ) {
|
47 |
+
$html .= '<div class="mt-debug-bar-section">';
|
48 |
+
$html .= sprintf(
|
49 |
+
'<header>The request produced %d JSON-LD data %s.</header><br>',
|
50 |
+
count( $json_ld_data ),
|
51 |
+
count( $json_ld_data ) > 1 ? 'scripts' : 'script'
|
52 |
+
);
|
53 |
+
|
54 |
+
$html .= '<p>Copy the code below and paste it into ' .
|
55 |
+
'<a href="https://search.google.com/structured-data/testing-tool/u/0/" target="_blank">' .
|
56 |
+
'Google\'s Structured Data Testing Tool' .
|
57 |
+
'</a>' .
|
58 |
+
' to test it using the Code Snippet option.</p><br>';
|
59 |
+
|
60 |
+
foreach ( $json_ld_data as $full_entry ) {
|
61 |
+
preg_match(
|
62 |
+
'/(?<open>^\\s*<script[^>]*?>\\s*)(?<json>.*)(?<close>\\s<\\/script>)$/uism',
|
63 |
+
$full_entry,
|
64 |
+
$frags
|
65 |
+
);
|
66 |
+
|
67 |
+
if ( isset( $frags['open'], $frags['json'], $frags['close'] ) ) {
|
68 |
+
// Let's try and format it if we've got all the pieces.
|
69 |
+
$full_entry = $frags['open']
|
70 |
+
. json_encode( json_decode( $frags['json'], true ), JSON_PRETTY_PRINT )
|
71 |
+
. $frags['close'];
|
72 |
+
}
|
73 |
+
|
74 |
+
$html .= sprintf( '<pre><code>%s</code></pre>', esc_html( $full_entry ) );
|
75 |
+
}
|
76 |
+
|
77 |
+
$html .= '</div>';
|
78 |
+
}
|
79 |
+
|
80 |
+
$html .= '</div>';
|
81 |
+
|
82 |
+
echo $html;
|
83 |
+
}
|
84 |
+
}
|
common/src/Tribe/Freemius.php
CHANGED
@@ -15,8 +15,9 @@ class Tribe__Freemius {
|
|
15 |
private $instances = [];
|
16 |
|
17 |
/**
|
18 |
-
*
|
19 |
-
*
|
|
|
20 |
*
|
21 |
* @since 4.9.5
|
22 |
*/
|
15 |
private $instances = [];
|
16 |
|
17 |
/**
|
18 |
+
* Load the vendor files for Freemius vendor.
|
19 |
+
*
|
20 |
+
* Freemius class should only be loaded once since it will be registered as a Singleton.
|
21 |
*
|
22 |
* @since 4.9.5
|
23 |
*/
|
common/src/Tribe/Main.php
CHANGED
@@ -17,7 +17,7 @@ class Tribe__Main {
|
|
17 |
const OPTIONNAME = 'tribe_events_calendar_options';
|
18 |
const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
|
19 |
|
20 |
-
const VERSION = '4.11.
|
21 |
|
22 |
const FEED_URL = 'https://theeventscalendar.com/feed/';
|
23 |
|
@@ -55,7 +55,6 @@ class Tribe__Main {
|
|
55 |
/**
|
56 |
* Constructor for Common Class
|
57 |
*
|
58 |
-
* @access public
|
59 |
* We are using a `public` constructor here for backwards compatibility.
|
60 |
*
|
61 |
* The way our code used to work we would have `new Tribe__Main()` called directly
|
@@ -88,8 +87,8 @@ class Tribe__Main {
|
|
88 |
|
89 |
$this->promoter_connector();
|
90 |
|
91 |
-
add_action( 'plugins_loaded',
|
92 |
-
add_action( 'tribe_common_loaded',
|
93 |
}
|
94 |
|
95 |
/**
|
@@ -130,7 +129,7 @@ class Tribe__Main {
|
|
130 |
|
131 |
$autoloader = Tribe__Autoloader::instance();
|
132 |
|
133 |
-
$prefixes =
|
134 |
$autoloader->register_prefixes( $prefixes );
|
135 |
|
136 |
foreach ( glob( $this->plugin_path . 'src/deprecated/*.php' ) as $file ) {
|
@@ -226,21 +225,21 @@ class Tribe__Main {
|
|
226 |
// These ones will be enqueued on `admin_enqueue_scripts` if the conditional method on filter is met
|
227 |
tribe_assets(
|
228 |
$this,
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
'admin_enqueue_scripts',
|
240 |
-
|
241 |
-
'conditionals' =>
|
242 |
'priority' => 5,
|
243 |
-
|
244 |
);
|
245 |
|
246 |
tribe_asset(
|
@@ -279,11 +278,11 @@ class Tribe__Main {
|
|
279 |
public function load_localize_data() {
|
280 |
$datepicker_months = array_values( Tribe__Date_Utils::get_localized_months_full() );
|
281 |
|
282 |
-
tribe( 'asset.data' )->add( 'tribe_l10n_datatables',
|
283 |
-
'aria' =>
|
284 |
'sort_ascending' => __( ': activate to sort column ascending', 'tribe-common' ),
|
285 |
'sort_descending' => __( ': activate to sort column descending', 'tribe-common' ),
|
286 |
-
|
287 |
'length_menu' => __( 'Show _MENU_ entries', 'tribe-common' ),
|
288 |
'empty_table' => __( 'No data available in table', 'tribe-common' ),
|
289 |
'info' => __( 'Showing _START_ to _END_ of _TOTAL_ entries', 'tribe-common' ),
|
@@ -294,19 +293,19 @@ class Tribe__Main {
|
|
294 |
'all_selected_text' => __( 'All items on this page were selected. ', 'tribe-common' ),
|
295 |
'select_all_link' => __( 'Select all pages', 'tribe-common' ),
|
296 |
'clear_selection' => __( 'Clear Selection.', 'tribe-common' ),
|
297 |
-
'pagination' =>
|
298 |
'all' => __( 'All', 'tribe-common' ),
|
299 |
'next' => __( 'Next', 'tribe-common' ),
|
300 |
'previous' => __( 'Previous', 'tribe-common' ),
|
301 |
-
|
302 |
-
'select' =>
|
303 |
-
'rows' =>
|
304 |
0 => '',
|
305 |
'_' => __( ': Selected %d rows', 'tribe-common' ),
|
306 |
1 => __( ': Selected 1 row', 'tribe-common' ),
|
307 |
-
|
308 |
-
|
309 |
-
'datepicker' =>
|
310 |
'dayNames' => Tribe__Date_Utils::get_localized_weekdays_full(),
|
311 |
'dayNamesShort' => Tribe__Date_Utils::get_localized_weekdays_short(),
|
312 |
'dayNamesMin' => Tribe__Date_Utils::get_localized_weekdays_initial(),
|
@@ -319,28 +318,37 @@ class Tribe__Main {
|
|
319 |
'closeText' => esc_html__( 'Done', 'the-events-calendar' ),
|
320 |
'today' => esc_html__( 'Today', 'the-events-calendar' ),
|
321 |
'clear' => esc_html__( 'Clear', 'the-events-calendar' ),
|
322 |
-
|
323 |
-
|
324 |
}
|
325 |
|
326 |
/**
|
327 |
* Adds core hooks
|
328 |
*/
|
329 |
public function add_hooks() {
|
330 |
-
add_action( 'plugins_loaded',
|
331 |
-
add_action( 'plugins_loaded',
|
332 |
|
333 |
// Register for the assets to be available everywhere
|
334 |
-
add_action( 'tribe_common_loaded',
|
335 |
-
add_action( 'init',
|
336 |
-
add_action( 'plugins_loaded',
|
337 |
-
add_action( 'admin_enqueue_scripts',
|
338 |
|
339 |
-
add_filter( 'body_class',
|
340 |
-
add_action( 'wp_footer',
|
341 |
}
|
342 |
|
343 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
344 |
if ( ! is_array( $classes ) ) {
|
345 |
$classes = explode( ' ', $classes );
|
346 |
}
|
@@ -350,6 +358,13 @@ class Tribe__Main {
|
|
350 |
return array_filter( array_unique( $classes ) );
|
351 |
}
|
352 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
353 |
public function toggle_js_class() {
|
354 |
?>
|
355 |
<script>
|
@@ -369,7 +384,7 @@ class Tribe__Main {
|
|
369 |
*
|
370 |
* @since 4.5.7
|
371 |
*
|
372 |
-
* @return bool
|
373 |
*/
|
374 |
public function should_load_common_admin_css() {
|
375 |
$helper = Tribe__Admin__Helpers::instance();
|
@@ -389,13 +404,15 @@ class Tribe__Main {
|
|
389 |
|
390 |
/**
|
391 |
* A Helper method to load text domain
|
392 |
-
* First it tries to load the wp-content/languages translation then if falls to the
|
393 |
-
* try to load $dir language files
|
394 |
*
|
395 |
-
* @
|
396 |
-
* @
|
397 |
*
|
398 |
-
* @
|
|
|
|
|
|
|
399 |
*/
|
400 |
public function load_text_domain( $domain, $dir = false ) {
|
401 |
// Added safety just in case this runs twice...
|
@@ -407,13 +424,13 @@ class Tribe__Main {
|
|
407 |
$plugin_rel_path = WP_LANG_DIR . '/plugins/';
|
408 |
|
409 |
/**
|
410 |
-
* Allows users to filter the file location for a given text domain
|
411 |
* Be careful when using this filter, it will apply across the whole plugin suite.
|
412 |
*
|
413 |
-
* @param string $plugin_rel_path The relative path for the language files
|
414 |
-
* @param string $domain Which plugin domain we are trying to load
|
415 |
-
* @param string $locale Which Language we will load
|
416 |
-
* @param string|bool $dir If there was a custom directory passed on the method call
|
417 |
*/
|
418 |
$plugin_rel_path = apply_filters( 'tribe_load_text_domain', $plugin_rel_path, $domain, $locale, $dir );
|
419 |
|
@@ -427,11 +444,21 @@ class Tribe__Main {
|
|
427 |
}
|
428 |
|
429 |
/**
|
430 |
-
* Returns the post types registered by Tribe plugins
|
|
|
|
|
|
|
|
|
431 |
*/
|
432 |
public static function get_post_types() {
|
433 |
-
|
434 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
435 |
}
|
436 |
|
437 |
/**
|
@@ -442,7 +469,6 @@ class Tribe__Main {
|
|
442 |
* @param $insert_array
|
443 |
*
|
444 |
* @return array
|
445 |
-
*
|
446 |
*/
|
447 |
public static function array_insert_after_key( $key, $source_array, $insert_array ) {
|
448 |
if ( array_key_exists( $key, $source_array ) ) {
|
@@ -494,26 +520,6 @@ class Tribe__Main {
|
|
494 |
return $candidate_post instanceof WP_Post ? $candidate_post->ID : false;
|
495 |
}
|
496 |
|
497 |
-
/**
|
498 |
-
* Helper function to indicate whether the current execution context is AJAX
|
499 |
-
*
|
500 |
-
* This method exists to allow us test code that behaves differently depending on the execution
|
501 |
-
* context.
|
502 |
-
*
|
503 |
-
* @since 4.0
|
504 |
-
*
|
505 |
-
* @todo Add warning with '_deprecated_function'
|
506 |
-
*
|
507 |
-
* @param bool $doing_ajax An injectable status to override the `DOING_AJAX` check.
|
508 |
-
*
|
509 |
-
* @deprecated 4.7.12
|
510 |
-
*
|
511 |
-
* @return boolean
|
512 |
-
*/
|
513 |
-
public function doing_ajax( $doing_ajax = null ) {
|
514 |
-
return tribe( 'context' )->doing_ajax( $doing_ajax );
|
515 |
-
}
|
516 |
-
|
517 |
/**
|
518 |
* Adds a hook
|
519 |
*
|
@@ -548,22 +554,26 @@ class Tribe__Main {
|
|
548 |
|
549 |
/**
|
550 |
* Registers the slug bound to the implementations in the container.
|
|
|
|
|
|
|
|
|
551 |
*/
|
552 |
public function bind_implementations() {
|
553 |
tribe_singleton( 'settings.manager', 'Tribe__Settings_Manager' );
|
554 |
-
tribe_singleton( 'settings', 'Tribe__Settings',
|
555 |
-
tribe_singleton( 'ajax.dropdown', 'Tribe__Ajax__Dropdown',
|
556 |
tribe_singleton( 'assets', 'Tribe__Assets' );
|
557 |
-
tribe_singleton( 'assets.pipeline', 'Tribe__Assets_Pipeline',
|
558 |
-
tribe_singleton( 'asset.data', 'Tribe__Asset__Data',
|
559 |
tribe_singleton( 'admin.helpers', 'Tribe__Admin__Helpers' );
|
560 |
-
tribe_singleton( 'tracker', 'Tribe__Tracker',
|
561 |
-
tribe_singleton( 'chunker', 'Tribe__Meta__Chunker',
|
562 |
tribe_singleton( 'cache', 'Tribe__Cache', [ 'hook' ] );
|
563 |
tribe_singleton( 'languages.locations', 'Tribe__Languages__Locations' );
|
564 |
tribe_singleton( 'plugins.api', new Tribe__Plugins_API );
|
565 |
tribe_singleton( 'logger', 'Tribe__Log' );
|
566 |
-
tribe_singleton( 'cost-utils',
|
567 |
tribe_singleton( 'post-duplicate.strategy-factory', 'Tribe__Duplicate__Strategy_Factory' );
|
568 |
tribe_singleton( 'post-duplicate', 'Tribe__Duplicate__Post' );
|
569 |
tribe_singleton( 'context', 'Tribe__Context' );
|
@@ -578,8 +588,8 @@ class Tribe__Main {
|
|
578 |
|
579 |
tribe_singleton( Tribe__Admin__Help_Page::class, Tribe__Admin__Help_Page::class );
|
580 |
|
581 |
-
tribe_singleton( 'admin.notice.php.version', 'Tribe__Admin__Notice__Php_Version',
|
582 |
-
tribe_singleton( 'admin.notice.marketing', 'Tribe__Admin__Notice__Marketing',
|
583 |
|
584 |
tribe_register_provider( Tribe__Editor__Provider::class );
|
585 |
tribe_register_provider( Tribe__Service_Providers__Debug_Bar::class );
|
@@ -596,6 +606,8 @@ class Tribe__Main {
|
|
596 |
* Add a filter to determine_current_user during the setup of common library.
|
597 |
*
|
598 |
* @since 4.9.20
|
|
|
|
|
599 |
*/
|
600 |
public function promoter_connector() {
|
601 |
tribe_singleton( 'promoter.connector', 'Tribe__Promoter__Connector' );
|
@@ -614,6 +626,26 @@ class Tribe__Main {
|
|
614 |
************************/
|
615 |
// @codingStandardsIgnoreStart
|
616 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
617 |
/**
|
618 |
* Manages PUE license key notifications.
|
619 |
*
|
17 |
const OPTIONNAME = 'tribe_events_calendar_options';
|
18 |
const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
|
19 |
|
20 |
+
const VERSION = '4.11.2';
|
21 |
|
22 |
const FEED_URL = 'https://theeventscalendar.com/feed/';
|
23 |
|
55 |
/**
|
56 |
* Constructor for Common Class
|
57 |
*
|
|
|
58 |
* We are using a `public` constructor here for backwards compatibility.
|
59 |
*
|
60 |
* The way our code used to work we would have `new Tribe__Main()` called directly
|
87 |
|
88 |
$this->promoter_connector();
|
89 |
|
90 |
+
add_action( 'plugins_loaded', [ $this, 'plugins_loaded' ], 1 );
|
91 |
+
add_action( 'tribe_common_loaded', [ $this, 'tribe_common_app_store' ], 10 );
|
92 |
}
|
93 |
|
94 |
/**
|
129 |
|
130 |
$autoloader = Tribe__Autoloader::instance();
|
131 |
|
132 |
+
$prefixes = [ 'Tribe__' => dirname( __FILE__ ) ];
|
133 |
$autoloader->register_prefixes( $prefixes );
|
134 |
|
135 |
foreach ( glob( $this->plugin_path . 'src/deprecated/*.php' ) as $file ) {
|
225 |
// These ones will be enqueued on `admin_enqueue_scripts` if the conditional method on filter is met
|
226 |
tribe_assets(
|
227 |
$this,
|
228 |
+
[
|
229 |
+
[ 'tribe-buttonset', 'buttonset.js', [ 'jquery', 'underscore' ] ],
|
230 |
+
[ 'tribe-common-admin', 'tribe-common-admin.css', [ 'tribe-dependency-style', 'tribe-bumpdown-css', 'tribe-buttonset-style', 'tribe-select2-css' ] ],
|
231 |
+
[ 'tribe-validation', 'validation.js', [ 'jquery', 'underscore', 'tribe-common', 'tribe-utils-camelcase', 'tribe-tooltipster' ] ],
|
232 |
+
[ 'tribe-validation-style', 'validation.css', [ 'tribe-tooltipster-css' ] ],
|
233 |
+
[ 'tribe-dependency', 'dependency.js', [ 'jquery', 'underscore', 'tribe-common' ] ],
|
234 |
+
[ 'tribe-dependency-style', 'dependency.css', [ 'tribe-select2-css' ] ],
|
235 |
+
[ 'tribe-pue-notices', 'pue-notices.js', [ 'jquery' ] ],
|
236 |
+
[ 'tribe-datepicker', 'datepicker.css' ],
|
237 |
+
],
|
238 |
'admin_enqueue_scripts',
|
239 |
+
[
|
240 |
+
'conditionals' => [ $this, 'should_load_common_admin_css' ],
|
241 |
'priority' => 5,
|
242 |
+
]
|
243 |
);
|
244 |
|
245 |
tribe_asset(
|
278 |
public function load_localize_data() {
|
279 |
$datepicker_months = array_values( Tribe__Date_Utils::get_localized_months_full() );
|
280 |
|
281 |
+
tribe( 'asset.data' )->add( 'tribe_l10n_datatables', [
|
282 |
+
'aria' => [
|
283 |
'sort_ascending' => __( ': activate to sort column ascending', 'tribe-common' ),
|
284 |
'sort_descending' => __( ': activate to sort column descending', 'tribe-common' ),
|
285 |
+
],
|
286 |
'length_menu' => __( 'Show _MENU_ entries', 'tribe-common' ),
|
287 |
'empty_table' => __( 'No data available in table', 'tribe-common' ),
|
288 |
'info' => __( 'Showing _START_ to _END_ of _TOTAL_ entries', 'tribe-common' ),
|
293 |
'all_selected_text' => __( 'All items on this page were selected. ', 'tribe-common' ),
|
294 |
'select_all_link' => __( 'Select all pages', 'tribe-common' ),
|
295 |
'clear_selection' => __( 'Clear Selection.', 'tribe-common' ),
|
296 |
+
'pagination' => [
|
297 |
'all' => __( 'All', 'tribe-common' ),
|
298 |
'next' => __( 'Next', 'tribe-common' ),
|
299 |
'previous' => __( 'Previous', 'tribe-common' ),
|
300 |
+
],
|
301 |
+
'select' => [
|
302 |
+
'rows' => [
|
303 |
0 => '',
|
304 |
'_' => __( ': Selected %d rows', 'tribe-common' ),
|
305 |
1 => __( ': Selected 1 row', 'tribe-common' ),
|
306 |
+
],
|
307 |
+
],
|
308 |
+
'datepicker' => [
|
309 |
'dayNames' => Tribe__Date_Utils::get_localized_weekdays_full(),
|
310 |
'dayNamesShort' => Tribe__Date_Utils::get_localized_weekdays_short(),
|
311 |
'dayNamesMin' => Tribe__Date_Utils::get_localized_weekdays_initial(),
|
318 |
'closeText' => esc_html__( 'Done', 'the-events-calendar' ),
|
319 |
'today' => esc_html__( 'Today', 'the-events-calendar' ),
|
320 |
'clear' => esc_html__( 'Clear', 'the-events-calendar' ),
|
321 |
+
],
|
322 |
+
] );
|
323 |
}
|
324 |
|
325 |
/**
|
326 |
* Adds core hooks
|
327 |
*/
|
328 |
public function add_hooks() {
|
329 |
+
add_action( 'plugins_loaded', [ 'Tribe__App_Shop', 'instance' ] );
|
330 |
+
add_action( 'plugins_loaded', [ $this, 'tribe_plugins_loaded' ], PHP_INT_MAX );
|
331 |
|
332 |
// Register for the assets to be available everywhere
|
333 |
+
add_action( 'tribe_common_loaded', [ $this, 'load_assets' ], 1 );
|
334 |
+
add_action( 'init', [ $this, 'load_localize_data' ] );
|
335 |
+
add_action( 'plugins_loaded', [ 'Tribe__Admin__Notices', 'instance' ], 1 );
|
336 |
+
add_action( 'admin_enqueue_scripts', [ $this, 'store_admin_notices' ] );
|
337 |
|
338 |
+
add_filter( 'body_class', [ $this, 'add_js_class' ] );
|
339 |
+
add_action( 'wp_footer', [ $this, 'toggle_js_class' ] );
|
340 |
}
|
341 |
|
342 |
+
/**
|
343 |
+
* Adds `tribe-no-js` class to all pages when common is active.
|
344 |
+
*
|
345 |
+
* @since 4.3.4
|
346 |
+
*
|
347 |
+
* @param array|string $classes Previous classes on body.
|
348 |
+
*
|
349 |
+
* @return array All classes that will be printed on `<body>`.
|
350 |
+
*/
|
351 |
+
public function add_js_class( $classes = [] ) {
|
352 |
if ( ! is_array( $classes ) ) {
|
353 |
$classes = explode( ' ', $classes );
|
354 |
}
|
358 |
return array_filter( array_unique( $classes ) );
|
359 |
}
|
360 |
|
361 |
+
/**
|
362 |
+
* Removes `tribe-no-js` and replaces with `tribe-js` when the Javascript of the page is enabled.
|
363 |
+
*
|
364 |
+
* @since 4.3.4
|
365 |
+
*
|
366 |
+
* @return void This method only prints HTML to the screen no return.
|
367 |
+
*/
|
368 |
public function toggle_js_class() {
|
369 |
?>
|
370 |
<script>
|
384 |
*
|
385 |
* @since 4.5.7
|
386 |
*
|
387 |
+
* @return bool Whether we should load Common Admin CSS or not.
|
388 |
*/
|
389 |
public function should_load_common_admin_css() {
|
390 |
$helper = Tribe__Admin__Helpers::instance();
|
404 |
|
405 |
/**
|
406 |
* A Helper method to load text domain
|
407 |
+
* First it tries to load the wp-content/languages translation then if falls to the try to load $dir language files.
|
|
|
408 |
*
|
409 |
+
* @since 4.0.1 Introduced.
|
410 |
+
* @since 4.2 Included $domain and $dir params.
|
411 |
*
|
412 |
+
* @param string $domain The text domain that will be loaded.
|
413 |
+
* @param string|false $dir What directory should be used to try to load if the default doesnt work.
|
414 |
+
*
|
415 |
+
* @return bool If it was able to load the text domain.
|
416 |
*/
|
417 |
public function load_text_domain( $domain, $dir = false ) {
|
418 |
// Added safety just in case this runs twice...
|
424 |
$plugin_rel_path = WP_LANG_DIR . '/plugins/';
|
425 |
|
426 |
/**
|
427 |
+
* Allows users to filter the file location for a given text domain..
|
428 |
* Be careful when using this filter, it will apply across the whole plugin suite.
|
429 |
*
|
430 |
+
* @param string $plugin_rel_path The relative path for the language files.
|
431 |
+
* @param string $domain Which plugin domain we are trying to load.
|
432 |
+
* @param string $locale Which Language we will load.
|
433 |
+
* @param string|bool $dir If there was a custom directory passed on the method call.
|
434 |
*/
|
435 |
$plugin_rel_path = apply_filters( 'tribe_load_text_domain', $plugin_rel_path, $domain, $locale, $dir );
|
436 |
|
444 |
}
|
445 |
|
446 |
/**
|
447 |
+
* Returns the post types registered by Tribe plugins.
|
448 |
+
*
|
449 |
+
* @since 4.0.1 Introduced the method.
|
450 |
+
*
|
451 |
+
* @return array Slugs for all Post Types registered.
|
452 |
*/
|
453 |
public static function get_post_types() {
|
454 |
+
/**
|
455 |
+
* We default the post type array to empty in tribe-common. Plugins like TEC add to it.
|
456 |
+
*
|
457 |
+
* @since 4.0.1
|
458 |
+
*
|
459 |
+
* @param array Slugs for all Post Types registered.
|
460 |
+
*/
|
461 |
+
return apply_filters( 'tribe_post_types', [] );
|
462 |
}
|
463 |
|
464 |
/**
|
469 |
* @param $insert_array
|
470 |
*
|
471 |
* @return array
|
|
|
472 |
*/
|
473 |
public static function array_insert_after_key( $key, $source_array, $insert_array ) {
|
474 |
if ( array_key_exists( $key, $source_array ) ) {
|
520 |
return $candidate_post instanceof WP_Post ? $candidate_post->ID : false;
|
521 |
}
|
522 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
523 |
/**
|
524 |
* Adds a hook
|
525 |
*
|
554 |
|
555 |
/**
|
556 |
* Registers the slug bound to the implementations in the container.
|
557 |
+
*
|
558 |
+
* @since 4.4
|
559 |
+
*
|
560 |
+
* @return void Implementation of components loader doesnt return anything.
|
561 |
*/
|
562 |
public function bind_implementations() {
|
563 |
tribe_singleton( 'settings.manager', 'Tribe__Settings_Manager' );
|
564 |
+
tribe_singleton( 'settings', 'Tribe__Settings', [ 'hook' ] );
|
565 |
+
tribe_singleton( 'ajax.dropdown', 'Tribe__Ajax__Dropdown', [ 'hook' ] );
|
566 |
tribe_singleton( 'assets', 'Tribe__Assets' );
|
567 |
+
tribe_singleton( 'assets.pipeline', 'Tribe__Assets_Pipeline', [ 'hook' ] );
|
568 |
+
tribe_singleton( 'asset.data', 'Tribe__Asset__Data', [ 'hook' ] );
|
569 |
tribe_singleton( 'admin.helpers', 'Tribe__Admin__Helpers' );
|
570 |
+
tribe_singleton( 'tracker', 'Tribe__Tracker', [ 'hook' ] );
|
571 |
+
tribe_singleton( 'chunker', 'Tribe__Meta__Chunker', [ 'set_post_types', 'hook' ] );
|
572 |
tribe_singleton( 'cache', 'Tribe__Cache', [ 'hook' ] );
|
573 |
tribe_singleton( 'languages.locations', 'Tribe__Languages__Locations' );
|
574 |
tribe_singleton( 'plugins.api', new Tribe__Plugins_API );
|
575 |
tribe_singleton( 'logger', 'Tribe__Log' );
|
576 |
+
tribe_singleton( 'cost-utils', [ 'Tribe__Cost_Utils', 'instance' ] );
|
577 |
tribe_singleton( 'post-duplicate.strategy-factory', 'Tribe__Duplicate__Strategy_Factory' );
|
578 |
tribe_singleton( 'post-duplicate', 'Tribe__Duplicate__Post' );
|
579 |
tribe_singleton( 'context', 'Tribe__Context' );
|
588 |
|
589 |
tribe_singleton( Tribe__Admin__Help_Page::class, Tribe__Admin__Help_Page::class );
|
590 |
|
591 |
+
tribe_singleton( 'admin.notice.php.version', 'Tribe__Admin__Notice__Php_Version', [ 'hook' ] );
|
592 |
+
tribe_singleton( 'admin.notice.marketing', 'Tribe__Admin__Notice__Marketing', [ 'hook' ] );
|
593 |
|
594 |
tribe_register_provider( Tribe__Editor__Provider::class );
|
595 |
tribe_register_provider( Tribe__Service_Providers__Debug_Bar::class );
|
606 |
* Add a filter to determine_current_user during the setup of common library.
|
607 |
*
|
608 |
* @since 4.9.20
|
609 |
+
*
|
610 |
+
* @return void Internal method without any return.
|
611 |
*/
|
612 |
public function promoter_connector() {
|
613 |
tribe_singleton( 'promoter.connector', 'Tribe__Promoter__Connector' );
|
626 |
************************/
|
627 |
// @codingStandardsIgnoreStart
|
628 |
|
629 |
+
/**
|
630 |
+
* Helper function to indicate whether the current execution context is AJAX
|
631 |
+
*
|
632 |
+
* This method exists to allow us test code that behaves differently depending on the execution
|
633 |
+
* context.
|
634 |
+
*
|
635 |
+
* @since 4.0
|
636 |
+
*
|
637 |
+
* @todo Add warning with '_deprecated_function'
|
638 |
+
*
|
639 |
+
* @param bool $doing_ajax An injectable status to override the `DOING_AJAX` check.
|
640 |
+
*
|
641 |
+
* @deprecated 4.7.12
|
642 |
+
*
|
643 |
+
* @return boolean
|
644 |
+
*/
|
645 |
+
public function doing_ajax( $doing_ajax = null ) {
|
646 |
+
return tribe( 'context' )->doing_ajax( $doing_ajax );
|
647 |
+
}
|
648 |
+
|
649 |
/**
|
650 |
* Manages PUE license key notifications.
|
651 |
*
|
common/src/Tribe/Repository/Query_Filters.php
CHANGED
@@ -973,10 +973,10 @@ class Tribe__Repository__Query_Filters {
|
|
973 |
*
|
974 |
* @since 4.9.5
|
975 |
*
|
976 |
-
* @param string $orderby
|
977 |
-
* @param WP_Query $query
|
978 |
*
|
979 |
-
* @return string
|
980 |
*/
|
981 |
public function filter_posts_orderby( $orderby, WP_Query $query ) {
|
982 |
if ( $query !== $this->current_query ) {
|
973 |
*
|
974 |
* @since 4.9.5
|
975 |
*
|
976 |
+
* @param string $orderby The `ORDER BY` clause of the query being filtered.
|
977 |
+
* @param WP_Query $query The query object currently being filtered.
|
978 |
*
|
979 |
+
* @return string The filtered `ORDER BY` clause.
|
980 |
*/
|
981 |
public function filter_posts_orderby( $orderby, WP_Query $query ) {
|
982 |
if ( $query !== $this->current_query ) {
|
common/src/Tribe/Rewrite.php
CHANGED
@@ -189,6 +189,17 @@ class Tribe__Rewrite {
|
|
189 |
remove_action( 'shutdown', [ $this, 'dump_cache' ] );
|
190 |
}
|
191 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
/**
|
193 |
* Get the base slugs for the rewrite rules.
|
194 |
*
|
@@ -407,6 +418,9 @@ class Tribe__Rewrite {
|
|
407 |
$query = (string) parse_url( $url, PHP_URL_QUERY );
|
408 |
wp_parse_str( $query, $query_vars );
|
409 |
|
|
|
|
|
|
|
410 |
if ( isset( $query_vars['paged'] ) && 1 === (int) $query_vars['paged'] ) {
|
411 |
// Remove the `paged` query var if it's 1.
|
412 |
unset( $query_vars['paged'] );
|
189 |
remove_action( 'shutdown', [ $this, 'dump_cache' ] );
|
190 |
}
|
191 |
|
192 |
+
/**
|
193 |
+
* Determines if we have plain permalink.
|
194 |
+
*
|
195 |
+
* @since 4.11.2
|
196 |
+
*
|
197 |
+
* @return bool If we use plain permalink or not.
|
198 |
+
*/
|
199 |
+
public static function is_plain_permalink() {
|
200 |
+
return tribe_context()->is( 'plain_permalink' );
|
201 |
+
}
|
202 |
+
|
203 |
/**
|
204 |
* Get the base slugs for the rewrite rules.
|
205 |
*
|
418 |
$query = (string) parse_url( $url, PHP_URL_QUERY );
|
419 |
wp_parse_str( $query, $query_vars );
|
420 |
|
421 |
+
// Drop any query var that is not a scalar; it should not be handled.
|
422 |
+
$query_vars = array_filter( $query_vars, 'is_scalar' );
|
423 |
+
|
424 |
if ( isset( $query_vars['paged'] ) && 1 === (int) $query_vars['paged'] ) {
|
425 |
// Remove the `paged` query var if it's 1.
|
426 |
unset( $query_vars['paged'] );
|
common/src/Tribe/Service_Providers/Debug_Bar.php
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Hooks and manages the plugins Debug Bar integrations.
|
4 |
*
|
@@ -34,6 +35,7 @@ class Tribe__Service_Providers__Debug_Bar extends tad_DI52_ServiceProvider {
|
|
34 |
*/
|
35 |
$tribe_panels = apply_filters( 'tribe_debug_bar_panels', array(
|
36 |
new Tribe__Debug_Bar__Panels__Context(),
|
|
|
37 |
) );
|
38 |
|
39 |
if ( count( $tribe_panels ) > 0 ) {
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Hooks and manages the plugins Debug Bar integrations.
|
5 |
*
|
35 |
*/
|
36 |
$tribe_panels = apply_filters( 'tribe_debug_bar_panels', array(
|
37 |
new Tribe__Debug_Bar__Panels__Context(),
|
38 |
+
new Tribe__Debug_Bar__Panels__Json_Ld(),
|
39 |
) );
|
40 |
|
41 |
if ( count( $tribe_panels ) > 0 ) {
|
common/src/Tribe/Validate.php
CHANGED
@@ -239,7 +239,10 @@ if ( ! class_exists( 'Tribe__Validate' ) ) {
|
|
239 |
|
240 |
// esc_url_raw does the work of validating chars, but returns the checked string with a
|
241 |
// prepended URL protocol; so let's use strpos to match the values.
|
242 |
-
if (
|
|
|
|
|
|
|
243 |
$this->result->valid = true;
|
244 |
$this->value = sanitize_title( $this->value );
|
245 |
} else {
|
239 |
|
240 |
// esc_url_raw does the work of validating chars, but returns the checked string with a
|
241 |
// prepended URL protocol; so let's use strpos to match the values.
|
242 |
+
if (
|
243 |
+
! empty( $maybe_valid_value )
|
244 |
+
&& false !== strpos( $maybe_valid_value, $this->value )
|
245 |
+
) {
|
246 |
$this->result->valid = true;
|
247 |
$this->value = sanitize_title( $this->value );
|
248 |
} else {
|
common/src/functions/template-tags/general.php
CHANGED
@@ -765,4 +765,17 @@ if ( ! function_exists( 'tribe_context' ) ) {
|
|
765 |
|
766 |
return $context;
|
767 |
}
|
768 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
765 |
|
766 |
return $context;
|
767 |
}
|
768 |
+
}
|
769 |
+
|
770 |
+
if ( ! function_exists( 'tribe_cache' ) ) {
|
771 |
+
/**
|
772 |
+
* Returns the current Tribe Cache instance.
|
773 |
+
*
|
774 |
+
* @since 4.11.2
|
775 |
+
*
|
776 |
+
* @return Tribe__Cache The current cache instance.
|
777 |
+
*/
|
778 |
+
function tribe_cache() {
|
779 |
+
return tribe( 'cache' );
|
780 |
+
}
|
781 |
+
}
|
common/src/functions/template-tags/post.php
CHANGED
@@ -11,9 +11,9 @@
|
|
11 |
*
|
12 |
* @param string $more_link_text Optional. Content for when there is more text.
|
13 |
* @param bool $strip_teaser Optional. Strip teaser content before the more text. Default is false.
|
14 |
-
* @param WP_Post|object|int $
|
15 |
*
|
16 |
-
* @return
|
17 |
*/
|
18 |
function tribe_get_the_content( $more_link_text = null, $strip_teaser = false, $post_id = null ) {
|
19 |
global $post, $wp_version;
|
@@ -55,7 +55,7 @@ function tribe_get_the_content( $more_link_text = null, $strip_teaser = false, $
|
|
55 |
*
|
56 |
* @param string $more_link_text Optional. Content for when there is more text.
|
57 |
* @param bool $strip_teaser Optional. Strip teaser content before the more text. Default is false.
|
58 |
-
* @param WP_Post|object|int $
|
59 |
*
|
60 |
* @return void
|
61 |
*/
|
@@ -69,7 +69,7 @@ function tribe_the_content( $more_link_text = null, $strip_teaser = false, $post
|
|
69 |
* @since 4.11.0
|
70 |
*
|
71 |
* @param string|string[] $class Space-separated string or array of class names to add to the class list.
|
72 |
-
* @param int|WP_Post $
|
73 |
*
|
74 |
* @return string[] Array of class names.
|
75 |
*/
|
11 |
*
|
12 |
* @param string $more_link_text Optional. Content for when there is more text.
|
13 |
* @param bool $strip_teaser Optional. Strip teaser content before the more text. Default is false.
|
14 |
+
* @param WP_Post|object|int $post_id Optional. WP_Post instance or Post ID/object. Default is null.
|
15 |
*
|
16 |
+
* @return string
|
17 |
*/
|
18 |
function tribe_get_the_content( $more_link_text = null, $strip_teaser = false, $post_id = null ) {
|
19 |
global $post, $wp_version;
|
55 |
*
|
56 |
* @param string $more_link_text Optional. Content for when there is more text.
|
57 |
* @param bool $strip_teaser Optional. Strip teaser content before the more text. Default is false.
|
58 |
+
* @param WP_Post|object|int $post_id Optional. WP_Post instance or Post ID/object. Default is null.
|
59 |
*
|
60 |
* @return void
|
61 |
*/
|
69 |
* @since 4.11.0
|
70 |
*
|
71 |
* @param string|string[] $class Space-separated string or array of class names to add to the class list.
|
72 |
+
* @param int|WP_Post $post Optional. Post ID or post object.
|
73 |
*
|
74 |
* @return string[] Array of class names.
|
75 |
*/
|
common/src/functions/utils.php
CHANGED
@@ -156,7 +156,7 @@ if ( ! function_exists( 'tribe_get_global_query_object' ) ) {
|
|
156 |
*
|
157 |
* @since 4.7.8
|
158 |
*
|
159 |
-
* @return
|
160 |
*/
|
161 |
function tribe_get_global_query_object() {
|
162 |
global $wp_query;
|
156 |
*
|
157 |
* @since 4.7.8
|
158 |
*
|
159 |
+
* @return WP_Query The $wp_query, the $wp_the_query if $wp_query empty, null otherwise.
|
160 |
*/
|
161 |
function tribe_get_global_query_object() {
|
162 |
global $wp_query;
|
common/src/resources/css/tooltip.css
CHANGED
@@ -38,7 +38,7 @@
|
|
38 |
color: #333333;
|
39 |
font-size: 16px;
|
40 |
font-weight: 400;
|
41 |
-
max-
|
42 |
opacity: 0;
|
43 |
padding: 15px;
|
44 |
position: absolute;
|
38 |
color: #333333;
|
39 |
font-size: 16px;
|
40 |
font-weight: 400;
|
41 |
+
max-width: 100vw;
|
42 |
opacity: 0;
|
43 |
padding: 15px;
|
44 |
position: absolute;
|
common/src/resources/css/tooltip.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.tribe-tooltip{cursor:pointer;display:inline-block;margin:0;position:relative;text-align:left}.tribe-tooltip .dashicons-info{color:#a9a9a9;font-size:16px;line-height:1em;vertical-align:middle}.tribe-tooltip .down,.tribe-tooltip .left,.tribe-tooltip .right,.tribe-tooltip .up{background-color:#fff;box-shadow:0 0 3px 3px rgba(4,5,5,.05);box-sizing:border-box;color:#333;font-size:16px;font-weight:400;max-
|
1 |
+
.tribe-tooltip{cursor:pointer;display:inline-block;margin:0;position:relative;text-align:left}.tribe-tooltip .dashicons-info{color:#a9a9a9;font-size:16px;line-height:1em;vertical-align:middle}.tribe-tooltip .down,.tribe-tooltip .left,.tribe-tooltip .right,.tribe-tooltip .up{background-color:#fff;box-shadow:0 0 3px 3px rgba(4,5,5,.05);box-sizing:border-box;color:#333;font-size:16px;font-weight:400;max-width:100vw;opacity:0;padding:15px;position:absolute;transform:translate(-50%);transition:opacity .8s;visibility:hidden;width:250px;z-index:99999999}.tribe-tooltip .down i,.tribe-tooltip .left i,.tribe-tooltip .right i,.tribe-tooltip .up i{height:12px;overflow:hidden;position:absolute;width:24px}.tribe-tooltip .down i:after,.tribe-tooltip .left i:after,.tribe-tooltip .right i:after,.tribe-tooltip .up i:after{background-color:#fff;content:"";height:12px;position:absolute;width:24px}.tribe-tooltip.large .down,.tribe-tooltip.large .left,.tribe-tooltip.large .right,.tribe-tooltip.large .up{width:400px}.tribe-tooltip .tooltip-list{padding-left:10px}.tribe-tooltip .tooltip-list li{list-style-type:disc}.tribe-tooltip .down{left:50%;top:28px}.tribe-tooltip .down i{bottom:100%;left:50%;margin-left:-7px}.tribe-tooltip .down i:after{box-shadow:0 0 3px 3px rgba(4,5,5,.05);left:50%;top:50%;transform:translate(-50%,50%) rotate(45deg)}.tribe-tooltip.active .down,.tribe-tooltip.active .left,.tribe-tooltip.active .right,.tribe-tooltip.active .up{opacity:1;visibility:visible}@media screen and (max-width:480px){.tribe-tooltip.large .down,.tribe-tooltip.large .left,.tribe-tooltip.large .right,.tribe-tooltip.large .up{width:250px}}
|
common/src/resources/postcss/tooltip.pcss
CHANGED
@@ -26,7 +26,7 @@
|
|
26 |
color: #333333;
|
27 |
font-size: 16px;
|
28 |
font-weight: 400;
|
29 |
-
max-
|
30 |
opacity: 0;
|
31 |
padding: 15px;
|
32 |
position: absolute;
|
26 |
color: #333333;
|
27 |
font-size: 16px;
|
28 |
font-weight: 400;
|
29 |
+
max-width: 100vw;
|
30 |
opacity: 0;
|
31 |
padding: 15px;
|
32 |
position: absolute;
|
common/vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInit8a67bab8c782c5f0d365a853a40fa332::getLoader();
|
common/vendor/autoload_52.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInit26ee0b58158ad623117f113f40cb57bf::getLoader();
|
common/vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit3858bd8e0b5dee00c2a473396f508cb8
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
-
call_user_func(\Composer\Autoload\
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit8a67bab8c782c5f0d365a853a40fa332
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit8a67bab8c782c5f0d365a853a40fa332', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit8a67bab8c782c5f0d365a853a40fa332', '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\ComposerStaticInit8a67bab8c782c5f0d365a853a40fa332::getInitializer($loader));
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
common/vendor/composer/autoload_real_52.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real_52.php generated by xrstf/composer-php52
|
4 |
|
5 |
-
class
|
6 |
private static $loader;
|
7 |
|
8 |
public static function loadClassLoader($class) {
|
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit96c903a52d483446234a86f39f3c559c {
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new xrstf_Composer52_ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
25 |
|
26 |
$vendorDir = dirname(dirname(__FILE__));
|
27 |
$baseDir = dirname($vendorDir);
|
2 |
|
3 |
// autoload_real_52.php generated by xrstf/composer-php52
|
4 |
|
5 |
+
class ComposerAutoloaderInit26ee0b58158ad623117f113f40cb57bf {
|
6 |
private static $loader;
|
7 |
|
8 |
public static function loadClassLoader($class) {
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit26ee0b58158ad623117f113f40cb57bf', 'loadClassLoader'), true /*, true */);
|
23 |
self::$loader = $loader = new xrstf_Composer52_ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit26ee0b58158ad623117f113f40cb57bf', 'loadClassLoader'));
|
25 |
|
26 |
$vendorDir = dirname(dirname(__FILE__));
|
27 |
$baseDir = dirname($vendorDir);
|
common/vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $prefixLengthsPsr4 = array (
|
10 |
'T' =>
|
@@ -207,10 +207,10 @@ class ComposerStaticInit3858bd8e0b5dee00c2a473396f508cb8
|
|
207 |
public static function getInitializer(ClassLoader $loader)
|
208 |
{
|
209 |
return \Closure::bind(function () use ($loader) {
|
210 |
-
$loader->prefixLengthsPsr4 =
|
211 |
-
$loader->prefixDirsPsr4 =
|
212 |
-
$loader->prefixesPsr0 =
|
213 |
-
$loader->classMap =
|
214 |
|
215 |
}, null, ClassLoader::class);
|
216 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit8a67bab8c782c5f0d365a853a40fa332
|
8 |
{
|
9 |
public static $prefixLengthsPsr4 = array (
|
10 |
'T' =>
|
207 |
public static function getInitializer(ClassLoader $loader)
|
208 |
{
|
209 |
return \Closure::bind(function () use ($loader) {
|
210 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit8a67bab8c782c5f0d365a853a40fa332::$prefixLengthsPsr4;
|
211 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit8a67bab8c782c5f0d365a853a40fa332::$prefixDirsPsr4;
|
212 |
+
$loader->prefixesPsr0 = ComposerStaticInit8a67bab8c782c5f0d365a853a40fa332::$prefixesPsr0;
|
213 |
+
$loader->classMap = ComposerStaticInit8a67bab8c782c5f0d365a853a40fa332::$classMap;
|
214 |
|
215 |
}, null, ClassLoader::class);
|
216 |
}
|
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:
|
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%}
|
common/vendor/freemius/assets/css/admin/common.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)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media (max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}
|
2 |
-
.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 500px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}.fs-submenu-item.pricing.upgrade-mode{color:greenyellow}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
|
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)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}.fs-switch{position:relative;display:inline-block;color:#ccc;text-shadow:0 1px 1px rgba(255,255,255,0.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);background:#ececec;box-shadow:0 0 4px rgba(0,0,0,0.1),inset 0 1px 3px 0 rgba(0,0,0,0.1);cursor:pointer}.fs-switch span{display:inline-block;width:35px;text-transform:uppercase}.fs-switch .fs-toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.3);border-radius:4px;background:#fff;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ececec), color-stop(1, #fff));background-image:-webkit-linear-gradient(top, #ececec, #fff);background-image:-moz-linear-gradient(top, #ececec, #fff);background-image:-ms-linear-gradient(top, #ececec, #fff);background-image:-o-linear-gradient(top, #ececec, #fff);background-image:linear-gradient(top, bottom, #ececec, #fff);box-shadow:inset 0 1px 0 0 rgba(255,255,255,0.5);z-index:999;-moz-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-o-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-ms-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-webkit-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1)}.fs-switch.fs-off .fs-toggle{left:2%}.fs-switch.fs-on .fs-toggle{left:54%}.fs-switch.fs-round{top:8px;padding:4px 25px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round .fs-toggle{top:0;width:24px;height:24px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round.fs-off .fs-toggle{left:-1px}.fs-switch.fs-round.fs-on{background:#0085ba}.fs-switch.fs-round.fs-on .fs-toggle{left:25px}.fs-switch.fs-small.fs-round{padding:1px 19px}.fs-switch.fs-small.fs-round .fs-toggle{top:0;width:18px;height:18px;-moz-border-radius:18px;-webkit-border-radius:18px;border-radius:18px}.fs-switch.fs-small.fs-round.fs-on .fs-toggle{left:19px}.fs-switch-feedback{margin-left:10px}.fs-switch-feedback.success{color:#71ae00}.rtl .fs-switch-feedback{margin-left:0;margin-right:10px}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media (max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}
|
2 |
+
.fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 500px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}.fs-submenu-item.pricing.upgrade-mode{color:greenyellow}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain;margin-bottom:-2px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
|
common/vendor/freemius/assets/css/admin/connect.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.3);box-shadow:0px 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions .fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li
|
1 |
+
#fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.3);box-shadow:0px 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions .fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li .fs-switch{float:right}#fs_connect .fs-permissions ul li .fs-permission-description{margin-left:55px}#fs_connect .fs-permissions ul li .fs-permission-description span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{height:auto;margin:20px 20px 10px 20px}@media screen and (max-width: 479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-freemium-licensing{padding:8px;background:#777;color:#fff}#fs_connect .fs-freemium-licensing p{text-align:center;display:block;margin:0;padding:0}#fs_connect .fs-freemium-licensing a{color:#C2EEFF;text-decoration:underline}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:0.85em;padding:5px;background:rgba(0,0,0,0.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:rgba(0,0,0,0.8);color:#fff;font-family:'arial', serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-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);line-height:1.3em;font-weight:bold;text-align:left}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right}.fs-tooltip-trigger .fs-tooltip::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,0.8) transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}#fs_marketing_optin{display:none;margin-top:10px;border:1px solid #ccc;padding:10px;line-height:1.5em}#fs_marketing_optin .fs-message{display:block;margin-bottom:5px;font-size:1.05em;font-weight:600}#fs_marketing_optin.error{border:1px solid #d3135a;background:#fee}#fs_marketing_optin.error .fs-message{color:#d3135a}#fs_marketing_optin .fs-input-container{margin-top:5px}#fs_marketing_optin .fs-input-container label{margin-top:5px;display:block}#fs_marketing_optin .fs-input-container label input{float:left;margin:1px 0 0 0}#fs_marketing_optin .fs-input-container label:first-child{display:block;margin-bottom:2px}#fs_marketing_optin .fs-input-label{display:block;margin-left:20px}#fs_marketing_optin .fs-input-label .underlined{text-decoration:underline}.rtl #fs_marketing_optin .fs-input-container label input{float:right}.rtl #fs_marketing_optin .fs-input-label{margin-left:0;margin-right:20px}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li .fs-switch{float:left}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}#fs_theme_connect_wrapper{position:fixed;top:0;height:100%;width:100%;z-index:99990;background:rgba(0,0,0,0.75);text-align:center;overflow-y:auto}#fs_theme_connect_wrapper:before{content:"";display:inline-block;vertical-align:middle;height:100%}#fs_theme_connect_wrapper>button.close{color:white;cursor:pointer;height:40px;width:40px;position:absolute;right:0;border:0;background-color:transparent;top:32px}#fs_theme_connect_wrapper #fs_connect{top:0;text-align:left;display:inline-block;vertical-align:middle;margin-top:52px;margin-bottom:20px}#fs_theme_connect_wrapper #fs_connect .fs-terms{background:rgba(140,140,140,0.64)}#fs_theme_connect_wrapper #fs_connect .fs-terms,#fs_theme_connect_wrapper #fs_connect .fs-terms a{color:#c5c5c5}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}
|
common/vendor/freemius/assets/css/admin/debug.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.
|
1 |
+
.fs-switch-label{font-size:20px;line-height:31px;margin:0 5px}#fs_log_book table{font-family:Consolas,Monaco,monospace;font-size:12px}#fs_log_book table th{color:#ccc}#fs_log_book table tr{background:#232525}#fs_log_book table tr.alternate{background:#2b2b2b}#fs_log_book table tr td.fs-col--logger{color:#5a7435}#fs_log_book table tr td.fs-col--type{color:#ffc861}#fs_log_book table tr td.fs-col--function{color:#a7b7b1;font-weight:bold}#fs_log_book table tr td.fs-col--message,#fs_log_book table tr td.fs-col--message a{color:#9a73ac !important}#fs_log_book table tr td.fs-col--file{color:#d07922}#fs_log_book table tr td.fs-col--timestamp{color:#6596be}
|
common/vendor/freemius/assets/css/admin/dialog-boxes.css
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eeeeee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:0.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}
|
2 |
.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:0.3;-o-transform:0.3;-ms-transform:0.3;-webkit-transform:0.3;transform:0.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.1) !important}
|
1 |
+
.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .dashicons{vertical-align:middle}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eeeeee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:0.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-modal.fs-modal-user-change .fs-modal-body input#fs_other_email_address{width:100%}.fs-user-change-options-container table{width:100%;border-collapse:collapse}.fs-user-change-options-container table tr{display:block;margin-bottom:2px}.fs-user-change-options-container table .fs-email-address-container td{display:inline-block}.fs-user-change-options-container table .fs-email-address-container input[type="radio"]{margin-bottom:0;margin-top:0}.fs-user-change-options-container table .fs-other-email-address-container{width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div{display:table;width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div label,.fs-user-change-options-container table .fs-other-email-address-container>div>div{display:table-cell}.fs-user-change-options-container table .fs-other-email-address-container>div label{width:1%;padding-left:3px;padding-right:3px}.fs-user-change-options-container table .fs-other-email-address-container>div>div{width:auto}.fs-user-change-options-container table .fs-other-email-address-container>div>div input{width:100%}.fs-modal.fs-modal-developer-license-debug-mode .fs-modal-body input.fs-license-or-user-key{width:100%}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}
|
2 |
.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:0.3;-o-transform:0.3;-ms-transform:0.3;-webkit-transform:0.3;transform:0.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.1) !important}
|
common/vendor/freemius/assets/css/admin/plugins.css
ADDED
@@ -0,0 +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}.wp-list-table.plugins .plugin-title span.fs-tag{display:inline-block;margin-left:5px;line-height:10px}
|
common/vendor/freemius/assets/css/customizer.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:#000;color:#fff;font-family:'arial', serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-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);line-height:1.3em;font-weight:bold;text-align:left}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{text-align:right}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#000 transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{right:21px;left:auto}#fs_customizer_upsell .dashicons-editor-help:hover .fs-feature-desc{visibility:visible;opacity:1}#fs_customizer_upsell .button-primary{display:block;text-align:center;margin-top:10px}#fs_customizer_support{display:block !important}#fs_customizer_support .button{float:right}#fs_customizer_support .button-group{width:100%;display:block;margin-top:10px}#fs_customizer_support .button-group .button{float:none;width:50%;text-align:center}
|
1 |
+
#fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:#000;color:#fff;font-family:'arial', serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-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);line-height:1.3em;font-weight:bold;text-align:left}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{text-align:right}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#000 transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{right:21px;left:auto}#fs_customizer_upsell .dashicons-editor-help:hover .fs-feature-desc{visibility:visible;opacity:1}#fs_customizer_upsell .button-primary{display:block;text-align:center;margin-top:10px}#fs_customizer_support{display:block !important}#fs_customizer_support .button{float:right}#fs_customizer_support .button-group{width:100%;display:block;margin-top:10px}#fs_customizer_support .button-group .button{float:none;width:50%;text-align:center}#customize-theme-controls #accordion-section-freemius_upsell{border-top:1px solid #0085ba !important;border-bottom:1px solid #0085ba !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title{color:#fff;background-color:#0085ba;border-left:4px solid #0085ba;transition:.15s background-color ease-in-out, .15s border-color ease-in-out;outline:none;border-bottom:none !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:hover{background-color:#008ec2;border-left-color:#0073aa}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:after{color:#fff}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title{border-left:none;border-right:4px solid #0085ba}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title:hover{border-right-color:#0073aa}
|
common/vendor/freemius/assets/scss/_colors.scss
DELETED
@@ -1,79 +0,0 @@
|
|
1 |
-
$menu-hover-color: #333;
|
2 |
-
$darkest-color: #000;
|
3 |
-
$fms-live-color: #71ae00;
|
4 |
-
$fms-test-color: #f7941d;
|
5 |
-
$fms-link-color: #29abe1;
|
6 |
-
$fms-link-hover-color: darken(#29abe1, 10%);
|
7 |
-
$body-bkg: #111;
|
8 |
-
$special-color: #d3135a;
|
9 |
-
$body-color: #f1f1f1;
|
10 |
-
$fms-white: #f1f1f1;
|
11 |
-
$container-bkg: #222;
|
12 |
-
$container-bkg-odd: #262626;
|
13 |
-
$container-border-color: #333;
|
14 |
-
$table-head-bkg: #333;
|
15 |
-
$table-head-color: #999;
|
16 |
-
$info-color: #999;
|
17 |
-
$error-color: #ff0000;
|
18 |
-
|
19 |
-
$fs-logo-blue-color: #29abe1;
|
20 |
-
$fs-logo-green-color: #71ae00;
|
21 |
-
$fs-logo-magenta-color: #d3135a;
|
22 |
-
|
23 |
-
// WordPress colors.
|
24 |
-
$page-header-bkg: #333;
|
25 |
-
$page-header-color: $fms-white;
|
26 |
-
$text-dark-color: #333;
|
27 |
-
$text-light-color: #666;
|
28 |
-
$text-lightest-color: #999;
|
29 |
-
|
30 |
-
// Notices.
|
31 |
-
$wp-notice-success-color: #f7fff7;
|
32 |
-
$wp-notice-success-dark-color: #46b450;
|
33 |
-
$wp-notice-error-color: #ffeaea;
|
34 |
-
$wp-notice-error-dark-color: #dc3232;
|
35 |
-
$wp-notice-warn-color: #fff8e5;
|
36 |
-
$wp-notice-warn-dark-color: #ffb900;
|
37 |
-
$fs-notice-promotion-border-color: #00a0d2;
|
38 |
-
$fs-notice-promotion-bkg: #f2fcff;
|
39 |
-
|
40 |
-
// WP Buttons.
|
41 |
-
$button-primary-bkg: #6bc406;
|
42 |
-
$button-primary-color: $fms-white;
|
43 |
-
$button-secondary-bkg: #333;
|
44 |
-
$button-secondary-color: $fms-white;
|
45 |
-
$featured-color: #6bc406;
|
46 |
-
$wp-selected-color: #0074a3;
|
47 |
-
$wp-button-alert-border-color: #d2593c;
|
48 |
-
$wp-button-alert-border-top-color: #ec6544;
|
49 |
-
$wp-button-alert-shadow-color: #d2593c;
|
50 |
-
$wp-button-alert-focused-shadow1-color: #dd6041;
|
51 |
-
$wp-button-alert-focused-shadow2-color: #e4a796;
|
52 |
-
$wp-button-alert-background-color: #f56a48;
|
53 |
-
$wp-button-alert-hovered-background-color: #fd6d4a;
|
54 |
-
$wp-button-alert-active-background-color: #dd6041;
|
55 |
-
$wp-button-alert-disabled-color: #f5b3a1;
|
56 |
-
$wp-button-alert-disabled-background-color: #e76444;
|
57 |
-
$wp-button-alert-disabled-border-color: #d85e40;
|
58 |
-
|
59 |
-
$wordpress_color: #01749A;
|
60 |
-
$blogger_color: #ff8100;
|
61 |
-
$wix_color: #fac102;
|
62 |
-
$shopify_color: #80d100;
|
63 |
-
$addthis_color: #fe6d4e;
|
64 |
-
$tumblr_color: #34506b;
|
65 |
-
$zepo_color: #00baf2;
|
66 |
-
$jquery_color: #000919;
|
67 |
-
$javascript_color: #00baf2;
|
68 |
-
$squarespace_color: #000;
|
69 |
-
|
70 |
-
$blog_color: #ff6600;
|
71 |
-
$facebook_color: #3b5998;
|
72 |
-
$twitter_color: #4099ff;
|
73 |
-
$linkedin_color: #4875b4;
|
74 |
-
$youtube_color: #ff3333;
|
75 |
-
$gplus_color: #c63d2d;
|
76 |
-
|
77 |
-
// Tooltip
|
78 |
-
$tooltip-color: #fff;
|
79 |
-
$tooltip-bkg-color: rgba(0,0,0,0.8);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/_functions.scss
DELETED
File without changes
|
common/vendor/freemius/assets/scss/_load.scss
DELETED
@@ -1,4 +0,0 @@
|
|
1 |
-
@import 'mixins';
|
2 |
-
@import "vars";
|
3 |
-
@import "functions";
|
4 |
-
@import "colors";
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/_mixins.scss
DELETED
@@ -1,270 +0,0 @@
|
|
1 |
-
// ---- CSS3 SASS MIXINS ----
|
2 |
-
// https://github.com/madr/css3-sass-mixins
|
3 |
-
//
|
4 |
-
// Copyright (C) 2011 by Anders Ytterström
|
5 |
-
//
|
6 |
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
7 |
-
// of this software and associated documentation files (the "Software"), to deal
|
8 |
-
// in the Software without restriction, including without limitation the rights
|
9 |
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10 |
-
// copies of the Software, and to permit persons to whom the Software is
|
11 |
-
// furnished to do so, subject to the following conditions:
|
12 |
-
//
|
13 |
-
// The above copyright notice and this permission notice shall be included in
|
14 |
-
// all copies or substantial portions of the Software.
|
15 |
-
//
|
16 |
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17 |
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18 |
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19 |
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20 |
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21 |
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22 |
-
// THE SOFTWARE.
|
23 |
-
//
|
24 |
-
|
25 |
-
// ---- LEGACY IE SUPPORT USING FILTERS ----
|
26 |
-
// Should IE filters be used or not?
|
27 |
-
// PROS: gradients, drop shadows etc will be handled by css.
|
28 |
-
// CONS: will harm the site performance badly,
|
29 |
-
// especially on sites with heavy rendering and scripting.
|
30 |
-
$useIEFilters: 0;
|
31 |
-
// might be 0 or 1. disabled by default.
|
32 |
-
// ---- /LEGACY IE SUPPORT USING FILTERS ----
|
33 |
-
|
34 |
-
|
35 |
-
@mixin background-size ($value) {
|
36 |
-
-webkit-background-size: $value;
|
37 |
-
background-size: $value;
|
38 |
-
}
|
39 |
-
|
40 |
-
@mixin border-image ($path, $offsets, $repeats) {
|
41 |
-
-moz-border-image: $path $offsets $repeats;
|
42 |
-
-o-border-image: $path $offsets $repeats;
|
43 |
-
-webkit-border-image: $path $offsets $repeats;
|
44 |
-
border-image: $path $offsets $repeats;
|
45 |
-
}
|
46 |
-
|
47 |
-
@mixin border-radius ($values...) {
|
48 |
-
-moz-border-radius: $values;
|
49 |
-
-webkit-border-radius: $values;
|
50 |
-
border-radius: $values;
|
51 |
-
/*-moz-background-clip: padding;
|
52 |
-
-webkit-background-clip: padding-box;
|
53 |
-
background-clip: padding-box;*/
|
54 |
-
}
|
55 |
-
|
56 |
-
@mixin box-shadow ($values...) {
|
57 |
-
-moz-box-shadow: $values;
|
58 |
-
-webkit-box-shadow: $values;
|
59 |
-
box-shadow: $values;
|
60 |
-
}
|
61 |
-
|
62 |
-
//@mixin box-shadow ($x, $y, $offset, $hex, $ie: $useIEFilters, $inset: null, $spread:null) {
|
63 |
-
// -moz-box-shadow: $x $y $offset $spread $hex $inset;
|
64 |
-
// -webkit-box-shadow: $x $y $offset $spread $hex $inset;
|
65 |
-
// box-shadow: $x $y $offset $spread $hex $inset;
|
66 |
-
//
|
67 |
-
// @if $ie == 1 {
|
68 |
-
// $iecolor: '#' + red($hex) + green($hex) + blue($hex);
|
69 |
-
// filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=#{$x}, OffY=#{$y}, Color='#{$iecolor}');
|
70 |
-
// -ms-filter: quote(progid:DXImageTransform.Microsoft.dropshadow(OffX=#{$x}, OffY=#{$y}, Color='#{$iecolor}'));
|
71 |
-
// }
|
72 |
-
//}
|
73 |
-
|
74 |
-
@mixin box-sizing($value) {
|
75 |
-
-moz-box-sizing: $value;
|
76 |
-
-webkit-box-sizing: $value;
|
77 |
-
box-sizing: $value;
|
78 |
-
}
|
79 |
-
|
80 |
-
// requires sass 3.2
|
81 |
-
@mixin keyframes($name){
|
82 |
-
@-moz-keyframes #{$name} { @content; }
|
83 |
-
@-ms-keyframes #{$name} { @content; }
|
84 |
-
@-o-keyframes #{$name} { @content; }
|
85 |
-
@-webkit-keyframes #{$name} { @content; }
|
86 |
-
@keyframes #{$name} { @content; }
|
87 |
-
}
|
88 |
-
|
89 |
-
@mixin linear-gradient($from, $to, $ie: $useIEFilters) {
|
90 |
-
@if $ie != 1 { background-color: $to; }
|
91 |
-
|
92 |
-
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, $from),color-stop(1, $to));
|
93 |
-
background-image: -webkit-linear-gradient(top, $from, $to);
|
94 |
-
background-image: -moz-linear-gradient(top, $from, $to);
|
95 |
-
background-image: -ms-linear-gradient(top, $from, $to);
|
96 |
-
background-image: -o-linear-gradient(top, $from, $to);
|
97 |
-
background-image: linear-gradient(top, bottom, $from, $to);
|
98 |
-
|
99 |
-
@if $ie == 1 {
|
100 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$from}', endColorstr='#{$to}');
|
101 |
-
}
|
102 |
-
}
|
103 |
-
|
104 |
-
@mixin horizontal-gradient($startColor: #555, $endColor: #333, $ie: $useIEFilters) {
|
105 |
-
@if $ie != 1 { background-color: $endColor; }
|
106 |
-
|
107 |
-
background-color: $endColor;
|
108 |
-
background-image: -webkit-gradient(linear, 0 0, 100% 0, from($startColor), to($endColor)); // Safari 4+, Chrome 2+
|
109 |
-
background-image: -webkit-linear-gradient(left, $startColor, $endColor); // Safari 5.1+, Chrome 10+
|
110 |
-
background-image: -moz-linear-gradient(left, $startColor, $endColor); // FF 3.6+
|
111 |
-
background-image: -o-linear-gradient(left, $startColor, $endColor); // Opera 11.10
|
112 |
-
background-image: linear-gradient(to right, $startColor, $endColor); // Standard, IE10
|
113 |
-
background-repeat: repeat-x;
|
114 |
-
@if $ie == 1 {
|
115 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$startColor}', endColorstr='#{$endColor}', GradientType=1);
|
116 |
-
}
|
117 |
-
}
|
118 |
-
|
119 |
-
@mixin radial-gradient($from, $to, $ie: $useIEFilters) {
|
120 |
-
@if $ie != 1 { background-color: $to; }
|
121 |
-
|
122 |
-
background: -moz-radial-gradient(center, circle cover, $from 0%, $to 100%);
|
123 |
-
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, $from), color-stop(100%, $to));
|
124 |
-
background: -webkit-radial-gradient(center, circle cover, $from 0%, $to 100%);
|
125 |
-
background: -o-radial-gradient(center, circle cover, $from 0%, $to 100%);
|
126 |
-
background: -ms-radial-gradient(center, circle cover, $from 0%, $to 100%);
|
127 |
-
background: radial-gradient(center, circle cover, $from 0%, $to 100%);
|
128 |
-
background-color: $from;
|
129 |
-
|
130 |
-
@if $ie == 1 {
|
131 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$from}', endColorstr='#{$to}', GradientType=1); /* IE6-9 fallback on horizontal gradient */
|
132 |
-
}
|
133 |
-
}
|
134 |
-
|
135 |
-
@mixin perspective($perspective) {
|
136 |
-
-moz-perspective: $perspective;
|
137 |
-
-ms-perspective: $perspective;
|
138 |
-
-webkit-perspective: $perspective;
|
139 |
-
perspective: $perspective;
|
140 |
-
-moz-transform-style: preserve-3d;
|
141 |
-
-ms-transform-style: preserve-3d;
|
142 |
-
-webkit-transform-style: preserve-3d;
|
143 |
-
transform-style: preserve-3d;
|
144 |
-
}
|
145 |
-
|
146 |
-
@mixin transform ($transforms) {
|
147 |
-
-moz-transform: $transforms;
|
148 |
-
-o-transform: $transforms;
|
149 |
-
-ms-transform: $transforms;
|
150 |
-
-webkit-transform: $transforms;
|
151 |
-
transform: $transforms;
|
152 |
-
}
|
153 |
-
|
154 |
-
@mixin matrix ($a, $b, $c, $d, $e, $f) {
|
155 |
-
-moz-transform: matrix($a, $b, $c, $d, #{$e}px, #{$f}px);
|
156 |
-
-o-transform: matrix($a, $b, $c, $d, $e, $f);
|
157 |
-
-ms-transform: matrix($a, $b, $c, $d, $e, $f);
|
158 |
-
-webkit-transform: matrix($a, $b, $c, $d, $e, $f);
|
159 |
-
transform: matrix($a, $b, $c, $d, $e, $f);
|
160 |
-
}
|
161 |
-
|
162 |
-
@mixin rotate ($deg) {
|
163 |
-
@include transform(rotate(#{$deg}deg));
|
164 |
-
}
|
165 |
-
|
166 |
-
@mixin scale ($size) {
|
167 |
-
@include transform(scale(#{$size}));
|
168 |
-
}
|
169 |
-
|
170 |
-
@mixin translate ($x, $y) {
|
171 |
-
@include transform(translate($x, $y));
|
172 |
-
}
|
173 |
-
|
174 |
-
@mixin transition ($value...) {
|
175 |
-
-moz-transition: $value;
|
176 |
-
-o-transition: $value;
|
177 |
-
-ms-transition: $value;
|
178 |
-
-webkit-transition: $value;
|
179 |
-
transition: $value;
|
180 |
-
}
|
181 |
-
|
182 |
-
@mixin animation($str) {
|
183 |
-
-webkit-animation: #{$str};
|
184 |
-
-moz-animation: #{$str};
|
185 |
-
-ms-animation: #{$str};
|
186 |
-
-o-animation: #{$str};
|
187 |
-
animation: #{$str};
|
188 |
-
}
|
189 |
-
|
190 |
-
@mixin animation-name($str) {
|
191 |
-
-webkit-animation-name: #{$str};
|
192 |
-
-moz-animation-name: #{$str};
|
193 |
-
-ms-animation-name: #{$str};
|
194 |
-
-o-animation-name: #{$str};
|
195 |
-
animation-name: #{$str};
|
196 |
-
}
|
197 |
-
|
198 |
-
@mixin animation-duration($str) {
|
199 |
-
-webkit-animation-duration: #{$str};
|
200 |
-
-moz-animation-duration: #{$str};
|
201 |
-
-ms-animation-duration: #{$str};
|
202 |
-
-o-animation-duration: #{$str};
|
203 |
-
animation-duration: #{$str};
|
204 |
-
}
|
205 |
-
|
206 |
-
@mixin animation-direction($str) {
|
207 |
-
-webkit-animation-direction: #{$str};
|
208 |
-
-moz-animation-direction: #{$str};
|
209 |
-
-ms-animation-direction: #{$str};
|
210 |
-
-o-animation-direction: #{$str};
|
211 |
-
animation-direction: #{$str};
|
212 |
-
}
|
213 |
-
|
214 |
-
@mixin animation-delay($str) {
|
215 |
-
animation-delay:#{$str};
|
216 |
-
-o-animation-delay:#{$str};
|
217 |
-
-ms-animation-delay:#{$str};
|
218 |
-
-webkit-animation-delay:#{$str};
|
219 |
-
-moz-animation-delay:#{$str};
|
220 |
-
}
|
221 |
-
|
222 |
-
@mixin animation-iteration-count($str) {
|
223 |
-
animation-iteration-count:#{$str};
|
224 |
-
-o-animation-iteration-count:#{$str};
|
225 |
-
-ms-animation-iteration-count:#{$str};
|
226 |
-
-webkit-animation-iteration-count:#{$str};
|
227 |
-
-moz-animation-iteration-count:#{$str};
|
228 |
-
}
|
229 |
-
|
230 |
-
@mixin animation-timing-function($str) {
|
231 |
-
-webkit-animation-timing-function: #{$str};
|
232 |
-
-moz-animation-timing-function: #{$str};
|
233 |
-
-ms-animation-timing-function: #{$str};
|
234 |
-
-o-animation-timing-function: #{$str};
|
235 |
-
animation-timing-function: #{$str};
|
236 |
-
}
|
237 |
-
|
238 |
-
// ==== /CSS3 SASS MIXINS ====
|
239 |
-
|
240 |
-
@mixin opacity($opacity) {
|
241 |
-
opacity: $opacity;
|
242 |
-
$opacity-ie: $opacity * 100;
|
243 |
-
filter: alpha(opacity=$opacity-ie); //IE8
|
244 |
-
}
|
245 |
-
|
246 |
-
@mixin size($width, $height: $width)
|
247 |
-
{
|
248 |
-
width: $width;
|
249 |
-
height: $height;
|
250 |
-
}
|
251 |
-
|
252 |
-
@mixin clearfix
|
253 |
-
{
|
254 |
-
&:after {
|
255 |
-
content: "";
|
256 |
-
display: table;
|
257 |
-
clear: both;
|
258 |
-
}
|
259 |
-
}
|
260 |
-
|
261 |
-
// Placeholder text
|
262 |
-
@mixin placeholder($color: $input-color-placeholder) {
|
263 |
-
// Firefox
|
264 |
-
&::-moz-placeholder {
|
265 |
-
color: $color;
|
266 |
-
opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
|
267 |
-
}
|
268 |
-
&:-ms-input-placeholder { color: $color; } // Internet Explorer 10+
|
269 |
-
&::-webkit-input-placeholder { color: $color; } // Safari and Chrome
|
270 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/_start.scss
DELETED
@@ -1,4 +0,0 @@
|
|
1 |
-
@import "vars";
|
2 |
-
@import "colors";
|
3 |
-
@import "mixins";
|
4 |
-
@import "functions";
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/_vars.scss
DELETED
@@ -1,6 +0,0 @@
|
|
1 |
-
$is_production: true;
|
2 |
-
|
3 |
-
$img_common: if($is_production == true, '//img.freemius.com', 'http://img.freemius:8080');
|
4 |
-
|
5 |
-
$layout_width: 960px;
|
6 |
-
$admin_mobile_max_width: 782px;
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_ajax-loader.scss
DELETED
@@ -1,49 +0,0 @@
|
|
1 |
-
$color: $wp-selected-color;
|
2 |
-
$bkg-color: #fff;
|
3 |
-
$size: 20;
|
4 |
-
|
5 |
-
.fs-ajax-loader
|
6 |
-
{
|
7 |
-
position: relative;
|
8 |
-
width: #{8*$size + 10}px;
|
9 |
-
height: #{$size}px;
|
10 |
-
margin: auto;
|
11 |
-
|
12 |
-
.fs-ajax-loader-bar
|
13 |
-
{
|
14 |
-
position: absolute;
|
15 |
-
top: 0;
|
16 |
-
background-color: $color;
|
17 |
-
width: #{$size}px;
|
18 |
-
height: #{$size}px;
|
19 |
-
@include animation-name(bounce_ajaxLoader);
|
20 |
-
@include animation-duration(1.5s);
|
21 |
-
@include animation-iteration-count(infinite);
|
22 |
-
@include animation-direction(normal);
|
23 |
-
@include transform(.3);
|
24 |
-
}
|
25 |
-
|
26 |
-
@for $i from 0 through 7
|
27 |
-
{
|
28 |
-
.fs-ajax-loader-bar-#{$i + 1}
|
29 |
-
{
|
30 |
-
left: #{$i*($size - 1)}px;
|
31 |
-
@include animation-delay(#{0.6 + $i*0.15}s);
|
32 |
-
}
|
33 |
-
}
|
34 |
-
}
|
35 |
-
|
36 |
-
@include keyframes(bounce_ajaxLoader)
|
37 |
-
{
|
38 |
-
0%
|
39 |
-
{
|
40 |
-
@include transform(scale(1));
|
41 |
-
background-color: $color;
|
42 |
-
}
|
43 |
-
|
44 |
-
100%
|
45 |
-
{
|
46 |
-
@include transform(scale(.3));
|
47 |
-
background-color: $bkg-color;
|
48 |
-
}
|
49 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_auto-install.scss
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
.fs-modal-auto-install
|
2 |
-
{
|
3 |
-
$max-width: 300px;
|
4 |
-
|
5 |
-
#request-filesystem-credentials-form
|
6 |
-
{
|
7 |
-
h2,
|
8 |
-
.request-filesystem-credentials-action-buttons
|
9 |
-
{
|
10 |
-
display: none;
|
11 |
-
}
|
12 |
-
|
13 |
-
input[type=password],
|
14 |
-
input[type=email],
|
15 |
-
input[type=text]
|
16 |
-
{
|
17 |
-
-webkit-appearance: none;
|
18 |
-
padding: 10px 10px 5px 10px;
|
19 |
-
width: $max-width;
|
20 |
-
max-width: 100%;
|
21 |
-
}
|
22 |
-
|
23 |
-
> div,
|
24 |
-
label,
|
25 |
-
fieldset
|
26 |
-
{
|
27 |
-
width: $max-width;
|
28 |
-
max-width: 100%;
|
29 |
-
margin: 0 auto;
|
30 |
-
display: block;
|
31 |
-
}
|
32 |
-
}
|
33 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_badge.scss
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
.fs-badge
|
2 |
-
{
|
3 |
-
position: absolute;
|
4 |
-
top: 10px;
|
5 |
-
right: 0;
|
6 |
-
background: $fs-logo-green-color;
|
7 |
-
color: white;
|
8 |
-
text-transform: uppercase;
|
9 |
-
padding: 5px 10px;
|
10 |
-
@include border-radius(3px 0 0 3px);
|
11 |
-
font-weight: bold;
|
12 |
-
border-right: 0;
|
13 |
-
@include box-shadow(0 2px 1px -1px rgba(0, 0, 0, .3));
|
14 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_buttons.scss
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
.button-primary.warn {
|
2 |
-
box-shadow: 0 1px 0 $wp-button-alert-shadow-color;
|
3 |
-
text-shadow: 0 -1px 1px $wp-button-alert-shadow-color, 1px 0 1px $wp-button-alert-shadow-color, 0 1px 1px $wp-button-alert-shadow-color, -1px 0 1px $wp-button-alert-shadow-color;
|
4 |
-
background: $wp-button-alert-background-color;
|
5 |
-
border-color: $wp-button-alert-border-top-color $wp-button-alert-border-color $wp-button-alert-border-color;
|
6 |
-
|
7 |
-
&:hover {
|
8 |
-
background: $wp-button-alert-hovered-background-color;
|
9 |
-
border-color: $wp-button-alert-border-color;
|
10 |
-
}
|
11 |
-
|
12 |
-
&:focus {
|
13 |
-
box-shadow: 0 1px 0 $wp-button-alert-focused-shadow1-color, 0 0 2px 1px $wp-button-alert-focused-shadow2-color;
|
14 |
-
}
|
15 |
-
|
16 |
-
&:active {
|
17 |
-
background: $wp-button-alert-active-background-color;
|
18 |
-
border-color: $wp-button-alert-border-color;
|
19 |
-
box-shadow: inset 0 2px 0 $wp-button-alert-shadow-color;
|
20 |
-
}
|
21 |
-
|
22 |
-
&.disabled {
|
23 |
-
color: $wp-button-alert-disabled-color !important;
|
24 |
-
background: $wp-button-alert-disabled-background-color !important;
|
25 |
-
border-color: $wp-button-alert-disabled-border-color !important;
|
26 |
-
text-shadow: 0 -1px 0 rgba(0,0,0,.1) !important;
|
27 |
-
}
|
28 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_deactivation-feedback.scss
DELETED
@@ -1,55 +0,0 @@
|
|
1 |
-
@import "../colors";
|
2 |
-
|
3 |
-
.fs-modal.fs-modal-deactivation-feedback {
|
4 |
-
.reason-input, .internal-message {
|
5 |
-
margin: 3px 0 3px 22px;
|
6 |
-
|
7 |
-
input, textarea {
|
8 |
-
width: 100%;
|
9 |
-
}
|
10 |
-
}
|
11 |
-
|
12 |
-
li.reason {
|
13 |
-
&.has-internal-message .internal-message {
|
14 |
-
border: 1px solid lighten($darkest-color, 80%);
|
15 |
-
padding: 7px;
|
16 |
-
display: none;
|
17 |
-
}
|
18 |
-
|
19 |
-
@media (max-width: 650px) {
|
20 |
-
li.reason {
|
21 |
-
margin-bottom: 10px;
|
22 |
-
|
23 |
-
.reason-input, .internal-message {
|
24 |
-
margin-left: 29px;
|
25 |
-
}
|
26 |
-
|
27 |
-
label {
|
28 |
-
display: table;
|
29 |
-
|
30 |
-
> span {
|
31 |
-
display: table-cell;
|
32 |
-
font-size: 1.3em;
|
33 |
-
}
|
34 |
-
}
|
35 |
-
}
|
36 |
-
}
|
37 |
-
}
|
38 |
-
|
39 |
-
.anonymous-feedback-label {
|
40 |
-
float: left;
|
41 |
-
}
|
42 |
-
|
43 |
-
.fs-modal-panel {
|
44 |
-
margin-top: 0 !important;
|
45 |
-
|
46 |
-
h3 {
|
47 |
-
margin-top: 0;
|
48 |
-
line-height: 1.5em;
|
49 |
-
}
|
50 |
-
}
|
51 |
-
}
|
52 |
-
|
53 |
-
#the-list .deactivate > .fs-slug {
|
54 |
-
display: none;
|
55 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_gdpr-consent.scss
DELETED
@@ -1,81 +0,0 @@
|
|
1 |
-
#fs_marketing_optin
|
2 |
-
{
|
3 |
-
display: none;
|
4 |
-
margin-top: 10px;
|
5 |
-
border: 1px solid #ccc;
|
6 |
-
padding: 10px;
|
7 |
-
line-height: 1.5em;
|
8 |
-
|
9 |
-
.fs-message
|
10 |
-
{
|
11 |
-
display: block;
|
12 |
-
margin-bottom: 5px;
|
13 |
-
font-size: 1.05em;
|
14 |
-
font-weight: 600;
|
15 |
-
}
|
16 |
-
|
17 |
-
&.error
|
18 |
-
{
|
19 |
-
border: 1px solid $fs-logo-magenta-color;
|
20 |
-
background: #fee;
|
21 |
-
|
22 |
-
.fs-message
|
23 |
-
{
|
24 |
-
color: $fs-logo-magenta-color;
|
25 |
-
}
|
26 |
-
}
|
27 |
-
|
28 |
-
.fs-input-container
|
29 |
-
{
|
30 |
-
margin-top: 5px;
|
31 |
-
|
32 |
-
label
|
33 |
-
{
|
34 |
-
margin-top: 5px;
|
35 |
-
display: block;
|
36 |
-
|
37 |
-
input
|
38 |
-
{
|
39 |
-
float: left;
|
40 |
-
margin: 1px 0 0 0;
|
41 |
-
}
|
42 |
-
|
43 |
-
&:first-child
|
44 |
-
{
|
45 |
-
display: block;
|
46 |
-
margin-bottom: 2px;
|
47 |
-
}
|
48 |
-
}
|
49 |
-
}
|
50 |
-
|
51 |
-
.fs-input-label
|
52 |
-
{
|
53 |
-
display: block;
|
54 |
-
margin-left: 20px;
|
55 |
-
|
56 |
-
.underlined
|
57 |
-
{
|
58 |
-
text-decoration: underline;
|
59 |
-
}
|
60 |
-
}
|
61 |
-
}
|
62 |
-
|
63 |
-
.rtl
|
64 |
-
{
|
65 |
-
#fs_marketing_optin
|
66 |
-
{
|
67 |
-
.fs-input-container
|
68 |
-
{
|
69 |
-
label input
|
70 |
-
{
|
71 |
-
float: right;
|
72 |
-
}
|
73 |
-
}
|
74 |
-
|
75 |
-
.fs-input-label
|
76 |
-
{
|
77 |
-
margin-left: 0;
|
78 |
-
margin-right: 20px;
|
79 |
-
}
|
80 |
-
}
|
81 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_license-activation.scss
DELETED
@@ -1,47 +0,0 @@
|
|
1 |
-
.fs-modal.fs-modal-license-activation {
|
2 |
-
.fs-modal-body {
|
3 |
-
input.fs-license-key {
|
4 |
-
width: 100%;
|
5 |
-
}
|
6 |
-
}
|
7 |
-
}
|
8 |
-
|
9 |
-
.fs-license-options-container {
|
10 |
-
table {
|
11 |
-
&, select, .fs-available-license-key {
|
12 |
-
width: 100%;
|
13 |
-
}
|
14 |
-
|
15 |
-
td:first-child {
|
16 |
-
width: 1%;
|
17 |
-
}
|
18 |
-
|
19 |
-
.fs-other-license-key-container {
|
20 |
-
label {
|
21 |
-
position: relative;
|
22 |
-
top: 6px;
|
23 |
-
float: left;
|
24 |
-
margin-right: 5px;
|
25 |
-
}
|
26 |
-
|
27 |
-
div {
|
28 |
-
overflow: hidden;
|
29 |
-
width: auto;
|
30 |
-
height: 30px;
|
31 |
-
display: block;
|
32 |
-
top: 2px;
|
33 |
-
position: relative;
|
34 |
-
|
35 |
-
input {
|
36 |
-
margin: 0;
|
37 |
-
}
|
38 |
-
}
|
39 |
-
}
|
40 |
-
}
|
41 |
-
}
|
42 |
-
|
43 |
-
.fs-sites-list-container {
|
44 |
-
td {
|
45 |
-
cursor: pointer;
|
46 |
-
}
|
47 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_license-key-resend.scss
DELETED
@@ -1,68 +0,0 @@
|
|
1 |
-
.fs-modal.fs-modal-license-key-resend
|
2 |
-
{
|
3 |
-
.email-address-container
|
4 |
-
{
|
5 |
-
overflow: hidden;
|
6 |
-
padding-right: 2px;
|
7 |
-
}
|
8 |
-
|
9 |
-
&.fs-freemium
|
10 |
-
{
|
11 |
-
input.email-address
|
12 |
-
{
|
13 |
-
width: 300px;
|
14 |
-
}
|
15 |
-
|
16 |
-
label
|
17 |
-
{
|
18 |
-
display: block;
|
19 |
-
margin-bottom: 10px;
|
20 |
-
}
|
21 |
-
}
|
22 |
-
|
23 |
-
&.fs-premium
|
24 |
-
{
|
25 |
-
input.email-address
|
26 |
-
{
|
27 |
-
width: 100%;
|
28 |
-
}
|
29 |
-
|
30 |
-
.button-container
|
31 |
-
{
|
32 |
-
float: right;
|
33 |
-
margin-left: 7px;
|
34 |
-
|
35 |
-
@media (max-width: 650px) {
|
36 |
-
margin-top: 2px;
|
37 |
-
}
|
38 |
-
}
|
39 |
-
}
|
40 |
-
}
|
41 |
-
|
42 |
-
.rtl
|
43 |
-
{
|
44 |
-
.fs-modal.fs-modal-license-key-resend
|
45 |
-
{
|
46 |
-
.fs-modal-body
|
47 |
-
{
|
48 |
-
.input-container > .email-address-container
|
49 |
-
{
|
50 |
-
padding-left: 2px;
|
51 |
-
padding-right: 0;
|
52 |
-
}
|
53 |
-
|
54 |
-
.button-container
|
55 |
-
{
|
56 |
-
float: left;
|
57 |
-
margin-right: 7px;
|
58 |
-
margin-left: 0;
|
59 |
-
}
|
60 |
-
}
|
61 |
-
}
|
62 |
-
}
|
63 |
-
|
64 |
-
a.show-license-resend-modal
|
65 |
-
{
|
66 |
-
margin-top: 4px;
|
67 |
-
display: inline-block;
|
68 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_modal-common.scss
DELETED
@@ -1,194 +0,0 @@
|
|
1 |
-
@import "../colors";
|
2 |
-
@import "../mixins";
|
3 |
-
|
4 |
-
.fs-modal {
|
5 |
-
position: fixed;
|
6 |
-
overflow: auto;
|
7 |
-
height: 100%;
|
8 |
-
width: 100%;
|
9 |
-
top: 0;
|
10 |
-
z-index: 100000;
|
11 |
-
display: none;
|
12 |
-
background: rgba(0, 0, 0, 0.6);
|
13 |
-
|
14 |
-
.fs-modal-dialog {
|
15 |
-
background: transparent;
|
16 |
-
position: absolute;
|
17 |
-
left: 50%;
|
18 |
-
margin-left: -298px;
|
19 |
-
padding-bottom: 30px;
|
20 |
-
top: -100%;
|
21 |
-
z-index: 100001;
|
22 |
-
width: 596px;
|
23 |
-
|
24 |
-
@media (max-width: 650px) {
|
25 |
-
margin-left: -50%;
|
26 |
-
box-sizing: border-box;
|
27 |
-
padding-left: 10px;
|
28 |
-
padding-right: 10px;
|
29 |
-
width: 100%;
|
30 |
-
|
31 |
-
.fs-modal-panel > h3 > strong {
|
32 |
-
font-size: 1.3em;
|
33 |
-
}
|
34 |
-
}
|
35 |
-
}
|
36 |
-
|
37 |
-
&.active {
|
38 |
-
display: block;
|
39 |
-
|
40 |
-
&:before {
|
41 |
-
display: block;
|
42 |
-
}
|
43 |
-
|
44 |
-
.fs-modal-dialog {
|
45 |
-
top: 10%;
|
46 |
-
}
|
47 |
-
}
|
48 |
-
|
49 |
-
&.fs-success {
|
50 |
-
.fs-modal-header {
|
51 |
-
border-bottom-color: $wp-notice-success-dark-color;
|
52 |
-
}
|
53 |
-
|
54 |
-
.fs-modal-body {
|
55 |
-
background-color: $wp-notice-success-color;
|
56 |
-
}
|
57 |
-
}
|
58 |
-
|
59 |
-
&.fs-warn {
|
60 |
-
.fs-modal-header {
|
61 |
-
border-bottom-color: $wp-notice-warn-dark-color;
|
62 |
-
}
|
63 |
-
|
64 |
-
.fs-modal-body {
|
65 |
-
background-color: $wp-notice-warn-color;
|
66 |
-
}
|
67 |
-
}
|
68 |
-
|
69 |
-
&.fs-error {
|
70 |
-
.fs-modal-header {
|
71 |
-
border-bottom-color: $wp-notice-error-dark-color;
|
72 |
-
}
|
73 |
-
|
74 |
-
.fs-modal-body {
|
75 |
-
background-color: $wp-notice-error-color;
|
76 |
-
}
|
77 |
-
}
|
78 |
-
|
79 |
-
|
80 |
-
.fs-modal-body,
|
81 |
-
.fs-modal-footer {
|
82 |
-
border: 0;
|
83 |
-
background: #fefefe;
|
84 |
-
padding: 20px;
|
85 |
-
}
|
86 |
-
|
87 |
-
.fs-modal-header {
|
88 |
-
border-bottom: #eeeeee solid 1px;
|
89 |
-
background: #fbfbfb;
|
90 |
-
padding: 15px 20px;
|
91 |
-
position: relative;
|
92 |
-
margin-bottom: -10px;
|
93 |
-
// z-index: 2;
|
94 |
-
|
95 |
-
h4 {
|
96 |
-
margin: 0;
|
97 |
-
padding: 0;
|
98 |
-
text-transform: uppercase;
|
99 |
-
font-size: 1.2em;
|
100 |
-
font-weight: bold;
|
101 |
-
color: #cacaca;
|
102 |
-
text-shadow: 1px 1px 1px #fff;
|
103 |
-
letter-spacing: 0.6px;
|
104 |
-
-webkit-font-smoothing: antialiased;
|
105 |
-
}
|
106 |
-
|
107 |
-
.fs-close {
|
108 |
-
position: absolute;
|
109 |
-
right: 10px;
|
110 |
-
top: 12px;
|
111 |
-
cursor: pointer;
|
112 |
-
color: #bbb;
|
113 |
-
@include border-radius(20px);
|
114 |
-
padding: 3px;
|
115 |
-
@include transition(all 0.2s ease-in-out);
|
116 |
-
|
117 |
-
&:hover {
|
118 |
-
color: #fff;
|
119 |
-
background: #aaa;
|
120 |
-
}
|
121 |
-
|
122 |
-
&, &:hover
|
123 |
-
{
|
124 |
-
.dashicons
|
125 |
-
{
|
126 |
-
text-decoration: none;
|
127 |
-
}
|
128 |
-
}
|
129 |
-
}
|
130 |
-
}
|
131 |
-
|
132 |
-
.fs-modal-body {
|
133 |
-
border-bottom: 0;
|
134 |
-
|
135 |
-
p {
|
136 |
-
font-size: 14px;
|
137 |
-
}
|
138 |
-
|
139 |
-
h2 {
|
140 |
-
font-size: 20px;
|
141 |
-
line-height: 1.5em;
|
142 |
-
}
|
143 |
-
|
144 |
-
> div {
|
145 |
-
margin-top: 10px;
|
146 |
-
|
147 |
-
h2 {
|
148 |
-
font-weight: bold;
|
149 |
-
font-size: 20px;
|
150 |
-
margin-top: 0;
|
151 |
-
}
|
152 |
-
}
|
153 |
-
}
|
154 |
-
|
155 |
-
.fs-modal-footer {
|
156 |
-
border-top: #eeeeee solid 1px;
|
157 |
-
text-align: right;
|
158 |
-
|
159 |
-
> .button {
|
160 |
-
margin: 0 7px;
|
161 |
-
|
162 |
-
&:first-child {
|
163 |
-
margin: 0;
|
164 |
-
}
|
165 |
-
}
|
166 |
-
}
|
167 |
-
|
168 |
-
.fs-modal-panel {
|
169 |
-
> .notice.inline {
|
170 |
-
margin: 0;
|
171 |
-
display: none;
|
172 |
-
}
|
173 |
-
|
174 |
-
&:not(.active) {
|
175 |
-
display: none;
|
176 |
-
}
|
177 |
-
}
|
178 |
-
}
|
179 |
-
|
180 |
-
.rtl
|
181 |
-
{
|
182 |
-
.fs-modal {
|
183 |
-
.fs-modal-header {
|
184 |
-
.fs-close {
|
185 |
-
right: auto;
|
186 |
-
left: 20px;
|
187 |
-
}
|
188 |
-
}
|
189 |
-
}
|
190 |
-
}
|
191 |
-
|
192 |
-
body.has-fs-modal {
|
193 |
-
overflow: hidden;
|
194 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_multisite-options.scss
DELETED
@@ -1,40 +0,0 @@
|
|
1 |
-
.fs-multisite-options-container {
|
2 |
-
margin-top: 10px;
|
3 |
-
border: 1px solid #ccc;
|
4 |
-
padding: 5px;
|
5 |
-
|
6 |
-
a {
|
7 |
-
text-decoration: none;
|
8 |
-
|
9 |
-
&:focus {
|
10 |
-
box-shadow: none;
|
11 |
-
}
|
12 |
-
|
13 |
-
&.selected {
|
14 |
-
font-weight: bold;
|
15 |
-
}
|
16 |
-
}
|
17 |
-
|
18 |
-
&.fs-apply-on-all-sites {
|
19 |
-
border: 0 none;
|
20 |
-
padding: 0;
|
21 |
-
|
22 |
-
.fs-all-sites-options {
|
23 |
-
border-spacing: 0;
|
24 |
-
|
25 |
-
td:not(:first-child) {
|
26 |
-
display: none;
|
27 |
-
}
|
28 |
-
}
|
29 |
-
}
|
30 |
-
|
31 |
-
.fs-sites-list-container {
|
32 |
-
display: none;
|
33 |
-
overflow: auto;
|
34 |
-
|
35 |
-
table td {
|
36 |
-
border-top: 1px solid #ccc;
|
37 |
-
padding: 4px 2px;
|
38 |
-
}
|
39 |
-
}
|
40 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_plugin-upgrade-notice.scss
DELETED
@@ -1,8 +0,0 @@
|
|
1 |
-
.plugins p.fs-upgrade-notice
|
2 |
-
{
|
3 |
-
border: 0;
|
4 |
-
background-color: #d54e21;
|
5 |
-
padding: 10px;
|
6 |
-
color: #f9f9f9;
|
7 |
-
margin-top: 10px;
|
8 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_subscription-cancellation.scss
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
.fs-modal.fs-modal-subscription-cancellation {
|
2 |
-
.fs-price-increase-warning {
|
3 |
-
color: red;
|
4 |
-
font-weight: bold;
|
5 |
-
padding: 0 25px;
|
6 |
-
margin-bottom: 0;
|
7 |
-
}
|
8 |
-
|
9 |
-
ul.subscription-actions label {
|
10 |
-
input {
|
11 |
-
float: left;
|
12 |
-
top: 5px;
|
13 |
-
position: relative;
|
14 |
-
|
15 |
-
.rtl & {
|
16 |
-
float: right;
|
17 |
-
}
|
18 |
-
}
|
19 |
-
|
20 |
-
span {
|
21 |
-
display: block;
|
22 |
-
margin-left: 24px;
|
23 |
-
|
24 |
-
.rtl & {
|
25 |
-
margin-left: 0;
|
26 |
-
margin-right: 24px;
|
27 |
-
}
|
28 |
-
}
|
29 |
-
}
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_tag.scss
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
label.fs-tag, span.fs-tag
|
2 |
-
{
|
3 |
-
background: #ffba00;
|
4 |
-
color: #fff;
|
5 |
-
display: inline-block;
|
6 |
-
border-radius: 3px;
|
7 |
-
padding: 5px;
|
8 |
-
font-size: 11px;
|
9 |
-
line-height: 11px;
|
10 |
-
vertical-align: baseline;
|
11 |
-
|
12 |
-
&.fs-warn
|
13 |
-
{
|
14 |
-
background: #ffba00;
|
15 |
-
}
|
16 |
-
&.fs-info
|
17 |
-
{
|
18 |
-
background: #00a0d2;
|
19 |
-
}
|
20 |
-
&.fs-success
|
21 |
-
{
|
22 |
-
background: #46b450;
|
23 |
-
}
|
24 |
-
&.fs-error
|
25 |
-
{
|
26 |
-
background: #dc3232;
|
27 |
-
}
|
28 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_themes.scss
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
@import "badge";
|
2 |
-
|
3 |
-
.theme-browser
|
4 |
-
{
|
5 |
-
.theme
|
6 |
-
{
|
7 |
-
.fs-premium-theme-badge-container {
|
8 |
-
position: absolute;
|
9 |
-
right: 0;
|
10 |
-
top: 0;
|
11 |
-
|
12 |
-
.fs-badge {
|
13 |
-
position: relative;
|
14 |
-
top: 0;
|
15 |
-
margin-top: 10px;
|
16 |
-
text-align: center;
|
17 |
-
|
18 |
-
&.fs-premium-theme-badge {
|
19 |
-
font-size: 1.1em;
|
20 |
-
}
|
21 |
-
|
22 |
-
&.fs-beta-theme-badge {
|
23 |
-
background: #00a0d2;
|
24 |
-
}
|
25 |
-
}
|
26 |
-
}
|
27 |
-
}
|
28 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/_tooltip.scss
DELETED
@@ -1,66 +0,0 @@
|
|
1 |
-
.fs-tooltip-trigger
|
2 |
-
{
|
3 |
-
&:not(a)
|
4 |
-
{
|
5 |
-
cursor: help;
|
6 |
-
}
|
7 |
-
|
8 |
-
position: relative;
|
9 |
-
|
10 |
-
.fs-tooltip
|
11 |
-
{
|
12 |
-
opacity: 0;
|
13 |
-
visibility: hidden;
|
14 |
-
@include transition(opacity 0.3s ease-in-out);
|
15 |
-
position: absolute;
|
16 |
-
background: $tooltip-bkg-color;
|
17 |
-
color: $tooltip-color;
|
18 |
-
font-family: 'arial', serif;
|
19 |
-
font-size: 12px;
|
20 |
-
padding: 10px;
|
21 |
-
z-index: 999999;
|
22 |
-
bottom: 100%;
|
23 |
-
margin-bottom: 5px;
|
24 |
-
left: 0;
|
25 |
-
right: 0;
|
26 |
-
@include border-radius(5px);
|
27 |
-
@include box-shadow(1px 1px 1px rgba(0, 0, 0, 0.2));
|
28 |
-
line-height: 1.3em;
|
29 |
-
font-weight: bold;
|
30 |
-
text-align: left;
|
31 |
-
|
32 |
-
.rtl &
|
33 |
-
{
|
34 |
-
text-align: right;
|
35 |
-
}
|
36 |
-
|
37 |
-
&::after
|
38 |
-
{
|
39 |
-
content: ' ';
|
40 |
-
display: block;
|
41 |
-
width: 0;
|
42 |
-
height: 0;
|
43 |
-
border-style: solid;
|
44 |
-
border-width: 5px 5px 0 5px;
|
45 |
-
border-color: $tooltip-bkg-color transparent transparent transparent;
|
46 |
-
position: absolute;
|
47 |
-
top: 100%;
|
48 |
-
left: 21px;
|
49 |
-
|
50 |
-
.rtl &
|
51 |
-
{
|
52 |
-
right: 21px;
|
53 |
-
left: auto;
|
54 |
-
}
|
55 |
-
}
|
56 |
-
}
|
57 |
-
|
58 |
-
&:hover
|
59 |
-
{
|
60 |
-
.fs-tooltip
|
61 |
-
{
|
62 |
-
visibility: visible;
|
63 |
-
opacity: 1;
|
64 |
-
}
|
65 |
-
}
|
66 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/account.scss
DELETED
@@ -1,307 +0,0 @@
|
|
1 |
-
@import "../start";
|
2 |
-
@import "tag";
|
3 |
-
|
4 |
-
#fs_account
|
5 |
-
{
|
6 |
-
.postbox,
|
7 |
-
.widefat
|
8 |
-
{
|
9 |
-
max-width: 700px;
|
10 |
-
}
|
11 |
-
|
12 |
-
h3
|
13 |
-
{
|
14 |
-
font-size: 1.3em;
|
15 |
-
padding: 12px 15px;
|
16 |
-
margin: 0 0 12px 0;
|
17 |
-
line-height: 1.4;
|
18 |
-
border-bottom: 1px solid #F1F1F1;
|
19 |
-
|
20 |
-
.dashicons {
|
21 |
-
width: 26px;
|
22 |
-
height: 26px;
|
23 |
-
font-size: 1.3em;
|
24 |
-
}
|
25 |
-
}
|
26 |
-
|
27 |
-
i.dashicons
|
28 |
-
{
|
29 |
-
font-size: 1.2em;
|
30 |
-
height: 1.2em;
|
31 |
-
width: 1.2em;
|
32 |
-
}
|
33 |
-
|
34 |
-
.dashicons
|
35 |
-
{
|
36 |
-
vertical-align: middle;
|
37 |
-
}
|
38 |
-
|
39 |
-
.fs-header-actions
|
40 |
-
{
|
41 |
-
position: absolute;
|
42 |
-
top: 17px;
|
43 |
-
right: 15px;
|
44 |
-
font-size: 0.9em;
|
45 |
-
|
46 |
-
ul
|
47 |
-
{
|
48 |
-
margin: 0;
|
49 |
-
}
|
50 |
-
|
51 |
-
li
|
52 |
-
{
|
53 |
-
form
|
54 |
-
{
|
55 |
-
display: inline-block;
|
56 |
-
}
|
57 |
-
|
58 |
-
float: left;
|
59 |
-
a
|
60 |
-
{
|
61 |
-
text-decoration: none;
|
62 |
-
}
|
63 |
-
}
|
64 |
-
}
|
65 |
-
}
|
66 |
-
|
67 |
-
#fs_account_details .button-group {
|
68 |
-
float: right;
|
69 |
-
}
|
70 |
-
|
71 |
-
.rtl #fs_account .fs-header-actions
|
72 |
-
{
|
73 |
-
left: 15px;
|
74 |
-
right: auto;
|
75 |
-
}
|
76 |
-
|
77 |
-
.fs-key-value-table
|
78 |
-
{
|
79 |
-
width: 100%;
|
80 |
-
|
81 |
-
form
|
82 |
-
{
|
83 |
-
display: inline-block;
|
84 |
-
}
|
85 |
-
|
86 |
-
tr
|
87 |
-
{
|
88 |
-
td:first-child
|
89 |
-
{
|
90 |
-
nobr
|
91 |
-
{
|
92 |
-
font-weight: bold;
|
93 |
-
}
|
94 |
-
|
95 |
-
text-align: right;
|
96 |
-
|
97 |
-
form
|
98 |
-
{
|
99 |
-
display: block;
|
100 |
-
}
|
101 |
-
}
|
102 |
-
|
103 |
-
td.fs-right
|
104 |
-
{
|
105 |
-
text-align: right;
|
106 |
-
}
|
107 |
-
|
108 |
-
&.fs-odd
|
109 |
-
{
|
110 |
-
background: #ebebeb;
|
111 |
-
}
|
112 |
-
}
|
113 |
-
|
114 |
-
td, th
|
115 |
-
{
|
116 |
-
padding: 10px;
|
117 |
-
}
|
118 |
-
|
119 |
-
code {
|
120 |
-
line-height: 28px;
|
121 |
-
}
|
122 |
-
|
123 |
-
var, code, input[type="text"]
|
124 |
-
{
|
125 |
-
color: #0073AA;
|
126 |
-
font-size: 16px;
|
127 |
-
background: none;
|
128 |
-
}
|
129 |
-
|
130 |
-
input[type="text"] {
|
131 |
-
width: 100%;
|
132 |
-
font-weight: bold;
|
133 |
-
}
|
134 |
-
}
|
135 |
-
|
136 |
-
.fs-field-beta_program label {
|
137 |
-
margin-left: 7px;
|
138 |
-
}
|
139 |
-
|
140 |
-
label.fs-tag
|
141 |
-
{
|
142 |
-
background: #ffba00;
|
143 |
-
color: #fff;
|
144 |
-
display: inline-block;
|
145 |
-
border-radius: 3px;
|
146 |
-
padding: 5px;
|
147 |
-
font-size: 11px;
|
148 |
-
line-height: 11px;
|
149 |
-
vertical-align: baseline;
|
150 |
-
|
151 |
-
&.fs-warn
|
152 |
-
{
|
153 |
-
background: #ffba00;
|
154 |
-
}
|
155 |
-
&.fs-success
|
156 |
-
{
|
157 |
-
background: #46b450;
|
158 |
-
}
|
159 |
-
&.fs-error
|
160 |
-
{
|
161 |
-
background: #dc3232;
|
162 |
-
}
|
163 |
-
}
|
164 |
-
|
165 |
-
#fs_sites
|
166 |
-
{
|
167 |
-
.fs-scrollable-table
|
168 |
-
{
|
169 |
-
.fs-table-body {
|
170 |
-
max-height: 200px;
|
171 |
-
overflow: auto;
|
172 |
-
border: 1px solid #e5e5e5;
|
173 |
-
|
174 |
-
& > table.widefat {
|
175 |
-
border: none !important;
|
176 |
-
}
|
177 |
-
}
|
178 |
-
|
179 |
-
.fs-main-column {
|
180 |
-
width: 100%;
|
181 |
-
}
|
182 |
-
|
183 |
-
.fs-site-details
|
184 |
-
{
|
185 |
-
td:first-of-type
|
186 |
-
{
|
187 |
-
text-align: right;
|
188 |
-
color: grey;
|
189 |
-
width: 1px;
|
190 |
-
}
|
191 |
-
|
192 |
-
td:last-of-type
|
193 |
-
{
|
194 |
-
text-align: right;
|
195 |
-
}
|
196 |
-
}
|
197 |
-
|
198 |
-
.fs-install-details table
|
199 |
-
{
|
200 |
-
tr td
|
201 |
-
{
|
202 |
-
width: 1px;
|
203 |
-
white-space: nowrap;
|
204 |
-
|
205 |
-
&:last-of-type
|
206 |
-
{
|
207 |
-
width: auto;
|
208 |
-
}
|
209 |
-
}
|
210 |
-
}
|
211 |
-
}
|
212 |
-
}
|
213 |
-
|
214 |
-
#fs_addons
|
215 |
-
{
|
216 |
-
h3
|
217 |
-
{
|
218 |
-
border: none;
|
219 |
-
margin-bottom: 0;
|
220 |
-
padding: 4px 5px;
|
221 |
-
}
|
222 |
-
|
223 |
-
td
|
224 |
-
{
|
225 |
-
vertical-align: middle;
|
226 |
-
}
|
227 |
-
|
228 |
-
thead {
|
229 |
-
white-space: nowrap;
|
230 |
-
}
|
231 |
-
|
232 |
-
td:first-child,
|
233 |
-
th:first-child
|
234 |
-
{
|
235 |
-
text-align: left;
|
236 |
-
font-weight: bold;
|
237 |
-
}
|
238 |
-
td:last-child,
|
239 |
-
th:last-child
|
240 |
-
{
|
241 |
-
text-align: right;
|
242 |
-
}
|
243 |
-
th
|
244 |
-
{
|
245 |
-
font-weight: bold;
|
246 |
-
}
|
247 |
-
}
|
248 |
-
|
249 |
-
#fs_billing_address {
|
250 |
-
width: 100%;
|
251 |
-
|
252 |
-
tr {
|
253 |
-
td {
|
254 |
-
width: 50%;
|
255 |
-
padding: 5px;
|
256 |
-
}
|
257 |
-
|
258 |
-
&:first-of-type {
|
259 |
-
td {
|
260 |
-
padding-top: 0;
|
261 |
-
}
|
262 |
-
}
|
263 |
-
}
|
264 |
-
|
265 |
-
@mixin read-mode {
|
266 |
-
border-color: transparent;
|
267 |
-
color: #777;
|
268 |
-
border-bottom: 1px dashed #ccc;
|
269 |
-
padding-left: 0;
|
270 |
-
background: none;
|
271 |
-
}
|
272 |
-
|
273 |
-
span {
|
274 |
-
font-weight: bold;
|
275 |
-
}
|
276 |
-
|
277 |
-
input, select {
|
278 |
-
@include placeholder(transparent);
|
279 |
-
|
280 |
-
display: block;
|
281 |
-
width: 100%;
|
282 |
-
margin-top: 5px;
|
283 |
-
|
284 |
-
&.fs-read-mode {
|
285 |
-
@include read-mode();
|
286 |
-
}
|
287 |
-
}
|
288 |
-
|
289 |
-
|
290 |
-
&.fs-read-mode {
|
291 |
-
td span {
|
292 |
-
display: none;
|
293 |
-
}
|
294 |
-
|
295 |
-
input, select
|
296 |
-
{
|
297 |
-
@include read-mode();
|
298 |
-
@include placeholder(#ccc);
|
299 |
-
}
|
300 |
-
}
|
301 |
-
|
302 |
-
|
303 |
-
button {
|
304 |
-
display: block;
|
305 |
-
width: 100%;
|
306 |
-
}
|
307 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/add-ons.scss
DELETED
@@ -1,609 +0,0 @@
|
|
1 |
-
@import "../start";
|
2 |
-
@import "badge";
|
3 |
-
|
4 |
-
#fs_addons
|
5 |
-
{
|
6 |
-
.fs-cards-list
|
7 |
-
{
|
8 |
-
list-style: none;
|
9 |
-
|
10 |
-
.fs-card
|
11 |
-
{
|
12 |
-
float: left;
|
13 |
-
// height: 185px; // With reviews/ratings
|
14 |
-
height: 152px;
|
15 |
-
width: 310px;
|
16 |
-
padding: 0;
|
17 |
-
margin: 0 0 30px 30px;
|
18 |
-
font-size: 14px;
|
19 |
-
list-style: none;
|
20 |
-
border: 1px solid #ddd;
|
21 |
-
cursor: pointer;
|
22 |
-
position: relative;
|
23 |
-
|
24 |
-
.fs-overlay
|
25 |
-
{
|
26 |
-
position: absolute;
|
27 |
-
left: 0;
|
28 |
-
right: 0;
|
29 |
-
bottom: 0;
|
30 |
-
top: 0;
|
31 |
-
z-index: 9;
|
32 |
-
}
|
33 |
-
|
34 |
-
.fs-inner
|
35 |
-
{
|
36 |
-
background-color: #fff;
|
37 |
-
overflow: hidden;
|
38 |
-
height: 100%;
|
39 |
-
position: relative;
|
40 |
-
|
41 |
-
& > ul
|
42 |
-
{
|
43 |
-
@include transition(all, 0.15s);
|
44 |
-
left: 0;
|
45 |
-
right: 0;
|
46 |
-
top: 0;
|
47 |
-
position: absolute;
|
48 |
-
|
49 |
-
& > li
|
50 |
-
{
|
51 |
-
list-style: none;
|
52 |
-
line-height: 18px;
|
53 |
-
padding: 0 15px;
|
54 |
-
width: 100%;
|
55 |
-
display: block;
|
56 |
-
@include box-sizing(border-box);
|
57 |
-
}
|
58 |
-
}
|
59 |
-
|
60 |
-
.fs-card-banner
|
61 |
-
{
|
62 |
-
padding: 0;
|
63 |
-
margin: 0;
|
64 |
-
line-height: 0;
|
65 |
-
display: block;
|
66 |
-
height: 100px;
|
67 |
-
background-repeat: repeat-x;
|
68 |
-
background-size: 100% 100%;
|
69 |
-
@include transition(all, 0.15s);
|
70 |
-
|
71 |
-
.fs-badge.fs-installed-addon-badge {
|
72 |
-
font-size: 1.02em;
|
73 |
-
line-height: 1.3em;
|
74 |
-
}
|
75 |
-
}
|
76 |
-
|
77 |
-
.fs-title
|
78 |
-
{
|
79 |
-
margin: 10px 0 0 0;
|
80 |
-
height: 18px;
|
81 |
-
overflow: hidden;
|
82 |
-
color: #000;
|
83 |
-
white-space: nowrap;
|
84 |
-
text-overflow: ellipsis;
|
85 |
-
font-weight: bold;
|
86 |
-
}
|
87 |
-
|
88 |
-
.fs-offer
|
89 |
-
{
|
90 |
-
font-size: 0.9em;
|
91 |
-
}
|
92 |
-
|
93 |
-
.fs-description
|
94 |
-
{
|
95 |
-
background-color: #f9f9f9;
|
96 |
-
padding: 10px 15px 100px 15px;
|
97 |
-
border-top: 1px solid #eee;
|
98 |
-
margin: 0 0 10px 0;
|
99 |
-
color: #777;
|
100 |
-
}
|
101 |
-
|
102 |
-
.fs-tag
|
103 |
-
{
|
104 |
-
position: absolute;
|
105 |
-
top: 10px;
|
106 |
-
right: 0px;
|
107 |
-
background: greenyellow;
|
108 |
-
display: block;
|
109 |
-
padding: 2px 10px;
|
110 |
-
@include box-shadow(1px 1px 1px rgba(0,0,0,0.3));
|
111 |
-
text-transform: uppercase;
|
112 |
-
font-size: 0.9em;
|
113 |
-
font-weight: bold;
|
114 |
-
}
|
115 |
-
|
116 |
-
.fs-cta
|
117 |
-
{
|
118 |
-
.button, .button-group
|
119 |
-
{
|
120 |
-
position: absolute;
|
121 |
-
top: 112px;
|
122 |
-
right: 10px;
|
123 |
-
}
|
124 |
-
}
|
125 |
-
}
|
126 |
-
|
127 |
-
@media screen and (min-width: 960px) {
|
128 |
-
&:hover
|
129 |
-
{
|
130 |
-
.fs-overlay
|
131 |
-
{
|
132 |
-
border: 2px solid $fms-link-color;
|
133 |
-
margin-left: -1px;
|
134 |
-
margin-top: -1px;
|
135 |
-
}
|
136 |
-
|
137 |
-
.fs-inner
|
138 |
-
{
|
139 |
-
ul
|
140 |
-
{
|
141 |
-
top: -100px;
|
142 |
-
}
|
143 |
-
|
144 |
-
.fs-card-banner
|
145 |
-
{
|
146 |
-
// background-position: 50% -100px;
|
147 |
-
}
|
148 |
-
|
149 |
-
.fs-title,
|
150 |
-
.fs-offer
|
151 |
-
{
|
152 |
-
color: $fms-link-color;
|
153 |
-
}
|
154 |
-
}
|
155 |
-
}
|
156 |
-
}
|
157 |
-
}
|
158 |
-
}
|
159 |
-
}
|
160 |
-
|
161 |
-
#TB_window
|
162 |
-
{
|
163 |
-
&, iframe
|
164 |
-
{
|
165 |
-
width: 821px !important;
|
166 |
-
}
|
167 |
-
}
|
168 |
-
|
169 |
-
#plugin-information
|
170 |
-
{
|
171 |
-
.fyi {
|
172 |
-
width: 266px !important;
|
173 |
-
}
|
174 |
-
|
175 |
-
#section-holder {
|
176 |
-
margin-right: 299px;
|
177 |
-
}
|
178 |
-
|
179 |
-
#section-description
|
180 |
-
{
|
181 |
-
h2, h3, p, b, i, blockquote, li, ul, ol
|
182 |
-
{
|
183 |
-
clear: none;
|
184 |
-
}
|
185 |
-
|
186 |
-
.fs-selling-points
|
187 |
-
{
|
188 |
-
padding-bottom: 10px;
|
189 |
-
border-bottom: 1px solid #ddd;
|
190 |
-
|
191 |
-
ul
|
192 |
-
{
|
193 |
-
margin: 0;
|
194 |
-
|
195 |
-
li
|
196 |
-
{
|
197 |
-
padding: 0;
|
198 |
-
list-style: none outside none;
|
199 |
-
|
200 |
-
i.dashicons
|
201 |
-
{
|
202 |
-
color: $fs-logo-green-color;
|
203 |
-
font-size: 3em;
|
204 |
-
vertical-align: middle;
|
205 |
-
line-height: 30px;
|
206 |
-
float: left;
|
207 |
-
margin: 0 0 0 -15px;
|
208 |
-
}
|
209 |
-
|
210 |
-
h3
|
211 |
-
{
|
212 |
-
margin: 1em 30px !important;
|
213 |
-
}
|
214 |
-
}
|
215 |
-
}
|
216 |
-
}
|
217 |
-
|
218 |
-
.fs-screenshots
|
219 |
-
{
|
220 |
-
@include clearfix();
|
221 |
-
ul
|
222 |
-
{
|
223 |
-
list-style: none;
|
224 |
-
margin: 0;
|
225 |
-
|
226 |
-
li
|
227 |
-
{
|
228 |
-
width: 225px;
|
229 |
-
height: 225px;
|
230 |
-
float: left;
|
231 |
-
margin-bottom: 20px;
|
232 |
-
@include box-sizing(content-box);
|
233 |
-
|
234 |
-
a
|
235 |
-
{
|
236 |
-
display: block;
|
237 |
-
width: 100%;
|
238 |
-
height: 100%;
|
239 |
-
border: 1px solid;
|
240 |
-
@include box-shadow(1px 1px 1px rgba(0, 0, 0, 0.2));
|
241 |
-
background-size: cover;
|
242 |
-
}
|
243 |
-
|
244 |
-
&.odd
|
245 |
-
{
|
246 |
-
margin-right: 20px;
|
247 |
-
}
|
248 |
-
}
|
249 |
-
}
|
250 |
-
}
|
251 |
-
}
|
252 |
-
|
253 |
-
.plugin-information-pricing
|
254 |
-
{
|
255 |
-
$pricing_color: #FFFEEC;
|
256 |
-
$borders_color: #DDD;
|
257 |
-
margin: -16px;
|
258 |
-
// padding: 20px;
|
259 |
-
border-bottom: 1px solid $borders_color;
|
260 |
-
|
261 |
-
.fs-plan
|
262 |
-
{
|
263 |
-
|
264 |
-
h3
|
265 |
-
{
|
266 |
-
margin-top: 0;
|
267 |
-
padding: 20px;
|
268 |
-
font-size: 16px;
|
269 |
-
}
|
270 |
-
|
271 |
-
.nav-tab-wrapper
|
272 |
-
{
|
273 |
-
border-bottom: 1px solid $borders_color;
|
274 |
-
|
275 |
-
.nav-tab
|
276 |
-
{
|
277 |
-
cursor: pointer;
|
278 |
-
position: relative;
|
279 |
-
padding: 0 10px;
|
280 |
-
font-size: 0.9em;
|
281 |
-
|
282 |
-
label
|
283 |
-
{
|
284 |
-
text-transform: uppercase;
|
285 |
-
color: green;
|
286 |
-
background: greenyellow;
|
287 |
-
position: absolute;
|
288 |
-
left: -1px;
|
289 |
-
right: -1px;
|
290 |
-
bottom: 100%;
|
291 |
-
border: 1px solid darkgreen;
|
292 |
-
padding: 2px;
|
293 |
-
text-align: center;
|
294 |
-
font-size: 0.9em;
|
295 |
-
line-height: 1em;
|
296 |
-
}
|
297 |
-
|
298 |
-
&.nav-tab-active
|
299 |
-
{
|
300 |
-
cursor: default;
|
301 |
-
background: $pricing_color;
|
302 |
-
border-bottom-color: $pricing_color;
|
303 |
-
}
|
304 |
-
}
|
305 |
-
}
|
306 |
-
|
307 |
-
&.fs-single-cycle
|
308 |
-
{
|
309 |
-
h3
|
310 |
-
{
|
311 |
-
background: $pricing_color;
|
312 |
-
margin: 0;
|
313 |
-
padding-bottom: 0;
|
314 |
-
color: #0073aa;
|
315 |
-
}
|
316 |
-
|
317 |
-
.nav-tab-wrapper,
|
318 |
-
.fs-billing-frequency
|
319 |
-
{
|
320 |
-
display: none;
|
321 |
-
}
|
322 |
-
}
|
323 |
-
|
324 |
-
.fs-pricing-body
|
325 |
-
{
|
326 |
-
background: $pricing_color;
|
327 |
-
padding: 20px;
|
328 |
-
}
|
329 |
-
|
330 |
-
.button
|
331 |
-
{
|
332 |
-
width: 100%;
|
333 |
-
text-align: center;
|
334 |
-
font-weight: bold;
|
335 |
-
text-transform: uppercase;
|
336 |
-
font-size: 1.1em;
|
337 |
-
}
|
338 |
-
|
339 |
-
label
|
340 |
-
{
|
341 |
-
white-space: nowrap;
|
342 |
-
}
|
343 |
-
|
344 |
-
var {
|
345 |
-
font-style: normal;
|
346 |
-
}
|
347 |
-
|
348 |
-
.fs-billing-frequency,
|
349 |
-
.fs-annual-discount
|
350 |
-
{
|
351 |
-
text-align: center;
|
352 |
-
display: block;
|
353 |
-
font-weight: bold;
|
354 |
-
margin-bottom: 10px;
|
355 |
-
text-transform: uppercase;
|
356 |
-
background: #F3F3F3;
|
357 |
-
padding: 2px;
|
358 |
-
border: 1px solid #ccc;
|
359 |
-
}
|
360 |
-
|
361 |
-
.fs-annual-discount
|
362 |
-
{
|
363 |
-
text-transform: none;
|
364 |
-
color: green;
|
365 |
-
background: greenyellow;
|
366 |
-
}
|
367 |
-
|
368 |
-
ul.fs-trial-terms
|
369 |
-
{
|
370 |
-
font-size: 0.9em;
|
371 |
-
|
372 |
-
i
|
373 |
-
{
|
374 |
-
float: left;
|
375 |
-
margin: 0 0 0 -15px;
|
376 |
-
}
|
377 |
-
|
378 |
-
li
|
379 |
-
{
|
380 |
-
margin: 10px 0 0 0;
|
381 |
-
}
|
382 |
-
}
|
383 |
-
}
|
384 |
-
}
|
385 |
-
|
386 |
-
#section-features
|
387 |
-
{
|
388 |
-
.fs-features
|
389 |
-
{
|
390 |
-
margin: -20px -26px;
|
391 |
-
}
|
392 |
-
|
393 |
-
table
|
394 |
-
{
|
395 |
-
width: 100%;
|
396 |
-
border-spacing: 0;
|
397 |
-
border-collapse: separate;
|
398 |
-
|
399 |
-
thead
|
400 |
-
{
|
401 |
-
th
|
402 |
-
{
|
403 |
-
padding: 10px 0;
|
404 |
-
}
|
405 |
-
|
406 |
-
.fs-price
|
407 |
-
{
|
408 |
-
color: $fs-logo-green-color;
|
409 |
-
font-weight: normal;
|
410 |
-
display: block;
|
411 |
-
text-align: center;
|
412 |
-
}
|
413 |
-
}
|
414 |
-
|
415 |
-
tbody
|
416 |
-
{
|
417 |
-
td
|
418 |
-
{
|
419 |
-
border-top: 1px solid #ccc;
|
420 |
-
padding: 10px 0;
|
421 |
-
text-align: center;
|
422 |
-
width: 100px;
|
423 |
-
color: $fs-logo-green-color;
|
424 |
-
|
425 |
-
&:first-child
|
426 |
-
{
|
427 |
-
text-align: left;
|
428 |
-
width: auto;
|
429 |
-
color: inherit;
|
430 |
-
padding-left: 26px;
|
431 |
-
}
|
432 |
-
}
|
433 |
-
tr.fs-odd
|
434 |
-
{
|
435 |
-
td
|
436 |
-
{
|
437 |
-
background: #fefefe;
|
438 |
-
}
|
439 |
-
}
|
440 |
-
}
|
441 |
-
}
|
442 |
-
|
443 |
-
.dashicons-yes
|
444 |
-
{
|
445 |
-
width: 30px;
|
446 |
-
height: 30px;
|
447 |
-
font-size: 30px;
|
448 |
-
}
|
449 |
-
}
|
450 |
-
}
|
451 |
-
|
452 |
-
.fs-dropdown {
|
453 |
-
#fs_addons .fs-cards-list .fs-card .fs-inner &, #plugin-information & {
|
454 |
-
.button-group {
|
455 |
-
.button {
|
456 |
-
position: relative;
|
457 |
-
width: auto;
|
458 |
-
top: 0;
|
459 |
-
right: 0;
|
460 |
-
|
461 |
-
&:focus {
|
462 |
-
z-index: 10;
|
463 |
-
}
|
464 |
-
}
|
465 |
-
|
466 |
-
.fs-dropdown-arrow {
|
467 |
-
border-top: 6px solid white;
|
468 |
-
border-right: 4px solid transparent;
|
469 |
-
border-left: 4px solid transparent;
|
470 |
-
top: 12px;
|
471 |
-
position: relative;
|
472 |
-
}
|
473 |
-
}
|
474 |
-
|
475 |
-
&.active:not(.up) {
|
476 |
-
.button:not(.fs-dropdown-arrow-button) {
|
477 |
-
border-bottom-left-radius: 0;
|
478 |
-
}
|
479 |
-
|
480 |
-
.fs-dropdown-arrow-button {
|
481 |
-
border-bottom-right-radius: 0;
|
482 |
-
}
|
483 |
-
}
|
484 |
-
|
485 |
-
&.active.up {
|
486 |
-
.button:not(.fs-dropdown-arrow-button) {
|
487 |
-
border-top-left-radius: 0;
|
488 |
-
}
|
489 |
-
|
490 |
-
.fs-dropdown-arrow-button {
|
491 |
-
border-top-right-radius: 0;
|
492 |
-
}
|
493 |
-
}
|
494 |
-
|
495 |
-
.fs-dropdown-list {
|
496 |
-
position: absolute;
|
497 |
-
right: -1px;
|
498 |
-
top: 100%;
|
499 |
-
margin-left: auto;
|
500 |
-
padding: 3px 0;
|
501 |
-
border: 1px solid lighten($darkest-color, 75%);
|
502 |
-
background-color: #fff;
|
503 |
-
z-index: 1;
|
504 |
-
width: 230px;
|
505 |
-
text-align: left;
|
506 |
-
@include 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));
|
507 |
-
|
508 |
-
li {
|
509 |
-
margin: 0;
|
510 |
-
|
511 |
-
a {
|
512 |
-
display: block;
|
513 |
-
padding: 5px 10px;
|
514 |
-
text-decoration: none;
|
515 |
-
text-shadow: none;
|
516 |
-
}
|
517 |
-
|
518 |
-
&:hover {
|
519 |
-
background-color: $wp-selected-color;
|
520 |
-
color: #fff;
|
521 |
-
|
522 |
-
a {
|
523 |
-
color: #fff;
|
524 |
-
}
|
525 |
-
}
|
526 |
-
}
|
527 |
-
}
|
528 |
-
|
529 |
-
&:not(.up) {
|
530 |
-
.fs-dropdown-list {
|
531 |
-
@include border-radius(3px 0 3px 3px);
|
532 |
-
}
|
533 |
-
}
|
534 |
-
|
535 |
-
&.up {
|
536 |
-
.fs-dropdown-list {
|
537 |
-
@include border-radius(3px 3px 0 3px);
|
538 |
-
}
|
539 |
-
}
|
540 |
-
}
|
541 |
-
|
542 |
-
#plugin-information & {
|
543 |
-
.button-group {
|
544 |
-
width: 100%;
|
545 |
-
|
546 |
-
.button {
|
547 |
-
float: none;
|
548 |
-
font-size: 14px;
|
549 |
-
font-weight: normal;
|
550 |
-
text-transform: none;
|
551 |
-
}
|
552 |
-
}
|
553 |
-
|
554 |
-
.fs-dropdown-list {
|
555 |
-
margin-top: 1px;
|
556 |
-
}
|
557 |
-
|
558 |
-
&.up {
|
559 |
-
.fs-dropdown-list {
|
560 |
-
top: auto;
|
561 |
-
bottom: 100%;
|
562 |
-
margin-bottom: 2px;
|
563 |
-
}
|
564 |
-
}
|
565 |
-
}
|
566 |
-
}
|
567 |
-
|
568 |
-
#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group {
|
569 |
-
text-align: center;
|
570 |
-
|
571 |
-
display: table;
|
572 |
-
|
573 |
-
.button {
|
574 |
-
display: table-cell;
|
575 |
-
|
576 |
-
&:not(.fs-dropdown-arrow-button) {
|
577 |
-
left: 1px;
|
578 |
-
width: 100%;
|
579 |
-
}
|
580 |
-
}
|
581 |
-
}
|
582 |
-
|
583 |
-
#plugin-information-footer {
|
584 |
-
> .button, .fs-dropdown {
|
585 |
-
position: relative;
|
586 |
-
top: 3px;
|
587 |
-
|
588 |
-
&.left {
|
589 |
-
float: left;
|
590 |
-
}
|
591 |
-
}
|
592 |
-
|
593 |
-
> .right, .fs-dropdown {
|
594 |
-
float: right;
|
595 |
-
}
|
596 |
-
}
|
597 |
-
|
598 |
-
@media screen and (max-width: 961px) {
|
599 |
-
#fs_addons
|
600 |
-
{
|
601 |
-
.fs-cards-list
|
602 |
-
{
|
603 |
-
.fs-card
|
604 |
-
{
|
605 |
-
height: 265px;
|
606 |
-
}
|
607 |
-
}
|
608 |
-
}
|
609 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/affiliation.scss
DELETED
@@ -1,97 +0,0 @@
|
|
1 |
-
@import "../start";
|
2 |
-
|
3 |
-
#fs_affiliation_content_wrapper {
|
4 |
-
#messages {
|
5 |
-
margin-top: 25px;
|
6 |
-
}
|
7 |
-
|
8 |
-
h3 {
|
9 |
-
font-size: 24px;
|
10 |
-
padding: 0;
|
11 |
-
margin-left: 0;
|
12 |
-
}
|
13 |
-
|
14 |
-
ul {
|
15 |
-
li {
|
16 |
-
@include box-sizing(border-box);
|
17 |
-
list-style-type: none;
|
18 |
-
|
19 |
-
&:before {
|
20 |
-
content: '✓';
|
21 |
-
margin-right: 10px;
|
22 |
-
font-weight: bold;
|
23 |
-
}
|
24 |
-
}
|
25 |
-
}
|
26 |
-
|
27 |
-
p:not(.description), li, label {
|
28 |
-
font-size: 16px !important;
|
29 |
-
line-height: 26px !important;
|
30 |
-
}
|
31 |
-
|
32 |
-
.button {
|
33 |
-
margin-top: 20px;
|
34 |
-
margin-bottom: 7px;
|
35 |
-
line-height: 35px;
|
36 |
-
height: 40px;
|
37 |
-
font-size: 16px;
|
38 |
-
|
39 |
-
&#cancel_button {
|
40 |
-
margin-right: 5px;
|
41 |
-
}
|
42 |
-
}
|
43 |
-
|
44 |
-
form {
|
45 |
-
.input-container {
|
46 |
-
.input-label {
|
47 |
-
font-weight: bold;
|
48 |
-
display: block;
|
49 |
-
width: 100%;
|
50 |
-
}
|
51 |
-
|
52 |
-
&.input-container-text {
|
53 |
-
label, input, textarea {
|
54 |
-
display: block;
|
55 |
-
}
|
56 |
-
}
|
57 |
-
|
58 |
-
margin-bottom: 15px;
|
59 |
-
|
60 |
-
#add_domain, .remove-domain {
|
61 |
-
text-decoration: none;
|
62 |
-
display: inline-block;
|
63 |
-
margin-top: 3px;
|
64 |
-
|
65 |
-
&:focus {
|
66 |
-
box-shadow: none;
|
67 |
-
}
|
68 |
-
|
69 |
-
&.disabled {
|
70 |
-
color: #aaa;
|
71 |
-
cursor: default;
|
72 |
-
}
|
73 |
-
}
|
74 |
-
}
|
75 |
-
|
76 |
-
#extra_domains_container {
|
77 |
-
.description {
|
78 |
-
margin-top: 0;
|
79 |
-
position: relative;
|
80 |
-
top: -4px;
|
81 |
-
}
|
82 |
-
|
83 |
-
.extra-domain-input-container {
|
84 |
-
margin-bottom: 15px;
|
85 |
-
|
86 |
-
.domain {
|
87 |
-
display: inline-block;
|
88 |
-
margin-right: 5px;
|
89 |
-
|
90 |
-
&:last-of-type {
|
91 |
-
margin-bottom: 0;
|
92 |
-
}
|
93 |
-
}
|
94 |
-
}
|
95 |
-
}
|
96 |
-
}
|
97 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/checkout.scss
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
@media screen and (max-width: 782px) {
|
2 |
-
#wpbody-content {
|
3 |
-
padding-bottom: 0 !important;
|
4 |
-
}
|
5 |
-
}
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/common.scss
DELETED
@@ -1,220 +0,0 @@
|
|
1 |
-
@import "../start";
|
2 |
-
@import "themes";
|
3 |
-
|
4 |
-
#fs_frame
|
5 |
-
{
|
6 |
-
line-height: 0;
|
7 |
-
font-size: 0;
|
8 |
-
}
|
9 |
-
|
10 |
-
.fs-full-size-wrapper
|
11 |
-
{
|
12 |
-
margin: 40px 0 -65px -20px;
|
13 |
-
|
14 |
-
@media (max-width: 600px) {
|
15 |
-
margin: 0 0 -65px -10px;
|
16 |
-
}
|
17 |
-
}
|
18 |
-
|
19 |
-
.fs-notice
|
20 |
-
{
|
21 |
-
position: relative;
|
22 |
-
|
23 |
-
&.fs-has-title
|
24 |
-
{
|
25 |
-
margin-bottom: 30px !important;
|
26 |
-
}
|
27 |
-
|
28 |
-
&.success
|
29 |
-
{
|
30 |
-
color: green;
|
31 |
-
// font-weight: normal;
|
32 |
-
}
|
33 |
-
|
34 |
-
&.promotion
|
35 |
-
{
|
36 |
-
border-color: $fs-notice-promotion-border-color !important;
|
37 |
-
background-color: $fs-notice-promotion-bkg !important;
|
38 |
-
}
|
39 |
-
|
40 |
-
.fs-notice-body
|
41 |
-
{
|
42 |
-
margin: .5em 0;
|
43 |
-
padding: 2px;
|
44 |
-
}
|
45 |
-
|
46 |
-
.fs-close
|
47 |
-
{
|
48 |
-
// position: absolute;
|
49 |
-
// top: 2px;
|
50 |
-
// bottom: 2px;
|
51 |
-
// right: 2px;
|
52 |
-
// min-width: 100px;
|
53 |
-
// text-align: center;
|
54 |
-
// padding-right: 2px;
|
55 |
-
cursor: pointer;
|
56 |
-
color: #aaa;
|
57 |
-
float: right;
|
58 |
-
|
59 |
-
&:hover
|
60 |
-
{
|
61 |
-
color: #666;
|
62 |
-
// background: #A9A9A9;
|
63 |
-
}
|
64 |
-
|
65 |
-
> *
|
66 |
-
{
|
67 |
-
margin-top: 7px;
|
68 |
-
display: inline-block;
|
69 |
-
}
|
70 |
-
}
|
71 |
-
|
72 |
-
label.fs-plugin-title
|
73 |
-
{
|
74 |
-
background: rgba(0, 0, 0, 0.3);
|
75 |
-
color: #fff;
|
76 |
-
padding: 2px 10px;
|
77 |
-
position: absolute;
|
78 |
-
top: 100%;
|
79 |
-
bottom: auto;
|
80 |
-
right: auto;
|
81 |
-
@include border-radius(0 0 3px 3px);
|
82 |
-
left: 10px;
|
83 |
-
font-size: 12px;
|
84 |
-
font-weight: bold;
|
85 |
-
cursor: auto;
|
86 |
-
}
|
87 |
-
}
|
88 |
-
|
89 |
-
div.fs-notice
|
90 |
-
{
|
91 |
-
&.updated,
|
92 |
-
&.success,
|
93 |
-
&.promotion
|
94 |
-
{
|
95 |
-
display: block !important;
|
96 |
-
}
|
97 |
-
}
|
98 |
-
|
99 |
-
.rtl .fs-notice
|
100 |
-
{
|
101 |
-
.fs-close
|
102 |
-
{
|
103 |
-
// left: 2px;
|
104 |
-
// right: auto;
|
105 |
-
// padding-right: 0;
|
106 |
-
// padding-left: 2px;
|
107 |
-
float: left;
|
108 |
-
}
|
109 |
-
}
|
110 |
-
|
111 |
-
.fs-secure-notice
|
112 |
-
{
|
113 |
-
position: fixed;
|
114 |
-
top: 32px;
|
115 |
-
left: 160px;
|
116 |
-
right: 0;
|
117 |
-
background: rgb(235, 253, 235);
|
118 |
-
padding: 10px 20px;
|
119 |
-
color: green;
|
120 |
-
z-index: 9999;
|
121 |
-
@include box-shadow(0 2px 2px rgba(6, 113, 6, 0.3));
|
122 |
-
@include opacity(0.95);
|
123 |
-
|
124 |
-
&:hover
|
125 |
-
{
|
126 |
-
@include opacity(1);
|
127 |
-
}
|
128 |
-
|
129 |
-
a.fs-security-proof
|
130 |
-
{
|
131 |
-
color: green;
|
132 |
-
text-decoration: none;
|
133 |
-
}
|
134 |
-
}
|
135 |
-
|
136 |
-
@media screen and (max-width: 960px) {
|
137 |
-
.fs-secure-notice
|
138 |
-
{
|
139 |
-
left: 36px;
|
140 |
-
}
|
141 |
-
}
|
142 |
-
|
143 |
-
@media screen and (max-width: 600px) {
|
144 |
-
.fs-secure-notice
|
145 |
-
{
|
146 |
-
display: none;
|
147 |
-
}
|
148 |
-
}
|
149 |
-
|
150 |
-
@media screen and (max-width: 500px) {
|
151 |
-
#fs_promo_tab
|
152 |
-
{
|
153 |
-
display: none;
|
154 |
-
}
|
155 |
-
}
|
156 |
-
|
157 |
-
@media screen and (max-width: 782px) {
|
158 |
-
.fs-secure-notice
|
159 |
-
{
|
160 |
-
left: 0;
|
161 |
-
top: 46px;
|
162 |
-
text-align: center;
|
163 |
-
}
|
164 |
-
}
|
165 |
-
|
166 |
-
span.fs-submenu-item.fs-sub:before
|
167 |
-
{
|
168 |
-
// Add small arrow.
|
169 |
-
content: '\21B3';
|
170 |
-
padding: 0 5px;
|
171 |
-
}
|
172 |
-
|
173 |
-
.rtl
|
174 |
-
{
|
175 |
-
span.fs-submenu-item.fs-sub:before
|
176 |
-
{
|
177 |
-
// Add small RTL arrow.
|
178 |
-
content: '\21B2';
|
179 |
-
}
|
180 |
-
}
|
181 |
-
|
182 |
-
.fs-submenu-item
|
183 |
-
{
|
184 |
-
&.pricing
|
185 |
-
{
|
186 |
-
&.upgrade-mode
|
187 |
-
{
|
188 |
-
color: greenyellow;
|
189 |
-
}
|
190 |
-
|
191 |
-
&.trial-mode
|
192 |
-
{
|
193 |
-
color: #83e2ff;
|
194 |
-
}
|
195 |
-
}
|
196 |
-
}
|
197 |
-
|
198 |
-
#adminmenu .update-plugins.fs-trial
|
199 |
-
{
|
200 |
-
background-color: #00b9eb;
|
201 |
-
}
|
202 |
-
.fs-ajax-spinner
|
203 |
-
{
|
204 |
-
border: 0;
|
205 |
-
width: 20px;
|
206 |
-
height: 20px;
|
207 |
-
margin-right: 5px;
|
208 |
-
vertical-align: sub;
|
209 |
-
display: inline-block;
|
210 |
-
background: url('/wp-admin/images/wpspin_light-2x.gif');
|
211 |
-
background-size: contain;
|
212 |
-
}
|
213 |
-
|
214 |
-
.wrap.fs-section {
|
215 |
-
h2 {
|
216 |
-
text-align: left;
|
217 |
-
}
|
218 |
-
}
|
219 |
-
|
220 |
-
@import "plugin-upgrade-notice";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/connect.scss
DELETED
@@ -1,548 +0,0 @@
|
|
1 |
-
@import "../start";
|
2 |
-
|
3 |
-
$form_width: 480px;
|
4 |
-
|
5 |
-
#fs_connect
|
6 |
-
{
|
7 |
-
width: $form_width;
|
8 |
-
@include box-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));
|
9 |
-
margin: 20px 0;
|
10 |
-
|
11 |
-
@media screen and (max-width: ($form_width - 1)) {
|
12 |
-
@include box-shadow(none);
|
13 |
-
width: auto;
|
14 |
-
margin: 0 0 0 -10px;
|
15 |
-
}
|
16 |
-
|
17 |
-
.fs-content
|
18 |
-
{
|
19 |
-
background: #fff;
|
20 |
-
padding: 15px 20px;
|
21 |
-
|
22 |
-
.fs-error {
|
23 |
-
background: snow;
|
24 |
-
color: $fs-logo-magenta-color;
|
25 |
-
border: 1px solid $fs-logo-magenta-color;
|
26 |
-
@include box-shadow(0 1px 1px 0 rgba(0,0,0,.1));
|
27 |
-
text-align: center;
|
28 |
-
padding: 5px;
|
29 |
-
margin-bottom: 10px;
|
30 |
-
}
|
31 |
-
|
32 |
-
p
|
33 |
-
{
|
34 |
-
margin: 0;
|
35 |
-
padding: 0;
|
36 |
-
font-size: 1.2em;
|
37 |
-
}
|
38 |
-
}
|
39 |
-
|
40 |
-
.fs-license-key-container {
|
41 |
-
position: relative;
|
42 |
-
width: 280px;
|
43 |
-
margin: 10px auto 0 auto;
|
44 |
-
|
45 |
-
input {
|
46 |
-
width: 100%;
|
47 |
-
}
|
48 |
-
|
49 |
-
.dashicons {
|
50 |
-
position: absolute;
|
51 |
-
top: 5px;
|
52 |
-
right: 5px;
|
53 |
-
}
|
54 |
-
}
|
55 |
-
|
56 |
-
&.require-license-key {
|
57 |
-
.fs-sites-list-container {
|
58 |
-
td {
|
59 |
-
cursor: pointer;
|
60 |
-
}
|
61 |
-
}
|
62 |
-
}
|
63 |
-
|
64 |
-
#delegate_to_site_admins {
|
65 |
-
margin-right: 15px;
|
66 |
-
float: right;
|
67 |
-
height: 26px;
|
68 |
-
vertical-align: middle;
|
69 |
-
line-height: 37px;
|
70 |
-
font-weight: bold;
|
71 |
-
border-bottom: 1px dashed;
|
72 |
-
text-decoration: none;
|
73 |
-
|
74 |
-
&.rtl {
|
75 |
-
margin-left: 15px;
|
76 |
-
margin-right: 0;
|
77 |
-
}
|
78 |
-
}
|
79 |
-
|
80 |
-
.fs-actions
|
81 |
-
{
|
82 |
-
padding: 10px 20px;
|
83 |
-
background: #C0C7CA;
|
84 |
-
|
85 |
-
.button
|
86 |
-
{
|
87 |
-
padding: 0 10px 1px;
|
88 |
-
line-height: 35px;
|
89 |
-
height: 37px;
|
90 |
-
font-size: 16px;
|
91 |
-
margin-bottom: 0;
|
92 |
-
|
93 |
-
.dashicons
|
94 |
-
{
|
95 |
-
font-size: 37px;
|
96 |
-
margin-left: -8px;
|
97 |
-
margin-right: 12px;
|
98 |
-
}
|
99 |
-
|
100 |
-
&.button-primary
|
101 |
-
{
|
102 |
-
padding-right: 15px;
|
103 |
-
padding-left: 15px;
|
104 |
-
|
105 |
-
&:after
|
106 |
-
{
|
107 |
-
content: ' \279C';
|
108 |
-
}
|
109 |
-
|
110 |
-
&.fs-loading
|
111 |
-
{
|
112 |
-
&:after
|
113 |
-
{
|
114 |
-
content: '';
|
115 |
-
}
|
116 |
-
}
|
117 |
-
}
|
118 |
-
|
119 |
-
&.button-secondary
|
120 |
-
{
|
121 |
-
float: right;
|
122 |
-
}
|
123 |
-
}
|
124 |
-
|
125 |
-
// .fs-skip
|
126 |
-
// {
|
127 |
-
// line-height: 38px;
|
128 |
-
// vertical-align: middle;
|
129 |
-
// text-decoration: none;
|
130 |
-
// margin-left: 10px;
|
131 |
-
// }
|
132 |
-
}
|
133 |
-
|
134 |
-
&.fs-anonymous-disabled
|
135 |
-
{
|
136 |
-
.fs-actions
|
137 |
-
{
|
138 |
-
.button.button-primary
|
139 |
-
{
|
140 |
-
width: 100%;
|
141 |
-
}
|
142 |
-
}
|
143 |
-
}
|
144 |
-
|
145 |
-
.fs-permissions
|
146 |
-
{
|
147 |
-
padding: 10px 20px;
|
148 |
-
background: #FEFEFE;
|
149 |
-
// background: #F1F1F1;
|
150 |
-
@include transition(background 0.5s ease);
|
151 |
-
|
152 |
-
.fs-license-sync-disclaimer {
|
153 |
-
text-align: center;
|
154 |
-
margin-top: 0;
|
155 |
-
}
|
156 |
-
|
157 |
-
.fs-trigger
|
158 |
-
{
|
159 |
-
font-size: 0.9em;
|
160 |
-
text-decoration: none;
|
161 |
-
text-align: center;
|
162 |
-
display: block;
|
163 |
-
}
|
164 |
-
|
165 |
-
ul
|
166 |
-
{
|
167 |
-
height: 0;
|
168 |
-
overflow: hidden;
|
169 |
-
margin: 0;
|
170 |
-
|
171 |
-
li
|
172 |
-
{
|
173 |
-
margin-bottom: 12px;
|
174 |
-
|
175 |
-
&:last-child
|
176 |
-
{
|
177 |
-
margin-bottom: 0;
|
178 |
-
}
|
179 |
-
|
180 |
-
i.dashicons
|
181 |
-
{
|
182 |
-
float: left;
|
183 |
-
font-size: 40px;
|
184 |
-
width: 40px;
|
185 |
-
height: 40px;
|
186 |
-
}
|
187 |
-
|
188 |
-
div
|
189 |
-
{
|
190 |
-
margin-left: 55px;
|
191 |
-
|
192 |
-
span
|
193 |
-
{
|
194 |
-
font-weight: bold;
|
195 |
-
text-transform: uppercase;
|
196 |
-
color: #23282d;
|
197 |
-
}
|
198 |
-
|
199 |
-
p
|
200 |
-
{
|
201 |
-
margin: 2px 0 0 0;
|
202 |
-
}
|
203 |
-
}
|
204 |
-
}
|
205 |
-
}
|
206 |
-
|
207 |
-
&.fs-open
|
208 |
-
{
|
209 |
-
background: #fff;
|
210 |
-
|
211 |
-
ul
|
212 |
-
{
|
213 |
-
height: auto;
|
214 |
-
margin: 20px 20px 10px 20px;
|
215 |
-
}
|
216 |
-
}
|
217 |
-
|
218 |
-
@media screen and (max-width: ($form_width - 1)) {
|
219 |
-
background: #fff;
|
220 |
-
|
221 |
-
.fs-trigger
|
222 |
-
{
|
223 |
-
display: none;
|
224 |
-
}
|
225 |
-
|
226 |
-
ul
|
227 |
-
{
|
228 |
-
height: auto;
|
229 |
-
margin: 20px;
|
230 |
-
}
|
231 |
-
}
|
232 |
-
}
|
233 |
-
|
234 |
-
.fs-freemium-licensing {
|
235 |
-
padding: 8px;
|
236 |
-
// background: #0085BA;
|
237 |
-
background: #777;
|
238 |
-
color: #fff;
|
239 |
-
|
240 |
-
p {
|
241 |
-
text-align: center;
|
242 |
-
display: block;
|
243 |
-
margin: 0;
|
244 |
-
padding: 0;
|
245 |
-
}
|
246 |
-
|
247 |
-
a {
|
248 |
-
color: #C2EEFF;
|
249 |
-
text-decoration: underline;
|
250 |
-
}
|
251 |
-
}
|
252 |
-
|
253 |
-
$icon_size: 80px;
|
254 |
-
$wp_logo_padding: $icon_size / 10;
|
255 |
-
$icons_top: 10px;
|
256 |
-
|
257 |
-
.fs-visual
|
258 |
-
{
|
259 |
-
padding: 12px;
|
260 |
-
line-height: 0;
|
261 |
-
background: #fafafa;
|
262 |
-
height: $icon_size;
|
263 |
-
position: relative;
|
264 |
-
|
265 |
-
.fs-site-icon
|
266 |
-
{
|
267 |
-
position: absolute;
|
268 |
-
left: 20px;
|
269 |
-
top: $icons_top;
|
270 |
-
}
|
271 |
-
|
272 |
-
.fs-connect-logo
|
273 |
-
{
|
274 |
-
position: absolute;
|
275 |
-
right: 20px;
|
276 |
-
top: $icons_top;
|
277 |
-
}
|
278 |
-
|
279 |
-
.fs-plugin-icon
|
280 |
-
{
|
281 |
-
position: absolute;
|
282 |
-
top: $icons_top;
|
283 |
-
left: 50%;
|
284 |
-
margin-left: - ($icon_size / 2);
|
285 |
-
}
|
286 |
-
|
287 |
-
.fs-plugin-icon,
|
288 |
-
.fs-site-icon,
|
289 |
-
img,
|
290 |
-
object
|
291 |
-
{
|
292 |
-
width: $icon_size;
|
293 |
-
height: $icon_size;
|
294 |
-
}
|
295 |
-
|
296 |
-
.dashicons-wordpress
|
297 |
-
{
|
298 |
-
font-size: $icon_size - ($wp_logo_padding * 2);
|
299 |
-
background: $wordpress_color;
|
300 |
-
color: #fff;
|
301 |
-
width: $icon_size - ($wp_logo_padding * 2);
|
302 |
-
height: $icon_size - ($wp_logo_padding * 2);
|
303 |
-
padding: $wp_logo_padding;
|
304 |
-
}
|
305 |
-
|
306 |
-
.dashicons-plus
|
307 |
-
{
|
308 |
-
position: absolute;
|
309 |
-
top: 50%;
|
310 |
-
font-size: 30px;
|
311 |
-
margin-top: -10px;
|
312 |
-
color: #bbb;
|
313 |
-
|
314 |
-
&.fs-first
|
315 |
-
{
|
316 |
-
left: 28%;
|
317 |
-
}
|
318 |
-
&.fs-second
|
319 |
-
{
|
320 |
-
left: 65%;
|
321 |
-
}
|
322 |
-
}
|
323 |
-
|
324 |
-
.fs-plugin-icon,
|
325 |
-
.fs-connect-logo,
|
326 |
-
.fs-site-icon
|
327 |
-
{
|
328 |
-
border: 1px solid #ccc;
|
329 |
-
padding: 1px;
|
330 |
-
background: #fff;
|
331 |
-
}
|
332 |
-
}
|
333 |
-
|
334 |
-
.fs-terms
|
335 |
-
{
|
336 |
-
text-align: center;
|
337 |
-
font-size: 0.85em;
|
338 |
-
padding: 5px;
|
339 |
-
background: rgba(0, 0, 0, 0.05);
|
340 |
-
|
341 |
-
&, a
|
342 |
-
{
|
343 |
-
color: #999;
|
344 |
-
}
|
345 |
-
|
346 |
-
a
|
347 |
-
{
|
348 |
-
text-decoration: none;
|
349 |
-
}
|
350 |
-
}
|
351 |
-
}
|
352 |
-
|
353 |
-
@import "multisite-options";
|
354 |
-
@import "tooltip";
|
355 |
-
@import "gdpr-consent";
|
356 |
-
|
357 |
-
.rtl
|
358 |
-
{
|
359 |
-
#fs_connect
|
360 |
-
{
|
361 |
-
.fs-actions
|
362 |
-
{
|
363 |
-
padding: 10px 20px;
|
364 |
-
background: #C0C7CA;
|
365 |
-
|
366 |
-
.button
|
367 |
-
{
|
368 |
-
.dashicons
|
369 |
-
{
|
370 |
-
font-size: 37px;
|
371 |
-
margin-left: -8px;
|
372 |
-
margin-right: 12px;
|
373 |
-
}
|
374 |
-
|
375 |
-
&.button-primary
|
376 |
-
{
|
377 |
-
&:after
|
378 |
-
{
|
379 |
-
content: ' \000bb';
|
380 |
-
}
|
381 |
-
|
382 |
-
&.fs-loading
|
383 |
-
{
|
384 |
-
&:after
|
385 |
-
{
|
386 |
-
content: '';
|
387 |
-
}
|
388 |
-
}
|
389 |
-
}
|
390 |
-
|
391 |
-
&.button-secondary
|
392 |
-
{
|
393 |
-
float: left;
|
394 |
-
}
|
395 |
-
}
|
396 |
-
}
|
397 |
-
|
398 |
-
.fs-permissions
|
399 |
-
{
|
400 |
-
ul
|
401 |
-
{
|
402 |
-
li
|
403 |
-
{
|
404 |
-
div
|
405 |
-
{
|
406 |
-
margin-right: 55px;
|
407 |
-
margin-left: 0;
|
408 |
-
}
|
409 |
-
|
410 |
-
i.dashicons
|
411 |
-
{
|
412 |
-
float: right;
|
413 |
-
}
|
414 |
-
|
415 |
-
}
|
416 |
-
}
|
417 |
-
}
|
418 |
-
|
419 |
-
.fs-visual
|
420 |
-
{
|
421 |
-
.fs-site-icon
|
422 |
-
{
|
423 |
-
right: 20px;
|
424 |
-
left: auto;
|
425 |
-
}
|
426 |
-
|
427 |
-
.fs-connect-logo
|
428 |
-
{
|
429 |
-
right: auto;
|
430 |
-
left: 20px;
|
431 |
-
}
|
432 |
-
}
|
433 |
-
}
|
434 |
-
}
|
435 |
-
|
436 |
-
#fs_theme_connect_wrapper {
|
437 |
-
position: fixed;
|
438 |
-
top: 0;
|
439 |
-
height: 100%;
|
440 |
-
width: 100%;
|
441 |
-
z-index: 99990;
|
442 |
-
background: rgba(0, 0, 0, 0.75);
|
443 |
-
text-align: center;
|
444 |
-
overflow-y: auto;
|
445 |
-
|
446 |
-
&:before {
|
447 |
-
content: "";
|
448 |
-
display: inline-block;
|
449 |
-
vertical-align: middle;
|
450 |
-
height: 100%;
|
451 |
-
}
|
452 |
-
|
453 |
-
> button.close {
|
454 |
-
color: white;
|
455 |
-
cursor: pointer;
|
456 |
-
height: 40px;
|
457 |
-
width: 40px;
|
458 |
-
position: absolute;
|
459 |
-
right: 0;
|
460 |
-
border: 0;
|
461 |
-
background-color: transparent;
|
462 |
-
top: 32px;
|
463 |
-
}
|
464 |
-
|
465 |
-
#fs_connect {
|
466 |
-
top: 0;
|
467 |
-
text-align: left;
|
468 |
-
display: inline-block;
|
469 |
-
vertical-align: middle;
|
470 |
-
margin-top: 52px;
|
471 |
-
margin-bottom: 20px;
|
472 |
-
|
473 |
-
.fs-terms
|
474 |
-
{
|
475 |
-
background: rgba(140, 140, 140, 0.64);
|
476 |
-
|
477 |
-
&, a
|
478 |
-
{
|
479 |
-
color: #c5c5c5;
|
480 |
-
}
|
481 |
-
}
|
482 |
-
}
|
483 |
-
}
|
484 |
-
|
485 |
-
.wp-pointer-content
|
486 |
-
{
|
487 |
-
#fs_connect
|
488 |
-
{
|
489 |
-
margin: 0;
|
490 |
-
@include box-shadow(none);
|
491 |
-
}
|
492 |
-
}
|
493 |
-
|
494 |
-
.fs-opt-in-pointer
|
495 |
-
{
|
496 |
-
.wp-pointer-content
|
497 |
-
{
|
498 |
-
padding: 0;
|
499 |
-
}
|
500 |
-
|
501 |
-
&.wp-pointer-top
|
502 |
-
{
|
503 |
-
.wp-pointer-arrow
|
504 |
-
{
|
505 |
-
border-bottom-color: #dfdfdf;
|
506 |
-
}
|
507 |
-
.wp-pointer-arrow-inner
|
508 |
-
{
|
509 |
-
border-bottom-color: #fafafa;
|
510 |
-
}
|
511 |
-
}
|
512 |
-
|
513 |
-
&.wp-pointer-bottom
|
514 |
-
{
|
515 |
-
.wp-pointer-arrow
|
516 |
-
{
|
517 |
-
border-top-color: #dfdfdf;
|
518 |
-
}
|
519 |
-
.wp-pointer-arrow-inner
|
520 |
-
{
|
521 |
-
border-top-color: #fafafa;
|
522 |
-
}
|
523 |
-
}
|
524 |
-
|
525 |
-
&.wp-pointer-left
|
526 |
-
{
|
527 |
-
.wp-pointer-arrow
|
528 |
-
{
|
529 |
-
border-right-color: #dfdfdf;
|
530 |
-
}
|
531 |
-
.wp-pointer-arrow-inner
|
532 |
-
{
|
533 |
-
border-right-color: #fafafa;
|
534 |
-
}
|
535 |
-
}
|
536 |
-
|
537 |
-
&.wp-pointer-right
|
538 |
-
{
|
539 |
-
.wp-pointer-arrow
|
540 |
-
{
|
541 |
-
border-left-color: #dfdfdf;
|
542 |
-
}
|
543 |
-
.wp-pointer-arrow-inner
|
544 |
-
{
|
545 |
-
border-left-color: #fafafa;
|
546 |
-
}
|
547 |
-
}
|
548 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/debug.scss
DELETED
@@ -1,135 +0,0 @@
|
|
1 |
-
@import "../start";
|
2 |
-
|
3 |
-
.switch
|
4 |
-
{
|
5 |
-
position: relative;
|
6 |
-
display: inline-block;
|
7 |
-
font-size: 1.6em;
|
8 |
-
font-weight: bold;
|
9 |
-
color: #ccc;
|
10 |
-
text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.8);
|
11 |
-
height: 18px;
|
12 |
-
padding: 6px 6px 5px 6px;
|
13 |
-
border: 1px solid #ccc;
|
14 |
-
border: 1px solid rgba(0, 0, 0, 0.2);
|
15 |
-
border-radius: 4px;
|
16 |
-
background: #ececec;
|
17 |
-
box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.1), inset 0px 1px 3px 0px rgba(0, 0, 0, 0.1);
|
18 |
-
cursor: pointer;
|
19 |
-
|
20 |
-
span
|
21 |
-
{
|
22 |
-
display: inline-block; width: 35px;
|
23 |
-
text-transform: uppercase;
|
24 |
-
|
25 |
-
&.on
|
26 |
-
{
|
27 |
-
color: $button-primary-bkg;
|
28 |
-
}
|
29 |
-
}
|
30 |
-
|
31 |
-
.toggle
|
32 |
-
{
|
33 |
-
position: absolute;
|
34 |
-
top: 1px;
|
35 |
-
width: 37px;
|
36 |
-
height: 25px;
|
37 |
-
border: 1px solid #ccc;
|
38 |
-
border: 1px solid rgba(0, 0, 0, 0.3);
|
39 |
-
border-radius: 4px;
|
40 |
-
background: #fff;
|
41 |
-
background: -moz-linear-gradient(top, #ececec 0%, #fff 100%);
|
42 |
-
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ececec), color-stop(100%, #fff));
|
43 |
-
background: -webkit-linear-gradient(top, #ececec 0%, #fff 100%);
|
44 |
-
background: -o-linear-gradient(top, #ececec 0%, #fff 100%);
|
45 |
-
background: -ms-linear-gradient(top, #ececec 0%, #fff 100%);
|
46 |
-
background: linear-gradient(top, #ececec 0%, #fff 100%);
|
47 |
-
box-shadow: inset 0px 1px 0px 0px rgba(255, 255, 255, 0.5);
|
48 |
-
z-index: 999;
|
49 |
-
@include transition(all 0.15s ease-in-out);
|
50 |
-
}
|
51 |
-
|
52 |
-
&.on .toggle
|
53 |
-
{
|
54 |
-
left: 2%;
|
55 |
-
}
|
56 |
-
&.off .toggle
|
57 |
-
{
|
58 |
-
left: 54%;
|
59 |
-
}
|
60 |
-
|
61 |
-
/* Round switch */
|
62 |
-
&.round
|
63 |
-
{
|
64 |
-
padding: 0px 20px;
|
65 |
-
border-radius: 40px;
|
66 |
-
|
67 |
-
.toggle
|
68 |
-
{
|
69 |
-
border-radius: 40px;
|
70 |
-
width: 14px;
|
71 |
-
height: 14px;
|
72 |
-
}
|
73 |
-
|
74 |
-
&.on .toggle
|
75 |
-
{
|
76 |
-
left: 3%;
|
77 |
-
background: $button-primary-bkg;
|
78 |
-
}
|
79 |
-
&.off .toggle
|
80 |
-
{
|
81 |
-
left: 58%;
|
82 |
-
}
|
83 |
-
}
|
84 |
-
}
|
85 |
-
|
86 |
-
.switch-label
|
87 |
-
{
|
88 |
-
font-size: 20px;
|
89 |
-
line-height: 31px;
|
90 |
-
margin: 0 5px;
|
91 |
-
}
|
92 |
-
|
93 |
-
#fs_log_book {
|
94 |
-
table {
|
95 |
-
font-family: Consolas,Monaco,monospace;
|
96 |
-
font-size: 12px;
|
97 |
-
|
98 |
-
th {
|
99 |
-
color: #ccc;
|
100 |
-
}
|
101 |
-
|
102 |
-
tr {
|
103 |
-
background: #232525;
|
104 |
-
|
105 |
-
&.alternate {
|
106 |
-
background: #2b2b2b;
|
107 |
-
}
|
108 |
-
|
109 |
-
td {
|
110 |
-
&.fs-col--logger {
|
111 |
-
color: #5a7435;
|
112 |
-
}
|
113 |
-
&.fs-col--type {
|
114 |
-
color: #ffc861;
|
115 |
-
}
|
116 |
-
&.fs-col--function {
|
117 |
-
color: #a7b7b1;
|
118 |
-
font-weight: bold;
|
119 |
-
}
|
120 |
-
&.fs-col--message {
|
121 |
-
&, a
|
122 |
-
{
|
123 |
-
color: #9a73ac !important;
|
124 |
-
}
|
125 |
-
}
|
126 |
-
&.fs-col--file {
|
127 |
-
color: #d07922;
|
128 |
-
}
|
129 |
-
&.fs-col--timestamp {
|
130 |
-
color: #6596be;
|
131 |
-
}
|
132 |
-
}
|
133 |
-
}
|
134 |
-
}
|
135 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/dialog-boxes.scss
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
@import "../start";
|
2 |
-
@import "modal-common";
|
3 |
-
@import "deactivation-feedback";
|
4 |
-
@import "subscription-cancellation";
|
5 |
-
@import "license-activation";
|
6 |
-
@import "multisite-options";
|
7 |
-
@import "license-key-resend";
|
8 |
-
@import "ajax-loader";
|
9 |
-
@import "auto-install";
|
10 |
-
@import "buttons";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/gdpr-optin-notice.scss
DELETED
@@ -1,17 +0,0 @@
|
|
1 |
-
.fs-notice[data-id^="gdpr_optin_actions"]
|
2 |
-
{
|
3 |
-
.underlined {
|
4 |
-
text-decoration: underline;
|
5 |
-
}
|
6 |
-
|
7 |
-
ul {
|
8 |
-
.button, .action-description {
|
9 |
-
vertical-align: middle;
|
10 |
-
}
|
11 |
-
|
12 |
-
.action-description {
|
13 |
-
display: inline-block;
|
14 |
-
margin-left: 3px;
|
15 |
-
}
|
16 |
-
}
|
17 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/index.php
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
// Silence is golden.
|
3 |
-
// Hide file structure from users on unprotected servers.
|
|
|
|
|
|
common/vendor/freemius/assets/scss/admin/plugins.scss
DELETED
@@ -1,12 +0,0 @@
|
|
1 |
-
@import "../start";
|
2 |
-
@import "tag";
|
3 |
-
|
4 |
-
.wp-list-table.plugins {
|
5 |
-
.plugin-title {
|
6 |
-
span.fs-tag {
|
7 |
-
display : inline-block;
|
8 |
-
margin-left: 5px;
|
9 |
-
line-height: 10px;
|
10 |
-
}
|
11 |
-
}
|
12 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/customizer.scss
DELETED
@@ -1,125 +0,0 @@
|
|
1 |
-
@import "start";
|
2 |
-
|
3 |
-
#fs_customizer_upsell {
|
4 |
-
.fs-customizer-plan {
|
5 |
-
padding: 10px 20px 20px 20px;
|
6 |
-
border-radius: 3px;
|
7 |
-
background: #fff;
|
8 |
-
|
9 |
-
h2 {
|
10 |
-
position: relative;
|
11 |
-
margin: 0;
|
12 |
-
line-height: 2em;
|
13 |
-
text-transform: uppercase;
|
14 |
-
|
15 |
-
.button-link {
|
16 |
-
top: -2px;
|
17 |
-
}
|
18 |
-
}
|
19 |
-
}
|
20 |
-
|
21 |
-
.fs-feature {
|
22 |
-
position: relative;
|
23 |
-
}
|
24 |
-
|
25 |
-
.dashicons-yes {
|
26 |
-
color: #0085ba;
|
27 |
-
font-size: 2em;
|
28 |
-
vertical-align: bottom;
|
29 |
-
margin-left: -7px;
|
30 |
-
margin-right: 10px;
|
31 |
-
|
32 |
-
.rtl & {
|
33 |
-
margin-left: 10px;
|
34 |
-
margin-right: -7px;
|
35 |
-
}
|
36 |
-
}
|
37 |
-
|
38 |
-
.dashicons-editor-help
|
39 |
-
{
|
40 |
-
color: #bbb;
|
41 |
-
cursor: help;
|
42 |
-
|
43 |
-
$tooltip-color: #000;
|
44 |
-
|
45 |
-
.fs-feature-desc {
|
46 |
-
opacity: 0;
|
47 |
-
visibility: hidden;
|
48 |
-
@include transition(opacity 0.3s ease-in-out);
|
49 |
-
|
50 |
-
position: absolute;
|
51 |
-
background: $tooltip-color;
|
52 |
-
color: #fff;
|
53 |
-
font-family: 'arial', serif;
|
54 |
-
font-size: 12px;
|
55 |
-
padding: 10px;
|
56 |
-
z-index: 999999;
|
57 |
-
bottom: 100%;
|
58 |
-
margin-bottom: 5px;
|
59 |
-
left: 0;
|
60 |
-
right: 0;
|
61 |
-
@include border-radius(5px);
|
62 |
-
@include box-shadow(1px 1px 1px rgba(0,0,0,0.2));
|
63 |
-
line-height: 1.3em;
|
64 |
-
font-weight: bold;
|
65 |
-
text-align: left;
|
66 |
-
|
67 |
-
.rtl &
|
68 |
-
{
|
69 |
-
text-align: right;
|
70 |
-
}
|
71 |
-
|
72 |
-
&::after {
|
73 |
-
content: ' ';
|
74 |
-
display: block;
|
75 |
-
width: 0;
|
76 |
-
height: 0;
|
77 |
-
border-style: solid;
|
78 |
-
border-width: 5px 5px 0 5px;
|
79 |
-
border-color: $tooltip-color transparent transparent transparent;
|
80 |
-
position: absolute;
|
81 |
-
top: 100%;
|
82 |
-
left: 21px;
|
83 |
-
|
84 |
-
.rtl & {
|
85 |
-
right: 21px;
|
86 |
-
left: auto;
|
87 |
-
}
|
88 |
-
}
|
89 |
-
}
|
90 |
-
|
91 |
-
&:hover {
|
92 |
-
.fs-feature-desc {
|
93 |
-
visibility: visible;
|
94 |
-
opacity: 1;
|
95 |
-
}
|
96 |
-
}
|
97 |
-
}
|
98 |
-
|
99 |
-
.button-primary {
|
100 |
-
display: block;
|
101 |
-
text-align: center;
|
102 |
-
margin-top: 10px;
|
103 |
-
}
|
104 |
-
}
|
105 |
-
|
106 |
-
#fs_customizer_support
|
107 |
-
{
|
108 |
-
display: block !important;
|
109 |
-
|
110 |
-
.button {
|
111 |
-
float: right;
|
112 |
-
}
|
113 |
-
|
114 |
-
.button-group {
|
115 |
-
width: 100%;
|
116 |
-
display: block;
|
117 |
-
margin-top: 10px;
|
118 |
-
|
119 |
-
.button {
|
120 |
-
float: none;
|
121 |
-
width: 50%;
|
122 |
-
text-align: center;
|
123 |
-
}
|
124 |
-
}
|
125 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/assets/scss/index.php
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
// Silence is golden.
|
3 |
-
// Hide file structure from users on unprotected servers.
|
|
|
|
|
|
common/vendor/freemius/composer.json
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"name": "freemius/wordpress-sdk",
|
3 |
-
"description": "Freemius WordPress SDK",
|
4 |
-
"keywords": ["freemius", "wordpress", "plugin", "wordpress-plugin", "theme", "wordpress-theme", "sdk"],
|
5 |
-
"homepage": "https://freemius.com",
|
6 |
-
"license": "GPL-3.0-only",
|
7 |
-
"require": {
|
8 |
-
"php": ">=5.2"
|
9 |
-
}
|
10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/gulpfile.js
DELETED
@@ -1,167 +0,0 @@
|
|
1 |
-
var gulp = require('gulp');
|
2 |
-
var path = require('path');
|
3 |
-
var filesystem = require('fs');
|
4 |
-
var wpPot = require('gulp-wp-pot');
|
5 |
-
var gettext = require('gulp-gettext');
|
6 |
-
var sort = require('gulp-sort');
|
7 |
-
var pofill = require('gulp-pofill');
|
8 |
-
var rename = require('gulp-rename');
|
9 |
-
var clean = require('gulp-clean');
|
10 |
-
|
11 |
-
var languagesFolder = './languages/';
|
12 |
-
|
13 |
-
var options = require('./transifex-config.json');
|
14 |
-
|
15 |
-
function getFolders(dir) {
|
16 |
-
return filesystem.readdirSync(dir)
|
17 |
-
.filter(function (file) {
|
18 |
-
return filesystem.statSync(path.join(dir, file)).isDirectory();
|
19 |
-
});
|
20 |
-
}
|
21 |
-
|
22 |
-
var transifex = require('gulp-transifex').createClient(options);
|
23 |
-
|
24 |
-
// Create POT out of i18n.php.
|
25 |
-
gulp.task('prepare-source', function () {
|
26 |
-
gulp.src('**/*.php')
|
27 |
-
.pipe(sort())
|
28 |
-
.pipe(wpPot({
|
29 |
-
destFile : 'freemius.pot',
|
30 |
-
package : 'freemius',
|
31 |
-
bugReport : 'https://github.com/Freemius/wordpress-sdk/issues',
|
32 |
-
lastTranslator : 'Vova Feldman <vova@freemius.com>',
|
33 |
-
team : 'Freemius Team <admin@freemius.com>',
|
34 |
-
/*gettextMethods: {
|
35 |
-
instances: ['this', '_fs'],
|
36 |
-
methods: [
|
37 |
-
'get_text_inline'
|
38 |
-
]
|
39 |
-
},*/
|
40 |
-
gettextFunctions: [
|
41 |
-
{name: 'get_text_inline'},
|
42 |
-
|
43 |
-
{name: 'fs_text_inline'},
|
44 |
-
{name: 'fs_echo_inline'},
|
45 |
-
{name: 'fs_esc_js_inline'},
|
46 |
-
{name: 'fs_esc_attr_inline'},
|
47 |
-
{name: 'fs_esc_attr_echo_inline'},
|
48 |
-
{name: 'fs_esc_html_inline'},
|
49 |
-
{name: 'fs_esc_html_echo_inline'},
|
50 |
-
|
51 |
-
{name: 'get_text_x_inline', context: 2},
|
52 |
-
{name: 'fs_text_x_inline', context: 2},
|
53 |
-
{name: 'fs_echo_x_inline', context: 2},
|
54 |
-
{name: 'fs_esc_attr_x_inline', context: 2},
|
55 |
-
{name: 'fs_esc_js_x_inline', context: 2},
|
56 |
-
{name: 'fs_esc_js_echo_x_inline', context: 2},
|
57 |
-
{name: 'fs_esc_html_x_inline', context: 2},
|
58 |
-
{name: 'fs_esc_html_echo_x_inline', context: 2}
|
59 |
-
/*,
|
60 |
-
|
61 |
-
|
62 |
-
{name: '_fs_text'},
|
63 |
-
{name: '_fs_x', context: 2},
|
64 |
-
{name: '_fs_echo'},
|
65 |
-
{name: '_fs_esc_attr'},
|
66 |
-
{name: '_fs_esc_attr_echo'},
|
67 |
-
{name: '_fs_esc_html'},
|
68 |
-
{name: '_fs_esc_html_echo'},
|
69 |
-
{name: '_fs_ex', context: 2},
|
70 |
-
{name: '_fs_esc_attr_x', context: 2},
|
71 |
-
{name: '_fs_esc_html_x', context: 2},
|
72 |
-
|
73 |
-
{name: '_fs_n', plural: 2},
|
74 |
-
{name: '_fs_n_noop', plural: 2},
|
75 |
-
{name: '_fs_nx', plural: 2, context: 4},
|
76 |
-
{name: '_fs_nx_noop', plural: 2, context: 3}*/
|
77 |
-
]
|
78 |
-
}))
|
79 |
-
.pipe(gulp.dest(languagesFolder + 'freemius.pot'));
|
80 |
-
|
81 |
-
// Create English PO out of the POT.
|
82 |
-
return gulp.src(languagesFolder + 'freemius.pot')
|
83 |
-
.pipe(pofill({
|
84 |
-
items: function (item) {
|
85 |
-
// If msgstr is empty, use identity translation
|
86 |
-
if (!item.msgstr.length) {
|
87 |
-
item.msgstr = [''];
|
88 |
-
}
|
89 |
-
if (!item.msgstr[0]) {
|
90 |
-
item.msgstr[0] = item.msgid;
|
91 |
-
}
|
92 |
-
return item;
|
93 |
-
}
|
94 |
-
}))
|
95 |
-
.pipe(rename('freemius-en.po'))
|
96 |
-
.pipe(gulp.dest(languagesFolder));
|
97 |
-
});
|
98 |
-
|
99 |
-
// Push updated po resource to transifex.
|
100 |
-
gulp.task('update-transifex', ['prepare-source'], function () {
|
101 |
-
return gulp.src(languagesFolder + 'freemius-en.po')
|
102 |
-
.pipe(transifex.pushResource());
|
103 |
-
});
|
104 |
-
|
105 |
-
// Download latest *.po translations.
|
106 |
-
gulp.task('download-translations', ['update-transifex'], function () {
|
107 |
-
return gulp.src(languagesFolder + 'freemius-en.po')
|
108 |
-
.pipe(transifex.pullResource());
|
109 |
-
});
|
110 |
-
|
111 |
-
// Move translations to languages root.
|
112 |
-
gulp.task('prepare-translations', ['download-translations'], function () {
|
113 |
-
var folders = getFolders(languagesFolder);
|
114 |
-
|
115 |
-
return folders.map(function (folder) {
|
116 |
-
return gulp.src(path.join(languagesFolder, folder, 'freemius-en.po'))
|
117 |
-
.pipe(rename('freemius-' + folder + '.po'))
|
118 |
-
.pipe(gulp.dest(languagesFolder));
|
119 |
-
});
|
120 |
-
});
|
121 |
-
|
122 |
-
// Feel up empty translations with English.
|
123 |
-
gulp.task('translations-feelup', ['prepare-translations'], function () {
|
124 |
-
return gulp.src(languagesFolder + '*.po')
|
125 |
-
.pipe(pofill({
|
126 |
-
items: function (item) {
|
127 |
-
// If msgstr is empty, use identity translation
|
128 |
-
if (0 == item.msgstr.length) {
|
129 |
-
item.msgstr = [''];
|
130 |
-
}
|
131 |
-
if (0 == item.msgstr[0].length) {
|
132 |
-
// item.msgid[0] = item.msgid;
|
133 |
-
item.msgstr[0] = item.msgid;
|
134 |
-
}
|
135 |
-
return item;
|
136 |
-
}
|
137 |
-
}))
|
138 |
-
.pipe(gulp.dest(languagesFolder));
|
139 |
-
});
|
140 |
-
|
141 |
-
// Cleanup temporary translation folders.
|
142 |
-
gulp.task('cleanup', ['prepare-translations'], function () {
|
143 |
-
var folders = getFolders(languagesFolder);
|
144 |
-
|
145 |
-
return folders.map(function (folder) {
|
146 |
-
return gulp.src(path.join(languagesFolder, folder), {read: false})
|
147 |
-
.pipe(clean());
|
148 |
-
});
|
149 |
-
});
|
150 |
-
|
151 |
-
// Compile *.po to *.mo binaries for usage.
|
152 |
-
gulp.task('compile-translations', ['translations-feelup'], function () {
|
153 |
-
// Compile POs to MOs.
|
154 |
-
return gulp.src(languagesFolder + '*.po')
|
155 |
-
.pipe(gettext())
|
156 |
-
.pipe(gulp.dest(languagesFolder))
|
157 |
-
});
|
158 |
-
|
159 |
-
gulp.task('default', [], function () {
|
160 |
-
gulp.run('prepare-source');
|
161 |
-
gulp.run('update-transifex');
|
162 |
-
gulp.run('download-translations');
|
163 |
-
gulp.run('prepare-translations');
|
164 |
-
gulp.run('translations-feelup');
|
165 |
-
gulp.run('cleanup');
|
166 |
-
gulp.run('compile-translations');
|
167 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/freemius/includes/class-freemius.php
CHANGED
@@ -164,6 +164,15 @@
|
|
164 |
*/
|
165 |
private $_has_addons;
|
166 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
167 |
/**
|
168 |
* @since 1.1.6
|
169 |
* @var string[]bool.
|
@@ -334,6 +343,14 @@
|
|
334 |
*/
|
335 |
private $_dynamically_added_top_level_page_hook_name = '';
|
336 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
337 |
#region Uninstall Reasons IDs
|
338 |
|
339 |
const REASON_NO_LONGER_NEEDED = 1;
|
@@ -484,13 +501,13 @@
|
|
484 |
);
|
485 |
|
486 |
if ( 'true' === fs_request_get( 'fs_clear_api_cache' ) ||
|
487 |
-
|
488 |
) {
|
489 |
FS_Api::clear_cache();
|
490 |
$this->_cache->clear();
|
491 |
}
|
492 |
|
493 |
-
$this->
|
494 |
|
495 |
/**
|
496 |
* Starting from version 2.0.0, `FS_Site` entities no longer have the `plan` property and have `plan_id`
|
@@ -702,6 +719,52 @@
|
|
702 |
$this->_menu->has_menu();
|
703 |
}
|
704 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
705 |
/**
|
706 |
* Check if the context module is free wp.org theme.
|
707 |
*
|
@@ -734,12 +797,11 @@
|
|
734 |
* @since 1.2.2.7 Even if the menu item was specified to be hidden, when it is the context page, then show the submenu item so the user will have the right context page.
|
735 |
*
|
736 |
* @param string $slug
|
737 |
-
* @param bool $
|
738 |
-
* or hidden.
|
739 |
*
|
740 |
* @return bool
|
741 |
*/
|
742 |
-
function is_submenu_item_visible( $slug, $
|
743 |
if ( $this->is_admin_page( $slug ) ) {
|
744 |
/**
|
745 |
* It is the current context page, so show the submenu item
|
@@ -754,7 +816,7 @@
|
|
754 |
return false;
|
755 |
}
|
756 |
|
757 |
-
if ( ! $
|
758 |
/**
|
759 |
* wp.org themes are limited to a single submenu item, and
|
760 |
* sub-submenu items are most likely not allowed (never verified).
|
@@ -980,7 +1042,7 @@
|
|
980 |
}
|
981 |
|
982 |
if ( isset( $this->_storage->subscription ) && is_object( $this->_storage->subscription ) ) {
|
983 |
-
$this->_storage->subscriptions = array( $this->_storage->subscription );
|
984 |
}
|
985 |
}
|
986 |
|
@@ -1453,11 +1515,11 @@
|
|
1453 |
* @author Vova Feldman (@svovaf)
|
1454 |
* @since 1.0.9
|
1455 |
*/
|
1456 |
-
private function
|
1457 |
$this->_logger->entrance();
|
1458 |
|
1459 |
if ( is_admin() ) {
|
1460 |
-
add_action( '
|
1461 |
|
1462 |
if ( $this->is_plugin() ) {
|
1463 |
if ( self::is_plugin_install_page() && true !== fs_request_get_bool( 'fs_allow_updater_and_dialog' ) ) {
|
@@ -1498,34 +1560,6 @@
|
|
1498 |
} else {
|
1499 |
add_action( 'after_switch_theme', array( &$this, '_activate_theme_event_hook' ), 10, 2 );
|
1500 |
|
1501 |
-
/**
|
1502 |
-
* Include the required hooks to capture the theme settings' page tabs
|
1503 |
-
* and cache them.
|
1504 |
-
*
|
1505 |
-
* @author Vova Feldman (@svovaf)
|
1506 |
-
* @since 1.2.2.7
|
1507 |
-
*/
|
1508 |
-
if ( ! $this->_cache->has_valid( 'tabs' ) ) {
|
1509 |
-
add_action( 'admin_footer', array( &$this, '_tabs_capture' ) );
|
1510 |
-
// Add license activation AJAX callback.
|
1511 |
-
$this->add_ajax_action( 'store_tabs', array( &$this, '_store_tabs_ajax_action' ) );
|
1512 |
-
|
1513 |
-
add_action( 'admin_enqueue_scripts', array( &$this, '_store_tabs_styles' ), 9999999 );
|
1514 |
-
}
|
1515 |
-
|
1516 |
-
add_action(
|
1517 |
-
'admin_footer',
|
1518 |
-
array( &$this, '_add_freemius_tabs' ),
|
1519 |
-
/**
|
1520 |
-
* The tabs JS code must be executed after the tabs capture logic (_tabs_capture()).
|
1521 |
-
* That's why the priority is 11 while the tabs capture logic is added
|
1522 |
-
* with priority 10.
|
1523 |
-
*
|
1524 |
-
* @author Vova Feldman (@svovaf)
|
1525 |
-
*/
|
1526 |
-
11
|
1527 |
-
);
|
1528 |
-
|
1529 |
add_action( 'admin_footer', array( &$this, '_style_premium_theme' ) );
|
1530 |
}
|
1531 |
|
@@ -1545,7 +1579,10 @@
|
|
1545 |
*
|
1546 |
* @author Vova Feldman (@svovaf)
|
1547 |
*/
|
1548 |
-
if ( $this->is_plugin() &&
|
|
|
|
|
|
|
1549 |
add_action( 'plugins_loaded', array( &$this, '_plugins_loaded' ) );
|
1550 |
} else {
|
1551 |
// If was activated before, then it was already loaded before.
|
@@ -1602,9 +1639,11 @@
|
|
1602 |
add_action( 'admin_init', array( &$this, '_add_license_activation' ) );
|
1603 |
add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
|
1604 |
add_action( 'admin_init', array( &$this, '_add_beta_mode_update_handler' ) );
|
|
|
1605 |
|
1606 |
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
|
1607 |
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
|
|
|
1608 |
|
1609 |
if ( $this->_is_network_active && fs_is_network_admin() ) {
|
1610 |
$this->add_ajax_action( 'network_activate', array( &$this, '_network_activate_ajax_action' ) );
|
@@ -1646,6 +1685,65 @@
|
|
1646 |
}
|
1647 |
}
|
1648 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1649 |
/**
|
1650 |
* Makes Freemius-related updates unavailable on the "Add Plugins" admin page (/plugin-install.php) so that
|
1651 |
* they won't interfere with the .org plugins' functionalities on that page (e.g. updating of a .org plugin).
|
@@ -1908,7 +2006,7 @@
|
|
1908 |
* @since 2.0.0
|
1909 |
*/
|
1910 |
function _hook_action_links_and_register_account_hooks() {
|
1911 |
-
|
1912 |
|
1913 |
if ( self::is_plugins_page() && $this->is_plugin() ) {
|
1914 |
$this->hook_plugin_action_links();
|
@@ -2250,6 +2348,10 @@
|
|
2250 |
|
2251 |
if ( ! isset( $caller_map[ $caller_file_hash ] ) ) {
|
2252 |
foreach ( $all_plugins_paths as $plugin_path ) {
|
|
|
|
|
|
|
|
|
2253 |
if ( false !== strpos( $caller_file_path, fs_normalize_path( dirname( $plugin_path ) . '/' ) ) ) {
|
2254 |
$caller_map[ $caller_file_hash ] = fs_normalize_path( $plugin_path );
|
2255 |
break;
|
@@ -2928,7 +3030,7 @@
|
|
2928 |
* @return bool
|
2929 |
*/
|
2930 |
function is_activation_page() {
|
2931 |
-
if ( $this->_menu->
|
2932 |
return true;
|
2933 |
}
|
2934 |
|
@@ -4630,22 +4732,7 @@
|
|
4630 |
|
4631 |
$this->parse_settings( $plugin_info );
|
4632 |
|
4633 |
-
|
4634 |
-
$this->add_ajax_action(
|
4635 |
-
'delete_theme_update_data',
|
4636 |
-
array( &$this, '_delete_theme_update_data_action' )
|
4637 |
-
);
|
4638 |
-
}
|
4639 |
-
|
4640 |
-
if ( ! self::is_ajax() ) {
|
4641 |
-
if ( ! $this->is_addon() || $this->is_only_premium() ) {
|
4642 |
-
add_action(
|
4643 |
-
( $this->_is_network_active && fs_is_network_admin() ? 'network_' : '' ) . 'admin_menu',
|
4644 |
-
array( &$this, '_prepare_admin_menu' ),
|
4645 |
-
WP_FS__LOWEST_PRIORITY
|
4646 |
-
);
|
4647 |
-
}
|
4648 |
-
}
|
4649 |
|
4650 |
if ( $this->should_stop_execution() ) {
|
4651 |
return;
|
@@ -4803,6 +4890,7 @@
|
|
4803 |
if (
|
4804 |
$this->_parent->is_registered() &&
|
4805 |
! $this->is_registered() &&
|
|
|
4806 |
/**
|
4807 |
* If not registered for add-on and the following conditions for the add-on are met, activate add-on account.
|
4808 |
* * Network active and in network admin - network activate add-on account.
|
@@ -5320,6 +5408,62 @@
|
|
5320 |
}
|
5321 |
}
|
5322 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5323 |
/**
|
5324 |
* Parse plugin's settings (as defined by the plugin dev).
|
5325 |
*
|
@@ -5396,6 +5540,7 @@
|
|
5396 |
'is_live' => $this->get_bool_option( $plugin_info, 'is_live', true ),
|
5397 |
'affiliate_moderation' => $this->get_option( $plugin_info, 'has_affiliation' ),
|
5398 |
'bundle_id' => $this->get_option( $plugin_info, 'bundle_id', null ),
|
|
|
5399 |
) );
|
5400 |
|
5401 |
if ( $plugin->is_updated() ) {
|
@@ -5467,6 +5612,14 @@
|
|
5467 |
|
5468 |
$this->_is_trial_require_payment = $this->get_bool_option( $plugin_info['trial'], 'is_require_payment', false );
|
5469 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5470 |
}
|
5471 |
|
5472 |
/**
|
@@ -5819,12 +5972,16 @@
|
|
5819 |
* @return Freemius[]
|
5820 |
*/
|
5821 |
function get_installed_addons() {
|
|
|
|
|
|
|
|
|
|
|
5822 |
$installed_addons = array();
|
|
|
5823 |
foreach ( self::$_instances as $instance ) {
|
5824 |
-
if ( $instance->
|
5825 |
-
|
5826 |
-
$installed_addons[] = $instance;
|
5827 |
-
}
|
5828 |
}
|
5829 |
}
|
5830 |
|
@@ -5874,7 +6031,25 @@
|
|
5874 |
* @return bool
|
5875 |
*/
|
5876 |
function is_addon() {
|
5877 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5878 |
}
|
5879 |
|
5880 |
/**
|
@@ -6631,6 +6806,8 @@
|
|
6631 |
} else {
|
6632 |
$this->sync_install();
|
6633 |
}
|
|
|
|
|
6634 |
}
|
6635 |
}
|
6636 |
}
|
@@ -6843,6 +7020,8 @@
|
|
6843 |
} else {
|
6844 |
$this->sync_install( array(), true );
|
6845 |
}
|
|
|
|
|
6846 |
}
|
6847 |
}
|
6848 |
|
@@ -6937,8 +7116,7 @@
|
|
6937 |
|
6938 |
$this->_add_upgrade_action_link();
|
6939 |
|
6940 |
-
if ( ! $this->
|
6941 |
-
! ( ! $this->_is_network_active && fs_is_network_admin() ) &&
|
6942 |
(
|
6943 |
( true === $this->_storage->require_license_activation ) ||
|
6944 |
// Not registered nor anonymous.
|
@@ -6948,7 +7126,7 @@
|
|
6948 |
)
|
6949 |
) {
|
6950 |
if ( ! $this->is_pending_activation() ) {
|
6951 |
-
if ( ! $this->_menu->
|
6952 |
/**
|
6953 |
* If a user visits any other admin page before activating the premium-only theme with a valid
|
6954 |
* license, reactivate the previous theme.
|
@@ -7015,8 +7193,8 @@
|
|
7015 |
}
|
7016 |
}
|
7017 |
|
7018 |
-
if ( $this->
|
7019 |
-
$this->
|
7020 |
) {
|
7021 |
$this->_show_theme_activation_optin_dialog();
|
7022 |
}
|
@@ -7781,7 +7959,7 @@
|
|
7781 |
*
|
7782 |
* @return array
|
7783 |
*/
|
7784 |
-
|
7785 |
$sites = array();
|
7786 |
$all_sites = self::get_sites();
|
7787 |
|
@@ -7911,6 +8089,10 @@
|
|
7911 |
foreach ( $sites as $site ) {
|
7912 |
$blog_id = self::get_site_blog_id( $site );
|
7913 |
|
|
|
|
|
|
|
|
|
7914 |
$install_id = $this->_delete_site( true, $blog_id );
|
7915 |
|
7916 |
// Clear all storage data.
|
@@ -8688,26 +8870,28 @@
|
|
8688 |
$include_themes = true,
|
8689 |
$include_blog_data = true
|
8690 |
) {
|
8691 |
-
if (
|
8692 |
-
|
8693 |
-
|
8694 |
-
|
8695 |
-
|
8696 |
-
$
|
8697 |
-
|
8698 |
-
$
|
|
|
|
|
8699 |
}
|
8700 |
}
|
8701 |
-
}
|
8702 |
|
8703 |
-
|
8704 |
-
|
8705 |
-
|
8706 |
-
|
8707 |
-
|
8708 |
-
|
8709 |
-
|
8710 |
-
|
|
|
8711 |
}
|
8712 |
}
|
8713 |
}
|
@@ -9063,6 +9247,21 @@
|
|
9063 |
}
|
9064 |
}
|
9065 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9066 |
/**
|
9067 |
* Update install only if changed.
|
9068 |
*
|
@@ -9346,6 +9545,8 @@
|
|
9346 |
$fs = self::get_instance_by_file( $plugin_file );
|
9347 |
|
9348 |
if ( is_object( $fs ) ) {
|
|
|
|
|
9349 |
self::require_plugin_essentials();
|
9350 |
|
9351 |
if ( is_plugin_active( $fs->_free_plugin_basename ) ||
|
@@ -9397,10 +9598,12 @@
|
|
9397 |
* @author Vova Feldman (@svovaf)
|
9398 |
* @since 1.0.1
|
9399 |
*
|
|
|
|
|
9400 |
* @return array
|
9401 |
*/
|
9402 |
-
function get_plugin_data() {
|
9403 |
-
if ( ! isset( $this->_plugin_data ) ) {
|
9404 |
self::require_plugin_essentials();
|
9405 |
|
9406 |
if ( $this->is_plugin() ) {
|
@@ -9505,6 +9708,18 @@
|
|
9505 |
null;
|
9506 |
}
|
9507 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9508 |
/**
|
9509 |
* @author Vova Feldman (@svovaf)
|
9510 |
* @since 1.2.1.5
|
@@ -9527,6 +9742,32 @@
|
|
9527 |
$this->_plugin->id;
|
9528 |
}
|
9529 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9530 |
/**
|
9531 |
* @author Vova Feldman (@svovaf)
|
9532 |
* @since 1.0.1
|
@@ -9626,12 +9867,14 @@
|
|
9626 |
* @author Vova Feldman (@svovaf)
|
9627 |
* @since 1.0.0
|
9628 |
*
|
|
|
|
|
9629 |
* @return string
|
9630 |
*/
|
9631 |
-
function get_plugin_version() {
|
9632 |
$this->_logger->entrance();
|
9633 |
|
9634 |
-
$plugin_data = $this->get_plugin_data();
|
9635 |
|
9636 |
$this->_logger->departure( 'Version = ' . $plugin_data['Version'] );
|
9637 |
|
@@ -9756,7 +9999,7 @@
|
|
9756 |
* @return array[number]FS_User
|
9757 |
*/
|
9758 |
static function get_all_users() {
|
9759 |
-
$users = self
|
9760 |
|
9761 |
if ( ! is_array( $users ) ) {
|
9762 |
$users = array();
|
@@ -9800,7 +10043,7 @@
|
|
9800 |
$option_name = $module_type . '_' . $option_name;
|
9801 |
}
|
9802 |
|
9803 |
-
return self
|
9804 |
}
|
9805 |
|
9806 |
/**
|
@@ -9848,6 +10091,54 @@
|
|
9848 |
self::$_accounts->set_option( $option_name, $option_value, $store, $network_level_or_blog_id );
|
9849 |
}
|
9850 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9851 |
/**
|
9852 |
* @author Vova Feldman (@svovaf)
|
9853 |
* @since 1.0.6
|
@@ -10031,7 +10322,7 @@
|
|
10031 |
* @return FS_Plugin_Tag[]
|
10032 |
*/
|
10033 |
private static function get_all_updates() {
|
10034 |
-
$updates = self
|
10035 |
|
10036 |
if ( ! is_array( $updates ) ) {
|
10037 |
$updates = array();
|
@@ -10047,7 +10338,7 @@
|
|
10047 |
* @return array<number,FS_Plugin[]>|false
|
10048 |
*/
|
10049 |
private static function get_all_addons() {
|
10050 |
-
$addons = self
|
10051 |
|
10052 |
if ( ! is_array( $addons ) ) {
|
10053 |
$addons = array();
|
@@ -10060,7 +10351,7 @@
|
|
10060 |
* @author Vova Feldman (@svovaf)
|
10061 |
* @since 1.0.6
|
10062 |
*
|
10063 |
-
* @return
|
10064 |
*/
|
10065 |
private static function get_all_account_addons() {
|
10066 |
$addons = self::$_accounts->get_option( 'account_addons', array() );
|
@@ -10161,7 +10452,7 @@
|
|
10161 |
* @author Vova Feldman (@svovaf)
|
10162 |
* @since 1.0.6
|
10163 |
*
|
10164 |
-
* @return
|
10165 |
*/
|
10166 |
function get_account_addons() {
|
10167 |
$this->_logger->entrance();
|
@@ -10305,7 +10596,7 @@
|
|
10305 |
|
10306 |
if ( ! fs_is_network_admin() ) {
|
10307 |
// Get blog-level activated installations.
|
10308 |
-
$sites = self
|
10309 |
} else {
|
10310 |
$sites = null;
|
10311 |
|
@@ -10314,7 +10605,7 @@
|
|
10314 |
) {
|
10315 |
if ( FS_Site::is_valid_id( $addon_storage->network_install_blog_id ) ) {
|
10316 |
// Get network-level activated installations.
|
10317 |
-
$sites = self
|
10318 |
'sites',
|
10319 |
array(),
|
10320 |
$addon_storage->network_install_blog_id
|
@@ -10324,9 +10615,10 @@
|
|
10324 |
}
|
10325 |
|
10326 |
$addon_info = array(
|
10327 |
-
'is_connected'
|
10328 |
-
'slug'
|
10329 |
-
'title'
|
|
|
10330 |
);
|
10331 |
|
10332 |
if ( ! $is_installed ) {
|
@@ -10372,14 +10664,14 @@
|
|
10372 |
|
10373 |
$addon_info['site'] = $site;
|
10374 |
|
10375 |
-
$plugins_data = self
|
10376 |
if ( isset( $plugins_data[ $slug ] ) ) {
|
10377 |
$plugin_data = $plugins_data[ $slug ];
|
10378 |
|
10379 |
$addon_info['version'] = $plugin_data->version;
|
10380 |
}
|
10381 |
|
10382 |
-
$all_plans = self
|
10383 |
if ( isset( $all_plans[ $slug ] ) ) {
|
10384 |
$plans = $all_plans[ $slug ];
|
10385 |
|
@@ -10392,7 +10684,7 @@
|
|
10392 |
}
|
10393 |
}
|
10394 |
|
10395 |
-
$licenses = self
|
10396 |
if ( is_array( $licenses ) && isset( $licenses[ $addon_id ] ) ) {
|
10397 |
foreach ( $licenses[ $addon_id ] as $license ) {
|
10398 |
if ( $license->id == $site->license_id ) {
|
@@ -10406,7 +10698,9 @@
|
|
10406 |
if ( isset( $addon_storage->subscriptions ) &&
|
10407 |
! empty( $addon_storage->subscriptions )
|
10408 |
) {
|
10409 |
-
|
|
|
|
|
10410 |
if ( $subscription->license_id == $site->license_id ) {
|
10411 |
$addon_info['subscription'] = $subscription;
|
10412 |
break;
|
@@ -10497,7 +10791,7 @@
|
|
10497 |
function is_premium() {
|
10498 |
/**
|
10499 |
* `$this->_plugin` will be `false` when `is_activation_mode` calls this method directly from the
|
10500 |
-
* `
|
10501 |
*
|
10502 |
* @author Leo Fajardo (@leorw)
|
10503 |
* @since 2.2.3
|
@@ -10594,13 +10888,26 @@
|
|
10594 |
return false;
|
10595 |
}
|
10596 |
|
10597 |
-
|
10598 |
-
|
|
|
10599 |
|
10600 |
-
|
10601 |
-
|
10602 |
-
|
10603 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10604 |
*
|
10605 |
* @return bool
|
10606 |
*/
|
@@ -10729,10 +11036,26 @@
|
|
10729 |
* @author Vova Feldman (@svovaf)
|
10730 |
* @since 1.1.7.3
|
10731 |
*
|
|
|
|
|
10732 |
* @return bool
|
10733 |
*/
|
10734 |
-
function has_any_license() {
|
10735 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10736 |
}
|
10737 |
|
10738 |
/**
|
@@ -10878,7 +11201,9 @@
|
|
10878 |
|
10879 |
if ( $license instanceof FS_Plugin_License ) {
|
10880 |
$this->_licenses[] = $license;
|
10881 |
-
|
|
|
|
|
10882 |
$this->_store_licenses();
|
10883 |
|
10884 |
return $license;
|
@@ -11103,7 +11428,22 @@
|
|
11103 |
|
11104 |
// Update current license.
|
11105 |
if ( is_object( $this->_license ) ) {
|
11106 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11107 |
}
|
11108 |
|
11109 |
return $this->_licenses;
|
@@ -11443,6 +11783,21 @@
|
|
11443 |
return true;
|
11444 |
}
|
11445 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11446 |
/**
|
11447 |
* Activate a given license on a collection of blogs/sites that are not yet opted-in.
|
11448 |
*
|
@@ -11458,7 +11813,7 @@
|
|
11458 |
private function activate_license_on_many_sites(
|
11459 |
FS_User $user,
|
11460 |
$license_key,
|
11461 |
-
array $site_ids
|
11462 |
) {
|
11463 |
$sites = array();
|
11464 |
foreach ( $site_ids as $site_id ) {
|
@@ -11482,30 +11837,43 @@
|
|
11482 |
}
|
11483 |
|
11484 |
$installs = array();
|
11485 |
-
foreach ( $result->installs as $install ) {
|
11486 |
-
$installs[] = new FS_Site( $install );
|
11487 |
-
}
|
11488 |
|
11489 |
-
|
11490 |
-
|
11491 |
|
11492 |
-
|
11493 |
|
11494 |
-
|
11495 |
-
$address = trailingslashit( fs_strip_url_protocol( $install->url ) );
|
11496 |
-
$blog_id = $address_to_blog_map[ $address ];
|
11497 |
|
11498 |
-
$this->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11499 |
|
11500 |
-
$
|
11501 |
|
11502 |
-
|
11503 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11504 |
}
|
11505 |
-
}
|
11506 |
|
11507 |
-
|
11508 |
-
|
|
|
11509 |
}
|
11510 |
|
11511 |
return true;
|
@@ -11524,7 +11892,15 @@
|
|
11524 |
function _update_site_license( $new_license ) {
|
11525 |
$this->_logger->entrance();
|
11526 |
|
11527 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11528 |
|
11529 |
if ( ! is_object( $new_license ) ) {
|
11530 |
$this->_site->license_id = null;
|
@@ -11559,6 +11935,241 @@
|
|
11559 |
return $this->_license;
|
11560 |
}
|
11561 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11562 |
/**
|
11563 |
* Sync site's subscription.
|
11564 |
*
|
@@ -11616,7 +12227,7 @@
|
|
11616 |
return null;
|
11617 |
}
|
11618 |
|
11619 |
-
foreach ( $this->_storage->subscriptions as $subscription ) {
|
11620 |
if ( $subscription->license_id == $license_id ) {
|
11621 |
return $subscription;
|
11622 |
}
|
@@ -11642,7 +12253,7 @@
|
|
11642 |
return;
|
11643 |
}
|
11644 |
|
11645 |
-
$subscriptions = $this->_storage->subscriptions;
|
11646 |
|
11647 |
$updated_subscription = false;
|
11648 |
foreach ( $subscriptions as $key => $existing_subscription ) {
|
@@ -11737,7 +12348,7 @@
|
|
11737 |
}
|
11738 |
|
11739 |
$current_plan_order = - 1;
|
11740 |
-
$required_plan_order =
|
11741 |
for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
|
11742 |
if ( $plan === $this->_plans[ $i ]->name ) {
|
11743 |
$required_plan_order = $i;
|
@@ -11755,9 +12366,11 @@
|
|
11755 |
* @author Vova Feldman (@svovaf)
|
11756 |
* @since 1.2.1.7
|
11757 |
*
|
|
|
|
|
11758 |
* @return bool
|
11759 |
*/
|
11760 |
-
function is_single_plan() {
|
11761 |
$this->_logger->entrance();
|
11762 |
|
11763 |
if ( ! $this->is_registered() ||
|
@@ -11767,7 +12380,18 @@
|
|
11767 |
return true;
|
11768 |
}
|
11769 |
|
11770 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11771 |
}
|
11772 |
|
11773 |
/**
|
@@ -11881,6 +12505,77 @@
|
|
11881 |
fs_require_template( 'forms/resend-key.php', $vars );
|
11882 |
}
|
11883 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11884 |
/**
|
11885 |
* Displays a subscription cancellation dialog box when the user clicks on the "Deactivate License"
|
11886 |
* link on the "Account" page or deactivates a plugin and there's an active subscription that is
|
@@ -11899,6 +12594,10 @@
|
|
11899 |
// Subscription cancellation dialog box is currently not supported for multisite networks.
|
11900 |
return array();
|
11901 |
}
|
|
|
|
|
|
|
|
|
11902 |
|
11903 |
$license = $this->_get_license();
|
11904 |
|
@@ -11986,8 +12685,18 @@
|
|
11986 |
return;
|
11987 |
}
|
11988 |
|
11989 |
-
if (
|
11990 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11991 |
return;
|
11992 |
}
|
11993 |
|
@@ -12013,6 +12722,55 @@
|
|
12013 |
$this->add_ajax_action( 'resend_license_key', array( &$this, '_resend_license_key_ajax_action' ) );
|
12014 |
}
|
12015 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12016 |
/**
|
12017 |
* @author Leo Fajardo (@leorw)
|
12018 |
* @since 2.0.2
|
@@ -12118,7 +12876,9 @@
|
|
12118 |
array(),
|
12119 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
12120 |
fs_request_get( 'blog_id', null ),
|
12121 |
-
fs_request_get( 'module_id', null, 'post' )
|
|
|
|
|
12122 |
);
|
12123 |
|
12124 |
echo json_encode( $result );
|
@@ -12126,6 +12886,86 @@
|
|
12126 |
exit;
|
12127 |
}
|
12128 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12129 |
/**
|
12130 |
* A helper method to activate migrated licenses. If the product is network activated and integrated, the method will network activate the license.
|
12131 |
*
|
@@ -12149,7 +12989,9 @@
|
|
12149 |
$is_marketing_allowed = null,
|
12150 |
$plugin_id = null
|
12151 |
) {
|
12152 |
-
|
|
|
|
|
12153 |
$license_key,
|
12154 |
$this->is_network_active() ?
|
12155 |
$this->get_sites_for_network_level_optin() :
|
@@ -12158,6 +13000,11 @@
|
|
12158 |
null,
|
12159 |
$plugin_id
|
12160 |
);
|
|
|
|
|
|
|
|
|
|
|
12161 |
}
|
12162 |
|
12163 |
/**
|
@@ -12171,6 +13018,7 @@
|
|
12171 |
* @param null|bool $is_marketing_allowed
|
12172 |
* @param null|int $blog_id
|
12173 |
* @param null|number $plugin_id
|
|
|
12174 |
*
|
12175 |
* @return array {
|
12176 |
* @var bool $success
|
@@ -12183,7 +13031,9 @@
|
|
12183 |
$sites = array(),
|
12184 |
$is_marketing_allowed = null,
|
12185 |
$blog_id = null,
|
12186 |
-
$plugin_id = null
|
|
|
|
|
12187 |
) {
|
12188 |
$this->_logger->entrance();
|
12189 |
|
@@ -12198,12 +13048,27 @@
|
|
12198 |
$this :
|
12199 |
$this->get_addon_instance( $plugin_id );
|
12200 |
|
|
|
|
|
12201 |
$error = false;
|
12202 |
$next_page = false;
|
12203 |
|
12204 |
$has_valid_blog_id = is_numeric( $blog_id );
|
12205 |
|
12206 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12207 |
if ( fs_is_network_admin() && ! $has_valid_blog_id ) {
|
12208 |
// If no specific blog ID was provided, activate the license for all sites in the network.
|
12209 |
$blog_2_install_map = array();
|
@@ -12214,7 +13079,7 @@
|
|
12214 |
continue;
|
12215 |
}
|
12216 |
|
12217 |
-
$install = $
|
12218 |
|
12219 |
if ( is_object( $install ) ) {
|
12220 |
$blog_2_install_map[ $site['blog_id'] ] = $install;
|
@@ -12223,10 +13088,8 @@
|
|
12223 |
}
|
12224 |
}
|
12225 |
|
12226 |
-
$user = $this->get_current_or_network_user();
|
12227 |
-
|
12228 |
if ( ! empty( $blog_2_install_map ) ) {
|
12229 |
-
$result = $
|
12230 |
|
12231 |
if ( true !== $result ) {
|
12232 |
$error = FS_Api::is_api_error_object( $result ) ?
|
@@ -12236,7 +13099,7 @@
|
|
12236 |
}
|
12237 |
|
12238 |
if ( empty( $error ) && ! empty( $site_ids ) ) {
|
12239 |
-
$result = $
|
12240 |
|
12241 |
if ( true !== $result ) {
|
12242 |
$error = FS_Api::is_api_error_object( $result ) ?
|
@@ -12252,31 +13115,67 @@
|
|
12252 |
*
|
12253 |
* @author Leo Fajardo (@leorw)
|
12254 |
*/
|
12255 |
-
$
|
12256 |
}
|
12257 |
|
12258 |
-
|
|
|
|
|
|
|
12259 |
|
12260 |
-
|
12261 |
-
'license_key' => $fs->apply_filters( 'license_key', $license_key )
|
12262 |
-
);
|
12263 |
|
12264 |
-
|
12265 |
|
12266 |
-
|
12267 |
-
|
12268 |
-
|
12269 |
-
|
12270 |
-
|
12271 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12272 |
}
|
12273 |
}
|
12274 |
|
12275 |
if ( empty( $error ) ) {
|
12276 |
-
$
|
12277 |
|
12278 |
$fs->_sync_license( true, $has_valid_blog_id );
|
12279 |
|
|
|
|
|
12280 |
$next_page = $fs->is_addon() ?
|
12281 |
$fs->get_parent_instance()->get_account_url() :
|
12282 |
$fs->get_account_url();
|
@@ -12325,17 +13224,17 @@
|
|
12325 |
continue;
|
12326 |
}
|
12327 |
|
12328 |
-
if ( $
|
12329 |
// Site was already connected before.
|
12330 |
continue;
|
12331 |
}
|
12332 |
|
12333 |
-
if ( $
|
12334 |
// Site's connection was delegated.
|
12335 |
continue;
|
12336 |
}
|
12337 |
|
12338 |
-
if ( $
|
12339 |
// Site connection was already skipped.
|
12340 |
continue;
|
12341 |
}
|
@@ -12344,43 +13243,101 @@
|
|
12344 |
}
|
12345 |
|
12346 |
if ( ! empty( $pending_sites ) ) {
|
12347 |
-
if ( $
|
12348 |
-
$
|
12349 |
} else {
|
12350 |
-
$
|
12351 |
}
|
12352 |
}
|
12353 |
}
|
12354 |
}
|
12355 |
}
|
12356 |
|
12357 |
-
if ( false === $error && true === $
|
12358 |
-
$
|
12359 |
}
|
12360 |
|
12361 |
-
$result = array(
|
12362 |
-
'success' => ( false === $error )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12363 |
);
|
12364 |
|
12365 |
-
|
12366 |
-
$
|
12367 |
-
|
12368 |
-
|
12369 |
-
|
12370 |
-
|
12371 |
-
|
12372 |
-
|
12373 |
-
*
|
12374 |
-
* @author Leo Fajardo (@leorw)
|
12375 |
-
* @since 2.2.4
|
12376 |
-
*/
|
12377 |
-
$this->purge_valid_user_licenses_cache();
|
12378 |
}
|
12379 |
|
12380 |
-
$
|
|
|
|
|
|
|
|
|
|
|
12381 |
}
|
12382 |
|
12383 |
-
return $
|
12384 |
}
|
12385 |
|
12386 |
/**
|
@@ -13409,9 +14366,8 @@
|
|
13409 |
$page_param = $this->_menu->get_slug( $page );
|
13410 |
|
13411 |
if ( empty( $page ) &&
|
13412 |
-
$this->is_theme() &&
|
13413 |
// Show the opt-in as an overlay for free wp.org themes or themes without any settings page.
|
13414 |
-
|
13415 |
) {
|
13416 |
$params[ $this->get_unique_affix() . '_show_optin' ] = 'true';
|
13417 |
|
@@ -13841,10 +14797,12 @@
|
|
13841 |
*
|
13842 |
* @param int $blog_id
|
13843 |
* @param FS_Site $install
|
|
|
|
|
13844 |
*/
|
13845 |
function switch_to_blog( $blog_id, FS_Site $install = null ) {
|
13846 |
if ( $blog_id == $this->_context_is_network_or_blog_id ) {
|
13847 |
-
return;
|
13848 |
}
|
13849 |
|
13850 |
switch_to_blog( $blog_id );
|
@@ -13858,9 +14816,10 @@
|
|
13858 |
$install :
|
13859 |
$this->get_install_by_blog_id( $blog_id );
|
13860 |
|
13861 |
-
$this->_user
|
13862 |
-
$this->_licenses
|
13863 |
-
$this->_license
|
|
|
13864 |
|
13865 |
if ( is_object( $this->_site ) ) {
|
13866 |
// Try to fetch user from install.
|
@@ -13905,6 +14864,8 @@
|
|
13905 |
|
13906 |
unset( $this->_site_api );
|
13907 |
unset( $this->_user_api );
|
|
|
|
|
13908 |
}
|
13909 |
|
13910 |
/**
|
@@ -14350,6 +15311,18 @@
|
|
14350 |
return ( $this->_menu->get_slug( $page ) === fs_request_get( 'page', '', 'get' ) );
|
14351 |
}
|
14352 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14353 |
/**
|
14354 |
* Get module's main admin setting page URL.
|
14355 |
*
|
@@ -14370,8 +15343,22 @@
|
|
14370 |
* @since 1.2.2.7
|
14371 |
*
|
14372 |
* @return bool
|
|
|
|
|
14373 |
*/
|
14374 |
function is_theme_settings_page() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14375 |
return fs_starts_with(
|
14376 |
fs_request_get( 'page', '', 'get' ),
|
14377 |
$this->_menu->get_slug()
|
@@ -14791,7 +15778,7 @@
|
|
14791 |
/**
|
14792 |
* This is a special fault tolerance mechanism to handle a scenario that the user data is missing.
|
14793 |
*/
|
14794 |
-
$user = $this->
|
14795 |
}
|
14796 |
|
14797 |
$this->_user = ( $user instanceof FS_User ) ?
|
@@ -14831,13 +15818,19 @@
|
|
14831 |
* @author Vova Feldman (@svovaf)
|
14832 |
* @since 2.0.0
|
14833 |
*
|
|
|
|
|
14834 |
* @return \FS_User|mixed
|
14835 |
*/
|
14836 |
-
private function
|
|
|
|
|
|
|
|
|
14837 |
$api = $this->get_api_site_scope();
|
14838 |
|
14839 |
$uid = $this->get_anonymous_id();
|
14840 |
-
$request_path = "/users/{$
|
14841 |
|
14842 |
$result = $api->get( $request_path, false, WP_FS__TIME_10_MIN_IN_SEC );
|
14843 |
|
@@ -14993,6 +15986,13 @@
|
|
14993 |
'is_uninstalled' => false,
|
14994 |
) );
|
14995 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14996 |
if ( true === $network_level_or_blog_id ) {
|
14997 |
if ( ! isset( $override_with['sites'] ) ) {
|
14998 |
$params['sites'] = $this->get_sites_for_network_level_optin();
|
@@ -15088,9 +16088,12 @@
|
|
15088 |
if ( ! $is_uninstall ) {
|
15089 |
$fs_user = Freemius::_get_user_by_email( $email );
|
15090 |
if ( is_object( $fs_user ) && ! $this->is_pending_activation() ) {
|
15091 |
-
return $this->
|
|
|
15092 |
false,
|
15093 |
$trial_plan_id,
|
|
|
|
|
15094 |
$sites
|
15095 |
);
|
15096 |
}
|
@@ -15257,6 +16260,9 @@
|
|
15257 |
( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
|
15258 |
$decoded->is_marketing_allowed :
|
15259 |
null ),
|
|
|
|
|
|
|
15260 |
$decoded->install_id,
|
15261 |
$decoded->install_public_key,
|
15262 |
$decoded->install_secret_key,
|
@@ -15270,6 +16276,9 @@
|
|
15270 |
( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
|
15271 |
$decoded->is_marketing_allowed :
|
15272 |
null ),
|
|
|
|
|
|
|
15273 |
$decoded->installs,
|
15274 |
false
|
15275 |
);
|
@@ -15361,7 +16370,7 @@
|
|
15361 |
);
|
15362 |
|
15363 |
if ( is_numeric( $first_install->license_id ) ) {
|
15364 |
-
$this->
|
15365 |
}
|
15366 |
|
15367 |
$this->_admin_notices->remove_sticky( 'connect_account' );
|
@@ -15496,6 +16505,7 @@
|
|
15496 |
fs_request_get( 'user_public_key' ),
|
15497 |
fs_request_get( 'user_secret_key' ),
|
15498 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
|
|
15499 |
$pending_sites_info['blog_ids'],
|
15500 |
$pending_sites_info['license_key'],
|
15501 |
$pending_sites_info['trial_plan_id']
|
@@ -15506,6 +16516,7 @@
|
|
15506 |
fs_request_get( 'user_public_key' ),
|
15507 |
fs_request_get( 'user_secret_key' ),
|
15508 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
|
|
15509 |
fs_request_get( 'install_id' ),
|
15510 |
fs_request_get( 'install_public_key' ),
|
15511 |
fs_request_get( 'install_secret_key' ),
|
@@ -15561,13 +16572,12 @@
|
|
15561 |
* @param string $user_public_key
|
15562 |
* @param string $user_secret_key
|
15563 |
* @param bool|null $is_marketing_allowed
|
|
|
15564 |
* @param number $install_id
|
15565 |
* @param string $install_public_key
|
15566 |
* @param string $install_secret_key
|
15567 |
* @param bool $redirect
|
15568 |
-
* @param bool $auto_install
|
15569 |
-
* redirect (or return a URL) to the account page with a special parameter to
|
15570 |
-
* trigger the auto installation processes.
|
15571 |
*
|
15572 |
* @return string If redirect is `false`, returns the next page the user should be redirected to.
|
15573 |
*/
|
@@ -15576,6 +16586,7 @@
|
|
15576 |
$user_public_key,
|
15577 |
$user_secret_key,
|
15578 |
$is_marketing_allowed,
|
|
|
15579 |
$install_id,
|
15580 |
$install_public_key,
|
15581 |
$install_secret_key,
|
@@ -15617,6 +16628,10 @@
|
|
15617 |
$this->disable_opt_in_notice_and_lock_user();
|
15618 |
}
|
15619 |
|
|
|
|
|
|
|
|
|
15620 |
return $this->setup_account(
|
15621 |
$this->_user,
|
15622 |
$this->_site,
|
@@ -15635,6 +16650,7 @@
|
|
15635 |
* @param string $user_public_key
|
15636 |
* @param string $user_secret_key
|
15637 |
* @param bool|null $is_marketing_allowed
|
|
|
15638 |
* @param array $site_ids
|
15639 |
* @param bool $license_key
|
15640 |
* @param bool $trial_plan_id
|
@@ -15647,6 +16663,7 @@
|
|
15647 |
$user_public_key,
|
15648 |
$user_secret_key,
|
15649 |
$is_marketing_allowed,
|
|
|
15650 |
$site_ids,
|
15651 |
$license_key = false,
|
15652 |
$trial_plan_id = false,
|
@@ -15658,6 +16675,10 @@
|
|
15658 |
$this->disable_opt_in_notice_and_lock_user();
|
15659 |
}
|
15660 |
|
|
|
|
|
|
|
|
|
15661 |
$sites = array();
|
15662 |
foreach ( $site_ids as $site_id ) {
|
15663 |
$sites[] = $this->get_site_info( array( 'blog_id' => $site_id ) );
|
@@ -15676,11 +16697,10 @@
|
|
15676 |
* @param string $user_public_key
|
15677 |
* @param string $user_secret_key
|
15678 |
* @param bool|null $is_marketing_allowed
|
|
|
15679 |
* @param object[] $installs
|
15680 |
* @param bool $redirect
|
15681 |
-
* @param bool $auto_install
|
15682 |
-
* redirect (or return a URL) to the account page with a special parameter to
|
15683 |
-
* trigger the auto installation processes.
|
15684 |
*
|
15685 |
* @return string If redirect is `false`, returns the next page the user should be redirected to.
|
15686 |
*/
|
@@ -15689,6 +16709,7 @@
|
|
15689 |
$user_public_key,
|
15690 |
$user_secret_key,
|
15691 |
$is_marketing_allowed,
|
|
|
15692 |
array $installs,
|
15693 |
$redirect = true,
|
15694 |
$auto_install = false
|
@@ -15699,6 +16720,10 @@
|
|
15699 |
$this->disable_opt_in_notice_and_lock_user();
|
15700 |
}
|
15701 |
|
|
|
|
|
|
|
|
|
15702 |
$install_ids = array();
|
15703 |
|
15704 |
foreach ( $installs as $install ) {
|
@@ -15808,6 +16833,8 @@
|
|
15808 |
*/
|
15809 |
$license_key = fs_request_get( 'license_secret_key' );
|
15810 |
|
|
|
|
|
15811 |
$this->install_with_current_user( $license_key );
|
15812 |
}
|
15813 |
}
|
@@ -15852,7 +16879,7 @@
|
|
15852 |
*
|
15853 |
* @return \FS_Site|object|string If redirect is `false`, returns the next page the user should be redirected to, or the API error object if failed to install. If $setup_account is set to `false`, return the newly created install.
|
15854 |
*/
|
15855 |
-
|
15856 |
FS_User $user,
|
15857 |
$license_key = false,
|
15858 |
$trial_plan_id = false,
|
@@ -15941,6 +16968,10 @@
|
|
15941 |
|
15942 |
if ( ! empty( $license_key ) ) {
|
15943 |
$extra_install_params['license_key'] = $this->apply_filters( 'license_key', $license_key );
|
|
|
|
|
|
|
|
|
15944 |
} else if ( FS_Plugin_Plan::is_valid_id( $trial_plan_id ) ) {
|
15945 |
$extra_install_params['trial_plan_id'] = $trial_plan_id;
|
15946 |
}
|
@@ -15962,7 +16993,7 @@
|
|
15962 |
! $this->is_api_result_object( $result, 'installs' )
|
15963 |
) {
|
15964 |
if ( ! empty( $args['license_key'] ) ) {
|
15965 |
-
// Pass
|
15966 |
$args['license_key'] = $license_key;
|
15967 |
}
|
15968 |
|
@@ -16339,7 +17370,7 @@
|
|
16339 |
*/
|
16340 |
private function add_menu_action() {
|
16341 |
if ( $this->is_activation_mode() ) {
|
16342 |
-
if ( $this->
|
16343 |
$this->override_plugin_menu_with_activation();
|
16344 |
} else {
|
16345 |
/**
|
@@ -16361,7 +17392,7 @@
|
|
16361 |
}
|
16362 |
} else if (
|
16363 |
fs_request_is_action( 'sync_user' ) &&
|
16364 |
-
( ! $this->has_settings_menu() || $this->
|
16365 |
) {
|
16366 |
$this->_handle_account_user_sync();
|
16367 |
}
|
@@ -16609,7 +17640,7 @@
|
|
16609 |
// Didn't ask to hide the pricing page.
|
16610 |
$this->is_page_visible( 'pricing' ) &&
|
16611 |
// Don't have a valid active license or has more than one plan.
|
16612 |
-
( ! $this->is_paying() || ! $this->is_single_plan() )
|
16613 |
);
|
16614 |
}
|
16615 |
|
@@ -16627,12 +17658,13 @@
|
|
16627 |
return false;
|
16628 |
}
|
16629 |
|
16630 |
-
if ( $this->
|
16631 |
-
|
16632 |
-
|
16633 |
-
|
16634 |
-
|
16635 |
-
if ( $is_activation_mode
|
|
|
16636 |
return false;
|
16637 |
}
|
16638 |
|
@@ -16712,17 +17744,19 @@
|
|
16712 |
}
|
16713 |
|
16714 |
if ( $add_submenu_items ) {
|
16715 |
-
|
16716 |
-
|
16717 |
-
$this->
|
16718 |
-
|
16719 |
-
|
16720 |
-
|
16721 |
-
|
16722 |
-
|
16723 |
-
|
16724 |
-
|
16725 |
-
|
|
|
|
|
16726 |
|
16727 |
if ( $this->has_addons() ) {
|
16728 |
$this->add_submenu_item(
|
@@ -16741,7 +17775,7 @@
|
|
16741 |
if ( $add_submenu_items ||
|
16742 |
( $is_activation_mode && $this->is_only_premium() && $this->is_admin_page( 'pricing' ) )
|
16743 |
) {
|
16744 |
-
if (
|
16745 |
$show_pricing = (
|
16746 |
$this->is_submenu_item_visible( 'pricing' ) &&
|
16747 |
$this->is_pricing_page_visible()
|
@@ -17106,6 +18140,24 @@
|
|
17106 |
|
17107 |
#endregion ------------------------------------------------------------------
|
17108 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17109 |
|
17110 |
#--------------------------------------------------------------------------------
|
17111 |
#region Actions / Hooks / Filters
|
@@ -17482,37 +18534,44 @@
|
|
17482 |
private function _store_site( $store = true, $network_level_or_blog_id = null, FS_Site $site = null ) {
|
17483 |
$this->_logger->entrance();
|
17484 |
|
17485 |
-
if (
|
|
|
|
|
|
|
|
|
17486 |
$this->_logger->error( "Empty install ID, can't store site." );
|
17487 |
|
17488 |
return;
|
17489 |
}
|
17490 |
|
17491 |
-
$site_clone
|
17492 |
-
$encrypted_site = clone $site_clone;
|
17493 |
|
17494 |
$sites = self::get_all_sites( $this->_module_type, $network_level_or_blog_id );
|
17495 |
|
17496 |
-
$
|
|
|
17497 |
|
17498 |
-
|
17499 |
-
|
17500 |
-
|
17501 |
-
|
17502 |
-
|
17503 |
-
|
17504 |
-
|
17505 |
-
|
17506 |
-
|
17507 |
-
|
17508 |
-
|
17509 |
-
|
17510 |
-
|
17511 |
-
|
17512 |
-
|
|
|
|
|
|
|
17513 |
}
|
17514 |
|
17515 |
-
$sites[ $this->_slug ] = $
|
17516 |
|
17517 |
$this->set_account_option( 'sites', $sites, $store, $network_level_or_blog_id );
|
17518 |
}
|
@@ -17722,6 +18781,10 @@
|
|
17722 |
* @since 2.2.4
|
17723 |
*/
|
17724 |
private function purge_valid_user_licenses_cache() {
|
|
|
|
|
|
|
|
|
17725 |
$this->get_api_user_scope()->purge_cache( $this->get_valid_user_licenses_endpoint() );
|
17726 |
}
|
17727 |
|
@@ -18380,6 +19443,88 @@
|
|
18380 |
return self::is_active_valid_license( $this->_license );
|
18381 |
}
|
18382 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18383 |
/**
|
18384 |
* Check if a given license is active & valid (not expired).
|
18385 |
*
|
@@ -18694,7 +19839,7 @@
|
|
18694 |
} else {
|
18695 |
// Authentication params are broken.
|
18696 |
$this->_admin_notices->add(
|
18697 |
-
$this->get_text_inline( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.', 'wrong-authentication-param-message' ),
|
18698 |
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
|
18699 |
'error'
|
18700 |
);
|
@@ -18861,12 +20006,32 @@
|
|
18861 |
$this->get_network_install_blog_id()
|
18862 |
);
|
18863 |
} else {
|
18864 |
-
if ( is_object( $this->_license )
|
18865 |
-
|
18866 |
-
$
|
18867 |
-
|
18868 |
-
|
18869 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18870 |
}
|
18871 |
}
|
18872 |
|
@@ -18890,7 +20055,7 @@
|
|
18890 |
|
18891 |
$hmm_text = $this->get_text_x_inline( 'Hmm', 'something somebody says when they are thinking about what you have just said.', 'hmm' ) . '...';
|
18892 |
|
18893 |
-
if ( $this->has_paid_plan() ) {
|
18894 |
switch ( $plan_change ) {
|
18895 |
case 'none':
|
18896 |
if ( ! $background && is_admin() ) {
|
@@ -18983,6 +20148,9 @@
|
|
18983 |
'license_expired',
|
18984 |
$hmm_text
|
18985 |
);
|
|
|
|
|
|
|
18986 |
$this->_admin_notices->remove_sticky( 'plan_upgraded' );
|
18987 |
break;
|
18988 |
case 'trial_started':
|
@@ -19037,7 +20205,8 @@
|
|
19037 |
* @author Vova Feldman (@svovaf)
|
19038 |
* @since 1.0.5
|
19039 |
*
|
19040 |
-
* @param bool
|
|
|
19041 |
*/
|
19042 |
protected function _activate_license( $background = false, $premium_license = null ) {
|
19043 |
$this->_logger->entrance();
|
@@ -19231,7 +20400,11 @@
|
|
19231 |
|
19232 |
if ( $show_notice ) {
|
19233 |
$this->_admin_notices->add(
|
19234 |
-
sprintf( $this->
|
|
|
|
|
|
|
|
|
19235 |
$this->get_text_inline( 'O.K', 'ok' )
|
19236 |
);
|
19237 |
}
|
@@ -19844,7 +21017,7 @@
|
|
19844 |
|
19845 |
$api = $this->get_api_site_or_plugin_scope();
|
19846 |
|
19847 |
-
$path = $this->add_show_pending( '/addons.json?enriched=true' );
|
19848 |
|
19849 |
/**
|
19850 |
* @since 1.2.1
|
@@ -20038,6 +21211,39 @@
|
|
20038 |
return true;
|
20039 |
}
|
20040 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20041 |
/**
|
20042 |
* Handle user name update.
|
20043 |
*
|
@@ -20151,7 +21357,7 @@
|
|
20151 |
* @return string
|
20152 |
*/
|
20153 |
function get_after_activation_url( $filter, $params = array(), $network = null ) {
|
20154 |
-
if ( $this->
|
20155 |
( fs_request_has( 'pending_activation' ) ||
|
20156 |
// For cases when the first time path is set, even though it's a WP.org theme.
|
20157 |
fs_request_get_bool( $this->get_unique_affix() . '_show_optin' ) )
|
@@ -20206,8 +21412,9 @@
|
|
20206 |
// Alias.
|
20207 |
$oops_text = $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...';
|
20208 |
|
20209 |
-
$is_network_action
|
20210 |
-
$blog_id
|
|
|
20211 |
|
20212 |
if ( is_numeric( $blog_id ) ) {
|
20213 |
$this->switch_to_blog( $blog_id );
|
@@ -20219,7 +21426,7 @@
|
|
20219 |
case 'opt_in':
|
20220 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
20221 |
|
20222 |
-
if ( $
|
20223 |
if ( $is_network_action && ! empty( $blog_id ) ) {
|
20224 |
if ( ! $this->is_registered() ) {
|
20225 |
$this->install_with_user(
|
@@ -20242,7 +21449,7 @@
|
|
20242 |
case 'toggle_tracking':
|
20243 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
20244 |
|
20245 |
-
if ( $
|
20246 |
if ( $is_network_action && ! empty( $blog_id ) ) {
|
20247 |
if ( $this->is_registered() ) {
|
20248 |
if ( $this->is_tracking_prohibited() ) {
|
@@ -20277,8 +21484,20 @@
|
|
20277 |
case 'delete_account':
|
20278 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
20279 |
|
20280 |
-
|
20281 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20282 |
$this->delete_network_account_event();
|
20283 |
} else {
|
20284 |
$this->delete_account_event();
|
@@ -20294,7 +21513,12 @@
|
|
20294 |
} else {
|
20295 |
if ( $this->is_addon_activated( $plugin_id ) ) {
|
20296 |
$fs_addon = self::get_instance_by_id( $plugin_id );
|
20297 |
-
|
|
|
|
|
|
|
|
|
|
|
20298 |
|
20299 |
fs_redirect( $this->_get_admin_page_url( 'account' ) );
|
20300 |
}
|
@@ -20894,6 +22118,26 @@
|
|
20894 |
return $this->_plugin_api;
|
20895 |
}
|
20896 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20897 |
/**
|
20898 |
* Get site API scope object (fallback to public plugin scope when not registered).
|
20899 |
*
|
@@ -21227,7 +22471,7 @@
|
|
21227 |
function _show_theme_activation_optin_dialog() {
|
21228 |
fs_enqueue_local_style( 'fs_connect', '/admin/connect.css' );
|
21229 |
|
21230 |
-
add_action( 'admin_footer
|
21231 |
}
|
21232 |
|
21233 |
/**
|
@@ -21235,6 +22479,12 @@
|
|
21235 |
* @since 1.2.2
|
21236 |
*/
|
21237 |
function _add_fs_theme_activation_dialog() {
|
|
|
|
|
|
|
|
|
|
|
|
|
21238 |
$vars = array( 'id' => $this->_module_id );
|
21239 |
fs_require_once_template( 'connect.php', $vars );
|
21240 |
}
|
@@ -21322,7 +22572,7 @@
|
|
21322 |
$add_upgrade_link = (
|
21323 |
$add_action_links ||
|
21324 |
( $is_activation_mode && $this->is_only_premium() )
|
21325 |
-
) && ! WP_FS__DEMO_MODE;
|
21326 |
|
21327 |
$add_addons_link = ( $add_action_links && $this->has_addons() );
|
21328 |
|
@@ -21411,6 +22661,20 @@
|
|
21411 |
|
21412 |
$this->_logger->entrance();
|
21413 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21414 |
if ( fs_is_network_admin() ) {
|
21415 |
if ( ! $this->_is_network_active ) {
|
21416 |
// Don't add tracking links when browsing the network WP Admin and the plugin is not network active.
|
@@ -21461,6 +22725,10 @@
|
|
21461 |
return;
|
21462 |
}
|
21463 |
|
|
|
|
|
|
|
|
|
21464 |
$link_text_id = '';
|
21465 |
$url = '#';
|
21466 |
|
@@ -21470,8 +22738,6 @@
|
|
21470 |
} else {
|
21471 |
$link_text_id = $this->get_text_inline( 'Opt In', 'opt-in' );
|
21472 |
}
|
21473 |
-
|
21474 |
-
add_action( 'admin_footer', array( &$this, '_add_optout_dialog' ) );
|
21475 |
} else if ( $this->is_anonymous() || $this->is_activation_mode() ) {
|
21476 |
/**
|
21477 |
* Show opt-in link only if skipped or in activation mode.
|
@@ -21488,6 +22754,8 @@
|
|
21488 |
$url = $this->get_activation_url( $params );
|
21489 |
}
|
21490 |
|
|
|
|
|
21491 |
if ( ! empty( $link_text_id ) && $this->is_plugin() && self::is_plugins_page() ) {
|
21492 |
$this->add_plugin_action_link(
|
21493 |
$link_text_id,
|
@@ -22177,7 +23445,7 @@
|
|
22177 |
function _tabs_capture() {
|
22178 |
$this->_logger->entrance();
|
22179 |
|
22180 |
-
if ( ! $this->
|
22181 |
! $this->is_matching_url( $this->main_menu_url() )
|
22182 |
) {
|
22183 |
return;
|
@@ -22232,7 +23500,7 @@
|
|
22232 |
function _store_tabs_styles() {
|
22233 |
$this->_logger->entrance();
|
22234 |
|
22235 |
-
if ( ! $this->
|
22236 |
! $this->is_matching_url( $this->main_menu_url() )
|
22237 |
) {
|
22238 |
return;
|
@@ -22306,18 +23574,23 @@
|
|
22306 |
return false;
|
22307 |
}
|
22308 |
|
22309 |
-
if (
|
22310 |
// Only add tabs to themes for now.
|
22311 |
return false;
|
22312 |
}
|
22313 |
|
22314 |
-
if ( ! $this->has_paid_plan() && ! $this->has_addons() ) {
|
22315 |
// Only add tabs to monetizing themes.
|
22316 |
return false;
|
22317 |
}
|
22318 |
|
22319 |
-
if ( ! $this->
|
22320 |
-
// Only add tabs if browsing one of the
|
|
|
|
|
|
|
|
|
|
|
22321 |
return false;
|
22322 |
}
|
22323 |
|
@@ -23004,8 +24277,8 @@
|
|
23004 |
}
|
23005 |
|
23006 |
$modules = array_merge(
|
23007 |
-
array_values( self
|
23008 |
-
array_values( self
|
23009 |
);
|
23010 |
|
23011 |
foreach ( $modules as $module ) {
|
@@ -23110,10 +24383,45 @@
|
|
23110 |
*
|
23111 |
* @author Vova Feldman (@svovaf)
|
23112 |
*/
|
23113 |
-
self::shoot_ajax_success( array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23114 |
}
|
23115 |
|
23116 |
-
|
23117 |
}
|
23118 |
|
23119 |
/**
|
@@ -23149,8 +24457,8 @@
|
|
23149 |
}
|
23150 |
|
23151 |
$modules = array_merge(
|
23152 |
-
array_values( self
|
23153 |
-
array_values( self
|
23154 |
);
|
23155 |
|
23156 |
foreach ( $modules as $key => $module ) {
|
164 |
*/
|
165 |
private $_has_addons;
|
166 |
|
167 |
+
/**
|
168 |
+
* @since 2.4.5
|
169 |
+
* @var string Navigation type: 'menu' or 'tabs'.
|
170 |
+
*/
|
171 |
+
private $_navigation;
|
172 |
+
|
173 |
+
const NAVIGATION_MENU = 'menu';
|
174 |
+
const NAVIGATION_TABS = 'tabs';
|
175 |
+
|
176 |
/**
|
177 |
* @since 1.1.6
|
178 |
* @var string[]bool.
|
343 |
*/
|
344 |
private $_dynamically_added_top_level_page_hook_name = '';
|
345 |
|
346 |
+
/**
|
347 |
+
* @author Leo Fajardo (@leorw)
|
348 |
+
* @since 2.3.1
|
349 |
+
*
|
350 |
+
* @var bool
|
351 |
+
*/
|
352 |
+
private $is_whitelabeled;
|
353 |
+
|
354 |
#region Uninstall Reasons IDs
|
355 |
|
356 |
const REASON_NO_LONGER_NEEDED = 1;
|
501 |
);
|
502 |
|
503 |
if ( 'true' === fs_request_get( 'fs_clear_api_cache' ) ||
|
504 |
+
fs_request_is_action( 'restart_freemius' )
|
505 |
) {
|
506 |
FS_Api::clear_cache();
|
507 |
$this->_cache->clear();
|
508 |
}
|
509 |
|
510 |
+
$this->register_constructor_hooks();
|
511 |
|
512 |
/**
|
513 |
* Starting from version 2.0.0, `FS_Site` entities no longer have the `plan` property and have `plan_id`
|
719 |
$this->_menu->has_menu();
|
720 |
}
|
721 |
|
722 |
+
/**
|
723 |
+
* If `true` the opt-in should be shown as a modal dialog box on the themes.php page. WordPress.org themes guidelines prohibit from redirecting the user from the themes.php page after activating a theme.
|
724 |
+
*
|
725 |
+
* @author Vova Feldman (@svovaf)
|
726 |
+
* @since 2.4.5
|
727 |
+
*
|
728 |
+
* @return bool
|
729 |
+
*/
|
730 |
+
function show_opt_in_on_themes_page() {
|
731 |
+
if ( ! $this->is_free_wp_org_theme() ) {
|
732 |
+
return false;
|
733 |
+
}
|
734 |
+
|
735 |
+
if ( ! $this->has_settings_menu() ) {
|
736 |
+
return true;
|
737 |
+
}
|
738 |
+
|
739 |
+
return $this->show_settings_with_tabs();
|
740 |
+
}
|
741 |
+
|
742 |
+
/**
|
743 |
+
* If `true` the opt-in should be shown on the product's main setting page.
|
744 |
+
*
|
745 |
+
* @author Vova Feldman (@svovaf)
|
746 |
+
* @since 2.4.5
|
747 |
+
*
|
748 |
+
* @return bool
|
749 |
+
*
|
750 |
+
* @uses show_opt_in_on_themes_page();
|
751 |
+
*/
|
752 |
+
function show_opt_in_on_setting_page() {
|
753 |
+
return ! $this->show_opt_in_on_themes_page();
|
754 |
+
}
|
755 |
+
|
756 |
+
/**
|
757 |
+
* If `true` the settings should be shown using tabs.
|
758 |
+
*
|
759 |
+
* @author Vova Feldman (@svovaf)
|
760 |
+
* @since 2.4.5
|
761 |
+
*
|
762 |
+
* @return bool
|
763 |
+
*/
|
764 |
+
function show_settings_with_tabs() {
|
765 |
+
return ( self::NAVIGATION_TABS === $this->_navigation );
|
766 |
+
}
|
767 |
+
|
768 |
/**
|
769 |
* Check if the context module is free wp.org theme.
|
770 |
*
|
797 |
* @since 1.2.2.7 Even if the menu item was specified to be hidden, when it is the context page, then show the submenu item so the user will have the right context page.
|
798 |
*
|
799 |
* @param string $slug
|
800 |
+
* @param bool $is_tabs_visibility_check This is used to decide if the associated tab should be shown or hidden.
|
|
|
801 |
*
|
802 |
* @return bool
|
803 |
*/
|
804 |
+
function is_submenu_item_visible( $slug, $is_tabs_visibility_check = false ) {
|
805 |
if ( $this->is_admin_page( $slug ) ) {
|
806 |
/**
|
807 |
* It is the current context page, so show the submenu item
|
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).
|
1042 |
}
|
1043 |
|
1044 |
if ( isset( $this->_storage->subscription ) && is_object( $this->_storage->subscription ) ) {
|
1045 |
+
$this->_storage->subscriptions = array( fs_get_entity( $this->_storage->subscription, FS_Subscription::get_class_name() ) );
|
1046 |
}
|
1047 |
}
|
1048 |
|
1515 |
* @author Vova Feldman (@svovaf)
|
1516 |
* @since 1.0.9
|
1517 |
*/
|
1518 |
+
private function register_constructor_hooks() {
|
1519 |
$this->_logger->entrance();
|
1520 |
|
1521 |
if ( is_admin() ) {
|
1522 |
+
add_action( 'admin_init', array( &$this, '_hook_action_links_and_register_account_hooks' ) );
|
1523 |
|
1524 |
if ( $this->is_plugin() ) {
|
1525 |
if ( self::is_plugin_install_page() && true !== fs_request_get_bool( 'fs_allow_updater_and_dialog' ) ) {
|
1560 |
} else {
|
1561 |
add_action( 'after_switch_theme', array( &$this, '_activate_theme_event_hook' ), 10, 2 );
|
1562 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1563 |
add_action( 'admin_footer', array( &$this, '_style_premium_theme' ) );
|
1564 |
}
|
1565 |
|
1579 |
*
|
1580 |
* @author Vova Feldman (@svovaf)
|
1581 |
*/
|
1582 |
+
if ( $this->is_plugin() &&
|
1583 |
+
$this->is_activation_mode( false ) &&
|
1584 |
+
0 == did_action( 'plugins_loaded' )
|
1585 |
+
) {
|
1586 |
add_action( 'plugins_loaded', array( &$this, '_plugins_loaded' ) );
|
1587 |
} else {
|
1588 |
// If was activated before, then it was already loaded before.
|
1639 |
add_action( 'admin_init', array( &$this, '_add_license_activation' ) );
|
1640 |
add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
|
1641 |
add_action( 'admin_init', array( &$this, '_add_beta_mode_update_handler' ) );
|
1642 |
+
add_action( 'admin_init', array( &$this, '_add_user_change_option' ) );
|
1643 |
|
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' ) );
|
1685 |
}
|
1686 |
}
|
1687 |
|
1688 |
+
/**
|
1689 |
+
* Register the required hooks right after the settings parse is completed.
|
1690 |
+
*
|
1691 |
+
* @author Vova Feldman (@svovaf)
|
1692 |
+
* @since 2.3.1
|
1693 |
+
*/
|
1694 |
+
private function register_after_settings_parse_hooks() {
|
1695 |
+
if ( is_admin() &&
|
1696 |
+
$this->is_theme() &&
|
1697 |
+
$this->is_premium() &&
|
1698 |
+
! $this->has_active_valid_license()
|
1699 |
+
) {
|
1700 |
+
$this->add_ajax_action(
|
1701 |
+
'delete_theme_update_data',
|
1702 |
+
array( &$this, '_delete_theme_update_data_action' )
|
1703 |
+
);
|
1704 |
+
}
|
1705 |
+
|
1706 |
+
if ( $this->show_settings_with_tabs() ) {
|
1707 |
+
/**
|
1708 |
+
* Include the required hooks to capture the theme settings' page tabs
|
1709 |
+
* and cache them.
|
1710 |
+
*
|
1711 |
+
* @author Vova Feldman (@svovaf)
|
1712 |
+
* @since 1.2.2.7
|
1713 |
+
*/
|
1714 |
+
if ( ! $this->_cache->has_valid( 'tabs' ) ) {
|
1715 |
+
add_action( 'admin_footer', array( &$this, '_tabs_capture' ) );
|
1716 |
+
// Add license activation AJAX callback.
|
1717 |
+
$this->add_ajax_action( 'store_tabs', array( &$this, '_store_tabs_ajax_action' ) );
|
1718 |
+
|
1719 |
+
add_action( 'admin_enqueue_scripts', array( &$this, '_store_tabs_styles' ), 9999999 );
|
1720 |
+
}
|
1721 |
+
|
1722 |
+
add_action(
|
1723 |
+
'admin_footer',
|
1724 |
+
array( &$this, '_add_freemius_tabs' ),
|
1725 |
+
/**
|
1726 |
+
* The tabs JS code must be executed after the tabs capture logic (_tabs_capture()).
|
1727 |
+
* That's why the priority is 11 while the tabs capture logic is added
|
1728 |
+
* with priority 10.
|
1729 |
+
*
|
1730 |
+
* @author Vova Feldman (@svovaf)
|
1731 |
+
*/
|
1732 |
+
11
|
1733 |
+
);
|
1734 |
+
}
|
1735 |
+
|
1736 |
+
if ( ! self::is_ajax() ) {
|
1737 |
+
if ( ! $this->is_addon() || $this->is_only_premium() ) {
|
1738 |
+
add_action(
|
1739 |
+
( $this->_is_network_active && fs_is_network_admin() ? 'network_' : '' ) . 'admin_menu',
|
1740 |
+
array( &$this, '_prepare_admin_menu' ),
|
1741 |
+
WP_FS__LOWEST_PRIORITY
|
1742 |
+
);
|
1743 |
+
}
|
1744 |
+
}
|
1745 |
+
}
|
1746 |
+
|
1747 |
/**
|
1748 |
* Makes Freemius-related updates unavailable on the "Add Plugins" admin page (/plugin-install.php) so that
|
1749 |
* they won't interfere with the .org plugins' functionalities on that page (e.g. updating of a .org plugin).
|
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() ) {
|
2012 |
$this->hook_plugin_action_links();
|
2348 |
|
2349 |
if ( ! isset( $caller_map[ $caller_file_hash ] ) ) {
|
2350 |
foreach ( $all_plugins_paths as $plugin_path ) {
|
2351 |
+
if ( empty( $plugin_path ) ) {
|
2352 |
+
continue;
|
2353 |
+
}
|
2354 |
+
|
2355 |
if ( false !== strpos( $caller_file_path, fs_normalize_path( dirname( $plugin_path ) . '/' ) ) ) {
|
2356 |
$caller_map[ $caller_file_hash ] = fs_normalize_path( $plugin_path );
|
2357 |
break;
|
3030 |
* @return bool
|
3031 |
*/
|
3032 |
function is_activation_page() {
|
3033 |
+
if ( $this->_menu->is_activation_page( $this->show_opt_in_on_themes_page() ) ) {
|
3034 |
return true;
|
3035 |
}
|
3036 |
|
4732 |
|
4733 |
$this->parse_settings( $plugin_info );
|
4734 |
|
4735 |
+
$this->register_after_settings_parse_hooks();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4736 |
|
4737 |
if ( $this->should_stop_execution() ) {
|
4738 |
return;
|
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.
|
5408 |
}
|
5409 |
}
|
5410 |
|
5411 |
+
/**
|
5412 |
+
* @author Vova Feldman (@svovaf)
|
5413 |
+
* @since 2.3.2
|
5414 |
+
*
|
5415 |
+
* @return bool
|
5416 |
+
*/
|
5417 |
+
function is_extensions_tracking_allowed() {
|
5418 |
+
return (true === $this->_storage->get( 'is_extensions_tracking_allowed', true ) );
|
5419 |
+
}
|
5420 |
+
|
5421 |
+
/**
|
5422 |
+
* @author Vova Feldman (@svovaf)
|
5423 |
+
* @since 2.3.2
|
5424 |
+
*/
|
5425 |
+
function _update_tracking_permission_callback() {
|
5426 |
+
$this->_logger->entrance();
|
5427 |
+
|
5428 |
+
$this->check_ajax_referer( 'update_tracking_permission' );
|
5429 |
+
|
5430 |
+
$is_enabled = fs_request_get_bool( 'is_enabled', null );
|
5431 |
+
|
5432 |
+
if ( ! is_bool( $is_enabled ) ) {
|
5433 |
+
self::shoot_ajax_failure();
|
5434 |
+
}
|
5435 |
+
|
5436 |
+
$permission = fs_request_get( 'permission' );
|
5437 |
+
|
5438 |
+
switch ( $permission ) {
|
5439 |
+
case 'extensions':
|
5440 |
+
$this->update_extensions_tracking_flag( $is_enabled );
|
5441 |
+
break;
|
5442 |
+
default:
|
5443 |
+
$permission = 'no_match';
|
5444 |
+
}
|
5445 |
+
|
5446 |
+
if ( 'no_match' === $permission ) {
|
5447 |
+
self::shoot_ajax_failure();
|
5448 |
+
}
|
5449 |
+
|
5450 |
+
self::shoot_ajax_success( array(
|
5451 |
+
'permissions' => array(
|
5452 |
+
$permission => $is_enabled,
|
5453 |
+
)
|
5454 |
+
) );
|
5455 |
+
}
|
5456 |
+
|
5457 |
+
/**
|
5458 |
+
* @author Leo Fajardo (@leorw)
|
5459 |
+
* @since 2.3.2
|
5460 |
+
*
|
5461 |
+
* @param bool $is_enabled
|
5462 |
+
*/
|
5463 |
+
private function update_extensions_tracking_flag( $is_enabled ) {
|
5464 |
+
$this->_storage->store( 'is_extensions_tracking_allowed', $is_enabled );
|
5465 |
+
}
|
5466 |
+
|
5467 |
/**
|
5468 |
* Parse plugin's settings (as defined by the plugin dev).
|
5469 |
*
|
5540 |
'is_live' => $this->get_bool_option( $plugin_info, 'is_live', true ),
|
5541 |
'affiliate_moderation' => $this->get_option( $plugin_info, 'has_affiliation' ),
|
5542 |
'bundle_id' => $this->get_option( $plugin_info, 'bundle_id', null ),
|
5543 |
+
'bundle_public_key' => $this->get_option( $plugin_info, 'bundle_public_key', null ),
|
5544 |
) );
|
5545 |
|
5546 |
if ( $plugin->is_updated() ) {
|
5612 |
|
5613 |
$this->_is_trial_require_payment = $this->get_bool_option( $plugin_info['trial'], 'is_require_payment', false );
|
5614 |
}
|
5615 |
+
|
5616 |
+
$this->_navigation = $this->get_option(
|
5617 |
+
$plugin_info,
|
5618 |
+
'navigation',
|
5619 |
+
$this->is_free_wp_org_theme() ?
|
5620 |
+
self::NAVIGATION_TABS :
|
5621 |
+
self::NAVIGATION_MENU
|
5622 |
+
);
|
5623 |
}
|
5624 |
|
5625 |
/**
|
5972 |
* @return Freemius[]
|
5973 |
*/
|
5974 |
function get_installed_addons() {
|
5975 |
+
if ( $this->is_addon() ) {
|
5976 |
+
// Add-on cannot have add-ons.
|
5977 |
+
return array();
|
5978 |
+
}
|
5979 |
+
|
5980 |
$installed_addons = array();
|
5981 |
+
|
5982 |
foreach ( self::$_instances as $instance ) {
|
5983 |
+
if ( $instance->is_addon_of( $this->_plugin->id ) ) {
|
5984 |
+
$installed_addons[] = $instance;
|
|
|
|
|
5985 |
}
|
5986 |
}
|
5987 |
|
6031 |
* @return bool
|
6032 |
*/
|
6033 |
function is_addon() {
|
6034 |
+
return (
|
6035 |
+
isset( $this->_plugin->parent_plugin_id ) &&
|
6036 |
+
is_numeric( $this->_plugin->parent_plugin_id )
|
6037 |
+
);
|
6038 |
+
}
|
6039 |
+
|
6040 |
+
/**
|
6041 |
+
* @author Vova Feldman (@svovaf)
|
6042 |
+
* @since 2.3.2
|
6043 |
+
*
|
6044 |
+
* @param number $parent_product_id
|
6045 |
+
*
|
6046 |
+
* @return bool
|
6047 |
+
*/
|
6048 |
+
function is_addon_of( $parent_product_id ) {
|
6049 |
+
return (
|
6050 |
+
$this->is_addon() &&
|
6051 |
+
$parent_product_id == $this->_plugin->parent_plugin_id
|
6052 |
+
);
|
6053 |
}
|
6054 |
|
6055 |
/**
|
6806 |
} else {
|
6807 |
$this->sync_install();
|
6808 |
}
|
6809 |
+
|
6810 |
+
$this->maybe_sync_install_user();
|
6811 |
}
|
6812 |
}
|
6813 |
}
|
7020 |
} else {
|
7021 |
$this->sync_install( array(), true );
|
7022 |
}
|
7023 |
+
|
7024 |
+
$this->maybe_sync_install_user();
|
7025 |
}
|
7026 |
}
|
7027 |
|
7116 |
|
7117 |
$this->_add_upgrade_action_link();
|
7118 |
|
7119 |
+
if ( ! ( ! $this->_is_network_active && fs_is_network_admin() ) &&
|
|
|
7120 |
(
|
7121 |
( true === $this->_storage->require_license_activation ) ||
|
7122 |
// Not registered nor anonymous.
|
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.
|
7193 |
}
|
7194 |
}
|
7195 |
|
7196 |
+
if ( $this->show_opt_in_on_themes_page() &&
|
7197 |
+
$this->is_activation_page()
|
7198 |
) {
|
7199 |
$this->_show_theme_activation_optin_dialog();
|
7200 |
}
|
7959 |
*
|
7960 |
* @return array
|
7961 |
*/
|
7962 |
+
function get_sites_for_network_level_optin() {
|
7963 |
$sites = array();
|
7964 |
$all_sites = self::get_sites();
|
7965 |
|
8089 |
foreach ( $sites as $site ) {
|
8090 |
$blog_id = self::get_site_blog_id( $site );
|
8091 |
|
8092 |
+
if ( $this->is_site_delegated_connection( $blog_id ) ) {
|
8093 |
+
continue;
|
8094 |
+
}
|
8095 |
+
|
8096 |
$install_id = $this->_delete_site( true, $blog_id );
|
8097 |
|
8098 |
// Clear all storage data.
|
8870 |
$include_themes = true,
|
8871 |
$include_blog_data = true
|
8872 |
) {
|
8873 |
+
if ( $this->is_extensions_tracking_allowed() ) {
|
8874 |
+
if ( ! defined( 'WP_FS__TRACK_PLUGINS' ) || false !== WP_FS__TRACK_PLUGINS ) {
|
8875 |
+
/**
|
8876 |
+
* @since 1.1.8 Also send plugin updates.
|
8877 |
+
*/
|
8878 |
+
if ( $include_plugins && ! isset( $override['plugins'] ) ) {
|
8879 |
+
$plugins = $this->get_plugins_data_for_api();
|
8880 |
+
if ( ! empty( $plugins ) ) {
|
8881 |
+
$override['plugins'] = $plugins;
|
8882 |
+
}
|
8883 |
}
|
8884 |
}
|
|
|
8885 |
|
8886 |
+
if ( ! defined( 'WP_FS__TRACK_THEMES' ) || false !== WP_FS__TRACK_THEMES ) {
|
8887 |
+
/**
|
8888 |
+
* @since 1.1.8 Also send themes updates.
|
8889 |
+
*/
|
8890 |
+
if ( $include_themes && ! isset( $override['themes'] ) ) {
|
8891 |
+
$themes = $this->get_themes_data_for_api();
|
8892 |
+
if ( ! empty( $themes ) ) {
|
8893 |
+
$override['themes'] = $themes;
|
8894 |
+
}
|
8895 |
}
|
8896 |
}
|
8897 |
}
|
9247 |
}
|
9248 |
}
|
9249 |
|
9250 |
+
/**
|
9251 |
+
* Syncs the install owner's data if needed (i.e., if the install owner is different from the loaded user).
|
9252 |
+
*
|
9253 |
+
* @author Leo Fajardo (@leorw)
|
9254 |
+
* @since 2.3.2
|
9255 |
+
*/
|
9256 |
+
private function maybe_sync_install_user() {
|
9257 |
+
if ( $this->_user->id == $this->_site->user_id ) {
|
9258 |
+
return;
|
9259 |
+
}
|
9260 |
+
|
9261 |
+
// Fetch user data and store if found.
|
9262 |
+
$this->sync_user_by_current_install();
|
9263 |
+
}
|
9264 |
+
|
9265 |
/**
|
9266 |
* Update install only if changed.
|
9267 |
*
|
9545 |
$fs = self::get_instance_by_file( $plugin_file );
|
9546 |
|
9547 |
if ( is_object( $fs ) ) {
|
9548 |
+
$fs->remove_sdk_reference();
|
9549 |
+
|
9550 |
self::require_plugin_essentials();
|
9551 |
|
9552 |
if ( is_plugin_active( $fs->_free_plugin_basename ) ||
|
9598 |
* @author Vova Feldman (@svovaf)
|
9599 |
* @since 1.0.1
|
9600 |
*
|
9601 |
+
* @param bool $reparse_plugin_metadata
|
9602 |
+
*
|
9603 |
* @return array
|
9604 |
*/
|
9605 |
+
function get_plugin_data( $reparse_plugin_metadata = false ) {
|
9606 |
+
if ( ! isset( $this->_plugin_data ) || $reparse_plugin_metadata ) {
|
9607 |
self::require_plugin_essentials();
|
9608 |
|
9609 |
if ( $this->is_plugin() ) {
|
9708 |
null;
|
9709 |
}
|
9710 |
|
9711 |
+
/**
|
9712 |
+
* @author Vova Feldman (@svovaf)
|
9713 |
+
* @since 2.3.1
|
9714 |
+
*
|
9715 |
+
* @return string|null Bundle public key.
|
9716 |
+
*/
|
9717 |
+
function get_bundle_public_key() {
|
9718 |
+
return isset( $this->_plugin->bundle_public_key ) ?
|
9719 |
+
$this->_plugin->bundle_public_key :
|
9720 |
+
null;
|
9721 |
+
}
|
9722 |
+
|
9723 |
/**
|
9724 |
* @author Vova Feldman (@svovaf)
|
9725 |
* @since 1.2.1.5
|
9742 |
$this->_plugin->id;
|
9743 |
}
|
9744 |
|
9745 |
+
/**
|
9746 |
+
* @author Vova Feldman (@svovaf)
|
9747 |
+
* @since 2.3.1
|
9748 |
+
*
|
9749 |
+
* @return string
|
9750 |
+
*/
|
9751 |
+
function get_usage_tracking_terms_url() {
|
9752 |
+
return $this->apply_filters(
|
9753 |
+
'usage_tracking_terms_url',
|
9754 |
+
"https://freemius.com/wordpress/usage-tracking/{$this->_plugin->id}/{$this->_slug}/"
|
9755 |
+
);
|
9756 |
+
}
|
9757 |
+
|
9758 |
+
/**
|
9759 |
+
* @author Vova Feldman (@svovaf)
|
9760 |
+
* @since 2.3.1
|
9761 |
+
*
|
9762 |
+
* @return string
|
9763 |
+
*/
|
9764 |
+
function get_eula_url() {
|
9765 |
+
return $this->apply_filters(
|
9766 |
+
'eula_url',
|
9767 |
+
"https://freemius.com/terms/{$this->_plugin->id}/{$this->_slug}/"
|
9768 |
+
);
|
9769 |
+
}
|
9770 |
+
|
9771 |
/**
|
9772 |
* @author Vova Feldman (@svovaf)
|
9773 |
* @since 1.0.1
|
9867 |
* @author Vova Feldman (@svovaf)
|
9868 |
* @since 1.0.0
|
9869 |
*
|
9870 |
+
* @param bool $reparse_plugin_metadata
|
9871 |
+
*
|
9872 |
* @return string
|
9873 |
*/
|
9874 |
+
function get_plugin_version( $reparse_plugin_metadata = false ) {
|
9875 |
$this->_logger->entrance();
|
9876 |
|
9877 |
+
$plugin_data = $this->get_plugin_data( $reparse_plugin_metadata );
|
9878 |
|
9879 |
$this->_logger->departure( 'Version = ' . $plugin_data['Version'] );
|
9880 |
|
9999 |
* @return array[number]FS_User
|
10000 |
*/
|
10001 |
static function get_all_users() {
|
10002 |
+
$users = self::maybe_get_entities_account_option( 'users', array() );
|
10003 |
|
10004 |
if ( ! is_array( $users ) ) {
|
10005 |
$users = array();
|
10043 |
$option_name = $module_type . '_' . $option_name;
|
10044 |
}
|
10045 |
|
10046 |
+
return self::maybe_get_entities_account_option( $option_name, array(), $network_level_or_blog_id );
|
10047 |
}
|
10048 |
|
10049 |
/**
|
10091 |
self::$_accounts->set_option( $option_name, $option_value, $store, $network_level_or_blog_id );
|
10092 |
}
|
10093 |
|
10094 |
+
/**
|
10095 |
+
* This method can also return non-entity or non-entities collection option like the `user_id_license_ids_map` option.
|
10096 |
+
*
|
10097 |
+
* @author Leo Fajardo (@leorw)
|
10098 |
+
* @since 2.3.1
|
10099 |
+
*
|
10100 |
+
* @param string $option_name
|
10101 |
+
* @param mixed $default
|
10102 |
+
* @param null|bool|int $network_level_or_blog_id When an integer, use the given blog storage. When `true` use the multisite storage (if there's a network). When `false`, use the current context blog storage. When `null`, the decision which storage to use (MS vs. Current S) will be handled internally and determined based on the $option (based on self::$_SITE_LEVEL_PARAMS).
|
10103 |
+
*
|
10104 |
+
* @return mixed|FS_Plugin[]|FS_User[]|FS_Site[]|FS_Plugin_License[]|FS_Plugin_Plan[]|FS_Plugin_Tag[]
|
10105 |
+
*/
|
10106 |
+
private static function maybe_get_entities_account_option( $option_name, $default = null, $network_level_or_blog_id = null ) {
|
10107 |
+
$option = self::$_accounts->get_option( $option_name, $default, $network_level_or_blog_id );
|
10108 |
+
|
10109 |
+
$class_name = '';
|
10110 |
+
|
10111 |
+
switch ( $option_name ) {
|
10112 |
+
case 'plugins':
|
10113 |
+
case 'themes':
|
10114 |
+
case 'addons':
|
10115 |
+
$class_name = FS_Plugin::get_class_name();
|
10116 |
+
break;
|
10117 |
+
case 'users':
|
10118 |
+
$class_name = FS_User::get_class_name();
|
10119 |
+
break;
|
10120 |
+
case 'sites':
|
10121 |
+
$class_name = FS_Site::get_class_name();
|
10122 |
+
break;
|
10123 |
+
case 'licenses':
|
10124 |
+
case 'all_licenses':
|
10125 |
+
$class_name = FS_Plugin_License::get_class_name();
|
10126 |
+
break;
|
10127 |
+
case 'plans':
|
10128 |
+
$class_name = FS_Plugin_Plan::get_class_name();
|
10129 |
+
break;
|
10130 |
+
case 'updates':
|
10131 |
+
$class_name = FS_Plugin_Tag::get_class_name();
|
10132 |
+
break;
|
10133 |
+
}
|
10134 |
+
|
10135 |
+
if ( empty( $class_name ) ) {
|
10136 |
+
return $option;
|
10137 |
+
}
|
10138 |
+
|
10139 |
+
return fs_get_entities( $option, $class_name );
|
10140 |
+
}
|
10141 |
+
|
10142 |
/**
|
10143 |
* @author Vova Feldman (@svovaf)
|
10144 |
* @since 1.0.6
|
10322 |
* @return FS_Plugin_Tag[]
|
10323 |
*/
|
10324 |
private static function get_all_updates() {
|
10325 |
+
$updates = self::maybe_get_entities_account_option( 'updates', array() );
|
10326 |
|
10327 |
if ( ! is_array( $updates ) ) {
|
10328 |
$updates = array();
|
10338 |
* @return array<number,FS_Plugin[]>|false
|
10339 |
*/
|
10340 |
private static function get_all_addons() {
|
10341 |
+
$addons = self::maybe_get_entities_account_option( 'addons', array() );
|
10342 |
|
10343 |
if ( ! is_array( $addons ) ) {
|
10344 |
$addons = array();
|
10351 |
* @author Vova Feldman (@svovaf)
|
10352 |
* @since 1.0.6
|
10353 |
*
|
10354 |
+
* @return number[]|false
|
10355 |
*/
|
10356 |
private static function get_all_account_addons() {
|
10357 |
$addons = self::$_accounts->get_option( 'account_addons', array() );
|
10452 |
* @author Vova Feldman (@svovaf)
|
10453 |
* @since 1.0.6
|
10454 |
*
|
10455 |
+
* @return number[]|false
|
10456 |
*/
|
10457 |
function get_account_addons() {
|
10458 |
$this->_logger->entrance();
|
10596 |
|
10597 |
if ( ! fs_is_network_admin() ) {
|
10598 |
// Get blog-level activated installations.
|
10599 |
+
$sites = self::maybe_get_entities_account_option( 'sites', array() );
|
10600 |
} else {
|
10601 |
$sites = null;
|
10602 |
|
10605 |
) {
|
10606 |
if ( FS_Site::is_valid_id( $addon_storage->network_install_blog_id ) ) {
|
10607 |
// Get network-level activated installations.
|
10608 |
+
$sites = self::maybe_get_entities_account_option(
|
10609 |
'sites',
|
10610 |
array(),
|
10611 |
$addon_storage->network_install_blog_id
|
10615 |
}
|
10616 |
|
10617 |
$addon_info = array(
|
10618 |
+
'is_connected' => false,
|
10619 |
+
'slug' => $slug,
|
10620 |
+
'title' => $addon->title,
|
10621 |
+
'is_whitelabeled' => $addon_storage->is_whitelabeled
|
10622 |
);
|
10623 |
|
10624 |
if ( ! $is_installed ) {
|
10664 |
|
10665 |
$addon_info['site'] = $site;
|
10666 |
|
10667 |
+
$plugins_data = self::maybe_get_entities_account_option( WP_FS__MODULE_TYPE_PLUGIN . 's', array() );
|
10668 |
if ( isset( $plugins_data[ $slug ] ) ) {
|
10669 |
$plugin_data = $plugins_data[ $slug ];
|
10670 |
|
10671 |
$addon_info['version'] = $plugin_data->version;
|
10672 |
}
|
10673 |
|
10674 |
+
$all_plans = self::maybe_get_entities_account_option( 'plans', array() );
|
10675 |
if ( isset( $all_plans[ $slug ] ) ) {
|
10676 |
$plans = $all_plans[ $slug ];
|
10677 |
|
10684 |
}
|
10685 |
}
|
10686 |
|
10687 |
+
$licenses = self::maybe_get_entities_account_option( 'all_licenses', array() );
|
10688 |
if ( is_array( $licenses ) && isset( $licenses[ $addon_id ] ) ) {
|
10689 |
foreach ( $licenses[ $addon_id ] as $license ) {
|
10690 |
if ( $license->id == $site->license_id ) {
|
10698 |
if ( isset( $addon_storage->subscriptions ) &&
|
10699 |
! empty( $addon_storage->subscriptions )
|
10700 |
) {
|
10701 |
+
$addon_subscriptions = fs_get_entities( $addon_storage->subscriptions, FS_Subscription::get_class_name() );
|
10702 |
+
|
10703 |
+
foreach ( $addon_subscriptions as $subscription ) {
|
10704 |
if ( $subscription->license_id == $site->license_id ) {
|
10705 |
$addon_info['subscription'] = $subscription;
|
10706 |
break;
|
10791 |
function is_premium() {
|
10792 |
/**
|
10793 |
* `$this->_plugin` will be `false` when `is_activation_mode` calls this method directly from the
|
10794 |
+
* `register_constructor_hooks` method.
|
10795 |
*
|
10796 |
* @author Leo Fajardo (@leorw)
|
10797 |
* @since 2.2.3
|
10888 |
return false;
|
10889 |
}
|
10890 |
|
10891 |
+
if ( ! $this->has_active_valid_license() ) {
|
10892 |
+
return false;
|
10893 |
+
}
|
10894 |
|
10895 |
+
if ( $this->_site->trial_plan_id != $this->_license->plan_id ) {
|
10896 |
+
return false;
|
10897 |
+
}
|
10898 |
+
|
10899 |
+
/**
|
10900 |
+
* @var FS_Subscription $subscription
|
10901 |
+
*/
|
10902 |
+
$subscription = $this->_get_subscription( $this->_license->id );
|
10903 |
+
|
10904 |
+
return ( is_object( $subscription ) && $subscription->is_active() );
|
10905 |
+
}
|
10906 |
+
|
10907 |
+
/**
|
10908 |
+
* Check if trial already utilized.
|
10909 |
+
*
|
10910 |
+
* @since 1.0.9
|
10911 |
*
|
10912 |
* @return bool
|
10913 |
*/
|
11036 |
* @author Vova Feldman (@svovaf)
|
11037 |
* @since 1.1.7.3
|
11038 |
*
|
11039 |
+
* @param bool $including_foreign
|
11040 |
+
*
|
11041 |
* @return bool
|
11042 |
*/
|
11043 |
+
function has_any_license( $including_foreign = true ) {
|
11044 |
+
if ( ! is_array( $this->_licenses ) || 0 === count( $this->_licenses ) ) {
|
11045 |
+
return false;
|
11046 |
+
}
|
11047 |
+
|
11048 |
+
if ( $including_foreign ) {
|
11049 |
+
return true;
|
11050 |
+
}
|
11051 |
+
|
11052 |
+
foreach ( $this->_licenses as $license ) {
|
11053 |
+
if ( $this->_user->id == $license->user_id ) {
|
11054 |
+
return true;
|
11055 |
+
}
|
11056 |
+
}
|
11057 |
+
|
11058 |
+
return false;
|
11059 |
}
|
11060 |
|
11061 |
/**
|
11201 |
|
11202 |
if ( $license instanceof FS_Plugin_License ) {
|
11203 |
$this->_licenses[] = $license;
|
11204 |
+
|
11205 |
+
$this->set_license( $license );
|
11206 |
+
|
11207 |
$this->_store_licenses();
|
11208 |
|
11209 |
return $license;
|
11428 |
|
11429 |
// Update current license.
|
11430 |
if ( is_object( $this->_license ) ) {
|
11431 |
+
$license = $this->_get_license_by_id( $this->_license->id );
|
11432 |
+
|
11433 |
+
if ( is_object( $license ) ) {
|
11434 |
+
/**
|
11435 |
+
* `$license` can be `false` in case a user change action has just been completed and this method
|
11436 |
+
* has synced the `$this->_licenses` collection for the new user. In this case, the
|
11437 |
+
* `$this->_licenses` collection may have only the newly activated license that is associated with
|
11438 |
+
* the new user. `set_license` will eventually be called in the same request by the logic that
|
11439 |
+
* follows outside this method which will detect that the install's license has been updated, and
|
11440 |
+
* then `_update_site_license` will be called which in turn will call `set_license`.
|
11441 |
+
*
|
11442 |
+
* @author Leo Fajardo (@leorw)
|
11443 |
+
* @since 2.3.2
|
11444 |
+
*/
|
11445 |
+
$this->set_license( $license );
|
11446 |
+
}
|
11447 |
}
|
11448 |
|
11449 |
return $this->_licenses;
|
11783 |
return true;
|
11784 |
}
|
11785 |
|
11786 |
+
/**
|
11787 |
+
* Activate a given license on a collection of blogs/sites that are not yet opted-in.
|
11788 |
+
*
|
11789 |
+
* @author Vova Feldman (@svovaf)
|
11790 |
+
* @since 2.3.1
|
11791 |
+
*
|
11792 |
+
* @param \FS_User $user
|
11793 |
+
* @param string $license_key
|
11794 |
+
*
|
11795 |
+
* @return true|mixed True if successful, otherwise, the API result.
|
11796 |
+
*/
|
11797 |
+
private function activate_license_on_site( FS_User $user, $license_key ) {
|
11798 |
+
return $this->activate_license_on_many_sites( $user, $license_key );
|
11799 |
+
}
|
11800 |
+
|
11801 |
/**
|
11802 |
* Activate a given license on a collection of blogs/sites that are not yet opted-in.
|
11803 |
*
|
11813 |
private function activate_license_on_many_sites(
|
11814 |
FS_User $user,
|
11815 |
$license_key,
|
11816 |
+
array $site_ids = array()
|
11817 |
) {
|
11818 |
$sites = array();
|
11819 |
foreach ( $site_ids as $site_id ) {
|
11837 |
}
|
11838 |
|
11839 |
$installs = array();
|
|
|
|
|
|
|
11840 |
|
11841 |
+
if ( $this->is_api_result_entity( $result ) ) {
|
11842 |
+
$install = new FS_Site( $result );
|
11843 |
|
11844 |
+
$this->_user = $user;
|
11845 |
|
11846 |
+
$this->_store_site( true, null, $install );
|
|
|
|
|
11847 |
|
11848 |
+
$this->_site = $install;
|
11849 |
+
|
11850 |
+
$this->reset_anonymous_mode();
|
11851 |
+
} else {
|
11852 |
+
foreach ( $result->installs as $install ) {
|
11853 |
+
$installs[] = new FS_Site( $install );
|
11854 |
+
}
|
11855 |
+
|
11856 |
+
// Map site addresses to their blog IDs.
|
11857 |
+
$address_to_blog_map = $this->get_address_to_blog_map();
|
11858 |
|
11859 |
+
$first_blog_id = null;
|
11860 |
|
11861 |
+
foreach ( $installs as $install ) {
|
11862 |
+
$address = trailingslashit( fs_strip_url_protocol( $install->url ) );
|
11863 |
+
$blog_id = $address_to_blog_map[ $address ];
|
11864 |
+
|
11865 |
+
$this->_store_site( true, $blog_id, $install );
|
11866 |
+
|
11867 |
+
$this->reset_anonymous_mode( $blog_id );
|
11868 |
+
|
11869 |
+
if ( is_null( $first_blog_id ) ) {
|
11870 |
+
$first_blog_id = $blog_id;
|
11871 |
+
}
|
11872 |
}
|
|
|
11873 |
|
11874 |
+
if ( ! FS_Site::is_valid_id( $this->_storage->network_install_blog_id ) ) {
|
11875 |
+
$this->_storage->network_install_blog_id = $first_blog_id;
|
11876 |
+
}
|
11877 |
}
|
11878 |
|
11879 |
return true;
|
11892 |
function _update_site_license( $new_license ) {
|
11893 |
$this->_logger->entrance();
|
11894 |
|
11895 |
+
/**
|
11896 |
+
* In case this call will be removed in the future, the `_sync_licenses()` method needs to be updated
|
11897 |
+
* accordingly so that it will also handle the case when an ownership change is done via license
|
11898 |
+
* activation.
|
11899 |
+
*
|
11900 |
+
* @author Leo Fajardo (@leorw)
|
11901 |
+
* @since 2.3.2
|
11902 |
+
*/
|
11903 |
+
$this->set_license( $new_license );
|
11904 |
|
11905 |
if ( ! is_object( $new_license ) ) {
|
11906 |
$this->_site->license_id = null;
|
11935 |
return $this->_license;
|
11936 |
}
|
11937 |
|
11938 |
+
/**
|
11939 |
+
* @author Vova Feldman (@svovaf)
|
11940 |
+
* @since 2.3.1
|
11941 |
+
*
|
11942 |
+
* @param \FS_Plugin_License $license
|
11943 |
+
*/
|
11944 |
+
private function set_license( FS_Plugin_License $license = null ) {
|
11945 |
+
$this->_license = $license;
|
11946 |
+
|
11947 |
+
$this->maybe_update_whitelabel_flag( $license );
|
11948 |
+
}
|
11949 |
+
|
11950 |
+
/**
|
11951 |
+
* @author Leo Fajardo (@leorw)
|
11952 |
+
* @since 2.3.1
|
11953 |
+
*
|
11954 |
+
* @param FS_Plugin_License $license
|
11955 |
+
*/
|
11956 |
+
private function maybe_update_whitelabel_flag( $license ) {
|
11957 |
+
$is_whitelabeled = isset( $this->_storage->is_whitelabeled ) ?
|
11958 |
+
$this->_storage->is_whitelabeled :
|
11959 |
+
false;
|
11960 |
+
|
11961 |
+
if ( is_object( $license ) ) {
|
11962 |
+
$license_user = self::_get_user_by_id( $license->user_id );
|
11963 |
+
|
11964 |
+
if ( ! is_object( $license_user ) ) {
|
11965 |
+
// If foreign license, do not update the `is_whitelabeled` flag.
|
11966 |
+
return;
|
11967 |
+
}
|
11968 |
+
|
11969 |
+
if ( $this->is_addon() ) {
|
11970 |
+
/**
|
11971 |
+
* Store the last license data to the parent's storage since it's needed only when showing the
|
11972 |
+
* "Start Debug" dialog which is triggered from the "Account" page. This way, there's no need to
|
11973 |
+
* iterate over the add-ons just to get the last license data.
|
11974 |
+
*/
|
11975 |
+
$this->get_parent_instance()->store_last_activated_license_data( $license, $license_user );
|
11976 |
+
} else {
|
11977 |
+
$this->store_last_activated_license_data( $license );
|
11978 |
+
}
|
11979 |
+
|
11980 |
+
if ( $license->is_whitelabeled ) {
|
11981 |
+
// Activated a developer license, data should be hidden.
|
11982 |
+
$is_whitelabeled = true;
|
11983 |
+
} else if ( $this->is_registered() && $this->_user->id == $license->user_id ) {
|
11984 |
+
// The account owner activated a regular license key, no need to hide the data.
|
11985 |
+
$is_whitelabeled = false;
|
11986 |
+
}
|
11987 |
+
}
|
11988 |
+
|
11989 |
+
$this->_storage->is_whitelabeled = $is_whitelabeled;
|
11990 |
+
|
11991 |
+
// Reset the whitelabeled status after update.
|
11992 |
+
$this->is_whitelabeled = null;
|
11993 |
+
if ( $this->is_addon() ) {
|
11994 |
+
$parent_fs = $this->get_parent_instance();
|
11995 |
+
|
11996 |
+
if ( is_object( $parent_fs ) ) {
|
11997 |
+
$parent_fs->is_whitelabeled = null;
|
11998 |
+
}
|
11999 |
+
}
|
12000 |
+
}
|
12001 |
+
|
12002 |
+
/**
|
12003 |
+
* @author Leo Fajardo (@leorw)
|
12004 |
+
* @since 2.3.1
|
12005 |
+
*
|
12006 |
+
* @param FS_Plugin_License $license
|
12007 |
+
* @param FS_User $license_user
|
12008 |
+
*/
|
12009 |
+
private function store_last_activated_license_data( FS_Plugin_License $license, $license_user = null ) {
|
12010 |
+
if ( ! is_object( $license_user ) ) {
|
12011 |
+
$this->_storage->last_license_key = md5( $license->secret_key );
|
12012 |
+
$this->_storage->last_license_user_id = null;
|
12013 |
+
} else {
|
12014 |
+
$this->_storage->last_license_user_key = md5( $license_user->secret_key );
|
12015 |
+
$this->_storage->last_license_user_id = $license_user->id;
|
12016 |
+
}
|
12017 |
+
}
|
12018 |
+
|
12019 |
+
/**
|
12020 |
+
* @author Leo Fajardo (@leorw)
|
12021 |
+
* @since 2.3.1
|
12022 |
+
*
|
12023 |
+
* @param bool $ignore_data_debug_mode
|
12024 |
+
*
|
12025 |
+
* @return bool
|
12026 |
+
*/
|
12027 |
+
function is_whitelabeled_by_flag( $ignore_data_debug_mode = false ) {
|
12028 |
+
if ( true !== $this->_storage->is_whitelabeled ) {
|
12029 |
+
return false;
|
12030 |
+
} else if ( $ignore_data_debug_mode ) {
|
12031 |
+
return true;
|
12032 |
+
}
|
12033 |
+
|
12034 |
+
$fs = $this->is_addon() ?
|
12035 |
+
$this->get_parent_instance() :
|
12036 |
+
$this;
|
12037 |
+
|
12038 |
+
return ! $fs->is_data_debug_mode();
|
12039 |
+
}
|
12040 |
+
|
12041 |
+
/**
|
12042 |
+
* @author Leo Fajardo (@leorw)
|
12043 |
+
* @since 2.3.1
|
12044 |
+
*
|
12045 |
+
* @return number
|
12046 |
+
*/
|
12047 |
+
function get_last_license_user_id() {
|
12048 |
+
return ( FS_User::is_valid_id( $this->_storage->last_license_user_id ) ) ?
|
12049 |
+
$this->_storage->last_license_user_id :
|
12050 |
+
null;
|
12051 |
+
}
|
12052 |
+
|
12053 |
+
/**
|
12054 |
+
* @author Leo Fajardo (@leorw)
|
12055 |
+
* @since 2.3.1
|
12056 |
+
*
|
12057 |
+
* @param int $blog_id
|
12058 |
+
* @param bool $ignore_data_debug_mode
|
12059 |
+
*
|
12060 |
+
* @return bool
|
12061 |
+
*/
|
12062 |
+
function is_whitelabeled( $ignore_data_debug_mode = false, $blog_id = null ) {
|
12063 |
+
if ( ! is_null( $blog_id ) ) {
|
12064 |
+
$this->switch_to_blog( $blog_id );
|
12065 |
+
}
|
12066 |
+
|
12067 |
+
if ( ! is_null( $this->is_whitelabeled ) ) {
|
12068 |
+
$is_whitelabeled = $this->is_whitelabeled;
|
12069 |
+
} else {
|
12070 |
+
$is_whitelabeled = false;
|
12071 |
+
|
12072 |
+
$is_whitelabeled_flag = $this->is_whitelabeled_by_flag( true );
|
12073 |
+
|
12074 |
+
if ( ! $this->has_addons() ) {
|
12075 |
+
$is_whitelabeled = $is_whitelabeled_flag;
|
12076 |
+
} else if ( $is_whitelabeled_flag ) {
|
12077 |
+
$is_whitelabeled = true;
|
12078 |
+
} else {
|
12079 |
+
$addon_ids = $this->get_updated_account_addons();
|
12080 |
+
$installed_addons = $this->get_installed_addons();
|
12081 |
+
foreach ( $installed_addons as $fs_addon ) {
|
12082 |
+
$addon_ids[] = $fs_addon->get_id();
|
12083 |
+
}
|
12084 |
+
|
12085 |
+
if ( ! empty( $addon_ids ) ) {
|
12086 |
+
$addon_ids = array_unique( $addon_ids );
|
12087 |
+
|
12088 |
+
$is_network_level = (
|
12089 |
+
fs_is_network_admin() &&
|
12090 |
+
$this->is_network_active()
|
12091 |
+
);
|
12092 |
+
|
12093 |
+
foreach ( $addon_ids as $addon_id ) {
|
12094 |
+
$addon = $this->get_addon( $addon_id );
|
12095 |
+
|
12096 |
+
if ( ! is_object( $addon ) ) {
|
12097 |
+
continue;
|
12098 |
+
}
|
12099 |
+
|
12100 |
+
$addon_storage = FS_Storage::instance( WP_FS__MODULE_TYPE_PLUGIN, $addon->slug );
|
12101 |
+
$fs_addon = $this->is_addon_activated( $addon_id ) ?
|
12102 |
+
self::get_addon_instance( $addon_id ) :
|
12103 |
+
null;
|
12104 |
+
|
12105 |
+
$was_addon_network_activated = false;
|
12106 |
+
|
12107 |
+
if ( is_object( $fs_addon ) ) {
|
12108 |
+
$was_addon_network_activated = $fs_addon->is_network_active();
|
12109 |
+
} else if ( $is_network_level ) {
|
12110 |
+
$was_addon_network_activated = $addon_storage->get( 'was_plugin_loaded', false, true );
|
12111 |
+
}
|
12112 |
+
|
12113 |
+
$network_delegated_connection = (
|
12114 |
+
$was_addon_network_activated &&
|
12115 |
+
$addon_storage->get( 'is_delegated_connection', false, true )
|
12116 |
+
);
|
12117 |
+
|
12118 |
+
if (
|
12119 |
+
$is_network_level &&
|
12120 |
+
( ! $was_addon_network_activated || $network_delegated_connection )
|
12121 |
+
) {
|
12122 |
+
$sites = self::get_sites();
|
12123 |
+
|
12124 |
+
/**
|
12125 |
+
* If in network admin area and the add-on was not network-activated or network-activated
|
12126 |
+
* and network-delegated, find any add-on whose is_whitelabeled flag is true.
|
12127 |
+
*/
|
12128 |
+
foreach ( $sites as $site ) {
|
12129 |
+
$site_info = $this->get_site_info( $site );
|
12130 |
+
|
12131 |
+
if ( $addon_storage->get( 'is_whitelabeled', false, $site_info['blog_id'] ) ) {
|
12132 |
+
$is_whitelabeled = true;
|
12133 |
+
break;
|
12134 |
+
}
|
12135 |
+
}
|
12136 |
+
|
12137 |
+
if ( $is_whitelabeled ) {
|
12138 |
+
break;
|
12139 |
+
}
|
12140 |
+
} else {
|
12141 |
+
/**
|
12142 |
+
* This will be executed when any of the following is met:
|
12143 |
+
* 1. Add-on was network-activated, not network-delegated, and in network admin area.
|
12144 |
+
* 2. Add-on was network-activated, network-delegated, and in site admin area.
|
12145 |
+
* 3. Add-on was not network-activated and in site admin area.
|
12146 |
+
*/
|
12147 |
+
if ( true === $addon_storage->is_whitelabeled ) {
|
12148 |
+
$is_whitelabeled = true;
|
12149 |
+
break;
|
12150 |
+
}
|
12151 |
+
}
|
12152 |
+
}
|
12153 |
+
}
|
12154 |
+
}
|
12155 |
+
|
12156 |
+
$this->is_whitelabeled = $is_whitelabeled;
|
12157 |
+
|
12158 |
+
if ( ! $is_whitelabeled || ! $this->is_data_debug_mode() ) {
|
12159 |
+
$this->_admin_notices->remove_sticky( 'data_debug_mode_enabled' );
|
12160 |
+
}
|
12161 |
+
|
12162 |
+
if ( ! is_null( $blog_id ) ) {
|
12163 |
+
$this->restore_current_blog();
|
12164 |
+
}
|
12165 |
+
}
|
12166 |
+
|
12167 |
+
return (
|
12168 |
+
$is_whitelabeled &&
|
12169 |
+
( $ignore_data_debug_mode || ! $this->is_data_debug_mode() )
|
12170 |
+
);
|
12171 |
+
}
|
12172 |
+
|
12173 |
/**
|
12174 |
* Sync site's subscription.
|
12175 |
*
|
12227 |
return null;
|
12228 |
}
|
12229 |
|
12230 |
+
foreach ( fs_get_entities( $this->_storage->subscriptions, FS_Subscription::get_class_name() ) as $subscription ) {
|
12231 |
if ( $subscription->license_id == $license_id ) {
|
12232 |
return $subscription;
|
12233 |
}
|
12253 |
return;
|
12254 |
}
|
12255 |
|
12256 |
+
$subscriptions = fs_get_entities( $this->_storage->subscriptions, FS_Subscription::get_class_name() );
|
12257 |
|
12258 |
$updated_subscription = false;
|
12259 |
foreach ( $subscriptions as $key => $existing_subscription ) {
|
12348 |
}
|
12349 |
|
12350 |
$current_plan_order = - 1;
|
12351 |
+
$required_plan_order = PHP_INT_MAX;
|
12352 |
for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
|
12353 |
if ( $plan === $this->_plans[ $i ]->name ) {
|
12354 |
$required_plan_order = $i;
|
12366 |
* @author Vova Feldman (@svovaf)
|
12367 |
* @since 1.2.1.7
|
12368 |
*
|
12369 |
+
* @param bool $double_check In some cases developers prefer to release their paid offering as premium-only, even though there is a free version. For those cases, looking at the 'is_premium_only' value isn't enough because the result will return false even when the product has only signle paid plan.
|
12370 |
+
*
|
12371 |
* @return bool
|
12372 |
*/
|
12373 |
+
function is_single_plan( $double_check = false ) {
|
12374 |
$this->_logger->entrance();
|
12375 |
|
12376 |
if ( ! $this->is_registered() ||
|
12380 |
return true;
|
12381 |
}
|
12382 |
|
12383 |
+
$has_free_plan = $this->has_free_plan();
|
12384 |
+
|
12385 |
+
if ( ! $has_free_plan && $double_check ) {
|
12386 |
+
foreach ( $this->_plans as $plan ) {
|
12387 |
+
if ( $plan->is_free() ) {
|
12388 |
+
$has_free_plan = true;
|
12389 |
+
break;
|
12390 |
+
}
|
12391 |
+
}
|
12392 |
+
}
|
12393 |
+
|
12394 |
+
return ( 1 === ( count( $this->_plans ) - ( $has_free_plan ? 1 : 0 ) ) );
|
12395 |
}
|
12396 |
|
12397 |
/**
|
12505 |
fs_require_template( 'forms/resend-key.php', $vars );
|
12506 |
}
|
12507 |
|
12508 |
+
/**
|
12509 |
+
* Returns a collection of IDs of installs that are associated with the context product and its add-ons, and activated with foreign licenses.
|
12510 |
+
*
|
12511 |
+
* @author Leo Fajardo (@leorw)
|
12512 |
+
* @since 2.3.2
|
12513 |
+
*
|
12514 |
+
* @return number[]
|
12515 |
+
*/
|
12516 |
+
function get_installs_ids_with_foreign_licenses() {
|
12517 |
+
$installs = array();
|
12518 |
+
|
12519 |
+
if (
|
12520 |
+
is_object( $this->_license ) &&
|
12521 |
+
$this->_site->user_id != $this->_license->user_id
|
12522 |
+
) {
|
12523 |
+
$installs[] = $this->_site->id;
|
12524 |
+
}
|
12525 |
+
|
12526 |
+
/**
|
12527 |
+
* Also try to get foreign licenses for the context product's add-ons.
|
12528 |
+
*/
|
12529 |
+
$installs_by_slug_map = $this->get_parent_and_addons_installs_info();
|
12530 |
+
|
12531 |
+
foreach ( $installs_by_slug_map as $slug => $install_info ) {
|
12532 |
+
if ( $slug == $this->get_slug() ) {
|
12533 |
+
continue;
|
12534 |
+
}
|
12535 |
+
|
12536 |
+
$install = $install_info['install'];
|
12537 |
+
$license = $install_info['license'];
|
12538 |
+
|
12539 |
+
if (
|
12540 |
+
is_object( $license ) &&
|
12541 |
+
$install->user_id != $license->user_id
|
12542 |
+
) {
|
12543 |
+
$installs[] = $install->id;
|
12544 |
+
}
|
12545 |
+
}
|
12546 |
+
|
12547 |
+
return $installs;
|
12548 |
+
}
|
12549 |
+
|
12550 |
+
/**
|
12551 |
+
* Displays the "Change User" dialog box when the user clicks on the "Change User" button on the "Account" page.
|
12552 |
+
*
|
12553 |
+
* @author Leo Fajardo (@leorw)
|
12554 |
+
* @since 2.3.2
|
12555 |
+
*
|
12556 |
+
* @param number[] $install_ids
|
12557 |
+
*/
|
12558 |
+
function _add_user_change_dialog_box( $install_ids ) {
|
12559 |
+
$vars = array(
|
12560 |
+
'id' => $this->_module_id,
|
12561 |
+
'license_owners' => $this->fetch_installs_licenses_owners_data( $install_ids )
|
12562 |
+
);
|
12563 |
+
|
12564 |
+
fs_require_template( 'forms/user-change.php', $vars );
|
12565 |
+
}
|
12566 |
+
|
12567 |
+
/**
|
12568 |
+
* @author Leo Fajardo (@leorw)
|
12569 |
+
* @since 2.3.1
|
12570 |
+
*/
|
12571 |
+
function _add_data_debug_mode_dialog_box() {
|
12572 |
+
$vars = array(
|
12573 |
+
'id' => $this->_module_id,
|
12574 |
+
);
|
12575 |
+
|
12576 |
+
fs_require_template( 'forms/data-debug-mode.php', $vars );
|
12577 |
+
}
|
12578 |
+
|
12579 |
/**
|
12580 |
* Displays a subscription cancellation dialog box when the user clicks on the "Deactivate License"
|
12581 |
* link on the "Account" page or deactivates a plugin and there's an active subscription that is
|
12594 |
// Subscription cancellation dialog box is currently not supported for multisite networks.
|
12595 |
return array();
|
12596 |
}
|
12597 |
+
|
12598 |
+
if ( $this->is_whitelabeled() ) {
|
12599 |
+
return array();
|
12600 |
+
}
|
12601 |
|
12602 |
$license = $this->_get_license();
|
12603 |
|
12685 |
return;
|
12686 |
}
|
12687 |
|
12688 |
+
if (
|
12689 |
+
$this->has_premium_version() &&
|
12690 |
+
! $this->is_premium() &&
|
12691 |
+
/**
|
12692 |
+
* Also handle the case when an upgrade was made using the free version.
|
12693 |
+
*
|
12694 |
+
* @author Leo Fajardo (@leorw)
|
12695 |
+
* @since 2.3.2
|
12696 |
+
*/
|
12697 |
+
! is_object( $this->_get_license() )
|
12698 |
+
) {
|
12699 |
+
// Only add license activation logic to the premium version, or in case of a serviceware plugin, also in the free version.
|
12700 |
return;
|
12701 |
}
|
12702 |
|
12722 |
$this->add_ajax_action( 'resend_license_key', array( &$this, '_resend_license_key_ajax_action' ) );
|
12723 |
}
|
12724 |
|
12725 |
+
/**
|
12726 |
+
* Prepares page to include all required UI and logic for the "Change User" dialog.
|
12727 |
+
*
|
12728 |
+
* @author Leo Fajardo (@leorw)
|
12729 |
+
* @since 2.3.2
|
12730 |
+
*/
|
12731 |
+
function _add_user_change_option() {
|
12732 |
+
if ( ! $this->should_handle_user_change() ) {
|
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 |
+
}
|
12740 |
+
|
12741 |
+
// Add user change AJAX handler.
|
12742 |
+
$this->add_ajax_action( 'change_user', array( &$this, '_user_change_ajax_action' ) );
|
12743 |
+
}
|
12744 |
+
|
12745 |
+
/**
|
12746 |
+
* @author Leo Fajardo (@leorw)
|
12747 |
+
* @since 2.3.2
|
12748 |
+
*/
|
12749 |
+
function should_handle_user_change() {
|
12750 |
+
if ( ! $this->is_user_admin() ) {
|
12751 |
+
// Only admins can change user.
|
12752 |
+
return false;
|
12753 |
+
}
|
12754 |
+
|
12755 |
+
if ( $this->is_addon() ) {
|
12756 |
+
return false;
|
12757 |
+
}
|
12758 |
+
|
12759 |
+
if ( ! $this->is_registered() ) {
|
12760 |
+
return false;
|
12761 |
+
}
|
12762 |
+
|
12763 |
+
if (
|
12764 |
+
$this->is_network_active() &&
|
12765 |
+
( fs_is_network_admin() || ! $this->is_site_delegated_connection() )
|
12766 |
+
) {
|
12767 |
+
// Handle only on site-level "Account" section for now.
|
12768 |
+
return false;
|
12769 |
+
}
|
12770 |
+
|
12771 |
+
return true;
|
12772 |
+
}
|
12773 |
+
|
12774 |
/**
|
12775 |
* @author Leo Fajardo (@leorw)
|
12776 |
* @since 2.0.2
|
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' ),
|
12880 |
+
fs_request_get( 'user_id', null ),
|
12881 |
+
fs_request_get_bool( 'is_extensions_tracking_allowed', true )
|
12882 |
);
|
12883 |
|
12884 |
echo json_encode( $result );
|
12886 |
exit;
|
12887 |
}
|
12888 |
|
12889 |
+
/**
|
12890 |
+
* User change WP AJAX handler.
|
12891 |
+
*
|
12892 |
+
* @author Leo Fajardo (@leorw)
|
12893 |
+
* @since 2.3.2
|
12894 |
+
*/
|
12895 |
+
function _user_change_ajax_action() {
|
12896 |
+
$this->_logger->entrance();
|
12897 |
+
|
12898 |
+
$this->check_ajax_referer( 'change_user' );
|
12899 |
+
|
12900 |
+
$new_email_address = trim( fs_request_get( 'email_address', '' ) );
|
12901 |
+
$new_user_id = fs_request_get( 'user_id' );
|
12902 |
+
|
12903 |
+
if ( empty( $new_email_address ) && ! FS_User::is_valid_id( $new_user_id ) ) {
|
12904 |
+
self::shoot_ajax_failure( fs_text_inline( 'Invalid new user ID or email address.', 'invalid-new-user-id-or-email', $this->get_slug() ) );
|
12905 |
+
}
|
12906 |
+
|
12907 |
+
$params = array();
|
12908 |
+
|
12909 |
+
if ( ! empty( $new_email_address ) ) {
|
12910 |
+
$params['user_email'] = $new_email_address;
|
12911 |
+
} else {
|
12912 |
+
$params['user_id'] = $new_user_id;
|
12913 |
+
}
|
12914 |
+
|
12915 |
+
$installs_info_by_slug_map = $this->get_parent_and_addons_installs_info();
|
12916 |
+
$install_ids = array();
|
12917 |
+
|
12918 |
+
foreach ( $installs_info_by_slug_map as $slug => $install_info ) {
|
12919 |
+
$install_ids[ $slug ] = $install_info['install']->id;
|
12920 |
+
}
|
12921 |
+
|
12922 |
+
$params['install_ids'] = implode( ',', array_values( $install_ids ) );
|
12923 |
+
|
12924 |
+
$install = $this->get_api_site_scope()->call( $this->add_show_pending( '/' ), 'put', $params );
|
12925 |
+
|
12926 |
+
if ( FS_Api::is_api_error( $install ) ) {
|
12927 |
+
$error = '';
|
12928 |
+
|
12929 |
+
if ( is_object( $install ) ) {
|
12930 |
+
switch ( $install->error->code ) {
|
12931 |
+
case 'user_exist':
|
12932 |
+
$error = (
|
12933 |
+
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...' .
|
12934 |
+
$this->get_text_inline( 'Sorry, we could not complete the email update. Another user with the same email is already registered.', 'user-exist-message' ) . ' ' .
|
12935 |
+
sprintf( $this->get_text_inline( 'If you would like to give up the ownership of the %s\'s account to %s click the Change Ownership button.', 'user-exist-message_ownership' ), $this->_module_type, '<b>' . $new_email_address . '</b>' ) .
|
12936 |
+
sprintf(
|
12937 |
+
'<a style="line-height: 40px;" href="%s"><button class="button button-primary">%s ➜</button></a>',
|
12938 |
+
$this->get_account_url( 'change_owner', array(
|
12939 |
+
'state' => 'init',
|
12940 |
+
'candidate_email' => $new_email_address
|
12941 |
+
) ),
|
12942 |
+
$this->get_text_inline( 'Change Ownership', 'change-ownership' )
|
12943 |
+
)
|
12944 |
+
);
|
12945 |
+
break;
|
12946 |
+
}
|
12947 |
+
}
|
12948 |
+
|
12949 |
+
if ( empty( $error ) ) {
|
12950 |
+
$error = FS_Api::is_api_error_object( $install ) ?
|
12951 |
+
$install->error->message :
|
12952 |
+
var_export( $install->error, true );
|
12953 |
+
}
|
12954 |
+
|
12955 |
+
self::shoot_ajax_failure( $error );
|
12956 |
+
} else {
|
12957 |
+
if (
|
12958 |
+
// If successful ownership change.
|
12959 |
+
$this->get_user()->id != $install->user_id ||
|
12960 |
+
! empty( $new_email_address )
|
12961 |
+
) {
|
12962 |
+
$this->complete_ownership_change_by_license( $install->user_id, $install_ids );
|
12963 |
+
}
|
12964 |
+
}
|
12965 |
+
|
12966 |
+
self::shoot_ajax_success();
|
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 |
*
|
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() :
|
13000 |
null,
|
13001 |
$plugin_id
|
13002 |
);
|
13003 |
+
|
13004 |
+
// No need to show the sticky after license activation notice after migrating a license.
|
13005 |
+
$this->_admin_notices->remove_sticky( 'plan_upgraded' );
|
13006 |
+
|
13007 |
+
return $result;
|
13008 |
}
|
13009 |
|
13010 |
/**
|
13018 |
* @param null|bool $is_marketing_allowed
|
13019 |
* @param null|int $blog_id
|
13020 |
* @param null|number $plugin_id
|
13021 |
+
* @param null|number $license_owner_id
|
13022 |
*
|
13023 |
* @return array {
|
13024 |
* @var bool $success
|
13031 |
$sites = array(),
|
13032 |
$is_marketing_allowed = null,
|
13033 |
$blog_id = null,
|
13034 |
+
$plugin_id = null,
|
13035 |
+
$license_owner_id = null,
|
13036 |
+
$is_extensions_tracking_allowed = true
|
13037 |
) {
|
13038 |
$this->_logger->entrance();
|
13039 |
|
13048 |
$this :
|
13049 |
$this->get_addon_instance( $plugin_id );
|
13050 |
|
13051 |
+
$this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
|
13052 |
+
|
13053 |
$error = false;
|
13054 |
$next_page = false;
|
13055 |
|
13056 |
$has_valid_blog_id = is_numeric( $blog_id );
|
13057 |
|
13058 |
+
$user = null;
|
13059 |
+
|
13060 |
+
if ( $fs->is_addon() && $fs->get_parent_instance()->is_registered() ) {
|
13061 |
+
/**
|
13062 |
+
* When activating an add-on's license and the parent is opted-in, activate the license with the parent's opted-in user context.
|
13063 |
+
*
|
13064 |
+
* @author Vova Feldman (@svovaf)
|
13065 |
+
*/
|
13066 |
+
$user = $fs->get_parent_instance()->get_current_or_network_user();
|
13067 |
+
} else if ( $fs->is_registered() ) {
|
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();
|
13079 |
continue;
|
13080 |
}
|
13081 |
|
13082 |
+
$install = $fs->get_install_by_blog_id( $site['blog_id'] );
|
13083 |
|
13084 |
if ( is_object( $install ) ) {
|
13085 |
$blog_2_install_map[ $site['blog_id'] ] = $install;
|
13088 |
}
|
13089 |
}
|
13090 |
|
|
|
|
|
13091 |
if ( ! empty( $blog_2_install_map ) ) {
|
13092 |
+
$result = $fs->activate_license_on_many_installs( $user, $license_key, $blog_2_install_map );
|
13093 |
|
13094 |
if ( true !== $result ) {
|
13095 |
$error = FS_Api::is_api_error_object( $result ) ?
|
13099 |
}
|
13100 |
|
13101 |
if ( empty( $error ) && ! empty( $site_ids ) ) {
|
13102 |
+
$result = $fs->activate_license_on_many_sites( $user, $license_key, $site_ids );
|
13103 |
|
13104 |
if ( true !== $result ) {
|
13105 |
$error = FS_Api::is_api_error_object( $result ) ?
|
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 )
|
13124 |
+
);
|
13125 |
|
13126 |
+
$install_ids = array();
|
|
|
|
|
13127 |
|
13128 |
+
$change_owner = FS_User::is_valid_id( $license_owner_id );
|
13129 |
|
13130 |
+
if ( $change_owner ) {
|
13131 |
+
$params['user_id'] = $license_owner_id;
|
13132 |
+
|
13133 |
+
$installs_info_by_slug_map = $fs->get_parent_and_addons_installs_info();
|
13134 |
+
|
13135 |
+
foreach ( $installs_info_by_slug_map as $slug => $install_info ) {
|
13136 |
+
$install_ids[ $slug ] = $install_info['install']->id;
|
13137 |
+
}
|
13138 |
+
|
13139 |
+
$params['install_ids'] = implode( ',', array_values( $install_ids ) );
|
13140 |
+
}
|
13141 |
+
|
13142 |
+
$api = $fs->get_api_site_scope();
|
13143 |
+
|
13144 |
+
$install = $api->call( $fs->add_show_pending( '/' ), 'put', $params );
|
13145 |
+
|
13146 |
+
if ( FS_Api::is_api_error( $install ) ) {
|
13147 |
+
$error = FS_Api::is_api_error_object( $install ) ?
|
13148 |
+
$install->error->message :
|
13149 |
+
var_export( $install->error, true );
|
13150 |
+
} else {
|
13151 |
+
$fs->reconnect_locally( $has_valid_blog_id );
|
13152 |
+
|
13153 |
+
if (
|
13154 |
+
$change_owner &&
|
13155 |
+
// If successful ownership change.
|
13156 |
+
$fs->get_user()->id != $install->user_id
|
13157 |
+
) {
|
13158 |
+
$fs->complete_ownership_change_by_license( $install->user_id, $install_ids );
|
13159 |
+
}
|
13160 |
+
}
|
13161 |
+
} else /* ( $fs->is_addon() && $fs->get_parent_instance()->is_registered() ) */ {
|
13162 |
+
$result = $fs->activate_license_on_site( $user, $license_key );
|
13163 |
+
|
13164 |
+
if ( true !== $result ) {
|
13165 |
+
$error = FS_Api::is_api_error_object( $result ) ?
|
13166 |
+
$result->error->message :
|
13167 |
+
var_export( $result, true );
|
13168 |
+
}
|
13169 |
}
|
13170 |
}
|
13171 |
|
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();
|
13224 |
continue;
|
13225 |
}
|
13226 |
|
13227 |
+
if ( $fs->is_installed_on_site( $blog_id ) ) {
|
13228 |
// Site was already connected before.
|
13229 |
continue;
|
13230 |
}
|
13231 |
|
13232 |
+
if ( $fs->is_site_delegated_connection( $blog_id ) ) {
|
13233 |
// Site's connection was delegated.
|
13234 |
continue;
|
13235 |
}
|
13236 |
|
13237 |
+
if ( $fs->is_anonymous_site( $blog_id ) ) {
|
13238 |
// Site connection was already skipped.
|
13239 |
continue;
|
13240 |
}
|
13243 |
}
|
13244 |
|
13245 |
if ( ! empty( $pending_sites ) ) {
|
13246 |
+
if ( $fs->is_freemium() && $fs->is_enable_anonymous() ) {
|
13247 |
+
$fs->skip_connection( $pending_sites );
|
13248 |
} else {
|
13249 |
+
$fs->delegate_connection( $pending_sites );
|
13250 |
}
|
13251 |
}
|
13252 |
}
|
13253 |
}
|
13254 |
}
|
13255 |
|
13256 |
+
if ( false === $error && true === $fs->_storage->require_license_activation ) {
|
13257 |
+
$fs->_storage->require_license_activation = false;
|
13258 |
}
|
13259 |
|
13260 |
+
$result = array(
|
13261 |
+
'success' => ( false === $error )
|
13262 |
+
);
|
13263 |
+
|
13264 |
+
if ( false !== $error ) {
|
13265 |
+
$result['error'] = $fs->apply_filters( 'opt_in_error_message', $error );
|
13266 |
+
} else {
|
13267 |
+
if ( $fs->is_addon() || $fs->has_addons() ) {
|
13268 |
+
/**
|
13269 |
+
* Purge the valid user licenses cache so that when the "Account" or the "Add-Ons" page is loaded,
|
13270 |
+
* an updated valid user licenses collection will be fetched from the server which is used to also
|
13271 |
+
* update the account add-ons (add-ons the user has licenses for).
|
13272 |
+
*
|
13273 |
+
* @author Leo Fajardo (@leorw)
|
13274 |
+
* @since 2.2.4
|
13275 |
+
*/
|
13276 |
+
$fs->purge_valid_user_licenses_cache();
|
13277 |
+
}
|
13278 |
+
|
13279 |
+
$result['next_page'] = $next_page;
|
13280 |
+
}
|
13281 |
+
|
13282 |
+
return $result;
|
13283 |
+
}
|
13284 |
+
|
13285 |
+
/**
|
13286 |
+
* @author Leo Fajardo (@leorw)
|
13287 |
+
* @since 2.3.2
|
13288 |
+
*
|
13289 |
+
* @return array {
|
13290 |
+
* @key string Product slug.
|
13291 |
+
* @value array {
|
13292 |
+
* @property FS_Site $site
|
13293 |
+
* @property FS_Plugin_License $license
|
13294 |
+
* }
|
13295 |
+
* }
|
13296 |
+
*/
|
13297 |
+
private function get_parent_and_addons_installs_info() {
|
13298 |
+
$fs = $this->is_addon() ?
|
13299 |
+
$this->get_parent_instance() :
|
13300 |
+
$this;
|
13301 |
+
|
13302 |
+
$installed_addons_ids = array();
|
13303 |
+
|
13304 |
+
$installed_addons_instances = $fs->get_installed_addons();
|
13305 |
+
foreach ( $installed_addons_instances as $instance ) {
|
13306 |
+
$installed_addons_ids[] = $instance->get_id();
|
13307 |
+
}
|
13308 |
+
|
13309 |
+
$addons_ids = array_unique( array_merge(
|
13310 |
+
$installed_addons_ids,
|
13311 |
+
$fs->get_updated_account_addons()
|
13312 |
+
) );
|
13313 |
+
|
13314 |
+
// Add parent product info.
|
13315 |
+
$installs_info_by_slug_map = array(
|
13316 |
+
$fs->get_slug() => array(
|
13317 |
+
'install' => $fs->get_site(),
|
13318 |
+
'license' => $fs->_get_license()
|
13319 |
+
)
|
13320 |
);
|
13321 |
|
13322 |
+
foreach ( $addons_ids as $addon_id ) {
|
13323 |
+
$is_installed = isset( $installed_addons_ids_map[ $addon_id ] );
|
13324 |
+
|
13325 |
+
$addon_info = $fs->_get_addon_info( $addon_id, $is_installed );
|
13326 |
+
|
13327 |
+
if ( ! $addon_info['is_connected'] ) {
|
13328 |
+
// Add-on is not associated with an install entity.
|
13329 |
+
continue;
|
|
|
|
|
|
|
|
|
|
|
13330 |
}
|
13331 |
|
13332 |
+
$installs_info_by_slug_map[ $addon_info['slug'] ] = array(
|
13333 |
+
'install' => $addon_info['site'],
|
13334 |
+
'license' => isset( $addon_info['license'] ) ?
|
13335 |
+
$addon_info['license'] :
|
13336 |
+
null
|
13337 |
+
);
|
13338 |
}
|
13339 |
|
13340 |
+
return $installs_info_by_slug_map;
|
13341 |
}
|
13342 |
|
13343 |
/**
|
14366 |
$page_param = $this->_menu->get_slug( $page );
|
14367 |
|
14368 |
if ( empty( $page ) &&
|
|
|
14369 |
// Show the opt-in as an overlay for free wp.org themes or themes without any settings page.
|
14370 |
+
$this->show_opt_in_on_themes_page()
|
14371 |
) {
|
14372 |
$params[ $this->get_unique_affix() . '_show_optin' ] = 'true';
|
14373 |
|
14797 |
*
|
14798 |
* @param int $blog_id
|
14799 |
* @param FS_Site $install
|
14800 |
+
*
|
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 |
|
14808 |
switch_to_blog( $blog_id );
|
14816 |
$install :
|
14817 |
$this->get_install_by_blog_id( $blog_id );
|
14818 |
|
14819 |
+
$this->_user = false;
|
14820 |
+
$this->_licenses = false;
|
14821 |
+
$this->_license = null;
|
14822 |
+
$this->is_whitelabeled = null;
|
14823 |
|
14824 |
if ( is_object( $this->_site ) ) {
|
14825 |
// Try to fetch user from install.
|
14864 |
|
14865 |
unset( $this->_site_api );
|
14866 |
unset( $this->_user_api );
|
14867 |
+
|
14868 |
+
return false;
|
14869 |
}
|
14870 |
|
14871 |
/**
|
15311 |
return ( $this->_menu->get_slug( $page ) === fs_request_get( 'page', '', 'get' ) );
|
15312 |
}
|
15313 |
|
15314 |
+
/**
|
15315 |
+
* Check if currently in the product's main admin page.
|
15316 |
+
*
|
15317 |
+
* @author Vova Feldman (@svovaf)
|
15318 |
+
* @since 2.3.1
|
15319 |
+
*
|
15320 |
+
* @return bool
|
15321 |
+
*/
|
15322 |
+
function is_main_admin_page() {
|
15323 |
+
return $this->is_admin_page( '' );
|
15324 |
+
}
|
15325 |
+
|
15326 |
/**
|
15327 |
* Get module's main admin setting page URL.
|
15328 |
*
|
15343 |
* @since 1.2.2.7
|
15344 |
*
|
15345 |
* @return bool
|
15346 |
+
*
|
15347 |
+
* @deprecated Please use is_product_settings_page() instead;
|
15348 |
*/
|
15349 |
function is_theme_settings_page() {
|
15350 |
+
return $this->is_product_settings_page();
|
15351 |
+
}
|
15352 |
+
|
15353 |
+
/**
|
15354 |
+
* Check if currently on the product's main setting page or on any of the Freemius added pages (via tabs).
|
15355 |
+
*
|
15356 |
+
* @author Vova Feldman (@svovaf)
|
15357 |
+
* @since 1.2.2.7
|
15358 |
+
*
|
15359 |
+
* @return bool
|
15360 |
+
*/
|
15361 |
+
function is_product_settings_page() {
|
15362 |
return fs_starts_with(
|
15363 |
fs_request_get( 'page', '', 'get' ),
|
15364 |
$this->_menu->get_slug()
|
15778 |
/**
|
15779 |
* This is a special fault tolerance mechanism to handle a scenario that the user data is missing.
|
15780 |
*/
|
15781 |
+
$user = $this->sync_user_by_current_install();
|
15782 |
}
|
15783 |
|
15784 |
$this->_user = ( $user instanceof FS_User ) ?
|
15818 |
* @author Vova Feldman (@svovaf)
|
15819 |
* @since 2.0.0
|
15820 |
*
|
15821 |
+
* @param number|null $site_user_id
|
15822 |
+
*
|
15823 |
* @return \FS_User|mixed
|
15824 |
*/
|
15825 |
+
private function sync_user_by_current_install( $site_user_id = null ) {
|
15826 |
+
$site_user_id = FS_Site::is_valid_id( $site_user_id ) ?
|
15827 |
+
$site_user_id :
|
15828 |
+
$this->_site->user_id;
|
15829 |
+
|
15830 |
$api = $this->get_api_site_scope();
|
15831 |
|
15832 |
$uid = $this->get_anonymous_id();
|
15833 |
+
$request_path = "/users/{$site_user_id}.json?uid={$uid}";
|
15834 |
|
15835 |
$result = $api->get( $request_path, false, WP_FS__TIME_10_MIN_IN_SEC );
|
15836 |
|
15986 |
'is_uninstalled' => false,
|
15987 |
) );
|
15988 |
|
15989 |
+
if ( $this->is_addon() ) {
|
15990 |
+
$parent_fs = $this->get_parent_instance();
|
15991 |
+
|
15992 |
+
$params['parent_plugin_slug'] = $parent_fs->_slug;
|
15993 |
+
$params['parent_plugin_id'] = $parent_fs->get_id();
|
15994 |
+
}
|
15995 |
+
|
15996 |
if ( true === $network_level_or_blog_id ) {
|
15997 |
if ( ! isset( $override_with['sites'] ) ) {
|
15998 |
$params['sites'] = $this->get_sites_for_network_level_optin();
|
16088 |
if ( ! $is_uninstall ) {
|
16089 |
$fs_user = Freemius::_get_user_by_email( $email );
|
16090 |
if ( is_object( $fs_user ) && ! $this->is_pending_activation() ) {
|
16091 |
+
return $this->install_with_user(
|
16092 |
+
$fs_user,
|
16093 |
false,
|
16094 |
$trial_plan_id,
|
16095 |
+
true,
|
16096 |
+
true,
|
16097 |
$sites
|
16098 |
);
|
16099 |
}
|
16260 |
( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
|
16261 |
$decoded->is_marketing_allowed :
|
16262 |
null ),
|
16263 |
+
( isset( $decoded->is_extensions_tracking_allowed ) && ! is_null( $decoded->is_extensions_tracking_allowed ) ?
|
16264 |
+
$decoded->is_extensions_tracking_allowed :
|
16265 |
+
null ),
|
16266 |
$decoded->install_id,
|
16267 |
$decoded->install_public_key,
|
16268 |
$decoded->install_secret_key,
|
16276 |
( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
|
16277 |
$decoded->is_marketing_allowed :
|
16278 |
null ),
|
16279 |
+
( isset( $decoded->is_extensions_tracking_allowed ) && ! is_null( $decoded->is_extensions_tracking_allowed ) ?
|
16280 |
+
$decoded->is_extensions_tracking_allowed :
|
16281 |
+
null ),
|
16282 |
$decoded->installs,
|
16283 |
false
|
16284 |
);
|
16370 |
);
|
16371 |
|
16372 |
if ( is_numeric( $first_install->license_id ) ) {
|
16373 |
+
$this->set_license( $this->_get_license_by_id( $first_install->license_id ) );
|
16374 |
}
|
16375 |
|
16376 |
$this->_admin_notices->remove_sticky( 'connect_account' );
|
16505 |
fs_request_get( 'user_public_key' ),
|
16506 |
fs_request_get( 'user_secret_key' ),
|
16507 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
16508 |
+
fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
|
16509 |
$pending_sites_info['blog_ids'],
|
16510 |
$pending_sites_info['license_key'],
|
16511 |
$pending_sites_info['trial_plan_id']
|
16516 |
fs_request_get( 'user_public_key' ),
|
16517 |
fs_request_get( 'user_secret_key' ),
|
16518 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
16519 |
+
fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
|
16520 |
fs_request_get( 'install_id' ),
|
16521 |
fs_request_get( 'install_public_key' ),
|
16522 |
fs_request_get( 'install_secret_key' ),
|
16572 |
* @param string $user_public_key
|
16573 |
* @param string $user_secret_key
|
16574 |
* @param bool|null $is_marketing_allowed
|
16575 |
+
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
16576 |
* @param number $install_id
|
16577 |
* @param string $install_public_key
|
16578 |
* @param string $install_secret_key
|
16579 |
* @param bool $redirect
|
16580 |
+
* @param bool $auto_install Since 1.2.1.7 If `true` and setting up an account with a valid license, will redirect (or return a URL) to the account page with a special parameter to trigger the auto installation processes.
|
|
|
|
|
16581 |
*
|
16582 |
* @return string If redirect is `false`, returns the next page the user should be redirected to.
|
16583 |
*/
|
16586 |
$user_public_key,
|
16587 |
$user_secret_key,
|
16588 |
$is_marketing_allowed,
|
16589 |
+
$is_extensions_tracking_allowed,
|
16590 |
$install_id,
|
16591 |
$install_public_key,
|
16592 |
$install_secret_key,
|
16628 |
$this->disable_opt_in_notice_and_lock_user();
|
16629 |
}
|
16630 |
|
16631 |
+
if ( ! is_null( $is_extensions_tracking_allowed ) ) {
|
16632 |
+
$this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
|
16633 |
+
}
|
16634 |
+
|
16635 |
return $this->setup_account(
|
16636 |
$this->_user,
|
16637 |
$this->_site,
|
16650 |
* @param string $user_public_key
|
16651 |
* @param string $user_secret_key
|
16652 |
* @param bool|null $is_marketing_allowed
|
16653 |
+
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
16654 |
* @param array $site_ids
|
16655 |
* @param bool $license_key
|
16656 |
* @param bool $trial_plan_id
|
16663 |
$user_public_key,
|
16664 |
$user_secret_key,
|
16665 |
$is_marketing_allowed,
|
16666 |
+
$is_extensions_tracking_allowed,
|
16667 |
$site_ids,
|
16668 |
$license_key = false,
|
16669 |
$trial_plan_id = false,
|
16675 |
$this->disable_opt_in_notice_and_lock_user();
|
16676 |
}
|
16677 |
|
16678 |
+
if ( ! is_null( $is_extensions_tracking_allowed ) ) {
|
16679 |
+
$this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
|
16680 |
+
}
|
16681 |
+
|
16682 |
$sites = array();
|
16683 |
foreach ( $site_ids as $site_id ) {
|
16684 |
$sites[] = $this->get_site_info( array( 'blog_id' => $site_id ) );
|
16697 |
* @param string $user_public_key
|
16698 |
* @param string $user_secret_key
|
16699 |
* @param bool|null $is_marketing_allowed
|
16700 |
+
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
16701 |
* @param object[] $installs
|
16702 |
* @param bool $redirect
|
16703 |
+
* @param bool $auto_install Since 1.2.1.7 If `true` and setting up an account with a valid license, will redirect (or return a URL) to the account page with a special parameter to trigger the auto installation processes.
|
|
|
|
|
16704 |
*
|
16705 |
* @return string If redirect is `false`, returns the next page the user should be redirected to.
|
16706 |
*/
|
16709 |
$user_public_key,
|
16710 |
$user_secret_key,
|
16711 |
$is_marketing_allowed,
|
16712 |
+
$is_extensions_tracking_allowed,
|
16713 |
array $installs,
|
16714 |
$redirect = true,
|
16715 |
$auto_install = false
|
16720 |
$this->disable_opt_in_notice_and_lock_user();
|
16721 |
}
|
16722 |
|
16723 |
+
if ( ! is_null( $is_extensions_tracking_allowed ) ) {
|
16724 |
+
$this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
|
16725 |
+
}
|
16726 |
+
|
16727 |
$install_ids = array();
|
16728 |
|
16729 |
foreach ( $installs as $install ) {
|
16833 |
*/
|
16834 |
$license_key = fs_request_get( 'license_secret_key' );
|
16835 |
|
16836 |
+
$this->update_extensions_tracking_flag( fs_request_get_bool( 'is_extensions_tracking_allowed', true ) );
|
16837 |
+
|
16838 |
$this->install_with_current_user( $license_key );
|
16839 |
}
|
16840 |
}
|
16879 |
*
|
16880 |
* @return \FS_Site|object|string If redirect is `false`, returns the next page the user should be redirected to, or the API error object if failed to install. If $setup_account is set to `false`, return the newly created install.
|
16881 |
*/
|
16882 |
+
function install_with_user(
|
16883 |
FS_User $user,
|
16884 |
$license_key = false,
|
16885 |
$trial_plan_id = false,
|
16968 |
|
16969 |
if ( ! empty( $license_key ) ) {
|
16970 |
$extra_install_params['license_key'] = $this->apply_filters( 'license_key', $license_key );
|
16971 |
+
|
16972 |
+
if ( $silent ) {
|
16973 |
+
$extra_install_params['ignore_license_owner'] = true;
|
16974 |
+
}
|
16975 |
} else if ( FS_Plugin_Plan::is_valid_id( $trial_plan_id ) ) {
|
16976 |
$extra_install_params['trial_plan_id'] = $trial_plan_id;
|
16977 |
}
|
16993 |
! $this->is_api_result_object( $result, 'installs' )
|
16994 |
) {
|
16995 |
if ( ! empty( $args['license_key'] ) ) {
|
16996 |
+
// Pass the fully entered license key to the failure handler.
|
16997 |
$args['license_key'] = $license_key;
|
16998 |
}
|
16999 |
|
17370 |
*/
|
17371 |
private function add_menu_action() {
|
17372 |
if ( $this->is_activation_mode() ) {
|
17373 |
+
if ( $this->show_opt_in_on_setting_page() ) {
|
17374 |
$this->override_plugin_menu_with_activation();
|
17375 |
} else {
|
17376 |
/**
|
17392 |
}
|
17393 |
} else if (
|
17394 |
fs_request_is_action( 'sync_user' ) &&
|
17395 |
+
( ! $this->has_settings_menu() || $this->show_opt_in_on_themes_page() )
|
17396 |
) {
|
17397 |
$this->_handle_account_user_sync();
|
17398 |
}
|
17640 |
// Didn't ask to hide the pricing page.
|
17641 |
$this->is_page_visible( 'pricing' ) &&
|
17642 |
// Don't have a valid active license or has more than one plan.
|
17643 |
+
( ! $this->is_paying() || ! $this->is_single_plan( true ) )
|
17644 |
);
|
17645 |
}
|
17646 |
|
17658 |
return false;
|
17659 |
}
|
17660 |
|
17661 |
+
if ( $this->show_opt_in_on_themes_page() ) {
|
17662 |
+
if ( ! fs_is_network_admin() ) {
|
17663 |
+
// Also add action links or submenu items when running in a free .org theme so the tabs will be visible.
|
17664 |
+
return true;
|
17665 |
+
}
|
17666 |
+
} else if ( $is_activation_mode ) {
|
17667 |
+
// Don't show submenu-items/tabs in activation mode, unless it's a wp.org theme.
|
17668 |
return false;
|
17669 |
}
|
17670 |
|
17744 |
}
|
17745 |
|
17746 |
if ( $add_submenu_items ) {
|
17747 |
+
if (! WP_FS__DEMO_MODE && ! $this->is_whitelabeled() ) {
|
17748 |
+
// Add contact page.
|
17749 |
+
$this->add_submenu_item(
|
17750 |
+
$this->get_text_inline( 'Contact Us', 'contact-us' ),
|
17751 |
+
array( &$this, '_contact_page_render' ),
|
17752 |
+
$this->get_plugin_name() . ' – ' . $this->get_text_inline( 'Contact Us', 'contact-us' ),
|
17753 |
+
'manage_options',
|
17754 |
+
'contact',
|
17755 |
+
'Freemius::_clean_admin_content_section',
|
17756 |
+
WP_FS__DEFAULT_PRIORITY,
|
17757 |
+
$this->is_submenu_item_visible( 'contact' )
|
17758 |
+
);
|
17759 |
+
}
|
17760 |
|
17761 |
if ( $this->has_addons() ) {
|
17762 |
$this->add_submenu_item(
|
17775 |
if ( $add_submenu_items ||
|
17776 |
( $is_activation_mode && $this->is_only_premium() && $this->is_admin_page( 'pricing' ) )
|
17777 |
) {
|
17778 |
+
if (! WP_FS__DEMO_MODE && ! $this->is_whitelabeled() ) {
|
17779 |
$show_pricing = (
|
17780 |
$this->is_submenu_item_visible( 'pricing' ) &&
|
17781 |
$this->is_pricing_page_visible()
|
18140 |
|
18141 |
#endregion ------------------------------------------------------------------
|
18142 |
|
18143 |
+
#--------------------------------------------------------------------------------
|
18144 |
+
#region Admin Notices
|
18145 |
+
#--------------------------------------------------------------------------------
|
18146 |
+
|
18147 |
+
/**
|
18148 |
+
* @author Vova Feldman (@svovaf)
|
18149 |
+
* @since 2.3.1
|
18150 |
+
*
|
18151 |
+
* @param string|string[] $ids
|
18152 |
+
* @param int|null $network_level_or_blog_id
|
18153 |
+
*
|
18154 |
+
* @uses FS_Admin_Notices::remove_sticky()
|
18155 |
+
*/
|
18156 |
+
function remove_sticky( $ids, $network_level_or_blog_id = null ) {
|
18157 |
+
$this->_admin_notices->remove_sticky( $ids, $network_level_or_blog_id );
|
18158 |
+
}
|
18159 |
+
|
18160 |
+
#endregion
|
18161 |
|
18162 |
#--------------------------------------------------------------------------------
|
18163 |
#region Actions / Hooks / Filters
|
18534 |
private function _store_site( $store = true, $network_level_or_blog_id = null, FS_Site $site = null ) {
|
18535 |
$this->_logger->entrance();
|
18536 |
|
18537 |
+
if ( is_null( $site ) ) {
|
18538 |
+
$site = $this->_site;
|
18539 |
+
}
|
18540 |
+
|
18541 |
+
if ( !isset( $site ) || !is_object($site) || empty( $site->id ) ) {
|
18542 |
$this->_logger->error( "Empty install ID, can't store site." );
|
18543 |
|
18544 |
return;
|
18545 |
}
|
18546 |
|
18547 |
+
$site_clone = clone $site;
|
|
|
18548 |
|
18549 |
$sites = self::get_all_sites( $this->_module_type, $network_level_or_blog_id );
|
18550 |
|
18551 |
+
if ( is_object( $this->_user ) && $this->_user->id != $site->user_id ) {
|
18552 |
+
$this->sync_user_by_current_install( $site->user_id );
|
18553 |
|
18554 |
+
$prev_stored_user_id = $this->_storage->get( 'prev_user_id', false, $network_level_or_blog_id );
|
18555 |
+
|
18556 |
+
if ( empty( $prev_stored_user_id ) &&
|
18557 |
+
is_object($this->_user) && $this->_user->id != $site->user_id
|
18558 |
+
) {
|
18559 |
+
/**
|
18560 |
+
* Store the current user ID as the previous user ID so that the previous user can be used
|
18561 |
+
* as the install's owner while the new owner's details are not yet available.
|
18562 |
+
*
|
18563 |
+
* This will be executed only in the `replica` site. For example, there are 2 sites, namely `original`
|
18564 |
+
* and `replica`, then an ownership change was initiated and completed in the `original`, the `replica`
|
18565 |
+
* will be using the previous user until it is updated again (e.g.: until the next clone of `original`
|
18566 |
+
* into `replica`.
|
18567 |
+
*
|
18568 |
+
* @author Leo Fajardo (@leorw)
|
18569 |
+
*/
|
18570 |
+
$this->_storage->store( 'prev_user_id', $sites[ $this->_slug ]->user_id, $network_level_or_blog_id );
|
18571 |
+
}
|
18572 |
}
|
18573 |
|
18574 |
+
$sites[ $this->_slug ] = $site_clone;
|
18575 |
|
18576 |
$this->set_account_option( 'sites', $sites, $store, $network_level_or_blog_id );
|
18577 |
}
|
18781 |
* @since 2.2.4
|
18782 |
*/
|
18783 |
private function purge_valid_user_licenses_cache() {
|
18784 |
+
if ( ! $this->is_registered() ) {
|
18785 |
+
return;
|
18786 |
+
}
|
18787 |
+
|
18788 |
$this->get_api_user_scope()->purge_cache( $this->get_valid_user_licenses_endpoint() );
|
18789 |
}
|
18790 |
|
19443 |
return self::is_active_valid_license( $this->_license );
|
19444 |
}
|
19445 |
|
19446 |
+
/**
|
19447 |
+
* @author Leo Fajardo (@leorw)
|
19448 |
+
* @since 2.3.1
|
19449 |
+
*/
|
19450 |
+
function is_data_debug_mode() {
|
19451 |
+
if ( is_null( $this->is_whitelabeled ) || ! $this->is_whitelabeled ) {
|
19452 |
+
return false;
|
19453 |
+
}
|
19454 |
+
|
19455 |
+
$fs = $this->is_addon() ?
|
19456 |
+
$this->get_parent_instance() :
|
19457 |
+
$this;
|
19458 |
+
|
19459 |
+
if ( $fs->is_network_active() && fs_is_network_admin() ) {
|
19460 |
+
$is_developer_license_debug_mode = get_site_transient( "fs_{$this->get_id()}_data_debug_mode" );
|
19461 |
+
} else {
|
19462 |
+
$is_developer_license_debug_mode = get_transient( "fs_{$this->get_id()}_data_debug_mode" );
|
19463 |
+
}
|
19464 |
+
|
19465 |
+
return ( 'true' === $is_developer_license_debug_mode );
|
19466 |
+
}
|
19467 |
+
|
19468 |
+
/**
|
19469 |
+
* @author Leo Fajardo (@leorw)
|
19470 |
+
* @since 2.3.1
|
19471 |
+
*/
|
19472 |
+
function _set_data_debug_mode() {
|
19473 |
+
if ( ! $this->is_whitelabeled( true ) ) {
|
19474 |
+
return;
|
19475 |
+
}
|
19476 |
+
|
19477 |
+
$license_or_user_key = fs_request_get( 'license_or_user_key' );
|
19478 |
+
|
19479 |
+
$transient_value = ( ! empty( $license_or_user_key ) ) ?
|
19480 |
+
'true' :
|
19481 |
+
'false';
|
19482 |
+
|
19483 |
+
if ( 'true' === $transient_value ) {
|
19484 |
+
$stored_key = $this->_storage->get( ! FS_User::is_valid_id( $this->_storage->last_license_user_id ) ?
|
19485 |
+
'last_license_key' :
|
19486 |
+
'last_license_user_key'
|
19487 |
+
);
|
19488 |
+
|
19489 |
+
if ( md5( $license_or_user_key ) !== $stored_key ) {
|
19490 |
+
$this->shoot_ajax_failure( sprintf(
|
19491 |
+
'%s... %s',
|
19492 |
+
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ),
|
19493 |
+
$this->get_text_inline(
|
19494 |
+
'seems like the key you entered doesn\'t match our records.',
|
19495 |
+
'developer-or-license-not-found'
|
19496 |
+
)
|
19497 |
+
) );
|
19498 |
+
}
|
19499 |
+
}
|
19500 |
+
|
19501 |
+
if ( $this->is_network_active() && fs_is_network_admin() ) {
|
19502 |
+
set_site_transient(
|
19503 |
+
"fs_{$this->get_id()}_data_debug_mode",
|
19504 |
+
$transient_value,
|
19505 |
+
WP_FS__TIME_24_HOURS_IN_SEC / 24
|
19506 |
+
);
|
19507 |
+
} else {
|
19508 |
+
set_transient(
|
19509 |
+
"fs_{$this->get_id()}_data_debug_mode",
|
19510 |
+
$transient_value,
|
19511 |
+
WP_FS__TIME_24_HOURS_IN_SEC / 24
|
19512 |
+
);
|
19513 |
+
}
|
19514 |
+
|
19515 |
+
if ( 'true' === $transient_value ) {
|
19516 |
+
$this->_admin_notices->add_sticky(
|
19517 |
+
$this->get_text_inline(
|
19518 |
+
'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.',
|
19519 |
+
'data_debug_mode_enabled'
|
19520 |
+
),
|
19521 |
+
'data_debug_mode_enabled'
|
19522 |
+
);
|
19523 |
+
}
|
19524 |
+
|
19525 |
+
$this->shoot_ajax_success();
|
19526 |
+
}
|
19527 |
+
|
19528 |
/**
|
19529 |
* Check if a given license is active & valid (not expired).
|
19530 |
*
|
19839 |
} else {
|
19840 |
// Authentication params are broken.
|
19841 |
$this->_admin_notices->add(
|
19842 |
+
$this->get_text_inline( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.', 'wrong-authentication-param-message' ) . '<br> ' . $this->get_text_inline( 'Error received from the server:', 'server-error-message' ) . var_export( $result->error, true ),
|
19843 |
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
|
19844 |
'error'
|
19845 |
);
|
20006 |
$this->get_network_install_blog_id()
|
20007 |
);
|
20008 |
} else {
|
20009 |
+
if ( ! is_object( $this->_license ) ) {
|
20010 |
+
$this->maybe_update_whitelabel_flag(
|
20011 |
+
FS_Plugin_License::is_valid_id( $site->license_id ) ?
|
20012 |
+
$this->get_license_by_id( $site->license_id ) :
|
20013 |
+
null
|
20014 |
+
);
|
20015 |
+
} else {
|
20016 |
+
$this->maybe_update_whitelabel_flag( $this->_license );
|
20017 |
+
|
20018 |
+
if ( $this->_license->is_expired() ) {
|
20019 |
+
if ( ! $this->has_features_enabled_license() ) {
|
20020 |
+
$this->_deactivate_license();
|
20021 |
+
$plan_change = 'downgraded';
|
20022 |
+
} else {
|
20023 |
+
$last_time_expired_license_notice_was_shown = $this->_storage->get( 'expired_license_notice_shown', 0 );
|
20024 |
+
|
20025 |
+
if ( time() - ( 14 * WP_FS__TIME_24_HOURS_IN_SEC ) >= $last_time_expired_license_notice_was_shown ) {
|
20026 |
+
/**
|
20027 |
+
* Show the expired license notice every 14 days.
|
20028 |
+
*
|
20029 |
+
* @author Leo Fajardo (@leorw)
|
20030 |
+
* @since 2.3.1
|
20031 |
+
*/
|
20032 |
+
$plan_change = 'expired';
|
20033 |
+
}
|
20034 |
+
}
|
20035 |
}
|
20036 |
}
|
20037 |
|
20055 |
|
20056 |
$hmm_text = $this->get_text_x_inline( 'Hmm', 'something somebody says when they are thinking about what you have just said.', 'hmm' ) . '...';
|
20057 |
|
20058 |
+
if ( $this->apply_filters( 'has_paid_plan_account', $this->has_paid_plan() ) ) {
|
20059 |
switch ( $plan_change ) {
|
20060 |
case 'none':
|
20061 |
if ( ! $background && is_admin() ) {
|
20148 |
'license_expired',
|
20149 |
$hmm_text
|
20150 |
);
|
20151 |
+
|
20152 |
+
$this->_storage->expired_license_notice_shown = WP_FS__SCRIPT_START_TIME;
|
20153 |
+
|
20154 |
$this->_admin_notices->remove_sticky( 'plan_upgraded' );
|
20155 |
break;
|
20156 |
case 'trial_started':
|
20205 |
* @author Vova Feldman (@svovaf)
|
20206 |
* @since 1.0.5
|
20207 |
*
|
20208 |
+
* @param bool $background
|
20209 |
+
* @param FS_Plugin_License|null $premium_license
|
20210 |
*/
|
20211 |
protected function _activate_license( $background = false, $premium_license = null ) {
|
20212 |
$this->_logger->entrance();
|
20400 |
|
20401 |
if ( $show_notice ) {
|
20402 |
$this->_admin_notices->add(
|
20403 |
+
sprintf( $this->is_only_premium() ?
|
20404 |
+
$this->get_text_inline( 'Your %s license was successfully deactivated.', 'license-deactivation-message_premium-only' ) :
|
20405 |
+
$this->get_text_inline( 'Your license was successfully deactivated, you are back to the %s plan.', 'license-deactivation-message' ),
|
20406 |
+
$this->get_plan_title()
|
20407 |
+
),
|
20408 |
$this->get_text_inline( 'O.K', 'ok' )
|
20409 |
);
|
20410 |
}
|
21017 |
|
21018 |
$api = $this->get_api_site_or_plugin_scope();
|
21019 |
|
21020 |
+
$path = $this->add_show_pending( '/addons.json?enriched=true&count=50' );
|
21021 |
|
21022 |
/**
|
21023 |
* @since 1.2.1
|
21211 |
return true;
|
21212 |
}
|
21213 |
|
21214 |
+
/**
|
21215 |
+
* Completes ownership change by license.
|
21216 |
+
*
|
21217 |
+
* @author Leo Fajardo (@leorw)
|
21218 |
+
* @since 2.3.2
|
21219 |
+
*
|
21220 |
+
* @param number $user_id
|
21221 |
+
* @param array[string]number $install_ids_by_slug_map
|
21222 |
+
*
|
21223 |
+
*/
|
21224 |
+
private function complete_ownership_change_by_license( $user_id, $install_ids_by_slug_map ) {
|
21225 |
+
$this->_logger->entrance();
|
21226 |
+
|
21227 |
+
$this->sync_user_by_current_install( $user_id );
|
21228 |
+
|
21229 |
+
$result = $this->get_api_user_scope( true )->get(
|
21230 |
+
"/installs.json?install_ids=" . implode( ',', $install_ids_by_slug_map )
|
21231 |
+
);
|
21232 |
+
|
21233 |
+
if ( $this->is_api_result_object( $result, 'installs' ) ) {
|
21234 |
+
$sites = self::get_all_sites( $this->get_module_type() );
|
21235 |
+
$install_ids_by_slug_map = array_flip( $install_ids_by_slug_map );
|
21236 |
+
|
21237 |
+
foreach ( $result->installs as $install ) {
|
21238 |
+
$site = new FS_Site( $install );
|
21239 |
+
|
21240 |
+
$sites[ $install_ids_by_slug_map[ $site->id ] ] = clone $site;
|
21241 |
+
}
|
21242 |
+
|
21243 |
+
$this->set_account_option( 'sites', $sites, true );
|
21244 |
+
}
|
21245 |
+
}
|
21246 |
+
|
21247 |
/**
|
21248 |
* Handle user name update.
|
21249 |
*
|
21357 |
* @return string
|
21358 |
*/
|
21359 |
function get_after_activation_url( $filter, $params = array(), $network = null ) {
|
21360 |
+
if ( $this->show_opt_in_on_themes_page() &&
|
21361 |
( fs_request_has( 'pending_activation' ) ||
|
21362 |
// For cases when the first time path is set, even though it's a WP.org theme.
|
21363 |
fs_request_get_bool( $this->get_unique_affix() . '_show_optin' ) )
|
21412 |
// Alias.
|
21413 |
$oops_text = $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...';
|
21414 |
|
21415 |
+
$is_network_action = $this->is_network_level_action();
|
21416 |
+
$blog_id = $this->is_network_level_site_specific_action();
|
21417 |
+
$is_parent_plugin_action = ( $plugin_id == $this->get_id() );
|
21418 |
|
21419 |
if ( is_numeric( $blog_id ) ) {
|
21420 |
$this->switch_to_blog( $blog_id );
|
21426 |
case 'opt_in':
|
21427 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
21428 |
|
21429 |
+
if ( $is_parent_plugin_action ) {
|
21430 |
if ( $is_network_action && ! empty( $blog_id ) ) {
|
21431 |
if ( ! $this->is_registered() ) {
|
21432 |
$this->install_with_user(
|
21449 |
case 'toggle_tracking':
|
21450 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
21451 |
|
21452 |
+
if ( $is_parent_plugin_action ) {
|
21453 |
if ( $is_network_action && ! empty( $blog_id ) ) {
|
21454 |
if ( $this->is_registered() ) {
|
21455 |
if ( $this->is_tracking_prohibited() ) {
|
21484 |
case 'delete_account':
|
21485 |
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
|
21486 |
|
21487 |
+
$is_network_deletion = $is_network_action && empty( $blog_id );
|
21488 |
+
|
21489 |
+
if ( $is_parent_plugin_action ) {
|
21490 |
+
// Delete add-on installs if have any.
|
21491 |
+
$installed_addons = $this->get_installed_addons();
|
21492 |
+
foreach ( $installed_addons as $fs_addon ) {
|
21493 |
+
if ( $is_network_deletion ) {
|
21494 |
+
$fs_addon->delete_network_account_event();
|
21495 |
+
} else {
|
21496 |
+
$fs_addon->delete_account_event();
|
21497 |
+
}
|
21498 |
+
}
|
21499 |
+
|
21500 |
+
if ( $is_network_deletion ) {
|
21501 |
$this->delete_network_account_event();
|
21502 |
} else {
|
21503 |
$this->delete_account_event();
|
21513 |
} else {
|
21514 |
if ( $this->is_addon_activated( $plugin_id ) ) {
|
21515 |
$fs_addon = self::get_instance_by_id( $plugin_id );
|
21516 |
+
|
21517 |
+
if ( $is_network_deletion ) {
|
21518 |
+
$fs_addon->delete_network_account_event();
|
21519 |
+
} else {
|
21520 |
+
$fs_addon->delete_account_event();
|
21521 |
+
}
|
21522 |
|
21523 |
fs_redirect( $this->_get_admin_page_url( 'account' ) );
|
21524 |
}
|
22118 |
return $this->_plugin_api;
|
22119 |
}
|
22120 |
|
22121 |
+
/**
|
22122 |
+
* Get bundle public API scope.
|
22123 |
+
*
|
22124 |
+
* @author Vova Feldman (@svovaf)
|
22125 |
+
* @since 2.3.1
|
22126 |
+
*
|
22127 |
+
* @return FS_Api
|
22128 |
+
*/
|
22129 |
+
function get_api_bundle_scope() {
|
22130 |
+
return FS_Api::instance(
|
22131 |
+
$this->get_bundle_id(),
|
22132 |
+
'plugin',
|
22133 |
+
$this->get_bundle_id(),
|
22134 |
+
$this->get_bundle_public_key(),
|
22135 |
+
! $this->is_live(),
|
22136 |
+
false,
|
22137 |
+
$this->get_sdk_version()
|
22138 |
+
);
|
22139 |
+
}
|
22140 |
+
|
22141 |
/**
|
22142 |
* Get site API scope object (fallback to public plugin scope when not registered).
|
22143 |
*
|
22471 |
function _show_theme_activation_optin_dialog() {
|
22472 |
fs_enqueue_local_style( 'fs_connect', '/admin/connect.css' );
|
22473 |
|
22474 |
+
add_action( 'admin_footer', array( &$this, '_add_fs_theme_activation_dialog' ) );
|
22475 |
}
|
22476 |
|
22477 |
/**
|
22479 |
* @since 1.2.2
|
22480 |
*/
|
22481 |
function _add_fs_theme_activation_dialog() {
|
22482 |
+
global $pagenow;
|
22483 |
+
|
22484 |
+
if ( 'themes.php' !== $pagenow ) {
|
22485 |
+
return;
|
22486 |
+
}
|
22487 |
+
|
22488 |
$vars = array( 'id' => $this->_module_id );
|
22489 |
fs_require_once_template( 'connect.php', $vars );
|
22490 |
}
|
22572 |
$add_upgrade_link = (
|
22573 |
$add_action_links ||
|
22574 |
( $is_activation_mode && $this->is_only_premium() )
|
22575 |
+
) && ! WP_FS__DEMO_MODE && ( ! $this->is_whitelabeled() );
|
22576 |
|
22577 |
$add_addons_link = ( $add_action_links && $this->has_addons() );
|
22578 |
|
22661 |
|
22662 |
$this->_logger->entrance();
|
22663 |
|
22664 |
+
/**
|
22665 |
+
* @author Vova Feldman (@svovaf)
|
22666 |
+
* @since 2.3.2 Allow opting out from usage-tracking for paid products too by giving the appropriate warning letting the user know the automatic updates mechanism cannot function without an ongoing connection to the licensing and updates engine.
|
22667 |
+
*/
|
22668 |
+
/*if ( $this->is_premium() ) {
|
22669 |
+
// Don't add opt-in/out for premium code base.
|
22670 |
+
return;
|
22671 |
+
}*/
|
22672 |
+
|
22673 |
+
if ( $this->is_only_premium() && $this->is_free_plan() ) {
|
22674 |
+
// Don't add tracking links for premium-only products that were opted-in by relation (add-on or a parent product) before activating any license.
|
22675 |
+
return;
|
22676 |
+
}
|
22677 |
+
|
22678 |
if ( fs_is_network_admin() ) {
|
22679 |
if ( ! $this->_is_network_active ) {
|
22680 |
// Don't add tracking links when browsing the network WP Admin and the plugin is not network active.
|
22725 |
return;
|
22726 |
}
|
22727 |
|
22728 |
+
if ( $this->add_ajax_action( 'update_tracking_permission', array( &$this, '_update_tracking_permission_callback' ) ) ) {
|
22729 |
+
return;
|
22730 |
+
}
|
22731 |
+
|
22732 |
$link_text_id = '';
|
22733 |
$url = '#';
|
22734 |
|
22738 |
} else {
|
22739 |
$link_text_id = $this->get_text_inline( 'Opt In', 'opt-in' );
|
22740 |
}
|
|
|
|
|
22741 |
} else if ( $this->is_anonymous() || $this->is_activation_mode() ) {
|
22742 |
/**
|
22743 |
* Show opt-in link only if skipped or in activation mode.
|
22754 |
$url = $this->get_activation_url( $params );
|
22755 |
}
|
22756 |
|
22757 |
+
add_action( 'admin_footer', array( &$this, '_add_optout_dialog' ) );
|
22758 |
+
|
22759 |
if ( ! empty( $link_text_id ) && $this->is_plugin() && self::is_plugins_page() ) {
|
22760 |
$this->add_plugin_action_link(
|
22761 |
$link_text_id,
|
23445 |
function _tabs_capture() {
|
23446 |
$this->_logger->entrance();
|
23447 |
|
23448 |
+
if ( ! $this->is_product_settings_page() ||
|
23449 |
! $this->is_matching_url( $this->main_menu_url() )
|
23450 |
) {
|
23451 |
return;
|
23500 |
function _store_tabs_styles() {
|
23501 |
$this->_logger->entrance();
|
23502 |
|
23503 |
+
if ( ! $this->is_product_settings_page() ||
|
23504 |
! $this->is_matching_url( $this->main_menu_url() )
|
23505 |
) {
|
23506 |
return;
|
23574 |
return false;
|
23575 |
}
|
23576 |
|
23577 |
+
if ( self::NAVIGATION_TABS !== $this->_navigation ) {
|
23578 |
// Only add tabs to themes for now.
|
23579 |
return false;
|
23580 |
}
|
23581 |
|
23582 |
+
if ( $this->is_theme() && ! $this->has_paid_plan() && ! $this->has_addons() ) {
|
23583 |
// Only add tabs to monetizing themes.
|
23584 |
return false;
|
23585 |
}
|
23586 |
|
23587 |
+
if ( ! $this->is_product_settings_page() ) {
|
23588 |
+
// Only add tabs if browsing one of the product's setting pages.
|
23589 |
+
return false;
|
23590 |
+
}
|
23591 |
+
|
23592 |
+
if ( $this->is_activation_mode() && $this->is_activation_page() ) {
|
23593 |
+
// Don't include tabs in the activation page.
|
23594 |
return false;
|
23595 |
}
|
23596 |
|
24277 |
}
|
24278 |
|
24279 |
$modules = array_merge(
|
24280 |
+
array_values( self::maybe_get_entities_account_option( 'plugins', array() ) ),
|
24281 |
+
array_values( self::maybe_get_entities_account_option( 'themes', array() ) )
|
24282 |
);
|
24283 |
|
24284 |
foreach ( $modules as $module ) {
|
24383 |
*
|
24384 |
* @author Vova Feldman (@svovaf)
|
24385 |
*/
|
24386 |
+
self::shoot_ajax_success( array(
|
24387 |
+
'is_marketing_allowed' => null,
|
24388 |
+
'license_owner_id' => null
|
24389 |
+
) );
|
24390 |
+
}
|
24391 |
+
|
24392 |
+
self::shoot_ajax_success( array(
|
24393 |
+
'is_marketing_allowed' => $user_plugins[0]->is_marketing_allowed,
|
24394 |
+
'license_owner_id' => ( isset( $user_plugins[0]->license_owner_id ) ? $user_plugins[0]->license_owner_id : null )
|
24395 |
+
) );
|
24396 |
+
}
|
24397 |
+
|
24398 |
+
/**
|
24399 |
+
* @author Leo Fajardo (@leorw)
|
24400 |
+
* @since 2.3.2
|
24401 |
+
*
|
24402 |
+
* @param number[] $install_ids
|
24403 |
+
*
|
24404 |
+
* @return array {
|
24405 |
+
* An array of objects containing the installs' licenses owners data.
|
24406 |
+
*
|
24407 |
+
* @property number $id User ID.
|
24408 |
+
* @property string $email User email (can be masked email).
|
24409 |
+
* }
|
24410 |
+
*/
|
24411 |
+
private function fetch_installs_licenses_owners_data( $install_ids ) {
|
24412 |
+
$this->_logger->entrance();
|
24413 |
+
|
24414 |
+
$response = $this->get_api_user_scope()->get(
|
24415 |
+
'/licenses_owners.json?install_ids=' . implode( ',', $install_ids )
|
24416 |
+
);
|
24417 |
+
|
24418 |
+
$license_owners = null;
|
24419 |
+
|
24420 |
+
if ( $this->is_api_result_object( $response, 'owners' ) ) {
|
24421 |
+
$license_owners = $response->owners;
|
24422 |
}
|
24423 |
|
24424 |
+
return $license_owners;
|
24425 |
}
|
24426 |
|
24427 |
/**
|
24457 |
}
|
24458 |
|
24459 |
$modules = array_merge(
|
24460 |
+
array_values( self::maybe_get_entities_account_option( 'plugins', array() ) ),
|
24461 |
+
array_values( self::maybe_get_entities_account_option( 'themes', array() ) )
|
24462 |
);
|
24463 |
|
24464 |
foreach ( $modules as $key => $module ) {
|
common/vendor/freemius/includes/class-fs-plugin-updater.php
CHANGED
@@ -102,7 +102,9 @@
|
|
102 |
'edit_and_echo_plugin_update_row'
|
103 |
), 11, 2 );
|
104 |
|
105 |
-
|
|
|
|
|
106 |
|
107 |
if ( ! WP_FS__IS_PRODUCTION_MODE ) {
|
108 |
add_filter( 'http_request_host_is_external', array(
|
@@ -238,6 +240,12 @@
|
|
238 |
* @since 2.0.0
|
239 |
*/
|
240 |
private function add_transient_filters() {
|
|
|
|
|
|
|
|
|
|
|
|
|
241 |
add_filter( 'pre_set_site_transient_update_plugins', array(
|
242 |
&$this,
|
243 |
'pre_set_site_transient_update_plugins_filter'
|
@@ -487,13 +495,35 @@
|
|
487 |
return $transient_data;
|
488 |
}
|
489 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
490 |
if ( ! isset( $this->_update_details ) ) {
|
491 |
// Get plugin's newest update.
|
492 |
$new_version = $this->_fs->get_update(
|
493 |
false,
|
494 |
fs_request_get_bool( 'force-check' ),
|
495 |
WP_FS__TIME_24_HOURS_IN_SEC / 24,
|
496 |
-
$
|
497 |
);
|
498 |
|
499 |
$this->_update_details = false;
|
102 |
'edit_and_echo_plugin_update_row'
|
103 |
), 11, 2 );
|
104 |
|
105 |
+
if ( ! $this->_fs->has_any_active_valid_license() ) {
|
106 |
+
add_action( 'admin_head', array( &$this, 'catch_plugin_information_dialog_contents' ) );
|
107 |
+
}
|
108 |
|
109 |
if ( ! WP_FS__IS_PRODUCTION_MODE ) {
|
110 |
add_filter( 'http_request_host_is_external', array(
|
240 |
* @since 2.0.0
|
241 |
*/
|
242 |
private function add_transient_filters() {
|
243 |
+
if ( $this->_fs->is_premium() && ! $this->_fs->is_tracking_allowed() ) {
|
244 |
+
$this->_logger->log( 'Opted out sites cannot receive automatic software updates.' );
|
245 |
+
|
246 |
+
return;
|
247 |
+
}
|
248 |
+
|
249 |
add_filter( 'pre_set_site_transient_update_plugins', array(
|
250 |
&$this,
|
251 |
'pre_set_site_transient_update_plugins_filter'
|
495 |
return $transient_data;
|
496 |
}
|
497 |
|
498 |
+
global $wp_current_filter;
|
499 |
+
|
500 |
+
$current_plugin_version = $this->_fs->get_plugin_version();
|
501 |
+
|
502 |
+
if ( ! empty( $wp_current_filter ) && 'upgrader_process_complete' === $wp_current_filter[0] ) {
|
503 |
+
if (
|
504 |
+
is_null( $this->_update_details ) ||
|
505 |
+
( is_object( $this->_update_details ) && $this->_update_details->new_version !== $current_plugin_version )
|
506 |
+
) {
|
507 |
+
/**
|
508 |
+
* After an update, clear the stored update details and reparse the plugin's main file in order to get
|
509 |
+
* the updated version's information and prevent the previous update information from showing up on the
|
510 |
+
* updates page.
|
511 |
+
*
|
512 |
+
* @author Leo Fajardo (@leorw)
|
513 |
+
* @since 2.3.1
|
514 |
+
*/
|
515 |
+
$this->_update_details = null;
|
516 |
+
$current_plugin_version = $this->_fs->get_plugin_version( true );
|
517 |
+
}
|
518 |
+
}
|
519 |
+
|
520 |
if ( ! isset( $this->_update_details ) ) {
|
521 |
// Get plugin's newest update.
|
522 |
$new_version = $this->_fs->get_update(
|
523 |
false,
|
524 |
fs_request_get_bool( 'force-check' ),
|
525 |
WP_FS__TIME_24_HOURS_IN_SEC / 24,
|
526 |
+
$current_plugin_version
|
527 |
);
|
528 |
|
529 |
$this->_update_details = false;
|
common/vendor/freemius/includes/class-fs-storage.php
CHANGED
@@ -336,57 +336,62 @@
|
|
336 |
private static function load_network_options_map() {
|
337 |
self::$_NETWORK_OPTIONS_MAP = array(
|
338 |
// Network level options.
|
339 |
-
'affiliate_application_data'
|
340 |
-
'beta_data'
|
341 |
-
'connectivity_test'
|
342 |
-
'handle_gdpr_admin_notice'
|
343 |
-
'has_trial_plan'
|
344 |
-
'install_sync_timestamp'
|
345 |
-
'install_sync_cron'
|
346 |
-
'is_anonymous_ms'
|
347 |
-
'is_network_activated'
|
348 |
-
'is_on'
|
349 |
-
'is_plugin_new_install'
|
350 |
-
'network_install_blog_id'
|
351 |
-
'pending_sites_info'
|
352 |
-
'plugin_last_version'
|
353 |
-
'plugin_main_file'
|
354 |
-
'plugin_version'
|
355 |
-
'sdk_downgrade_mode'
|
356 |
-
'sdk_last_version'
|
357 |
-
'sdk_upgrade_mode'
|
358 |
-
'sdk_version'
|
359 |
-
'sticky_optin_added_ms'
|
360 |
-
'subscriptions'
|
361 |
-
'sync_timestamp'
|
362 |
-
'sync_cron'
|
363 |
-
'was_plugin_loaded'
|
364 |
-
'network_user_id'
|
365 |
-
'plugin_upgrade_mode'
|
366 |
-
'plugin_downgrade_mode'
|
367 |
-
'is_network_connected'
|
368 |
/**
|
369 |
* Special flag that is used when a super-admin upgrades to the new version of the SDK that
|
370 |
* supports network level integration, when the connection decision wasn't made for all of the
|
371 |
* sites in the network.
|
372 |
*/
|
373 |
-
'is_network_activation'
|
374 |
|
375 |
// When network activated, then network level.
|
376 |
-
'install_timestamp'
|
377 |
-
'prev_is_premium'
|
378 |
-
'require_license_activation'
|
379 |
|
380 |
// If not network activated OR delegated, then site level.
|
381 |
-
'activation_timestamp'
|
382 |
-
'
|
383 |
-
'
|
384 |
-
'
|
385 |
-
'
|
386 |
-
'
|
|
|
|
|
|
|
|
|
|
|
387 |
|
388 |
// Site level options.
|
389 |
-
'is_anonymous'
|
390 |
);
|
391 |
}
|
392 |
|
336 |
private static function load_network_options_map() {
|
337 |
self::$_NETWORK_OPTIONS_MAP = array(
|
338 |
// Network level options.
|
339 |
+
'affiliate_application_data' => 0,
|
340 |
+
'beta_data' => 0,
|
341 |
+
'connectivity_test' => 0,
|
342 |
+
'handle_gdpr_admin_notice' => 0,
|
343 |
+
'has_trial_plan' => 0,
|
344 |
+
'install_sync_timestamp' => 0,
|
345 |
+
'install_sync_cron' => 0,
|
346 |
+
'is_anonymous_ms' => 0,
|
347 |
+
'is_network_activated' => 0,
|
348 |
+
'is_on' => 0,
|
349 |
+
'is_plugin_new_install' => 0,
|
350 |
+
'network_install_blog_id' => 0,
|
351 |
+
'pending_sites_info' => 0,
|
352 |
+
'plugin_last_version' => 0,
|
353 |
+
'plugin_main_file' => 0,
|
354 |
+
'plugin_version' => 0,
|
355 |
+
'sdk_downgrade_mode' => 0,
|
356 |
+
'sdk_last_version' => 0,
|
357 |
+
'sdk_upgrade_mode' => 0,
|
358 |
+
'sdk_version' => 0,
|
359 |
+
'sticky_optin_added_ms' => 0,
|
360 |
+
'subscriptions' => 0,
|
361 |
+
'sync_timestamp' => 0,
|
362 |
+
'sync_cron' => 0,
|
363 |
+
'was_plugin_loaded' => 0,
|
364 |
+
'network_user_id' => 0,
|
365 |
+
'plugin_upgrade_mode' => 0,
|
366 |
+
'plugin_downgrade_mode' => 0,
|
367 |
+
'is_network_connected' => 0,
|
368 |
/**
|
369 |
* Special flag that is used when a super-admin upgrades to the new version of the SDK that
|
370 |
* supports network level integration, when the connection decision wasn't made for all of the
|
371 |
* sites in the network.
|
372 |
*/
|
373 |
+
'is_network_activation' => 0,
|
374 |
|
375 |
// When network activated, then network level.
|
376 |
+
'install_timestamp' => 1,
|
377 |
+
'prev_is_premium' => 1,
|
378 |
+
'require_license_activation' => 1,
|
379 |
|
380 |
// If not network activated OR delegated, then site level.
|
381 |
+
'activation_timestamp' => 2,
|
382 |
+
'expired_license_notice_shown' => 2,
|
383 |
+
'is_whitelabeled' => 2,
|
384 |
+
'last_license_key' => 2,
|
385 |
+
'last_license_user_id' => 2,
|
386 |
+
'prev_user_id' => 2,
|
387 |
+
'sticky_optin_added' => 2,
|
388 |
+
'uninstall_reason' => 2,
|
389 |
+
'is_pending_activation' => 2,
|
390 |
+
'pending_license_key' => 2,
|
391 |
+
'is_extensions_tracking_allowed' => 2,
|
392 |
|
393 |
// Site level options.
|
394 |
+
'is_anonymous' => 3,
|
395 |
);
|
396 |
}
|
397 |
|
common/vendor/freemius/includes/customizer/class-fs-customizer-upsell-control.php
CHANGED
@@ -58,8 +58,12 @@
|
|
58 |
$this->fs->get_trial_url() :
|
59 |
$this->fs->get_upgrade_url();
|
60 |
|
|
|
|
|
|
|
|
|
61 |
// Load features.
|
62 |
-
$pricing = $
|
63 |
|
64 |
if ( $this->fs->is_api_result_object( $pricing, 'plans' ) ) {
|
65 |
// Add support features.
|
58 |
$this->fs->get_trial_url() :
|
59 |
$this->fs->get_upgrade_url();
|
60 |
|
61 |
+
$api = FS_Plugin::is_valid_id( $this->fs->get_bundle_id() ) ?
|
62 |
+
$this->fs->get_api_bundle_scope() :
|
63 |
+
$this->fs->get_api_plugin_scope();
|
64 |
+
|
65 |
// Load features.
|
66 |
+
$pricing = $api->get( $this->fs->add_show_pending( "pricing.json" ) );
|
67 |
|
68 |
if ( $this->fs->is_api_result_object( $pricing, 'plans' ) ) {
|
69 |
// Add support features.
|
common/vendor/freemius/includes/entities/class-fs-entity.php
CHANGED
@@ -146,4 +146,14 @@
|
|
146 |
static function is_valid_id($id){
|
147 |
return is_numeric($id);
|
148 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
}
|
146 |
static function is_valid_id($id){
|
147 |
return is_numeric($id);
|
148 |
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* @author Leo Fajardo (@leorw)
|
152 |
+
* @since 2.3.1
|
153 |
+
*
|
154 |
+
* @return string
|
155 |
+
*/
|
156 |
+
public static function get_class_name() {
|
157 |
+
return get_called_class();
|
158 |
+
}
|
159 |
}
|
common/vendor/freemius/includes/entities/class-fs-plugin-license.php
CHANGED
@@ -74,6 +74,10 @@
|
|
74 |
* @var string
|
75 |
*/
|
76 |
public $secret_key;
|
|
|
|
|
|
|
|
|
77 |
/**
|
78 |
* @var bool $is_free_localhost Defaults to true. If true, allow unlimited localhost installs with the same
|
79 |
* license.
|
@@ -287,4 +291,33 @@
|
|
287 |
function total_activations() {
|
288 |
return ( $this->activated + $this->activated_local );
|
289 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
290 |
}
|
74 |
* @var string
|
75 |
*/
|
76 |
public $secret_key;
|
77 |
+
/**
|
78 |
+
* @var bool
|
79 |
+
*/
|
80 |
+
public $is_whitelabeled;
|
81 |
/**
|
82 |
* @var bool $is_free_localhost Defaults to true. If true, allow unlimited localhost installs with the same
|
83 |
* license.
|
291 |
function total_activations() {
|
292 |
return ( $this->activated + $this->activated_local );
|
293 |
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* @author Vova Feldman (@svovaf)
|
297 |
+
* @since 2.3.1
|
298 |
+
*
|
299 |
+
* @return string
|
300 |
+
*/
|
301 |
+
function get_html_escaped_masked_secret_key() {
|
302 |
+
return self::mask_secret_key_for_html( $this->secret_key );
|
303 |
+
}
|
304 |
+
|
305 |
+
/**
|
306 |
+
* @author Vova Feldman (@svovaf)
|
307 |
+
* @since 2.3.1
|
308 |
+
*
|
309 |
+
* @param string $secret_key
|
310 |
+
*
|
311 |
+
* @return string
|
312 |
+
*/
|
313 |
+
static function mask_secret_key_for_html( $secret_key ) {
|
314 |
+
return (
|
315 |
+
// Initial 6 chars - sk_ABC
|
316 |
+
htmlspecialchars( substr( $secret_key, 0, 6 ) ) .
|
317 |
+
// Masking
|
318 |
+
str_pad( '', ( strlen( $secret_key ) - 9 ) * 6, '•' ) .
|
319 |
+
// Last 3 chars.
|
320 |
+
htmlspecialchars( substr( $secret_key, - 3 ) )
|
321 |
+
);
|
322 |
+
}
|
323 |
}
|
common/vendor/freemius/includes/entities/class-fs-plugin.php
CHANGED
@@ -99,6 +99,11 @@
|
|
99 |
* @var null|number
|
100 |
*/
|
101 |
public $bundle_id;
|
|
|
|
|
|
|
|
|
|
|
102 |
|
103 |
const AFFILIATE_MODERATION_CUSTOMERS = 'customers';
|
104 |
|
99 |
* @var null|number
|
100 |
*/
|
101 |
public $bundle_id;
|
102 |
+
/**
|
103 |
+
* @since 2.3.1
|
104 |
+
* @var null|string
|
105 |
+
*/
|
106 |
+
public $bundle_public_key;
|
107 |
|
108 |
const AFFILIATE_MODERATION_CUSTOMERS = 'customers';
|
109 |
|
common/vendor/freemius/includes/entities/class-fs-pricing.php
CHANGED
@@ -34,6 +34,13 @@
|
|
34 |
* @var null|float
|
35 |
*/
|
36 |
public $lifetime_price;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
|
38 |
#endregion Properties
|
39 |
|
@@ -138,4 +145,13 @@
|
|
138 |
return ( $this->monthly_price * 12 - $this->annual_price ) * ( $this->is_unlimited() ? 1 : $this->licenses );
|
139 |
}
|
140 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
}
|
34 |
* @var null|float
|
35 |
*/
|
36 |
public $lifetime_price;
|
37 |
+
/**
|
38 |
+
* @author Leo Fajardo (@leorw)
|
39 |
+
* @since 2.3.1
|
40 |
+
*
|
41 |
+
* @var string One of the following: `usd`, `gbp`, `eur`.
|
42 |
+
*/
|
43 |
+
public $currency;
|
44 |
|
45 |
#endregion Properties
|
46 |
|
145 |
return ( $this->monthly_price * 12 - $this->annual_price ) * ( $this->is_unlimited() ? 1 : $this->licenses );
|
146 |
}
|
147 |
|
148 |
+
/**
|
149 |
+
* @author Leo Fajardo (@leorw)
|
150 |
+
* @since 2.3.1
|
151 |
+
*
|
152 |
+
* @return bool
|
153 |
+
*/
|
154 |
+
function is_usd() {
|
155 |
+
return ( 'usd' === $this->currency );
|
156 |
+
}
|
157 |
}
|
common/vendor/freemius/includes/entities/class-fs-site.php
CHANGED
@@ -172,12 +172,12 @@
|
|
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-'))) ||
|
177 |
// Cloudways
|
178 |
fs_ends_with( $subdomain, '.cloudwaysapps.com' ) ||
|
179 |
// Kinsta
|
180 |
-
(fs_ends_with($subdomain, '.kinsta.com')
|
181 |
// DesktopServer
|
182 |
fs_ends_with( $subdomain, '.dev.cc' )
|
183 |
);
|
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-' ) ) ) ||
|
177 |
// Cloudways
|
178 |
fs_ends_with( $subdomain, '.cloudwaysapps.com' ) ||
|
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 |
);
|
common/vendor/freemius/includes/entities/class-fs-subscription.php
CHANGED
@@ -1,125 +1,147 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
|
13 |
-
|
14 |
|
15 |
-
|
16 |
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
|
78 |
-
|
79 |
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
* @author Vova Feldman (@svovaf)
|
110 |
-
* @since 1.0.9
|
111 |
-
*
|
112 |
-
* @return bool
|
113 |
-
*/
|
114 |
-
function is_first_payment_pending() {
|
115 |
-
return ( WP_FS__TIME_24_HOURS_IN_SEC >= strtotime( $this->next_payment ) - strtotime( $this->created ) );
|
116 |
-
}
|
117 |
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.9
|
7 |
+
*/
|
8 |
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
|
13 |
+
class FS_Subscription extends FS_Entity {
|
14 |
|
15 |
+
#region Properties
|
16 |
|
17 |
+
/**
|
18 |
+
* @var number
|
19 |
+
*/
|
20 |
+
public $user_id;
|
21 |
+
/**
|
22 |
+
* @var number
|
23 |
+
*/
|
24 |
+
public $install_id;
|
25 |
+
/**
|
26 |
+
* @var number
|
27 |
+
*/
|
28 |
+
public $plan_id;
|
29 |
+
/**
|
30 |
+
* @var number
|
31 |
+
*/
|
32 |
+
public $license_id;
|
33 |
+
/**
|
34 |
+
* @var float
|
35 |
+
*/
|
36 |
+
public $total_gross;
|
37 |
+
/**
|
38 |
+
* @var float
|
39 |
+
*/
|
40 |
+
public $amount_per_cycle;
|
41 |
+
/**
|
42 |
+
* @var int # of months
|
43 |
+
*/
|
44 |
+
public $billing_cycle;
|
45 |
+
/**
|
46 |
+
* @var float
|
47 |
+
*/
|
48 |
+
public $outstanding_balance;
|
49 |
+
/**
|
50 |
+
* @var int
|
51 |
+
*/
|
52 |
+
public $failed_payments;
|
53 |
+
/**
|
54 |
+
* @var string
|
55 |
+
*/
|
56 |
+
public $gateway;
|
57 |
+
/**
|
58 |
+
* @var string
|
59 |
+
*/
|
60 |
+
public $external_id;
|
61 |
+
/**
|
62 |
+
* @var string|null
|
63 |
+
*/
|
64 |
+
public $trial_ends;
|
65 |
+
/**
|
66 |
+
* @var string|null Datetime of the next payment, or null if cancelled.
|
67 |
+
*/
|
68 |
+
public $next_payment;
|
69 |
+
/**
|
70 |
+
* @since 2.3.1
|
71 |
+
*
|
72 |
+
* @var string|null Datetime of the cancellation.
|
73 |
+
*/
|
74 |
+
public $canceled_at;
|
75 |
+
/**
|
76 |
+
* @var string|null
|
77 |
+
*/
|
78 |
+
public $vat_id;
|
79 |
+
/**
|
80 |
+
* @var string Two characters country code
|
81 |
+
*/
|
82 |
+
public $country_code;
|
83 |
|
84 |
+
#endregion Properties
|
85 |
|
86 |
+
/**
|
87 |
+
* @param object|bool $subscription
|
88 |
+
*/
|
89 |
+
function __construct( $subscription = false ) {
|
90 |
+
parent::__construct( $subscription );
|
91 |
+
}
|
92 |
|
93 |
+
static function get_type() {
|
94 |
+
return 'subscription';
|
95 |
+
}
|
96 |
|
97 |
+
/**
|
98 |
+
* Check if subscription is active.
|
99 |
+
*
|
100 |
+
* @author Vova Feldman (@svovaf)
|
101 |
+
* @since 1.0.9
|
102 |
+
*
|
103 |
+
* @return bool
|
104 |
+
*/
|
105 |
+
function is_active() {
|
106 |
+
if ( $this->is_canceled() ) {
|
107 |
+
return false;
|
108 |
+
}
|
109 |
|
110 |
+
return (
|
111 |
+
! empty( $this->next_payment ) &&
|
112 |
+
strtotime( $this->next_payment ) > WP_FS__SCRIPT_START_TIME
|
113 |
+
);
|
114 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
|
116 |
+
/**
|
117 |
+
* @author Vova Feldman (@svovaf)
|
118 |
+
* @since 2.3.1
|
119 |
+
*
|
120 |
+
* @return bool
|
121 |
+
*/
|
122 |
+
function is_canceled() {
|
123 |
+
return ! is_null( $this->canceled_at );
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Subscription considered to be new without any payments
|
128 |
+
* if the next payment should be made within less than 24 hours
|
129 |
+
* from the subscription creation.
|
130 |
+
*
|
131 |
+
* @author Vova Feldman (@svovaf)
|
132 |
+
* @since 1.0.9
|
133 |
+
*
|
134 |
+
* @return bool
|
135 |
+
*/
|
136 |
+
function is_first_payment_pending() {
|
137 |
+
return ( WP_FS__TIME_24_HOURS_IN_SEC >= strtotime( $this->next_payment ) - strtotime( $this->created ) );
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* @author Vova Feldman (@svovaf)
|
142 |
+
* @since 1.1.7
|
143 |
+
*/
|
144 |
+
function has_trial() {
|
145 |
+
return ! is_null( $this->trial_ends );
|
146 |
+
}
|
147 |
+
}
|
common/vendor/freemius/includes/fs-core-functions.php
CHANGED
@@ -63,62 +63,70 @@
|
|
63 |
/* Scripts and styles including.
|
64 |
--------------------------------------------------------------------------------------------*/
|
65 |
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
$wp_plugins_dir = fs_normalize_path( WP_PLUGIN_DIR );
|
96 |
-
if ( 0 === strpos( $asset_abs_path, $wp_plugins_dir ) ) {
|
97 |
-
// Try to handle plugin assets that may be located in a non-standard plugins directory.
|
98 |
-
$asset_rel_path = str_replace( $wp_plugins_dir, '', $asset_abs_path );
|
99 |
-
$asset_url = plugins_url( fs_normalize_path( $asset_rel_path ) );
|
100 |
} else {
|
101 |
-
|
102 |
-
$
|
103 |
-
|
104 |
-
|
105 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
}
|
107 |
-
}
|
108 |
|
109 |
-
|
|
|
110 |
}
|
111 |
|
112 |
-
|
113 |
-
|
|
|
|
|
114 |
}
|
115 |
|
116 |
-
|
117 |
-
|
|
|
|
|
118 |
}
|
119 |
|
120 |
-
|
121 |
-
|
|
|
|
|
122 |
}
|
123 |
|
124 |
#--------------------------------------------------------------------------------
|
@@ -315,138 +323,191 @@
|
|
315 |
|
316 |
/* Core UI.
|
317 |
--------------------------------------------------------------------------------------------*/
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
$page,
|
336 |
-
$action,
|
337 |
-
$title,
|
338 |
-
$button_class = '',
|
339 |
-
$params = array(),
|
340 |
-
$is_primary = true,
|
341 |
-
$is_small = false,
|
342 |
-
$icon_class = false,
|
343 |
-
$confirmation = false,
|
344 |
-
$method = 'GET'
|
345 |
-
) {
|
346 |
-
echo fs_ui_get_action_button(
|
347 |
$module_id,
|
348 |
$page,
|
349 |
$action,
|
350 |
$title,
|
351 |
-
$button_class,
|
352 |
-
$params,
|
353 |
-
$is_primary,
|
354 |
-
$is_small,
|
355 |
-
$icon_class,
|
356 |
-
$confirmation,
|
357 |
-
$method
|
358 |
-
)
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
* @author Vova Feldman (@svovaf)
|
363 |
-
* @since 1.1.7
|
364 |
-
*
|
365 |
-
* @param number $module_id
|
366 |
-
* @param string $page
|
367 |
-
* @param string $action
|
368 |
-
* @param string $title
|
369 |
-
* @param string $button_class
|
370 |
-
* @param array $params
|
371 |
-
* @param bool $is_primary
|
372 |
-
* @param bool $is_small
|
373 |
-
* @param string|bool $icon_class Optional class for an icon.
|
374 |
-
* @param string|bool $confirmation Optional confirmation message before submit.
|
375 |
-
* @param string $method
|
376 |
-
*
|
377 |
-
* @return string
|
378 |
-
*/
|
379 |
-
function fs_ui_get_action_button(
|
380 |
-
$module_id,
|
381 |
-
$page,
|
382 |
-
$action,
|
383 |
-
$title,
|
384 |
-
$button_class = '',
|
385 |
-
$params = array(),
|
386 |
-
$is_primary = true,
|
387 |
-
$is_small = false,
|
388 |
-
$icon_class = false,
|
389 |
-
$confirmation = false,
|
390 |
-
$method = 'GET'
|
391 |
-
) {
|
392 |
-
// Prepend icon (if set).
|
393 |
-
$title = ( is_string( $icon_class ) ? '<i class="' . $icon_class . '"></i> ' : '' ) . $title;
|
394 |
-
|
395 |
-
if ( is_string( $confirmation ) ) {
|
396 |
-
return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="if (confirm(\'%s\')) this.parentNode.submit(); return false;">%s</a></form>',
|
397 |
-
freemius( $module_id )->_get_admin_page_url( $page, $params ),
|
398 |
-
$method,
|
399 |
$action,
|
400 |
-
|
401 |
-
|
|
|
|
|
|
|
|
|
402 |
$confirmation,
|
403 |
-
$
|
404 |
-
);
|
405 |
-
} else if ( 'GET' !== strtoupper( $method ) ) {
|
406 |
-
return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="this.parentNode.submit(); return false;">%s</a></form>',
|
407 |
-
freemius( $module_id )->_get_admin_page_url( $page, $params ),
|
408 |
-
$method,
|
409 |
-
$action,
|
410 |
-
wp_nonce_field( $action, '_wpnonce', true, false ),
|
411 |
-
'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
|
412 |
-
$title
|
413 |
-
);
|
414 |
-
} else {
|
415 |
-
return sprintf( '<a href="%s" class="%s">%s</a></form>',
|
416 |
-
wp_nonce_url( freemius( $module_id )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ),
|
417 |
-
'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
|
418 |
-
$title
|
419 |
);
|
420 |
}
|
421 |
}
|
422 |
|
423 |
-
|
424 |
-
|
425 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
426 |
}
|
427 |
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
// break;
|
446 |
-
// }
|
447 |
}
|
448 |
|
449 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
450 |
|
451 |
if ( ! function_exists( 'fs_nonce_url' ) ) {
|
452 |
/**
|
@@ -634,71 +695,75 @@
|
|
634 |
|
635 |
#endregion Url Canonization ------------------------------------------------------------------
|
636 |
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
|
|
649 |
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
|
659 |
-
|
660 |
-
|
661 |
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
|
667 |
-
|
668 |
-
|
669 |
|
670 |
-
|
|
|
671 |
}
|
672 |
|
673 |
/* General Utilities
|
674 |
--------------------------------------------------------------------------------------------*/
|
675 |
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
688 |
|
689 |
-
|
690 |
-
|
691 |
-
return 1;
|
692 |
-
} // If b has a priority and a does not, b wins.
|
693 |
-
elseif ( isset( $a['priority'] ) && ! isset( $b['priority'] ) ) {
|
694 |
-
return - 1;
|
695 |
-
} // If neither has a priority or both priorities are equal its a tie.
|
696 |
-
elseif ( ( ! isset( $a['priority'] ) && ! isset( $b['priority'] ) ) || $a['priority'] === $b['priority'] ) {
|
697 |
-
return 0;
|
698 |
}
|
699 |
-
|
700 |
-
// If both have priority return the winner.
|
701 |
-
return ( $a['priority'] < $b['priority'] ) ? - 1 : 1;
|
702 |
}
|
703 |
|
704 |
#--------------------------------------------------------------------------------
|
63 |
/* Scripts and styles including.
|
64 |
--------------------------------------------------------------------------------------------*/
|
65 |
|
66 |
+
if ( ! function_exists( 'fs_asset_url' ) ) {
|
67 |
+
/**
|
68 |
+
* Generates an absolute URL to the given path. This function ensures that the URL will be correct whether the asset
|
69 |
+
* is inside a plugin's folder or a theme's folder.
|
70 |
+
*
|
71 |
+
* Examples:
|
72 |
+
* 1. "themes" folder
|
73 |
+
* Path: C:/xampp/htdocs/fswp/wp-content/themes/twentytwelve/freemius/assets/css/admin/common.css
|
74 |
+
* URL: http://fswp:8080/wp-content/themes/twentytwelve/freemius/assets/css/admin/common.css
|
75 |
+
*
|
76 |
+
* 2. "plugins" folder
|
77 |
+
* Path: C:/xampp/htdocs/fswp/wp-content/plugins/rating-widget-premium/freemius/assets/css/admin/common.css
|
78 |
+
* URL: http://fswp:8080/wp-content/plugins/rating-widget-premium/freemius/assets/css/admin/common.css
|
79 |
+
*
|
80 |
+
* @author Leo Fajardo (@leorw)
|
81 |
+
* @since 1.2.2
|
82 |
+
*
|
83 |
+
* @param string $asset_abs_path Asset's absolute path.
|
84 |
+
*
|
85 |
+
* @return string Asset's URL.
|
86 |
+
*/
|
87 |
+
function fs_asset_url( $asset_abs_path ) {
|
88 |
+
$wp_content_dir = fs_normalize_path( WP_CONTENT_DIR );
|
89 |
+
$asset_abs_path = fs_normalize_path( $asset_abs_path );
|
90 |
+
|
91 |
+
if ( 0 === strpos( $asset_abs_path, $wp_content_dir ) ) {
|
92 |
+
// Handle both theme and plugin assets located in the standard directories.
|
93 |
+
$asset_rel_path = str_replace( $wp_content_dir, '', $asset_abs_path );
|
94 |
+
$asset_url = content_url( fs_normalize_path( $asset_rel_path ) );
|
|
|
|
|
|
|
|
|
|
|
95 |
} else {
|
96 |
+
$wp_plugins_dir = fs_normalize_path( WP_PLUGIN_DIR );
|
97 |
+
if ( 0 === strpos( $asset_abs_path, $wp_plugins_dir ) ) {
|
98 |
+
// Try to handle plugin assets that may be located in a non-standard plugins directory.
|
99 |
+
$asset_rel_path = str_replace( $wp_plugins_dir, '', $asset_abs_path );
|
100 |
+
$asset_url = plugins_url( fs_normalize_path( $asset_rel_path ) );
|
101 |
+
} else {
|
102 |
+
// Try to handle theme assets that may be located in a non-standard themes directory.
|
103 |
+
$active_theme_stylesheet = get_stylesheet();
|
104 |
+
$wp_themes_dir = fs_normalize_path( trailingslashit( get_theme_root( $active_theme_stylesheet ) ) );
|
105 |
+
$asset_rel_path = str_replace( $wp_themes_dir, '', fs_normalize_path( $asset_abs_path ) );
|
106 |
+
$asset_url = trailingslashit( get_theme_root_uri( $active_theme_stylesheet ) ) . fs_normalize_path( $asset_rel_path );
|
107 |
+
}
|
108 |
}
|
|
|
109 |
|
110 |
+
return $asset_url;
|
111 |
+
}
|
112 |
}
|
113 |
|
114 |
+
if ( ! function_exists( 'fs_enqueue_local_style' ) ) {
|
115 |
+
function fs_enqueue_local_style( $handle, $path, $deps = array(), $ver = false, $media = 'all' ) {
|
116 |
+
wp_enqueue_style( $handle, fs_asset_url( WP_FS__DIR_CSS . '/' . trim( $path, '/' ) ), $deps, $ver, $media );
|
117 |
+
}
|
118 |
}
|
119 |
|
120 |
+
if ( ! function_exists( 'fs_enqueue_local_script' ) ) {
|
121 |
+
function fs_enqueue_local_script( $handle, $path, $deps = array(), $ver = false, $in_footer = 'all' ) {
|
122 |
+
wp_enqueue_script( $handle, fs_asset_url( WP_FS__DIR_JS . '/' . trim( $path, '/' ) ), $deps, $ver, $in_footer );
|
123 |
+
}
|
124 |
}
|
125 |
|
126 |
+
if ( ! function_exists( 'fs_img_url' ) ) {
|
127 |
+
function fs_img_url( $path, $img_dir = WP_FS__DIR_IMG ) {
|
128 |
+
return ( fs_asset_url( $img_dir . '/' . trim( $path, '/' ) ) );
|
129 |
+
}
|
130 |
}
|
131 |
|
132 |
#--------------------------------------------------------------------------------
|
323 |
|
324 |
/* Core UI.
|
325 |
--------------------------------------------------------------------------------------------*/
|
326 |
+
if ( ! function_exists( 'fs_ui_action_button' ) ) {
|
327 |
+
/**
|
328 |
+
* @param number $module_id
|
329 |
+
* @param string $page
|
330 |
+
* @param string $action
|
331 |
+
* @param string $title
|
332 |
+
* @param string $button_class
|
333 |
+
* @param array $params
|
334 |
+
* @param bool $is_primary
|
335 |
+
* @param bool $is_small
|
336 |
+
* @param string|bool $icon_class Optional class for an icon (since 1.1.7).
|
337 |
+
* @param string|bool $confirmation Optional confirmation message before submit (since 1.1.7).
|
338 |
+
* @param string $method Since 1.1.7
|
339 |
+
*
|
340 |
+
* @uses fs_ui_get_action_button()
|
341 |
+
*/
|
342 |
+
function fs_ui_action_button(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
343 |
$module_id,
|
344 |
$page,
|
345 |
$action,
|
346 |
$title,
|
347 |
+
$button_class = '',
|
348 |
+
$params = array(),
|
349 |
+
$is_primary = true,
|
350 |
+
$is_small = false,
|
351 |
+
$icon_class = false,
|
352 |
+
$confirmation = false,
|
353 |
+
$method = 'GET'
|
354 |
+
) {
|
355 |
+
echo fs_ui_get_action_button(
|
356 |
+
$module_id,
|
357 |
+
$page,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
358 |
$action,
|
359 |
+
$title,
|
360 |
+
$button_class,
|
361 |
+
$params,
|
362 |
+
$is_primary,
|
363 |
+
$is_small,
|
364 |
+
$icon_class,
|
365 |
$confirmation,
|
366 |
+
$method
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
367 |
);
|
368 |
}
|
369 |
}
|
370 |
|
371 |
+
if ( ! function_exists( 'fs_ui_get_action_button' ) ) {
|
372 |
+
/**
|
373 |
+
* @author Vova Feldman (@svovaf)
|
374 |
+
* @since 1.1.7
|
375 |
+
*
|
376 |
+
* @param number $module_id
|
377 |
+
* @param string $page
|
378 |
+
* @param string $action
|
379 |
+
* @param string $title
|
380 |
+
* @param string $button_class
|
381 |
+
* @param array $params
|
382 |
+
* @param bool $is_primary
|
383 |
+
* @param bool $is_small
|
384 |
+
* @param string|bool $icon_class Optional class for an icon.
|
385 |
+
* @param string|bool $confirmation Optional confirmation message before submit.
|
386 |
+
* @param string $method
|
387 |
+
*
|
388 |
+
* @return string
|
389 |
+
*/
|
390 |
+
function fs_ui_get_action_button(
|
391 |
+
$module_id,
|
392 |
+
$page,
|
393 |
+
$action,
|
394 |
+
$title,
|
395 |
+
$button_class = '',
|
396 |
+
$params = array(),
|
397 |
+
$is_primary = true,
|
398 |
+
$is_small = false,
|
399 |
+
$icon_class = false,
|
400 |
+
$confirmation = false,
|
401 |
+
$method = 'GET'
|
402 |
+
) {
|
403 |
+
// Prepend icon (if set).
|
404 |
+
$title = ( is_string( $icon_class ) ? '<i class="' . $icon_class . '"></i> ' : '' ) . $title;
|
405 |
+
|
406 |
+
if ( is_string( $confirmation ) ) {
|
407 |
+
return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="if (confirm(\'%s\')) this.parentNode.submit(); return false;">%s</a></form>',
|
408 |
+
freemius( $module_id )->_get_admin_page_url( $page, $params ),
|
409 |
+
$method,
|
410 |
+
$action,
|
411 |
+
wp_nonce_field( $action, '_wpnonce', true, false ),
|
412 |
+
'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
|
413 |
+
$confirmation,
|
414 |
+
$title
|
415 |
+
);
|
416 |
+
} else if ( 'GET' !== strtoupper( $method ) ) {
|
417 |
+
return sprintf( '<form action="%s" method="%s"><input type="hidden" name="fs_action" value="%s">%s<a href="#" class="%s" onclick="this.parentNode.submit(); return false;">%s</a></form>',
|
418 |
+
freemius( $module_id )->_get_admin_page_url( $page, $params ),
|
419 |
+
$method,
|
420 |
+
$action,
|
421 |
+
wp_nonce_field( $action, '_wpnonce', true, false ),
|
422 |
+
'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
|
423 |
+
$title
|
424 |
+
);
|
425 |
+
} else {
|
426 |
+
return sprintf( '<a href="%s" class="%s">%s</a></form>',
|
427 |
+
wp_nonce_url( freemius( $module_id )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ),
|
428 |
+
'button' . ( ! empty( $button_class ) ? ' ' . $button_class : '' ) . ( $is_primary ? ' button-primary' : '' ) . ( $is_small ? ' button-small' : '' ),
|
429 |
+
$title
|
430 |
+
);
|
431 |
+
}
|
432 |
+
}
|
433 |
+
|
434 |
+
function fs_ui_action_link( $module_id, $page, $action, $title, $params = array() ) {
|
435 |
+
?><a class=""
|
436 |
+
href="<?php echo wp_nonce_url( freemius( $module_id )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ) ?>"><?php echo $title ?></a><?php
|
437 |
+
}
|
438 |
}
|
439 |
|
440 |
+
if ( ! function_exists( 'fs_get_entity' ) ) {
|
441 |
+
/**
|
442 |
+
* @author Leo Fajardo (@leorw)
|
443 |
+
* @since 2.3.1
|
444 |
+
*
|
445 |
+
* @param mixed $entity
|
446 |
+
* @param string $class
|
447 |
+
*
|
448 |
+
* @return FS_Plugin|FS_User|FS_Site|FS_Plugin_License|FS_Plugin_Plan|FS_Plugin_Tag|FS_Subscription
|
449 |
+
*/
|
450 |
+
function fs_get_entity( $entity, $class ) {
|
451 |
+
if ( ! is_object( $entity ) || $entity instanceof $class ) {
|
452 |
+
return $entity;
|
453 |
+
}
|
454 |
+
|
455 |
+
return new $class( $entity );
|
456 |
+
}
|
|
|
|
|
457 |
}
|
458 |
|
459 |
+
if ( ! function_exists( 'fs_get_entities' ) ) {
|
460 |
+
/**
|
461 |
+
* @author Leo Fajardo (@leorw)
|
462 |
+
* @since 2.3.1
|
463 |
+
*
|
464 |
+
* @param mixed $entities
|
465 |
+
* @param string $class_name
|
466 |
+
*
|
467 |
+
* @return FS_Plugin[]|FS_User[]|FS_Site[]|FS_Plugin_License[]|FS_Plugin_Plan[]|FS_Plugin_Tag[]|FS_Subscription[]
|
468 |
+
*/
|
469 |
+
function fs_get_entities( $entities, $class_name ) {
|
470 |
+
if ( ! is_array( $entities ) || empty( $entities ) ) {
|
471 |
+
return $entities;
|
472 |
+
}
|
473 |
+
|
474 |
+
// Get first element.
|
475 |
+
$first_array_element = reset( $entities );
|
476 |
+
|
477 |
+
if ( $first_array_element instanceof $class_name ) {
|
478 |
+
/**
|
479 |
+
* If the first element of the array is an instance of the context class, assume that all other
|
480 |
+
* elements are instances of the class.
|
481 |
+
*/
|
482 |
+
return $entities;
|
483 |
+
}
|
484 |
+
|
485 |
+
if (
|
486 |
+
is_array( $first_array_element ) &&
|
487 |
+
! empty( $first_array_element )
|
488 |
+
) {
|
489 |
+
$first_array_element = reset( $first_array_element );
|
490 |
+
|
491 |
+
if ( $first_array_element instanceof $class_name ) {
|
492 |
+
/**
|
493 |
+
* If the first element of the `$entities` array is an array whose first element is an instance of the
|
494 |
+
* context class, assume that all other objects are instances of the class.
|
495 |
+
*/
|
496 |
+
return $entities;
|
497 |
+
}
|
498 |
+
}
|
499 |
+
|
500 |
+
foreach ( $entities as $key => $entities_or_entity ) {
|
501 |
+
if ( is_array( $entities_or_entity ) ) {
|
502 |
+
$entities[ $key ] = fs_get_entities( $entities_or_entity, $class_name );
|
503 |
+
} else {
|
504 |
+
$entities[ $key ] = fs_get_entity( $entities_or_entity, $class_name );
|
505 |
+
}
|
506 |
+
}
|
507 |
+
|
508 |
+
return $entities;
|
509 |
+
}
|
510 |
+
}
|
511 |
|
512 |
if ( ! function_exists( 'fs_nonce_url' ) ) {
|
513 |
/**
|
695 |
|
696 |
#endregion Url Canonization ------------------------------------------------------------------
|
697 |
|
698 |
+
if ( ! function_exists( 'fs_download_image' ) ) {
|
699 |
+
/**
|
700 |
+
* @author Vova Feldman (@svovaf)
|
701 |
+
*
|
702 |
+
* @since 1.2.2 Changed to usage of WP_Filesystem_Direct.
|
703 |
+
*
|
704 |
+
* @param string $from URL
|
705 |
+
* @param string $to File path.
|
706 |
+
*
|
707 |
+
* @return bool Is successfully downloaded.
|
708 |
+
*/
|
709 |
+
function fs_download_image( $from, $to ) {
|
710 |
+
$dir = dirname( $to );
|
711 |
|
712 |
+
if ( 'direct' !== get_filesystem_method( array(), $dir ) ) {
|
713 |
+
return false;
|
714 |
+
}
|
715 |
|
716 |
+
if ( ! class_exists( 'WP_Filesystem_Direct' ) ) {
|
717 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php';
|
718 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php';
|
719 |
+
}
|
720 |
|
721 |
+
$fs = new WP_Filesystem_Direct( '' );
|
722 |
+
$tmpfile = download_url( $from );
|
723 |
|
724 |
+
if ( $tmpfile instanceof WP_Error ) {
|
725 |
+
// Issue downloading the file.
|
726 |
+
return false;
|
727 |
+
}
|
728 |
|
729 |
+
$fs->copy( $tmpfile, $to );
|
730 |
+
$fs->delete( $tmpfile );
|
731 |
|
732 |
+
return true;
|
733 |
+
}
|
734 |
}
|
735 |
|
736 |
/* General Utilities
|
737 |
--------------------------------------------------------------------------------------------*/
|
738 |
|
739 |
+
if ( ! function_exists( 'fs_sort_by_priority' ) ) {
|
740 |
+
/**
|
741 |
+
* Sorts an array by the value of the priority key.
|
742 |
+
*
|
743 |
+
* @author Daniel Iser (@danieliser)
|
744 |
+
* @since 1.1.7
|
745 |
+
*
|
746 |
+
* @param $a
|
747 |
+
* @param $b
|
748 |
+
*
|
749 |
+
* @return int
|
750 |
+
*/
|
751 |
+
function fs_sort_by_priority( $a, $b ) {
|
752 |
+
|
753 |
+
// If b has a priority and a does not, b wins.
|
754 |
+
if ( ! isset( $a['priority'] ) && isset( $b['priority'] ) ) {
|
755 |
+
return 1;
|
756 |
+
} // If b has a priority and a does not, b wins.
|
757 |
+
elseif ( isset( $a['priority'] ) && ! isset( $b['priority'] ) ) {
|
758 |
+
return - 1;
|
759 |
+
} // If neither has a priority or both priorities are equal its a tie.
|
760 |
+
elseif ( ( ! isset( $a['priority'] ) && ! isset( $b['priority'] ) ) || $a['priority'] === $b['priority'] ) {
|
761 |
+
return 0;
|
762 |
+
}
|
763 |
|
764 |
+
// If both have priority return the winner.
|
765 |
+
return ( $a['priority'] < $b['priority'] ) ? - 1 : 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
766 |
}
|
|
|
|
|
|
|
767 |
}
|
768 |
|
769 |
#--------------------------------------------------------------------------------
|
common/vendor/freemius/includes/fs-essential-functions.php
CHANGED
@@ -344,7 +344,11 @@
|
|
344 |
}
|
345 |
|
346 |
if ( ! isset( $newest_sdk->type ) || 'theme' !== $newest_sdk->type ) {
|
347 |
-
|
|
|
|
|
|
|
|
|
348 |
} else {
|
349 |
$theme = wp_get_theme();
|
350 |
$in_activation = ( $newest_sdk->plugin_path == $theme->stylesheet );
|
344 |
}
|
345 |
|
346 |
if ( ! isset( $newest_sdk->type ) || 'theme' !== $newest_sdk->type ) {
|
347 |
+
if ( ! function_exists( 'is_plugin_active' ) ) {
|
348 |
+
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
349 |
+
}
|
350 |
+
|
351 |
+
$in_activation = ( ! is_plugin_active( $plugin_file ) );
|
352 |
} else {
|
353 |
$theme = wp_get_theme();
|
354 |
$in_activation = ( $newest_sdk->plugin_path == $theme->stylesheet );
|
common/vendor/freemius/includes/fs-plugin-info-dialog.php
CHANGED
@@ -145,15 +145,36 @@
|
|
145 |
}
|
146 |
|
147 |
if ( is_array( $pricing ) && 0 < count( $pricing ) ) {
|
148 |
-
$
|
149 |
|
150 |
-
foreach ( $pricing as
|
151 |
$prices = new FS_Pricing( $prices );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
}
|
153 |
|
154 |
-
$
|
|
|
155 |
|
156 |
-
|
|
|
|
|
|
|
157 |
}
|
158 |
|
159 |
if ( is_array( $features ) && 0 < count( $features ) ) {
|
@@ -1047,7 +1068,7 @@
|
|
1047 |
$href = add_query_arg( array( 'tab' => $tab, 'section' => $section_name ) );
|
1048 |
$href = esc_url( $href );
|
1049 |
$san_section = esc_attr( $section_name );
|
1050 |
-
echo "\t<a name='$san_section' href='$href' $class
|
1051 |
}
|
1052 |
|
1053 |
echo "</div>\n";
|
@@ -1414,7 +1435,7 @@
|
|
1414 |
$stars_label
|
1415 |
) ) ?>"><?php echo $stars_label ?></a></span>
|
1416 |
<span class="counter-back">
|
1417 |
-
<span class="counter-bar" style="width: <?php echo 92 * $_rating; ?>px;"></span>
|
1418 |
</span>
|
1419 |
<span class="counter-count"><?php echo number_format_i18n( $ratecount ); ?></span>
|
1420 |
</div>
|
145 |
}
|
146 |
|
147 |
if ( is_array( $pricing ) && 0 < count( $pricing ) ) {
|
148 |
+
$filtered_pricing = array();
|
149 |
|
150 |
+
foreach ( $pricing as $prices ) {
|
151 |
$prices = new FS_Pricing( $prices );
|
152 |
+
|
153 |
+
if ( ! $prices->is_usd() ) {
|
154 |
+
/**
|
155 |
+
* Skip non-USD pricing.
|
156 |
+
*
|
157 |
+
* @author Leo Fajardo (@leorw)
|
158 |
+
* @since 2.3.1
|
159 |
+
*/
|
160 |
+
continue;
|
161 |
+
}
|
162 |
+
|
163 |
+
if ( ( $prices->has_monthly() && $prices->monthly_price > 1.0 ) ||
|
164 |
+
( $prices->has_annual() && $prices->annual_price > 1.0 ) ||
|
165 |
+
( $prices->has_lifetime() && $prices->lifetime_price > 1.0 )
|
166 |
+
) {
|
167 |
+
$filtered_pricing[] = $prices;
|
168 |
+
}
|
169 |
}
|
170 |
|
171 |
+
if ( ! empty( $filtered_pricing ) ) {
|
172 |
+
$has_paid_plan = true;
|
173 |
|
174 |
+
$plan->pricing = $filtered_pricing;
|
175 |
+
|
176 |
+
$has_pricing = true;
|
177 |
+
}
|
178 |
}
|
179 |
|
180 |
if ( is_array( $features ) && 0 < count( $features ) ) {
|
1068 |
$href = add_query_arg( array( 'tab' => $tab, 'section' => $section_name ) );
|
1069 |
$href = esc_url( $href );
|
1070 |
$san_section = esc_attr( $section_name );
|
1071 |
+
echo "\t<a name='$san_section' href='$href' $class>" . esc_html( $title ) . "</a>\n";
|
1072 |
}
|
1073 |
|
1074 |
echo "</div>\n";
|
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>
|
common/vendor/freemius/includes/managers/class-fs-admin-menu-manager.php
CHANGED
@@ -430,41 +430,62 @@
|
|
430 |
$this->get_raw_slug();
|
431 |
}
|
432 |
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
*
|
449 |
-
* @since 1.2.2
|
450 |
-
*/
|
451 |
-
return true;
|
452 |
-
}
|
453 |
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
463 |
|
464 |
-
|
465 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
466 |
|
467 |
-
|
468 |
|
469 |
/**
|
470 |
* Override submenu's action.
|
430 |
$this->get_raw_slug();
|
431 |
}
|
432 |
|
433 |
+
/**
|
434 |
+
* Is user on plugin's admin activation page.
|
435 |
+
*
|
436 |
+
* @author Vova Feldman (@svovaf)
|
437 |
+
* @since 1.0.8
|
438 |
+
*
|
439 |
+
* @param bool $show_opt_in_on_themes_page Since 2.3.1
|
440 |
+
*
|
441 |
+
* @return bool
|
442 |
+
*
|
443 |
+
* @deprecated Please use is_activation_page() instead.
|
444 |
+
*/
|
445 |
+
function is_main_settings_page( $show_opt_in_on_themes_page = false ) {
|
446 |
+
return $this->is_activation_page( $show_opt_in_on_themes_page );
|
447 |
+
}
|
|
|
|
|
|
|
|
|
|
|
448 |
|
449 |
+
/**
|
450 |
+
* Is user on product's admin activation page.
|
451 |
+
*
|
452 |
+
* @author Vova Feldman (@svovaf)
|
453 |
+
* @since 2.3.1
|
454 |
+
*
|
455 |
+
* @param bool $show_opt_in_on_themes_page Since 2.3.1
|
456 |
+
*
|
457 |
+
* @return bool
|
458 |
+
*/
|
459 |
+
function is_activation_page( $show_opt_in_on_themes_page = false ) {
|
460 |
+
if ( $show_opt_in_on_themes_page ) {
|
461 |
+
/**
|
462 |
+
* In activation only when show_optin query string param is given.
|
463 |
+
*
|
464 |
+
* @since 1.2.2
|
465 |
+
*/
|
466 |
+
return (
|
467 |
+
( WP_FS__MODULE_TYPE_THEME === $this->_module_type ) &&
|
468 |
+
Freemius::is_themes_page() &&
|
469 |
+
fs_request_get_bool( $this->_module_unique_affix . '_show_optin' )
|
470 |
+
);
|
471 |
+
}
|
472 |
|
473 |
+
if ( $this->_menu_exists &&
|
474 |
+
( fs_is_plugin_page( $this->_menu_slug ) || fs_is_plugin_page( $this->_module_unique_affix ) )
|
475 |
+
) {
|
476 |
+
/**
|
477 |
+
* Module has a settings menu and the context page is the main settings page, so assume it's in
|
478 |
+
* activation (doesn't really check if already opted-in/skipped or not).
|
479 |
+
*
|
480 |
+
* @since 1.2.2
|
481 |
+
*/
|
482 |
+
return true;
|
483 |
+
}
|
484 |
+
|
485 |
+
return false;
|
486 |
+
}
|
487 |
|
488 |
+
#region Submenu Override
|
489 |
|
490 |
/**
|
491 |
* Override submenu's action.
|
common/vendor/freemius/includes/managers/class-fs-cache-manager.php
CHANGED
@@ -37,7 +37,7 @@
|
|
37 |
$this->_logger->entrance();
|
38 |
$this->_logger->log( 'id = ' . $id );
|
39 |
|
40 |
-
$this->_options = FS_Option_Manager::get_manager( $id, true, true );
|
41 |
}
|
42 |
|
43 |
/**
|
37 |
$this->_logger->entrance();
|
38 |
$this->_logger->log( 'id = ' . $id );
|
39 |
|
40 |
+
$this->_options = FS_Option_Manager::get_manager( $id, true, true, false );
|
41 |
}
|
42 |
|
43 |
/**
|
common/vendor/freemius/includes/managers/class-fs-option-manager.php
CHANGED
@@ -48,6 +48,11 @@
|
|
48 |
*/
|
49 |
private $_is_network_storage;
|
50 |
|
|
|
|
|
|
|
|
|
|
|
51 |
/**
|
52 |
* @var array[string]FS_Option_Manager {
|
53 |
* @key string
|
@@ -60,11 +65,17 @@
|
|
60 |
* @author Vova Feldman (@svovaf)
|
61 |
* @since 1.0.3
|
62 |
*
|
63 |
-
* @param string
|
64 |
-
* @param bool
|
65 |
-
* @param bool|int
|
|
|
66 |
*/
|
67 |
-
private function __construct(
|
|
|
|
|
|
|
|
|
|
|
68 |
$id = strtolower( $id );
|
69 |
|
70 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_opt_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
@@ -74,6 +85,8 @@
|
|
74 |
|
75 |
$this->_id = $id;
|
76 |
|
|
|
|
|
77 |
if ( is_multisite() ) {
|
78 |
$this->_is_network_storage = ( true === $network_level_or_blog_id );
|
79 |
|
@@ -93,13 +106,19 @@
|
|
93 |
* @author Vova Feldman (@svovaf)
|
94 |
* @since 1.0.3
|
95 |
*
|
96 |
-
* @param string
|
97 |
-
* @param bool
|
98 |
-
* @param bool|int
|
|
|
99 |
*
|
100 |
-
* @return FS_Option_Manager
|
101 |
*/
|
102 |
-
static function get_manager(
|
|
|
|
|
|
|
|
|
|
|
103 |
$key = strtolower( $id );
|
104 |
|
105 |
if ( is_multisite() ) {
|
@@ -115,7 +134,12 @@
|
|
115 |
}
|
116 |
|
117 |
if ( ! isset( self::$_MANAGERS[ $key ] ) ) {
|
118 |
-
self::$_MANAGERS[ $key ] = new FS_Option_Manager(
|
|
|
|
|
|
|
|
|
|
|
119 |
} // If load required but not yet loaded, load.
|
120 |
else if ( $load && ! self::$_MANAGERS[ $key ]->is_loaded() ) {
|
121 |
self::$_MANAGERS[ $key ]->load();
|
@@ -410,7 +434,7 @@
|
|
410 |
} else if ( $this->_blog_id > 0 ) {
|
411 |
update_blog_option( $this->_blog_id, $option_name, $this->_options );
|
412 |
} else {
|
413 |
-
update_option( $option_name, $this->_options );
|
414 |
}
|
415 |
|
416 |
if ( ! WP_FS__DEBUG_SDK ) {
|
48 |
*/
|
49 |
private $_is_network_storage;
|
50 |
|
51 |
+
/**
|
52 |
+
* @var bool|null
|
53 |
+
*/
|
54 |
+
private $_autoload;
|
55 |
+
|
56 |
/**
|
57 |
* @var array[string]FS_Option_Manager {
|
58 |
* @key string
|
65 |
* @author Vova Feldman (@svovaf)
|
66 |
* @since 1.0.3
|
67 |
*
|
68 |
+
* @param string $id
|
69 |
+
* @param bool $load
|
70 |
+
* @param bool|int $network_level_or_blog_id Since 2.0.0
|
71 |
+
* @param bool|null $autoload
|
72 |
*/
|
73 |
+
private function __construct(
|
74 |
+
$id,
|
75 |
+
$load = false,
|
76 |
+
$network_level_or_blog_id = false,
|
77 |
+
$autoload = null
|
78 |
+
) {
|
79 |
$id = strtolower( $id );
|
80 |
|
81 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_opt_mngr_' . $id, WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
85 |
|
86 |
$this->_id = $id;
|
87 |
|
88 |
+
$this->_autoload = $autoload;
|
89 |
+
|
90 |
if ( is_multisite() ) {
|
91 |
$this->_is_network_storage = ( true === $network_level_or_blog_id );
|
92 |
|
106 |
* @author Vova Feldman (@svovaf)
|
107 |
* @since 1.0.3
|
108 |
*
|
109 |
+
* @param string $id
|
110 |
+
* @param bool $load
|
111 |
+
* @param bool|int $network_level_or_blog_id Since 2.0.0
|
112 |
+
* @param bool|null $autoload
|
113 |
*
|
114 |
+
* @return \FS_Option_Manager
|
115 |
*/
|
116 |
+
static function get_manager(
|
117 |
+
$id,
|
118 |
+
$load = false,
|
119 |
+
$network_level_or_blog_id = false,
|
120 |
+
$autoload = null
|
121 |
+
) {
|
122 |
$key = strtolower( $id );
|
123 |
|
124 |
if ( is_multisite() ) {
|
134 |
}
|
135 |
|
136 |
if ( ! isset( self::$_MANAGERS[ $key ] ) ) {
|
137 |
+
self::$_MANAGERS[ $key ] = new FS_Option_Manager(
|
138 |
+
$id,
|
139 |
+
$load,
|
140 |
+
$network_level_or_blog_id,
|
141 |
+
$autoload
|
142 |
+
);
|
143 |
} // If load required but not yet loaded, load.
|
144 |
else if ( $load && ! self::$_MANAGERS[ $key ]->is_loaded() ) {
|
145 |
self::$_MANAGERS[ $key ]->load();
|
434 |
} else if ( $this->_blog_id > 0 ) {
|
435 |
update_blog_option( $this->_blog_id, $option_name, $this->_options );
|
436 |
} else {
|
437 |
+
update_option( $option_name, $this->_options, $this->_autoload );
|
438 |
}
|
439 |
|
440 |
if ( ! WP_FS__DEBUG_SDK ) {
|
common/vendor/freemius/includes/managers/class-fs-plugin-manager.php
CHANGED
@@ -83,12 +83,12 @@
|
|
83 |
$option_manager = $this->get_option_manager();
|
84 |
|
85 |
if ( false !== $module_type ) {
|
86 |
-
return $option_manager->get_option( $module_type . 's', array() );
|
87 |
}
|
88 |
|
89 |
return array(
|
90 |
-
self::OPTION_NAME_PLUGINS => $option_manager->get_option( self::OPTION_NAME_PLUGINS, array() ),
|
91 |
-
self::OPTION_NAME_THEMES => $option_manager->get_option( self::OPTION_NAME_THEMES, array() ),
|
92 |
);
|
93 |
}
|
94 |
|
83 |
$option_manager = $this->get_option_manager();
|
84 |
|
85 |
if ( false !== $module_type ) {
|
86 |
+
return fs_get_entities( $option_manager->get_option( $module_type . 's', array() ), FS_Plugin::get_class_name() );
|
87 |
}
|
88 |
|
89 |
return array(
|
90 |
+
self::OPTION_NAME_PLUGINS => fs_get_entities( $option_manager->get_option( self::OPTION_NAME_PLUGINS, array() ), FS_Plugin::get_class_name() ),
|
91 |
+
self::OPTION_NAME_THEMES => fs_get_entities( $option_manager->get_option( self::OPTION_NAME_THEMES, array() ), FS_Plugin::get_class_name() ),
|
92 |
);
|
93 |
}
|
94 |
|
common/vendor/freemius/languages/freemius-cs_CZ.mo
ADDED
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
ADDED
Binary file
|
common/vendor/freemius/languages/freemius-ja_JP.mo
DELETED
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
ADDED
Binary file
|
common/vendor/freemius/languages/freemius.pot
CHANGED
@@ -16,1382 +16,1414 @@ msgstr ""
|
|
16 |
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
|
19 |
-
#: includes/class-freemius.php:
|
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:
|
24 |
msgid "Would you like to proceed with the update?"
|
25 |
msgstr ""
|
26 |
|
27 |
-
#: includes/class-freemius.php:
|
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:
|
32 |
msgid "Error"
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: includes/class-freemius.php:
|
36 |
msgid "I found a better %s"
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: includes/class-freemius.php:
|
40 |
msgid "What's the %s's name?"
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: includes/class-freemius.php:
|
44 |
msgid "It's a temporary %s. I'm just debugging an issue."
|
45 |
msgstr ""
|
46 |
|
47 |
-
#: includes/class-freemius.php:
|
48 |
msgid "Deactivation"
|
49 |
msgstr ""
|
50 |
|
51 |
-
#: includes/class-freemius.php:
|
52 |
msgid "Theme Switch"
|
53 |
msgstr ""
|
54 |
|
55 |
-
#: includes/class-freemius.php:
|
56 |
msgid "Other"
|
57 |
msgstr ""
|
58 |
|
59 |
-
#: includes/class-freemius.php:
|
60 |
msgid "I no longer need the %s"
|
61 |
msgstr ""
|
62 |
|
63 |
-
#: includes/class-freemius.php:
|
64 |
msgid "I only needed the %s for a short period"
|
65 |
msgstr ""
|
66 |
|
67 |
-
#: includes/class-freemius.php:
|
68 |
msgid "The %s broke my site"
|
69 |
msgstr ""
|
70 |
|
71 |
-
#: includes/class-freemius.php:
|
72 |
msgid "The %s suddenly stopped working"
|
73 |
msgstr ""
|
74 |
|
75 |
-
#: includes/class-freemius.php:
|
76 |
msgid "I can't pay for it anymore"
|
77 |
msgstr ""
|
78 |
|
79 |
-
#: includes/class-freemius.php:
|
80 |
msgid "What price would you feel comfortable paying?"
|
81 |
msgstr ""
|
82 |
|
83 |
-
#: includes/class-freemius.php:
|
84 |
msgid "I don't like to share my information with you"
|
85 |
msgstr ""
|
86 |
|
87 |
-
#: includes/class-freemius.php:
|
88 |
msgid "The %s didn't work"
|
89 |
msgstr ""
|
90 |
|
91 |
-
#: includes/class-freemius.php:
|
92 |
msgid "I couldn't understand how to make it work"
|
93 |
msgstr ""
|
94 |
|
95 |
-
#: includes/class-freemius.php:
|
96 |
msgid "The %s is great, but I need specific feature that you don't support"
|
97 |
msgstr ""
|
98 |
|
99 |
-
#: includes/class-freemius.php:
|
100 |
msgid "What feature?"
|
101 |
msgstr ""
|
102 |
|
103 |
-
#: includes/class-freemius.php:
|
104 |
msgid "The %s is not working"
|
105 |
msgstr ""
|
106 |
|
107 |
-
#: includes/class-freemius.php:
|
108 |
msgid "Kindly share what didn't work so we can fix it for future users..."
|
109 |
msgstr ""
|
110 |
|
111 |
-
#: includes/class-freemius.php:
|
112 |
msgid "It's not what I was looking for"
|
113 |
msgstr ""
|
114 |
|
115 |
-
#: includes/class-freemius.php:
|
116 |
msgid "What you've been looking for?"
|
117 |
msgstr ""
|
118 |
|
119 |
-
#: includes/class-freemius.php:
|
120 |
msgid "The %s didn't work as expected"
|
121 |
msgstr ""
|
122 |
|
123 |
-
#: includes/class-freemius.php:
|
124 |
msgid "What did you expect?"
|
125 |
msgstr ""
|
126 |
|
127 |
-
#: includes/class-freemius.php:
|
128 |
msgid "Freemius Debug"
|
129 |
msgstr ""
|
130 |
|
131 |
-
#: includes/class-freemius.php:
|
132 |
msgid "I don't know what is cURL or how to install it, help me!"
|
133 |
msgstr ""
|
134 |
|
135 |
-
#: includes/class-freemius.php:
|
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:
|
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:
|
144 |
msgid "Yes - do your thing"
|
145 |
msgstr ""
|
146 |
|
147 |
-
#: includes/class-freemius.php:
|
148 |
msgid "No - just deactivate"
|
149 |
msgstr ""
|
150 |
|
151 |
-
#: includes/class-freemius.php:
|
152 |
msgctxt "exclamation"
|
153 |
msgid "Oops"
|
154 |
msgstr ""
|
155 |
|
156 |
-
#: includes/class-freemius.php:
|
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:
|
161 |
msgctxt "addonX cannot run without pluginY"
|
162 |
msgid "%s cannot run without %s."
|
163 |
msgstr ""
|
164 |
|
165 |
-
#: includes/class-freemius.php:
|
166 |
msgctxt "addonX cannot run..."
|
167 |
msgid "%s cannot run without the plugin."
|
168 |
msgstr ""
|
169 |
|
170 |
-
#: includes/class-freemius.php:
|
171 |
msgid "Unexpected API error. Please contact the %s's author with the following error."
|
172 |
msgstr ""
|
173 |
|
174 |
-
#: includes/class-freemius.php:
|
175 |
msgid "Premium %s version was successfully activated."
|
176 |
msgstr ""
|
177 |
|
178 |
-
#: includes/class-freemius.php:
|
179 |
msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
|
180 |
msgid "W00t"
|
181 |
msgstr ""
|
182 |
|
183 |
-
#: includes/class-freemius.php:
|
184 |
msgid "You have a %s license."
|
185 |
msgstr ""
|
186 |
|
187 |
-
#: includes/class-freemius.php:
|
188 |
msgctxt "interjection expressing joy or exuberance"
|
189 |
msgid "Yee-haw"
|
190 |
msgstr ""
|
191 |
|
192 |
-
#: includes/class-freemius.php:
|
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:
|
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:
|
201 |
msgid "More information about %s"
|
202 |
msgstr ""
|
203 |
|
204 |
-
#: includes/class-freemius.php:
|
205 |
msgid "Purchase License"
|
206 |
msgstr ""
|
207 |
|
208 |
-
#: includes/class-freemius.php:
|
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:
|
213 |
msgid "start the trial"
|
214 |
msgstr ""
|
215 |
|
216 |
-
#: includes/class-freemius.php:
|
217 |
msgid "complete the install"
|
218 |
msgstr ""
|
219 |
|
220 |
-
#: includes/class-freemius.php:
|
221 |
msgid "You are just one step away - %s"
|
222 |
msgstr ""
|
223 |
|
224 |
-
#: includes/class-freemius.php:
|
225 |
msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
|
226 |
msgid "Complete \"%s\" Activation Now"
|
227 |
msgstr ""
|
228 |
|
229 |
-
#: includes/class-freemius.php:
|
230 |
msgid "We made a few tweaks to the %s, %s"
|
231 |
msgstr ""
|
232 |
|
233 |
-
#: includes/class-freemius.php:
|
234 |
msgid "Opt in to make \"%s\" better!"
|
235 |
msgstr ""
|
236 |
|
237 |
-
#: includes/class-freemius.php:
|
238 |
msgid "The upgrade of %s was successfully completed."
|
239 |
msgstr ""
|
240 |
|
241 |
-
#: includes/class-freemius.php:
|
242 |
msgid "Add-On"
|
243 |
msgstr ""
|
244 |
|
245 |
-
#: includes/class-freemius.php:
|
246 |
msgid "Plugin"
|
247 |
msgstr ""
|
248 |
|
249 |
-
#: includes/class-freemius.php:
|
250 |
msgid "Theme"
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: includes/class-freemius.php:
|
254 |
msgid "An unknown error has occurred while trying to set the user's beta mode."
|
255 |
msgstr ""
|
256 |
|
257 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
258 |
msgid "Invalid site details collection."
|
259 |
msgstr ""
|
260 |
|
261 |
-
#: includes/class-freemius.php:
|
262 |
msgid "We couldn't find your email address in the system, are you sure it's the right address?"
|
263 |
msgstr ""
|
264 |
|
265 |
-
#: includes/class-freemius.php:
|
266 |
msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
267 |
msgstr ""
|
268 |
|
269 |
-
#: includes/class-freemius.php:
|
270 |
msgid "Account is pending activation."
|
271 |
msgstr ""
|
272 |
|
273 |
-
#: includes/class-freemius.php:
|
274 |
msgid "Buy a license now"
|
275 |
msgstr ""
|
276 |
|
277 |
-
#: includes/class-freemius.php:
|
278 |
msgid "Renew your license now"
|
279 |
msgstr ""
|
280 |
|
281 |
-
#: includes/class-freemius.php:
|
282 |
msgid "%s to access version %s security & feature updates, and support."
|
283 |
msgstr ""
|
284 |
|
285 |
-
#: includes/class-freemius.php:
|
286 |
msgid "%s activation was successfully completed."
|
287 |
msgstr ""
|
288 |
|
289 |
-
#: includes/class-freemius.php:
|
290 |
msgid "Your account was successfully activated with the %s plan."
|
291 |
msgstr ""
|
292 |
|
293 |
-
#: includes/class-freemius.php:
|
294 |
msgid "Your trial has been successfully started."
|
295 |
msgstr ""
|
296 |
|
297 |
-
#: includes/class-freemius.php:
|
298 |
msgid "Couldn't activate %s."
|
299 |
msgstr ""
|
300 |
|
301 |
-
#: includes/class-freemius.php:
|
302 |
msgid "Please contact us with the following message:"
|
303 |
msgstr ""
|
304 |
|
305 |
-
#: includes/class-freemius.php:
|
306 |
msgid "An unknown error has occurred."
|
307 |
msgstr ""
|
308 |
|
309 |
-
#: includes/class-freemius.php:
|
310 |
msgid "Upgrade"
|
311 |
msgstr ""
|
312 |
|
313 |
-
#: includes/class-freemius.php:
|
314 |
msgid "Start Trial"
|
315 |
msgstr ""
|
316 |
|
317 |
-
#: includes/class-freemius.php:
|
318 |
msgid "Pricing"
|
319 |
msgstr ""
|
320 |
|
321 |
-
#: includes/class-freemius.php:
|
322 |
msgid "Affiliation"
|
323 |
msgstr ""
|
324 |
|
325 |
-
#: includes/class-freemius.php:
|
326 |
msgid "Account"
|
327 |
msgstr ""
|
328 |
|
329 |
-
#: includes/class-freemius.php:
|
330 |
msgid "Contact Us"
|
331 |
msgstr ""
|
332 |
|
333 |
-
#: includes/class-freemius.php:
|
334 |
msgid "Add-Ons"
|
335 |
msgstr ""
|
336 |
|
337 |
-
#: includes/class-freemius.php:
|
338 |
msgctxt "ASCII arrow left icon"
|
339 |
msgid "←"
|
340 |
msgstr ""
|
341 |
|
342 |
-
#: includes/class-freemius.php:
|
343 |
msgctxt "ASCII arrow right icon"
|
344 |
msgid "➤"
|
345 |
msgstr ""
|
346 |
|
347 |
-
#: includes/class-freemius.php:
|
348 |
msgctxt "noun"
|
349 |
msgid "Pricing"
|
350 |
msgstr ""
|
351 |
|
352 |
-
#: includes/class-freemius.php:
|
353 |
msgid "Support Forum"
|
354 |
msgstr ""
|
355 |
|
356 |
-
#: includes/class-freemius.php:
|
357 |
msgid "Your email has been successfully verified - you are AWESOME!"
|
358 |
msgstr ""
|
359 |
|
360 |
-
#: includes/class-freemius.php:
|
361 |
msgctxt "a positive response"
|
362 |
msgid "Right on"
|
363 |
msgstr ""
|
364 |
|
365 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
366 |
msgid "Your %s Add-on plan was successfully upgraded."
|
367 |
msgstr ""
|
368 |
|
369 |
-
#: includes/class-freemius.php:
|
370 |
msgid "%s Add-on was successfully purchased."
|
371 |
msgstr ""
|
372 |
|
373 |
-
#: includes/class-freemius.php:
|
374 |
msgid "Download the latest version"
|
375 |
msgstr ""
|
376 |
|
377 |
-
#: includes/class-freemius.php:
|
378 |
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"
|
379 |
msgstr ""
|
380 |
|
381 |
-
#: includes/class-freemius.php:
|
382 |
msgid "Error received from the server:"
|
383 |
msgstr ""
|
384 |
|
385 |
-
#: includes/class-freemius.php:
|
386 |
msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
387 |
msgstr ""
|
388 |
|
389 |
-
#: includes/class-freemius.php:
|
390 |
msgctxt "something somebody says when they are thinking about what you have just said."
|
391 |
msgid "Hmm"
|
392 |
msgstr ""
|
393 |
|
394 |
-
#: includes/class-freemius.php:
|
395 |
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."
|
396 |
msgstr ""
|
397 |
|
398 |
-
#: includes/class-freemius.php:
|
399 |
msgctxt "trial period"
|
400 |
msgid "Trial"
|
401 |
msgstr ""
|
402 |
|
403 |
-
#: includes/class-freemius.php:
|
404 |
msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
405 |
msgstr ""
|
406 |
|
407 |
-
#: includes/class-freemius.php:
|
408 |
msgid "Please contact us here"
|
409 |
msgstr ""
|
410 |
|
411 |
-
#: includes/class-freemius.php:
|
412 |
msgid "Your plan was successfully activated."
|
413 |
msgstr ""
|
414 |
|
415 |
-
#: includes/class-freemius.php:
|
416 |
msgid "Your plan was successfully upgraded."
|
417 |
msgstr ""
|
418 |
|
419 |
-
#: includes/class-freemius.php:
|
420 |
msgid "Your plan was successfully changed to %s."
|
421 |
msgstr ""
|
422 |
|
423 |
-
#: includes/class-freemius.php:
|
424 |
msgid "Your license has expired. You can still continue using the free %s forever."
|
425 |
msgstr ""
|
426 |
|
427 |
-
#: includes/class-freemius.php:
|
428 |
msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
429 |
msgstr ""
|
430 |
|
431 |
-
#: includes/class-freemius.php:
|
432 |
msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
|
433 |
msgstr ""
|
434 |
|
435 |
-
#: includes/class-freemius.php:
|
436 |
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."
|
437 |
msgstr ""
|
438 |
|
439 |
-
#: includes/class-freemius.php:
|
440 |
msgid "Your free trial has expired. You can still continue using all our free features."
|
441 |
msgstr ""
|
442 |
|
443 |
-
#: includes/class-freemius.php:
|
444 |
msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
445 |
msgstr ""
|
446 |
|
447 |
-
#: includes/class-freemius.php:
|
448 |
msgid "It looks like the license could not be activated."
|
449 |
msgstr ""
|
450 |
|
451 |
-
#: includes/class-freemius.php:
|
452 |
msgid "Your license was successfully activated."
|
453 |
msgstr ""
|
454 |
|
455 |
-
#: includes/class-freemius.php:
|
456 |
msgid "It looks like your site currently doesn't have an active license."
|
457 |
msgstr ""
|
458 |
|
459 |
-
#: includes/class-freemius.php:
|
460 |
msgid "It looks like the license deactivation failed."
|
461 |
msgstr ""
|
462 |
|
463 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
464 |
msgid "Your license was successfully deactivated, you are back to the %s plan."
|
465 |
msgstr ""
|
466 |
|
467 |
-
#: includes/class-freemius.php:
|
468 |
msgid "O.K"
|
469 |
msgstr ""
|
470 |
|
471 |
-
#: includes/class-freemius.php:
|
472 |
msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
|
473 |
msgstr ""
|
474 |
|
475 |
-
#: includes/class-freemius.php:
|
476 |
msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
|
477 |
msgstr ""
|
478 |
|
479 |
-
#: includes/class-freemius.php:
|
480 |
msgid "You are already running the %s in a trial mode."
|
481 |
msgstr ""
|
482 |
|
483 |
-
#: includes/class-freemius.php:
|
484 |
msgid "You already utilized a trial before."
|
485 |
msgstr ""
|
486 |
|
487 |
-
#: includes/class-freemius.php:
|
488 |
msgid "Plan %s do not exist, therefore, can't start a trial."
|
489 |
msgstr ""
|
490 |
|
491 |
-
#: includes/class-freemius.php:
|
492 |
msgid "Plan %s does not support a trial period."
|
493 |
msgstr ""
|
494 |
|
495 |
-
#: includes/class-freemius.php:
|
496 |
msgid "None of the %s's plans supports a trial period."
|
497 |
msgstr ""
|
498 |
|
499 |
-
#: includes/class-freemius.php:
|
500 |
msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
|
501 |
msgstr ""
|
502 |
|
503 |
-
#: includes/class-freemius.php:
|
504 |
msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
|
505 |
msgstr ""
|
506 |
|
507 |
-
#: includes/class-freemius.php:
|
508 |
msgid "Your %s free trial was successfully cancelled."
|
509 |
msgstr ""
|
510 |
|
511 |
-
#: includes/class-freemius.php:
|
512 |
msgid "Version %s was released."
|
513 |
msgstr ""
|
514 |
|
515 |
-
#: includes/class-freemius.php:
|
516 |
msgid "Please download %s."
|
517 |
msgstr ""
|
518 |
|
519 |
-
#: includes/class-freemius.php:
|
520 |
msgid "the latest %s version here"
|
521 |
msgstr ""
|
522 |
|
523 |
-
#: includes/class-freemius.php:
|
524 |
msgid "New"
|
525 |
msgstr ""
|
526 |
|
527 |
-
#: includes/class-freemius.php:
|
528 |
msgid "Seems like you got the latest release."
|
529 |
msgstr ""
|
530 |
|
531 |
-
#: includes/class-freemius.php:
|
532 |
msgid "You are all good!"
|
533 |
msgstr ""
|
534 |
|
535 |
-
#: includes/class-freemius.php:
|
536 |
msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
|
537 |
msgstr ""
|
538 |
|
539 |
-
#: includes/class-freemius.php:
|
540 |
msgid "Site successfully opted in."
|
541 |
msgstr ""
|
542 |
|
543 |
-
#: includes/class-freemius.php:
|
544 |
msgid "Awesome"
|
545 |
msgstr ""
|
546 |
|
547 |
-
#: includes/class-freemius.php:
|
548 |
msgid "We appreciate your help in making the %s better by letting us track some usage data."
|
549 |
msgstr ""
|
550 |
|
551 |
-
#: includes/class-freemius.php:
|
552 |
msgid "Thank you!"
|
553 |
msgstr ""
|
554 |
|
555 |
-
#: includes/class-freemius.php:
|
556 |
msgid "We will no longer be sending any usage data of %s on %s to %s."
|
557 |
msgstr ""
|
558 |
|
559 |
-
#: includes/class-freemius.php:
|
560 |
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."
|
561 |
msgstr ""
|
562 |
|
563 |
-
#: includes/class-freemius.php:
|
564 |
msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
|
565 |
msgstr ""
|
566 |
|
567 |
-
#: includes/class-freemius.php:
|
568 |
msgid "%s is the new owner of the account."
|
569 |
msgstr ""
|
570 |
|
571 |
-
#: includes/class-freemius.php:
|
572 |
msgctxt "as congratulations"
|
573 |
msgid "Congrats"
|
574 |
msgstr ""
|
575 |
|
576 |
-
#: includes/class-freemius.php:
|
577 |
-
msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
|
578 |
-
msgstr ""
|
579 |
-
|
580 |
-
#: includes/class-freemius.php:20422
|
581 |
-
msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
|
582 |
-
msgstr ""
|
583 |
-
|
584 |
-
#: includes/class-freemius.php:20429
|
585 |
-
msgid "Change Ownership"
|
586 |
-
msgstr ""
|
587 |
-
|
588 |
-
#: includes/class-freemius.php:20437
|
589 |
msgid "Your email was successfully updated. You should receive an email with confirmation instructions in few moments."
|
590 |
msgstr ""
|
591 |
|
592 |
-
#: includes/class-freemius.php:
|
593 |
msgid "Please provide your full name."
|
594 |
msgstr ""
|
595 |
|
596 |
-
#: includes/class-freemius.php:
|
597 |
msgid "Your name was successfully updated."
|
598 |
msgstr ""
|
599 |
|
600 |
-
#: includes/class-freemius.php:
|
601 |
msgid "You have successfully updated your %s."
|
602 |
msgstr ""
|
603 |
|
604 |
-
#: includes/class-freemius.php:
|
605 |
msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
|
606 |
msgstr ""
|
607 |
|
608 |
-
#: includes/class-freemius.php:
|
609 |
msgctxt "advance notice of something that will need attention."
|
610 |
msgid "Heads up"
|
611 |
msgstr ""
|
612 |
|
613 |
-
#: includes/class-freemius.php:
|
614 |
msgctxt "exclamation"
|
615 |
msgid "Hey"
|
616 |
msgstr ""
|
617 |
|
618 |
-
#: includes/class-freemius.php:
|
619 |
msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
|
620 |
msgstr ""
|
621 |
|
622 |
-
#: includes/class-freemius.php:
|
623 |
msgid "No commitment for %s days - cancel anytime!"
|
624 |
msgstr ""
|
625 |
|
626 |
-
#: includes/class-freemius.php:
|
627 |
msgid "No credit card required"
|
628 |
msgstr ""
|
629 |
|
630 |
-
#: includes/class-freemius.php:
|
631 |
msgctxt "call to action"
|
632 |
msgid "Start free trial"
|
633 |
msgstr ""
|
634 |
|
635 |
-
#: includes/class-freemius.php:
|
636 |
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!"
|
637 |
msgstr ""
|
638 |
|
639 |
-
#: includes/class-freemius.php:
|
640 |
msgid "Learn more"
|
641 |
msgstr ""
|
642 |
|
643 |
-
#: includes/class-freemius.php:
|
644 |
msgid "Activate License"
|
645 |
msgstr ""
|
646 |
|
647 |
-
#: includes/class-freemius.php:
|
648 |
msgid "Change License"
|
649 |
msgstr ""
|
650 |
|
651 |
-
#: includes/class-freemius.php:
|
652 |
msgid "Opt Out"
|
653 |
msgstr ""
|
654 |
|
655 |
-
#: includes/class-freemius.php:
|
656 |
msgid "Opt In"
|
657 |
msgstr ""
|
658 |
|
659 |
-
#: includes/class-freemius.php:
|
660 |
msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
|
661 |
msgstr ""
|
662 |
|
663 |
-
#: includes/class-freemius.php:
|
664 |
msgid "Activate %s features"
|
665 |
msgstr ""
|
666 |
|
667 |
-
#: includes/class-freemius.php:
|
668 |
msgid "Please follow these steps to complete the upgrade"
|
669 |
msgstr ""
|
670 |
|
671 |
-
#: includes/class-freemius.php:
|
672 |
msgid "Download the latest %s version"
|
673 |
msgstr ""
|
674 |
|
675 |
-
#: includes/class-freemius.php:
|
676 |
msgid "Upload and activate the downloaded version"
|
677 |
msgstr ""
|
678 |
|
679 |
-
#: includes/class-freemius.php:
|
680 |
msgid "How to upload and activate?"
|
681 |
msgstr ""
|
682 |
|
683 |
-
#: includes/class-freemius.php:
|
684 |
msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
|
685 |
msgstr ""
|
686 |
|
687 |
-
#: includes/class-freemius.php:
|
688 |
msgid "Auto installation only works for opted-in users."
|
689 |
msgstr ""
|
690 |
|
691 |
-
#: includes/class-freemius.php:
|
692 |
msgid "Invalid module ID."
|
693 |
msgstr ""
|
694 |
|
695 |
-
#: includes/class-freemius.php:
|
696 |
msgid "Premium version already active."
|
697 |
msgstr ""
|
698 |
|
699 |
-
#: includes/class-freemius.php:
|
700 |
msgid "You do not have a valid license to access the premium version."
|
701 |
msgstr ""
|
702 |
|
703 |
-
#: includes/class-freemius.php:
|
704 |
msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
|
705 |
msgstr ""
|
706 |
|
707 |
-
#: includes/class-freemius.php:
|
708 |
msgid "Premium add-on version already installed."
|
709 |
msgstr ""
|
710 |
|
711 |
-
#: includes/class-freemius.php:
|
712 |
msgid "View paid features"
|
713 |
msgstr ""
|
714 |
|
715 |
-
#: includes/class-freemius.php:
|
716 |
msgid "Thank you so much for using %s and its add-ons!"
|
717 |
msgstr ""
|
718 |
|
719 |
-
#: includes/class-freemius.php:
|
720 |
msgid "Thank you so much for using %s!"
|
721 |
msgstr ""
|
722 |
|
723 |
-
#: includes/class-freemius.php:
|
724 |
msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
|
725 |
msgstr ""
|
726 |
|
727 |
-
#: includes/class-freemius.php:
|
728 |
msgid "Thank you so much for using our products!"
|
729 |
msgstr ""
|
730 |
|
731 |
-
#: includes/class-freemius.php:
|
732 |
msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
|
733 |
msgstr ""
|
734 |
|
735 |
-
#: includes/class-freemius.php:
|
736 |
msgid "%s and its add-ons"
|
737 |
msgstr ""
|
738 |
|
739 |
-
#: includes/class-freemius.php:
|
740 |
msgid "Products"
|
741 |
msgstr ""
|
742 |
|
743 |
-
#: includes/class-freemius.php:
|
744 |
msgid "Yes"
|
745 |
msgstr ""
|
746 |
|
747 |
-
#: includes/class-freemius.php:
|
748 |
msgid "send me security & feature updates, educational content and offers."
|
749 |
msgstr ""
|
750 |
|
751 |
-
#: includes/class-freemius.php:
|
752 |
msgid "No"
|
753 |
msgstr ""
|
754 |
|
755 |
-
#: includes/class-freemius.php:
|
756 |
msgid "do %sNOT%s send me security & feature updates, educational content and offers."
|
757 |
msgstr ""
|
758 |
|
759 |
-
#: includes/class-freemius.php:
|
760 |
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 :-)"
|
761 |
msgstr ""
|
762 |
|
763 |
-
#: includes/class-freemius.php:
|
764 |
msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
|
765 |
msgstr ""
|
766 |
|
767 |
-
#: includes/class-freemius.php:
|
768 |
msgid "License key is empty."
|
769 |
msgstr ""
|
770 |
|
771 |
-
#: includes/class-fs-plugin-updater.php:
|
772 |
msgid "Renew license"
|
773 |
msgstr ""
|
774 |
|
775 |
-
#: includes/class-fs-plugin-updater.php:
|
776 |
msgid "Buy license"
|
777 |
msgstr ""
|
778 |
|
779 |
-
#: includes/class-fs-plugin-updater.php:
|
780 |
msgid "There is a %s of %s available."
|
781 |
msgstr ""
|
782 |
|
783 |
-
#: includes/class-fs-plugin-updater.php:
|
784 |
msgid "new Beta version"
|
785 |
msgstr ""
|
786 |
|
787 |
-
#: includes/class-fs-plugin-updater.php:
|
788 |
msgid "new version"
|
789 |
msgstr ""
|
790 |
|
791 |
-
#: includes/class-fs-plugin-updater.php:
|
792 |
msgid "Important Upgrade Notice:"
|
793 |
msgstr ""
|
794 |
|
795 |
-
#: includes/class-fs-plugin-updater.php:
|
796 |
msgid "Installing plugin: %s"
|
797 |
msgstr ""
|
798 |
|
799 |
-
#: includes/class-fs-plugin-updater.php:
|
800 |
msgid "Unable to connect to the filesystem. Please confirm your credentials."
|
801 |
msgstr ""
|
802 |
|
803 |
-
#: includes/class-fs-plugin-updater.php:
|
804 |
msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
|
805 |
msgstr ""
|
806 |
|
807 |
-
#: includes/fs-plugin-info-dialog.php:
|
808 |
msgid "Purchase More"
|
809 |
msgstr ""
|
810 |
|
811 |
-
#: includes/fs-plugin-info-dialog.php:
|
812 |
msgctxt "verb"
|
813 |
msgid "Purchase"
|
814 |
msgstr ""
|
815 |
|
816 |
-
#: includes/fs-plugin-info-dialog.php:
|
817 |
msgid "Start my free %s"
|
818 |
msgstr ""
|
819 |
|
820 |
-
#: includes/fs-plugin-info-dialog.php:
|
821 |
msgid "Install Free Version Update Now"
|
822 |
msgstr ""
|
823 |
|
824 |
-
#: includes/fs-plugin-info-dialog.php:
|
825 |
msgid "Install Update Now"
|
826 |
msgstr ""
|
827 |
|
828 |
-
#: includes/fs-plugin-info-dialog.php:
|
829 |
msgid "Install Free Version Now"
|
830 |
msgstr ""
|
831 |
|
832 |
-
#: includes/fs-plugin-info-dialog.php:
|
833 |
msgid "Install Now"
|
834 |
msgstr ""
|
835 |
|
836 |
-
#: includes/fs-plugin-info-dialog.php:
|
837 |
msgctxt "as download latest version"
|
838 |
msgid "Download Latest Free Version"
|
839 |
msgstr ""
|
840 |
|
841 |
-
#: includes/fs-plugin-info-dialog.php:
|
842 |
msgctxt "as download latest version"
|
843 |
msgid "Download Latest"
|
844 |
msgstr ""
|
845 |
|
846 |
-
#: includes/fs-plugin-info-dialog.php:
|
847 |
msgid "Activate this add-on"
|
848 |
msgstr ""
|
849 |
|
850 |
-
#: includes/fs-plugin-info-dialog.php:
|
851 |
msgid "Activate Free Version"
|
852 |
msgstr ""
|
853 |
|
854 |
-
#: includes/fs-plugin-info-dialog.php:
|
855 |
msgid "Activate"
|
856 |
msgstr ""
|
857 |
|
858 |
-
#: includes/fs-plugin-info-dialog.php:
|
859 |
msgctxt "Plugin installer section title"
|
860 |
msgid "Description"
|
861 |
msgstr ""
|
862 |
|
863 |
-
#: includes/fs-plugin-info-dialog.php:
|
864 |
msgctxt "Plugin installer section title"
|
865 |
msgid "Installation"
|
866 |
msgstr ""
|
867 |
|
868 |
-
#: includes/fs-plugin-info-dialog.php:
|
869 |
msgctxt "Plugin installer section title"
|
870 |
msgid "FAQ"
|
871 |
msgstr ""
|
872 |
|
873 |
-
#: includes/fs-plugin-info-dialog.php:
|
874 |
msgid "Screenshots"
|
875 |
msgstr ""
|
876 |
|
877 |
-
#: includes/fs-plugin-info-dialog.php:
|
878 |
msgctxt "Plugin installer section title"
|
879 |
msgid "Changelog"
|
880 |
msgstr ""
|
881 |
|
882 |
-
#: includes/fs-plugin-info-dialog.php:
|
883 |
msgctxt "Plugin installer section title"
|
884 |
msgid "Reviews"
|
885 |
msgstr ""
|
886 |
|
887 |
-
#: includes/fs-plugin-info-dialog.php:
|
888 |
msgctxt "Plugin installer section title"
|
889 |
msgid "Other Notes"
|
890 |
msgstr ""
|
891 |
|
892 |
-
#: includes/fs-plugin-info-dialog.php:
|
893 |
msgctxt "Plugin installer section title"
|
894 |
msgid "Features & Pricing"
|
895 |
msgstr ""
|
896 |
|
897 |
-
#: includes/fs-plugin-info-dialog.php:
|
898 |
msgid "Plugin Install"
|
899 |
msgstr ""
|
900 |
|
901 |
-
#: includes/fs-plugin-info-dialog.php:
|
902 |
msgctxt "e.g. Professional Plan"
|
903 |
msgid "%s Plan"
|
904 |
msgstr ""
|
905 |
|
906 |
-
#: includes/fs-plugin-info-dialog.php:
|
907 |
msgctxt "e.g. the best product"
|
908 |
msgid "Best"
|
909 |
msgstr ""
|
910 |
|
911 |
-
#: includes/fs-plugin-info-dialog.php:
|
912 |
msgctxt "as every month"
|
913 |
msgid "Monthly"
|
914 |
msgstr ""
|
915 |
|
916 |
-
#: includes/fs-plugin-info-dialog.php:
|
917 |
msgctxt "as once a year"
|
918 |
msgid "Annual"
|
919 |
msgstr ""
|
920 |
|
921 |
-
#: includes/fs-plugin-info-dialog.php:
|
922 |
msgid "Lifetime"
|
923 |
msgstr ""
|
924 |
|
925 |
-
#: includes/fs-plugin-info-dialog.php:
|
926 |
msgctxt "e.g. billed monthly"
|
927 |
msgid "Billed %s"
|
928 |
msgstr ""
|
929 |
|
930 |
-
#: includes/fs-plugin-info-dialog.php:
|
931 |
msgctxt "as once a year"
|
932 |
msgid "Annually"
|
933 |
msgstr ""
|
934 |
|
935 |
-
#: includes/fs-plugin-info-dialog.php:
|
936 |
msgctxt "as once a year"
|
937 |
msgid "Once"
|
938 |
msgstr ""
|
939 |
|
940 |
-
#: includes/fs-plugin-info-dialog.php:
|
941 |
msgid "Single Site License"
|
942 |
msgstr ""
|
943 |
|
944 |
-
#: includes/fs-plugin-info-dialog.php:
|
945 |
msgid "Unlimited Licenses"
|
946 |
msgstr ""
|
947 |
|
948 |
-
#: includes/fs-plugin-info-dialog.php:
|
949 |
msgid "Up to %s Sites"
|
950 |
msgstr ""
|
951 |
|
952 |
-
#: includes/fs-plugin-info-dialog.php:
|
953 |
msgctxt "as monthly period"
|
954 |
msgid "mo"
|
955 |
msgstr ""
|
956 |
|
957 |
-
#: includes/fs-plugin-info-dialog.php:
|
958 |
msgctxt "as annual period"
|
959 |
msgid "year"
|
960 |
msgstr ""
|
961 |
|
962 |
-
#: includes/fs-plugin-info-dialog.php:
|
963 |
msgctxt "noun"
|
964 |
msgid "Price"
|
965 |
msgstr ""
|
966 |
|
967 |
-
#: includes/fs-plugin-info-dialog.php:
|
968 |
msgid "Save %s"
|
969 |
msgstr ""
|
970 |
|
971 |
-
#: includes/fs-plugin-info-dialog.php:
|
972 |
msgid "No commitment for %s - cancel anytime"
|
973 |
msgstr ""
|
974 |
|
975 |
-
#: includes/fs-plugin-info-dialog.php:
|
976 |
msgid "After your free %s, pay as little as %s"
|
977 |
msgstr ""
|
978 |
|
979 |
-
#: includes/fs-plugin-info-dialog.php:
|
980 |
msgid "Details"
|
981 |
msgstr ""
|
982 |
|
983 |
-
#: includes/fs-plugin-info-dialog.php:
|
984 |
msgctxt "product version"
|
985 |
msgid "Version"
|
986 |
msgstr ""
|
987 |
|
988 |
-
#: includes/fs-plugin-info-dialog.php:
|
989 |
msgctxt "as the plugin author"
|
990 |
msgid "Author"
|
991 |
msgstr ""
|
992 |
|
993 |
-
#: includes/fs-plugin-info-dialog.php:
|
994 |
msgid "Last Updated"
|
995 |
msgstr ""
|
996 |
|
997 |
-
#: includes/fs-plugin-info-dialog.php:
|
998 |
msgctxt "x-ago"
|
999 |
msgid "%s ago"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
-
#: includes/fs-plugin-info-dialog.php:
|
1003 |
msgid "Requires WordPress Version"
|
1004 |
msgstr ""
|
1005 |
|
1006 |
-
#: includes/fs-plugin-info-dialog.php:
|
1007 |
msgid "%s or higher"
|
1008 |
msgstr ""
|
1009 |
|
1010 |
-
#: includes/fs-plugin-info-dialog.php:
|
1011 |
msgid "Compatible up to"
|
1012 |
msgstr ""
|
1013 |
|
1014 |
-
#: includes/fs-plugin-info-dialog.php:
|
1015 |
msgid "Downloaded"
|
1016 |
msgstr ""
|
1017 |
|
1018 |
-
#: includes/fs-plugin-info-dialog.php:
|
1019 |
msgid "%s time"
|
1020 |
msgstr ""
|
1021 |
|
1022 |
-
#: includes/fs-plugin-info-dialog.php:
|
1023 |
msgid "%s times"
|
1024 |
msgstr ""
|
1025 |
|
1026 |
-
#: includes/fs-plugin-info-dialog.php:
|
1027 |
msgid "WordPress.org Plugin Page"
|
1028 |
msgstr ""
|
1029 |
|
1030 |
-
#: includes/fs-plugin-info-dialog.php:
|
1031 |
msgid "Plugin Homepage"
|
1032 |
msgstr ""
|
1033 |
|
1034 |
-
#: includes/fs-plugin-info-dialog.php:
|
1035 |
msgid "Donate to this plugin"
|
1036 |
msgstr ""
|
1037 |
|
1038 |
-
#: includes/fs-plugin-info-dialog.php:
|
1039 |
msgid "Average Rating"
|
1040 |
msgstr ""
|
1041 |
|
1042 |
-
#: includes/fs-plugin-info-dialog.php:
|
1043 |
msgid "based on %s"
|
1044 |
msgstr ""
|
1045 |
|
1046 |
-
#: includes/fs-plugin-info-dialog.php:
|
1047 |
msgid "%s rating"
|
1048 |
msgstr ""
|
1049 |
|
1050 |
-
#: includes/fs-plugin-info-dialog.php:
|
1051 |
msgid "%s ratings"
|
1052 |
msgstr ""
|
1053 |
|
1054 |
-
#: includes/fs-plugin-info-dialog.php:
|
1055 |
msgid "%s star"
|
1056 |
msgstr ""
|
1057 |
|
1058 |
-
#: includes/fs-plugin-info-dialog.php:
|
1059 |
msgid "%s stars"
|
1060 |
msgstr ""
|
1061 |
|
1062 |
-
#: includes/fs-plugin-info-dialog.php:
|
1063 |
msgid "Click to see reviews that provided a rating of %s"
|
1064 |
msgstr ""
|
1065 |
|
1066 |
-
#: includes/fs-plugin-info-dialog.php:
|
1067 |
msgid "Contributors"
|
1068 |
msgstr ""
|
1069 |
|
1070 |
-
#: includes/fs-plugin-info-dialog.php:
|
1071 |
msgid "Warning"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
-
#: includes/fs-plugin-info-dialog.php:
|
1075 |
msgid "This plugin has not been tested with your current version of WordPress."
|
1076 |
msgstr ""
|
1077 |
|
1078 |
-
#: includes/fs-plugin-info-dialog.php:
|
1079 |
msgid "This plugin has not been marked as compatible with your version of WordPress."
|
1080 |
msgstr ""
|
1081 |
|
1082 |
-
#: includes/fs-plugin-info-dialog.php:
|
1083 |
msgid "Paid add-on must be deployed to Freemius."
|
1084 |
msgstr ""
|
1085 |
|
1086 |
-
#: includes/fs-plugin-info-dialog.php:
|
1087 |
msgid "Add-on must be deployed to WordPress.org or Freemius."
|
1088 |
msgstr ""
|
1089 |
|
1090 |
-
#: includes/fs-plugin-info-dialog.php:
|
1091 |
msgid "Newer Version (%s) Installed"
|
1092 |
msgstr ""
|
1093 |
|
1094 |
-
#: includes/fs-plugin-info-dialog.php:
|
1095 |
msgid "Newer Free Version (%s) Installed"
|
1096 |
msgstr ""
|
1097 |
|
1098 |
-
#: includes/fs-plugin-info-dialog.php:
|
1099 |
msgid "Latest Version Installed"
|
1100 |
msgstr ""
|
1101 |
|
1102 |
-
#: includes/fs-plugin-info-dialog.php:
|
1103 |
msgid "Latest Free Version Installed"
|
1104 |
msgstr ""
|
1105 |
|
1106 |
-
#: templates/account.php:
|
1107 |
msgid "Downgrading your plan"
|
1108 |
msgstr ""
|
1109 |
|
1110 |
-
#: templates/account.php:
|
1111 |
msgid "Cancelling the subscription"
|
1112 |
msgstr ""
|
1113 |
|
1114 |
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
|
1115 |
-
#: templates/account.php:
|
1116 |
msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
|
1117 |
msgstr ""
|
1118 |
|
1119 |
-
#: templates/account.php:
|
1120 |
msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
|
1121 |
msgstr ""
|
1122 |
|
1123 |
-
#: templates/account.php:
|
1124 |
msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
|
1125 |
msgstr ""
|
1126 |
|
1127 |
-
#: templates/account.php:
|
1128 |
msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
1129 |
msgstr ""
|
1130 |
|
1131 |
-
#: templates/account.php:
|
1132 |
msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
1133 |
msgstr ""
|
1134 |
|
1135 |
#. translators: %s: Plan title (e.g. "Professional")
|
1136 |
-
#: templates/account.php:
|
1137 |
msgid "Activate %s Plan"
|
1138 |
msgstr ""
|
1139 |
|
1140 |
#. translators: %s: Time period (e.g. Auto renews in "2 months")
|
1141 |
-
#: templates/account.php:
|
1142 |
msgid "Auto renews in %s"
|
1143 |
msgstr ""
|
1144 |
|
1145 |
#. translators: %s: Time period (e.g. Expires in "2 months")
|
1146 |
-
#: templates/account.php:
|
1147 |
msgid "Expires in %s"
|
1148 |
msgstr ""
|
1149 |
|
1150 |
-
#: templates/account.php:
|
1151 |
msgctxt "as synchronize license"
|
1152 |
msgid "Sync License"
|
1153 |
msgstr ""
|
1154 |
|
1155 |
-
#: templates/account.php:
|
1156 |
msgid "Cancel Trial"
|
1157 |
msgstr ""
|
1158 |
|
1159 |
-
#: templates/account.php:
|
1160 |
msgid "Change Plan"
|
1161 |
msgstr ""
|
1162 |
|
1163 |
-
#: templates/account.php:
|
1164 |
msgctxt "verb"
|
1165 |
msgid "Upgrade"
|
1166 |
msgstr ""
|
1167 |
|
1168 |
-
#: templates/account.php:
|
1169 |
msgctxt "verb"
|
1170 |
msgid "Downgrade"
|
1171 |
msgstr ""
|
1172 |
|
1173 |
-
#: templates/account.php:
|
1174 |
msgid "Free"
|
1175 |
msgstr ""
|
1176 |
|
1177 |
-
#: templates/account.php:
|
1178 |
msgctxt "as product pricing plan"
|
1179 |
msgid "Plan"
|
1180 |
msgstr ""
|
1181 |
|
1182 |
-
#: templates/account.php:
|
1183 |
msgid "Bundle Plan"
|
1184 |
msgstr ""
|
1185 |
|
1186 |
-
#: templates/account.php:
|
1187 |
msgid "Free Trial"
|
1188 |
msgstr ""
|
1189 |
|
1190 |
-
#: templates/account.php:
|
1191 |
msgid "Account Details"
|
1192 |
msgstr ""
|
1193 |
|
1194 |
-
#: templates/account.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1195 |
msgid "Billing & Invoices"
|
1196 |
msgstr ""
|
1197 |
|
1198 |
-
#: templates/account.php:
|
1199 |
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?"
|
1200 |
msgstr ""
|
1201 |
|
1202 |
-
#: templates/account.php:
|
1203 |
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?"
|
1204 |
msgstr ""
|
1205 |
|
1206 |
-
#: templates/account.php:
|
1207 |
msgid "Delete Account"
|
1208 |
msgstr ""
|
1209 |
|
1210 |
-
#: templates/account.php:
|
1211 |
msgid "Deactivate License"
|
1212 |
msgstr ""
|
1213 |
|
1214 |
-
#: templates/account.php:
|
1215 |
msgid "Are you sure you want to proceed?"
|
1216 |
msgstr ""
|
1217 |
|
1218 |
-
#: templates/account.php:
|
1219 |
msgid "Cancel Subscription"
|
1220 |
msgstr ""
|
1221 |
|
1222 |
-
#: templates/account.php:
|
1223 |
msgctxt "as synchronize"
|
1224 |
msgid "Sync"
|
1225 |
msgstr ""
|
1226 |
|
1227 |
-
#: templates/account.php:
|
1228 |
msgid "Name"
|
1229 |
msgstr ""
|
1230 |
|
1231 |
-
#: templates/account.php:
|
1232 |
msgid "Email"
|
1233 |
msgstr ""
|
1234 |
|
1235 |
-
#: templates/account.php:
|
1236 |
msgid "User ID"
|
1237 |
msgstr ""
|
1238 |
|
1239 |
-
#: templates/account.php:
|
1240 |
msgid "ID"
|
1241 |
msgstr ""
|
1242 |
|
1243 |
-
#: templates/account.php:
|
1244 |
msgid "Site ID"
|
1245 |
msgstr ""
|
1246 |
|
1247 |
-
#: templates/account.php:
|
1248 |
msgid "No ID"
|
1249 |
msgstr ""
|
1250 |
|
1251 |
-
#: templates/account.php:
|
1252 |
msgid "Public Key"
|
1253 |
msgstr ""
|
1254 |
|
1255 |
-
#: templates/account.php:
|
1256 |
msgid "Secret Key"
|
1257 |
msgstr ""
|
1258 |
|
1259 |
-
#: templates/account.php:
|
1260 |
msgctxt "as secret encryption key missing"
|
1261 |
msgid "No Secret"
|
1262 |
msgstr ""
|
1263 |
|
1264 |
-
#: templates/account.php:
|
1265 |
msgid "Trial"
|
1266 |
msgstr ""
|
1267 |
|
1268 |
-
#: templates/account.php:
|
1269 |
msgid "License Key"
|
1270 |
msgstr ""
|
1271 |
|
1272 |
-
#: templates/account.php:
|
1273 |
msgid "Join the Beta program"
|
1274 |
msgstr ""
|
1275 |
|
1276 |
-
#: templates/account.php:
|
1277 |
msgid "not verified"
|
1278 |
msgstr ""
|
1279 |
|
1280 |
-
#: templates/account.php:
|
1281 |
msgid "Expired"
|
1282 |
msgstr ""
|
1283 |
|
1284 |
-
#: templates/account.php:
|
1285 |
msgid "Premium version"
|
1286 |
msgstr ""
|
1287 |
|
1288 |
-
#: templates/account.php:
|
1289 |
msgid "Free version"
|
1290 |
msgstr ""
|
1291 |
|
1292 |
-
#: templates/account.php:
|
1293 |
msgid "Verify Email"
|
1294 |
msgstr ""
|
1295 |
|
1296 |
-
#: templates/account.php:
|
1297 |
msgid "Download %s Version"
|
1298 |
msgstr ""
|
1299 |
|
1300 |
-
#: templates/account.php:
|
|
|
|
|
|
|
|
|
1301 |
msgctxt "verb"
|
1302 |
msgid "Show"
|
1303 |
msgstr ""
|
1304 |
|
1305 |
-
#: templates/account.php:
|
1306 |
msgid "What is your %s?"
|
1307 |
msgstr ""
|
1308 |
|
1309 |
-
#: templates/account.php:
|
1310 |
msgctxt "verb"
|
1311 |
msgid "Edit"
|
1312 |
msgstr ""
|
1313 |
|
1314 |
-
#: templates/account.php:
|
|
|
|
|
|
|
|
|
1315 |
msgid "Sites"
|
1316 |
msgstr ""
|
1317 |
|
1318 |
-
#: templates/account.php:
|
1319 |
msgid "Search by address"
|
1320 |
msgstr ""
|
1321 |
|
1322 |
-
#: templates/account.php:
|
1323 |
msgid "Address"
|
1324 |
msgstr ""
|
1325 |
|
1326 |
-
#: templates/account.php:
|
1327 |
msgid "License"
|
1328 |
msgstr ""
|
1329 |
|
1330 |
-
#: templates/account.php:
|
1331 |
msgid "Plan"
|
1332 |
msgstr ""
|
1333 |
|
1334 |
-
#: templates/account.php:
|
1335 |
msgctxt "as software license"
|
1336 |
msgid "License"
|
1337 |
msgstr ""
|
1338 |
|
1339 |
-
#: templates/account.php:
|
1340 |
msgctxt "verb"
|
1341 |
msgid "Hide"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
-
#: templates/account.php:
|
1345 |
msgid "Processing"
|
1346 |
msgstr ""
|
1347 |
|
1348 |
-
#: templates/account.php:
|
1349 |
msgid "Get updates for bleeding edge Beta versions of %s."
|
1350 |
msgstr ""
|
1351 |
|
1352 |
-
#: templates/account.php:
|
1353 |
msgid "Cancelling %s"
|
1354 |
msgstr ""
|
1355 |
|
1356 |
-
#: templates/account.php:
|
1357 |
msgid "trial"
|
1358 |
msgstr ""
|
1359 |
|
1360 |
-
#: templates/account.php:
|
1361 |
msgid "Cancelling %s..."
|
1362 |
msgstr ""
|
1363 |
|
1364 |
-
#: templates/account.php:
|
1365 |
msgid "subscription"
|
1366 |
msgstr ""
|
1367 |
|
1368 |
-
#: templates/account.php:
|
1369 |
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?"
|
1370 |
msgstr ""
|
1371 |
|
1372 |
-
#: templates/add-ons.php:
|
1373 |
msgid "View details"
|
1374 |
msgstr ""
|
1375 |
|
1376 |
-
#: templates/add-ons.php:
|
1377 |
msgid "Add Ons for %s"
|
1378 |
msgstr ""
|
1379 |
|
1380 |
-
#: templates/add-ons.php:
|
1381 |
-
msgid "We
|
1382 |
msgstr ""
|
1383 |
|
1384 |
-
#: templates/add-ons.php:
|
1385 |
msgctxt "active add-on"
|
1386 |
msgid "Active"
|
1387 |
msgstr ""
|
1388 |
|
1389 |
-
#: templates/add-ons.php:
|
1390 |
msgctxt "installed add-on"
|
1391 |
msgid "Installed"
|
1392 |
msgstr ""
|
1393 |
|
1394 |
-
#: templates/admin-notice.php:13, templates/forms/license-activation.php:
|
1395 |
msgctxt "as close a window"
|
1396 |
msgid "Dismiss"
|
1397 |
msgstr ""
|
@@ -1430,157 +1462,165 @@ msgctxt "greeting"
|
|
1430 |
msgid "Hey %s,"
|
1431 |
msgstr ""
|
1432 |
|
1433 |
-
#: templates/connect.php:
|
1434 |
msgid "Allow & Continue"
|
1435 |
msgstr ""
|
1436 |
|
1437 |
-
#: templates/connect.php:
|
1438 |
msgid "Re-send activation email"
|
1439 |
msgstr ""
|
1440 |
|
1441 |
-
#: templates/connect.php:
|
1442 |
msgid "Thanks %s!"
|
1443 |
msgstr ""
|
1444 |
|
1445 |
-
#: templates/connect.php:
|
1446 |
msgid "Agree & Activate License"
|
1447 |
msgstr ""
|
1448 |
|
1449 |
-
#: templates/connect.php:
|
1450 |
msgid "Thanks for purchasing %s! To get started, please enter your license key:"
|
1451 |
msgstr ""
|
1452 |
|
1453 |
-
#: templates/connect.php:
|
1454 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
|
1455 |
msgstr ""
|
1456 |
|
1457 |
-
#: templates/connect.php:
|
1458 |
msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
|
1459 |
msgstr ""
|
1460 |
|
1461 |
-
#: templates/connect.php:
|
1462 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1463 |
msgstr ""
|
1464 |
|
1465 |
-
#: templates/connect.php:
|
1466 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1467 |
msgstr ""
|
1468 |
|
1469 |
-
#: templates/connect.php:
|
1470 |
msgid "We're excited to introduce the Freemius network-level integration."
|
1471 |
msgstr ""
|
1472 |
|
1473 |
-
#: templates/connect.php:
|
1474 |
msgid "During the update process we detected %d site(s) that are still pending license activation."
|
1475 |
msgstr ""
|
1476 |
|
1477 |
-
#: templates/connect.php:
|
1478 |
msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
1479 |
msgstr ""
|
1480 |
|
1481 |
-
#: templates/connect.php:
|
1482 |
msgid "%s's paid features"
|
1483 |
msgstr ""
|
1484 |
|
1485 |
-
#: templates/connect.php:
|
1486 |
msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
1487 |
msgstr ""
|
1488 |
|
1489 |
-
#: templates/connect.php:
|
1490 |
msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
|
1491 |
msgstr ""
|
1492 |
|
1493 |
-
#: templates/connect.php:
|
1494 |
msgid "License key"
|
1495 |
msgstr ""
|
1496 |
|
1497 |
-
#: templates/connect.php:
|
1498 |
msgid "Can't find your license key?"
|
1499 |
msgstr ""
|
1500 |
|
1501 |
-
#: templates/connect.php:
|
1502 |
msgctxt "verb"
|
1503 |
msgid "Skip"
|
1504 |
msgstr ""
|
1505 |
|
1506 |
-
#: templates/connect.php:
|
1507 |
msgid "Delegate to Site Admins"
|
1508 |
msgstr ""
|
1509 |
|
1510 |
-
#: templates/connect.php:
|
1511 |
msgid "If you click it, this decision will be delegated to the sites administrators."
|
1512 |
msgstr ""
|
1513 |
|
1514 |
-
#: templates/connect.php:
|
1515 |
msgid "Your Profile Overview"
|
1516 |
msgstr ""
|
1517 |
|
1518 |
-
#: templates/connect.php:
|
1519 |
msgid "Name and email address"
|
1520 |
msgstr ""
|
1521 |
|
1522 |
-
#: templates/connect.php:
|
1523 |
msgid "Your Site Overview"
|
1524 |
msgstr ""
|
1525 |
|
1526 |
-
#: templates/connect.php:
|
1527 |
-
msgid "Site URL, WP version, PHP info
|
1528 |
msgstr ""
|
1529 |
|
1530 |
-
#: templates/connect.php:
|
1531 |
msgid "Admin Notices"
|
1532 |
msgstr ""
|
1533 |
|
1534 |
-
#: templates/connect.php:
|
1535 |
msgid "Updates, announcements, marketing, no spam"
|
1536 |
msgstr ""
|
1537 |
|
1538 |
-
#: templates/connect.php:
|
1539 |
msgid "Current %s Events"
|
1540 |
msgstr ""
|
1541 |
|
1542 |
-
#: templates/connect.php:
|
1543 |
msgid "Activation, deactivation and uninstall"
|
1544 |
msgstr ""
|
1545 |
|
1546 |
-
#: templates/connect.php:
|
1547 |
msgid "Newsletter"
|
1548 |
msgstr ""
|
1549 |
|
1550 |
-
#: templates/connect.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1551 |
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."
|
1552 |
msgstr ""
|
1553 |
|
1554 |
-
#: templates/connect.php:
|
1555 |
msgid "What permissions are being granted?"
|
1556 |
msgstr ""
|
1557 |
|
1558 |
-
#: templates/connect.php:
|
1559 |
msgid "Don't have a license key?"
|
1560 |
msgstr ""
|
1561 |
|
1562 |
-
#: templates/connect.php:
|
1563 |
msgid "Have a license key?"
|
1564 |
msgstr ""
|
1565 |
|
1566 |
-
#: templates/connect.php:
|
1567 |
msgid "Privacy Policy"
|
1568 |
msgstr ""
|
1569 |
|
1570 |
-
#: templates/connect.php:
|
1571 |
msgid "License Agreement"
|
1572 |
msgstr ""
|
1573 |
|
1574 |
-
#: templates/connect.php:
|
1575 |
msgid "Terms of Service"
|
1576 |
msgstr ""
|
1577 |
|
1578 |
-
#: templates/connect.php:
|
1579 |
msgctxt "as in the process of sending an email"
|
1580 |
msgid "Sending email"
|
1581 |
msgstr ""
|
1582 |
|
1583 |
-
#: templates/connect.php:
|
1584 |
msgctxt "as activating plugin"
|
1585 |
msgid "Activating"
|
1586 |
msgstr ""
|
@@ -1608,222 +1648,226 @@ msgctxt "as code debugging"
|
|
1608 |
msgid "Debugging"
|
1609 |
msgstr ""
|
1610 |
|
1611 |
-
#: templates/debug.php:
|
1612 |
msgid "Actions"
|
1613 |
msgstr ""
|
1614 |
|
1615 |
-
#: templates/debug.php:
|
1616 |
msgid "Are you sure you want to delete all Freemius data?"
|
1617 |
msgstr ""
|
1618 |
|
1619 |
-
#: templates/debug.php:
|
1620 |
msgid "Delete All Accounts"
|
1621 |
msgstr ""
|
1622 |
|
1623 |
-
#: templates/debug.php:
|
1624 |
msgid "Clear API Cache"
|
1625 |
msgstr ""
|
1626 |
|
1627 |
-
#: templates/debug.php:
|
1628 |
msgid "Clear Updates Transients"
|
1629 |
msgstr ""
|
1630 |
|
1631 |
-
#: templates/debug.php:
|
1632 |
msgid "Sync Data From Server"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
-
#: templates/debug.php:
|
1636 |
msgid "Migrate Options to Network"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
-
#: templates/debug.php:
|
1640 |
msgid "Load DB Option"
|
1641 |
msgstr ""
|
1642 |
|
1643 |
-
#: templates/debug.php:
|
1644 |
msgid "Set DB Option"
|
1645 |
msgstr ""
|
1646 |
|
1647 |
-
#: templates/debug.php:
|
1648 |
msgid "Key"
|
1649 |
msgstr ""
|
1650 |
|
1651 |
-
#: templates/debug.php:
|
1652 |
msgid "Value"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
-
#: templates/debug.php:
|
1656 |
msgctxt "as software development kit versions"
|
1657 |
msgid "SDK Versions"
|
1658 |
msgstr ""
|
1659 |
|
1660 |
-
#: templates/debug.php:
|
1661 |
msgid "SDK Path"
|
1662 |
msgstr ""
|
1663 |
|
1664 |
-
#: templates/debug.php:
|
1665 |
msgid "Module Path"
|
1666 |
msgstr ""
|
1667 |
|
1668 |
-
#: templates/debug.php:
|
1669 |
msgid "Is Active"
|
1670 |
msgstr ""
|
1671 |
|
1672 |
-
#: templates/debug.php:
|
1673 |
msgid "Plugins"
|
1674 |
msgstr ""
|
1675 |
|
1676 |
-
#: templates/debug.php:
|
1677 |
msgid "Themes"
|
1678 |
msgstr ""
|
1679 |
|
1680 |
-
#: templates/debug.php:
|
1681 |
msgid "Slug"
|
1682 |
msgstr ""
|
1683 |
|
1684 |
-
#: templates/debug.php:
|
1685 |
msgid "Title"
|
1686 |
msgstr ""
|
1687 |
|
1688 |
-
#: templates/debug.php:
|
1689 |
msgctxt "as application program interface"
|
1690 |
msgid "API"
|
1691 |
msgstr ""
|
1692 |
|
1693 |
-
#: templates/debug.php:
|
1694 |
msgid "Freemius State"
|
1695 |
msgstr ""
|
1696 |
|
1697 |
-
#: templates/debug.php:
|
1698 |
msgid "Network Blog"
|
1699 |
msgstr ""
|
1700 |
|
1701 |
-
#: templates/debug.php:
|
1702 |
msgid "Network User"
|
1703 |
msgstr ""
|
1704 |
|
1705 |
-
#: templates/debug.php:
|
1706 |
msgctxt "as connection was successful"
|
1707 |
msgid "Connected"
|
1708 |
msgstr ""
|
1709 |
|
1710 |
-
#: templates/debug.php:
|
1711 |
msgctxt "as connection blocked"
|
1712 |
msgid "Blocked"
|
1713 |
msgstr ""
|
1714 |
|
1715 |
-
#: templates/debug.php:
|
1716 |
msgid "Simulate Trial Promotion"
|
1717 |
msgstr ""
|
1718 |
|
1719 |
-
#: templates/debug.php:
|
1720 |
msgid "Simulate Network Upgrade"
|
1721 |
msgstr ""
|
1722 |
|
1723 |
-
#: templates/debug.php:
|
1724 |
msgid "%s Installs"
|
1725 |
msgstr ""
|
1726 |
|
1727 |
-
#: templates/debug.php:
|
1728 |
msgctxt "like websites"
|
1729 |
msgid "Sites"
|
1730 |
msgstr ""
|
1731 |
|
1732 |
-
#: templates/debug.php:
|
1733 |
msgid "Blog ID"
|
1734 |
msgstr ""
|
1735 |
|
1736 |
-
#: templates/debug.php:
|
|
|
|
|
|
|
|
|
1737 |
msgctxt "verb"
|
1738 |
msgid "Delete"
|
1739 |
msgstr ""
|
1740 |
|
1741 |
-
#: templates/debug.php:
|
1742 |
msgid "Add Ons of module %s"
|
1743 |
msgstr ""
|
1744 |
|
1745 |
-
#: templates/debug.php:
|
1746 |
msgid "Users"
|
1747 |
msgstr ""
|
1748 |
|
1749 |
-
#: templates/debug.php:
|
1750 |
msgid "Verified"
|
1751 |
msgstr ""
|
1752 |
|
1753 |
-
#: templates/debug.php:
|
1754 |
msgid "%s Licenses"
|
1755 |
msgstr ""
|
1756 |
|
1757 |
-
#: templates/debug.php:
|
1758 |
msgid "Plugin ID"
|
1759 |
msgstr ""
|
1760 |
|
1761 |
-
#: templates/debug.php:
|
1762 |
msgid "Plan ID"
|
1763 |
msgstr ""
|
1764 |
|
1765 |
-
#: templates/debug.php:
|
1766 |
msgid "Quota"
|
1767 |
msgstr ""
|
1768 |
|
1769 |
-
#: templates/debug.php:
|
1770 |
msgid "Activated"
|
1771 |
msgstr ""
|
1772 |
|
1773 |
-
#: templates/debug.php:
|
1774 |
msgid "Blocking"
|
1775 |
msgstr ""
|
1776 |
|
1777 |
-
#: templates/debug.php:
|
|
|
|
|
|
|
|
|
1778 |
msgctxt "as expiration date"
|
1779 |
msgid "Expiration"
|
1780 |
msgstr ""
|
1781 |
|
1782 |
-
#: templates/debug.php:
|
1783 |
msgid "Debug Log"
|
1784 |
msgstr ""
|
1785 |
|
1786 |
-
#: templates/debug.php:
|
1787 |
msgid "All Types"
|
1788 |
msgstr ""
|
1789 |
|
1790 |
-
#: templates/debug.php:
|
1791 |
msgid "All Requests"
|
1792 |
msgstr ""
|
1793 |
|
1794 |
-
#: templates/debug.php:
|
1795 |
msgid "File"
|
1796 |
msgstr ""
|
1797 |
|
1798 |
-
#: templates/debug.php:
|
1799 |
msgid "Function"
|
1800 |
msgstr ""
|
1801 |
|
1802 |
-
#: templates/debug.php:
|
1803 |
msgid "Process ID"
|
1804 |
msgstr ""
|
1805 |
|
1806 |
-
#: templates/debug.php:
|
1807 |
msgid "Logger"
|
1808 |
msgstr ""
|
1809 |
|
1810 |
-
#: templates/debug.php:
|
1811 |
msgid "Message"
|
1812 |
msgstr ""
|
1813 |
|
1814 |
-
#: templates/debug.php:
|
1815 |
msgid "Filter"
|
1816 |
msgstr ""
|
1817 |
|
1818 |
-
#: templates/debug.php:
|
1819 |
msgid "Download"
|
1820 |
msgstr ""
|
1821 |
|
1822 |
-
#: templates/debug.php:
|
1823 |
-
msgid "Type"
|
1824 |
-
msgstr ""
|
1825 |
-
|
1826 |
-
#: templates/debug.php:603, templates/debug/logger.php:26
|
1827 |
msgid "Timestamp"
|
1828 |
msgstr ""
|
1829 |
|
@@ -2141,14 +2185,34 @@ msgstr ""
|
|
2141 |
msgid "Become an affiliate"
|
2142 |
msgstr ""
|
2143 |
|
2144 |
-
#: templates/forms/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2145 |
msgid "Please enter the license key that you received in the email right after the purchase:"
|
2146 |
msgstr ""
|
2147 |
|
2148 |
-
#: templates/forms/license-activation.php:
|
2149 |
msgid "Update License"
|
2150 |
msgstr ""
|
2151 |
|
|
|
|
|
|
|
|
|
2152 |
#: templates/forms/optout.php:30
|
2153 |
msgctxt "verb"
|
2154 |
msgid "Opt Out"
|
@@ -2159,14 +2223,42 @@ msgctxt "verb"
|
|
2159 |
msgid "Opt In"
|
2160 |
msgstr ""
|
2161 |
|
2162 |
-
#: templates/forms/optout.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2163 |
msgid "Usage tracking is done in the name of making %s better. Making a better user experience, prioritizing new features, and more good things. We'd really appreciate if you'll reconsider letting us continue with the tracking."
|
2164 |
msgstr ""
|
2165 |
|
2166 |
-
#: templates/forms/optout.php:
|
|
|
|
|
|
|
|
|
2167 |
msgid "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
|
2168 |
msgstr ""
|
2169 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2170 |
#: templates/forms/premium-versions-upgrade-handler.php:40
|
2171 |
msgid "There is a new version of %s available."
|
2172 |
msgstr ""
|
@@ -2212,11 +2304,6 @@ msgstr ""
|
|
2212 |
msgid "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
|
2213 |
msgstr ""
|
2214 |
|
2215 |
-
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
|
2216 |
-
#: templates/forms/subscription-cancellation.php:99, templates/account/partials/addon.php:29, templates/account/partials/site.php:298
|
2217 |
-
msgid "%1$s will immediately stop all future recurring payments and your %s plan license will expire in %s."
|
2218 |
-
msgstr ""
|
2219 |
-
|
2220 |
#: templates/forms/subscription-cancellation.php:103
|
2221 |
msgid "Once your license expires you will no longer be able to use the %s, unless you activate it again with a valid premium license."
|
2222 |
msgstr ""
|
@@ -2241,6 +2328,23 @@ msgstr ""
|
|
2241 |
msgid "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."
|
2242 |
msgstr ""
|
2243 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2244 |
#: templates/js/style-premium-theme.php:39
|
2245 |
msgid "Premium"
|
2246 |
msgstr ""
|
@@ -2298,27 +2402,32 @@ msgstr ""
|
|
2298 |
msgid "Last license"
|
2299 |
msgstr ""
|
2300 |
|
2301 |
-
|
|
|
|
|
|
|
|
|
|
|
2302 |
msgid "Cancelled"
|
2303 |
msgstr ""
|
2304 |
|
2305 |
-
#: templates/account/partials/addon.php:
|
2306 |
msgid "No expiration"
|
2307 |
msgstr ""
|
2308 |
|
2309 |
-
#: templates/account/partials/site.php:
|
2310 |
msgid "Owner Name"
|
2311 |
msgstr ""
|
2312 |
|
2313 |
-
#: templates/account/partials/site.php:
|
2314 |
msgid "Owner Email"
|
2315 |
msgstr ""
|
2316 |
|
2317 |
-
#: templates/account/partials/site.php:
|
2318 |
msgid "Owner ID"
|
2319 |
msgstr ""
|
2320 |
|
2321 |
-
#: templates/account/partials/site.php:
|
2322 |
msgid "Subscription"
|
2323 |
msgstr ""
|
2324 |
|
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 "←"
|
356 |
msgstr ""
|
357 |
|
358 |
+
#: includes/class-freemius.php:17799
|
359 |
msgctxt "ASCII arrow right icon"
|
360 |
msgid "➤"
|
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 |
|
787 |
+
#: includes/class-fs-plugin-updater.php:206, templates/forms/premium-versions-upgrade-handler.php:57
|
788 |
msgid "Renew license"
|
789 |
msgstr ""
|
790 |
|
791 |
+
#: includes/class-fs-plugin-updater.php:211, templates/forms/premium-versions-upgrade-handler.php:58
|
792 |
msgid "Buy license"
|
793 |
msgstr ""
|
794 |
|
795 |
+
#: includes/class-fs-plugin-updater.php:327, includes/class-fs-plugin-updater.php:360
|
796 |
msgid "There is a %s of %s available."
|
797 |
msgstr ""
|
798 |
|
799 |
+
#: includes/class-fs-plugin-updater.php:329, includes/class-fs-plugin-updater.php:365
|
800 |
msgid "new Beta version"
|
801 |
msgstr ""
|
802 |
|
803 |
+
#: includes/class-fs-plugin-updater.php:330, includes/class-fs-plugin-updater.php:366
|
804 |
msgid "new version"
|
805 |
msgstr ""
|
806 |
|
807 |
+
#: includes/class-fs-plugin-updater.php:389
|
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 |
|
1122 |
+
#: templates/account.php:100, templates/forms/subscription-cancellation.php:96, templates/account/partials/addon.php:26, templates/account/partials/site.php:311
|
1123 |
msgid "Downgrading your plan"
|
1124 |
msgstr ""
|
1125 |
|
1126 |
+
#: templates/account.php:101, templates/forms/subscription-cancellation.php:97, templates/account/partials/addon.php:27, templates/account/partials/site.php:312
|
1127 |
msgid "Cancelling the subscription"
|
1128 |
msgstr ""
|
1129 |
|
1130 |
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
|
1131 |
+
#: templates/account.php:103, templates/forms/subscription-cancellation.php:99, templates/account/partials/site.php:314
|
1132 |
msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
|
1133 |
msgstr ""
|
1134 |
|
1135 |
+
#: templates/account.php:104, templates/forms/subscription-cancellation.php:100, templates/account/partials/addon.php:30, templates/account/partials/site.php:315
|
1136 |
msgid "Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price."
|
1137 |
msgstr ""
|
1138 |
|
1139 |
+
#: templates/account.php:105, templates/forms/subscription-cancellation.php:106, templates/account/partials/addon.php:31
|
1140 |
msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
|
1141 |
msgstr ""
|
1142 |
|
1143 |
+
#: templates/account.php:106, templates/forms/subscription-cancellation.php:101, templates/account/partials/addon.php:32, templates/account/partials/site.php:316
|
1144 |
msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
1145 |
msgstr ""
|
1146 |
|
1147 |
+
#: templates/account.php:107, templates/forms/subscription-cancellation.php:102, templates/account/partials/addon.php:33, templates/account/partials/site.php:317
|
1148 |
msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
1149 |
msgstr ""
|
1150 |
|
1151 |
#. translators: %s: Plan title (e.g. "Professional")
|
1152 |
+
#: templates/account.php:109, templates/account/partials/activate-license-button.php:31, templates/account/partials/addon.php:35
|
1153 |
msgid "Activate %s Plan"
|
1154 |
msgstr ""
|
1155 |
|
1156 |
#. translators: %s: Time period (e.g. Auto renews in "2 months")
|
1157 |
+
#: templates/account.php:112, templates/account/partials/addon.php:38, templates/account/partials/site.php:291
|
1158 |
msgid "Auto renews in %s"
|
1159 |
msgstr ""
|
1160 |
|
1161 |
#. translators: %s: Time period (e.g. Expires in "2 months")
|
1162 |
+
#: templates/account.php:114, templates/account/partials/addon.php:40, templates/account/partials/site.php:293
|
1163 |
msgid "Expires in %s"
|
1164 |
msgstr ""
|
1165 |
|
1166 |
+
#: templates/account.php:115
|
1167 |
msgctxt "as synchronize license"
|
1168 |
msgid "Sync License"
|
1169 |
msgstr ""
|
1170 |
|
1171 |
+
#: templates/account.php:116, templates/account/partials/addon.php:41
|
1172 |
msgid "Cancel Trial"
|
1173 |
msgstr ""
|
1174 |
|
1175 |
+
#: templates/account.php:117, templates/account/partials/addon.php:42
|
1176 |
msgid "Change Plan"
|
1177 |
msgstr ""
|
1178 |
|
1179 |
+
#: templates/account.php:118, templates/account/partials/addon.php:43
|
1180 |
msgctxt "verb"
|
1181 |
msgid "Upgrade"
|
1182 |
msgstr ""
|
1183 |
|
1184 |
+
#: templates/account.php:120, templates/account/partials/addon.php:45, templates/account/partials/site.php:318
|
1185 |
msgctxt "verb"
|
1186 |
msgid "Downgrade"
|
1187 |
msgstr ""
|
1188 |
|
1189 |
+
#: templates/account.php:122, templates/add-ons.php:246, templates/plugin-info/features.php:72, templates/account/partials/addon.php:47, templates/account/partials/site.php:33
|
1190 |
msgid "Free"
|
1191 |
msgstr ""
|
1192 |
|
1193 |
+
#: templates/account.php:124, templates/debug.php:371, includes/customizer/class-fs-customizer-upsell-control.php:110, templates/account/partials/addon.php:49
|
1194 |
msgctxt "as product pricing plan"
|
1195 |
msgid "Plan"
|
1196 |
msgstr ""
|
1197 |
|
1198 |
+
#: templates/account.php:125
|
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 ""
|
1407 |
|
1408 |
+
#: templates/add-ons.php:48
|
1409 |
msgid "Add Ons for %s"
|
1410 |
msgstr ""
|
1411 |
|
1412 |
+
#: templates/add-ons.php:58
|
1413 |
+
msgid "We couldn't load the add-ons list. It's probably an issue on our side, please try to come back in few minutes."
|
1414 |
msgstr ""
|
1415 |
|
1416 |
+
#: templates/add-ons.php:229
|
1417 |
msgctxt "active add-on"
|
1418 |
msgid "Active"
|
1419 |
msgstr ""
|
1420 |
|
1421 |
+
#: templates/add-ons.php:230
|
1422 |
msgctxt "installed add-on"
|
1423 |
msgid "Installed"
|
1424 |
msgstr ""
|
1425 |
|
1426 |
+
#: templates/admin-notice.php:13, templates/forms/license-activation.php:220, templates/forms/resend-key.php:77
|
1427 |
msgctxt "as close a window"
|
1428 |
msgid "Dismiss"
|
1429 |
msgstr ""
|
1462 |
msgid "Hey %s,"
|
1463 |
msgstr ""
|
1464 |
|
1465 |
+
#: templates/connect.php:162
|
1466 |
msgid "Allow & Continue"
|
1467 |
msgstr ""
|
1468 |
|
1469 |
+
#: templates/connect.php:166
|
1470 |
msgid "Re-send activation email"
|
1471 |
msgstr ""
|
1472 |
|
1473 |
+
#: templates/connect.php:170
|
1474 |
msgid "Thanks %s!"
|
1475 |
msgstr ""
|
1476 |
|
1477 |
+
#: templates/connect.php:180, templates/forms/license-activation.php:46
|
1478 |
msgid "Agree & Activate License"
|
1479 |
msgstr ""
|
1480 |
|
1481 |
+
#: templates/connect.php:189
|
1482 |
msgid "Thanks for purchasing %s! To get started, please enter your license key:"
|
1483 |
msgstr ""
|
1484 |
|
1485 |
+
#: templates/connect.php:196
|
1486 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
|
1487 |
msgstr ""
|
1488 |
|
1489 |
+
#: templates/connect.php:197
|
1490 |
msgid "Never miss an important update - opt in to our security and feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
|
1491 |
msgstr ""
|
1492 |
|
1493 |
+
#: templates/connect.php:203
|
1494 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1495 |
msgstr ""
|
1496 |
|
1497 |
+
#: templates/connect.php:204
|
1498 |
msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s. If you skip this, that's okay! %1$s will still work just fine."
|
1499 |
msgstr ""
|
1500 |
|
1501 |
+
#: templates/connect.php:238
|
1502 |
msgid "We're excited to introduce the Freemius network-level integration."
|
1503 |
msgstr ""
|
1504 |
|
1505 |
+
#: templates/connect.php:241
|
1506 |
msgid "During the update process we detected %d site(s) that are still pending license activation."
|
1507 |
msgstr ""
|
1508 |
|
1509 |
+
#: templates/connect.php:243
|
1510 |
msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
1511 |
msgstr ""
|
1512 |
|
1513 |
+
#: templates/connect.php:245
|
1514 |
msgid "%s's paid features"
|
1515 |
msgstr ""
|
1516 |
|
1517 |
+
#: templates/connect.php:250
|
1518 |
msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
1519 |
msgstr ""
|
1520 |
|
1521 |
+
#: templates/connect.php:252
|
1522 |
msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
|
1523 |
msgstr ""
|
1524 |
|
1525 |
+
#: templates/connect.php:261, templates/forms/data-debug-mode.php:35, templates/forms/license-activation.php:49
|
1526 |
msgid "License key"
|
1527 |
msgstr ""
|
1528 |
|
1529 |
+
#: templates/connect.php:264, templates/forms/license-activation.php:22
|
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 ""
|
1537 |
|
1538 |
+
#: templates/connect.php:326
|
1539 |
msgid "Delegate to Site Admins"
|
1540 |
msgstr ""
|
1541 |
|
1542 |
+
#: templates/connect.php:326
|
1543 |
msgid "If you click it, this decision will be delegated to the sites administrators."
|
1544 |
msgstr ""
|
1545 |
|
1546 |
+
#: templates/connect.php:364
|
1547 |
msgid "Your Profile Overview"
|
1548 |
msgstr ""
|
1549 |
|
1550 |
+
#: templates/connect.php:365
|
1551 |
msgid "Name and email address"
|
1552 |
msgstr ""
|
1553 |
|
1554 |
+
#: templates/connect.php:372
|
1555 |
msgid "Your Site Overview"
|
1556 |
msgstr ""
|
1557 |
|
1558 |
+
#: templates/connect.php:373
|
1559 |
+
msgid "Site URL, WP version, PHP info"
|
1560 |
msgstr ""
|
1561 |
|
1562 |
+
#: templates/connect.php:379
|
1563 |
msgid "Admin Notices"
|
1564 |
msgstr ""
|
1565 |
|
1566 |
+
#: templates/connect.php:380, templates/connect.php:396
|
1567 |
msgid "Updates, announcements, marketing, no spam"
|
1568 |
msgstr ""
|
1569 |
|
1570 |
+
#: templates/connect.php:386
|
1571 |
msgid "Current %s Events"
|
1572 |
msgstr ""
|
1573 |
|
1574 |
+
#: templates/connect.php:387
|
1575 |
msgid "Activation, deactivation and uninstall"
|
1576 |
msgstr ""
|
1577 |
|
1578 |
+
#: templates/connect.php:395
|
1579 |
msgid "Newsletter"
|
1580 |
msgstr ""
|
1581 |
|
1582 |
+
#: templates/connect.php:403
|
1583 |
+
msgid "Plugins & Themes"
|
1584 |
+
msgstr ""
|
1585 |
+
|
1586 |
+
#: templates/connect.php:404
|
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 ""
|
1648 |
msgid "Debugging"
|
1649 |
msgstr ""
|
1650 |
|
1651 |
+
#: templates/debug.php:52, templates/debug.php:248, templates/debug.php:374, templates/debug.php:510
|
1652 |
msgid "Actions"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
+
#: templates/debug.php:62
|
1656 |
msgid "Are you sure you want to delete all Freemius data?"
|
1657 |
msgstr ""
|
1658 |
|
1659 |
+
#: templates/debug.php:62
|
1660 |
msgid "Delete All Accounts"
|
1661 |
msgstr ""
|
1662 |
|
1663 |
+
#: templates/debug.php:69
|
1664 |
msgid "Clear API Cache"
|
1665 |
msgstr ""
|
1666 |
|
1667 |
+
#: templates/debug.php:77
|
1668 |
msgid "Clear Updates Transients"
|
1669 |
msgstr ""
|
1670 |
|
1671 |
+
#: templates/debug.php:84
|
1672 |
msgid "Sync Data From Server"
|
1673 |
msgstr ""
|
1674 |
|
1675 |
+
#: templates/debug.php:93
|
1676 |
msgid "Migrate Options to Network"
|
1677 |
msgstr ""
|
1678 |
|
1679 |
+
#: templates/debug.php:98
|
1680 |
msgid "Load DB Option"
|
1681 |
msgstr ""
|
1682 |
|
1683 |
+
#: templates/debug.php:101
|
1684 |
msgid "Set DB Option"
|
1685 |
msgstr ""
|
1686 |
|
1687 |
+
#: templates/debug.php:180
|
1688 |
msgid "Key"
|
1689 |
msgstr ""
|
1690 |
|
1691 |
+
#: templates/debug.php:181
|
1692 |
msgid "Value"
|
1693 |
msgstr ""
|
1694 |
|
1695 |
+
#: templates/debug.php:197
|
1696 |
msgctxt "as software development kit versions"
|
1697 |
msgid "SDK Versions"
|
1698 |
msgstr ""
|
1699 |
|
1700 |
+
#: templates/debug.php:202
|
1701 |
msgid "SDK Path"
|
1702 |
msgstr ""
|
1703 |
|
1704 |
+
#: templates/debug.php:203, templates/debug.php:242
|
1705 |
msgid "Module Path"
|
1706 |
msgstr ""
|
1707 |
|
1708 |
+
#: templates/debug.php:204
|
1709 |
msgid "Is Active"
|
1710 |
msgstr ""
|
1711 |
|
1712 |
+
#: templates/debug.php:232, templates/debug/plugins-themes-sync.php:35
|
1713 |
msgid "Plugins"
|
1714 |
msgstr ""
|
1715 |
|
1716 |
+
#: templates/debug.php:232, templates/debug/plugins-themes-sync.php:56
|
1717 |
msgid "Themes"
|
1718 |
msgstr ""
|
1719 |
|
1720 |
+
#: templates/debug.php:237, templates/debug.php:368, templates/debug.php:454, templates/debug/scheduled-crons.php:80
|
1721 |
msgid "Slug"
|
1722 |
msgstr ""
|
1723 |
|
1724 |
+
#: templates/debug.php:239, templates/debug.php:453
|
1725 |
msgid "Title"
|
1726 |
msgstr ""
|
1727 |
|
1728 |
+
#: templates/debug.php:240
|
1729 |
msgctxt "as application program interface"
|
1730 |
msgid "API"
|
1731 |
msgstr ""
|
1732 |
|
1733 |
+
#: templates/debug.php:241
|
1734 |
msgid "Freemius State"
|
1735 |
msgstr ""
|
1736 |
|
1737 |
+
#: templates/debug.php:245
|
1738 |
msgid "Network Blog"
|
1739 |
msgstr ""
|
1740 |
|
1741 |
+
#: templates/debug.php:246
|
1742 |
msgid "Network User"
|
1743 |
msgstr ""
|
1744 |
|
1745 |
+
#: templates/debug.php:283
|
1746 |
msgctxt "as connection was successful"
|
1747 |
msgid "Connected"
|
1748 |
msgstr ""
|
1749 |
|
1750 |
+
#: templates/debug.php:284
|
1751 |
msgctxt "as connection blocked"
|
1752 |
msgid "Blocked"
|
1753 |
msgstr ""
|
1754 |
|
1755 |
+
#: templates/debug.php:320
|
1756 |
msgid "Simulate Trial Promotion"
|
1757 |
msgstr ""
|
1758 |
|
1759 |
+
#: templates/debug.php:332
|
1760 |
msgid "Simulate Network Upgrade"
|
1761 |
msgstr ""
|
1762 |
|
1763 |
+
#: templates/debug.php:357
|
1764 |
msgid "%s Installs"
|
1765 |
msgstr ""
|
1766 |
|
1767 |
+
#: templates/debug.php:359
|
1768 |
msgctxt "like websites"
|
1769 |
msgid "Sites"
|
1770 |
msgstr ""
|
1771 |
|
1772 |
+
#: templates/debug.php:365, templates/account/partials/site.php:156
|
1773 |
msgid "Blog ID"
|
1774 |
msgstr ""
|
1775 |
|
1776 |
+
#: templates/debug.php:370
|
1777 |
+
msgid "License ID"
|
1778 |
+
msgstr ""
|
1779 |
+
|
1780 |
+
#: templates/debug.php:434, templates/debug.php:533, templates/account/partials/addon.php:435
|
1781 |
msgctxt "verb"
|
1782 |
msgid "Delete"
|
1783 |
msgstr ""
|
1784 |
|
1785 |
+
#: templates/debug.php:448
|
1786 |
msgid "Add Ons of module %s"
|
1787 |
msgstr ""
|
1788 |
|
1789 |
+
#: templates/debug.php:500
|
1790 |
msgid "Users"
|
1791 |
msgstr ""
|
1792 |
|
1793 |
+
#: templates/debug.php:507
|
1794 |
msgid "Verified"
|
1795 |
msgstr ""
|
1796 |
|
1797 |
+
#: templates/debug.php:549
|
1798 |
msgid "%s Licenses"
|
1799 |
msgstr ""
|
1800 |
|
1801 |
+
#: templates/debug.php:554
|
1802 |
msgid "Plugin ID"
|
1803 |
msgstr ""
|
1804 |
|
1805 |
+
#: templates/debug.php:556
|
1806 |
msgid "Plan ID"
|
1807 |
msgstr ""
|
1808 |
|
1809 |
+
#: templates/debug.php:557
|
1810 |
msgid "Quota"
|
1811 |
msgstr ""
|
1812 |
|
1813 |
+
#: templates/debug.php:558
|
1814 |
msgid "Activated"
|
1815 |
msgstr ""
|
1816 |
|
1817 |
+
#: templates/debug.php:559
|
1818 |
msgid "Blocking"
|
1819 |
msgstr ""
|
1820 |
|
1821 |
+
#: templates/debug.php:560, templates/debug.php:631, templates/debug/logger.php:22
|
1822 |
+
msgid "Type"
|
1823 |
+
msgstr ""
|
1824 |
+
|
1825 |
+
#: templates/debug.php:562
|
1826 |
msgctxt "as expiration date"
|
1827 |
msgid "Expiration"
|
1828 |
msgstr ""
|
1829 |
|
1830 |
+
#: templates/debug.php:590
|
1831 |
msgid "Debug Log"
|
1832 |
msgstr ""
|
1833 |
|
1834 |
+
#: templates/debug.php:594
|
1835 |
msgid "All Types"
|
1836 |
msgstr ""
|
1837 |
|
1838 |
+
#: templates/debug.php:601
|
1839 |
msgid "All Requests"
|
1840 |
msgstr ""
|
1841 |
|
1842 |
+
#: templates/debug.php:606, templates/debug.php:635, templates/debug/logger.php:25
|
1843 |
msgid "File"
|
1844 |
msgstr ""
|
1845 |
|
1846 |
+
#: templates/debug.php:607, templates/debug.php:633, templates/debug/logger.php:23
|
1847 |
msgid "Function"
|
1848 |
msgstr ""
|
1849 |
|
1850 |
+
#: templates/debug.php:608
|
1851 |
msgid "Process ID"
|
1852 |
msgstr ""
|
1853 |
|
1854 |
+
#: templates/debug.php:609
|
1855 |
msgid "Logger"
|
1856 |
msgstr ""
|
1857 |
|
1858 |
+
#: templates/debug.php:610, templates/debug.php:634, templates/debug/logger.php:24
|
1859 |
msgid "Message"
|
1860 |
msgstr ""
|
1861 |
|
1862 |
+
#: templates/debug.php:612
|
1863 |
msgid "Filter"
|
1864 |
msgstr ""
|
1865 |
|
1866 |
+
#: templates/debug.php:620
|
1867 |
msgid "Download"
|
1868 |
msgstr ""
|
1869 |
|
1870 |
+
#: templates/debug.php:636, templates/debug/logger.php:26
|
|
|
|
|
|
|
|
|
1871 |
msgid "Timestamp"
|
1872 |
msgstr ""
|
1873 |
|
2185 |
msgid "Become an affiliate"
|
2186 |
msgstr ""
|
2187 |
|
2188 |
+
#: templates/forms/data-debug-mode.php:25
|
2189 |
+
msgid "Please enter the license key to enable the debug mode:"
|
2190 |
+
msgstr ""
|
2191 |
+
|
2192 |
+
#: templates/forms/data-debug-mode.php:27
|
2193 |
+
msgid "To enter the debug mode, please enter the secret key of the license owner (UserID = %d), which you can find in your \"My Profile\" section of your User Dashboard:"
|
2194 |
+
msgstr ""
|
2195 |
+
|
2196 |
+
#: templates/forms/data-debug-mode.php:32
|
2197 |
+
msgid "Submit"
|
2198 |
+
msgstr ""
|
2199 |
+
|
2200 |
+
#: templates/forms/data-debug-mode.php:36
|
2201 |
+
msgid "User key"
|
2202 |
+
msgstr ""
|
2203 |
+
|
2204 |
+
#: templates/forms/license-activation.php:23
|
2205 |
msgid "Please enter the license key that you received in the email right after the purchase:"
|
2206 |
msgstr ""
|
2207 |
|
2208 |
+
#: templates/forms/license-activation.php:28
|
2209 |
msgid "Update License"
|
2210 |
msgstr ""
|
2211 |
|
2212 |
+
#: templates/forms/license-activation.php:181
|
2213 |
+
msgid "Associate with the license owner's account."
|
2214 |
+
msgstr ""
|
2215 |
+
|
2216 |
#: templates/forms/optout.php:30
|
2217 |
msgctxt "verb"
|
2218 |
msgid "Opt Out"
|
2223 |
msgid "Opt In"
|
2224 |
msgstr ""
|
2225 |
|
2226 |
+
#: templates/forms/optout.php:34
|
2227 |
+
msgid "Connectivity to the licensing engine was successfully re-established. Automatic security & feature updates are now available through the WP Admin Dashboard."
|
2228 |
+
msgstr ""
|
2229 |
+
|
2230 |
+
#: templates/forms/optout.php:36
|
2231 |
+
msgid "Warning: Opting out will block automatic updates"
|
2232 |
+
msgstr ""
|
2233 |
+
|
2234 |
+
#: templates/forms/optout.php:37
|
2235 |
+
msgid "Ongoing connectivity with the licensing engine is essential for receiving automatic security & feature updates of the paid product. To receive these updates, data like your license key, %1$s version, and WordPress version, is periodically sent to the server to check for updates. By opting out, you understand that your site won't receive automatic updates for %2$s from within the WP Admin Dashboard. This can put your site at risk, and we highly recommend to keep this connection active. If you do choose to opt-out, you'll need to check for %1$s updates and install them manually."
|
2236 |
+
msgstr ""
|
2237 |
+
|
2238 |
+
#: templates/forms/optout.php:39
|
2239 |
+
msgid "I'd like to keep automatic updates"
|
2240 |
+
msgstr ""
|
2241 |
+
|
2242 |
+
#: templates/forms/optout.php:44
|
2243 |
msgid "Usage tracking is done in the name of making %s better. Making a better user experience, prioritizing new features, and more good things. We'd really appreciate if you'll reconsider letting us continue with the tracking."
|
2244 |
msgstr ""
|
2245 |
|
2246 |
+
#: templates/forms/optout.php:45
|
2247 |
+
msgid "On second thought - I want to continue helping"
|
2248 |
+
msgstr ""
|
2249 |
+
|
2250 |
+
#: templates/forms/optout.php:49
|
2251 |
msgid "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
|
2252 |
msgstr ""
|
2253 |
|
2254 |
+
#: templates/forms/optout.php:74
|
2255 |
+
msgid "Plugins & themes tracking"
|
2256 |
+
msgstr ""
|
2257 |
+
|
2258 |
+
#: templates/forms/optout.php:256
|
2259 |
+
msgid "Saved"
|
2260 |
+
msgstr ""
|
2261 |
+
|
2262 |
#: templates/forms/premium-versions-upgrade-handler.php:40
|
2263 |
msgid "There is a new version of %s available."
|
2264 |
msgstr ""
|
2304 |
msgid "Don't cancel %s - I'm still interested in getting security & feature updates, as well as be able to contact support."
|
2305 |
msgstr ""
|
2306 |
|
|
|
|
|
|
|
|
|
|
|
2307 |
#: templates/forms/subscription-cancellation.php:103
|
2308 |
msgid "Once your license expires you will no longer be able to use the %s, unless you activate it again with a valid premium license."
|
2309 |
msgstr ""
|
2328 |
msgid "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."
|
2329 |
msgstr ""
|
2330 |
|
2331 |
+
#: templates/forms/user-change.php:26
|
2332 |
+
msgid "By changing the user, you agree to transfer the account ownership to:"
|
2333 |
+
msgstr ""
|
2334 |
+
|
2335 |
+
#: templates/forms/user-change.php:28
|
2336 |
+
msgid "I Agree - Change User"
|
2337 |
+
msgstr ""
|
2338 |
+
|
2339 |
+
#: templates/forms/user-change.php:30
|
2340 |
+
msgid "Enter email address"
|
2341 |
+
msgstr ""
|
2342 |
+
|
2343 |
+
#: templates/forms/user-change.php:81
|
2344 |
+
msgctxt "close window"
|
2345 |
+
msgid "Dismiss"
|
2346 |
+
msgstr ""
|
2347 |
+
|
2348 |
#: templates/js/style-premium-theme.php:39
|
2349 |
msgid "Premium"
|
2350 |
msgstr ""
|
2402 |
msgid "Last license"
|
2403 |
msgstr ""
|
2404 |
|
2405 |
+
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
|
2406 |
+
#: templates/account/partials/addon.php:29
|
2407 |
+
msgid "%1$s will immediately stop all future recurring payments and your %s plan license will expire in %s."
|
2408 |
+
msgstr ""
|
2409 |
+
|
2410 |
+
#: templates/account/partials/addon.php:185
|
2411 |
msgid "Cancelled"
|
2412 |
msgstr ""
|
2413 |
|
2414 |
+
#: templates/account/partials/addon.php:195
|
2415 |
msgid "No expiration"
|
2416 |
msgstr ""
|
2417 |
|
2418 |
+
#: templates/account/partials/site.php:189
|
2419 |
msgid "Owner Name"
|
2420 |
msgstr ""
|
2421 |
|
2422 |
+
#: templates/account/partials/site.php:201
|
2423 |
msgid "Owner Email"
|
2424 |
msgstr ""
|
2425 |
|
2426 |
+
#: templates/account/partials/site.php:213
|
2427 |
msgid "Owner ID"
|
2428 |
msgstr ""
|
2429 |
|
2430 |
+
#: templates/account/partials/site.php:286
|
2431 |
msgid "Subscription"
|
2432 |
msgstr ""
|
2433 |
|
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.
|
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.3.2",
|
8 |
"main": "gulpfile.js",
|
9 |
"dependencies": {},
|
10 |
"scripts": {
|
common/vendor/freemius/start.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
-
$this_sdk_version = '2.3.
|
19 |
|
20 |
#region SDK Selection Logic --------------------------------------------------------------------
|
21 |
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
+
$this_sdk_version = '2.3.2';
|
19 |
|
20 |
#region SDK Selection Logic --------------------------------------------------------------------
|
21 |
|
common/vendor/freemius/templates/account.php
CHANGED
@@ -44,20 +44,34 @@
|
|
44 |
$site = $fs->get_site();
|
45 |
$name = $user->get_name();
|
46 |
$license = $fs->_get_license();
|
|
|
|
|
47 |
$subscription = ( is_object( $license ) ?
|
48 |
$fs->_get_subscription( $license->id ) :
|
49 |
null );
|
50 |
$plan = $fs->get_plan();
|
51 |
$is_active_subscription = ( is_object( $subscription ) && $subscription->is_active() );
|
52 |
$is_paid_trial = $fs->is_paid_trial();
|
53 |
-
$has_paid_plan = $fs->has_paid_plan();
|
54 |
-
$show_upgrade = ( $has_paid_plan && ! $is_paying && ! $is_paid_trial );
|
55 |
$trial_plan = $fs->get_trial_plan();
|
56 |
|
57 |
if ( $has_paid_plan ) {
|
58 |
$fs->_add_license_activation_dialog_box();
|
59 |
}
|
60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
if ( fs_request_get_bool( 'auto_install' ) ) {
|
62 |
$fs->_add_auto_installation_dialog_box();
|
63 |
}
|
@@ -72,7 +86,7 @@
|
|
72 |
|
73 |
$payments = $fs->_fetch_payments();
|
74 |
|
75 |
-
|
76 |
|
77 |
|
78 |
$has_tabs = $fs->_add_tabs_before_content();
|
@@ -196,89 +210,102 @@
|
|
196 |
<h3><span class="dashicons dashicons-businessman"></span> <?php fs_esc_html_echo_inline( 'Account Details', 'account-details', $slug ) ?></h3>
|
197 |
<div class="fs-header-actions">
|
198 |
<ul>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
199 |
<?php if ( $show_billing ) : ?>
|
200 |
<li><a href="#fs_billing"><i class="dashicons dashicons-portfolio"></i> <?php fs_esc_html_echo_inline( 'Billing & Invoices', 'billing-invoices', $slug ) ?></li>
|
201 |
<li> • </li>
|
202 |
<?php endif ?>
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
<?php if ( $is_paying ) : ?>
|
221 |
-
<?php if ( ! fs_is_network_admin() ) : ?>
|
222 |
-
<li>
|
223 |
-
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
|
224 |
-
<input type="hidden" name="fs_action" value="deactivate_license">
|
225 |
-
<?php wp_nonce_field( 'deactivate_license' ) ?>
|
226 |
-
<a href="#" class="fs-deactivate-license"><i
|
227 |
-
class="dashicons dashicons-admin-network"></i> <?php fs_echo_inline( 'Deactivate License', 'deactivate-license', $slug ) ?>
|
228 |
-
</a>
|
229 |
-
</form>
|
230 |
-
</li>
|
231 |
-
<li> • </li>
|
232 |
<?php endif ?>
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
</ul>
|
283 |
</div>
|
284 |
<div class="inside">
|
@@ -287,25 +314,28 @@
|
|
287 |
$hide_license_key = ( ! $show_license_row || $fs->apply_filters( 'hide_license_key', false ) );
|
288 |
|
289 |
$profile = array();
|
290 |
-
$profile[] = array(
|
291 |
-
'id' => 'user_name',
|
292 |
-
'title' => fs_text_inline( 'Name', 'name', $slug ),
|
293 |
-
'value' => $name
|
294 |
-
);
|
295 |
-
// if (isset($user->email) && false !== strpos($user->email, '@'))
|
296 |
-
$profile[] = array(
|
297 |
-
'id' => 'email',
|
298 |
-
'title' => fs_text_inline( 'Email', 'email', $slug ),
|
299 |
-
'value' => $user->email
|
300 |
-
);
|
301 |
|
302 |
-
if (
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
309 |
|
310 |
$profile[] = array(
|
311 |
'id' => 'product',
|
@@ -354,7 +384,7 @@
|
|
354 |
'value' => $fs->get_plugin_version()
|
355 |
);
|
356 |
|
357 |
-
if ( $is_premium ) {
|
358 |
$profile[] = array(
|
359 |
'id' => 'beta_program',
|
360 |
'title' => '',
|
@@ -420,9 +450,11 @@
|
|
420 |
</td>
|
421 |
<td<?php if ( 'plan' === $p['id'] || 'bundle_plan' === $p['id'] ) { echo ' colspan="2"'; }?>>
|
422 |
<?php if ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
|
423 |
-
<code><?php echo
|
424 |
-
|
|
|
425 |
readonly/>
|
|
|
426 |
<?php elseif ( 'beta_program' === $p['id'] ) : ?>
|
427 |
<label>
|
428 |
<input type="checkbox" class="fs-toggle-beta-mode" <?php checked( true, $p['value'] ) ?>/><span><?php
|
@@ -452,6 +484,7 @@
|
|
452 |
<?php elseif ( $fs->is_trial() ) : ?>
|
453 |
<label class="fs-tag fs-warn"><?php echo esc_html( sprintf( $expires_in_text, human_time_diff( time(), strtotime( $site->trial_ends ) ) ) ) ?></label>
|
454 |
<?php endif ?>
|
|
|
455 |
<div class="button-group">
|
456 |
<?php $available_license = $fs->is_free_plan() && ! fs_is_network_admin() ? $fs->_get_available_premium_license( $site->is_localhost() ) : false ?>
|
457 |
<?php if ( is_object( $available_license ) ) : ?>
|
@@ -489,6 +522,7 @@
|
|
489 |
</form>
|
490 |
<?php endif ?>
|
491 |
</div>
|
|
|
492 |
<?php elseif ( 'bundle_plan' === $p['id'] ) : ?>
|
493 |
<?php if ( is_object( $bundle_subscription ) ) : ?>
|
494 |
<?php if ( $is_active_bundle_subscription && ! $license->is_first_payment_pending() ) : ?>
|
@@ -521,11 +555,33 @@
|
|
521 |
<div class="button-group">
|
522 |
<?php if ( $is_paying || $fs->is_trial() ) : ?>
|
523 |
<?php if ( ! $fs->is_allowed_to_install() ) : ?>
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
529 |
<?php elseif ( is_object( $update ) ) : ?>
|
530 |
<?php
|
531 |
$module_type = $fs->get_module_type();
|
@@ -538,10 +594,12 @@
|
|
538 |
<?php endif ?>
|
539 |
<?php
|
540 |
elseif ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
|
|
|
|
545 |
<?php
|
546 |
elseif (/*in_array($p['id'], array('site_secret_key', 'site_id', 'site_public_key')) ||*/
|
547 |
( is_string( $user->secret_key ) && in_array( $p['id'], array(
|
@@ -562,6 +620,9 @@
|
|
562 |
<input type="submit" class="button button-small"
|
563 |
value="<?php echo fs_esc_attr_x_inline( 'Edit', 'verb', 'edit', $slug ) ?>">
|
564 |
</form>
|
|
|
|
|
|
|
565 |
<?php endif ?>
|
566 |
</td>
|
567 |
<?php endif ?>
|
@@ -587,18 +648,19 @@
|
|
587 |
<div id="fs_sites" class="postbox">
|
588 |
<h3><span class="dashicons dashicons-networking"></span> <?php fs_esc_html_echo_inline( 'Sites', 'sites', $slug ) ?></h3>
|
589 |
<div class="fs-header-actions">
|
590 |
-
<?php
|
591 |
-
|
592 |
-
<?php
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
|
|
|
|
598 |
<?php endif ?>
|
599 |
<input class="fs-search" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'Search by address', 'search-by-address', $slug ) ?>..."><span class="dashicons dashicons-search"></span>
|
600 |
</div>
|
601 |
-
|
602 |
<div class="inside">
|
603 |
<div id="" class="fs-scrollable-table">
|
604 |
<div class="fs-table-head">
|
@@ -666,9 +728,48 @@
|
|
666 |
|
667 |
$installed_addons_ids_map = array_flip( $installed_addons_ids );
|
668 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
669 |
foreach ( $addons_to_show as $addon_id ) {
|
670 |
$is_addon_installed = isset( $installed_addons_ids_map[ $addon_id ] );
|
671 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
672 |
$addon_view_params = array(
|
673 |
'parent_fs' => $fs,
|
674 |
'addon_id' => $addon_id,
|
@@ -676,7 +777,10 @@
|
|
676 |
'fs_blog_id' => $fs_blog_id,
|
677 |
'active_plugins_directories_map' => &$active_plugins_directories_map,
|
678 |
'is_addon_installed' => $is_addon_installed,
|
679 |
-
'addon_info' =>
|
|
|
|
|
|
|
680 |
);
|
681 |
|
682 |
fs_require_template(
|
44 |
$site = $fs->get_site();
|
45 |
$name = $user->get_name();
|
46 |
$license = $fs->_get_license();
|
47 |
+
$is_data_debug_mode = $fs->is_data_debug_mode();
|
48 |
+
$is_whitelabeled = $fs->is_whitelabeled();
|
49 |
$subscription = ( is_object( $license ) ?
|
50 |
$fs->_get_subscription( $license->id ) :
|
51 |
null );
|
52 |
$plan = $fs->get_plan();
|
53 |
$is_active_subscription = ( is_object( $subscription ) && $subscription->is_active() );
|
54 |
$is_paid_trial = $fs->is_paid_trial();
|
55 |
+
$has_paid_plan = $fs->apply_filters( 'has_paid_plan_account', $fs->has_paid_plan() );
|
56 |
+
$show_upgrade = ( ! $is_whitelabeled && $has_paid_plan && ! $is_paying && ! $is_paid_trial );
|
57 |
$trial_plan = $fs->get_trial_plan();
|
58 |
|
59 |
if ( $has_paid_plan ) {
|
60 |
$fs->_add_license_activation_dialog_box();
|
61 |
}
|
62 |
|
63 |
+
$ids_of_installs_activated_with_foreign_licenses = $fs->should_handle_user_change() ?
|
64 |
+
$fs->get_installs_ids_with_foreign_licenses() :
|
65 |
+
array();
|
66 |
+
|
67 |
+
if ( ! empty( $ids_of_installs_activated_with_foreign_licenses ) ) {
|
68 |
+
$fs->_add_user_change_dialog_box( $ids_of_installs_activated_with_foreign_licenses );
|
69 |
+
}
|
70 |
+
|
71 |
+
if ( $fs->is_whitelabeled( true ) || $fs->is_data_debug_mode() ) {
|
72 |
+
$fs->_add_data_debug_mode_dialog_box();
|
73 |
+
}
|
74 |
+
|
75 |
if ( fs_request_get_bool( 'auto_install' ) ) {
|
76 |
$fs->_add_auto_installation_dialog_box();
|
77 |
}
|
86 |
|
87 |
$payments = $fs->_fetch_payments();
|
88 |
|
89 |
+
$show_billing = ( ! $is_whitelabeled && is_array( $payments ) && 0 < count( $payments ) );
|
90 |
|
91 |
|
92 |
$has_tabs = $fs->_add_tabs_before_content();
|
210 |
<h3><span class="dashicons dashicons-businessman"></span> <?php fs_esc_html_echo_inline( 'Account Details', 'account-details', $slug ) ?></h3>
|
211 |
<div class="fs-header-actions">
|
212 |
<ul>
|
213 |
+
<?php if ( $fs->is_whitelabeled( true ) ) : ?>
|
214 |
+
<li>
|
215 |
+
<a href="#" class="debug-license-trigger"><i class="dashicons dashicons-<?php echo $is_whitelabeled ? 'editor-code' : 'controls-pause' ?>"></i> <span><?php
|
216 |
+
if ( $is_whitelabeled ) {
|
217 |
+
fs_esc_html_echo_inline( 'Start Debug', 'start-debug-license', $slug );
|
218 |
+
} else {
|
219 |
+
fs_esc_html_echo_inline( 'Stop Debug', 'stop-debug-license', $slug );
|
220 |
+
}
|
221 |
+
?></span></a>
|
222 |
+
</li>
|
223 |
+
<li> • </li>
|
224 |
+
<?php endif ?>
|
225 |
<?php if ( $show_billing ) : ?>
|
226 |
<li><a href="#fs_billing"><i class="dashicons dashicons-portfolio"></i> <?php fs_esc_html_echo_inline( 'Billing & Invoices', 'billing-invoices', $slug ) ?></li>
|
227 |
<li> • </li>
|
228 |
<?php endif ?>
|
229 |
+
<?php if ( ! $is_whitelabeled ) : ?>
|
230 |
+
<?php if ( ! $is_paying ) : ?>
|
231 |
+
<li>
|
232 |
+
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
|
233 |
+
<input type="hidden" name="fs_action" value="delete_account">
|
234 |
+
<?php wp_nonce_field( 'delete_account' ) ?>
|
235 |
+
<a class="fs-delete-account" href="#" onclick="if (confirm('<?php
|
236 |
+
if ( $is_active_subscription ) {
|
237 |
+
echo esc_attr( sprintf( fs_text_inline( '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?', 'delete-account-x-confirm', $slug ), $plan->title ) );
|
238 |
+
} else {
|
239 |
+
echo esc_attr( sprintf( fs_text_inline( '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?', 'delete-account-confirm', $slug ), $fs->get_module_label( true ) ) );
|
240 |
+
}
|
241 |
+
?>')) this.parentNode.submit(); return false;"><i
|
242 |
+
class="dashicons dashicons-no"></i> <?php fs_esc_html_echo_inline( 'Delete Account', 'delete-account', $slug ) ?></a>
|
243 |
+
</form>
|
244 |
+
</li>
|
245 |
+
<li> • </li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
246 |
<?php endif ?>
|
247 |
+
<?php if ( $is_paying ) : ?>
|
248 |
+
<?php if ( ! fs_is_network_admin() ) : ?>
|
249 |
+
<li>
|
250 |
+
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
|
251 |
+
<input type="hidden" name="fs_action" value="deactivate_license">
|
252 |
+
<?php wp_nonce_field( 'deactivate_license' ) ?>
|
253 |
+
<a href="#" class="fs-deactivate-license"><i
|
254 |
+
class="dashicons dashicons-admin-network"></i> <?php fs_echo_inline( 'Deactivate License', 'deactivate-license', $slug ) ?>
|
255 |
+
</a>
|
256 |
+
</form>
|
257 |
+
</li>
|
258 |
+
<li> • </li>
|
259 |
+
<?php endif ?>
|
260 |
+
<?php if ( ! $license->is_lifetime() &&
|
261 |
+
$is_active_subscription
|
262 |
+
) : ?>
|
263 |
+
<li>
|
264 |
+
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
|
265 |
+
<input type="hidden" name="fs_action" value="downgrade_account">
|
266 |
+
<?php wp_nonce_field( 'downgrade_account' ) ?>
|
267 |
+
<a href="#"
|
268 |
+
onclick="if ( confirm('<?php echo esc_attr( sprintf(
|
269 |
+
$downgrade_x_confirm_text,
|
270 |
+
( $fs->is_only_premium() ? $cancelling_subscription_text : $downgrading_plan_text ),
|
271 |
+
$plan->title,
|
272 |
+
human_time_diff( time(), strtotime( $license->expiration ) )
|
273 |
+
) ) ?> <?php if ( ! $license->is_block_features ) {
|
274 |
+
echo esc_attr( sprintf( $after_downgrade_non_blocking_text, $plan->title, $fs->get_module_label( true ) ) );
|
275 |
+
} else {
|
276 |
+
echo esc_attr( sprintf( $after_downgrade_blocking_text, $plan->title ) );
|
277 |
+
}?> <?php echo esc_attr( $prices_increase_text ) ?> <?php fs_esc_attr_echo_inline( 'Are you sure you want to proceed?', 'proceed-confirmation', $slug ) ?>') ) this.parentNode.submit(); return false;"><i class="dashicons dashicons-download"></i> <?php echo esc_html( $fs->is_only_premium() ? fs_text_inline( 'Cancel Subscription', 'cancel-subscription', $slug ) : $downgrade_text ) ?></a>
|
278 |
+
</form>
|
279 |
+
</li>
|
280 |
+
<li> • </li>
|
281 |
+
<?php endif ?>
|
282 |
+
<?php if ( ! $fs->is_single_plan() ) : ?>
|
283 |
+
<li>
|
284 |
+
<a href="<?php echo $fs->get_upgrade_url() ?>"><i
|
285 |
+
class="dashicons dashicons-grid-view"></i> <?php echo esc_html( $change_plan_text ) ?></a>
|
286 |
+
</li>
|
287 |
+
<li> • </li>
|
288 |
+
<?php endif ?>
|
289 |
+
<?php elseif ( $is_paid_trial ) : ?>
|
290 |
+
<li>
|
291 |
+
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
|
292 |
+
<input type="hidden" name="fs_action" value="cancel_trial">
|
293 |
+
<?php wp_nonce_field( 'cancel_trial' ) ?>
|
294 |
+
<a href="#" class="fs-cancel-trial"><i
|
295 |
+
class="dashicons dashicons-download"></i> <?php echo esc_html( $cancel_trial_text ) ?></a>
|
296 |
+
</form>
|
297 |
+
</li>
|
298 |
+
<li> • </li>
|
299 |
+
<?php endif ?>
|
300 |
+
<?php endif ?>
|
301 |
+
<li>
|
302 |
+
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
|
303 |
+
<input type="hidden" name="fs_action" value="<?php echo $fs->get_unique_affix() ?>_sync_license">
|
304 |
+
<?php wp_nonce_field( $fs->get_unique_affix() . '_sync_license' ) ?>
|
305 |
+
<a href="#" onclick="this.parentNode.submit(); return false;"><i
|
306 |
+
class="dashicons dashicons-image-rotate"></i> <?php fs_esc_html_echo_x_inline( 'Sync', 'as synchronize', 'sync', $slug ) ?></a>
|
307 |
+
</form>
|
308 |
+
</li>
|
309 |
</ul>
|
310 |
</div>
|
311 |
<div class="inside">
|
314 |
$hide_license_key = ( ! $show_license_row || $fs->apply_filters( 'hide_license_key', false ) );
|
315 |
|
316 |
$profile = array();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
317 |
|
318 |
+
if ( ! $is_whitelabeled ) {
|
319 |
+
$profile[] = array(
|
320 |
+
'id' => 'user_name',
|
321 |
+
'title' => fs_text_inline( 'Name', 'name', $slug ),
|
322 |
+
'value' => $name
|
323 |
+
);
|
324 |
+
// if (isset($user->email) && false !== strpos($user->email, '@'))
|
325 |
+
$profile[] = array(
|
326 |
+
'id' => 'email',
|
327 |
+
'title' => fs_text_inline( 'Email', 'email', $slug ),
|
328 |
+
'value' => $user->email
|
329 |
+
);
|
330 |
+
|
331 |
+
if ( is_numeric( $user->id ) ) {
|
332 |
+
$profile[] = array(
|
333 |
+
'id' => 'user_id',
|
334 |
+
'title' => fs_text_inline( 'User ID', 'user-id', $slug ),
|
335 |
+
'value' => $user->id
|
336 |
+
);
|
337 |
+
}
|
338 |
+
}
|
339 |
|
340 |
$profile[] = array(
|
341 |
'id' => 'product',
|
384 |
'value' => $fs->get_plugin_version()
|
385 |
);
|
386 |
|
387 |
+
if ( $is_premium && ! $is_whitelabeled ) {
|
388 |
$profile[] = array(
|
389 |
'id' => 'beta_program',
|
390 |
'title' => '',
|
450 |
</td>
|
451 |
<td<?php if ( 'plan' === $p['id'] || 'bundle_plan' === $p['id'] ) { echo ' colspan="2"'; }?>>
|
452 |
<?php if ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
|
453 |
+
<code><?php echo FS_Plugin_License::mask_secret_key_for_html( $p['value'] ) ?></code>
|
454 |
+
<?php if ( ! $is_whitelabeled ) : ?>
|
455 |
+
<input type="text" value="<?php echo htmlspecialchars( $p['value'] ) ?>" style="display: none"
|
456 |
readonly/>
|
457 |
+
<?php endif ?>
|
458 |
<?php elseif ( 'beta_program' === $p['id'] ) : ?>
|
459 |
<label>
|
460 |
<input type="checkbox" class="fs-toggle-beta-mode" <?php checked( true, $p['value'] ) ?>/><span><?php
|
484 |
<?php elseif ( $fs->is_trial() ) : ?>
|
485 |
<label class="fs-tag fs-warn"><?php echo esc_html( sprintf( $expires_in_text, human_time_diff( time(), strtotime( $site->trial_ends ) ) ) ) ?></label>
|
486 |
<?php endif ?>
|
487 |
+
<?php if ( ! $is_whitelabeled ) : ?>
|
488 |
<div class="button-group">
|
489 |
<?php $available_license = $fs->is_free_plan() && ! fs_is_network_admin() ? $fs->_get_available_premium_license( $site->is_localhost() ) : false ?>
|
490 |
<?php if ( is_object( $available_license ) ) : ?>
|
522 |
</form>
|
523 |
<?php endif ?>
|
524 |
</div>
|
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() ) : ?>
|
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 |
+
|
562 |
+
$download_version_text = sprintf(
|
563 |
+
/* translators: %s: plan name (e.g. Download "Professional" Version) */
|
564 |
+
fs_text_inline( 'Download %s Version', 'download-x-version', $slug ),
|
565 |
+
( $fs->is_trial() ? $trial_plan->title : $plan->title )
|
566 |
+
) .
|
567 |
+
$download_version_text_suffix;
|
568 |
+
|
569 |
+
$download_version_text_length = function_exists( 'mb_strlen' ) ?
|
570 |
+
mb_strlen( $download_version_text ) :
|
571 |
+
strlen( $download_version_text );
|
572 |
+
|
573 |
+
if ( $download_version_text_length > 31 ) {
|
574 |
+
/**
|
575 |
+
* Try to limit the number of characters to 31 for now.
|
576 |
+
*
|
577 |
+
* @author Leo Fajardo (@leorw)
|
578 |
+
* @aince 2.3.2
|
579 |
+
*/
|
580 |
+
$download_version_text = fs_text_inline( 'Download Paid Version', 'download-paid-version', $slug ) . $download_version_text_suffix;
|
581 |
+
}
|
582 |
+
|
583 |
+
echo $download_version_text;
|
584 |
+
?></a>
|
585 |
<?php elseif ( is_object( $update ) ) : ?>
|
586 |
<?php
|
587 |
$module_type = $fs->get_module_type();
|
594 |
<?php endif ?>
|
595 |
<?php
|
596 |
elseif ( in_array( $p['id'], array( 'license_key', 'site_secret_key' ) ) ) : ?>
|
597 |
+
<?php if ( ! $is_whitelabeled ) : ?>
|
598 |
+
<button class="button button-small fs-toggle-visibility"><?php fs_esc_html_echo_x_inline( 'Show', 'verb', 'show', $slug ) ?></button>
|
599 |
+
<?php endif ?>
|
600 |
+
<?php if ('license_key' === $p['id']) : ?>
|
601 |
+
<button class="button button-small activate-license-trigger <?php echo $fs->get_unique_affix() ?>"><?php fs_esc_html_echo_inline( 'Change License', 'change-license', $slug ) ?></button>
|
602 |
+
<?php endif ?>
|
603 |
<?php
|
604 |
elseif (/*in_array($p['id'], array('site_secret_key', 'site_id', 'site_public_key')) ||*/
|
605 |
( is_string( $user->secret_key ) && in_array( $p['id'], array(
|
620 |
<input type="submit" class="button button-small"
|
621 |
value="<?php echo fs_esc_attr_x_inline( 'Edit', 'verb', 'edit', $slug ) ?>">
|
622 |
</form>
|
623 |
+
<?php elseif ( 'user_id' === $p['id'] && ! empty( $ids_of_installs_activated_with_foreign_licenses ) ) : ?>
|
624 |
+
<input id="fs_change_user" type="submit" class="button button-small"
|
625 |
+
value="<?php echo fs_esc_attr_inline( 'Change User', 'change-user', $slug ) ?>">
|
626 |
<?php endif ?>
|
627 |
</td>
|
628 |
<?php endif ?>
|
648 |
<div id="fs_sites" class="postbox">
|
649 |
<h3><span class="dashicons dashicons-networking"></span> <?php fs_esc_html_echo_inline( 'Sites', 'sites', $slug ) ?></h3>
|
650 |
<div class="fs-header-actions">
|
651 |
+
<?php if ( ! $is_whitelabeled ) : ?>
|
652 |
+
<?php $has_license = is_object( $license ) ?>
|
653 |
+
<?php if ( $has_license || ( $show_upgrade && $is_premium ) ) : ?>
|
654 |
+
<?php
|
655 |
+
$activate_license_button_text = $has_license ?
|
656 |
+
fs_esc_html_inline( 'Change License', 'change-license', $slug ) :
|
657 |
+
fs_esc_html_inline( 'Activate License', 'activate-license', $slug );
|
658 |
+
?>
|
659 |
+
<a class="button<?php echo ( ! $has_license ? ' button-primary' : '' ) ?> activate-license-trigger <?php echo $fs->get_unique_affix() ?>" href="#"><?php echo $activate_license_button_text ?></a>
|
660 |
+
<?php endif ?>
|
661 |
<?php endif ?>
|
662 |
<input class="fs-search" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'Search by address', 'search-by-address', $slug ) ?>..."><span class="dashicons dashicons-search"></span>
|
663 |
</div>
|
|
|
664 |
<div class="inside">
|
665 |
<div id="" class="fs-scrollable-table">
|
666 |
<div class="fs-table-head">
|
728 |
|
729 |
$installed_addons_ids_map = array_flip( $installed_addons_ids );
|
730 |
|
731 |
+
$addon_info_by_id = array();
|
732 |
+
$hide_all_addons_data = false;
|
733 |
+
|
734 |
+
if ( $fs->is_whitelabeled_by_flag() ) {
|
735 |
+
$hide_all_addons_data = true;
|
736 |
+
|
737 |
+
foreach ( $addons_to_show as $addon_id ) {
|
738 |
+
$is_addon_installed = isset( $installed_addons_ids_map[ $addon_id ] );
|
739 |
+
$addon_info = $fs->_get_addon_info( $addon_id, $is_addon_installed );
|
740 |
+
$is_addon_connected = $addon_info['is_connected'];
|
741 |
+
|
742 |
+
$fs_addon = ( $is_addon_connected && $is_addon_installed ) ?
|
743 |
+
freemius( $addon_id ) :
|
744 |
+
null;
|
745 |
+
|
746 |
+
$is_whitelabeled = is_object( $fs_addon ) ?
|
747 |
+
$fs_addon->is_whitelabeled( true ) :
|
748 |
+
$addon_info['is_whitelabeled'];
|
749 |
+
|
750 |
+
if ( ! $is_whitelabeled ) {
|
751 |
+
$hide_all_addons_data = false;
|
752 |
+
}
|
753 |
+
|
754 |
+
if ( $is_data_debug_mode ) {
|
755 |
+
$is_whitelabeled = false;
|
756 |
+
}
|
757 |
+
|
758 |
+
$addon_info_by_id[ $addon_id ] = $addon_info;
|
759 |
+
}
|
760 |
+
}
|
761 |
+
|
762 |
foreach ( $addons_to_show as $addon_id ) {
|
763 |
$is_addon_installed = isset( $installed_addons_ids_map[ $addon_id ] );
|
764 |
|
765 |
+
if (
|
766 |
+
$hide_all_addons_data &&
|
767 |
+
! $is_addon_installed &&
|
768 |
+
! file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $fs->get_addon_basename( $addon_id ) ) )
|
769 |
+
) {
|
770 |
+
continue;
|
771 |
+
}
|
772 |
+
|
773 |
$addon_view_params = array(
|
774 |
'parent_fs' => $fs,
|
775 |
'addon_id' => $addon_id,
|
777 |
'fs_blog_id' => $fs_blog_id,
|
778 |
'active_plugins_directories_map' => &$active_plugins_directories_map,
|
779 |
'is_addon_installed' => $is_addon_installed,
|
780 |
+
'addon_info' => isset( $addon_info_by_id[ $addon_id ] ) ?
|
781 |
+
$addon_info_by_id[ $addon_id ] :
|
782 |
+
$fs->_get_addon_info( $addon_id, $is_addon_installed ),
|
783 |
+
'is_whitelabeled' => ( $is_whitelabeled && ! $is_data_debug_mode )
|
784 |
);
|
785 |
|
786 |
fs_require_template(
|
common/vendor/freemius/templates/account/partials/addon.php
CHANGED
@@ -38,7 +38,6 @@
|
|
38 |
$renews_in_text = fs_text_inline( 'Auto renews in %s', 'renews-in', $slug );
|
39 |
/* translators: %s: Time period (e.g. Expires in "2 months") */
|
40 |
$expires_in_text = fs_text_inline( 'Expires in %s', 'expires-in', $slug );
|
41 |
-
$sync_license_text = fs_text_x_inline( 'Sync License', 'as synchronize license', 'sync-license', $slug );
|
42 |
$cancel_trial_text = fs_text_inline( 'Cancel Trial', 'cancel-trial', $slug );
|
43 |
$change_plan_text = fs_text_inline( 'Change Plan', 'change-plan', $slug );
|
44 |
$upgrade_text = fs_text_x_inline( 'Upgrade', 'verb', 'upgrade', $slug );
|
@@ -61,6 +60,7 @@
|
|
61 |
$subscription = null;
|
62 |
$is_paying = false;
|
63 |
$show_upgrade = false;
|
|
|
64 |
|
65 |
if ( is_object( $fs_addon ) ) {
|
66 |
$is_paying = $fs_addon->is_paying();
|
@@ -74,8 +74,18 @@
|
|
74 |
$plan_name = $plan->name;
|
75 |
$plan_title = $plan->title;
|
76 |
$is_paid_trial = $fs_addon->is_paid_trial();
|
77 |
-
$show_upgrade = ( $fs_addon->has_paid_plan() && ! $is_paying && ! $is_paid_trial && ! $fs_addon->_has_premium_license() );
|
78 |
$version = $fs_addon->get_plugin_version();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
} else if ( $is_addon_connected ) {
|
80 |
if (
|
81 |
empty( $addon_info ) ||
|
@@ -116,10 +126,19 @@
|
|
116 |
$has_valid_and_active_license &&
|
117 |
( $site->trial_plan_id == $license->plan_id )
|
118 |
);
|
|
|
|
|
119 |
}
|
120 |
}
|
121 |
|
|
|
|
|
|
|
|
|
|
|
122 |
$is_active_subscription = ( is_object( $subscription ) && $subscription->is_active() );
|
|
|
|
|
123 |
?>
|
124 |
<tr<?php if ( $odd ) {
|
125 |
echo ' class="alternate"';
|
@@ -141,10 +160,9 @@
|
|
141 |
<td><?php echo strtoupper( is_string( $plan_name ) ? $plan_title : $free_text ) ?></td>
|
142 |
<!--/ Plan Title -->
|
143 |
|
144 |
-
<?php if ( $site->is_trial() || is_object( $license ) ) : ?>
|
145 |
-
|
146 |
<!-- Expiration -->
|
147 |
<td>
|
|
|
148 |
<?php
|
149 |
$tags = array();
|
150 |
|
@@ -195,118 +213,138 @@
|
|
195 |
printf( '<label class="fs-tag fs-%s">%s</label>' . "\n", $t['type'], $t['label'] );
|
196 |
}
|
197 |
?>
|
|
|
198 |
</td>
|
199 |
<!--/ Expiration -->
|
200 |
|
201 |
-
<?php endif ?>
|
202 |
-
|
203 |
<?php
|
204 |
$buttons = array();
|
|
|
|
|
205 |
if ( $is_addon_activated ) {
|
206 |
-
if ( $
|
207 |
-
$
|
208 |
-
$fs->get_id(),
|
209 |
-
'account',
|
210 |
-
'deactivate_license',
|
211 |
-
fs_text_inline( 'Deactivate License', 'deactivate-license', $slug ),
|
212 |
-
'',
|
213 |
-
array( 'plugin_id' => $addon_id ),
|
214 |
-
false
|
215 |
-
);
|
216 |
-
|
217 |
-
$human_readable_license_expiration = human_time_diff( time(), strtotime( $license->expiration ) );
|
218 |
-
$downgrade_confirmation_message = sprintf(
|
219 |
-
$downgrade_x_confirm_text,
|
220 |
-
( $fs_addon->is_only_premium() ? $cancelling_subscription_text : $downgrading_plan_text ),
|
221 |
-
$plan->title,
|
222 |
-
$human_readable_license_expiration
|
223 |
-
);
|
224 |
-
|
225 |
-
$after_downgrade_message = ! $license->is_block_features ?
|
226 |
-
sprintf( $after_downgrade_non_blocking_text, $plan->title, $fs_addon->get_module_label( true ) ) :
|
227 |
-
sprintf( $after_downgrade_blocking_text, $plan->title );
|
228 |
-
|
229 |
-
if ( ! $license->is_lifetime() && $is_active_subscription ) {
|
230 |
$buttons[] = fs_ui_get_action_button(
|
231 |
$fs->get_id(),
|
232 |
'account',
|
233 |
-
'
|
234 |
-
|
235 |
'',
|
236 |
array( 'plugin_id' => $addon_id ),
|
237 |
false,
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
|
|
|
|
|
|
|
|
|
|
242 |
);
|
243 |
-
}
|
244 |
-
} else if ( $is_paid_trial ) {
|
245 |
-
$buttons[] = fs_ui_get_action_button(
|
246 |
-
$fs->get_id(),
|
247 |
-
'account',
|
248 |
-
'cancel_trial',
|
249 |
-
esc_html( $cancel_trial_text ),
|
250 |
-
'',
|
251 |
-
array( 'plugin_id' => $addon_id ),
|
252 |
-
false,
|
253 |
-
false,
|
254 |
-
'dashicons dashicons-download',
|
255 |
-
$cancel_trial_confirm_text,
|
256 |
-
'POST'
|
257 |
-
);
|
258 |
-
} else if ( ! is_object( $license ) || ! $license->is_features_enabled() ) {
|
259 |
-
$premium_license = $fs_addon->_get_available_premium_license();
|
260 |
-
|
261 |
-
if ( is_object( $premium_license ) ) {
|
262 |
-
$premium_plan = $fs_addon->_get_plan_by_id( $premium_license->plan_id );
|
263 |
-
$site = $fs_addon->get_site();
|
264 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
265 |
$buttons[] = fs_ui_get_action_button(
|
266 |
$fs->get_id(),
|
267 |
'account',
|
268 |
-
'
|
269 |
-
esc_html(
|
270 |
'',
|
271 |
-
array(
|
272 |
-
|
273 |
-
|
274 |
-
|
|
|
|
|
275 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
276 |
}
|
277 |
}
|
278 |
|
279 |
-
if ( 0 == count( $buttons ) ) {
|
280 |
-
if ( $
|
281 |
$fs_addon->_add_license_activation_dialog_box();
|
282 |
|
283 |
$buttons[] = fs_ui_get_action_button(
|
284 |
$fs->get_id(),
|
285 |
'account',
|
286 |
'activate_license',
|
287 |
-
|
|
|
|
|
288 |
'activate-license-trigger ' . $fs_addon->get_unique_affix(),
|
289 |
array(
|
290 |
'plugin_id' => $addon_id,
|
291 |
),
|
292 |
-
|
293 |
true
|
294 |
);
|
295 |
-
}
|
296 |
|
297 |
-
|
298 |
-
|
299 |
-
$fs->get_id(),
|
300 |
-
'account',
|
301 |
-
$fs->get_unique_affix() . '_sync_license',
|
302 |
-
esc_html( $sync_license_text ),
|
303 |
-
'',
|
304 |
-
array( 'plugin_id' => $addon_id ),
|
305 |
-
false,
|
306 |
-
true
|
307 |
-
);
|
308 |
|
309 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
310 |
} else if ( ! $show_upgrade ) {
|
311 |
if ( $fs->is_addon_installed( $addon_id ) ) {
|
312 |
$addon_file = $fs->get_addon_basename( $addon_id );
|
@@ -362,10 +400,11 @@
|
|
362 |
|
363 |
<?php else : ?>
|
364 |
<?php // Add-on NOT Installed or was never connected.
|
|
|
365 |
?>
|
366 |
<!-- Action -->
|
367 |
-
<td colspan="4">
|
368 |
-
<?php if ( $
|
369 |
<?php $addon_file = $fs->get_addon_basename( $addon_id ) ?>
|
370 |
<?php if ( ! isset( $active_plugins_directories_map[ dirname( $addon_file ) ] ) ) : ?>
|
371 |
<a class="button button-primary"
|
@@ -385,8 +424,8 @@
|
|
385 |
</td>
|
386 |
<!--/ Action -->
|
387 |
<?php endif ?>
|
388 |
-
<?php if (
|
389 |
-
|
390 |
<td>
|
391 |
<?php
|
392 |
if ( $is_addon_activated ) {
|
38 |
$renews_in_text = fs_text_inline( 'Auto renews in %s', 'renews-in', $slug );
|
39 |
/* translators: %s: Time period (e.g. Expires in "2 months") */
|
40 |
$expires_in_text = fs_text_inline( 'Expires in %s', 'expires-in', $slug );
|
|
|
41 |
$cancel_trial_text = fs_text_inline( 'Cancel Trial', 'cancel-trial', $slug );
|
42 |
$change_plan_text = fs_text_inline( 'Change Plan', 'change-plan', $slug );
|
43 |
$upgrade_text = fs_text_x_inline( 'Upgrade', 'verb', 'upgrade', $slug );
|
60 |
$subscription = null;
|
61 |
$is_paying = false;
|
62 |
$show_upgrade = false;
|
63 |
+
$is_whitelabeled = $VARS['is_whitelabeled'];
|
64 |
|
65 |
if ( is_object( $fs_addon ) ) {
|
66 |
$is_paying = $fs_addon->is_paying();
|
74 |
$plan_name = $plan->name;
|
75 |
$plan_title = $plan->title;
|
76 |
$is_paid_trial = $fs_addon->is_paid_trial();
|
|
|
77 |
$version = $fs_addon->get_plugin_version();
|
78 |
+
$is_whitelabeled = (
|
79 |
+
$fs_addon->is_whitelabeled( true ) &&
|
80 |
+
! $fs_addon->get_parent_instance()->is_data_debug_mode()
|
81 |
+
);
|
82 |
+
$show_upgrade = (
|
83 |
+
! $is_whitelabeled &&
|
84 |
+
$fs_addon->has_paid_plan() &&
|
85 |
+
! $is_paying &&
|
86 |
+
! $is_paid_trial &&
|
87 |
+
! $fs_addon->_has_premium_license()
|
88 |
+
);
|
89 |
} else if ( $is_addon_connected ) {
|
90 |
if (
|
91 |
empty( $addon_info ) ||
|
126 |
$has_valid_and_active_license &&
|
127 |
( $site->trial_plan_id == $license->plan_id )
|
128 |
);
|
129 |
+
|
130 |
+
$is_whitelabeled = $addon_info['is_whitelabeled'];
|
131 |
}
|
132 |
}
|
133 |
|
134 |
+
$has_feature_enabled_license = (
|
135 |
+
is_object( $license ) &&
|
136 |
+
$license->is_features_enabled()
|
137 |
+
);
|
138 |
+
|
139 |
$is_active_subscription = ( is_object( $subscription ) && $subscription->is_active() );
|
140 |
+
|
141 |
+
$show_delete_install_button = ( ! $is_paying && WP_FS__DEV_MODE && ! $is_whitelabeled );
|
142 |
?>
|
143 |
<tr<?php if ( $odd ) {
|
144 |
echo ' class="alternate"';
|
160 |
<td><?php echo strtoupper( is_string( $plan_name ) ? $plan_title : $free_text ) ?></td>
|
161 |
<!--/ Plan Title -->
|
162 |
|
|
|
|
|
163 |
<!-- Expiration -->
|
164 |
<td>
|
165 |
+
<?php if ( $site->is_trial() || is_object( $license ) ) : ?>
|
166 |
<?php
|
167 |
$tags = array();
|
168 |
|
213 |
printf( '<label class="fs-tag fs-%s">%s</label>' . "\n", $t['type'], $t['label'] );
|
214 |
}
|
215 |
?>
|
216 |
+
<?php endif ?>
|
217 |
</td>
|
218 |
<!--/ Expiration -->
|
219 |
|
|
|
|
|
220 |
<?php
|
221 |
$buttons = array();
|
222 |
+
$is_license_activation_added = false;
|
223 |
+
|
224 |
if ( $is_addon_activated ) {
|
225 |
+
if ( ! $is_whitelabeled ) {
|
226 |
+
if ( $is_paying ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
227 |
$buttons[] = fs_ui_get_action_button(
|
228 |
$fs->get_id(),
|
229 |
'account',
|
230 |
+
'deactivate_license',
|
231 |
+
fs_text_inline( 'Deactivate License', 'deactivate-license', $slug ),
|
232 |
'',
|
233 |
array( 'plugin_id' => $addon_id ),
|
234 |
false,
|
235 |
+
true
|
236 |
+
);
|
237 |
+
|
238 |
+
$human_readable_license_expiration = human_time_diff( time(), strtotime( $license->expiration ) );
|
239 |
+
$downgrade_confirmation_message = sprintf(
|
240 |
+
$downgrade_x_confirm_text,
|
241 |
+
( $fs_addon->is_only_premium() ? $cancelling_subscription_text : $downgrading_plan_text ),
|
242 |
+
$plan->title,
|
243 |
+
$human_readable_license_expiration
|
244 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
245 |
|
246 |
+
$after_downgrade_message = ! $license->is_block_features ?
|
247 |
+
sprintf( $after_downgrade_non_blocking_text, $plan->title, $fs_addon->get_module_label( true ) ) :
|
248 |
+
sprintf( $after_downgrade_blocking_text, $plan->title );
|
249 |
+
|
250 |
+
if ( ! $license->is_lifetime() && $is_active_subscription ) {
|
251 |
+
$buttons[] = fs_ui_get_action_button(
|
252 |
+
$fs->get_id(),
|
253 |
+
'account',
|
254 |
+
'downgrade_account',
|
255 |
+
esc_html( $fs_addon->is_only_premium() ? fs_text_inline( 'Cancel Subscription', 'cancel-subscription', $slug ) : $downgrade_text ),
|
256 |
+
'',
|
257 |
+
array( 'plugin_id' => $addon_id ),
|
258 |
+
false,
|
259 |
+
false,
|
260 |
+
false,
|
261 |
+
( $downgrade_confirmation_message . ' ' . $after_downgrade_message . ' ' . $prices_increase_text ),
|
262 |
+
'POST'
|
263 |
+
);
|
264 |
+
}
|
265 |
+
} else if ( $is_paid_trial ) {
|
266 |
$buttons[] = fs_ui_get_action_button(
|
267 |
$fs->get_id(),
|
268 |
'account',
|
269 |
+
'cancel_trial',
|
270 |
+
esc_html( $cancel_trial_text ),
|
271 |
'',
|
272 |
+
array( 'plugin_id' => $addon_id ),
|
273 |
+
false,
|
274 |
+
false,
|
275 |
+
'dashicons dashicons-download',
|
276 |
+
$cancel_trial_confirm_text,
|
277 |
+
'POST'
|
278 |
);
|
279 |
+
} else if ( ! $has_feature_enabled_license ) {
|
280 |
+
$premium_licenses = $fs_addon->get_available_premium_licenses();
|
281 |
+
|
282 |
+
if ( ! empty( $premium_licenses ) ) {
|
283 |
+
$premium_license = $premium_licenses[0];
|
284 |
+
$has_multiple_premium_licenses = ( 1 < count( $premium_licenses ) );
|
285 |
+
|
286 |
+
if ( ! $has_multiple_premium_licenses ) {
|
287 |
+
$premium_plan = $fs_addon->_get_plan_by_id( $premium_license->plan_id );
|
288 |
+
$site = $fs_addon->get_site();
|
289 |
+
|
290 |
+
$buttons[] = fs_ui_get_action_button(
|
291 |
+
$fs->get_id(),
|
292 |
+
'account',
|
293 |
+
'activate_license',
|
294 |
+
esc_html( sprintf( $activate_plan_text, $premium_plan->title, ( $site->is_localhost() && $premium_license->is_free_localhost ) ? '[localhost]' : ( 1 < $premium_license->left() ? $premium_license->left() . ' left' : '' ) ) ),
|
295 |
+
($has_multiple_premium_licenses ?
|
296 |
+
'activate-license-trigger ' . $fs_addon->get_unique_affix() :
|
297 |
+
''),
|
298 |
+
array(
|
299 |
+
'plugin_id' => $addon_id,
|
300 |
+
'license_id' => $premium_license->id,
|
301 |
+
),
|
302 |
+
true,
|
303 |
+
true
|
304 |
+
);
|
305 |
+
|
306 |
+
$is_license_activation_added = true;
|
307 |
+
}
|
308 |
+
}
|
309 |
}
|
310 |
}
|
311 |
|
312 |
+
// if ( 0 == count( $buttons ) ) {
|
313 |
+
if ( $fs_addon->is_premium() && ! $is_license_activation_added ) {
|
314 |
$fs_addon->_add_license_activation_dialog_box();
|
315 |
|
316 |
$buttons[] = fs_ui_get_action_button(
|
317 |
$fs->get_id(),
|
318 |
'account',
|
319 |
'activate_license',
|
320 |
+
( ! $has_feature_enabled_license ) ?
|
321 |
+
fs_esc_html_inline( 'Activate License', 'activate-license', $slug ) :
|
322 |
+
fs_esc_html_inline( 'Change License', 'change-license', $slug ),
|
323 |
'activate-license-trigger ' . $fs_addon->get_unique_affix(),
|
324 |
array(
|
325 |
'plugin_id' => $addon_id,
|
326 |
),
|
327 |
+
(! $has_feature_enabled_license),
|
328 |
true
|
329 |
);
|
|
|
330 |
|
331 |
+
$is_license_activation_added = true;
|
332 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
333 |
|
334 |
+
if ( $fs_addon->has_paid_plan() ) {
|
335 |
+
// Add sync license only if non of the other CTAs are visible.
|
336 |
+
$buttons[] = fs_ui_get_action_button(
|
337 |
+
$fs->get_id(),
|
338 |
+
'account',
|
339 |
+
$fs->get_unique_affix() . '_sync_license',
|
340 |
+
fs_esc_html_x_inline( 'Sync', 'as synchronize', 'sync', $slug ),
|
341 |
+
'',
|
342 |
+
array( 'plugin_id' => $addon_id ),
|
343 |
+
false,
|
344 |
+
true
|
345 |
+
);
|
346 |
+
}
|
347 |
+
// }
|
348 |
} else if ( ! $show_upgrade ) {
|
349 |
if ( $fs->is_addon_installed( $addon_id ) ) {
|
350 |
$addon_file = $fs->get_addon_basename( $addon_id );
|
400 |
|
401 |
<?php else : ?>
|
402 |
<?php // Add-on NOT Installed or was never connected.
|
403 |
+
$is_addon_installed_by_filesystem = $fs->is_addon_installed( $addon_id );
|
404 |
?>
|
405 |
<!-- Action -->
|
406 |
+
<td colspan="<?php echo ( $is_addon_installed_by_filesystem || $show_delete_install_button ) ? '5' : '4' ?>">
|
407 |
+
<?php if ( $is_addon_installed_by_filesystem ) : ?>
|
408 |
<?php $addon_file = $fs->get_addon_basename( $addon_id ) ?>
|
409 |
<?php if ( ! isset( $active_plugins_directories_map[ dirname( $addon_file ) ] ) ) : ?>
|
410 |
<a class="button button-primary"
|
424 |
</td>
|
425 |
<!--/ Action -->
|
426 |
<?php endif ?>
|
427 |
+
<?php if ( $show_delete_install_button ) : ?>
|
428 |
+
<!-- Optional Delete Action -->
|
429 |
<td>
|
430 |
<?php
|
431 |
if ( $is_addon_activated ) {
|
common/vendor/freemius/templates/account/partials/site.php
CHANGED
@@ -15,20 +15,26 @@
|
|
15 |
* @var Freemius $fs
|
16 |
* @var FS_Plugin_License $main_license
|
17 |
*/
|
18 |
-
$fs
|
19 |
-
$slug
|
20 |
-
$site
|
21 |
-
$main_license
|
22 |
-
$
|
23 |
-
$
|
24 |
-
$
|
25 |
-
$
|
|
|
|
|
26 |
|
27 |
$install = $VARS['install'];
|
28 |
$is_registered = ! empty( $install );
|
29 |
$license = null;
|
30 |
$trial_plan = $fs->get_trial_plan();
|
31 |
$free_text = fs_text_inline( 'Free', 'free', $slug );
|
|
|
|
|
|
|
|
|
32 |
?>
|
33 |
<tr class="fs-site-details" data-blog-id="<?php echo $blog_id ?>"<?php if ( $is_registered ) : ?> data-install-id="<?php echo $install->id ?>"<?php endif ?>>
|
34 |
<!-- Install ID or Opt-in option -->
|
@@ -72,28 +78,30 @@
|
|
72 |
$view_params['is_localhost'] = FS_Site::is_localhost_by_address( $site['url'] );
|
73 |
}
|
74 |
|
75 |
-
if (
|
76 |
-
$
|
|
|
77 |
|
78 |
-
|
79 |
-
|
80 |
-
} else {
|
81 |
-
if ( is_object( $main_license ) && $main_license->can_activate( $view_params['is_localhost'] ) ) {
|
82 |
-
// Main license is available for activation.
|
83 |
-
$available_license = $main_license;
|
84 |
} else {
|
85 |
-
|
86 |
-
|
87 |
-
|
|
|
|
|
|
|
|
|
88 |
|
89 |
-
|
90 |
-
|
91 |
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
|
96 |
-
|
|
|
97 |
}
|
98 |
}
|
99 |
} ?></td>
|
@@ -106,7 +114,7 @@
|
|
106 |
$plan_title = $free_text;
|
107 |
} else {
|
108 |
if ( $install->is_trial() ) {
|
109 |
-
if ( $trial_plan->id == $install->trial_plan_id ) {
|
110 |
$plan_title = is_string( $trial_plan->name ) ?
|
111 |
strtoupper( $trial_plan->title ) :
|
112 |
fs_text_inline( 'Trial', 'trial', $slug );
|
@@ -231,10 +239,14 @@
|
|
231 |
<nobr><?php fs_esc_html_echo_inline( 'Secret Key', 'secret-key', $slug ) ?>:</nobr>
|
232 |
</td>
|
233 |
<td>
|
234 |
-
<code><?php echo
|
|
|
235 |
<input type="text" value="<?php echo htmlspecialchars( $install->secret_key ) ?>"
|
236 |
style="display: none" readonly/></td>
|
|
|
|
|
237 |
<td><button class="button button-small fs-toggle-visibility"><?php fs_esc_html_echo_x_inline( 'Show', 'verb', 'show', $slug ) ?></button></td>
|
|
|
238 |
</tr>
|
239 |
<?php $row_index ++ ?>
|
240 |
<!--/ Secret Key -->
|
@@ -248,13 +260,17 @@
|
|
248 |
<nobr><?php fs_esc_html_echo_inline( 'License Key', 'license-key', $slug ) ?>:</nobr>
|
249 |
</td>
|
250 |
<td>
|
251 |
-
<code><?php echo
|
|
|
252 |
<input type="text" value="<?php echo htmlspecialchars( $license->secret_key ) ?>"
|
253 |
style="display: none" readonly/></td>
|
|
|
|
|
254 |
<td>
|
255 |
<button class="button button-small fs-toggle-visibility"><?php fs_esc_html_echo_x_inline( 'Show', 'verb', 'show', $slug ) ?></button>
|
256 |
<button class="button button-small activate-license-trigger <?php echo $fs->get_unique_affix() ?>"><?php fs_esc_html_echo_inline( 'Change License', 'change-license', $slug ) ?></button>
|
257 |
</td>
|
|
|
258 |
</tr>
|
259 |
<?php $row_index ++ ?>
|
260 |
<!--/ License Key -->
|
@@ -295,7 +311,7 @@
|
|
295 |
$downgrading_plan_text = fs_text_inline( 'Downgrading your plan', 'downgrading-plan', $slug );
|
296 |
$cancelling_subscription_text = fs_text_inline( 'Cancelling the subscription', 'cancelling-subscription', $slug );
|
297 |
/* translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription' */
|
298 |
-
$downgrade_x_confirm_text = fs_text_inline( '%1$s will immediately stop all future recurring payments and your %s plan license will expire in %s.', 'downgrade-x-confirm', $slug );
|
299 |
$prices_increase_text = fs_text_inline( 'Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price.', 'pricing-increase-warning', $slug );
|
300 |
$after_downgrade_non_blocking_text = fs_text_inline( 'You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support.', 'after-downgrade-non-blocking', $slug );
|
301 |
$after_downgrade_blocking_text = fs_text_inline( 'Once your license expires you can still use the Free version but you will NOT have access to the %s features.', 'after-downgrade-blocking', $slug );
|
15 |
* @var Freemius $fs
|
16 |
* @var FS_Plugin_License $main_license
|
17 |
*/
|
18 |
+
$fs = $VARS['freemius'];
|
19 |
+
$slug = $fs->get_slug();
|
20 |
+
$site = $VARS['site'];
|
21 |
+
$main_license = $VARS['license'];
|
22 |
+
$is_data_debug_mode = $fs->is_data_debug_mode();
|
23 |
+
$is_whitelabeled = $fs->is_whitelabeled();
|
24 |
+
$has_paid_plan = $fs->has_paid_plan();
|
25 |
+
$is_premium = $fs->is_premium();
|
26 |
+
$main_user = $fs->get_user();
|
27 |
+
$blog_id = $site['blog_id'];
|
28 |
|
29 |
$install = $VARS['install'];
|
30 |
$is_registered = ! empty( $install );
|
31 |
$license = null;
|
32 |
$trial_plan = $fs->get_trial_plan();
|
33 |
$free_text = fs_text_inline( 'Free', 'free', $slug );
|
34 |
+
|
35 |
+
if ( $is_whitelabeled && $fs->is_delegated_connection( $blog_id ) ) {
|
36 |
+
$is_whitelabeled = $fs->is_whitelabeled( true, $blog_id );
|
37 |
+
}
|
38 |
?>
|
39 |
<tr class="fs-site-details" data-blog-id="<?php echo $blog_id ?>"<?php if ( $is_registered ) : ?> data-install-id="<?php echo $install->id ?>"<?php endif ?>>
|
40 |
<!-- Install ID or Opt-in option -->
|
78 |
$view_params['is_localhost'] = FS_Site::is_localhost_by_address( $site['url'] );
|
79 |
}
|
80 |
|
81 |
+
if ( ! $is_whitelabeled ) {
|
82 |
+
if ( is_object( $license ) ) {
|
83 |
+
$view_params['license'] = $license;
|
84 |
|
85 |
+
// Show license deactivation button.
|
86 |
+
fs_require_template( 'account/partials/deactivate-license-button.php', $view_params );
|
|
|
|
|
|
|
|
|
87 |
} else {
|
88 |
+
if ( is_object( $main_license ) && $main_license->can_activate( $view_params['is_localhost'] ) ) {
|
89 |
+
// Main license is available for activation.
|
90 |
+
$available_license = $main_license;
|
91 |
+
} else {
|
92 |
+
// Try to find any available license for activation.
|
93 |
+
$available_license = $fs->_get_available_premium_license( $view_params['is_localhost'] );
|
94 |
+
}
|
95 |
|
96 |
+
if ( is_object( $available_license ) ) {
|
97 |
+
$premium_plan = $fs->_get_plan_by_id( $available_license->plan_id );
|
98 |
|
99 |
+
$view_params['license'] = $available_license;
|
100 |
+
$view_params['class'] .= ' button-primary';
|
101 |
+
$view_params['plan'] = $premium_plan;
|
102 |
|
103 |
+
fs_require_template( 'account/partials/activate-license-button.php', $view_params );
|
104 |
+
}
|
105 |
}
|
106 |
}
|
107 |
} ?></td>
|
114 |
$plan_title = $free_text;
|
115 |
} else {
|
116 |
if ( $install->is_trial() ) {
|
117 |
+
if ( is_object( $trial_plan ) && $trial_plan->id == $install->trial_plan_id ) {
|
118 |
$plan_title = is_string( $trial_plan->name ) ?
|
119 |
strtoupper( $trial_plan->title ) :
|
120 |
fs_text_inline( 'Trial', 'trial', $slug );
|
239 |
<nobr><?php fs_esc_html_echo_inline( 'Secret Key', 'secret-key', $slug ) ?>:</nobr>
|
240 |
</td>
|
241 |
<td>
|
242 |
+
<code><?php echo FS_Plugin_License::mask_secret_key_for_html( $install->secret_key ) ?></code>
|
243 |
+
<?php if ( ! $is_whitelabeled ) : ?>
|
244 |
<input type="text" value="<?php echo htmlspecialchars( $install->secret_key ) ?>"
|
245 |
style="display: none" readonly/></td>
|
246 |
+
<?php endif ?>
|
247 |
+
<?php if ( ! $is_whitelabeled ) : ?>
|
248 |
<td><button class="button button-small fs-toggle-visibility"><?php fs_esc_html_echo_x_inline( 'Show', 'verb', 'show', $slug ) ?></button></td>
|
249 |
+
<?php endif ?>
|
250 |
</tr>
|
251 |
<?php $row_index ++ ?>
|
252 |
<!--/ Secret Key -->
|
260 |
<nobr><?php fs_esc_html_echo_inline( 'License Key', 'license-key', $slug ) ?>:</nobr>
|
261 |
</td>
|
262 |
<td>
|
263 |
+
<code><?php echo $license->get_html_escaped_masked_secret_key() ?></code>
|
264 |
+
<?php if ( ! $is_whitelabeled ) : ?>
|
265 |
<input type="text" value="<?php echo htmlspecialchars( $license->secret_key ) ?>"
|
266 |
style="display: none" readonly/></td>
|
267 |
+
<?php endif ?>
|
268 |
+
<?php if ( ! $is_whitelabeled ) : ?>
|
269 |
<td>
|
270 |
<button class="button button-small fs-toggle-visibility"><?php fs_esc_html_echo_x_inline( 'Show', 'verb', 'show', $slug ) ?></button>
|
271 |
<button class="button button-small activate-license-trigger <?php echo $fs->get_unique_affix() ?>"><?php fs_esc_html_echo_inline( 'Change License', 'change-license', $slug ) ?></button>
|
272 |
</td>
|
273 |
+
<?php endif ?>
|
274 |
</tr>
|
275 |
<?php $row_index ++ ?>
|
276 |
<!--/ License Key -->
|
311 |
$downgrading_plan_text = fs_text_inline( 'Downgrading your plan', 'downgrading-plan', $slug );
|
312 |
$cancelling_subscription_text = fs_text_inline( 'Cancelling the subscription', 'cancelling-subscription', $slug );
|
313 |
/* translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription' */
|
314 |
+
$downgrade_x_confirm_text = fs_text_inline( '%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s.', 'downgrade-x-confirm', $slug );
|
315 |
$prices_increase_text = fs_text_inline( 'Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price.', 'pricing-increase-warning', $slug );
|
316 |
$after_downgrade_non_blocking_text = fs_text_inline( 'You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support.', 'after-downgrade-non-blocking', $slug );
|
317 |
$after_downgrade_blocking_text = fs_text_inline( 'Once your license expires you can still use the Free version but you will NOT have access to the %s features.', 'after-downgrade-blocking', $slug );
|
common/vendor/freemius/templates/add-ons.php
CHANGED
@@ -1,441 +1,502 @@
|
|
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 |
-
* @var array $VARS
|
15 |
-
* @var Freemius
|
16 |
-
*/
|
17 |
-
$fs = freemius( $VARS['id'] );
|
18 |
-
|
19 |
-
$slug = $fs->get_slug();
|
20 |
-
|
21 |
-
$open_addon_slug = fs_request_get( 'slug' );
|
22 |
-
|
23 |
-
$open_addon = false;
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
$
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
$
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
$
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
441 |
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 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @var array $VARS
|
15 |
+
* @var Freemius
|
16 |
+
*/
|
17 |
+
$fs = freemius( $VARS['id'] );
|
18 |
+
|
19 |
+
$slug = $fs->get_slug();
|
20 |
+
|
21 |
+
$open_addon_slug = fs_request_get( 'slug' );
|
22 |
+
|
23 |
+
$open_addon = false;
|
24 |
+
|
25 |
+
$is_data_debug_mode = $fs->is_data_debug_mode();
|
26 |
+
$is_whitelabeled = $fs->is_whitelabeled();
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @var FS_Plugin[]
|
30 |
+
*/
|
31 |
+
$addons = $fs->get_addons();
|
32 |
+
|
33 |
+
$has_addons = ( is_array( $addons ) && 0 < count( $addons ) );
|
34 |
+
|
35 |
+
$account_addon_ids = $fs->get_updated_account_addons();
|
36 |
+
|
37 |
+
$download_latest_text = fs_text_x_inline( 'Download Latest', 'as download latest version', 'download-latest', $slug );
|
38 |
+
$view_details_text = fs_text_inline( 'View details', 'view-details', $slug );
|
39 |
+
|
40 |
+
$has_tabs = $fs->_add_tabs_before_content();
|
41 |
+
|
42 |
+
$fs_blog_id = ( is_multisite() && ! is_network_admin() ) ?
|
43 |
+
get_current_blog_id() :
|
44 |
+
0;
|
45 |
+
?>
|
46 |
+
<div id="fs_addons" class="wrap fs-section">
|
47 |
+
<?php if ( ! $has_tabs ) : ?>
|
48 |
+
<h2><?php echo esc_html( sprintf( fs_text_inline( 'Add Ons for %s', 'add-ons-for-x', $slug ), $fs->get_plugin_name() ) ) ?></h2>
|
49 |
+
<?php endif ?>
|
50 |
+
|
51 |
+
<?php $fs->do_action( 'addons/after_title' ) ?>
|
52 |
+
|
53 |
+
<div id="poststuff">
|
54 |
+
<?php if ( ! $has_addons ) : ?>
|
55 |
+
<h3><?php echo esc_html( sprintf(
|
56 |
+
'%s... %s',
|
57 |
+
fs_text_x_inline( 'Oops', 'exclamation', 'oops', $slug ),
|
58 |
+
fs_text_inline( 'We couldn\'t load the add-ons list. It\'s probably an issue on our side, please try to come back in few minutes.', 'add-ons-missing', $slug )
|
59 |
+
) ) ?></h3>
|
60 |
+
<?php endif ?>
|
61 |
+
<ul class="fs-cards-list">
|
62 |
+
<?php if ( $has_addons ) : ?>
|
63 |
+
<?php
|
64 |
+
$plans_and_pricing_by_addon_id = $fs->_get_addons_plans_and_pricing_map_by_id();
|
65 |
+
|
66 |
+
$active_plugins_directories_map = Freemius::get_active_plugins_directories_map( $fs_blog_id );
|
67 |
+
?>
|
68 |
+
<?php
|
69 |
+
$hide_all_addons_data = false;
|
70 |
+
|
71 |
+
if ( $fs->is_whitelabeled_by_flag() ) {
|
72 |
+
$hide_all_addons_data = true;
|
73 |
+
|
74 |
+
$addon_ids = $fs->get_updated_account_addons();
|
75 |
+
$installed_addons = $fs->get_installed_addons();
|
76 |
+
foreach ( $installed_addons as $fs_addon ) {
|
77 |
+
$addon_ids[] = $fs_addon->get_id();
|
78 |
+
}
|
79 |
+
|
80 |
+
if ( ! empty( $addon_ids ) ) {
|
81 |
+
$addon_ids = array_unique( $addon_ids );
|
82 |
+
}
|
83 |
+
|
84 |
+
foreach ( $addon_ids as $addon_id ) {
|
85 |
+
$addon = $fs->get_addon( $addon_id );
|
86 |
+
|
87 |
+
if ( ! is_object( $addon ) ) {
|
88 |
+
continue;
|
89 |
+
}
|
90 |
+
|
91 |
+
$addon_storage = FS_Storage::instance( WP_FS__MODULE_TYPE_PLUGIN, $addon->slug );
|
92 |
+
|
93 |
+
if ( ! $addon_storage->is_whitelabeled ) {
|
94 |
+
$hide_all_addons_data = false;
|
95 |
+
break;
|
96 |
+
}
|
97 |
+
|
98 |
+
if ( $is_data_debug_mode ) {
|
99 |
+
$is_whitelabeled = false;
|
100 |
+
}
|
101 |
+
}
|
102 |
+
}
|
103 |
+
?>
|
104 |
+
<?php foreach ( $addons as $addon ) : ?>
|
105 |
+
<?php
|
106 |
+
$basename = $fs->get_addon_basename( $addon->id );
|
107 |
+
|
108 |
+
$is_addon_installed = file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $basename ) );
|
109 |
+
|
110 |
+
if ( ! $is_addon_installed && $hide_all_addons_data ) {
|
111 |
+
continue;
|
112 |
+
}
|
113 |
+
|
114 |
+
$is_addon_activated = $is_addon_installed ?
|
115 |
+
$fs->is_addon_activated( $addon->id ) :
|
116 |
+
false;
|
117 |
+
|
118 |
+
$is_plugin_active = (
|
119 |
+
$is_addon_activated ||
|
120 |
+
isset( $active_plugins_directories_map[ dirname( $basename ) ] )
|
121 |
+
);
|
122 |
+
|
123 |
+
$open_addon = ( $open_addon || ( $open_addon_slug === $addon->slug ) );
|
124 |
+
|
125 |
+
$price = 0;
|
126 |
+
$has_trial = false;
|
127 |
+
$has_free_plan = false;
|
128 |
+
$has_paid_plan = false;
|
129 |
+
|
130 |
+
if ( isset( $plans_and_pricing_by_addon_id[$addon->id] ) ) {
|
131 |
+
$plans = $plans_and_pricing_by_addon_id[$addon->id];
|
132 |
+
|
133 |
+
if ( is_array( $plans ) && 0 < count( $plans ) ) {
|
134 |
+
foreach ( $plans as $plan ) {
|
135 |
+
if ( ! isset( $plan->pricing ) ||
|
136 |
+
! is_array( $plan->pricing ) ||
|
137 |
+
0 == count( $plan->pricing )
|
138 |
+
) {
|
139 |
+
// No pricing means a free plan.
|
140 |
+
$has_free_plan = true;
|
141 |
+
continue;
|
142 |
+
}
|
143 |
+
|
144 |
+
|
145 |
+
$has_paid_plan = true;
|
146 |
+
$has_trial = $has_trial || ( is_numeric( $plan->trial_period ) && ( $plan->trial_period > 0 ) );
|
147 |
+
|
148 |
+
$min_price = 999999;
|
149 |
+
foreach ( $plan->pricing as $pricing ) {
|
150 |
+
$pricing = new FS_Pricing( $pricing );
|
151 |
+
|
152 |
+
if ( ! $pricing->is_usd() ) {
|
153 |
+
/**
|
154 |
+
* Skip non-USD pricing.
|
155 |
+
*
|
156 |
+
* @author Leo Fajardo (@leorw)
|
157 |
+
* @since 2.3.1
|
158 |
+
*/
|
159 |
+
continue;
|
160 |
+
}
|
161 |
+
|
162 |
+
if ( $pricing->has_annual() ) {
|
163 |
+
$min_price = min( $min_price, $pricing->annual_price );
|
164 |
+
} else if ( $pricing->has_monthly() ) {
|
165 |
+
$min_price = min( $min_price, 12 * $pricing->monthly_price );
|
166 |
+
}
|
167 |
+
}
|
168 |
+
|
169 |
+
if ( $min_price < 999999 ) {
|
170 |
+
$price = $min_price;
|
171 |
+
}
|
172 |
+
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
if ( ! $has_paid_plan && ! $has_free_plan ) {
|
177 |
+
continue;
|
178 |
+
}
|
179 |
+
}
|
180 |
+
?>
|
181 |
+
<li class="fs-card fs-addon" data-slug="<?php echo $addon->slug ?>">
|
182 |
+
<?php
|
183 |
+
$view_details_link = sprintf( '<a href="%s" aria-label="%s" data-title="%s"',
|
184 |
+
esc_url( network_admin_url( 'plugin-install.php?fs_allow_updater_and_dialog=true' . ( ! empty( $fs_blog_id ) ? '&fs_blog_id=' . $fs_blog_id : '' ) . '&tab=plugin-information&parent_plugin_id=' . $fs->get_id() . '&plugin=' . $addon->slug .
|
185 |
+
'&TB_iframe=true&width=600&height=550' ) ),
|
186 |
+
esc_attr( sprintf( fs_text_inline( 'More information about %s', 'more-information-about-x', $slug ), $addon->title ) ),
|
187 |
+
esc_attr( $addon->title )
|
188 |
+
) . ' class="thickbox%s">%s</a>';
|
189 |
+
|
190 |
+
echo sprintf(
|
191 |
+
$view_details_link,
|
192 |
+
/**
|
193 |
+
* Additional class.
|
194 |
+
*
|
195 |
+
* @author Leo Fajardo (@leorw)
|
196 |
+
* @since 2.2.4
|
197 |
+
*/
|
198 |
+
' fs-overlay',
|
199 |
+
/**
|
200 |
+
* Set the view details link text to an empty string since it is an overlay that
|
201 |
+
* doesn't really need a text and whose purpose is to open the details dialog when
|
202 |
+
* the card is clicked.
|
203 |
+
*
|
204 |
+
* @author Leo Fajardo (@leorw)
|
205 |
+
* @since 2.2.4
|
206 |
+
*/
|
207 |
+
''
|
208 |
+
);
|
209 |
+
?>
|
210 |
+
<?php
|
211 |
+
if ( is_null( $addon->info ) ) {
|
212 |
+
$addon->info = new stdClass();
|
213 |
+
}
|
214 |
+
if ( ! isset( $addon->info->card_banner_url ) ) {
|
215 |
+
$addon->info->card_banner_url = '//dashboard.freemius.com/assets/img/marketing/blueprint-300x100.jpg';
|
216 |
+
}
|
217 |
+
if ( ! isset( $addon->info->short_description ) ) {
|
218 |
+
$addon->info->short_description = 'What\'s the one thing your add-on does really, really well?';
|
219 |
+
}
|
220 |
+
?>
|
221 |
+
<div class="fs-inner">
|
222 |
+
<ul>
|
223 |
+
<li class="fs-card-banner"
|
224 |
+
style="background-image: url('<?php echo $addon->info->card_banner_url ?>');"><?php
|
225 |
+
if ( $is_plugin_active || $is_addon_installed ) {
|
226 |
+
echo sprintf(
|
227 |
+
'<span class="fs-badge fs-installed-addon-badge">%s</span>',
|
228 |
+
esc_html( $is_plugin_active ?
|
229 |
+
fs_text_x_inline( 'Active', 'active add-on', 'active-addon', $slug ) :
|
230 |
+
fs_text_x_inline( 'Installed', 'installed add-on', 'installed-addon', $slug )
|
231 |
+
)
|
232 |
+
);
|
233 |
+
}
|
234 |
+
?></li>
|
235 |
+
<!-- <li class="fs-tag"></li> -->
|
236 |
+
<li class="fs-title"><?php echo $addon->title ?></li>
|
237 |
+
<li class="fs-offer">
|
238 |
+
<span
|
239 |
+
class="fs-price"><?php
|
240 |
+
if ( $is_whitelabeled ) {
|
241 |
+
echo ' ';
|
242 |
+
} else {
|
243 |
+
$descriptors = array();
|
244 |
+
|
245 |
+
if ($has_free_plan)
|
246 |
+
$descriptors[] = fs_text_inline( 'Free', 'free', $slug );
|
247 |
+
if ($has_paid_plan && $price > 0)
|
248 |
+
$descriptors[] = '$' . number_format( $price, 2 );
|
249 |
+
if ($has_trial)
|
250 |
+
$descriptors[] = fs_text_x_inline( 'Trial', 'trial period', 'trial', $slug );
|
251 |
+
|
252 |
+
echo implode(' - ', $descriptors);
|
253 |
+
|
254 |
+
} ?></span>
|
255 |
+
</li>
|
256 |
+
<li class="fs-description"><?php echo ! empty( $addon->info->short_description ) ? $addon->info->short_description : 'SHORT DESCRIPTION' ?></li>
|
257 |
+
<?php
|
258 |
+
$is_free_only_wp_org_compliant = ( ! $has_paid_plan && $addon->is_wp_org_compliant );
|
259 |
+
|
260 |
+
$is_allowed_to_install = (
|
261 |
+
$fs->is_allowed_to_install() ||
|
262 |
+
$is_free_only_wp_org_compliant
|
263 |
+
);
|
264 |
+
|
265 |
+
$show_premium_activation_or_installation_action = true;
|
266 |
+
|
267 |
+
if ( ! in_array( $addon->id, $account_addon_ids ) ) {
|
268 |
+
$show_premium_activation_or_installation_action = false;
|
269 |
+
} else if ( $is_addon_installed ) {
|
270 |
+
/**
|
271 |
+
* If any add-on's version (free or premium) is installed, check if the
|
272 |
+
* premium version can be activated and show the relevant action. Otherwise,
|
273 |
+
* show the relevant action for the free version.
|
274 |
+
*
|
275 |
+
* @author Leo Fajardo (@leorw)
|
276 |
+
* @since 2.4.5
|
277 |
+
*/
|
278 |
+
$fs_addon = $is_addon_activated ?
|
279 |
+
$fs->get_addon_instance( $addon->id ) :
|
280 |
+
null;
|
281 |
+
|
282 |
+
$premium_plugin_basename = is_object( $fs_addon ) ?
|
283 |
+
$fs_addon->premium_plugin_basename() :
|
284 |
+
"{$addon->premium_slug}/{$addon->slug}.php";
|
285 |
+
|
286 |
+
if (
|
287 |
+
( $is_addon_activated && $fs_addon->is_premium() ) ||
|
288 |
+
file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $premium_plugin_basename ) )
|
289 |
+
) {
|
290 |
+
$basename = $premium_plugin_basename;
|
291 |
+
}
|
292 |
+
|
293 |
+
$show_premium_activation_or_installation_action = (
|
294 |
+
( ! $is_addon_activated || ! $fs_addon->is_premium() ) &&
|
295 |
+
/**
|
296 |
+
* This check is needed for cases when an active add-on doesn't have an
|
297 |
+
* associated Freemius instance.
|
298 |
+
*
|
299 |
+
* @author Leo Fajardo (@leorw)
|
300 |
+
* @since 2.4.5
|
301 |
+
*/
|
302 |
+
( ! $is_plugin_active )
|
303 |
+
);
|
304 |
+
}
|
305 |
+
?>
|
306 |
+
<?php if ( ! $show_premium_activation_or_installation_action ) : ?>
|
307 |
+
<li class="fs-cta"><a class="button"><?php echo esc_html( $view_details_text ) ?></a></li>
|
308 |
+
<?php else : ?>
|
309 |
+
<?php
|
310 |
+
$latest_download_local_url = $is_free_only_wp_org_compliant ?
|
311 |
+
null :
|
312 |
+
$fs->_get_latest_download_local_url( $addon->id );
|
313 |
+
?>
|
314 |
+
|
315 |
+
<li class="fs-cta fs-dropdown">
|
316 |
+
<div class="button-group">
|
317 |
+
<?php if ( $is_allowed_to_install ) : ?>
|
318 |
+
<?php
|
319 |
+
if ( ! $is_addon_installed ) {
|
320 |
+
echo sprintf(
|
321 |
+
'<a class="button button-primary" href="%s">%s</a>',
|
322 |
+
wp_nonce_url( self_admin_url( 'update.php?' . ( ( $has_paid_plan || ! $addon->is_wp_org_compliant ) ? 'fs_allow_updater_and_dialog=true&' : '' ) . 'action=install-plugin&plugin=' . $addon->slug ), 'install-plugin_' . $addon->slug ),
|
323 |
+
fs_esc_html_inline( 'Install Now', 'install-now', $slug )
|
324 |
+
);
|
325 |
+
} else {
|
326 |
+
echo sprintf(
|
327 |
+
'<a class="button button-primary edit" href="%s" title="%s" target="_parent">%s</a>',
|
328 |
+
wp_nonce_url( 'plugins.php?action=activate&plugin=' . $basename, 'activate-plugin_' . $basename ),
|
329 |
+
fs_esc_attr_inline( 'Activate this add-on', 'activate-this-addon', $addon->slug ),
|
330 |
+
fs_text_inline( 'Activate', 'activate', $addon->slug )
|
331 |
+
);
|
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(
|
343 |
+
$view_details_link,
|
344 |
+
/**
|
345 |
+
* No additional class.
|
346 |
+
*
|
347 |
+
* @author Leo Fajardo (@leorw)
|
348 |
+
* @since 2.2.4
|
349 |
+
*/
|
350 |
+
'',
|
351 |
+
/**
|
352 |
+
* Set the view details link text to a non-empty string since it is an
|
353 |
+
* item in the dropdown list and the text should be visible.
|
354 |
+
*
|
355 |
+
* @author Leo Fajardo (@leorw)
|
356 |
+
* @since 2.2.4
|
357 |
+
*/
|
358 |
+
esc_html( $view_details_text )
|
359 |
+
);
|
360 |
+
?></li>
|
361 |
+
</ul></div>
|
362 |
+
</div>
|
363 |
+
</li>
|
364 |
+
<?php endif ?>
|
365 |
+
</ul>
|
366 |
+
</div>
|
367 |
+
</li>
|
368 |
+
<?php endforeach ?>
|
369 |
+
<?php endif ?>
|
370 |
+
</ul>
|
371 |
+
</div>
|
372 |
+
|
373 |
+
<?php $fs->do_action( 'addons/after_addons' ) ?>
|
374 |
+
</div>
|
375 |
+
<script type="text/javascript">
|
376 |
+
(function( $, undef ) {
|
377 |
+
<?php if ( $open_addon ) : ?>
|
378 |
+
|
379 |
+
var interval = setInterval(function () {
|
380 |
+
// Open add-on information page.
|
381 |
+
<?php
|
382 |
+
/**
|
383 |
+
* @author Vova Feldman
|
384 |
+
*
|
385 |
+
* This code does NOT expose an XSS vulnerability because:
|
386 |
+
* 1. This page only renders for admins, so if an attacker manage to get
|
387 |
+
* admin access, they can do more harm.
|
388 |
+
* 2. This code won't be rendered unless $open_addon_slug matches any of
|
389 |
+
* the plugin's add-ons slugs.
|
390 |
+
*/
|
391 |
+
?>
|
392 |
+
$('.fs-card[data-slug=<?php echo $open_addon_slug ?>] a').click();
|
393 |
+
if ($('#TB_iframeContent').length > 0) {
|
394 |
+
clearInterval(interval);
|
395 |
+
interval = null;
|
396 |
+
}
|
397 |
+
}, 200);
|
398 |
+
|
399 |
+
<?php else : ?>
|
400 |
+
|
401 |
+
$( '.fs-card.fs-addon' )
|
402 |
+
.mouseover(function() {
|
403 |
+
var $this = $( this );
|
404 |
+
|
405 |
+
$this.find( '.fs-cta .button' ).addClass( 'button-primary' );
|
406 |
+
|
407 |
+
if ( 0 === $this.find( '.fs-dropdown-arrow-button.active' ).length ) {
|
408 |
+
/**
|
409 |
+
* When hovering over a card, close the dropdown on any other card.
|
410 |
+
*
|
411 |
+
* @author Leo Fajardo (@leorw)
|
412 |
+
* @since 2.2.4
|
413 |
+
*/
|
414 |
+
toggleDropdown();
|
415 |
+
}
|
416 |
+
}).mouseout(function( evt ) {
|
417 |
+
var $relatedTarget = $( evt.relatedTarget );
|
418 |
+
|
419 |
+
if ( 0 !== $relatedTarget.parents( '.fs-addon' ).length ) {
|
420 |
+
return true;
|
421 |
+
}
|
422 |
+
|
423 |
+
var $this = $( this );
|
424 |
+
|
425 |
+
/**
|
426 |
+
* Set the color of the "View details" button to "secondary".
|
427 |
+
*
|
428 |
+
* @author Leo Fajardo (@leorw)
|
429 |
+
* @since 2.2.4
|
430 |
+
*/
|
431 |
+
$this.find( '.fs-cta .button' ).filter(function() {
|
432 |
+
/**
|
433 |
+
* Keep the "primary" color of the dropdown arrow button, "Install Now" button, and
|
434 |
+
* "Download Latest" button.
|
435 |
+
|
436 |
+
* @author Leo Fajardo (@leorw)
|
437 |
+
* @since 2.2.4
|
438 |
+
*/
|
439 |
+
return $( this ).parent().is( ':not(.button-group)' );
|
440 |
+
}).removeClass('button-primary');
|
441 |
+
|
442 |
+
toggleDropdown( $this.find( '.fs-dropdown' ), false );
|
443 |
+
}).find( 'a.thickbox, .button:not(.fs-dropdown-arrow-button)' ).click(function() {
|
444 |
+
toggleDropdown();
|
445 |
+
});
|
446 |
+
|
447 |
+
<?php endif ?>
|
448 |
+
|
449 |
+
var $dropdowns = $( '.fs-dropdown' );
|
450 |
+
if ( 0 !== $dropdowns.length ) {
|
451 |
+
$dropdowns.find( '.fs-dropdown-arrow-button' ).click(function() {
|
452 |
+
var $this = $( this ),
|
453 |
+
$dropdown = $this.parents( '.fs-dropdown' );
|
454 |
+
|
455 |
+
toggleDropdown( $dropdown, ! $dropdown.hasClass( 'active' ) );
|
456 |
+
});
|
457 |
+
}
|
458 |
+
|
459 |
+
/**
|
460 |
+
* Returns the default state of the dropdown arrow button and hides the dropdown list.
|
461 |
+
*
|
462 |
+
* @author Leo Fajardo (@leorw)
|
463 |
+
* @since 2.2.4
|
464 |
+
*
|
465 |
+
* @param {(Object|undefined)} [$dropdown]
|
466 |
+
* @param {(Boolean|undefined)} [state]
|
467 |
+
*/
|
468 |
+
function toggleDropdown( $dropdown, state ) {
|
469 |
+
if ( undef === $dropdown ) {
|
470 |
+
var $activeDropdown = $dropdowns.find( '.active' );
|
471 |
+
if ( 0 !== $activeDropdown.length ) {
|
472 |
+
$dropdown = $activeDropdown;
|
473 |
+
}
|
474 |
+
}
|
475 |
+
|
476 |
+
if ( undef === $dropdown ) {
|
477 |
+
return;
|
478 |
+
}
|
479 |
+
|
480 |
+
if ( undef === state ) {
|
481 |
+
state = false;
|
482 |
+
}
|
483 |
+
|
484 |
+
$dropdown.toggleClass( 'active', state );
|
485 |
+
$dropdown.find( '.fs-dropdown-list' ).toggle( state );
|
486 |
+
$dropdown.find( '.fs-dropdown-arrow-button' ).toggleClass( 'active', state );
|
487 |
+
}
|
488 |
+
})( jQuery );
|
489 |
+
</script>
|
490 |
+
<?php
|
491 |
+
if ( $has_tabs ) {
|
492 |
+
$fs->_add_tabs_after_content();
|
493 |
+
}
|
494 |
+
|
495 |
+
$params = array(
|
496 |
+
'page' => 'addons',
|
497 |
+
'module_id' => $fs->get_id(),
|
498 |
+
'module_type' => $fs->get_module_type(),
|
499 |
+
'module_slug' => $slug,
|
500 |
+
'module_version' => $fs->get_plugin_version(),
|
501 |
+
);
|
502 |
fs_require_template( 'powered-by.php', $params );
|
common/vendor/freemius/templates/connect.php
CHANGED
@@ -40,8 +40,8 @@
|
|
40 |
|
41 |
$freemius_site_www = 'https://freemius.com';
|
42 |
|
43 |
-
$freemius_usage_tracking_url = $
|
44 |
-
$freemius_plugin_terms_url = $
|
45 |
|
46 |
$freemius_site_url = $fs->is_premium() ?
|
47 |
$freemius_site_www :
|
@@ -72,7 +72,7 @@
|
|
72 |
$is_optin_dialog = (
|
73 |
$fs->is_theme() &&
|
74 |
$fs->is_themes_page() &&
|
75 |
-
|
76 |
);
|
77 |
|
78 |
if ( $is_optin_dialog ) {
|
@@ -131,6 +131,14 @@
|
|
131 |
?>
|
132 |
<?php
|
133 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
?>
|
135 |
<div id="fs_connect"
|
136 |
class="wrap<?php if ( ! fs_is_network_admin() && ( ! $fs->is_enable_anonymous() || $is_pending_activation || $require_license_key ) ) {
|
@@ -322,6 +330,7 @@
|
|
322 |
<input type="hidden" name="fs_action"
|
323 |
value="<?php echo $fs->get_unique_affix() ?>_activate_existing">
|
324 |
<?php wp_nonce_field( 'activate_existing_' . $fs->get_public_key() ) ?>
|
|
|
325 |
<button class="button button-primary" tabindex="1"
|
326 |
type="submit"><?php echo esc_html( $button_label ) ?></button>
|
327 |
</form>
|
@@ -331,6 +340,7 @@
|
|
331 |
<?php foreach ( $optin_params as $name => $value ) : ?>
|
332 |
<input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
|
333 |
<?php endforeach ?>
|
|
|
334 |
<button class="button button-primary" tabindex="1"
|
335 |
type="submit"<?php if ( $require_license_key ) {
|
336 |
echo ' disabled="disabled"';
|
@@ -340,31 +350,42 @@
|
|
340 |
</div><?php
|
341 |
|
342 |
// Set core permission list items.
|
343 |
-
$permissions = array(
|
344 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
'icon-class' => 'dashicons dashicons-admin-users',
|
346 |
'label' => $fs->get_text_inline( 'Your Profile Overview', 'permissions-profile' ),
|
347 |
'desc' => $fs->get_text_inline( 'Name and email address', 'permissions-profile_desc' ),
|
348 |
'priority' => 5,
|
349 |
-
)
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
),
|
356 |
-
'
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
),
|
362 |
-
'
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
),
|
|
|
|
|
|
|
368 |
);
|
369 |
|
370 |
// Add newsletter permissions if enabled.
|
@@ -377,6 +398,14 @@
|
|
377 |
);
|
378 |
}
|
379 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
380 |
// Allow filtering of the permissions list.
|
381 |
$permissions = $fs->apply_filters( 'permission_list', $permissions );
|
382 |
|
@@ -399,8 +428,13 @@
|
|
399 |
<li id="fs-permission-<?php echo esc_attr( $id ); ?>"
|
400 |
class="fs-permission fs-<?php echo esc_attr( $id ); ?>">
|
401 |
<i class="<?php echo esc_attr( $permission['icon-class'] ); ?>"></i>
|
|
|
|
|
|
|
|
|
|
|
402 |
|
403 |
-
<div>
|
404 |
<span><?php echo esc_html( $permission['label'] ); ?></span>
|
405 |
|
406 |
<p><?php echo esc_html( $permission['desc'] ); ?></p>
|
@@ -431,6 +465,14 @@
|
|
431 |
</div>
|
432 |
</div>
|
433 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
434 |
if ( $is_optin_dialog ) { ?>
|
435 |
</div>
|
436 |
<?php
|
@@ -659,6 +701,10 @@
|
|
659 |
var ajaxOptin = ( requireLicenseKey || isNetworkActive );
|
660 |
|
661 |
$form.on('submit', function () {
|
|
|
|
|
|
|
|
|
662 |
/**
|
663 |
* @author Vova Feldman (@svovaf)
|
664 |
* @since 1.1.9
|
@@ -711,6 +757,8 @@
|
|
711 |
}
|
712 |
|
713 |
data.is_marketing_allowed = isMarketingAllowed;
|
|
|
|
|
714 |
}
|
715 |
|
716 |
$marketingOptin.removeClass( 'error' );
|
@@ -813,6 +861,12 @@
|
|
813 |
return false;
|
814 |
});
|
815 |
|
|
|
|
|
|
|
|
|
|
|
|
|
816 |
if (requireLicenseKey) {
|
817 |
/**
|
818 |
* Submit license key on enter.
|
40 |
|
41 |
$freemius_site_www = 'https://freemius.com';
|
42 |
|
43 |
+
$freemius_usage_tracking_url = $fs->get_usage_tracking_terms_url();
|
44 |
+
$freemius_plugin_terms_url = $fs->get_eula_url();
|
45 |
|
46 |
$freemius_site_url = $fs->is_premium() ?
|
47 |
$freemius_site_www :
|
72 |
$is_optin_dialog = (
|
73 |
$fs->is_theme() &&
|
74 |
$fs->is_themes_page() &&
|
75 |
+
$fs->show_opt_in_on_themes_page()
|
76 |
);
|
77 |
|
78 |
if ( $is_optin_dialog ) {
|
131 |
?>
|
132 |
<?php
|
133 |
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Allows developers to include custom HTML before the opt-in content.
|
137 |
+
*
|
138 |
+
* @author Vova Feldman
|
139 |
+
* @since 2.3.2
|
140 |
+
*/
|
141 |
+
$fs->do_action( 'connect/before' );
|
142 |
?>
|
143 |
<div id="fs_connect"
|
144 |
class="wrap<?php if ( ! fs_is_network_admin() && ( ! $fs->is_enable_anonymous() || $is_pending_activation || $require_license_key ) ) {
|
330 |
<input type="hidden" name="fs_action"
|
331 |
value="<?php echo $fs->get_unique_affix() ?>_activate_existing">
|
332 |
<?php wp_nonce_field( 'activate_existing_' . $fs->get_public_key() ) ?>
|
333 |
+
<input type="hidden" name="is_extensions_tracking_allowed" value="1">
|
334 |
<button class="button button-primary" tabindex="1"
|
335 |
type="submit"><?php echo esc_html( $button_label ) ?></button>
|
336 |
</form>
|
340 |
<?php foreach ( $optin_params as $name => $value ) : ?>
|
341 |
<input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
|
342 |
<?php endforeach ?>
|
343 |
+
<input type="hidden" name="is_extensions_tracking_allowed" value="1">
|
344 |
<button class="button button-primary" tabindex="1"
|
345 |
type="submit"<?php if ( $require_license_key ) {
|
346 |
echo ' disabled="disabled"';
|
350 |
</div><?php
|
351 |
|
352 |
// Set core permission list items.
|
353 |
+
$permissions = array();
|
354 |
+
|
355 |
+
/**
|
356 |
+
* When activating a license key the information of the admin is not collected, we gather the user info from the license.
|
357 |
+
*
|
358 |
+
* @since 2.3.2
|
359 |
+
* @author Vova Feldman
|
360 |
+
*/
|
361 |
+
if ( ! $require_license_key ) {
|
362 |
+
$permissions['profile'] = array(
|
363 |
'icon-class' => 'dashicons dashicons-admin-users',
|
364 |
'label' => $fs->get_text_inline( 'Your Profile Overview', 'permissions-profile' ),
|
365 |
'desc' => $fs->get_text_inline( 'Name and email address', 'permissions-profile_desc' ),
|
366 |
'priority' => 5,
|
367 |
+
);
|
368 |
+
}
|
369 |
+
|
370 |
+
$permissions['site'] = array(
|
371 |
+
'icon-class' => 'dashicons dashicons-admin-settings',
|
372 |
+
'label' => $fs->get_text_inline( 'Your Site Overview', 'permissions-site' ),
|
373 |
+
'desc' => $fs->get_text_inline( 'Site URL, WP version, PHP info', 'permissions-site_desc' ),
|
374 |
+
'priority' => 10,
|
375 |
+
);
|
376 |
+
|
377 |
+
$permissions['notices'] = array(
|
378 |
+
'icon-class' => 'dashicons dashicons-testimonial',
|
379 |
+
'label' => $fs->get_text_inline( 'Admin Notices', 'permissions-admin-notices' ),
|
380 |
+
'desc' => $fs->get_text_inline( 'Updates, announcements, marketing, no spam', 'permissions-newsletter_desc' ),
|
381 |
+
'priority' => 13,
|
382 |
+
);
|
383 |
+
|
384 |
+
$permissions['events'] = array(
|
385 |
+
'icon-class' => 'dashicons dashicons-admin-' . ( $fs->is_plugin() ? 'plugins' : 'appearance' ),
|
386 |
+
'label' => sprintf( $fs->get_text_inline( 'Current %s Events', 'permissions-events' ), ucfirst( $fs->get_module_type() ) ),
|
387 |
+
'desc' => $fs->get_text_inline( 'Activation, deactivation and uninstall', 'permissions-events_desc' ),
|
388 |
+
'priority' => 20,
|
389 |
);
|
390 |
|
391 |
// Add newsletter permissions if enabled.
|
398 |
);
|
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.
|
410 |
$permissions = $fs->apply_filters( 'permission_list', $permissions );
|
411 |
|
428 |
<li id="fs-permission-<?php echo esc_attr( $id ); ?>"
|
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 ?>
|
436 |
|
437 |
+
<div class="fs-permission-description">
|
438 |
<span><?php echo esc_html( $permission['label'] ); ?></span>
|
439 |
|
440 |
<p><?php echo esc_html( $permission['desc'] ); ?></p>
|
465 |
</div>
|
466 |
</div>
|
467 |
<?php
|
468 |
+
/**
|
469 |
+
* Allows developers to include custom HTML after the opt-in content.
|
470 |
+
*
|
471 |
+
* @author Vova Feldman
|
472 |
+
* @since 2.3.2
|
473 |
+
*/
|
474 |
+
$fs->do_action( 'connect/after' );
|
475 |
+
|
476 |
if ( $is_optin_dialog ) { ?>
|
477 |
</div>
|
478 |
<?php
|
701 |
var ajaxOptin = ( requireLicenseKey || isNetworkActive );
|
702 |
|
703 |
$form.on('submit', function () {
|
704 |
+
var isExtensionsTrackingAllowed = $( '#fs-permission-extensions .fs-switch' ).hasClass( 'fs-on' );
|
705 |
+
|
706 |
+
$( 'input[name=is_extensions_tracking_allowed]' ).val( isExtensionsTrackingAllowed ? 1 : 0 );
|
707 |
+
|
708 |
/**
|
709 |
* @author Vova Feldman (@svovaf)
|
710 |
* @since 1.1.9
|
757 |
}
|
758 |
|
759 |
data.is_marketing_allowed = isMarketingAllowed;
|
760 |
+
|
761 |
+
data.is_extensions_tracking_allowed = isExtensionsTrackingAllowed;
|
762 |
}
|
763 |
|
764 |
$marketingOptin.removeClass( 'error' );
|
861 |
return false;
|
862 |
});
|
863 |
|
864 |
+
$( '.fs-switch' ).click( function () {
|
865 |
+
$(this)
|
866 |
+
.toggleClass( 'fs-on' )
|
867 |
+
.toggleClass( 'fs-off' );
|
868 |
+
});
|
869 |
+
|
870 |
if (requireLicenseKey) {
|
871 |
/**
|
872 |
* Submit license key on enter.
|
common/vendor/freemius/templates/debug.php
CHANGED
@@ -1,726 +1,759 @@
|
|
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.1.1
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
global $fs_active_plugins;
|
14 |
-
|
15 |
-
$fs_options = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true );
|
16 |
-
|
17 |
-
$off_text = fs_text_x_inline( 'Off', 'as turned off' );
|
18 |
-
$on_text = fs_text_x_inline( 'On', 'as turned on' );
|
19 |
-
?>
|
20 |
-
<h1><?php echo fs_text_inline( 'Freemius Debug' ) . ' - ' . fs_text_inline( 'SDK' ) . ' v.' . $fs_active_plugins->newest->version ?></h1>
|
21 |
-
<div>
|
22 |
-
<!-- Debugging Switch -->
|
23 |
-
<?php //$debug_mode = get_option( 'fs_debug_mode', null ) ?>
|
24 |
-
<span class="switch-label"><?php fs_esc_html_echo_x_inline( 'Debugging', 'as code debugging' ) ?></span>
|
25 |
-
|
26 |
-
<div class="switch <?php echo WP_FS__DEBUG_SDK ? '
|
27 |
-
<div class="toggle"></div>
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
<
|
55 |
-
<
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
<
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
<
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
<
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
}
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
<
|
179 |
-
<
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
echo '
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
<
|
200 |
-
<
|
201 |
-
|
202 |
-
|
203 |
-
<th><?php
|
204 |
-
<th><?php fs_esc_html_echo_inline( '
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
echo
|
214 |
-
|
215 |
-
<td><?php echo $data->
|
216 |
-
<td><?php echo $
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
?>
|
230 |
-
|
231 |
-
<?php
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
<th><?php
|
239 |
-
<th><?php fs_esc_html_echo_inline( '
|
240 |
-
<th><?php fs_esc_html_echo_x_inline( '
|
241 |
-
<th><?php fs_esc_html_echo_inline( '
|
242 |
-
<th><?php
|
243 |
-
<th><?php fs_esc_html_echo_inline( '
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
$
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
$
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
echo ' style="background: #
|
273 |
-
}
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
<td><?php echo $data->
|
278 |
-
<td><?php echo $
|
279 |
-
<td
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
$
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
<?php
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
<?php
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
$
|
352 |
-
|
353 |
-
|
354 |
-
$
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
<?php
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
<th><?php
|
372 |
-
<th><?php fs_esc_html_echo_inline( '
|
373 |
-
<th><?php
|
374 |
-
<th><?php fs_esc_html_echo_inline( '
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
<td><?php echo $
|
392 |
-
<td><?php
|
393 |
-
|
394 |
-
$
|
395 |
-
|
396 |
-
|
397 |
-
$
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
<?php
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
<input type="hidden" name="
|
433 |
-
<
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
<?php
|
443 |
-
<?php
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
<
|
449 |
-
|
450 |
-
<
|
451 |
-
|
452 |
-
<th><?php fs_esc_html_echo_inline( '
|
453 |
-
<th><?php fs_esc_html_echo_inline( '
|
454 |
-
<th><?php
|
455 |
-
<th><?php
|
456 |
-
<th><?php fs_esc_html_echo_inline( '
|
457 |
-
|
458 |
-
</
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
<td><?php echo $addon->
|
468 |
-
<td><?php echo $addon->
|
469 |
-
<td><?php echo $addon->
|
470 |
-
<td><?php echo $addon->
|
471 |
-
<td><?php echo
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
<?php
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
<
|
527 |
-
<
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
<
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
<
|
596 |
-
<
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
</
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
<
|
619 |
-
<
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
</
|
624 |
-
</div>
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.1.1
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
global $fs_active_plugins;
|
14 |
+
|
15 |
+
$fs_options = FS_Options::instance( WP_FS__ACCOUNTS_OPTION_NAME, true );
|
16 |
+
|
17 |
+
$off_text = fs_text_x_inline( 'Off', 'as turned off' );
|
18 |
+
$on_text = fs_text_x_inline( 'On', 'as turned on' );
|
19 |
+
?>
|
20 |
+
<h1><?php echo fs_text_inline( 'Freemius Debug' ) . ' - ' . fs_text_inline( 'SDK' ) . ' v.' . $fs_active_plugins->newest->version ?></h1>
|
21 |
+
<div>
|
22 |
+
<!-- Debugging Switch -->
|
23 |
+
<?php //$debug_mode = get_option( 'fs_debug_mode', null ) ?>
|
24 |
+
<span class="fs-switch-label"><?php fs_esc_html_echo_x_inline( 'Debugging', 'as code debugging' ) ?></span>
|
25 |
+
|
26 |
+
<div class="fs-switch fs-round <?php echo WP_FS__DEBUG_SDK ? 'fs-on' : 'fs-off' ?>">
|
27 |
+
<div class="fs-toggle"></div>
|
28 |
+
</div>
|
29 |
+
<script type="text/javascript">
|
30 |
+
(function ($) {
|
31 |
+
$(document).ready(function () {
|
32 |
+
// Switch toggle
|
33 |
+
$( '.fs-switch' ).click( function () {
|
34 |
+
$( this )
|
35 |
+
.toggleClass( 'fs-on' )
|
36 |
+
.toggleClass( 'fs-off' );
|
37 |
+
|
38 |
+
$.post( ajaxurl, {
|
39 |
+
action: 'fs_toggle_debug_mode',
|
40 |
+
is_on : ($(this).hasClass( 'fs-on' ) ? 1 : 0)
|
41 |
+
}, function ( response ) {
|
42 |
+
if ( 1 == response ) {
|
43 |
+
// Refresh page on success.
|
44 |
+
location.reload();
|
45 |
+
}
|
46 |
+
});
|
47 |
+
});
|
48 |
+
});
|
49 |
+
}(jQuery));
|
50 |
+
</script>
|
51 |
+
</div>
|
52 |
+
<h2><?php fs_esc_html_echo_inline( 'Actions', 'actions' ) ?></h2>
|
53 |
+
<table>
|
54 |
+
<tbody>
|
55 |
+
<tr>
|
56 |
+
<td>
|
57 |
+
<!-- Delete All Accounts -->
|
58 |
+
<form action="" method="POST">
|
59 |
+
<input type="hidden" name="fs_action" value="restart_freemius">
|
60 |
+
<?php wp_nonce_field( 'restart_freemius' ) ?>
|
61 |
+
<button class="button button-primary"
|
62 |
+
onclick="if (confirm('<?php fs_esc_attr_echo_inline( 'Are you sure you want to delete all Freemius data?', 'delete-all-confirm' ) ?>')) this.parentNode.submit(); return false;"><?php fs_esc_html_echo_inline( 'Delete All Accounts' ) ?></button>
|
63 |
+
</form>
|
64 |
+
</td>
|
65 |
+
<td>
|
66 |
+
<!-- Clear API Cache -->
|
67 |
+
<form action="" method="POST">
|
68 |
+
<input type="hidden" name="fs_clear_api_cache" value="true">
|
69 |
+
<button class="button button-primary"><?php fs_esc_html_echo_inline( 'Clear API Cache' ) ?></button>
|
70 |
+
</form>
|
71 |
+
</td>
|
72 |
+
<td>
|
73 |
+
<!-- Clear Updates Transients -->
|
74 |
+
<form action="" method="POST">
|
75 |
+
<input type="hidden" name="fs_action" value="clear_updates_data">
|
76 |
+
<?php wp_nonce_field( 'clear_updates_data' ) ?>
|
77 |
+
<button class="button"><?php fs_esc_html_echo_inline( 'Clear Updates Transients' ) ?></button>
|
78 |
+
</form>
|
79 |
+
</td>
|
80 |
+
<td>
|
81 |
+
<!-- Sync Data with Server -->
|
82 |
+
<form action="" method="POST">
|
83 |
+
<input type="hidden" name="background_sync" value="true">
|
84 |
+
<button class="button button-primary"><?php fs_esc_html_echo_inline( 'Sync Data From Server' ) ?></button>
|
85 |
+
</form>
|
86 |
+
</td>
|
87 |
+
<?php if ( fs_is_network_admin() && true !== $fs_options->get_option( 'ms_migration_complete', false, true ) ) : ?>
|
88 |
+
<td>
|
89 |
+
<!-- Migrate Options to Network -->
|
90 |
+
<form action="" method="POST">
|
91 |
+
<input type="hidden" name="fs_action" value="migrate_options_to_network">
|
92 |
+
<?php wp_nonce_field( 'migrate_options_to_network' ) ?>
|
93 |
+
<button class="button button-primary"><?php fs_esc_html_echo_inline( 'Migrate Options to Network' ) ?></button>
|
94 |
+
</form>
|
95 |
+
</td>
|
96 |
+
<?php endif ?>
|
97 |
+
<td>
|
98 |
+
<button id="fs_load_db_option" class="button"><?php fs_esc_html_echo_inline( 'Load DB Option' ) ?></button>
|
99 |
+
</td>
|
100 |
+
<td>
|
101 |
+
<button id="fs_set_db_option" class="button"><?php fs_esc_html_echo_inline( 'Set DB Option' ) ?></button>
|
102 |
+
</td>
|
103 |
+
</tr>
|
104 |
+
</tbody>
|
105 |
+
</table>
|
106 |
+
<script type="text/javascript">
|
107 |
+
(function ($) {
|
108 |
+
$('#fs_load_db_option').click(function () {
|
109 |
+
var optionName = prompt('Please enter the option name:');
|
110 |
+
|
111 |
+
if (optionName) {
|
112 |
+
$.post(ajaxurl, {
|
113 |
+
action : 'fs_get_db_option',
|
114 |
+
_wpnonce : '<?php echo wp_create_nonce( 'fs_get_db_option' ) ?>',
|
115 |
+
option_name: optionName
|
116 |
+
}, function (response) {
|
117 |
+
if (response.data.value)
|
118 |
+
prompt('The option value is:', response.data.value);
|
119 |
+
else
|
120 |
+
alert('Oops... Option does not exist in the DB.');
|
121 |
+
});
|
122 |
+
}
|
123 |
+
});
|
124 |
+
|
125 |
+
$('#fs_set_db_option').click(function () {
|
126 |
+
var optionName = prompt('Please enter the option name:');
|
127 |
+
|
128 |
+
if (optionName) {
|
129 |
+
var optionValue = prompt('Please enter the option value:');
|
130 |
+
|
131 |
+
if (optionValue) {
|
132 |
+
$.post(ajaxurl, {
|
133 |
+
action : 'fs_set_db_option',
|
134 |
+
_wpnonce : '<?php echo wp_create_nonce( 'fs_set_db_option' ) ?>',
|
135 |
+
option_name : optionName,
|
136 |
+
option_value: optionValue
|
137 |
+
}, function () {
|
138 |
+
alert('Option was successfully set.');
|
139 |
+
});
|
140 |
+
}
|
141 |
+
}
|
142 |
+
});
|
143 |
+
})(jQuery);
|
144 |
+
</script>
|
145 |
+
<?php
|
146 |
+
if ( ! defined( 'FS_API__ADDRESS' ) ) {
|
147 |
+
define( 'FS_API__ADDRESS', '://api.freemius.com' );
|
148 |
+
}
|
149 |
+
if ( ! defined( 'FS_API__SANDBOX_ADDRESS' ) ) {
|
150 |
+
define( 'FS_API__SANDBOX_ADDRESS', '://sandbox-api.freemius.com' );
|
151 |
+
}
|
152 |
+
|
153 |
+
$defines = array(
|
154 |
+
array(
|
155 |
+
'key' => 'WP_FS__REMOTE_ADDR',
|
156 |
+
'val' => WP_FS__REMOTE_ADDR,
|
157 |
+
),
|
158 |
+
array(
|
159 |
+
'key' => 'WP_FS__ADDRESS_PRODUCTION',
|
160 |
+
'val' => WP_FS__ADDRESS_PRODUCTION,
|
161 |
+
),
|
162 |
+
array(
|
163 |
+
'key' => 'FS_API__ADDRESS',
|
164 |
+
'val' => FS_API__ADDRESS,
|
165 |
+
),
|
166 |
+
array(
|
167 |
+
'key' => 'FS_API__SANDBOX_ADDRESS',
|
168 |
+
'val' => FS_API__SANDBOX_ADDRESS,
|
169 |
+
),
|
170 |
+
array(
|
171 |
+
'key' => 'WP_FS__DIR',
|
172 |
+
'val' => WP_FS__DIR,
|
173 |
+
),
|
174 |
+
)
|
175 |
+
?>
|
176 |
+
<br>
|
177 |
+
<table class="widefat">
|
178 |
+
<thead>
|
179 |
+
<tr>
|
180 |
+
<th><?php fs_esc_html_echo_inline( 'Key', 'key' ) ?></th>
|
181 |
+
<th><?php fs_esc_html_echo_inline( 'Value', 'value' ) ?></th>
|
182 |
+
</tr>
|
183 |
+
</thead>
|
184 |
+
<tbody>
|
185 |
+
<?php $alternate = false;
|
186 |
+
foreach ( $defines as $p ) : ?>
|
187 |
+
<tr<?php if ( $alternate ) {
|
188 |
+
echo ' class="alternate"';
|
189 |
+
} ?>>
|
190 |
+
<td><?php echo $p['key'] ?></td>
|
191 |
+
<td><?php echo $p['val'] ?></td>
|
192 |
+
</tr>
|
193 |
+
<?php $alternate = ! $alternate ?>
|
194 |
+
<?php endforeach ?>
|
195 |
+
</tbody>
|
196 |
+
</table>
|
197 |
+
<h2><?php fs_esc_html_echo_x_inline( 'SDK Versions', 'as software development kit versions', 'sdk-versions' ) ?></h2>
|
198 |
+
<table id="fs_sdks" class="widefat">
|
199 |
+
<thead>
|
200 |
+
<tr>
|
201 |
+
<th><?php fs_esc_html_echo_x_inline( 'Version', 'product version' ) ?></th>
|
202 |
+
<th><?php fs_esc_html_echo_inline( 'SDK Path' ) ?></th>
|
203 |
+
<th><?php fs_esc_html_echo_inline( 'Module Path' ) ?></th>
|
204 |
+
<th><?php fs_esc_html_echo_inline( 'Is Active' ) ?></th>
|
205 |
+
</tr>
|
206 |
+
</thead>
|
207 |
+
<tbody>
|
208 |
+
<?php foreach ( $fs_active_plugins->plugins as $sdk_path => $data ) : ?>
|
209 |
+
<?php $is_active = ( WP_FS__SDK_VERSION == $data->version ) ?>
|
210 |
+
<tr<?php if ( $is_active ) {
|
211 |
+
echo ' style="background: #E6FFE6; font-weight: bold"';
|
212 |
+
} ?>>
|
213 |
+
<td><?php echo $data->version ?></td>
|
214 |
+
<td><?php echo $sdk_path ?></td>
|
215 |
+
<td><?php echo $data->plugin_path ?></td>
|
216 |
+
<td><?php echo ( $is_active ) ? 'Active' : 'Inactive' ?></td>
|
217 |
+
</tr>
|
218 |
+
<?php endforeach ?>
|
219 |
+
</tbody>
|
220 |
+
</table>
|
221 |
+
|
222 |
+
<?php
|
223 |
+
$module_types = array(
|
224 |
+
WP_FS__MODULE_TYPE_PLUGIN,
|
225 |
+
WP_FS__MODULE_TYPE_THEME
|
226 |
+
);
|
227 |
+
?>
|
228 |
+
|
229 |
+
<?php foreach ( $module_types as $module_type ) : ?>
|
230 |
+
<?php $modules = fs_get_entities( $fs_options->get_option( $module_type . 's' ), FS_Plugin::get_class_name() ) ?>
|
231 |
+
<?php if ( is_array( $modules ) && count( $modules ) > 0 ) : ?>
|
232 |
+
<h2><?php echo esc_html( ( WP_FS__MODULE_TYPE_PLUGIN == $module_type ) ? fs_text_inline( 'Plugins', 'plugins' ) : fs_text_inline( 'Themes', 'themes' ) ) ?></h2>
|
233 |
+
<table id="fs_<?php echo $module_type ?>" class="widefat">
|
234 |
+
<thead>
|
235 |
+
<tr>
|
236 |
+
<th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
|
237 |
+
<th><?php fs_esc_html_echo_inline( 'Slug' ) ?></th>
|
238 |
+
<th><?php fs_esc_html_echo_x_inline( 'Version', 'product version' ) ?></th>
|
239 |
+
<th><?php fs_esc_html_echo_inline( 'Title' ) ?></th>
|
240 |
+
<th><?php fs_esc_html_echo_x_inline( 'API', 'as application program interface' ) ?></th>
|
241 |
+
<th><?php fs_esc_html_echo_inline( 'Freemius State' ) ?></th>
|
242 |
+
<th><?php fs_esc_html_echo_inline( 'Module Path' ) ?></th>
|
243 |
+
<th><?php fs_esc_html_echo_inline( 'Public Key' ) ?></th>
|
244 |
+
<?php if ( is_multisite() ) : ?>
|
245 |
+
<th><?php fs_esc_html_echo_inline( 'Network Blog' ) ?></th>
|
246 |
+
<th><?php fs_esc_html_echo_inline( 'Network User' ) ?></th>
|
247 |
+
<?php endif ?>
|
248 |
+
<th><?php fs_esc_html_echo_inline( 'Actions' ) ?></th>
|
249 |
+
</tr>
|
250 |
+
</thead>
|
251 |
+
<tbody>
|
252 |
+
<?php foreach ( $modules as $slug => $data ) : ?>
|
253 |
+
<?php
|
254 |
+
if ( WP_FS__MODULE_TYPE_THEME !== $module_type ) {
|
255 |
+
$is_active = is_plugin_active( $data->file );
|
256 |
+
} else {
|
257 |
+
$current_theme = wp_get_theme();
|
258 |
+
$is_active = ( $current_theme->stylesheet === $data->file );
|
259 |
+
|
260 |
+
if ( ! $is_active && is_child_theme() ) {
|
261 |
+
$parent_theme = $current_theme->parent();
|
262 |
+
|
263 |
+
$is_active = ( ( $parent_theme instanceof WP_Theme ) && $parent_theme->stylesheet === $data->file );
|
264 |
+
}
|
265 |
+
}
|
266 |
+
?>
|
267 |
+
<?php $fs = $is_active ? freemius( $data->id ) : null ?>
|
268 |
+
<tr<?php if ( $is_active ) {
|
269 |
+
if ( $fs->has_api_connectivity() && $fs->is_on() ) {
|
270 |
+
echo ' style="background: #E6FFE6; font-weight: bold"';
|
271 |
+
} else {
|
272 |
+
echo ' style="background: #ffd0d0; font-weight: bold"';
|
273 |
+
}
|
274 |
+
} ?>>
|
275 |
+
<td><?php echo $data->id ?></td>
|
276 |
+
<td><?php echo $slug ?></td>
|
277 |
+
<td><?php echo $data->version ?></td>
|
278 |
+
<td><?php echo $data->title ?></td>
|
279 |
+
<td<?php if ( $is_active && ! $fs->has_api_connectivity() ) {
|
280 |
+
echo ' style="color: red; text-transform: uppercase;"';
|
281 |
+
} ?>><?php if ( $is_active ) {
|
282 |
+
echo esc_html( $fs->has_api_connectivity() ?
|
283 |
+
fs_text_x_inline( 'Connected', 'as connection was successful' ) :
|
284 |
+
fs_text_x_inline( 'Blocked', 'as connection blocked' )
|
285 |
+
);
|
286 |
+
} ?></td>
|
287 |
+
<td<?php if ( $is_active && ! $fs->is_on() ) {
|
288 |
+
echo ' style="color: red; text-transform: uppercase;"';
|
289 |
+
} ?>><?php if ( $is_active ) {
|
290 |
+
echo esc_html( $fs->is_on() ?
|
291 |
+
$on_text :
|
292 |
+
$off_text
|
293 |
+
);
|
294 |
+
} ?></td>
|
295 |
+
<td><?php echo $data->file ?></td>
|
296 |
+
<td><?php echo $data->public_key ?></td>
|
297 |
+
<?php if ( is_multisite() ) : ?>
|
298 |
+
<?php
|
299 |
+
$network_blog_id = null;
|
300 |
+
$network_user = null;
|
301 |
+
|
302 |
+
if ( is_object( $fs ) ) {
|
303 |
+
$network_blog_id = $fs->get_network_install_blog_id();
|
304 |
+
$network_user = $fs->get_network_user();
|
305 |
+
}
|
306 |
+
?>
|
307 |
+
<td><?php echo is_numeric( $network_blog_id ) ? $network_blog_id : '' ?></td>
|
308 |
+
<td><?php if ( is_object( $network_user ) ) {
|
309 |
+
echo $network_user->email;
|
310 |
+
} ?></td>
|
311 |
+
<?php endif ?>
|
312 |
+
<td>
|
313 |
+
<?php if ( $is_active ) : ?>
|
314 |
+
<?php if ( $fs->has_trial_plan() ) : ?>
|
315 |
+
<form action="" method="POST">
|
316 |
+
<input type="hidden" name="fs_action" value="simulate_trial">
|
317 |
+
<input type="hidden" name="module_id" value="<?php echo $fs->get_id() ?>">
|
318 |
+
<?php wp_nonce_field( 'simulate_trial' ) ?>
|
319 |
+
|
320 |
+
<button type="submit" class="button button-primary simulate-trial"><?php fs_esc_html_echo_inline( 'Simulate Trial Promotion' ) ?></button>
|
321 |
+
</form>
|
322 |
+
<?php endif ?>
|
323 |
+
<?php if ( $fs->is_registered() ) : ?>
|
324 |
+
<a class="button" href="<?php echo $fs->get_account_url() ?>"><?php fs_esc_html_echo_inline( 'Account', 'account' ) ?></a>
|
325 |
+
<?php endif ?>
|
326 |
+
<?php if ( fs_is_network_admin() && ! $fs->is_network_upgrade_mode() ) : ?>
|
327 |
+
<form action="" method="POST">
|
328 |
+
<input type="hidden" name="fs_action" value="simulate_network_upgrade">
|
329 |
+
<input type="hidden" name="module_id" value="<?php echo $fs->get_id() ?>">
|
330 |
+
<?php wp_nonce_field( 'simulate_network_upgrade' ) ?>
|
331 |
+
|
332 |
+
<button type="submit" class="button button-small"><?php fs_esc_html_echo_inline( 'Simulate Network Upgrade' ) ?></button>
|
333 |
+
</form>
|
334 |
+
<?php endif ?>
|
335 |
+
<?php endif ?>
|
336 |
+
</td>
|
337 |
+
</tr>
|
338 |
+
<?php endforeach ?>
|
339 |
+
</tbody>
|
340 |
+
</table>
|
341 |
+
<?php endif ?>
|
342 |
+
<?php endforeach ?>
|
343 |
+
<?php foreach ( $module_types as $module_type ) : ?>
|
344 |
+
<?php
|
345 |
+
/**
|
346 |
+
* @var array $VARS
|
347 |
+
* @var array[string]FS_Site|array[string]FS_Site[] $sites_map
|
348 |
+
*/
|
349 |
+
$sites_map = $VARS[ $module_type . '_sites' ];
|
350 |
+
|
351 |
+
$is_multisite = is_multisite();
|
352 |
+
$all_plans = false;
|
353 |
+
?>
|
354 |
+
<?php if ( is_array( $sites_map ) && count( $sites_map ) > 0 ) : ?>
|
355 |
+
<h2><?php echo esc_html( sprintf(
|
356 |
+
/* translators: %s: 'plugin' or 'theme' */
|
357 |
+
fs_text_inline( '%s Installs', 'module-installs' ),
|
358 |
+
( WP_FS__MODULE_TYPE_PLUGIN === $module_type ? fs_text_inline( 'Plugin', 'plugin' ) : fs_text_inline( 'Theme', 'theme' ) )
|
359 |
+
) ) ?> / <?php fs_esc_html_echo_x_inline( 'Sites', 'like websites', 'sites' ) ?></h2>
|
360 |
+
<table id="fs_<?php echo $module_type ?>_installs" class="widefat">
|
361 |
+
<thead>
|
362 |
+
<tr>
|
363 |
+
<th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
|
364 |
+
<?php if ( $is_multisite ) : ?>
|
365 |
+
<th><?php fs_esc_html_echo_inline( 'Blog ID' ) ?></th>
|
366 |
+
<th><?php fs_esc_html_echo_inline( 'Address' ) ?></th>
|
367 |
+
<?php endif ?>
|
368 |
+
<th><?php fs_esc_html_echo_inline( 'Slug' ) ?></th>
|
369 |
+
<th><?php fs_esc_html_echo_inline( 'User ID' ) ?></th>
|
370 |
+
<th><?php fs_esc_html_echo_inline( 'License ID' ) ?></th>
|
371 |
+
<th><?php fs_esc_html_echo_x_inline( 'Plan', 'as product pricing plan', 'plan' ) ?></th>
|
372 |
+
<th><?php fs_esc_html_echo_inline( 'Public Key' ) ?></th>
|
373 |
+
<th><?php fs_esc_html_echo_inline( 'Secret Key' ) ?></th>
|
374 |
+
<th><?php fs_esc_html_echo_inline( 'Actions' ) ?></th>
|
375 |
+
</tr>
|
376 |
+
</thead>
|
377 |
+
<tbody>
|
378 |
+
<?php foreach ( $sites_map as $slug => $sites ) : ?>
|
379 |
+
<?php if ( ! is_array( $sites ) ) {
|
380 |
+
$sites = array( $sites );
|
381 |
+
} ?>
|
382 |
+
<?php foreach ( $sites as $site ) : ?>
|
383 |
+
<tr>
|
384 |
+
<td><?php echo $site->id ?></td>
|
385 |
+
<?php if ( $is_multisite ) : ?>
|
386 |
+
<td><?php echo $site->blog_id ?></td>
|
387 |
+
<td><?php echo fs_strip_url_protocol( $site->url ) ?></td>
|
388 |
+
<?php endif ?>
|
389 |
+
<td><?php echo $slug ?></td>
|
390 |
+
<td><?php echo $site->user_id ?></td>
|
391 |
+
<td><?php echo !empty($site->license_id) ? $site->license_id : '' ?></td>
|
392 |
+
<td><?php
|
393 |
+
$plan_name = '';
|
394 |
+
if ( FS_Plugin_Plan::is_valid_id( $site->plan_id ) ) {
|
395 |
+
if ( false === $all_plans ) {
|
396 |
+
$option_name = 'plans';
|
397 |
+
if ( WP_FS__MODULE_TYPE_PLUGIN !== $module_type ) {
|
398 |
+
$option_name = $module_type . '_' . $option_name;
|
399 |
+
}
|
400 |
+
|
401 |
+
$all_plans = fs_get_entities( $fs_options->get_option( $option_name, array() ), FS_Plugin_Plan::get_class_name() );
|
402 |
+
}
|
403 |
+
|
404 |
+
foreach ( $all_plans[ $slug ] as $plan ) {
|
405 |
+
$plan_id = Freemius::_decrypt( $plan->id );
|
406 |
+
|
407 |
+
if ( $site->plan_id == $plan_id ) {
|
408 |
+
$plan_name = Freemius::_decrypt( $plan->name );
|
409 |
+
break;
|
410 |
+
}
|
411 |
+
}
|
412 |
+
}
|
413 |
+
|
414 |
+
echo $plan_name;
|
415 |
+
?></td>
|
416 |
+
<td><?php echo $site->public_key ?></td>
|
417 |
+
<td><?php
|
418 |
+
$plugin_storage = FS_Storage::instance( $module_type, $slug );
|
419 |
+
|
420 |
+
echo $plugin_storage->is_whitelabeled ?
|
421 |
+
FS_Plugin_License::mask_secret_key_for_html( $site->secret_key ) :
|
422 |
+
esc_html( $site->secret_key );
|
423 |
+
?></td>
|
424 |
+
<td>
|
425 |
+
<form action="" method="POST">
|
426 |
+
<input type="hidden" name="fs_action" value="delete_install">
|
427 |
+
<?php wp_nonce_field( 'delete_install' ) ?>
|
428 |
+
<input type="hidden" name="module_id" value="<?php echo $site->plugin_id ?>">
|
429 |
+
<?php if ( $is_multisite ) : ?>
|
430 |
+
<input type="hidden" name="blog_id" value="<?php echo $site->blog_id ?>">
|
431 |
+
<?php endif ?>
|
432 |
+
<input type="hidden" name="module_type" value="<?php echo $module_type ?>">
|
433 |
+
<input type="hidden" name="slug" value="<?php echo $slug ?>">
|
434 |
+
<button type="submit" class="button"><?php fs_esc_html_echo_x_inline( 'Delete', 'verb', 'delete' ) ?></button>
|
435 |
+
</form>
|
436 |
+
</td>
|
437 |
+
</tr>
|
438 |
+
<?php endforeach ?>
|
439 |
+
<?php endforeach ?>
|
440 |
+
</tbody>
|
441 |
+
</table>
|
442 |
+
<?php endif ?>
|
443 |
+
<?php endforeach ?>
|
444 |
+
<?php
|
445 |
+
$addons = $VARS['addons'];
|
446 |
+
?>
|
447 |
+
<?php foreach ( $addons as $plugin_id => $plugin_addons ) : ?>
|
448 |
+
<h2><?php echo esc_html( sprintf( fs_text_inline( 'Add Ons of module %s', 'addons-of-x' ), $plugin_id ) ) ?></h2>
|
449 |
+
<table id="fs_addons" class="widefat">
|
450 |
+
<thead>
|
451 |
+
<tr>
|
452 |
+
<th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
|
453 |
+
<th><?php fs_esc_html_echo_inline( 'Title' ) ?></th>
|
454 |
+
<th><?php fs_esc_html_echo_inline( 'Slug' ) ?></th>
|
455 |
+
<th><?php fs_esc_html_echo_x_inline( 'Version', 'product version' ) ?></th>
|
456 |
+
<th><?php fs_esc_html_echo_inline( 'Public Key' ) ?></th>
|
457 |
+
<th><?php fs_esc_html_echo_inline( 'Secret Key' ) ?></th>
|
458 |
+
</tr>
|
459 |
+
</thead>
|
460 |
+
<tbody>
|
461 |
+
<?php
|
462 |
+
/**
|
463 |
+
* @var FS_Plugin[] $plugin_addons
|
464 |
+
*/
|
465 |
+
foreach ( $plugin_addons as $addon ) : ?>
|
466 |
+
<tr>
|
467 |
+
<td><?php echo $addon->id ?></td>
|
468 |
+
<td><?php echo $addon->title ?></td>
|
469 |
+
<td><?php echo $addon->slug ?></td>
|
470 |
+
<td><?php echo $addon->version ?></td>
|
471 |
+
<td><?php echo $addon->public_key ?></td>
|
472 |
+
<td><?php echo esc_html( $addon->secret_key ) ?></td>
|
473 |
+
</tr>
|
474 |
+
<?php endforeach ?>
|
475 |
+
</tbody>
|
476 |
+
</table>
|
477 |
+
<?php endforeach ?>
|
478 |
+
<?php
|
479 |
+
/**
|
480 |
+
* @var FS_User[] $users
|
481 |
+
*/
|
482 |
+
$users = $VARS['users'];
|
483 |
+
$users_with_developer_license_by_id = array();
|
484 |
+
|
485 |
+
foreach ( $module_types as $module_type ) {
|
486 |
+
/**
|
487 |
+
* @var FS_Plugin_License[] $licenses
|
488 |
+
*/
|
489 |
+
$licenses = $VARS[ $module_type . '_licenses' ];
|
490 |
+
|
491 |
+
foreach ( $licenses as $license ) {
|
492 |
+
if ( $license->is_whitelabeled ) {
|
493 |
+
$users_with_developer_license_by_id[ $license->user_id ] = true;
|
494 |
+
}
|
495 |
+
}
|
496 |
+
}
|
497 |
+
|
498 |
+
?>
|
499 |
+
<?php if ( is_array( $users ) && 0 < count( $users ) ) : ?>
|
500 |
+
<h2><?php fs_esc_html_echo_inline( 'Users' ) ?></h2>
|
501 |
+
<table id="fs_users" class="widefat">
|
502 |
+
<thead>
|
503 |
+
<tr>
|
504 |
+
<th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
|
505 |
+
<th><?php fs_esc_html_echo_inline( 'Name' ) ?></th>
|
506 |
+
<th><?php fs_esc_html_echo_inline( 'Email' ) ?></th>
|
507 |
+
<th><?php fs_esc_html_echo_inline( 'Verified' ) ?></th>
|
508 |
+
<th><?php fs_esc_html_echo_inline( 'Public Key' ) ?></th>
|
509 |
+
<th><?php fs_esc_html_echo_inline( 'Secret Key' ) ?></th>
|
510 |
+
<th><?php fs_esc_html_echo_inline( 'Actions' ) ?></th>
|
511 |
+
</tr>
|
512 |
+
</thead>
|
513 |
+
<tbody>
|
514 |
+
<?php foreach ( $users as $user_id => $user ) : ?>
|
515 |
+
<?php $has_developer_license = isset( $users_with_developer_license_by_id[ $user_id ] ) ?>
|
516 |
+
<tr>
|
517 |
+
<td><?php echo $user->id ?></td>
|
518 |
+
<td><?php echo $has_developer_license ? '' : $user->get_name() ?></td>
|
519 |
+
<td>
|
520 |
+
<?php if ( ! $has_developer_license ) : ?>
|
521 |
+
<a href="mailto:<?php echo esc_attr( $user->email ) ?>"><?php echo $user->email ?></a>
|
522 |
+
<?php endif ?>
|
523 |
+
</td>
|
524 |
+
<td><?php echo $has_developer_license ? '' : json_encode( $user->is_verified ) ?></td>
|
525 |
+
<td><?php echo $user->public_key ?></td>
|
526 |
+
<td><?php echo $has_developer_license ? FS_Plugin_License::mask_secret_key_for_html($user->secret_key) : esc_html( $user->secret_key ) ?></td>
|
527 |
+
<td>
|
528 |
+
<?php if ( ! $has_developer_license ) : ?>
|
529 |
+
<form action="" method="POST">
|
530 |
+
<input type="hidden" name="fs_action" value="delete_user">
|
531 |
+
<?php wp_nonce_field( 'delete_user' ) ?>
|
532 |
+
<input type="hidden" name="user_id" value="<?php echo $user->id ?>">
|
533 |
+
<button type="submit" class="button"><?php fs_esc_html_echo_x_inline( 'Delete', 'verb', 'delete' ) ?></button>
|
534 |
+
</form>
|
535 |
+
<?php endif ?>
|
536 |
+
</td>
|
537 |
+
</tr>
|
538 |
+
<?php endforeach ?>
|
539 |
+
</tbody>
|
540 |
+
</table>
|
541 |
+
<?php endif ?>
|
542 |
+
<?php foreach ( $module_types as $module_type ) : ?>
|
543 |
+
<?php
|
544 |
+
/**
|
545 |
+
* @var FS_Plugin_License[] $licenses
|
546 |
+
*/
|
547 |
+
$licenses = $VARS[ $module_type . '_licenses' ] ?>
|
548 |
+
<?php if ( is_array( $licenses ) && count( $licenses ) > 0 ) : ?>
|
549 |
+
<h2><?php echo esc_html( sprintf( fs_text_inline( '%s Licenses', 'module-licenses' ), ( WP_FS__MODULE_TYPE_PLUGIN === $module_type ? fs_text_inline( 'Plugin', 'plugin' ) : fs_text_inline( 'Theme', 'theme' ) ) ) ) ?></h2>
|
550 |
+
<table id="fs_<?php echo $module_type ?>_licenses" class="widefat">
|
551 |
+
<thead>
|
552 |
+
<tr>
|
553 |
+
<th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
|
554 |
+
<th><?php fs_esc_html_echo_inline( 'Plugin ID' ) ?></th>
|
555 |
+
<th><?php fs_esc_html_echo_inline( 'User ID' ) ?></th>
|
556 |
+
<th><?php fs_esc_html_echo_inline( 'Plan ID' ) ?></th>
|
557 |
+
<th><?php fs_esc_html_echo_inline( 'Quota' ) ?></th>
|
558 |
+
<th><?php fs_esc_html_echo_inline( 'Activated' ) ?></th>
|
559 |
+
<th><?php fs_esc_html_echo_inline( 'Blocking' ) ?></th>
|
560 |
+
<th><?php fs_esc_html_echo_inline( 'Type' ) ?></th>
|
561 |
+
<th><?php fs_esc_html_echo_inline( 'License Key' ) ?></th>
|
562 |
+
<th><?php fs_esc_html_echo_x_inline( 'Expiration', 'as expiration date' ) ?></th>
|
563 |
+
</tr>
|
564 |
+
</thead>
|
565 |
+
<tbody>
|
566 |
+
<?php foreach ( $licenses as $license ) : ?>
|
567 |
+
<tr>
|
568 |
+
<td><?php echo $license->id ?></td>
|
569 |
+
<td><?php echo $license->plugin_id ?></td>
|
570 |
+
<td><?php echo $license->user_id ?></td>
|
571 |
+
<td><?php echo $license->plan_id ?></td>
|
572 |
+
<td><?php echo $license->is_unlimited() ? 'Unlimited' : ( $license->is_single_site() ? 'Single Site' : $license->quota ) ?></td>
|
573 |
+
<td><?php echo $license->activated ?></td>
|
574 |
+
<td><?php echo $license->is_block_features ? 'Blocking' : 'Flexible' ?></td>
|
575 |
+
<td><?php echo $license->is_whitelabeled ? 'Whitelabeled' : 'Normal' ?></td>
|
576 |
+
<td><?php
|
577 |
+
echo $license->is_whitelabeled ?
|
578 |
+
$license->get_html_escaped_masked_secret_key() :
|
579 |
+
esc_html( $license->secret_key );
|
580 |
+
?></td>
|
581 |
+
<td><?php echo $license->expiration ?></td>
|
582 |
+
</tr>
|
583 |
+
<?php endforeach ?>
|
584 |
+
</tbody>
|
585 |
+
</table>
|
586 |
+
<?php endif ?>
|
587 |
+
<?php endforeach ?>
|
588 |
+
<?php if ( FS_Logger::is_storage_logging_on() ) : ?>
|
589 |
+
|
590 |
+
<h2><?php fs_esc_html_echo_inline( 'Debug Log', 'debug-log' ) ?></h2>
|
591 |
+
|
592 |
+
<div id="fs_debug_filters">
|
593 |
+
<select name="type">
|
594 |
+
<option value="" selected="selected"><?php fs_esc_html_echo_inline( 'All Types', 'all-types' ) ?></option>
|
595 |
+
<option value="warn_error">Warnings & Errors</option>
|
596 |
+
<option value="error">Errors</option>
|
597 |
+
<option value="warn">Warnings</option>
|
598 |
+
<option value="info">Info</option>
|
599 |
+
</select>
|
600 |
+
<select name="request_type">
|
601 |
+
<option value="" selected="selected"><?php fs_esc_html_echo_inline( 'All Requests', 'all-requests' ) ?></option>
|
602 |
+
<option value="call">Sync</option>
|
603 |
+
<option value="ajax">AJAX</option>
|
604 |
+
<option value="cron">WP Cron</option>
|
605 |
+
</select>
|
606 |
+
<input name="file" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'File' ) ?>"/>
|
607 |
+
<input name="function" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'Function' ) ?>"/>
|
608 |
+
<input name="process_id" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'Process ID' ) ?>"/>
|
609 |
+
<input name="logger" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'Logger' ) ?>"/>
|
610 |
+
<input name="message" type="text" placeholder="<?php fs_esc_attr_echo_inline( 'Message' ) ?>"/>
|
611 |
+
<div style="margin: 10px 0">
|
612 |
+
<button id="fs_filter" class="button" style="float: left"><i class="dashicons dashicons-filter"></i> <?php fs_esc_html_echo_inline( 'Filter', 'filter' ) ?>
|
613 |
+
</button>
|
614 |
+
|
615 |
+
<form action="" method="POST" style="float: left; margin-left: 10px;">
|
616 |
+
<input type="hidden" name="fs_action" value="download_logs">
|
617 |
+
<?php wp_nonce_field( 'download_logs' ) ?>
|
618 |
+
<div class="fs-filters"></div>
|
619 |
+
<button id="fs_download" class="button" type="submit"><i
|
620 |
+
class="dashicons dashicons-download"></i> <?php fs_esc_html_echo_inline( 'Download' ) ?></button>
|
621 |
+
</form>
|
622 |
+
<div style="clear: both"></div>
|
623 |
+
</div>
|
624 |
+
</div>
|
625 |
+
|
626 |
+
<div id="fs_log_book" style="height: 300px; overflow: auto;">
|
627 |
+
<table class="widefat">
|
628 |
+
<thead>
|
629 |
+
<tr>
|
630 |
+
<th>#</th>
|
631 |
+
<th><?php fs_esc_html_echo_inline( 'Type' ) ?></th>
|
632 |
+
<th><?php fs_esc_html_echo_inline( 'ID', 'id' ) ?></th>
|
633 |
+
<th><?php fs_esc_html_echo_inline( 'Function' ) ?></th>
|
634 |
+
<th><?php fs_esc_html_echo_inline( 'Message' ) ?></th>
|
635 |
+
<th><?php fs_esc_html_echo_inline( 'File' ) ?></th>
|
636 |
+
<th><?php fs_esc_html_echo_inline( 'Timestamp' ) ?></th>
|
637 |
+
</tr>
|
638 |
+
</thead>
|
639 |
+
<tbody>
|
640 |
+
<tr style="display: none">
|
641 |
+
<td>{$log.log_order}.</td>
|
642 |
+
<td class="fs-col--type">{$log.type}</td>
|
643 |
+
<td class="fs-col--logger">{$log.logger}</td>
|
644 |
+
<td class="fs-col--function">{$log.function}</td>
|
645 |
+
<td class="fs-col--message">
|
646 |
+
<a href="#" onclick="jQuery(this).parent().find('div').toggle(); return false;">
|
647 |
+
<nobr>{$log.message_short}</nobr>
|
648 |
+
</a>
|
649 |
+
<div style="display: none;">{$log.message}</div>
|
650 |
+
</td>
|
651 |
+
<td class="fs-col--file">{$log.file}:{$log.line}</td>
|
652 |
+
<td class="fs-col--timestamp">{$log.created}</td>
|
653 |
+
</tr>
|
654 |
+
|
655 |
+
</tbody>
|
656 |
+
</table>
|
657 |
+
</div>
|
658 |
+
<script type="text/javascript">
|
659 |
+
jQuery(document).ready(function ($) {
|
660 |
+
var filtersChanged = false,
|
661 |
+
offset = 0,
|
662 |
+
limit = 200,
|
663 |
+
prevFiltersSignature = null;
|
664 |
+
|
665 |
+
var getFilters = function () {
|
666 |
+
var filters = {},
|
667 |
+
signature = '';
|
668 |
+
|
669 |
+
$('#fs_debug_filters').find('select, input').each(function (i, e) {
|
670 |
+
var $element = $(e);
|
671 |
+
|
672 |
+
if ('hidden' === $element.attr('type'))
|
673 |
+
return;
|
674 |
+
|
675 |
+
var val = $element.val();
|
676 |
+
if ('' !== val.trim()) {
|
677 |
+
var name = $(e).attr('name');
|
678 |
+
filters[name] = val;
|
679 |
+
signature += name + '=' + val + '~';
|
680 |
+
}
|
681 |
+
});
|
682 |
+
|
683 |
+
if (signature != prevFiltersSignature) {
|
684 |
+
filtersChanged = true;
|
685 |
+
prevFiltersSignature = signature;
|
686 |
+
} else {
|
687 |
+
filtersChanged = false;
|
688 |
+
}
|
689 |
+
|
690 |
+
return filters;
|
691 |
+
};
|
692 |
+
|
693 |
+
$('#fs_download').parent().submit(function () {
|
694 |
+
var filters = getFilters(),
|
695 |
+
hiddenFields = '';
|
696 |
+
|
697 |
+
for (var f in filters) {
|
698 |
+
if (filters.hasOwnProperty(f)) {
|
699 |
+
hiddenFields += '<input type="hidden" name="filters[' + f + ']" value="' + filters[f] + '" />';
|
700 |
+
}
|
701 |
+
}
|
702 |
+
|
703 |
+
$(this).find('.fs-filters').html(hiddenFields);
|
704 |
+
});
|
705 |
+
|
706 |
+
var loadLogs = function () {
|
707 |
+
var $tbody = $('#fs_log_book tbody'),
|
708 |
+
template = $tbody.find('tr:first-child').html(),
|
709 |
+
filters = getFilters();
|
710 |
+
|
711 |
+
if (!filtersChanged) {
|
712 |
+
offset += limit;
|
713 |
+
} else {
|
714 |
+
// Cleanup table for new filter (only keep template row).
|
715 |
+
$tbody.find('tr').each(function (i, e) {
|
716 |
+
if (0 == i)
|
717 |
+
return;
|
718 |
+
|
719 |
+
$(e).remove();
|
720 |
+
});
|
721 |
+
|
722 |
+
offset = 0;
|
723 |
+
}
|
724 |
+
|
725 |
+
$.post(ajaxurl, {
|
726 |
+
action : 'fs_get_debug_log',
|
727 |
+
filters: filters,
|
728 |
+
offset : offset,
|
729 |
+
limit : limit
|
730 |
+
}, function (response) {
|
731 |
+
|
732 |
+
for (var i = 0; i < response.data.length; i++) {
|
733 |
+
var templateCopy = template;
|
734 |
+
|
735 |
+
response.data[i].message_short = (response.data[i].message.length > 32) ?
|
736 |
+
response.data[i].message.substr(0, 32) + '...' :
|
737 |
+
response.data[i].message;
|
738 |
+
|
739 |
+
for (var p in response.data[i]) {
|
740 |
+
if (response.data[i].hasOwnProperty(p)) {
|
741 |
+
templateCopy = templateCopy.replace('{$log.' + p + '}', response.data[i][p]);
|
742 |
+
}
|
743 |
+
}
|
744 |
+
|
745 |
+
$tbody.append('<tr' + (i % 2 ? ' class="alternate"' : '') + '>' + templateCopy + '</tr>');
|
746 |
+
}
|
747 |
+
});
|
748 |
+
};
|
749 |
+
|
750 |
+
$('#fs_filter').click(function () {
|
751 |
+
loadLogs();
|
752 |
+
|
753 |
+
return false;
|
754 |
+
});
|
755 |
+
|
756 |
+
loadLogs();
|
757 |
+
});
|
758 |
+
</script>
|
759 |
+
<?php endif ?>
|
common/vendor/freemius/templates/debug/scheduled-crons.php
CHANGED
@@ -19,7 +19,7 @@
|
|
19 |
);
|
20 |
|
21 |
foreach ( $module_types as $module_type ) {
|
22 |
-
$modules = $fs_options->get_option( $module_type . 's' );
|
23 |
if ( is_array( $modules ) && count( $modules ) > 0 ) {
|
24 |
foreach ( $modules as $slug => $data ) {
|
25 |
if ( WP_FS__MODULE_TYPE_THEME === $module_type ) {
|
19 |
);
|
20 |
|
21 |
foreach ( $module_types as $module_type ) {
|
22 |
+
$modules = fs_get_entities( $fs_options->get_option( $module_type . 's' ), FS_Plugin::get_class_name() );
|
23 |
if ( is_array( $modules ) && count( $modules ) > 0 ) {
|
24 |
foreach ( $modules as $slug => $data ) {
|
25 |
if ( WP_FS__MODULE_TYPE_THEME === $module_type ) {
|
common/vendor/freemius/templates/forms/data-debug-mode.php
ADDED
@@ -0,0 +1,213 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 2.3.1
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @var array $VARS
|
15 |
+
*
|
16 |
+
* @var Freemius $fs
|
17 |
+
*/
|
18 |
+
$fs = freemius( $VARS['id'] );
|
19 |
+
$slug = $fs->get_slug();
|
20 |
+
$unique_affix = $fs->get_unique_affix();
|
21 |
+
$last_license_user_id = $fs->get_last_license_user_id();
|
22 |
+
$has_last_license_user_id = FS_User::is_valid_id( $last_license_user_id );
|
23 |
+
|
24 |
+
$message_above_input_field = ( ! $has_last_license_user_id ) ?
|
25 |
+
fs_text_inline( 'Please enter the license key to enable the debug mode:', 'submit-developer-license-key-message', $slug ) :
|
26 |
+
sprintf(
|
27 |
+
fs_text_inline( 'To enter the debug mode, please enter the secret key of the license owner (UserID = %d), which you can find in your "My Profile" section of your User Dashboard:', 'submit-addon-developer-key-message', $slug ),
|
28 |
+
$last_license_user_id
|
29 |
+
);
|
30 |
+
|
31 |
+
$processing_text = ( fs_esc_js_inline( 'Processing', 'processing', $slug ) . '...' );
|
32 |
+
$submit_button_text = fs_text_inline( 'Submit', 'submit', $slug );
|
33 |
+
$debug_license_link_text = fs_esc_html_inline( 'Start Debug', 'start-debug-license', $slug );
|
34 |
+
$license_or_user_key_text = ( ! $has_last_license_user_id ) ?
|
35 |
+
fs_text_inline( 'License key', 'license-key' , $slug ) :
|
36 |
+
fs_text_inline( 'User key', 'user-key' , $slug );
|
37 |
+
$input_html = "<input class='fs-license-or-user-key' type='password' placeholder='{$license_or_user_key_text}' tabindex='1' />";
|
38 |
+
|
39 |
+
$modal_content_html = <<< HTML
|
40 |
+
<div class="notice notice-error inline license-or-user-key-submission-message"><p></p></div>
|
41 |
+
<p>{$message_above_input_field}</p>
|
42 |
+
{$input_html}
|
43 |
+
HTML;
|
44 |
+
|
45 |
+
fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
|
46 |
+
?>
|
47 |
+
<script type="text/javascript">
|
48 |
+
( function( $ ) {
|
49 |
+
$( document ).ready( function() {
|
50 |
+
var modalContentHtml = <?php echo json_encode( $modal_content_html ) ?>,
|
51 |
+
modalHtml =
|
52 |
+
'<div class="fs-modal fs-modal-developer-license-debug-mode fs-modal-developer-license-debug-mode-<?php echo $unique_affix ?>">'
|
53 |
+
+ ' <div class="fs-modal-dialog">'
|
54 |
+
+ ' <div class="fs-modal-body">'
|
55 |
+
+ ' <div class="fs-modal-panel active">' + modalContentHtml + '</div>'
|
56 |
+
+ ' </div>'
|
57 |
+
+ ' <div class="fs-modal-footer">'
|
58 |
+
+ ' <button class="button button-secondary button-close" tabindex="4"><?php fs_esc_js_echo_inline( 'Cancel', 'cancel', $slug ) ?></button>'
|
59 |
+
+ ' <button class="button button-primary button-submit-license-or-user-key" tabindex="3"><?php echo esc_js( $submit_button_text ) ?></button>'
|
60 |
+
+ ' </div>'
|
61 |
+
+ ' </div>'
|
62 |
+
+ '</div>',
|
63 |
+
$modal = $( modalHtml ),
|
64 |
+
$debugLicenseLink = $( '.debug-license-trigger' ),
|
65 |
+
$submitKeyButton = $modal.find( '.button-submit-license-or-user-key' ),
|
66 |
+
$licenseOrUserKeyInput = $modal.find( 'input.fs-license-or-user-key' ),
|
67 |
+
$licenseOrUserKeySubmissionMessage = $modal.find( '.license-or-user-key-submission-message' ),
|
68 |
+
isDebugMode = <?php echo $fs->is_data_debug_mode() ? 'true' : 'false' ?>;
|
69 |
+
|
70 |
+
$modal.appendTo( $( 'body' ) );
|
71 |
+
|
72 |
+
function registerEventHandlers() {
|
73 |
+
$debugLicenseLink.click(function (evt) {
|
74 |
+
evt.preventDefault();
|
75 |
+
|
76 |
+
if ( isDebugMode ) {
|
77 |
+
setDeveloperLicenseDebugMode();
|
78 |
+
return true;
|
79 |
+
}
|
80 |
+
|
81 |
+
showModal( evt );
|
82 |
+
});
|
83 |
+
|
84 |
+
$modal.on( 'input propertychange', 'input.fs-license-or-user-key', function () {
|
85 |
+
var licenseOrUserKey = $( this ).val().trim();
|
86 |
+
|
87 |
+
/**
|
88 |
+
* If license or user key is not empty, enable the submission button.
|
89 |
+
*/
|
90 |
+
if ( licenseOrUserKey.length > 0 ) {
|
91 |
+
enableSubmitButton();
|
92 |
+
}
|
93 |
+
});
|
94 |
+
|
95 |
+
$modal.on( 'blur', 'input.fs-license-or-user-key', function () {
|
96 |
+
var licenseOrUserKey = $( this ).val().trim();
|
97 |
+
|
98 |
+
/**
|
99 |
+
* If license or user key is empty, disable the submission button.
|
100 |
+
*/
|
101 |
+
if ( 0 === licenseOrUserKey.length ) {
|
102 |
+
disableSubmitButton();
|
103 |
+
}
|
104 |
+
});
|
105 |
+
|
106 |
+
$modal.on( 'click', '.button-submit-license-or-user-key', function ( evt ) {
|
107 |
+
evt.preventDefault();
|
108 |
+
|
109 |
+
if ( $( this ).hasClass( 'disabled' ) ) {
|
110 |
+
return;
|
111 |
+
}
|
112 |
+
|
113 |
+
var licenseOrUserKey = $licenseOrUserKeyInput.val().trim();
|
114 |
+
|
115 |
+
disableSubmitButton();
|
116 |
+
|
117 |
+
if ( 0 === licenseOrUserKey.length ) {
|
118 |
+
return;
|
119 |
+
}
|
120 |
+
|
121 |
+
setDeveloperLicenseDebugMode( licenseOrUserKey );
|
122 |
+
});
|
123 |
+
|
124 |
+
// If the user has clicked outside the window, close the modal.
|
125 |
+
$modal.on( 'click', '.fs-close, .button-secondary', function () {
|
126 |
+
closeModal();
|
127 |
+
return false;
|
128 |
+
} );
|
129 |
+
}
|
130 |
+
|
131 |
+
registerEventHandlers();
|
132 |
+
|
133 |
+
function setDeveloperLicenseDebugMode( licenseOrUserKey ) {
|
134 |
+
var data = {
|
135 |
+
action : '<?php echo $fs->get_ajax_action( 'set_data_debug_mode' ) ?>',
|
136 |
+
security : '<?php echo $fs->get_ajax_security( 'set_data_debug_mode' ) ?>',
|
137 |
+
license_or_user_key: licenseOrUserKey,
|
138 |
+
is_debug_mode : isDebugMode,
|
139 |
+
module_id : '<?php echo $fs->get_id() ?>'
|
140 |
+
};
|
141 |
+
|
142 |
+
$.ajax( {
|
143 |
+
url : ajaxurl,
|
144 |
+
method : 'POST',
|
145 |
+
data : data,
|
146 |
+
beforeSend: function () {
|
147 |
+
$debugLicenseLink.find('span').text( '<?php echo $processing_text ?>' );
|
148 |
+
$submitKeyButton.text( '<?php echo $processing_text ?>' );
|
149 |
+
},
|
150 |
+
success : function ( result ) {
|
151 |
+
if ( result.success ) {
|
152 |
+
closeModal();
|
153 |
+
|
154 |
+
// Reload the "Account" page so that the pricing/upgrade link will be properly hidden/shown.
|
155 |
+
window.location.reload();
|
156 |
+
} else {
|
157 |
+
showError( result.error.message ? result.error.message : result.error );
|
158 |
+
resetButtons();
|
159 |
+
}
|
160 |
+
},
|
161 |
+
error : function () {
|
162 |
+
showError( <?php echo json_encode( fs_text_inline( 'An unknown error has occurred.', 'unknown-error', $slug ) ) ?> );
|
163 |
+
resetButtons();
|
164 |
+
}
|
165 |
+
});
|
166 |
+
}
|
167 |
+
|
168 |
+
function showModal( evt ) {
|
169 |
+
resetModal();
|
170 |
+
|
171 |
+
// Display the dialog box.
|
172 |
+
$modal.addClass( 'active' );
|
173 |
+
$( 'body' ).addClass( 'has-fs-modal' );
|
174 |
+
|
175 |
+
$licenseOrUserKeyInput.val( '' );
|
176 |
+
$licenseOrUserKeyInput.focus();
|
177 |
+
}
|
178 |
+
|
179 |
+
function closeModal() {
|
180 |
+
$modal.removeClass( 'active' );
|
181 |
+
$( 'body' ).removeClass( 'has-fs-modal' );
|
182 |
+
}
|
183 |
+
|
184 |
+
function resetButtons() {
|
185 |
+
enableSubmitButton();
|
186 |
+
$submitKeyButton.text( <?php echo json_encode( $submit_button_text ) ?> );
|
187 |
+
$debugLicenseLink.find('span').text( <?php echo json_encode( $debug_license_link_text ) ?> );
|
188 |
+
}
|
189 |
+
|
190 |
+
function resetModal() {
|
191 |
+
hideError();
|
192 |
+
resetButtons();
|
193 |
+
}
|
194 |
+
|
195 |
+
function enableSubmitButton() {
|
196 |
+
$submitKeyButton.removeClass( 'disabled' );
|
197 |
+
}
|
198 |
+
|
199 |
+
function disableSubmitButton() {
|
200 |
+
$submitKeyButton.addClass( 'disabled' );
|
201 |
+
}
|
202 |
+
|
203 |
+
function hideError() {
|
204 |
+
$licenseOrUserKeySubmissionMessage.hide();
|
205 |
+
}
|
206 |
+
|
207 |
+
function showError( msg ) {
|
208 |
+
$licenseOrUserKeySubmissionMessage.find( ' > p' ).html( msg );
|
209 |
+
$licenseOrUserKeySubmissionMessage.show();
|
210 |
+
}
|
211 |
+
} );
|
212 |
+
} )( jQuery );
|
213 |
+
</script>
|
common/vendor/freemius/templates/forms/deactivation/form.php
CHANGED
@@ -93,7 +93,7 @@ HTML;
|
|
93 |
+ ' <div class="fs-modal-footer">'
|
94 |
+ ' <?php echo $anonymous_feedback_checkbox_html ?>'
|
95 |
+ ' <a href="#" class="button button-secondary button-deactivate"></a>'
|
96 |
-
+ ' <a href="#" class="button button-
|
97 |
+ ' </div>'
|
98 |
+ ' </div>'
|
99 |
+ '</div>',
|
93 |
+ ' <div class="fs-modal-footer">'
|
94 |
+ ' <?php echo $anonymous_feedback_checkbox_html ?>'
|
95 |
+ ' <a href="#" class="button button-secondary button-deactivate"></a>'
|
96 |
+
+ ' <a href="#" class="button button-secondary button-close"><?php fs_esc_js_echo_inline( 'Cancel', 'cancel', $slug ) ?></a>'
|
97 |
+ ' </div>'
|
98 |
+ ' </div>'
|
99 |
+ '</div>',
|
common/vendor/freemius/templates/forms/license-activation.php
CHANGED
@@ -1,701 +1,866 @@
|
|
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.1.9
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
/**
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
$
|
23 |
-
|
24 |
-
$
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
$
|
32 |
-
|
33 |
-
|
34 |
-
'https://freemius.com/
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
$
|
39 |
-
|
40 |
-
|
41 |
-
$
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
$
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
$
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
'
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
$
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
);
|
127 |
-
|
128 |
-
$license_input_html .= "<option data-id='{$license->id}' value='{$license->secret_key}' data-left='{$license->left()}'>{$label}</option>";
|
129 |
-
}
|
130 |
-
|
131 |
-
$license_input_html .= '</select>';
|
132 |
-
} else {
|
133 |
-
$available_licenses = array_values( $available_licenses );
|
134 |
-
|
135 |
-
/**
|
136 |
-
* @var FS_Plugin_License $available_license
|
137 |
-
*/
|
138 |
-
$available_license = $available_licenses[0];
|
139 |
-
$value = sprintf(
|
140 |
-
"%s-Site %s License - %s",
|
141 |
-
( 1 == $available_license->quota ?
|
142 |
-
'Single' :
|
143 |
-
$available_license->quota
|
144 |
-
),
|
145 |
-
$fs->_get_plan_by_id( $available_license->plan_id )->title,
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
data-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
}
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
*
|
186 |
-
*
|
187 |
-
*
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
<p
|
192 |
-
{$
|
193 |
-
|
194 |
-
{$
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
+ '
|
218 |
-
+ '
|
219 |
-
+ '
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
$
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
$
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
701 |
</script>
|
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.1.9
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @var array $VARS
|
15 |
+
*
|
16 |
+
* @var Freemius $fs
|
17 |
+
*/
|
18 |
+
$fs = freemius( $VARS['id'] );
|
19 |
+
$slug = $fs->get_slug();
|
20 |
+
$unique_affix = $fs->get_unique_affix();
|
21 |
+
|
22 |
+
$cant_find_license_key_text = fs_text_inline( "Can't find your license key?", 'cant-find-license-key', $slug );
|
23 |
+
$message_above_input_field = fs_text_inline( 'Please enter the license key that you received in the email right after the purchase:', 'activate-license-message', $slug );
|
24 |
+
$message_below_input_field = '';
|
25 |
+
|
26 |
+
$header_title = $fs->is_free_plan() ?
|
27 |
+
fs_text_inline( 'Activate License', 'activate-license', $slug ) :
|
28 |
+
fs_text_inline( 'Update License', 'update-license', $slug );
|
29 |
+
|
30 |
+
if ( $fs->is_registered() ) {
|
31 |
+
$activate_button_text = $header_title;
|
32 |
+
} else {
|
33 |
+
$freemius_site_url = $fs->has_paid_plan() ?
|
34 |
+
'https://freemius.com/' :
|
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 ),
|
42 |
+
$fs->get_module_label( true ),
|
43 |
+
$freemius_link
|
44 |
+
);
|
45 |
+
|
46 |
+
$activate_button_text = fs_text_inline( 'Agree & Activate License', 'agree-activate-license', $slug );
|
47 |
+
}
|
48 |
+
|
49 |
+
$license_key_text = fs_text_inline( 'License key', 'license-key' , $slug );
|
50 |
+
|
51 |
+
$is_network_activation = (
|
52 |
+
$fs->is_network_active() &&
|
53 |
+
fs_is_network_admin() &&
|
54 |
+
! $fs->is_delegated_connection()
|
55 |
+
);
|
56 |
+
$network_activation_html = '';
|
57 |
+
|
58 |
+
$sites_details = array();
|
59 |
+
if ( $is_network_activation ) {
|
60 |
+
$all_sites = Freemius::get_sites();
|
61 |
+
|
62 |
+
foreach ( $all_sites as $site ) {
|
63 |
+
$site_details = $fs->get_site_info( $site );
|
64 |
+
|
65 |
+
$blog_id = Freemius::get_site_blog_id( $site );
|
66 |
+
$install = $fs->get_install_by_blog_id($blog_id);
|
67 |
+
|
68 |
+
if ( is_object( $install ) && FS_Plugin_License::is_valid_id( $install->license_id ) ) {
|
69 |
+
$site_details['license_id'] = $install->license_id;
|
70 |
+
}
|
71 |
+
|
72 |
+
$sites_details[] = $site_details;
|
73 |
+
}
|
74 |
+
|
75 |
+
if ( $is_network_activation ) {
|
76 |
+
$vars = array(
|
77 |
+
'id' => $fs->get_id(),
|
78 |
+
'sites' => $sites_details,
|
79 |
+
'require_license_key' => true
|
80 |
+
);
|
81 |
+
|
82 |
+
$network_activation_html = fs_get_template( 'partials/network-activation.php', $vars );
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
86 |
+
$premium_licenses = $fs->get_available_premium_licenses();
|
87 |
+
$available_licenses = array();
|
88 |
+
foreach ( $premium_licenses as $premium_license ) {
|
89 |
+
$activations_left = $premium_license->left();
|
90 |
+
if ( ! ( $activations_left > 0 ) ) {
|
91 |
+
continue;
|
92 |
+
}
|
93 |
+
|
94 |
+
$available_licenses[ $activations_left . '_' . $premium_license->id ] = $premium_license;
|
95 |
+
}
|
96 |
+
|
97 |
+
$total_available_licenses = count( $available_licenses );
|
98 |
+
if ( $total_available_licenses > 0 ) {
|
99 |
+
$license_input_html = <<< HTML
|
100 |
+
<div class="fs-license-options-container">
|
101 |
+
<table>
|
102 |
+
<tbody>
|
103 |
+
<tr class="fs-available-license-key-container">
|
104 |
+
<td><input type="radio" name="license_type" value="available"></td>
|
105 |
+
<td>
|
106 |
+
HTML;
|
107 |
+
|
108 |
+
if ( $total_available_licenses > 1 ) {
|
109 |
+
// Sort the licenses by number of activations left in descending order.
|
110 |
+
krsort( $available_licenses );
|
111 |
+
|
112 |
+
$license_input_html .= '<select class="fs-licenses">';
|
113 |
+
|
114 |
+
/**
|
115 |
+
* @var FS_Plugin_License $license
|
116 |
+
*/
|
117 |
+
foreach ( $available_licenses as $license ) {
|
118 |
+
$label = sprintf(
|
119 |
+
"%s-Site %s License - %s",
|
120 |
+
( 1 == $license->quota ?
|
121 |
+
'Single' :
|
122 |
+
( $license->is_unlimited() ? 'Unlimited' : $license->quota )
|
123 |
+
),
|
124 |
+
$fs->_get_plan_by_id( $license->plan_id )->title,
|
125 |
+
$license->get_html_escaped_masked_secret_key()
|
126 |
+
);
|
127 |
+
|
128 |
+
$license_input_html .= "<option data-id='{$license->id}' value='{$license->secret_key}' data-left='{$license->left()}'>{$label}</option>";
|
129 |
+
}
|
130 |
+
|
131 |
+
$license_input_html .= '</select>';
|
132 |
+
} else {
|
133 |
+
$available_licenses = array_values( $available_licenses );
|
134 |
+
|
135 |
+
/**
|
136 |
+
* @var FS_Plugin_License $available_license
|
137 |
+
*/
|
138 |
+
$available_license = $available_licenses[0];
|
139 |
+
$value = sprintf(
|
140 |
+
"%s-Site %s License - %s",
|
141 |
+
( 1 == $available_license->quota ?
|
142 |
+
'Single' :
|
143 |
+
( $available_license->is_unlimited() ? 'Unlimited' : $available_license->quota )
|
144 |
+
),
|
145 |
+
$fs->_get_plan_by_id( $available_license->plan_id )->title,
|
146 |
+
$available_license->get_html_escaped_masked_secret_key()
|
147 |
+
);
|
148 |
+
|
149 |
+
$license_input_html .= <<< HTML
|
150 |
+
<input
|
151 |
+
class="fs-available-license-key"
|
152 |
+
type="text"
|
153 |
+
value="{$value}"
|
154 |
+
data-id="{$available_license->id}"
|
155 |
+
data-license-key="{$available_license->secret_key}"
|
156 |
+
data-left="{$available_license->left()}"
|
157 |
+
readonly />
|
158 |
+
HTML;
|
159 |
+
}
|
160 |
+
|
161 |
+
$license_input_html .= <<< HTML
|
162 |
+
</td>
|
163 |
+
</tr>
|
164 |
+
<tr>
|
165 |
+
<td><input type="radio" name="license_type" value="other"></td>
|
166 |
+
<td class="fs-other-license-key-container">
|
167 |
+
<label for="other_license_key_{$unique_affix}">Other: </label>
|
168 |
+
<div>
|
169 |
+
<input id="other_license_key_{$unique_affix}" class="fs-license-key" type="text" placeholder="Enter license key" tabindex="1">
|
170 |
+
</div>
|
171 |
+
</td>
|
172 |
+
</tr>
|
173 |
+
</tbody>
|
174 |
+
</table>
|
175 |
+
</div>
|
176 |
+
HTML;
|
177 |
+
} else {
|
178 |
+
$license_input_html = "<input class='fs-license-key' type='text' placeholder='{$license_key_text}' tabindex='1' />";
|
179 |
+
}
|
180 |
+
|
181 |
+
$ownership_change_option_text = fs_text_inline( "Associate with the license owner's account.", 'associate-account-with-license-owner', $slug );
|
182 |
+
$ownership_change_option_html = "<div class='ownership-change-option-container' style='display: none'><label><input type='checkbox' /> <strong>{$ownership_change_option_text}</strong></label></div>";
|
183 |
+
|
184 |
+
/**
|
185 |
+
* IMPORTANT:
|
186 |
+
* DO NOT ADD MAXLENGTH OR LIMIT THE LICENSE KEY LENGTH SINCE
|
187 |
+
* WE DO WANT TO ALLOW INPUT OF LONGER KEYS (E.G. WooCommerce Keys)
|
188 |
+
* FOR MIGRATED MODULES.
|
189 |
+
*/
|
190 |
+
$modal_content_html = <<< HTML
|
191 |
+
<div class="notice notice-error inline license-activation-message"><p></p></div>
|
192 |
+
<p>{$message_above_input_field}</p>
|
193 |
+
{$license_input_html}
|
194 |
+
<a class="show-license-resend-modal show-license-resend-modal-{$fs->get_unique_affix()}" href="!#" tabindex="2">{$cant_find_license_key_text}</a>
|
195 |
+
{$network_activation_html}
|
196 |
+
<p>{$message_below_input_field}</p>
|
197 |
+
{$ownership_change_option_html}
|
198 |
+
HTML;
|
199 |
+
|
200 |
+
/**
|
201 |
+
* Handle the ownership change option if not an add-on or if no license yet is activated for the
|
202 |
+
* parent product in case of an add-on.
|
203 |
+
*
|
204 |
+
* @author Leo Fajardo (@leorw)
|
205 |
+
* @since 2.3.2
|
206 |
+
*/
|
207 |
+
$is_user_change_supported = ( ! $fs->is_addon() || ! $fs->get_parent_instance()->has_active_valid_license() );
|
208 |
+
|
209 |
+
fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
|
210 |
+
?>
|
211 |
+
<script type="text/javascript">
|
212 |
+
(function( $ ) {
|
213 |
+
$( document ).ready(function() {
|
214 |
+
var modalContentHtml = <?php echo json_encode($modal_content_html); ?>,
|
215 |
+
modalHtml =
|
216 |
+
'<div class="fs-modal fs-modal-license-activation fs-modal-license-activation-<?php echo $unique_affix ?>">'
|
217 |
+
+ ' <div class="fs-modal-dialog">'
|
218 |
+
+ ' <div class="fs-modal-header">'
|
219 |
+
+ ' <h4><?php echo esc_js($header_title) ?></h4>'
|
220 |
+
+ ' <a href="!#" class="fs-close"><i class="dashicons dashicons-no" title="<?php echo esc_js( fs_text_x_inline( 'Dismiss', 'as close a window', 'dismiss', $slug ) ) ?>"></i></a>'
|
221 |
+
+ ' </div>'
|
222 |
+
+ ' <div class="fs-modal-body">'
|
223 |
+
+ ' <div class="fs-modal-panel active">' + modalContentHtml + '</div>'
|
224 |
+
+ ' </div>'
|
225 |
+
+ ' <div class="fs-modal-footer">'
|
226 |
+
+ ' <button class="button button-secondary button-close" tabindex="4"><?php fs_esc_js_echo_inline( 'Cancel', 'cancel', $slug ) ?></button>'
|
227 |
+
+ ' <button class="button button-primary button-activate-license" tabindex="3"><?php echo esc_js( $activate_button_text ) ?></button>'
|
228 |
+
+ ' </div>'
|
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' ),
|
245 |
+
$licenseTypes = $modal.find( 'input[type="radio"][name="license_type"]' ),
|
246 |
+
$applyOnAllSites = $modal.find( '.fs-apply-on-all-sites-checkbox' ),
|
247 |
+
$sitesListContainer = $modal.find( '.fs-sites-list-container' ),
|
248 |
+
$availableLicenseKey = $modal.find( '.fs-available-license-key' ),
|
249 |
+
$otherLicenseKey = $modal.find( '#other_license_key_<?php echo $unique_affix ?>' ),
|
250 |
+
$multisiteOptionsContainer = $modal.find( '.fs-multisite-options-container' ),
|
251 |
+
$activationsLeft = null,
|
252 |
+
hasLicensesDropdown = ( $licensesDropdown.length > 0 ),
|
253 |
+
hasLicenseTypes = ( $licenseTypes.length > 0 ),
|
254 |
+
maxSitesListHeight = null,
|
255 |
+
totalSites = <?php echo count( $sites_details ) ?>,
|
256 |
+
singleBlogID = null;
|
257 |
+
|
258 |
+
var
|
259 |
+
previousLicenseKey = null,
|
260 |
+
otherLicenseOwnerID = null,
|
261 |
+
/**
|
262 |
+
* @author Leo Fajardo (@leorw)
|
263 |
+
* @since 2.3.2
|
264 |
+
*/
|
265 |
+
resetLoadingMode = function () {
|
266 |
+
// Reset loading mode.
|
267 |
+
$activateLicenseButton.text( <?php echo json_encode( $activate_button_text ) ?> );
|
268 |
+
$activateLicenseButton.prop( 'disabled', false );
|
269 |
+
$( document.body ).css( { 'cursor': 'auto' } );
|
270 |
+
$( '.fs-loading' ).removeClass( 'fs-loading' );
|
271 |
+
|
272 |
+
console.log( 'resetLoadingMode - Primary button was enabled' );
|
273 |
+
},
|
274 |
+
/**
|
275 |
+
* @author Leo Fajardo (@leorw)
|
276 |
+
* @since 2.3.2
|
277 |
+
*/
|
278 |
+
setLoadingMode = function () {
|
279 |
+
$( document.body ).css( { 'cursor': 'wait' } );
|
280 |
+
},
|
281 |
+
/**
|
282 |
+
* @author Leo Fajardo (@leorw)
|
283 |
+
* @since 2.3.2
|
284 |
+
*/
|
285 |
+
afterLicenseUserDataLoaded = function () {
|
286 |
+
if (
|
287 |
+
null !== otherLicenseOwnerID &&
|
288 |
+
otherLicenseOwnerID != <?php echo $fs->is_registered() ? $fs->get_user()->id : 'null' ?>
|
289 |
+
) {
|
290 |
+
$ownershipChangeOptionContainer.show();
|
291 |
+
} else {
|
292 |
+
$ownershipChangeOptionContainer.hide();
|
293 |
+
$activateLicenseButton.focus();
|
294 |
+
}
|
295 |
+
},
|
296 |
+
/**
|
297 |
+
* @author Leo Fajardo (@leorw)
|
298 |
+
* @since 2.3.2
|
299 |
+
*/
|
300 |
+
fetchLicenseUserData = function () {
|
301 |
+
var hideAndUncheckUserChangeCheckbox = ( ! isUserChangeSupported ),
|
302 |
+
otherLicenseKeyIsSelected = isOtherLicenseKeySelected();
|
303 |
+
|
304 |
+
if ( ! hideAndUncheckUserChangeCheckbox ) {
|
305 |
+
// User change is supported only on the site level.
|
306 |
+
hideAndUncheckUserChangeCheckbox = ( isNetworkActivation || isSingleSiteActivation );
|
307 |
+
}
|
308 |
+
|
309 |
+
if ( ! hideAndUncheckUserChangeCheckbox ) {
|
310 |
+
hideAndUncheckUserChangeCheckbox = ( hasLicenseTypes && ! otherLicenseKeyIsSelected );
|
311 |
+
}
|
312 |
+
|
313 |
+
var licenseKey = $licenseKeyInput.val().trim();
|
314 |
+
|
315 |
+
if ( ! hideAndUncheckUserChangeCheckbox && otherLicenseKeyIsSelected ) {
|
316 |
+
hideAndUncheckUserChangeCheckbox = ( licenseKey.length < 32 );
|
317 |
+
}
|
318 |
+
|
319 |
+
if ( licenseKey !== previousLicenseKey ) {
|
320 |
+
// If the license key has not been changed, keep the owner ID in order to prevent another API call.
|
321 |
+
otherLicenseOwnerID = null;
|
322 |
+
}
|
323 |
+
|
324 |
+
if ( hideAndUncheckUserChangeCheckbox ) {
|
325 |
+
$ownershipChangeOptionContainer.hide().find( 'input' ).attr( 'checked', false );
|
326 |
+
|
327 |
+
return;
|
328 |
+
}
|
329 |
+
|
330 |
+
if ( null !== otherLicenseOwnerID ) {
|
331 |
+
afterLicenseUserDataLoaded();
|
332 |
+
return;
|
333 |
+
}
|
334 |
+
|
335 |
+
setLoadingMode();
|
336 |
+
|
337 |
+
$activateLicenseButton.addClass( 'fs-loading' );
|
338 |
+
$activateLicenseButton.attr( 'disabled', 'disabled' );
|
339 |
+
$activateLicenseButton.html( '<?php fs_esc_js_echo_inline( 'Please wait', 'please-wait', $slug ) ?>...' );
|
340 |
+
|
341 |
+
$.ajax( {
|
342 |
+
url : ajaxurl,
|
343 |
+
method : 'POST',
|
344 |
+
data : {
|
345 |
+
action : '<?php echo $fs->get_ajax_action( 'fetch_is_marketing_required_flag_value' ) ?>',
|
346 |
+
security : '<?php echo $fs->get_ajax_security( 'fetch_is_marketing_required_flag_value' ) ?>',
|
347 |
+
license_key: licenseKey,
|
348 |
+
module_id : '<?php echo $fs->get_id() ?>'
|
349 |
+
},
|
350 |
+
success: function ( result ) {
|
351 |
+
resetLoadingMode();
|
352 |
+
|
353 |
+
if ( result.success ) {
|
354 |
+
result = result.data;
|
355 |
+
|
356 |
+
// Cache license owner's ID.
|
357 |
+
otherLicenseOwnerID = result.license_owner_id;
|
358 |
+
}
|
359 |
+
|
360 |
+
afterLicenseUserDataLoaded();
|
361 |
+
}
|
362 |
+
} );
|
363 |
+
};
|
364 |
+
|
365 |
+
function registerEventHandlers() {
|
366 |
+
var
|
367 |
+
$otherLicenseKeyContainer = $modal.find( '.fs-other-license-key-container' );
|
368 |
+
|
369 |
+
if ( isNetworkActivation ) {
|
370 |
+
$applyOnAllSites.click(function() {
|
371 |
+
var applyOnAllSites = $( this ).is( ':checked' );
|
372 |
+
|
373 |
+
$multisiteOptionsContainer.toggleClass( 'fs-apply-on-all-sites', applyOnAllSites );
|
374 |
+
|
375 |
+
showSites( ! applyOnAllSites );
|
376 |
+
|
377 |
+
if ( hasValidLicenseKey() && ( applyOnAllSites || hasSelectedSite() ) ) {
|
378 |
+
enableActivateLicenseButton();
|
379 |
+
} else {
|
380 |
+
disableActivateLicenseButton();
|
381 |
+
}
|
382 |
+
});
|
383 |
+
|
384 |
+
$sitesListContainer.delegate( 'td:not(:first-child)', 'click', function() {
|
385 |
+
// If a site row is clicked, trigger a click on the checkbox.
|
386 |
+
$( this ).parent().find( 'td:first-child input' ).click();
|
387 |
+
});
|
388 |
+
|
389 |
+
$sitesListContainer.delegate( 'input[type="checkbox"]', 'click', function() {
|
390 |
+
enableDisableSitesSelection();
|
391 |
+
|
392 |
+
if ( hasValidLicenseKey() && hasSelectedSite() ) {
|
393 |
+
enableActivateLicenseButton();
|
394 |
+
} else {
|
395 |
+
disableActivateLicenseButton();
|
396 |
+
}
|
397 |
+
});
|
398 |
+
}
|
399 |
+
|
400 |
+
if ( hasLicensesDropdown ) {
|
401 |
+
$licensesDropdown.change(function() {
|
402 |
+
// When a license is selected, select the associated radio button.
|
403 |
+
$licenseTypes.filter( '[value="available"]' ).attr( 'checked', true );
|
404 |
+
|
405 |
+
if ( ! isNetworkActivation || $modal.hasClass( 'is-single-site-activation' ) ) {
|
406 |
+
enableActivateLicenseButton();
|
407 |
+
return true;
|
408 |
+
}
|
409 |
+
|
410 |
+
toggleActivationOnAllSites();
|
411 |
+
})
|
412 |
+
}
|
413 |
+
|
414 |
+
if ( hasLicenseTypes ) {
|
415 |
+
$licenseTypes.change(function() {
|
416 |
+
var
|
417 |
+
licenseKey = $modal.find( 'input.fs-license-key' ).val().trim(),
|
418 |
+
otherLicenseKeySelected = isOtherLicenseKeySelected();
|
419 |
+
|
420 |
+
if ( ( licenseKey.length > 0 || ( hasLicenseTypes && ! otherLicenseKeySelected ) ) &&
|
421 |
+
( $modal.hasClass( 'is-single-site-activation' ) || ! isNetworkActivation || hasSelectedSite() )
|
422 |
+
) {
|
423 |
+
/**
|
424 |
+
* If the "other" license is not empty or an available license is selected, enable the activate
|
425 |
+
* button.
|
426 |
+
*
|
427 |
+
* @author Leo Fajardo (@leorw)
|
428 |
+
*/
|
429 |
+
enableActivateLicenseButton();
|
430 |
+
} else {
|
431 |
+
disableActivateLicenseButton();
|
432 |
+
}
|
433 |
+
|
434 |
+
if ( '' !== licenseKey ) {
|
435 |
+
fetchLicenseUserData();
|
436 |
+
}
|
437 |
+
|
438 |
+
if ( ! isNetworkActivation ) {
|
439 |
+
return;
|
440 |
+
}
|
441 |
+
|
442 |
+
if ( otherLicenseKeySelected ) {
|
443 |
+
$applyOnAllSites.attr( 'disabled', false );
|
444 |
+
enableDisableSitesSelection();
|
445 |
+
resetActivateLicenseCheckboxLabel();
|
446 |
+
} else if ( ! $modal.hasClass( 'is-single-site-activation' ) ) {
|
447 |
+
toggleActivationOnAllSites();
|
448 |
+
}
|
449 |
+
});
|
450 |
+
|
451 |
+
if ( ! hasLicensesDropdown ) {
|
452 |
+
$availableLicenseKey.click(function() {
|
453 |
+
$licenseTypes.filter( '[value="available"]' ).click();
|
454 |
+
});
|
455 |
+
}
|
456 |
+
|
457 |
+
$otherLicenseKeyContainer.click(function() {
|
458 |
+
$licenseTypes.filter( '[value="other"]' ).click();
|
459 |
+
});
|
460 |
+
}
|
461 |
+
|
462 |
+
$activateLicenseLink.click(function (evt) {
|
463 |
+
evt.preventDefault();
|
464 |
+
|
465 |
+
showModal( evt );
|
466 |
+
});
|
467 |
+
|
468 |
+
var licenseTimeout = null;
|
469 |
+
|
470 |
+
/**
|
471 |
+
* Disable activation button when license key is empty.
|
472 |
+
*
|
473 |
+
* @author Leo Fajardo (@leorw)
|
474 |
+
* @since 2.3.2
|
475 |
+
*/
|
476 |
+
$modal.on( 'keyup paste delete cut', 'input.fs-license-key', function () {
|
477 |
+
clearTimeout(licenseTimeout);
|
478 |
+
|
479 |
+
licenseTimeout = setTimeout( function () {
|
480 |
+
var licenseKey = $licenseKeyInput.val().trim();
|
481 |
+
|
482 |
+
if ( licenseKey == previousLicenseKey ) {
|
483 |
+
afterLicenseUserDataLoaded();
|
484 |
+
return;
|
485 |
+
}
|
486 |
+
|
487 |
+
if ( '' === licenseKey ) {
|
488 |
+
disableActivateLicenseButton();
|
489 |
+
$ownershipChangeOptionContainer.hide();
|
490 |
+
} else {
|
491 |
+
enableActivateLicenseButton();
|
492 |
+
|
493 |
+
if ( 32 <= licenseKey.length ) {
|
494 |
+
fetchLicenseUserData();
|
495 |
+
} else {
|
496 |
+
$ownershipChangeOptionContainer.hide();
|
497 |
+
}
|
498 |
+
}
|
499 |
+
|
500 |
+
previousLicenseKey = licenseKey;
|
501 |
+
}, 200 );
|
502 |
+
} ).focus();
|
503 |
+
|
504 |
+
$modal.on('input propertychange', 'input.fs-license-key', function () {
|
505 |
+
|
506 |
+
var licenseKey = $(this).val().trim();
|
507 |
+
|
508 |
+
/**
|
509 |
+
* If license key is not empty, enable the license activation button.
|
510 |
+
*/
|
511 |
+
if ( licenseKey.length > 0 && ( $modal.hasClass( 'is-single-site-activation' ) || ! isNetworkActivation || hasSelectedSite() ) ) {
|
512 |
+
enableActivateLicenseButton();
|
513 |
+
}
|
514 |
+
});
|
515 |
+
|
516 |
+
$modal.on( 'blur', 'input.fs-license-key', function( evt ) {
|
517 |
+
var
|
518 |
+
licenseKey = $(this).val().trim(),
|
519 |
+
$focusedElement = $( evt.relatedTarget ),
|
520 |
+
hasSelectedAvailableLicense = ( hasLicenseTypes && $focusedElement.parents( '.fs-available-license-key-container' ).length > 0 );
|
521 |
+
|
522 |
+
/**
|
523 |
+
* If license key is empty, disable the license activation button.
|
524 |
+
*/
|
525 |
+
if ( ( 0 === licenseKey.length && ( ! hasLicenseTypes || ! hasSelectedAvailableLicense ) ) ||
|
526 |
+
( isNetworkActivation && ! hasSelectedSite() )
|
527 |
+
) {
|
528 |
+
disableActivateLicenseButton();
|
529 |
+
}
|
530 |
+
});
|
531 |
+
|
532 |
+
$modal.on('click', '.button-activate-license', function (evt) {
|
533 |
+
evt.preventDefault();
|
534 |
+
|
535 |
+
if ($(this).hasClass('disabled')) {
|
536 |
+
return;
|
537 |
+
}
|
538 |
+
|
539 |
+
var
|
540 |
+
licenseKey = '';
|
541 |
+
|
542 |
+
if ( hasLicenseTypes ) {
|
543 |
+
if ( isOtherLicenseKeySelected() ) {
|
544 |
+
licenseKey = $otherLicenseKey.val();
|
545 |
+
} else {
|
546 |
+
if ( ! hasLicensesDropdown ) {
|
547 |
+
licenseKey = $availableLicenseKey.data( 'license-key' );
|
548 |
+
} else {
|
549 |
+
licenseKey = $licensesDropdown.val();
|
550 |
+
}
|
551 |
+
}
|
552 |
+
} else {
|
553 |
+
licenseKey = $licenseKeyInput.val().trim();
|
554 |
+
}
|
555 |
+
|
556 |
+
disableActivateLicenseButton();
|
557 |
+
|
558 |
+
if (0 === licenseKey.length) {
|
559 |
+
return;
|
560 |
+
}
|
561 |
+
|
562 |
+
var data = {
|
563 |
+
action : '<?php echo $fs->get_ajax_action( 'activate_license' ) ?>',
|
564 |
+
security : '<?php echo $fs->get_ajax_security( 'activate_license' ) ?>',
|
565 |
+
license_key: licenseKey,
|
566 |
+
module_id : '<?php echo $fs->get_id() ?>'
|
567 |
+
};
|
568 |
+
|
569 |
+
if ( isNetworkActivation ) {
|
570 |
+
var
|
571 |
+
sites = [];
|
572 |
+
|
573 |
+
if ( null === singleBlogID ) {
|
574 |
+
var
|
575 |
+
applyOnAllSites = $applyOnAllSites.is( ':checked' );
|
576 |
+
|
577 |
+
$sitesListContainer.find( 'tr' ).each(function() {
|
578 |
+
var
|
579 |
+
$this = $( this ),
|
580 |
+
includeSite = ( applyOnAllSites || $this.find( 'input' ).is( ':checked' ) );
|
581 |
+
|
582 |
+
if ( ! includeSite )
|
583 |
+
return;
|
584 |
+
|
585 |
+
var site = {
|
586 |
+
uid : $this.find( '.uid' ).val(),
|
587 |
+
url : $this.find( '.url' ).val(),
|
588 |
+
title : $this.find( '.title' ).val(),
|
589 |
+
language: $this.find( '.language' ).val(),
|
590 |
+
charset : $this.find( '.charset' ).val(),
|
591 |
+
blog_id : $this.find( '.blog-id' ).find( 'span' ).text()
|
592 |
+
};
|
593 |
+
|
594 |
+
sites.push( site );
|
595 |
+
});
|
596 |
+
} else {
|
597 |
+
data.blog_id = singleBlogID;
|
598 |
+
}
|
599 |
+
|
600 |
+
data.sites = sites;
|
601 |
+
}
|
602 |
+
|
603 |
+
if ( $ownershipChangeOptionContainer.find( 'input:checked' ).length > 0 ) {
|
604 |
+
data.user_id = otherLicenseOwnerID;
|
605 |
+
}
|
606 |
+
|
607 |
+
$.ajax({
|
608 |
+
url: ajaxurl,
|
609 |
+
method: 'POST',
|
610 |
+
data: data,
|
611 |
+
beforeSend: function () {
|
612 |
+
$activateLicenseButton.text( '<?php fs_esc_js_echo_inline( 'Activating license', 'activating-license', $slug ) ?>...' );
|
613 |
+
},
|
614 |
+
success: function( result ) {
|
615 |
+
var resultObj = $.parseJSON( result );
|
616 |
+
if ( resultObj.success ) {
|
617 |
+
closeModal();
|
618 |
+
|
619 |
+
// Redirect to the "Account" page and sync the license.
|
620 |
+
window.location.href = resultObj.next_page;
|
621 |
+
} else {
|
622 |
+
showError( resultObj.error.message ? resultObj.error.message : resultObj.error );
|
623 |
+
resetActivateLicenseButton();
|
624 |
+
}
|
625 |
+
}
|
626 |
+
});
|
627 |
+
});
|
628 |
+
|
629 |
+
// If the user has clicked outside the window, close the modal.
|
630 |
+
$modal.on('click', '.fs-close, .button-secondary', function () {
|
631 |
+
closeModal();
|
632 |
+
return false;
|
633 |
+
});
|
634 |
+
}
|
635 |
+
|
636 |
+
registerEventHandlers();
|
637 |
+
|
638 |
+
$('body').trigger('licenseActivationLoaded');
|
639 |
+
|
640 |
+
/**
|
641 |
+
* @author Leo Fajardo (@leorw)
|
642 |
+
* @since 2.0.0
|
643 |
+
*/
|
644 |
+
function enableDisableSitesSelection() {
|
645 |
+
var
|
646 |
+
canApplyOnAllSites = $applyOnAllSites.is( ':enabled' ),
|
647 |
+
disableSitesSelection = null;
|
648 |
+
|
649 |
+
if ( ! canApplyOnAllSites ) {
|
650 |
+
var
|
651 |
+
selectedSites = $sitesListContainer.find( 'input[type="checkbox"]:checked' ).length,
|
652 |
+
activationsLeft = Math.max( 0, $activationsLeft.data( 'left' ) - selectedSites );
|
653 |
+
|
654 |
+
disableSitesSelection = ( 0 === activationsLeft );
|
655 |
+
|
656 |
+
$activationsLeft.text( activationsLeft );
|
657 |
+
} else {
|
658 |
+
disableSitesSelection = false;
|
659 |
+
}
|
660 |
+
|
661 |
+
$sitesListContainer
|
662 |
+
.find( 'input[type="checkbox"]:not(:checked)' )
|
663 |
+
.attr( 'disabled', disableSitesSelection );
|
664 |
+
}
|
665 |
+
|
666 |
+
/**
|
667 |
+
* @author Leo Fajardo (@leorw)
|
668 |
+
* @since 2.0.0
|
669 |
+
*
|
670 |
+
* @returns {Boolean}
|
671 |
+
*/
|
672 |
+
function isOtherLicenseKeySelected() {
|
673 |
+
return ( hasLicenseTypes && 'other' === $licenseTypes.filter( ':checked' ).val() );
|
674 |
+
}
|
675 |
+
|
676 |
+
/**
|
677 |
+
* @author Leo Fajardo (@leorw)
|
678 |
+
* @since 2.0.0
|
679 |
+
*
|
680 |
+
* @returns {Boolean}
|
681 |
+
*/
|
682 |
+
function hasValidLicenseKey() {
|
683 |
+
var licenseKey = '';
|
684 |
+
if ( hasLicenseTypes ) {
|
685 |
+
if ( 'available' === $licenseTypes.filter( ':checked' ).val() ) {
|
686 |
+
return true;
|
687 |
+
} else {
|
688 |
+
licenseKey = $otherLicenseKey.val();
|
689 |
+
}
|
690 |
+
} else {
|
691 |
+
licenseKey = $modal.find( 'input.fs-license-key' ).val();
|
692 |
+
}
|
693 |
+
|
694 |
+
return ( licenseKey.trim().length > 0 );
|
695 |
+
}
|
696 |
+
|
697 |
+
/**
|
698 |
+
* @author Leo Fajardo (@leorw)
|
699 |
+
* @since 2.0.0
|
700 |
+
*
|
701 |
+
* @returns {Boolean}
|
702 |
+
*/
|
703 |
+
function hasSelectedSite() {
|
704 |
+
return ( $applyOnAllSites.is( ':checked' ) ||
|
705 |
+
$sitesListContainer.find( 'input[type="checkbox"]:checked:not(:disabled)' ).length > 0 );
|
706 |
+
}
|
707 |
+
|
708 |
+
/**
|
709 |
+
* @author Leo Fajardo (@leorw)
|
710 |
+
* @since 2.0.0
|
711 |
+
*/
|
712 |
+
function toggleActivationOnAllSites() {
|
713 |
+
var activationsLeft,
|
714 |
+
licenseID;
|
715 |
+
|
716 |
+
if (hasLicensesDropdown) {
|
717 |
+
var $selectedOption = $licensesDropdown.find( ':selected' );
|
718 |
+
activationsLeft = $selectedOption.data('left');
|
719 |
+
licenseID = $selectedOption.data('id');
|
720 |
+
} else {
|
721 |
+
activationsLeft = $availableLicenseKey.data('left');
|
722 |
+
licenseID = $availableLicenseKey.data('id');
|
723 |
+
}
|
724 |
+
|
725 |
+
// Cleanup previously auto-selected site.
|
726 |
+
$modal.find( '.fs-sites-list-container input[type=checkbox]:disabled' )
|
727 |
+
.attr('disabled', false)
|
728 |
+
.attr('checked', false);
|
729 |
+
|
730 |
+
var $blogsWithActiveLicense = $modal.find( '.fs-sites-list-container tr[data-license-id=' + licenseID + '] input[type=checkbox]' );
|
731 |
+
|
732 |
+
if ($blogsWithActiveLicense.length > 0) {
|
733 |
+
$blogsWithActiveLicense.attr('checked', true)
|
734 |
+
.attr('disabled', true);
|
735 |
+
|
736 |
+
activationsLeft += $blogsWithActiveLicense.length;
|
737 |
+
}
|
738 |
+
|
739 |
+
if ( activationsLeft >= totalSites ) {
|
740 |
+
$applyOnAllSites.attr( 'disabled', false );
|
741 |
+
enableDisableSitesSelection();
|
742 |
+
|
743 |
+
resetActivateLicenseCheckboxLabel();
|
744 |
+
|
745 |
+
return;
|
746 |
+
}
|
747 |
+
|
748 |
+
$applyOnAllSites.attr( 'checked', false );
|
749 |
+
$applyOnAllSites.attr( 'disabled', true );
|
750 |
+
|
751 |
+
showSites( true );
|
752 |
+
|
753 |
+
var
|
754 |
+
activateLicenseCheckboxLabel = '<?php fs_esc_js_echo_inline( 'Choose up to %s site(s) to activate the license on.', 'choose-up-to-n-sites-to-activate-the-license-on', $slug ) ?>';
|
755 |
+
|
756 |
+
activateLicenseCheckboxLabel = activateLicenseCheckboxLabel.replace( '%s', '<span data-left="' + activationsLeft + '" class="activations-left">' + activationsLeft + '</span>' );
|
757 |
+
|
758 |
+
// Update the label of the "Activate license on all sites" checkbox.
|
759 |
+
$applyOnAllSites.parent().find( 'span' ).html( activateLicenseCheckboxLabel );
|
760 |
+
$activationsLeft = $modal.find( '.activations-left' );
|
761 |
+
|
762 |
+
if ( hasSelectedSite() ) {
|
763 |
+
enableActivateLicenseButton();
|
764 |
+
enableDisableSitesSelection();
|
765 |
+
} else {
|
766 |
+
disableActivateLicenseButton();
|
767 |
+
}
|
768 |
+
}
|
769 |
+
|
770 |
+
/**
|
771 |
+
* @author Leo Fajardo (@leorw)
|
772 |
+
* @since 2.0.0
|
773 |
+
*/
|
774 |
+
function resetActivateLicenseCheckboxLabel() {
|
775 |
+
var activateLicenseCheckboxLabel = '<?php fs_esc_js_echo_inline( 'Activate license on all sites in the network.', 'activate-license-on-all-sites-in-the-network', $slug ) ?>';
|
776 |
+
$applyOnAllSites.parent().find( 'span' ).text( activateLicenseCheckboxLabel );
|
777 |
+
}
|
778 |
+
|
779 |
+
/**
|
780 |
+
* @author Leo Fajardo (@leorw)
|
781 |
+
* @since 2.0.0
|
782 |
+
*
|
783 |
+
* @param {Boolean} show
|
784 |
+
*/
|
785 |
+
function showSites( show ) {
|
786 |
+
$sitesListContainer.toggle( show );
|
787 |
+
if ( show && null === maxSitesListHeight ) {
|
788 |
+
/**
|
789 |
+
* Set the visible number of rows to 5 (5 * height of the first row).
|
790 |
+
*
|
791 |
+
* @author Leo Fajardo (@leorw)
|
792 |
+
*/
|
793 |
+
maxSitesListHeight = ( 5 * $sitesListContainer.find( 'tr:first' ).height() );
|
794 |
+
$sitesListContainer.css( 'max-height', maxSitesListHeight );
|
795 |
+
}
|
796 |
+
}
|
797 |
+
|
798 |
+
function showModal( evt ) {
|
799 |
+
resetModal();
|
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' ),
|
807 |
+
isSingleSiteActivation = ( $singleInstallDetails.length > 0 );
|
808 |
+
|
809 |
+
$modal.toggleClass( 'is-single-site-activation', isSingleSiteActivation );
|
810 |
+
|
811 |
+
singleBlogID = isSingleSiteActivation ?
|
812 |
+
$singleInstallDetails.prev().data( 'blog-id' ) :
|
813 |
+
null;
|
814 |
+
|
815 |
+
$multisiteOptionsContainer.toggle( isNetworkActivation && ! isSingleSiteActivation );
|
816 |
+
|
817 |
+
if ( hasLicenseTypes ) {
|
818 |
+
$licenseTypes.attr( 'checked', false );
|
819 |
+
|
820 |
+
if ( hasLicensesDropdown ) {
|
821 |
+
$licensesDropdown.find( 'option:first' ).attr( 'selected', true ).trigger( 'change' );
|
822 |
+
} else {
|
823 |
+
$licenseTypes.filter( '[value="available"]' ).click();
|
824 |
+
}
|
825 |
+
|
826 |
+
$otherLicenseKey.val( '' );
|
827 |
+
} else {
|
828 |
+
$licenseKeyInput.val( '' );
|
829 |
+
$licenseKeyInput.focus();
|
830 |
+
}
|
831 |
+
}
|
832 |
+
|
833 |
+
function closeModal() {
|
834 |
+
$modal.removeClass('active');
|
835 |
+
$('body').removeClass('has-fs-modal');
|
836 |
+
}
|
837 |
+
|
838 |
+
function resetActivateLicenseButton() {
|
839 |
+
enableActivateLicenseButton();
|
840 |
+
$activateLicenseButton.text( <?php echo json_encode( $activate_button_text ) ?> );
|
841 |
+
}
|
842 |
+
|
843 |
+
function resetModal() {
|
844 |
+
hideError();
|
845 |
+
resetActivateLicenseButton();
|
846 |
+
}
|
847 |
+
|
848 |
+
function enableActivateLicenseButton() {
|
849 |
+
$activateLicenseButton.removeClass( 'disabled' );
|
850 |
+
}
|
851 |
+
|
852 |
+
function disableActivateLicenseButton() {
|
853 |
+
$activateLicenseButton.addClass( 'disabled' );
|
854 |
+
}
|
855 |
+
|
856 |
+
function hideError() {
|
857 |
+
$licenseActivationMessage.hide();
|
858 |
+
}
|
859 |
+
|
860 |
+
function showError( msg ) {
|
861 |
+
$licenseActivationMessage.find( ' > p' ).html( msg );
|
862 |
+
$licenseActivationMessage.show();
|
863 |
+
}
|
864 |
+
});
|
865 |
+
})( jQuery );
|
866 |
</script>
|
common/vendor/freemius/templates/forms/optout.php
CHANGED
@@ -1,267 +1,329 @@
|
|
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.2.1.5
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
/**
|
14 |
-
* @var array $VARS
|
15 |
-
* @var Freemius $fs
|
16 |
-
*/
|
17 |
-
$fs = freemius( $VARS['id'] );
|
18 |
-
$slug = $fs->get_slug();
|
19 |
-
|
20 |
-
$action = $fs->is_tracking_allowed() ?
|
21 |
-
'stop_tracking' :
|
22 |
-
'allow_tracking';
|
23 |
-
|
24 |
-
$reconnect_url = $fs->get_activation_url( array(
|
25 |
-
'nonce' => wp_create_nonce( $fs->get_unique_affix() . '_reconnect' ),
|
26 |
-
'fs_action' => ( $fs->get_unique_affix() . '_reconnect' ),
|
27 |
-
) );
|
28 |
-
|
29 |
-
$plugin_title = "<strong>{$fs->get_plugin()->title}</strong>";
|
30 |
-
$opt_out_text = fs_text_x_inline( 'Opt Out', 'verb', 'opt-out', $slug );
|
31 |
-
$opt_in_text = fs_text_x_inline( 'Opt In', 'verb', 'opt-in', $slug );
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
$
|
37 |
-
sprintf(
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
)
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
'
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
'
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
});
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
}
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.2.1.5
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @var array $VARS
|
15 |
+
* @var Freemius $fs
|
16 |
+
*/
|
17 |
+
$fs = freemius( $VARS['id'] );
|
18 |
+
$slug = $fs->get_slug();
|
19 |
+
|
20 |
+
$action = $fs->is_tracking_allowed() ?
|
21 |
+
'stop_tracking' :
|
22 |
+
'allow_tracking';
|
23 |
+
|
24 |
+
$reconnect_url = $fs->get_activation_url( array(
|
25 |
+
'nonce' => wp_create_nonce( $fs->get_unique_affix() . '_reconnect' ),
|
26 |
+
'fs_action' => ( $fs->get_unique_affix() . '_reconnect' ),
|
27 |
+
) );
|
28 |
+
|
29 |
+
$plugin_title = "<strong>{$fs->get_plugin()->title}</strong>";
|
30 |
+
$opt_out_text = fs_text_x_inline( 'Opt Out', 'verb', 'opt-out', $slug );
|
31 |
+
$opt_in_text = fs_text_x_inline( 'Opt In', 'verb', 'opt-in', $slug );
|
32 |
+
|
33 |
+
if ( $fs->is_premium() ) {
|
34 |
+
$opt_in_message_appreciation = fs_text_inline( 'Connectivity to the licensing engine was successfully re-established. Automatic security & feature updates are now available through the WP Admin Dashboard.', 'premium-opt-in-message-appreciation', $slug );
|
35 |
+
|
36 |
+
$opt_out_message_subtitle = sprintf( fs_text_inline( 'Warning: Opting out will block automatic updates', 'premium-opt-out-message-appreciation', $slug ), $fs->get_module_type() );
|
37 |
+
$opt_out_message_usage_tracking = sprintf( fs_text_inline( 'Ongoing connectivity with the licensing engine is essential for receiving automatic security & feature updates of the paid product. To receive these updates, data like your license key, %1$s version, and WordPress version, is periodically sent to the server to check for updates. By opting out, you understand that your site won\'t receive automatic updates for %2$s from within the WP Admin Dashboard. This can put your site at risk, and we highly recommend to keep this connection active. If you do choose to opt-out, you\'ll need to check for %1$s updates and install them manually.', 'premium-opt-out-message-usage-tracking', $slug ), $fs->get_module_type(), $plugin_title );
|
38 |
+
|
39 |
+
$primary_cta_label = fs_text_inline( 'I\'d like to keep automatic updates', 'premium-opt-out-cancel', $slug );
|
40 |
+
} else {
|
41 |
+
$opt_in_message_appreciation = sprintf( fs_text_inline( 'We appreciate your help in making the %s better by letting us track some usage data.', 'opt-in-message-appreciation', $slug ), $fs->get_module_type() );
|
42 |
+
|
43 |
+
$opt_out_message_subtitle = $opt_in_message_appreciation;
|
44 |
+
$opt_out_message_usage_tracking = sprintf( fs_text_inline( "Usage tracking is done in the name of making %s better. Making a better user experience, prioritizing new features, and more good things. We'd really appreciate if you'll reconsider letting us continue with the tracking.", 'opt-out-message-usage-tracking', $slug ), $plugin_title );
|
45 |
+
$primary_cta_label = fs_text_inline( 'On second thought - I want to continue helping', 'opt-out-cancel', $slug );
|
46 |
+
}
|
47 |
+
|
48 |
+
$opt_out_message_clicking_opt_out = sprintf(
|
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 |
+
)
|
56 |
+
);
|
57 |
+
|
58 |
+
$admin_notice_params = array(
|
59 |
+
'id' => '',
|
60 |
+
'slug' => $fs->get_id(),
|
61 |
+
'type' => 'success',
|
62 |
+
'sticky' => false,
|
63 |
+
'plugin' => $fs->get_plugin()->title,
|
64 |
+
'message' => $opt_in_message_appreciation
|
65 |
+
);
|
66 |
+
|
67 |
+
$admin_notice_html = fs_get_template( 'admin-notice.php', $admin_notice_params );
|
68 |
+
|
69 |
+
$modal_content_html = "
|
70 |
+
<h2" . ( $fs->is_premium() ? ' style="color: red"' : '' ) . ">{$opt_out_message_subtitle}</h2>
|
71 |
+
<div class=\"notice notice-error inline opt-out-error-message\"><p></p></div>
|
72 |
+
<p>{$opt_out_message_usage_tracking}</p>
|
73 |
+
<p>{$opt_out_message_clicking_opt_out}</p>
|
74 |
+
<label class=\"fs-permission-extensions\"><div class=\"fs-switch fs-small fs-round fs-" . ( $fs->is_extensions_tracking_allowed() ? 'on' : 'off' ) . "\"><div class=\"fs-toggle\"></div></div> " . fs_text_inline( 'Plugins & themes tracking' ) . " <span class=\"fs-switch-feedback success\"></span></label>";
|
75 |
+
|
76 |
+
fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
|
77 |
+
fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
|
78 |
+
?>
|
79 |
+
<script type="text/javascript">
|
80 |
+
(function( $ ) {
|
81 |
+
$( document ).ready(function() {
|
82 |
+
var modalContentHtml = <?php echo json_encode( $modal_content_html ) ?>,
|
83 |
+
modalHtml =
|
84 |
+
'<div class="fs-modal fs-modal-opt-out">'
|
85 |
+
+ ' <div class="fs-modal-dialog">'
|
86 |
+
+ ' <div class="fs-modal-header">'
|
87 |
+
+ ' <h4><?php echo esc_js( $opt_out_text ) ?></h4>'
|
88 |
+
+ ' </div>'
|
89 |
+
+ ' <div class="fs-modal-body">'
|
90 |
+
+ ' <div class="fs-modal-panel active">' + modalContentHtml + '</div>'
|
91 |
+
+ ' </div>'
|
92 |
+
+ ' <div class="fs-modal-footer">'
|
93 |
+
+ ' <button class="button <?php echo $fs->is_premium() ? 'button-primary warn' : 'button-secondary' ?> button-opt-out" tabindex="1"><?php echo esc_js( $opt_out_text ) ?></button>'
|
94 |
+
+ ' <button class="button <?php echo $fs->is_premium() ? 'button-secondary' : 'button-primary' ?> button-close" tabindex="2"><?php echo esc_js( $primary_cta_label ) ?></button>'
|
95 |
+
+ ' </div>'
|
96 |
+
+ ' </div>'
|
97 |
+
+ '</div>',
|
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();
|
118 |
+
}
|
119 |
+
|
120 |
+
return false;
|
121 |
+
});
|
122 |
+
}
|
123 |
+
|
124 |
+
function registerEventHandlers() {
|
125 |
+
registerActionLinkClick();
|
126 |
+
|
127 |
+
$modal.on( 'click', '.button-opt-out', function( evt ) {
|
128 |
+
evt.preventDefault();
|
129 |
+
|
130 |
+
if ( $( this ).hasClass( 'disabled' ) ) {
|
131 |
+
return;
|
132 |
+
}
|
133 |
+
|
134 |
+
disableOptOutButton();
|
135 |
+
optOut();
|
136 |
+
});
|
137 |
+
|
138 |
+
// If the user has clicked outside the window, close the modal.
|
139 |
+
$modal.on( 'click', '.fs-close, .button-close', function() {
|
140 |
+
closeModal();
|
141 |
+
return false;
|
142 |
+
});
|
143 |
+
}
|
144 |
+
|
145 |
+
<?php if ( $fs->is_registered() ) : ?>
|
146 |
+
registerEventHandlers();
|
147 |
+
<?php endif ?>
|
148 |
+
|
149 |
+
function showModal() {
|
150 |
+
resetModal();
|
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() {
|
163 |
+
enableOptOutButton();
|
164 |
+
$optOutButton.text( <?php echo json_encode( $opt_out_text ) ?> );
|
165 |
+
}
|
166 |
+
|
167 |
+
function resetModal() {
|
168 |
+
hideError();
|
169 |
+
resetOptOutButton();
|
170 |
+
}
|
171 |
+
|
172 |
+
function optIn() {
|
173 |
+
sendRequest();
|
174 |
+
}
|
175 |
+
|
176 |
+
function optOut() {
|
177 |
+
sendRequest();
|
178 |
+
}
|
179 |
+
|
180 |
+
function sendRequest() {
|
181 |
+
$.ajax({
|
182 |
+
url: ajaxurl,
|
183 |
+
method: 'POST',
|
184 |
+
data: {
|
185 |
+
action : ( 'stop_tracking' == action ?
|
186 |
+
'<?php echo $fs->get_ajax_action( 'stop_tracking' ) ?>' :
|
187 |
+
'<?php echo $fs->get_ajax_action( 'allow_tracking' ) ?>'
|
188 |
+
),
|
189 |
+
security : ( 'stop_tracking' == action ?
|
190 |
+
'<?php echo $fs->get_ajax_security( 'stop_tracking' ) ?>' :
|
191 |
+
'<?php echo $fs->get_ajax_security( 'allow_tracking' ) ?>'
|
192 |
+
),
|
193 |
+
module_id: moduleID,
|
194 |
+
_wp_http_referer: '<?php echo $fs->current_page_url() ?>'
|
195 |
+
},
|
196 |
+
beforeSend: function() {
|
197 |
+
if ( 'allow_tracking' == action ) {
|
198 |
+
$actionLink.text( '<?php fs_esc_js_echo_inline( 'Opting in', 'opting-in', $slug ) ?>...' );
|
199 |
+
} else {
|
200 |
+
$optOutButton.text( '<?php fs_esc_js_echo_inline( 'Opting out', 'opting-out', $slug ) ?>...' );
|
201 |
+
}
|
202 |
+
},
|
203 |
+
success: function( resultObj ) {
|
204 |
+
if ( resultObj.success ) {
|
205 |
+
if ( 'allow_tracking' == action ) {
|
206 |
+
action = 'stop_tracking';
|
207 |
+
$actionLink.text( '<?php echo esc_js( $opt_out_text ) ?>' );
|
208 |
+
showOptInAppreciationMessageAndScrollToTop();
|
209 |
+
} else {
|
210 |
+
action = 'allow_tracking';
|
211 |
+
$actionLink.text( '<?php echo esc_js( $opt_in_text ) ?>' );
|
212 |
+
closeModal();
|
213 |
+
|
214 |
+
if ( $adminNotice.length > 0 ) {
|
215 |
+
$adminNotice.remove();
|
216 |
+
}
|
217 |
+
}
|
218 |
+
|
219 |
+
$actionLink.attr( 'data-action', action );
|
220 |
+
} else {
|
221 |
+
showError( resultObj.error );
|
222 |
+
resetOptOutButton();
|
223 |
+
}
|
224 |
+
}
|
225 |
+
});
|
226 |
+
}
|
227 |
+
|
228 |
+
var isUpdatingPermission = false;
|
229 |
+
$extensionsTracking.on('click', function() {
|
230 |
+
if (isUpdatingPermission) {
|
231 |
+
return false;
|
232 |
+
}
|
233 |
+
|
234 |
+
isUpdatingPermission = true;
|
235 |
+
|
236 |
+
var $switch = $extensionsTracking.find( '.fs-switch' ),
|
237 |
+
$switchFeedback = $extensionsTracking.find( '.fs-switch-feedback' );
|
238 |
+
|
239 |
+
$switch
|
240 |
+
.toggleClass( 'fs-on' )
|
241 |
+
.toggleClass( 'fs-off' );
|
242 |
+
|
243 |
+
$switchFeedback.html( '<i class="fs-ajax-spinner"></i>' );
|
244 |
+
|
245 |
+
$.ajax({
|
246 |
+
url: ajaxurl,
|
247 |
+
method: 'POST',
|
248 |
+
data: {
|
249 |
+
action : '<?php echo $fs->get_ajax_action( 'update_tracking_permission' ) ?>',
|
250 |
+
security : '<?php echo $fs->get_ajax_security( 'update_tracking_permission' ) ?>',
|
251 |
+
module_id : moduleID,
|
252 |
+
_wp_http_referer: '<?php echo $fs->current_page_url() ?>',
|
253 |
+
permission: 'extensions',
|
254 |
+
is_enabled: $switch.hasClass('fs-on')
|
255 |
+
},
|
256 |
+
success: function( resultObj ) {
|
257 |
+
if ( resultObj.success ) {
|
258 |
+
$switchFeedback.html( '<i class="dashicons dashicons-yes"></i> <?php echo esc_js( fs_text_inline( 'Saved', 'saved', $slug ) ) ?>' )
|
259 |
+
} else {
|
260 |
+
$switch
|
261 |
+
.toggleClass( 'fs-on' )
|
262 |
+
.toggleClass( 'fs-off' );
|
263 |
+
}
|
264 |
+
|
265 |
+
isUpdatingPermission = false;
|
266 |
+
}
|
267 |
+
});
|
268 |
+
});
|
269 |
+
|
270 |
+
function enableOptOutButton() {
|
271 |
+
$optOutButton.removeClass( 'disabled' );
|
272 |
+
}
|
273 |
+
|
274 |
+
function disableOptOutButton() {
|
275 |
+
$optOutButton.addClass( 'disabled' );
|
276 |
+
}
|
277 |
+
|
278 |
+
function hideError() {
|
279 |
+
$optOutErrorMessage.hide();
|
280 |
+
}
|
281 |
+
|
282 |
+
function showOptInAppreciationMessageAndScrollToTop() {
|
283 |
+
$adminNotice.insertAfter( $( '#wpbody-content' ).find( ' > .wrap > h1' ) );
|
284 |
+
window.scrollTo(0, 0);
|
285 |
+
}
|
286 |
+
|
287 |
+
function showError( msg ) {
|
288 |
+
$optOutErrorMessage.find( ' > p' ).html( msg );
|
289 |
+
$optOutErrorMessage.show();
|
290 |
+
}
|
291 |
+
|
292 |
+
<?php if ( $fs->is_theme() ) : ?>
|
293 |
+
/**
|
294 |
+
* Add opt-in/out button to the active theme's buttons collection
|
295 |
+
* in the theme's extended details overlay.
|
296 |
+
*
|
297 |
+
* @author Vova Feldman (@svovaf)
|
298 |
+
* @since 1.2.2.7
|
299 |
+
*/
|
300 |
+
$('.theme-overlay').contentChange(function () {
|
301 |
+
if (0 === $('.theme-overlay.active').length) {
|
302 |
+
// Add opt-in/out button only to the currently active theme.
|
303 |
+
return;
|
304 |
+
}
|
305 |
+
|
306 |
+
if ($('#fs_theme_opt_in_out').length > 0){
|
307 |
+
// Button already there.
|
308 |
+
return;
|
309 |
+
}
|
310 |
+
|
311 |
+
var label = (('stop_tracking' == action) ?
|
312 |
+
'<?php echo esc_js( $opt_out_text ) ?>' :
|
313 |
+
'<?php echo esc_js( $opt_in_text ) ?>'),
|
314 |
+
href = (('stop_tracking' != action) ?
|
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 |
+
|
322 |
+
if ('' === href) {
|
323 |
+
registerActionLinkClick();
|
324 |
+
}
|
325 |
+
});
|
326 |
+
<?php endif ?>
|
327 |
+
});
|
328 |
+
})( jQuery );
|
329 |
+
</script>
|
common/vendor/freemius/templates/forms/subscription-cancellation.php
CHANGED
@@ -96,7 +96,7 @@ HTML;
|
|
96 |
$downgrading_plan_text = fs_text_inline( 'Downgrading your plan', 'downgrading-plan', $slug );
|
97 |
$cancelling_subscription_text = fs_text_inline( 'Cancelling the subscription', 'cancelling-subscription', $slug );
|
98 |
/* translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription' */
|
99 |
-
$downgrade_x_confirm_text = fs_text_inline( '%1$s will immediately stop all future recurring payments and your %s plan license will expire in %s.', 'downgrade-x-confirm', $slug );
|
100 |
$prices_increase_text = fs_text_inline( 'Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price.', 'pricing-increase-warning', $slug );
|
101 |
$after_downgrade_non_blocking_text = fs_text_inline( 'You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support.', 'after-downgrade-non-blocking', $slug );
|
102 |
$after_downgrade_blocking_text = fs_text_inline( 'Once your license expires you can still use the Free version but you will NOT have access to the %s features.', 'after-downgrade-blocking', $slug );
|
96 |
$downgrading_plan_text = fs_text_inline( 'Downgrading your plan', 'downgrading-plan', $slug );
|
97 |
$cancelling_subscription_text = fs_text_inline( 'Cancelling the subscription', 'cancelling-subscription', $slug );
|
98 |
/* translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription' */
|
99 |
+
$downgrade_x_confirm_text = fs_text_inline( '%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s.', 'downgrade-x-confirm', $slug );
|
100 |
$prices_increase_text = fs_text_inline( 'Please note that we will not be able to grandfather outdated pricing for renewals/new subscriptions after a cancellation. If you choose to renew the subscription manually in the future, after a price increase, which typically occurs once a year, you will be charged the updated price.', 'pricing-increase-warning', $slug );
|
101 |
$after_downgrade_non_blocking_text = fs_text_inline( 'You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support.', 'after-downgrade-non-blocking', $slug );
|
102 |
$after_downgrade_blocking_text = fs_text_inline( 'Once your license expires you can still use the Free version but you will NOT have access to the %s features.', 'after-downgrade-blocking', $slug );
|
common/vendor/freemius/templates/forms/user-change.php
ADDED
@@ -0,0 +1,296 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 2.3.2
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @var array $VARS
|
15 |
+
*
|
16 |
+
* @var Freemius $fs
|
17 |
+
*/
|
18 |
+
$fs = freemius( $VARS['id'] );
|
19 |
+
$slug = $fs->get_slug();
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @var object[] $license_owners
|
23 |
+
*/
|
24 |
+
$license_owners = $VARS['license_owners'];
|
25 |
+
|
26 |
+
$change_user_message = fs_text_inline( 'By changing the user, you agree to transfer the account ownership to:', 'change-user--message', $slug );
|
27 |
+
$header_title = fs_text_inline( 'Change User', 'change-user', $slug );
|
28 |
+
$user_change_button_text = fs_text_inline( 'I Agree - Change User', 'agree-change-user', $slug );
|
29 |
+
$other_text = fs_text_inline( 'Other', 'other', $slug );
|
30 |
+
$enter_email_address_placeholder_text = fs_text_inline( 'Enter email address', 'enter-email-address', $slug );
|
31 |
+
|
32 |
+
$user_change_options_html = <<< HTML
|
33 |
+
<div class="fs-user-change-options-container">
|
34 |
+
<table>
|
35 |
+
<tbody>
|
36 |
+
HTML;
|
37 |
+
|
38 |
+
foreach ( $license_owners as $license_owner ) {
|
39 |
+
$user_change_options_html .= <<< HTML
|
40 |
+
<tr class="fs-email-address-container">
|
41 |
+
<td><input id="fs_email_address_{$license_owner->id}" type="radio" name="fs_email_address" value="{$license_owner->id}"></td>
|
42 |
+
<td><label for="fs_email_address_{$license_owner->id}">{$license_owner->email}</label></td>
|
43 |
+
</tr>
|
44 |
+
HTML;
|
45 |
+
}
|
46 |
+
|
47 |
+
$user_change_options_html .= <<< HTML
|
48 |
+
<tr>
|
49 |
+
<td><input id="fs_other_email_address_radio" type="radio" name="fs_email_address" value="other"></td>
|
50 |
+
<td class="fs-other-email-address-container">
|
51 |
+
<div>
|
52 |
+
<label for="fs_email_address">{$other_text}: </label>
|
53 |
+
<div>
|
54 |
+
<input id="fs_other_email_address_text_field" class="fs-email-address" type="text" placeholder="{$enter_email_address_placeholder_text}" tabindex="1">
|
55 |
+
</div>
|
56 |
+
</div>
|
57 |
+
</td>
|
58 |
+
</tr>
|
59 |
+
</tbody>
|
60 |
+
</table>
|
61 |
+
</div>
|
62 |
+
HTML;
|
63 |
+
|
64 |
+
$modal_content_html = <<< HTML
|
65 |
+
<div class="notice notice-error inline fs-change-user-result-message"><p></p></div>
|
66 |
+
<p>{$change_user_message}</p>
|
67 |
+
{$user_change_options_html}
|
68 |
+
HTML;
|
69 |
+
|
70 |
+
fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
|
71 |
+
?>
|
72 |
+
<script type="text/javascript">
|
73 |
+
(function( $ ) {
|
74 |
+
$( document ).ready(function() {
|
75 |
+
var modalContentHtml = <?php echo json_encode( $modal_content_html ) ?>,
|
76 |
+
modalHtml =
|
77 |
+
'<div class="fs-modal fs-modal-change-user fs-modal-change-user-<?php echo $fs->get_unique_affix() ?>">'
|
78 |
+
+ ' <div class="fs-modal-dialog">'
|
79 |
+
+ ' <div class="fs-modal-header">'
|
80 |
+
+ ' <h4><?php echo esc_js( $header_title ) ?></h4>'
|
81 |
+
+ ' <a href="!#" class="fs-close"><i class="dashicons dashicons-no" title="<?php echo esc_js( fs_text_x_inline( 'Dismiss', 'close window', 'dismiss', $slug ) ) ?>"></i></a>'
|
82 |
+
+ ' </div>'
|
83 |
+
+ ' <div class="fs-modal-body">'
|
84 |
+
+ ' <div class="fs-modal-panel active">' + modalContentHtml + '</div>'
|
85 |
+
+ ' </div>'
|
86 |
+
+ ' <div class="fs-modal-footer">'
|
87 |
+
+ ' <button class="button button-secondary button-close" tabindex="4"><?php fs_esc_js_echo_inline( 'Cancel', 'cancel', $slug ) ?></button>'
|
88 |
+
+ ' <button class="button button-primary fs-user-change-button" tabindex="3"><?php echo esc_js( $user_change_button_text ) ?></button>'
|
89 |
+
+ ' </div>'
|
90 |
+
+ ' </div>'
|
91 |
+
+ '</div>',
|
92 |
+
$modal = $( modalHtml ),
|
93 |
+
$userChangeButton = $modal.find( '.fs-user-change-button' ),
|
94 |
+
$otherEmailAddressRadio = $modal.find( '#fs_other_email_address_radio' ),
|
95 |
+
$changeUserResultMessage = $modal.find( '.fs-change-user-result-message' ),
|
96 |
+
$otherEmailAddressContainer = $modal.find( '.fs-other-email-address-container' ),
|
97 |
+
$otherEmailAddressTextField = $modal.find( '#fs_other_email_address_text_field' ),
|
98 |
+
$licenseOwners = $modal.find( 'input[type="radio"][name="fs_email_address"]' );
|
99 |
+
|
100 |
+
$modal.appendTo( $( 'body' ) );
|
101 |
+
|
102 |
+
var previousEmailAddress = null;
|
103 |
+
|
104 |
+
function registerEventHandlers() {
|
105 |
+
$licenseOwners.change( function() {
|
106 |
+
var otherEmailAddress = $otherEmailAddressTextField.val().trim(),
|
107 |
+
otherEmailAddressIsSelected = isOtherEmailAddressSelected();
|
108 |
+
|
109 |
+
if ( otherEmailAddressIsSelected ) {
|
110 |
+
$otherEmailAddressTextField.focus();
|
111 |
+
}
|
112 |
+
|
113 |
+
if ( otherEmailAddress.length > 0 || ! otherEmailAddressIsSelected ) {
|
114 |
+
enableUserChangeButton();
|
115 |
+
} else {
|
116 |
+
disableUserChangeButton();
|
117 |
+
}
|
118 |
+
} );
|
119 |
+
|
120 |
+
$otherEmailAddressContainer.click( function () {
|
121 |
+
$otherEmailAddressRadio.click();
|
122 |
+
} );
|
123 |
+
|
124 |
+
// Handle for the "Change User" button on the "Account" page.
|
125 |
+
$( '#fs_change_user' ).click( function ( evt ) {
|
126 |
+
evt.preventDefault();
|
127 |
+
|
128 |
+
showModal( evt );
|
129 |
+
} );
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Disables the "Change User" button when the email address is empty.
|
133 |
+
*/
|
134 |
+
$modal.on( 'keyup paste delete cut', 'input#fs_other_email_address_text_field', function () {
|
135 |
+
setTimeout( function () {
|
136 |
+
var emailAddress = $otherEmailAddressRadio.val().trim();
|
137 |
+
|
138 |
+
if ( emailAddress === previousEmailAddress ) {
|
139 |
+
return;
|
140 |
+
}
|
141 |
+
|
142 |
+
if ( '' === emailAddress ) {
|
143 |
+
disableUserChangeButton();
|
144 |
+
} else {
|
145 |
+
enableUserChangeButton();
|
146 |
+
}
|
147 |
+
|
148 |
+
previousEmailAddress = emailAddress;
|
149 |
+
}, 100 );
|
150 |
+
} ).focus();
|
151 |
+
|
152 |
+
$modal.on( 'input propertychange', 'input#fs_other_email_address_text_field', function () {
|
153 |
+
var emailAddress = $( this ).val().trim();
|
154 |
+
|
155 |
+
/**
|
156 |
+
* If email address is not empty, enable the "Change User" button.
|
157 |
+
*/
|
158 |
+
if ( emailAddress.length > 0 ) {
|
159 |
+
enableUserChangeButton();
|
160 |
+
}
|
161 |
+
} );
|
162 |
+
|
163 |
+
$modal.on( 'blur', 'input#fs_other_email_address_text_field', function( evt ) {
|
164 |
+
var emailAddress = $( this ).val().trim();
|
165 |
+
|
166 |
+
/**
|
167 |
+
* If email address is empty, disable the "Change User" button.
|
168 |
+
*/
|
169 |
+
if ( 0 === emailAddress.length ) {
|
170 |
+
disableUserChangeButton();
|
171 |
+
}
|
172 |
+
} );
|
173 |
+
|
174 |
+
$modal.on( 'click', '.fs-user-change-button', function ( evt ) {
|
175 |
+
evt.preventDefault();
|
176 |
+
|
177 |
+
if ( $( this ).hasClass( 'disabled' ) ) {
|
178 |
+
return;
|
179 |
+
}
|
180 |
+
|
181 |
+
var emailAddress = '',
|
182 |
+
licenseOwnerID = null;
|
183 |
+
|
184 |
+
if ( ! isOtherEmailAddressSelected() ) {
|
185 |
+
licenseOwnerID = $licenseOwners.filter( ':checked' ).val();
|
186 |
+
} else {
|
187 |
+
emailAddress = $otherEmailAddressTextField.val().trim();
|
188 |
+
|
189 |
+
if ( 0 === emailAddress.length ) {
|
190 |
+
return;
|
191 |
+
}
|
192 |
+
}
|
193 |
+
|
194 |
+
disableUserChangeButton();
|
195 |
+
|
196 |
+
$.ajax( {
|
197 |
+
url : ajaxurl,
|
198 |
+
method : 'POST',
|
199 |
+
data : {
|
200 |
+
action : '<?php echo $fs->get_ajax_action( 'change_user' ) ?>',
|
201 |
+
security : '<?php echo $fs->get_ajax_security( 'change_user' ) ?>',
|
202 |
+
email_address: emailAddress,
|
203 |
+
user_id : licenseOwnerID,
|
204 |
+
module_id : '<?php echo $fs->get_id() ?>'
|
205 |
+
},
|
206 |
+
beforeSend: function () {
|
207 |
+
$userChangeButton
|
208 |
+
.text( '<?php fs_esc_js_echo_inline( 'Changing user, please wait', 'changing-user-please-wait', $slug ) ?>...' )
|
209 |
+
.prepend('<i class="fs-ajax-spinner"></i>');
|
210 |
+
|
211 |
+
$(document.body).css({'cursor': 'wait'});
|
212 |
+
},
|
213 |
+
success : function( result ) {
|
214 |
+
if ( result.success ) {
|
215 |
+
// Redirect to the "Account" page.
|
216 |
+
window.location.reload();
|
217 |
+
} else {
|
218 |
+
$(document.body).css({'cursor': 'auto'});
|
219 |
+
|
220 |
+
showError( result.error.message ? result.error.message : result.error );
|
221 |
+
resetUserChangeButton();
|
222 |
+
}
|
223 |
+
},
|
224 |
+
error : function () {
|
225 |
+
$(document.body).css({'cursor': 'auto'});
|
226 |
+
|
227 |
+
showError( '<?php fs_esc_js_echo_inline( 'Unexpected error, try again in 5 minutes. If the error persists, please contact support.', 'unexpected-error', $slug ) ?>' );
|
228 |
+
|
229 |
+
resetUserChangeButton();
|
230 |
+
}
|
231 |
+
} );
|
232 |
+
} );
|
233 |
+
|
234 |
+
// If the user has clicked outside the window, close the modal.
|
235 |
+
$modal.on( 'click', '.fs-close, .button-secondary', function () {
|
236 |
+
closeModal();
|
237 |
+
return false;
|
238 |
+
} );
|
239 |
+
}
|
240 |
+
|
241 |
+
registerEventHandlers();
|
242 |
+
|
243 |
+
/**
|
244 |
+
* @returns {Boolean}
|
245 |
+
*/
|
246 |
+
function isOtherEmailAddressSelected() {
|
247 |
+
return ( 'other' === $licenseOwners.filter( ':checked' ).val() );
|
248 |
+
}
|
249 |
+
|
250 |
+
function showModal() {
|
251 |
+
resetModal();
|
252 |
+
|
253 |
+
// Display the dialog box.
|
254 |
+
$modal.addClass( 'active' );
|
255 |
+
$( 'body' ).addClass( 'has-fs-modal' );
|
256 |
+
|
257 |
+
// Select the first radio button.
|
258 |
+
$licenseOwners.get( 0 ).click();
|
259 |
+
|
260 |
+
$otherEmailAddressTextField.val( '' );
|
261 |
+
}
|
262 |
+
|
263 |
+
function closeModal() {
|
264 |
+
$modal.removeClass( 'active' );
|
265 |
+
$( 'body' ).removeClass( 'has-fs-modal' );
|
266 |
+
}
|
267 |
+
|
268 |
+
function resetUserChangeButton() {
|
269 |
+
enableUserChangeButton();
|
270 |
+
$userChangeButton.text( <?php echo json_encode( $user_change_button_text ) ?> );
|
271 |
+
}
|
272 |
+
|
273 |
+
function resetModal() {
|
274 |
+
hideError();
|
275 |
+
resetUserChangeButton();
|
276 |
+
}
|
277 |
+
|
278 |
+
function enableUserChangeButton() {
|
279 |
+
$userChangeButton.removeClass( 'disabled' );
|
280 |
+
}
|
281 |
+
|
282 |
+
function disableUserChangeButton() {
|
283 |
+
$userChangeButton.addClass( 'disabled' );
|
284 |
+
}
|
285 |
+
|
286 |
+
function hideError() {
|
287 |
+
$changeUserResultMessage.hide();
|
288 |
+
}
|
289 |
+
|
290 |
+
function showError( msg ) {
|
291 |
+
$changeUserResultMessage.find( ' > p' ).html( msg );
|
292 |
+
$changeUserResultMessage.show();
|
293 |
+
}
|
294 |
+
});
|
295 |
+
})( jQuery );
|
296 |
+
</script>
|
common/vendor/freemius/templates/powered-by.php
CHANGED
@@ -31,12 +31,14 @@
|
|
31 |
|
32 |
$VARS = isset($VARS) ? $VARS : array();
|
33 |
|
|
|
|
|
34 |
wp_enqueue_script( 'jquery' );
|
35 |
wp_enqueue_script( 'json2' );
|
36 |
fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
|
37 |
fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
|
38 |
?>
|
39 |
-
|
40 |
<div id="pframe"></div>
|
41 |
<script type="text/javascript">
|
42 |
(function ($) {
|
@@ -55,4 +57,5 @@
|
|
55 |
});
|
56 |
});
|
57 |
})(jQuery);
|
58 |
-
</script>
|
|
31 |
|
32 |
$VARS = isset($VARS) ? $VARS : array();
|
33 |
|
34 |
+
$fs = freemius( $VARS['module_id'] );
|
35 |
+
|
36 |
wp_enqueue_script( 'jquery' );
|
37 |
wp_enqueue_script( 'json2' );
|
38 |
fs_enqueue_local_script( 'postmessage', 'nojquery.ba-postmessage.min.js' );
|
39 |
fs_enqueue_local_script( 'fs-postmessage', 'postmessage.js' );
|
40 |
?>
|
41 |
+
<?php if ( ! $fs->is_whitelabeled() ) : ?>
|
42 |
<div id="pframe"></div>
|
43 |
<script type="text/javascript">
|
44 |
(function ($) {
|
57 |
});
|
58 |
});
|
59 |
})(jQuery);
|
60 |
+
</script>
|
61 |
+
<?php endif ?>
|
common/vendor/freemius/templates/pricing.php
CHANGED
@@ -88,6 +88,7 @@
|
|
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 |
) );
|
92 |
|
93 |
if ( ! $fs->is_registered() ) {
|
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() ) {
|
common/vendor/freemius/templates/tabs.php
CHANGED
@@ -20,7 +20,7 @@
|
|
20 |
|
21 |
$menu_items = $fs->get_menu_items();
|
22 |
|
23 |
-
$
|
24 |
|
25 |
$tabs = array();
|
26 |
foreach ( $menu_items as $priority => $items ) {
|
@@ -34,7 +34,7 @@
|
|
34 |
continue;
|
35 |
}
|
36 |
|
37 |
-
if ( ! $
|
38 |
continue;
|
39 |
}
|
40 |
}
|
20 |
|
21 |
$menu_items = $fs->get_menu_items();
|
22 |
|
23 |
+
$show_settings_with_tabs = $fs->show_settings_with_tabs();
|
24 |
|
25 |
$tabs = array();
|
26 |
foreach ( $menu_items as $priority => $items ) {
|
34 |
continue;
|
35 |
}
|
36 |
|
37 |
+
if ( ! $show_settings_with_tabs || ! $fs->is_submenu_item_visible( $submenu_name, true ) ) {
|
38 |
continue;
|
39 |
}
|
40 |
}
|
lang/the-events-calendar-de_CH.mo
CHANGED
Binary file
|
lang/the-events-calendar-de_DE.mo
CHANGED
Binary file
|
lang/the-events-calendar-en_CA.mo
CHANGED
Binary file
|
lang/the-events-calendar-es_ES.mo
CHANGED
Binary file
|
lang/the-events-calendar-fr_CA.mo
CHANGED
Binary file
|
lang/the-events-calendar-nl_NL.mo
CHANGED
Binary file
|
lang/the-events-calendar-pl_PL.mo
CHANGED
Binary file
|
lang/the-events-calendar-ru_RU.mo
CHANGED
Binary file
|
lang/the-events-calendar-uk.mo
CHANGED
Binary file
|
lang/the-events-calendar.pot
CHANGED
@@ -2,14 +2,14 @@
|
|
2 |
# This file is distributed under the same license as the The Events Calendar package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: The Events Calendar 5.0.
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/the-events-"
|
7 |
"calendar\n"
|
8 |
-
"POT-Creation-Date: 2020-02-
|
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-02-
|
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:
|
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:
|
61 |
-
#: src/Tribe/Main.php:
|
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:
|
73 |
msgid "Settings"
|
74 |
msgstr ""
|
75 |
|
@@ -154,7 +154,7 @@ msgid ""
|
|
154 |
"refresh and try again."
|
155 |
msgstr ""
|
156 |
|
157 |
-
#: src/Tribe/Admin_List.php:246 src/Tribe/Main.php:
|
158 |
msgid "%s Categories"
|
159 |
msgstr ""
|
160 |
|
@@ -1669,7 +1669,7 @@ msgstr ""
|
|
1669 |
msgid "Renew your Event Aggregator Facebook token"
|
1670 |
msgstr ""
|
1671 |
|
1672 |
-
#: src/Tribe/Amalgamator.php:252 src/admin-views/tribe-options-general.php:
|
1673 |
msgid "Merge Duplicates"
|
1674 |
msgstr ""
|
1675 |
|
@@ -1887,7 +1887,7 @@ msgid "Global configurations for the styling of The Events Calendar"
|
|
1887 |
msgstr ""
|
1888 |
|
1889 |
#: src/Tribe/Customizer/General_Theme.php:291
|
1890 |
-
#: src/Tribe/Customizer/Global_Elements.php:
|
1891 |
msgid "Accent Color"
|
1892 |
msgstr ""
|
1893 |
|
@@ -1937,34 +1937,34 @@ msgstr ""
|
|
1937 |
msgid "Custom"
|
1938 |
msgstr ""
|
1939 |
|
1940 |
-
#: src/Tribe/Customizer/Global_Elements.php:
|
1941 |
msgid "General"
|
1942 |
msgstr ""
|
1943 |
|
1944 |
-
#: src/Tribe/Customizer/Global_Elements.php:
|
1945 |
msgid "Global Elements"
|
1946 |
msgstr ""
|
1947 |
|
1948 |
-
#: src/Tribe/Customizer/Global_Elements.php:
|
1949 |
msgid ""
|
1950 |
"Options selected here will override what was selected in the \"General Theme"
|
1951 |
"\" section"
|
1952 |
msgstr ""
|
1953 |
|
1954 |
-
#: src/Tribe/Customizer/Global_Elements.php:
|
1955 |
-
#: src/
|
1956 |
msgid "Link Color"
|
1957 |
msgstr ""
|
1958 |
|
1959 |
-
#: src/Tribe/Customizer/Global_Elements.php:
|
1960 |
msgid "Filter Bar Color"
|
1961 |
msgstr ""
|
1962 |
|
1963 |
-
#: src/Tribe/Customizer/Global_Elements.php:
|
1964 |
msgid "Button Color"
|
1965 |
msgstr ""
|
1966 |
|
1967 |
-
#: src/Tribe/Customizer/Global_Elements.php:
|
1968 |
msgid "Map Pin"
|
1969 |
msgstr ""
|
1970 |
|
@@ -2009,15 +2009,6 @@ msgstr ""
|
|
2009 |
msgid "Details Background Color"
|
2010 |
msgstr ""
|
2011 |
|
2012 |
-
#: src/Tribe/Customizer/Text.php:71
|
2013 |
-
msgid "Text"
|
2014 |
-
msgstr ""
|
2015 |
-
|
2016 |
-
#: src/Tribe/Customizer/Text.php:72
|
2017 |
-
msgid ""
|
2018 |
-
"Options selected here will override what was selected in the General section."
|
2019 |
-
msgstr ""
|
2020 |
-
|
2021 |
#: src/Tribe/Customizer/Widget.php:59
|
2022 |
msgid "Widgets"
|
2023 |
msgstr ""
|
@@ -2519,23 +2510,23 @@ msgstr ""
|
|
2519 |
msgid "Could not save %s."
|
2520 |
msgstr ""
|
2521 |
|
2522 |
-
#: src/Tribe/Integrations/Freemius.php:
|
2523 |
msgid "We hope you love %1$s"
|
2524 |
msgstr ""
|
2525 |
|
2526 |
-
#: src/Tribe/Integrations/Freemius.php:
|
2527 |
msgid ""
|
2528 |
-
"Hi, %1$s! This is an invitation to help %2$s community. If you opt-in,
|
2529 |
-
"data about your usage of %2$s will be shared with our teams (so they
|
2530 |
-
"work their butts off to improve). We will also share some helpful info
|
2531 |
-
"events management, WordPress, and our products from time to time."
|
2532 |
msgstr ""
|
2533 |
|
2534 |
-
#: src/Tribe/Integrations/Freemius.php:
|
2535 |
msgid "And if you skip this, that's okay! %1$s will still work just fine."
|
2536 |
msgstr ""
|
2537 |
|
2538 |
-
#: src/Tribe/Integrations/Freemius.php:
|
2539 |
msgid "Powered by"
|
2540 |
msgstr ""
|
2541 |
|
@@ -2665,202 +2656,202 @@ msgstr ""
|
|
2665 |
msgid "Upcoming Events"
|
2666 |
msgstr ""
|
2667 |
|
2668 |
-
#. #-#-#-#-# the-events-calendar.pot (The Events Calendar 5.0.
|
2669 |
#. Plugin Name of the plugin/theme
|
2670 |
-
#: src/Tribe/Main.php:
|
2671 |
#: src/functions/template-tags/general.php:1373 the-events-calendar.php:56
|
2672 |
msgid "The Events Calendar"
|
2673 |
msgstr ""
|
2674 |
|
2675 |
-
#: src/Tribe/Main.php:
|
2676 |
msgid "month"
|
2677 |
msgstr ""
|
2678 |
|
2679 |
-
#: src/Tribe/Main.php:
|
2680 |
msgid "list"
|
2681 |
msgstr ""
|
2682 |
|
2683 |
-
#: src/Tribe/Main.php:
|
2684 |
msgid "upcoming"
|
2685 |
msgstr ""
|
2686 |
|
2687 |
-
#: src/Tribe/Main.php:
|
2688 |
msgid "past"
|
2689 |
msgstr ""
|
2690 |
|
2691 |
-
#: src/Tribe/Main.php:
|
2692 |
msgid "day"
|
2693 |
msgstr ""
|
2694 |
|
2695 |
-
#: src/Tribe/Main.php:
|
2696 |
msgid "today"
|
2697 |
msgstr ""
|
2698 |
|
2699 |
-
#: src/Tribe/Main.php:
|
2700 |
msgctxt "featured events slug"
|
2701 |
msgid "featured"
|
2702 |
msgstr ""
|
2703 |
|
2704 |
-
#: src/Tribe/Main.php:
|
2705 |
msgctxt "all events slug"
|
2706 |
msgid "all"
|
2707 |
msgstr ""
|
2708 |
|
2709 |
-
#: src/Tribe/Main.php:
|
2710 |
msgid "Initializing Tribe Events on %s"
|
2711 |
msgstr ""
|
2712 |
|
2713 |
-
#: src/Tribe/Main.php:
|
2714 |
msgid "Welcome to The Events Calendar!"
|
2715 |
msgstr ""
|
2716 |
|
2717 |
-
#: src/Tribe/Main.php:
|
2718 |
msgid ""
|
2719 |
"The %3$s \"%1$s\" uses the \"/%2$s\" slug: the Events Calendar plugin will "
|
2720 |
"show its calendar in place of the page."
|
2721 |
msgstr ""
|
2722 |
|
2723 |
-
#: src/Tribe/Main.php:
|
2724 |
msgid "Ask the site administrator to edit the %s slug"
|
2725 |
msgstr ""
|
2726 |
|
2727 |
-
#: src/Tribe/Main.php:
|
2728 |
msgid "Edit the %s slug"
|
2729 |
msgstr ""
|
2730 |
|
2731 |
-
#: src/Tribe/Main.php:
|
2732 |
msgid " ask the site administrator to set a different Events URL slug."
|
2733 |
msgstr ""
|
2734 |
|
2735 |
-
#: src/Tribe/Main.php:
|
2736 |
msgid "edit Events settings."
|
2737 |
msgstr ""
|
2738 |
|
2739 |
-
#: src/Tribe/Main.php:
|
2740 |
msgid "%1$s or %2$s"
|
2741 |
msgstr ""
|
2742 |
|
2743 |
-
#: src/Tribe/Main.php:
|
2744 |
msgid "Upgrade your calendar views"
|
2745 |
msgstr ""
|
2746 |
|
2747 |
-
#: src/Tribe/Main.php:
|
2748 |
msgid "Upgrade"
|
2749 |
msgstr ""
|
2750 |
|
2751 |
-
#: src/Tribe/Main.php:
|
2752 |
msgid "New User Primer"
|
2753 |
msgstr ""
|
2754 |
|
2755 |
-
#: src/Tribe/Main.php:
|
2756 |
msgid ""
|
2757 |
"We are committed to helping make your calendar spectacular and have a wealth "
|
2758 |
"of resources available, including a handy %s to get your calendar up and "
|
2759 |
"running."
|
2760 |
msgstr ""
|
2761 |
|
2762 |
-
#: src/Tribe/Main.php:
|
2763 |
msgid "Support for The Events Calendar"
|
2764 |
msgstr ""
|
2765 |
|
2766 |
-
#: src/Tribe/Main.php:
|
2767 |
msgid ""
|
2768 |
"%s: A thorough walkthrough of The Events Calendar and the settings that are "
|
2769 |
"available to you."
|
2770 |
msgstr ""
|
2771 |
|
2772 |
-
#: src/Tribe/Main.php:
|
2773 |
msgid "Settings overview"
|
2774 |
msgstr ""
|
2775 |
|
2776 |
-
#: src/Tribe/Main.php:
|
2777 |
msgid ""
|
2778 |
"%s: A complete look at the features you can expect to see right out of the "
|
2779 |
"box as well as how to use them."
|
2780 |
msgstr ""
|
2781 |
|
2782 |
-
#: src/Tribe/Main.php:
|
2783 |
msgid "Features overview"
|
2784 |
msgstr ""
|
2785 |
|
2786 |
-
#: src/Tribe/Main.php:
|
2787 |
msgid ""
|
2788 |
"%s: Our most comprehensive outline for customizing the calendar to suit your "
|
2789 |
"needs, including custom layouts and styles."
|
2790 |
msgstr ""
|
2791 |
|
2792 |
-
#: src/Tribe/Main.php:
|
2793 |
msgid "Themer’s Guide"
|
2794 |
msgstr ""
|
2795 |
|
2796 |
-
#: src/Tribe/Main.php:
|
2797 |
msgid ""
|
2798 |
"%s: An overview of the default templates and styles that are included in the "
|
2799 |
"plugin, as well as how to change them."
|
2800 |
msgstr ""
|
2801 |
|
2802 |
-
#: src/Tribe/Main.php:
|
2803 |
msgid "Using stylesheets and page templates"
|
2804 |
msgstr ""
|
2805 |
|
2806 |
-
#: src/Tribe/Main.php:
|
2807 |
msgid ""
|
2808 |
"%s: Do you see an issue with your calendar? Go here first to find where it’s "
|
2809 |
"coming from and how to fix it."
|
2810 |
msgstr ""
|
2811 |
|
2812 |
-
#: src/Tribe/Main.php:
|
2813 |
msgid "Troubleshooting common problems"
|
2814 |
msgstr ""
|
2815 |
|
2816 |
-
#: src/Tribe/Main.php:
|
2817 |
msgid ""
|
2818 |
"%s: Code and guides for customizing your calendar in useful and interesting "
|
2819 |
"ways."
|
2820 |
msgstr ""
|
2821 |
|
2822 |
-
#: src/Tribe/Main.php:
|
2823 |
msgid "Customizing the Events plugins"
|
2824 |
msgstr ""
|
2825 |
|
2826 |
-
#: src/Tribe/Main.php:
|
2827 |
msgid "Events Tickets"
|
2828 |
msgstr ""
|
2829 |
|
2830 |
-
#: src/Tribe/Main.php:
|
2831 |
msgid ""
|
2832 |
"If you have tried the above steps and are still having trouble, you can post "
|
2833 |
"a new thread to our WordPress.org forums for %1$s or %2$s. Our support staff "
|
2834 |
"monitors these forums once a week and would be happy to assist you there. "
|
2835 |
msgstr ""
|
2836 |
|
2837 |
-
#: src/Tribe/Main.php:
|
2838 |
msgid "premium support on our website"
|
2839 |
msgstr ""
|
2840 |
|
2841 |
-
#: src/Tribe/Main.php:
|
2842 |
msgid ""
|
2843 |
"<strong>Looking for more immediate support?</strong> We offer %s with the "
|
2844 |
"purchase of any of our premium plugins. Pick up a license and you can post "
|
2845 |
"there directly and expect a response within 24-48 hours during weekdays"
|
2846 |
msgstr ""
|
2847 |
|
2848 |
-
#: src/Tribe/Main.php:
|
2849 |
msgid "open-source forum on WordPress.org"
|
2850 |
msgstr ""
|
2851 |
|
2852 |
-
#: src/Tribe/Main.php:
|
2853 |
msgid ""
|
2854 |
"If you have tried the above steps and are still having trouble, you can post "
|
2855 |
"a new thread to our %s. Our support staff monitors these forums once a week "
|
2856 |
"and would be happy to assist you there."
|
2857 |
msgstr ""
|
2858 |
|
2859 |
-
#: src/Tribe/Main.php:
|
2860 |
msgid "Events Calendar PRO"
|
2861 |
msgstr ""
|
2862 |
|
2863 |
-
#: src/Tribe/Main.php:
|
2864 |
msgid ""
|
2865 |
"<strong>Looking for more immediate support?</strong> We offer %1$s with the "
|
2866 |
"purchase of any of our premium plugins (like %2$s). Pick up a license and "
|
@@ -2868,427 +2859,427 @@ msgid ""
|
|
2868 |
"weekdays."
|
2869 |
msgstr ""
|
2870 |
|
2871 |
-
#: src/Tribe/Main.php:
|
2872 |
msgid "post a thread"
|
2873 |
msgstr ""
|
2874 |
|
2875 |
-
#: src/Tribe/Main.php:
|
2876 |
msgid ""
|
2877 |
"If you have a valid license for one of our paid plugins, you can %s in our "
|
2878 |
"premium support forums. Our support team monitors the forums and will "
|
2879 |
"respond to your thread within 24-48 hours (during the week)."
|
2880 |
msgstr ""
|
2881 |
|
2882 |
-
#: src/Tribe/Main.php:
|
2883 |
#: src/deprecated/Tribe__Events__Importer__Admin_Page.php:207
|
2884 |
#: src/functions/template-tags/general.php:95
|
2885 |
msgid "Events"
|
2886 |
msgstr ""
|
2887 |
|
2888 |
-
#: src/Tribe/Main.php:
|
2889 |
#: src/admin-views/aggregator/tabs/import-form.php:220
|
2890 |
#: src/functions/template-tags/general.php:63
|
2891 |
msgid "Event"
|
2892 |
msgstr ""
|
2893 |
|
2894 |
-
#: src/Tribe/Main.php:
|
2895 |
msgid ""
|
2896 |
"Sorry, The Events Calendar requires WordPress %s or higher. Please upgrade "
|
2897 |
"your WordPress install."
|
2898 |
msgstr ""
|
2899 |
|
2900 |
-
#: src/Tribe/Main.php:
|
2901 |
msgid ""
|
2902 |
"Sorry, The Events Calendar requires PHP %s or higher. Talk to your Web host "
|
2903 |
"about moving you to a newer version of PHP."
|
2904 |
msgstr ""
|
2905 |
|
2906 |
-
#: src/Tribe/Main.php:
|
2907 |
msgid ""
|
2908 |
"To continue using The Events Calendar, please install the latest version of"
|
2909 |
msgstr ""
|
2910 |
|
2911 |
-
#: src/Tribe/Main.php:
|
2912 |
msgid "Event Tickets"
|
2913 |
msgstr ""
|
2914 |
|
2915 |
-
#: src/Tribe/Main.php:
|
2916 |
msgid ""
|
2917 |
"It appears as if the tribe-common libraries cannot be found! The directory "
|
2918 |
"should be in the \"common/\" directory in the events calendar plugin."
|
2919 |
msgstr ""
|
2920 |
|
2921 |
-
#: src/Tribe/Main.php:
|
2922 |
msgid "category"
|
2923 |
msgstr ""
|
2924 |
|
2925 |
-
#: src/Tribe/Main.php:
|
2926 |
msgid "tag"
|
2927 |
msgstr ""
|
2928 |
|
2929 |
-
#: src/Tribe/Main.php:
|
2930 |
msgid "Add New"
|
2931 |
msgstr ""
|
2932 |
|
2933 |
-
#: src/Tribe/Main.php:
|
2934 |
#: src/Tribe/Organizer.php:92 src/Tribe/Venue.php:111
|
2935 |
msgid "Add New %s"
|
2936 |
msgstr ""
|
2937 |
|
2938 |
-
#: src/Tribe/Main.php:
|
2939 |
msgid "New %s"
|
2940 |
msgstr ""
|
2941 |
|
2942 |
-
#: src/Tribe/Main.php:
|
2943 |
#: src/views/month/single-day.php:26
|
2944 |
msgid "View %s"
|
2945 |
msgstr ""
|
2946 |
|
2947 |
-
#: src/Tribe/Main.php:
|
2948 |
msgid "Search %s"
|
2949 |
msgstr ""
|
2950 |
|
2951 |
-
#: src/Tribe/Main.php:
|
2952 |
msgid "No %s found"
|
2953 |
msgstr ""
|
2954 |
|
2955 |
-
#: src/Tribe/Main.php:
|
2956 |
msgid "No %s found in Trash"
|
2957 |
msgstr ""
|
2958 |
|
2959 |
-
#: src/Tribe/Main.php:
|
2960 |
#: src/Tribe/Organizer.php:99 src/Tribe/Venue.php:118
|
2961 |
msgid "%s published."
|
2962 |
msgstr ""
|
2963 |
|
2964 |
-
#: src/Tribe/Main.php:
|
2965 |
msgid "%s published privately."
|
2966 |
msgstr ""
|
2967 |
|
2968 |
-
#: src/Tribe/Main.php:
|
2969 |
msgid "%s reverted to draft."
|
2970 |
msgstr ""
|
2971 |
|
2972 |
-
#: src/Tribe/Main.php:
|
2973 |
msgid "%s scheduled."
|
2974 |
msgstr ""
|
2975 |
|
2976 |
-
#: src/Tribe/Main.php:
|
2977 |
-
#: src/Tribe/Main.php:
|
2978 |
#: src/Tribe/Organizer.php:103 src/Tribe/Venue.php:122
|
2979 |
msgid "%s updated."
|
2980 |
msgstr ""
|
2981 |
|
2982 |
-
#: src/Tribe/Main.php:
|
2983 |
msgid "%s Category"
|
2984 |
msgstr ""
|
2985 |
|
2986 |
-
#: src/Tribe/Main.php:
|
2987 |
msgid "Search %s Categories"
|
2988 |
msgstr ""
|
2989 |
|
2990 |
-
#: src/Tribe/Main.php:
|
2991 |
msgid "All %s Categories"
|
2992 |
msgstr ""
|
2993 |
|
2994 |
-
#: src/Tribe/Main.php:
|
2995 |
msgid "Parent %s Category"
|
2996 |
msgstr ""
|
2997 |
|
2998 |
-
#: src/Tribe/Main.php:
|
2999 |
msgid "Parent %s Category:"
|
3000 |
msgstr ""
|
3001 |
|
3002 |
-
#: src/Tribe/Main.php:
|
3003 |
msgid "Edit %s Category"
|
3004 |
msgstr ""
|
3005 |
|
3006 |
-
#: src/Tribe/Main.php:
|
3007 |
msgid "Update %s Category"
|
3008 |
msgstr ""
|
3009 |
|
3010 |
-
#: src/Tribe/Main.php:
|
3011 |
msgid "Add New %s Category"
|
3012 |
msgstr ""
|
3013 |
|
3014 |
-
#: src/Tribe/Main.php:
|
3015 |
msgid "New %s Category Name"
|
3016 |
msgstr ""
|
3017 |
|
3018 |
-
#: src/Tribe/Main.php:
|
3019 |
msgid "%1$s updated. %2$sView %1$s%3$s"
|
3020 |
msgstr ""
|
3021 |
|
3022 |
-
#: src/Tribe/Main.php:
|
3023 |
msgid "Custom field updated."
|
3024 |
msgstr ""
|
3025 |
|
3026 |
-
#: src/Tribe/Main.php:
|
3027 |
msgid "Custom field deleted."
|
3028 |
msgstr ""
|
3029 |
|
3030 |
#. translators: %s: date and time of the revision
|
3031 |
-
#: src/Tribe/Main.php:
|
3032 |
msgid "%1$s restored to revision from %2$s"
|
3033 |
msgstr ""
|
3034 |
|
3035 |
-
#: src/Tribe/Main.php:
|
3036 |
msgid "%1$s published. %2$sView %3$s"
|
3037 |
msgstr ""
|
3038 |
|
3039 |
-
#: src/Tribe/Main.php:
|
3040 |
msgid "%s saved."
|
3041 |
msgstr ""
|
3042 |
|
3043 |
-
#: src/Tribe/Main.php:
|
3044 |
msgid "%1$s submitted. %2$sPreview %3$s"
|
3045 |
msgstr ""
|
3046 |
|
3047 |
-
#: src/Tribe/Main.php:
|
3048 |
msgid "%1$s scheduled for: %2$s. %3$sPreview %4$s"
|
3049 |
msgstr ""
|
3050 |
|
3051 |
#. translators: Publish box date format, see http://php.net/date
|
3052 |
-
#: src/Tribe/Main.php:
|
3053 |
msgid "M j, Y @ G:i"
|
3054 |
msgstr ""
|
3055 |
|
3056 |
-
#: src/Tribe/Main.php:
|
3057 |
msgid "%1$s draft updated. %2$sPreview %3$s"
|
3058 |
msgstr ""
|
3059 |
|
3060 |
-
#: src/Tribe/Main.php:
|
3061 |
msgid "%s submitted."
|
3062 |
msgstr ""
|
3063 |
|
3064 |
-
#: src/Tribe/Main.php:
|
3065 |
msgid "%1$s scheduled for: %2$s."
|
3066 |
msgstr ""
|
3067 |
|
3068 |
-
#: src/Tribe/Main.php:
|
3069 |
msgid "%s draft updated."
|
3070 |
msgstr ""
|
3071 |
|
3072 |
#. translators: %s: date and time of the revision
|
3073 |
-
#: src/Tribe/Main.php:
|
3074 |
msgid "%s restored to revision from %s"
|
3075 |
msgstr ""
|
3076 |
|
3077 |
-
#: src/Tribe/Main.php:
|
3078 |
msgid ""
|
3079 |
"Without a defined location your event will not display a %sGoogle Rich "
|
3080 |
"Snippet%s on the search results."
|
3081 |
msgstr ""
|
3082 |
|
3083 |
-
#: src/Tribe/Main.php:
|
3084 |
msgid "page"
|
3085 |
msgstr ""
|
3086 |
|
3087 |
-
#: src/Tribe/Main.php:
|
3088 |
msgid "event"
|
3089 |
msgstr ""
|
3090 |
|
3091 |
-
#: src/Tribe/Main.php:
|
3092 |
msgid "events"
|
3093 |
msgstr ""
|
3094 |
|
3095 |
-
#: src/Tribe/Main.php:
|
3096 |
msgid "all"
|
3097 |
msgstr ""
|
3098 |
|
3099 |
-
#: src/Tribe/Main.php:
|
3100 |
msgid " (View Full %1$s Description Here: %2$s)"
|
3101 |
msgstr ""
|
3102 |
|
3103 |
-
#: src/Tribe/Main.php:
|
3104 |
#: src/functions/template-tags/day.php:157
|
3105 |
#: src/functions/template-tags/day.php:178
|
3106 |
msgid "Date out of range."
|
3107 |
msgstr ""
|
3108 |
|
3109 |
-
#: src/Tribe/Main.php:
|
3110 |
msgid "%s Options"
|
3111 |
msgstr ""
|
3112 |
|
3113 |
-
#: src/Tribe/Main.php:
|
3114 |
msgid "%s Information"
|
3115 |
msgstr ""
|
3116 |
|
3117 |
-
#: src/Tribe/Main.php:
|
3118 |
msgid "Support"
|
3119 |
msgstr ""
|
3120 |
|
3121 |
-
#: src/Tribe/Main.php:
|
3122 |
msgid "View All Add-Ons"
|
3123 |
msgstr ""
|
3124 |
|
3125 |
-
#: src/Tribe/Main.php:
|
3126 |
msgid "News from Modern Tribe"
|
3127 |
msgstr ""
|
3128 |
|
3129 |
-
#: src/Tribe/Main.php:
|
3130 |
msgid "Additional Functionality"
|
3131 |
msgstr ""
|
3132 |
|
3133 |
-
#: src/Tribe/Main.php:
|
3134 |
msgid ""
|
3135 |
"Looking for additional functionality including recurring events, ticket "
|
3136 |
"sales, publicly submitted events, new views and more?"
|
3137 |
msgstr ""
|
3138 |
|
3139 |
-
#: src/Tribe/Main.php:
|
3140 |
msgid "Check out the %savailable add-ons%s."
|
3141 |
msgstr ""
|
3142 |
|
3143 |
-
#: src/Tribe/Main.php:
|
3144 |
msgid "Calendar"
|
3145 |
msgstr ""
|
3146 |
|
3147 |
-
#: src/Tribe/Main.php:
|
3148 |
msgid "List"
|
3149 |
msgstr ""
|
3150 |
|
3151 |
-
#: src/Tribe/Main.php:
|
3152 |
msgid "Month"
|
3153 |
msgstr ""
|
3154 |
|
3155 |
-
#: src/Tribe/Main.php:
|
3156 |
#: src/admin-views/aggregator/fields/schedule.php:62
|
3157 |
msgid "Day"
|
3158 |
msgstr ""
|
3159 |
|
3160 |
-
#: src/Tribe/Main.php:
|
3161 |
msgid "Search for %s by Keyword."
|
3162 |
msgstr ""
|
3163 |
|
3164 |
-
#: src/Tribe/Main.php:
|
3165 |
#: src/views/v2/components/events-bar/search-button.php:25
|
3166 |
msgid "Search"
|
3167 |
msgstr ""
|
3168 |
|
3169 |
-
#: src/Tribe/Main.php:
|
3170 |
msgid "Keyword"
|
3171 |
msgstr ""
|
3172 |
|
3173 |
-
#: src/Tribe/Main.php:
|
3174 |
msgid "4 digit year hyphen 2 digit month hyphen 2 digit day"
|
3175 |
msgstr ""
|
3176 |
|
3177 |
-
#: src/Tribe/Main.php:
|
3178 |
msgid "1 digit month slash 1 digit day slash 4 digit year"
|
3179 |
msgstr ""
|
3180 |
|
3181 |
-
#: src/Tribe/Main.php:
|
3182 |
msgid "2 digit month slash 2 digit day slash 4 digit year"
|
3183 |
msgstr ""
|
3184 |
|
3185 |
-
#: src/Tribe/Main.php:
|
3186 |
msgid "1 digit day slash 1 digit month slash 4 digit year"
|
3187 |
msgstr ""
|
3188 |
|
3189 |
-
#: src/Tribe/Main.php:
|
3190 |
msgid "2 digit day slash 2 digit month slash 4 digit year"
|
3191 |
msgstr ""
|
3192 |
|
3193 |
-
#: src/Tribe/Main.php:
|
3194 |
msgid "1 digit month hyphen 1 digit day hyphen 4 digit year"
|
3195 |
msgstr ""
|
3196 |
|
3197 |
-
#: src/Tribe/Main.php:
|
3198 |
msgid "1 digit month hyphen 2 digit day hyphen 4 digit year"
|
3199 |
msgstr ""
|
3200 |
|
3201 |
-
#: src/Tribe/Main.php:
|
3202 |
msgid "1 digit day hyphen 1 digit month hyphen 4 digit year"
|
3203 |
msgstr ""
|
3204 |
|
3205 |
-
#: src/Tribe/Main.php:
|
3206 |
msgid "2 digit day hyphen 2 digit month hyphen 4 digit year"
|
3207 |
msgstr ""
|
3208 |
|
3209 |
-
#: src/Tribe/Main.php:
|
3210 |
msgid "4 digit year dot 2 digit month dot 2 digit day"
|
3211 |
msgstr ""
|
3212 |
|
3213 |
-
#: src/Tribe/Main.php:
|
3214 |
msgid "2 digit month dot 2 digit day dot 4 digit year"
|
3215 |
msgstr ""
|
3216 |
|
3217 |
-
#: src/Tribe/Main.php:
|
3218 |
msgid "2 digit day dot 2 digit month dot 4 digit year"
|
3219 |
msgstr ""
|
3220 |
|
3221 |
-
#: src/Tribe/Main.php:
|
3222 |
msgid "4 digit year hyphen 2 digit month"
|
3223 |
msgstr ""
|
3224 |
|
3225 |
-
#: src/Tribe/Main.php:
|
3226 |
msgid "1 digit month slash 4 digit year"
|
3227 |
msgstr ""
|
3228 |
|
3229 |
-
#: src/Tribe/Main.php:
|
3230 |
msgid "2 digit month slash 4 digit year"
|
3231 |
msgstr ""
|
3232 |
|
3233 |
-
#: src/Tribe/Main.php:
|
3234 |
msgid "1 digit month hyphen 4 digit year"
|
3235 |
msgstr ""
|
3236 |
|
3237 |
-
#: src/Tribe/Main.php:
|
3238 |
msgid "2 digit month hyphen 4 digit year"
|
3239 |
msgstr ""
|
3240 |
|
3241 |
-
#: src/Tribe/Main.php:
|
3242 |
msgid "4 digit year dot 2 digit month"
|
3243 |
msgstr ""
|
3244 |
|
3245 |
-
#: src/Tribe/Main.php:
|
3246 |
msgid "2 digit month dot 4 digit year"
|
3247 |
msgstr ""
|
3248 |
|
3249 |
-
#: src/Tribe/Main.php:
|
3250 |
#: src/admin-views/aggregator/origins/refine.php:7
|
3251 |
msgid "Date"
|
3252 |
msgstr ""
|
3253 |
|
3254 |
-
#: src/Tribe/Main.php:
|
3255 |
msgid "Search for %s by Date. Please use the format %s."
|
3256 |
msgstr ""
|
3257 |
|
3258 |
-
#: src/Tribe/Main.php:
|
3259 |
msgid "%s In"
|
3260 |
msgstr ""
|
3261 |
|
3262 |
-
#: src/Tribe/Main.php:
|
3263 |
msgid "Search for %s by month. Please use the format %s."
|
3264 |
msgstr ""
|
3265 |
|
3266 |
-
#: src/Tribe/Main.php:
|
3267 |
msgid "%s From"
|
3268 |
msgstr ""
|
3269 |
|
3270 |
-
#: src/Tribe/Main.php:
|
3271 |
msgid "Day Of"
|
3272 |
msgstr ""
|
3273 |
|
3274 |
-
#: src/Tribe/Main.php:
|
3275 |
msgid "Once Every 30 Mins"
|
3276 |
msgstr ""
|
3277 |
|
3278 |
-
#: src/Tribe/Main.php:
|
3279 |
msgid ""
|
3280 |
"Your version of The Events Calendar is not up-to-date with one of your The "
|
3281 |
"Events Calendar add-ons. Please %supdate now.%s"
|
3282 |
msgstr ""
|
3283 |
|
3284 |
-
#: src/Tribe/Main.php:
|
3285 |
msgid ""
|
3286 |
"The following plugins are out of date: %1$s. All add-ons contain "
|
3287 |
"dependencies on The Events Calendar and will not function properly unless "
|
3288 |
"paired with the right version. %2$sLearn More%3$s."
|
3289 |
msgstr ""
|
3290 |
|
3291 |
-
#: src/Tribe/Main.php:
|
3292 |
msgid "Use Saved %s:"
|
3293 |
msgstr ""
|
3294 |
|
@@ -4571,7 +4562,7 @@ msgstr ""
|
|
4571 |
msgid "The requested event term archive page does not exist"
|
4572 |
msgstr ""
|
4573 |
|
4574 |
-
#: src/Tribe/Rewrite.php:
|
4575 |
msgctxt "The \"/page/\" URL string component."
|
4576 |
msgid "page"
|
4577 |
msgstr ""
|
@@ -4703,15 +4694,15 @@ msgstr ""
|
|
4703 |
msgid "Unnamed Venue"
|
4704 |
msgstr ""
|
4705 |
|
4706 |
-
#: src/Tribe/Views/V2/Hooks.php:
|
4707 |
msgid "We recommend a 16:9 aspect ratio for featured images."
|
4708 |
msgstr ""
|
4709 |
|
4710 |
-
#: src/Tribe/Views/V2/Hooks.php:
|
4711 |
msgid "Recommended for all sites using the updated calendar views."
|
4712 |
msgstr ""
|
4713 |
|
4714 |
-
#: src/Tribe/Views/V2/Hooks.php:
|
4715 |
msgid "The Events Calendar - View V2"
|
4716 |
msgstr ""
|
4717 |
|
@@ -4768,7 +4759,7 @@ msgctxt "day_view"
|
|
4768 |
msgid "%1$s for %2$s"
|
4769 |
msgstr ""
|
4770 |
|
4771 |
-
#: src/Tribe/Views/V2/View.php:
|
4772 |
#: src/views/v2/day/event/date.php:28 src/views/v2/day/event/date.php:32
|
4773 |
#: src/views/v2/list/event/date.php:27 src/views/v2/list/event/date.php:28
|
4774 |
#: src/views/v2/list/event/date.php:32
|
@@ -4786,11 +4777,11 @@ msgstr ""
|
|
4786 |
msgid "Featured"
|
4787 |
msgstr ""
|
4788 |
|
4789 |
-
#: src/Tribe/Views/V2/View.php:
|
4790 |
msgid "Export Events"
|
4791 |
msgstr ""
|
4792 |
|
4793 |
-
#: src/Tribe/Views/V2/View.php:
|
4794 |
msgid ""
|
4795 |
"Use this to share calendar data with Google Calendar, Apple iCal and other "
|
4796 |
"compatible apps"
|
@@ -6426,202 +6417,202 @@ msgid ""
|
|
6426 |
"outside source."
|
6427 |
msgstr ""
|
6428 |
|
6429 |
-
#: src/admin-views/tribe-options-display.php:
|
6430 |
msgid "Default Events Template"
|
6431 |
msgstr ""
|
6432 |
|
6433 |
-
#: src/admin-views/tribe-options-display.php:
|
6434 |
msgid "Default Page Template"
|
6435 |
msgstr ""
|
6436 |
|
6437 |
-
#: src/admin-views/tribe-options-display.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6438 |
msgid "Display Settings"
|
6439 |
msgstr ""
|
6440 |
|
6441 |
-
#: src/admin-views/tribe-options-display.php:
|
6442 |
msgid ""
|
6443 |
"The settings below control the display of your calendar. If things don't "
|
6444 |
"look right, try switching between the three style sheet options or pick a "
|
6445 |
"page template from your theme."
|
6446 |
msgstr ""
|
6447 |
|
6448 |
-
#: src/admin-views/tribe-options-display.php:
|
6449 |
msgid ""
|
6450 |
"There are going to be situations where no out-of-the-box template is "
|
6451 |
"100% perfect. Check out our <a href=\"%s\">our themer's guide</a> for "
|
6452 |
"instructions on custom modifications."
|
6453 |
msgstr ""
|
6454 |
|
6455 |
-
#: src/admin-views/tribe-options-display.php:
|
6456 |
msgid "Date with year"
|
6457 |
msgstr ""
|
6458 |
|
6459 |
-
#: src/admin-views/tribe-options-display.php:
|
6460 |
msgid ""
|
6461 |
"Enter the format to use for displaying dates with the year. Used when "
|
6462 |
"displaying a date in a future year."
|
6463 |
msgstr ""
|
6464 |
|
6465 |
-
#: src/admin-views/tribe-options-display.php:
|
6466 |
msgid "Date time separator"
|
6467 |
msgstr ""
|
6468 |
|
6469 |
-
#: src/admin-views/tribe-options-display.php:
|
6470 |
msgid ""
|
6471 |
"Enter the separator that will be placed between the date and time, when both "
|
6472 |
"are shown."
|
6473 |
msgstr ""
|
6474 |
|
6475 |
-
#: src/admin-views/tribe-options-display.php:
|
6476 |
msgid "Date without year"
|
6477 |
msgstr ""
|
6478 |
|
6479 |
-
#: src/admin-views/tribe-options-display.php:
|
6480 |
msgid ""
|
6481 |
"Enter the format to use for displaying dates without a year. Used when "
|
6482 |
"showing an event from the current year."
|
6483 |
msgstr ""
|
6484 |
|
6485 |
-
#: src/admin-views/tribe-options-display.php:
|
6486 |
msgid "Month and year format"
|
6487 |
msgstr ""
|
6488 |
|
6489 |
-
#: src/admin-views/tribe-options-display.php:
|
6490 |
msgid ""
|
6491 |
"Enter the format to use for dates that show a month and year only. Used on "
|
6492 |
"month view."
|
6493 |
msgstr ""
|
6494 |
|
6495 |
-
#: src/admin-views/tribe-options-display.php:
|
6496 |
msgid "Time range separator"
|
6497 |
msgstr ""
|
6498 |
|
6499 |
-
#: src/admin-views/tribe-options-display.php:
|
6500 |
msgid ""
|
6501 |
"Enter the separator that will be used between the start and end time of an "
|
6502 |
"event."
|
6503 |
msgstr ""
|
6504 |
|
6505 |
-
#: src/admin-views/tribe-options-display.php:
|
6506 |
msgid "You must select at least one view."
|
6507 |
msgstr ""
|
6508 |
|
6509 |
-
#: src/admin-views/tribe-options-display.php:
|
6510 |
msgid ""
|
6511 |
"Please note that you are using The Events Calendar's default Google Maps API "
|
6512 |
"key, which will limit the Map View's functionality. Visit %sthe API Settings "
|
6513 |
"page%s to learn more and add your own Google Maps API key."
|
6514 |
msgstr ""
|
6515 |
|
6516 |
-
#: src/admin-views/tribe-options-display.php:
|
6517 |
msgid "Basic Template Settings"
|
6518 |
msgstr ""
|
6519 |
|
6520 |
-
#: src/admin-views/tribe-options-display.php:
|
6521 |
-
msgid "Default stylesheet used for events templates"
|
6522 |
-
msgstr ""
|
6523 |
-
|
6524 |
-
#: src/admin-views/tribe-options-display.php:158
|
6525 |
-
msgid "Skeleton Styles"
|
6526 |
-
msgstr ""
|
6527 |
-
|
6528 |
-
#: src/admin-views/tribe-options-display.php:160
|
6529 |
-
msgid ""
|
6530 |
-
"Only includes enough css to achieve complex layouts like calendar and week "
|
6531 |
-
"view."
|
6532 |
-
msgstr ""
|
6533 |
-
|
6534 |
-
#: src/admin-views/tribe-options-display.php:162
|
6535 |
-
msgid "Full Styles"
|
6536 |
-
msgstr ""
|
6537 |
-
|
6538 |
-
#: src/admin-views/tribe-options-display.php:164
|
6539 |
-
msgid "More detailed styling, tries to grab styles from your theme."
|
6540 |
-
msgstr ""
|
6541 |
-
|
6542 |
-
#: src/admin-views/tribe-options-display.php:166
|
6543 |
-
msgid "Tribe Events Styles"
|
6544 |
-
msgstr ""
|
6545 |
-
|
6546 |
-
#: src/admin-views/tribe-options-display.php:168
|
6547 |
-
msgid "A fully designed and styled theme for your events pages."
|
6548 |
-
msgstr ""
|
6549 |
-
|
6550 |
-
#: src/admin-views/tribe-options-display.php:175
|
6551 |
msgid "Events template"
|
6552 |
msgstr ""
|
6553 |
|
6554 |
-
#: src/admin-views/tribe-options-display.php:
|
6555 |
msgid ""
|
6556 |
"Choose a page template to control the appearance of your calendar and event "
|
6557 |
"content."
|
6558 |
msgstr ""
|
6559 |
|
6560 |
-
#: src/admin-views/tribe-options-display.php:
|
6561 |
msgid "Enable event views"
|
6562 |
msgstr ""
|
6563 |
|
6564 |
-
#: src/admin-views/tribe-options-display.php:
|
6565 |
msgid "Use updated calendar designs"
|
6566 |
msgstr ""
|
6567 |
|
6568 |
-
#: src/admin-views/tribe-options-display.php:
|
6569 |
msgid "Enable updated designs for all calendar views"
|
6570 |
msgstr ""
|
6571 |
|
6572 |
-
#: src/admin-views/tribe-options-display.php:
|
6573 |
msgid "Default view"
|
6574 |
msgstr ""
|
6575 |
|
6576 |
-
#: src/admin-views/tribe-options-display.php:
|
6577 |
msgid "Disable the Event Search Bar"
|
6578 |
msgstr ""
|
6579 |
|
6580 |
-
#: src/admin-views/tribe-options-display.php:
|
6581 |
msgid "Check this to use the classic header."
|
6582 |
msgstr ""
|
6583 |
|
6584 |
-
#: src/admin-views/tribe-options-display.php:
|
6585 |
msgid "Month view events per day"
|
6586 |
msgstr ""
|
6587 |
|
6588 |
-
#: src/admin-views/tribe-options-display.php:
|
6589 |
msgid ""
|
6590 |
"Change the default 3 events per day in month view. To impose no limit, you "
|
6591 |
"may specify -1. Please note there may be performance issues if you allow too "
|
6592 |
"many events per day. <a href=\"%s\">Read more</a>."
|
6593 |
msgstr ""
|
6594 |
|
6595 |
-
#: src/admin-views/tribe-options-display.php:
|
6596 |
msgid "Enable the Month View Cache"
|
6597 |
msgstr ""
|
6598 |
|
6599 |
-
#: src/admin-views/tribe-options-display.php:
|
6600 |
msgid ""
|
6601 |
"Check this to cache your month view HTML in transients, which can help "
|
6602 |
"improve calendar speed on sites with many events. <a href=\"%s\">Read more</"
|
6603 |
"a>."
|
6604 |
msgstr ""
|
6605 |
|
6606 |
-
#: src/admin-views/tribe-options-display.php:
|
6607 |
msgid "Advanced Template Settings"
|
6608 |
msgstr ""
|
6609 |
|
6610 |
-
#: src/admin-views/tribe-options-display.php:
|
6611 |
msgid "Add HTML before event content"
|
6612 |
msgstr ""
|
6613 |
|
6614 |
-
#: src/admin-views/tribe-options-display.php:
|
6615 |
msgid ""
|
6616 |
"If you are familiar with HTML, you can add additional code before the event "
|
6617 |
"template. Some themes may require this to help with styling or layout."
|
6618 |
msgstr ""
|
6619 |
|
6620 |
-
#: src/admin-views/tribe-options-display.php:
|
6621 |
msgid "Add HTML after event content"
|
6622 |
msgstr ""
|
6623 |
|
6624 |
-
#: src/admin-views/tribe-options-display.php:
|
6625 |
msgid ""
|
6626 |
"If you are familiar with HTML, you can add additional code after the event "
|
6627 |
"template. Some themes may require this to help with styling or layout."
|
@@ -6663,219 +6654,222 @@ msgid "Number of events to show per page"
|
|
6663 |
msgstr ""
|
6664 |
|
6665 |
#: src/admin-views/tribe-options-general.php:52
|
6666 |
-
msgid "Enable live refresh"
|
6667 |
-
msgstr ""
|
6668 |
-
|
6669 |
-
#: src/admin-views/tribe-options-general.php:53
|
6670 |
-
msgid ""
|
6671 |
-
"This option is disabled when \"Disable the Event Search Bar\" is checked on "
|
6672 |
-
"the Display settings tab."
|
6673 |
-
msgstr ""
|
6674 |
-
|
6675 |
-
#: src/admin-views/tribe-options-general.php:53
|
6676 |
-
msgid ""
|
6677 |
-
"Instantly updates the calendar view when searching for or filtering events."
|
6678 |
-
msgstr ""
|
6679 |
-
|
6680 |
-
#: src/admin-views/tribe-options-general.php:61
|
6681 |
msgid "Show comments"
|
6682 |
msgstr ""
|
6683 |
|
6684 |
-
#: src/admin-views/tribe-options-general.php:
|
6685 |
msgid "Enable comments on event pages."
|
6686 |
msgstr ""
|
6687 |
|
6688 |
-
#: src/admin-views/tribe-options-general.php:
|
6689 |
msgid "Show Custom Fields metabox"
|
6690 |
msgstr ""
|
6691 |
|
6692 |
-
#: src/admin-views/tribe-options-general.php:
|
6693 |
msgid "Enable WordPress Custom Fields on events in the classic editor."
|
6694 |
msgstr ""
|
6695 |
|
6696 |
-
#: src/admin-views/tribe-options-general.php:
|
6697 |
msgid "Include events in main blog loop"
|
6698 |
msgstr ""
|
6699 |
|
6700 |
-
#: src/admin-views/tribe-options-general.php:
|
6701 |
msgid ""
|
6702 |
"Show events with the site's other posts. When this box is checked, events "
|
6703 |
"will also continue to appear on the default events page."
|
6704 |
msgstr ""
|
6705 |
|
6706 |
-
#: src/admin-views/tribe-options-general.php:
|
6707 |
-
#: src/admin-views/tribe-options-general.php:
|
6708 |
msgid "Events URL slug"
|
6709 |
msgstr ""
|
6710 |
|
6711 |
-
#: src/admin-views/tribe-options-general.php:
|
6712 |
msgid ""
|
6713 |
"The current URL for your events page is %1$s. <br><br> You cannot edit the "
|
6714 |
"slug for your events page as you do not have pretty permalinks enabled. In "
|
6715 |
"order to edit the slug here, <a href=\"%2$s\">enable pretty permalinks</a>."
|
6716 |
msgstr ""
|
6717 |
|
6718 |
-
#: src/admin-views/tribe-options-general.php:
|
6719 |
#: src/functions/template-tags/options.php:20
|
6720 |
msgid "The slug used for building the events URL."
|
6721 |
msgstr ""
|
6722 |
|
6723 |
-
#: src/admin-views/tribe-options-general.php:
|
6724 |
msgid "Your current events URL is: %s"
|
6725 |
msgstr ""
|
6726 |
|
6727 |
-
#: src/admin-views/tribe-options-general.php:
|
6728 |
#: src/functions/template-tags/options.php:39
|
6729 |
msgid "Here is the iCal feed URL for your events:"
|
6730 |
msgstr ""
|
6731 |
|
6732 |
-
#: src/admin-views/tribe-options-general.php:
|
6733 |
msgid "Single event URL slug"
|
6734 |
msgstr ""
|
6735 |
|
6736 |
-
#: src/admin-views/tribe-options-general.php:
|
6737 |
msgid ""
|
6738 |
"The above should ideally be plural, and this singular.<br />Your single "
|
6739 |
"event URL is: %s"
|
6740 |
msgstr ""
|
6741 |
|
6742 |
-
#: src/admin-views/tribe-options-general.php:
|
6743 |
msgid "End of day cutoff"
|
6744 |
msgstr ""
|
6745 |
|
6746 |
-
#: src/admin-views/tribe-options-general.php:
|
6747 |
msgid ""
|
6748 |
"Have an event that runs past midnight? Select a time after that event's end "
|
6749 |
"to avoid showing the event on the next day's calendar."
|
6750 |
msgstr ""
|
6751 |
|
6752 |
-
#: src/admin-views/tribe-options-general.php:
|
6753 |
msgid "Default currency symbol"
|
6754 |
msgstr ""
|
6755 |
|
6756 |
-
#: src/admin-views/tribe-options-general.php:
|
6757 |
msgid ""
|
6758 |
"Set the default currency symbol for event costs. Note that this only impacts "
|
6759 |
"future events, and changes made will not apply retroactively."
|
6760 |
msgstr ""
|
6761 |
|
6762 |
-
#: src/admin-views/tribe-options-general.php:
|
6763 |
msgid "Currency symbol follows value"
|
6764 |
msgstr ""
|
6765 |
|
6766 |
-
#: src/admin-views/tribe-options-general.php:
|
6767 |
msgid ""
|
6768 |
"The currency symbol normally precedes the value. Enabling this option "
|
6769 |
"positions the symbol after the value."
|
6770 |
msgstr ""
|
6771 |
|
6772 |
-
#: src/admin-views/tribe-options-general.php:
|
6773 |
msgid "Duplicate Venues & Organizers"
|
6774 |
msgstr ""
|
6775 |
|
6776 |
-
#: src/admin-views/tribe-options-general.php:
|
6777 |
msgid ""
|
6778 |
"You might find duplicate venues and organizers when updating The Events "
|
6779 |
"Calendar from a pre-3.0 version. Click this button to automatically merge "
|
6780 |
"identical venues and organizers."
|
6781 |
msgstr ""
|
6782 |
|
6783 |
-
#: src/admin-views/tribe-options-general.php:
|
6784 |
msgid "Move to trash events older than"
|
6785 |
msgstr ""
|
6786 |
|
6787 |
-
#: src/admin-views/tribe-options-general.php:
|
6788 |
msgid "This option allows you to automatically move past events to trash."
|
6789 |
msgstr ""
|
6790 |
|
6791 |
-
#: src/admin-views/tribe-options-general.php:
|
6792 |
-
#: src/admin-views/tribe-options-general.php:
|
6793 |
msgid "Disabled"
|
6794 |
msgstr ""
|
6795 |
|
6796 |
-
#: src/admin-views/tribe-options-general.php:
|
6797 |
-
#: src/admin-views/tribe-options-general.php:
|
6798 |
msgid "3 months"
|
6799 |
msgstr ""
|
6800 |
|
6801 |
-
#: src/admin-views/tribe-options-general.php:
|
6802 |
-
#: src/admin-views/tribe-options-general.php:
|
6803 |
msgid "6 months"
|
6804 |
msgstr ""
|
6805 |
|
6806 |
-
#: src/admin-views/tribe-options-general.php:
|
6807 |
-
#: src/admin-views/tribe-options-general.php:
|
6808 |
msgid "9 months"
|
6809 |
msgstr ""
|
6810 |
|
6811 |
-
#: src/admin-views/tribe-options-general.php:
|
6812 |
-
#: src/admin-views/tribe-options-general.php:
|
6813 |
msgid "1 year"
|
6814 |
msgstr ""
|
6815 |
|
6816 |
-
#: src/admin-views/tribe-options-general.php:
|
6817 |
-
#: src/admin-views/tribe-options-general.php:
|
6818 |
msgid "2 years"
|
6819 |
msgstr ""
|
6820 |
|
6821 |
-
#: src/admin-views/tribe-options-general.php:
|
6822 |
-
#: src/admin-views/tribe-options-general.php:
|
6823 |
msgid "3 years"
|
6824 |
msgstr ""
|
6825 |
|
6826 |
-
#: src/admin-views/tribe-options-general.php:
|
6827 |
msgid "Permanently delete events older than"
|
6828 |
msgstr ""
|
6829 |
|
6830 |
-
#: src/admin-views/tribe-options-general.php:
|
6831 |
msgid ""
|
6832 |
"This option allows you to bulk delete past events. Be careful and backup "
|
6833 |
"your database before removing your events as there is no way to reverse the "
|
6834 |
"changes."
|
6835 |
msgstr ""
|
6836 |
|
6837 |
-
#: src/admin-views/tribe-options-general.php:
|
6838 |
msgid "Miscellaneous Settings"
|
6839 |
msgstr ""
|
6840 |
|
6841 |
-
#: src/admin-views/tribe-options-general.php:
|
6842 |
-
#: src/admin-views/tribe-options-general.php:
|
6843 |
msgid "View Welcome Page"
|
6844 |
msgstr ""
|
6845 |
|
6846 |
-
#: src/admin-views/tribe-options-general.php:
|
6847 |
msgid "View the page that displayed when you initially installed the plugin."
|
6848 |
msgstr ""
|
6849 |
|
6850 |
-
#: src/admin-views/tribe-options-general.php:
|
6851 |
-
#: src/admin-views/tribe-options-general.php:
|
6852 |
msgid "View Update Page"
|
6853 |
msgstr ""
|
6854 |
|
6855 |
-
#: src/admin-views/tribe-options-general.php:
|
6856 |
msgid "View the page that displayed when you updated the plugin."
|
6857 |
msgstr ""
|
6858 |
|
6859 |
-
#: src/admin-views/tribe-options-general.php:
|
6860 |
msgid "Map Settings"
|
6861 |
msgstr ""
|
6862 |
|
6863 |
-
#: src/admin-views/tribe-options-general.php:
|
6864 |
msgid "Enable Maps"
|
6865 |
msgstr ""
|
6866 |
|
6867 |
-
#: src/admin-views/tribe-options-general.php:
|
6868 |
msgid "Check to enable maps for events and venues."
|
6869 |
msgstr ""
|
6870 |
|
6871 |
-
#: src/admin-views/tribe-options-general.php:
|
6872 |
msgid "Google Maps default zoom level"
|
6873 |
msgstr ""
|
6874 |
|
6875 |
-
#: src/admin-views/tribe-options-general.php:
|
6876 |
msgid "0 = zoomed out; 21 = zoomed in."
|
6877 |
msgstr ""
|
6878 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6879 |
#: src/admin-views/tribe-options-timezones.php:7
|
6880 |
msgid "Enable Time Zone support"
|
6881 |
msgstr ""
|
@@ -7094,6 +7088,15 @@ msgstr ""
|
|
7094 |
msgid "Today"
|
7095 |
msgstr ""
|
7096 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7097 |
#: src/deprecated/Tribe__Events__Importer__Admin_Page.php:77
|
7098 |
#: src/deprecated/Tribe__Events__Importer__Admin_Page.php:78
|
7099 |
msgid "Legacy Import"
|
2 |
# This file is distributed under the same license as the The Events Calendar package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: The Events Calendar 5.0.2\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/the-events-"
|
7 |
"calendar\n"
|
8 |
+
"POT-Creation-Date: 2020-02-19 15:59:37+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-02-19 15:59\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:4206
|
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:2021
|
61 |
+
#: src/Tribe/Main.php:5302 src/Tribe/Main.php:5349 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:4254
|
73 |
msgid "Settings"
|
74 |
msgstr ""
|
75 |
|
154 |
"refresh and try again."
|
155 |
msgstr ""
|
156 |
|
157 |
+
#: src/Tribe/Admin_List.php:246 src/Tribe/Main.php:2040
|
158 |
msgid "%s Categories"
|
159 |
msgstr ""
|
160 |
|
1669 |
msgid "Renew your Event Aggregator Facebook token"
|
1670 |
msgstr ""
|
1671 |
|
1672 |
+
#: src/Tribe/Amalgamator.php:252 src/admin-views/tribe-options-general.php:159
|
1673 |
msgid "Merge Duplicates"
|
1674 |
msgstr ""
|
1675 |
|
1887 |
msgstr ""
|
1888 |
|
1889 |
#: src/Tribe/Customizer/General_Theme.php:291
|
1890 |
+
#: src/Tribe/Customizer/Global_Elements.php:317
|
1891 |
msgid "Accent Color"
|
1892 |
msgstr ""
|
1893 |
|
1937 |
msgid "Custom"
|
1938 |
msgstr ""
|
1939 |
|
1940 |
+
#: src/Tribe/Customizer/Global_Elements.php:275
|
1941 |
msgid "General"
|
1942 |
msgstr ""
|
1943 |
|
1944 |
+
#: src/Tribe/Customizer/Global_Elements.php:275
|
1945 |
msgid "Global Elements"
|
1946 |
msgstr ""
|
1947 |
|
1948 |
+
#: src/Tribe/Customizer/Global_Elements.php:276
|
1949 |
msgid ""
|
1950 |
"Options selected here will override what was selected in the \"General Theme"
|
1951 |
"\" section"
|
1952 |
msgstr ""
|
1953 |
|
1954 |
+
#: src/Tribe/Customizer/Global_Elements.php:341
|
1955 |
+
#: src/deprecated/Tribe__Events__Customizer__Text.php:105
|
1956 |
msgid "Link Color"
|
1957 |
msgstr ""
|
1958 |
|
1959 |
+
#: src/Tribe/Customizer/Global_Elements.php:369
|
1960 |
msgid "Filter Bar Color"
|
1961 |
msgstr ""
|
1962 |
|
1963 |
+
#: src/Tribe/Customizer/Global_Elements.php:391
|
1964 |
msgid "Button Color"
|
1965 |
msgstr ""
|
1966 |
|
1967 |
+
#: src/Tribe/Customizer/Global_Elements.php:415
|
1968 |
msgid "Map Pin"
|
1969 |
msgstr ""
|
1970 |
|
2009 |
msgid "Details Background Color"
|
2010 |
msgstr ""
|
2011 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012 |
#: src/Tribe/Customizer/Widget.php:59
|
2013 |
msgid "Widgets"
|
2014 |
msgstr ""
|
2510 |
msgid "Could not save %s."
|
2511 |
msgstr ""
|
2512 |
|
2513 |
+
#: src/Tribe/Integrations/Freemius.php:323
|
2514 |
msgid "We hope you love %1$s"
|
2515 |
msgstr ""
|
2516 |
|
2517 |
+
#: src/Tribe/Integrations/Freemius.php:328
|
2518 |
msgid ""
|
2519 |
+
"Hi, %1$s! This is an invitation to help our %2$s community. If you opt-in, "
|
2520 |
+
"some data about your usage of %2$s will be shared with our teams (so they "
|
2521 |
+
"can work their butts off to improve). We will also share some helpful info "
|
2522 |
+
"on events management, WordPress, and our products from time to time."
|
2523 |
msgstr ""
|
2524 |
|
2525 |
+
#: src/Tribe/Integrations/Freemius.php:332
|
2526 |
msgid "And if you skip this, that's okay! %1$s will still work just fine."
|
2527 |
msgstr ""
|
2528 |
|
2529 |
+
#: src/Tribe/Integrations/Freemius.php:336
|
2530 |
msgid "Powered by"
|
2531 |
msgstr ""
|
2532 |
|
2656 |
msgid "Upcoming Events"
|
2657 |
msgstr ""
|
2658 |
|
2659 |
+
#. #-#-#-#-# the-events-calendar.pot (The Events Calendar 5.0.2) #-#-#-#-#
|
2660 |
#. Plugin Name of the plugin/theme
|
2661 |
+
#: src/Tribe/Main.php:921 src/Tribe/Main.php:1376 src/Tribe/Privacy.php:29
|
2662 |
#: src/functions/template-tags/general.php:1373 the-events-calendar.php:56
|
2663 |
msgid "The Events Calendar"
|
2664 |
msgstr ""
|
2665 |
|
2666 |
+
#: src/Tribe/Main.php:928
|
2667 |
msgid "month"
|
2668 |
msgstr ""
|
2669 |
|
2670 |
+
#: src/Tribe/Main.php:929
|
2671 |
msgid "list"
|
2672 |
msgstr ""
|
2673 |
|
2674 |
+
#: src/Tribe/Main.php:930
|
2675 |
msgid "upcoming"
|
2676 |
msgstr ""
|
2677 |
|
2678 |
+
#: src/Tribe/Main.php:931
|
2679 |
msgid "past"
|
2680 |
msgstr ""
|
2681 |
|
2682 |
+
#: src/Tribe/Main.php:932
|
2683 |
msgid "day"
|
2684 |
msgstr ""
|
2685 |
|
2686 |
+
#: src/Tribe/Main.php:933
|
2687 |
msgid "today"
|
2688 |
msgstr ""
|
2689 |
|
2690 |
+
#: src/Tribe/Main.php:934
|
2691 |
msgctxt "featured events slug"
|
2692 |
msgid "featured"
|
2693 |
msgstr ""
|
2694 |
|
2695 |
+
#: src/Tribe/Main.php:935
|
2696 |
msgctxt "all events slug"
|
2697 |
msgid "all"
|
2698 |
msgstr ""
|
2699 |
|
2700 |
+
#: src/Tribe/Main.php:959
|
2701 |
msgid "Initializing Tribe Events on %s"
|
2702 |
msgstr ""
|
2703 |
|
2704 |
+
#: src/Tribe/Main.php:1017 src/Tribe/Main.php:1019
|
2705 |
msgid "Welcome to The Events Calendar!"
|
2706 |
msgstr ""
|
2707 |
|
2708 |
+
#: src/Tribe/Main.php:1165
|
2709 |
msgid ""
|
2710 |
"The %3$s \"%1$s\" uses the \"/%2$s\" slug: the Events Calendar plugin will "
|
2711 |
"show its calendar in place of the page."
|
2712 |
msgstr ""
|
2713 |
|
2714 |
+
#: src/Tribe/Main.php:1168
|
2715 |
msgid "Ask the site administrator to edit the %s slug"
|
2716 |
msgstr ""
|
2717 |
|
2718 |
+
#: src/Tribe/Main.php:1170
|
2719 |
msgid "Edit the %s slug"
|
2720 |
msgstr ""
|
2721 |
|
2722 |
+
#: src/Tribe/Main.php:1174
|
2723 |
msgid " ask the site administrator to set a different Events URL slug."
|
2724 |
msgstr ""
|
2725 |
|
2726 |
+
#: src/Tribe/Main.php:1179
|
2727 |
msgid "edit Events settings."
|
2728 |
msgstr ""
|
2729 |
|
2730 |
+
#: src/Tribe/Main.php:1182
|
2731 |
msgid "%1$s or %2$s"
|
2732 |
msgstr ""
|
2733 |
|
2734 |
+
#: src/Tribe/Main.php:1251
|
2735 |
msgid "Upgrade your calendar views"
|
2736 |
msgstr ""
|
2737 |
|
2738 |
+
#: src/Tribe/Main.php:1287
|
2739 |
msgid "Upgrade"
|
2740 |
msgstr ""
|
2741 |
|
2742 |
+
#: src/Tribe/Main.php:1336 src/admin-views/admin-welcome-message.php:19
|
2743 |
msgid "New User Primer"
|
2744 |
msgstr ""
|
2745 |
|
2746 |
+
#: src/Tribe/Main.php:1338
|
2747 |
msgid ""
|
2748 |
"We are committed to helping make your calendar spectacular and have a wealth "
|
2749 |
"of resources available, including a handy %s to get your calendar up and "
|
2750 |
"running."
|
2751 |
msgstr ""
|
2752 |
|
2753 |
+
#: src/Tribe/Main.php:1349
|
2754 |
msgid "Support for The Events Calendar"
|
2755 |
msgstr ""
|
2756 |
|
2757 |
+
#: src/Tribe/Main.php:1352
|
2758 |
msgid ""
|
2759 |
"%s: A thorough walkthrough of The Events Calendar and the settings that are "
|
2760 |
"available to you."
|
2761 |
msgstr ""
|
2762 |
|
2763 |
+
#: src/Tribe/Main.php:1352
|
2764 |
msgid "Settings overview"
|
2765 |
msgstr ""
|
2766 |
|
2767 |
+
#: src/Tribe/Main.php:1354
|
2768 |
msgid ""
|
2769 |
"%s: A complete look at the features you can expect to see right out of the "
|
2770 |
"box as well as how to use them."
|
2771 |
msgstr ""
|
2772 |
|
2773 |
+
#: src/Tribe/Main.php:1354
|
2774 |
msgid "Features overview"
|
2775 |
msgstr ""
|
2776 |
|
2777 |
+
#: src/Tribe/Main.php:1356
|
2778 |
msgid ""
|
2779 |
"%s: Our most comprehensive outline for customizing the calendar to suit your "
|
2780 |
"needs, including custom layouts and styles."
|
2781 |
msgstr ""
|
2782 |
|
2783 |
+
#: src/Tribe/Main.php:1356
|
2784 |
msgid "Themer’s Guide"
|
2785 |
msgstr ""
|
2786 |
|
2787 |
+
#: src/Tribe/Main.php:1358
|
2788 |
msgid ""
|
2789 |
"%s: An overview of the default templates and styles that are included in the "
|
2790 |
"plugin, as well as how to change them."
|
2791 |
msgstr ""
|
2792 |
|
2793 |
+
#: src/Tribe/Main.php:1358
|
2794 |
msgid "Using stylesheets and page templates"
|
2795 |
msgstr ""
|
2796 |
|
2797 |
+
#: src/Tribe/Main.php:1360
|
2798 |
msgid ""
|
2799 |
"%s: Do you see an issue with your calendar? Go here first to find where it’s "
|
2800 |
"coming from and how to fix it."
|
2801 |
msgstr ""
|
2802 |
|
2803 |
+
#: src/Tribe/Main.php:1360
|
2804 |
msgid "Troubleshooting common problems"
|
2805 |
msgstr ""
|
2806 |
|
2807 |
+
#: src/Tribe/Main.php:1362
|
2808 |
msgid ""
|
2809 |
"%s: Code and guides for customizing your calendar in useful and interesting "
|
2810 |
"ways."
|
2811 |
msgstr ""
|
2812 |
|
2813 |
+
#: src/Tribe/Main.php:1362
|
2814 |
msgid "Customizing the Events plugins"
|
2815 |
msgstr ""
|
2816 |
|
2817 |
+
#: src/Tribe/Main.php:1377
|
2818 |
msgid "Events Tickets"
|
2819 |
msgstr ""
|
2820 |
|
2821 |
+
#: src/Tribe/Main.php:1378
|
2822 |
msgid ""
|
2823 |
"If you have tried the above steps and are still having trouble, you can post "
|
2824 |
"a new thread to our WordPress.org forums for %1$s or %2$s. Our support staff "
|
2825 |
"monitors these forums once a week and would be happy to assist you there. "
|
2826 |
msgstr ""
|
2827 |
|
2828 |
+
#: src/Tribe/Main.php:1380 src/Tribe/Main.php:1388
|
2829 |
msgid "premium support on our website"
|
2830 |
msgstr ""
|
2831 |
|
2832 |
+
#: src/Tribe/Main.php:1381
|
2833 |
msgid ""
|
2834 |
"<strong>Looking for more immediate support?</strong> We offer %s with the "
|
2835 |
"purchase of any of our premium plugins. Pick up a license and you can post "
|
2836 |
"there directly and expect a response within 24-48 hours during weekdays"
|
2837 |
msgstr ""
|
2838 |
|
2839 |
+
#: src/Tribe/Main.php:1385
|
2840 |
msgid "open-source forum on WordPress.org"
|
2841 |
msgstr ""
|
2842 |
|
2843 |
+
#: src/Tribe/Main.php:1386
|
2844 |
msgid ""
|
2845 |
"If you have tried the above steps and are still having trouble, you can post "
|
2846 |
"a new thread to our %s. Our support staff monitors these forums once a week "
|
2847 |
"and would be happy to assist you there."
|
2848 |
msgstr ""
|
2849 |
|
2850 |
+
#: src/Tribe/Main.php:1389
|
2851 |
msgid "Events Calendar PRO"
|
2852 |
msgstr ""
|
2853 |
|
2854 |
+
#: src/Tribe/Main.php:1390
|
2855 |
msgid ""
|
2856 |
"<strong>Looking for more immediate support?</strong> We offer %1$s with the "
|
2857 |
"purchase of any of our premium plugins (like %2$s). Pick up a license and "
|
2859 |
"weekdays."
|
2860 |
msgstr ""
|
2861 |
|
2862 |
+
#: src/Tribe/Main.php:1394
|
2863 |
msgid "post a thread"
|
2864 |
msgstr ""
|
2865 |
|
2866 |
+
#: src/Tribe/Main.php:1395
|
2867 |
msgid ""
|
2868 |
"If you have a valid license for one of our paid plugins, you can %s in our "
|
2869 |
"premium support forums. Our support team monitors the forums and will "
|
2870 |
"respond to your thread within 24-48 hours (during the week)."
|
2871 |
msgstr ""
|
2872 |
|
2873 |
+
#: src/Tribe/Main.php:1438
|
2874 |
#: src/deprecated/Tribe__Events__Importer__Admin_Page.php:207
|
2875 |
#: src/functions/template-tags/general.php:95
|
2876 |
msgid "Events"
|
2877 |
msgstr ""
|
2878 |
|
2879 |
+
#: src/Tribe/Main.php:1446 src/admin-views/aggregator/tabs/import-form.php:208
|
2880 |
#: src/admin-views/aggregator/tabs/import-form.php:220
|
2881 |
#: src/functions/template-tags/general.php:63
|
2882 |
msgid "Event"
|
2883 |
msgstr ""
|
2884 |
|
2885 |
+
#: src/Tribe/Main.php:1663
|
2886 |
msgid ""
|
2887 |
"Sorry, The Events Calendar requires WordPress %s or higher. Please upgrade "
|
2888 |
"your WordPress install."
|
2889 |
msgstr ""
|
2890 |
|
2891 |
+
#: src/Tribe/Main.php:1666
|
2892 |
msgid ""
|
2893 |
"Sorry, The Events Calendar requires PHP %s or higher. Talk to your Web host "
|
2894 |
"about moving you to a newer version of PHP."
|
2895 |
msgstr ""
|
2896 |
|
2897 |
+
#: src/Tribe/Main.php:1698
|
2898 |
msgid ""
|
2899 |
"To continue using The Events Calendar, please install the latest version of"
|
2900 |
msgstr ""
|
2901 |
|
2902 |
+
#: src/Tribe/Main.php:1700 src/Tribe/Main.php:1701
|
2903 |
msgid "Event Tickets"
|
2904 |
msgstr ""
|
2905 |
|
2906 |
+
#: src/Tribe/Main.php:1736
|
2907 |
msgid ""
|
2908 |
"It appears as if the tribe-common libraries cannot be found! The directory "
|
2909 |
"should be in the \"common/\" directory in the events calendar plugin."
|
2910 |
msgstr ""
|
2911 |
|
2912 |
+
#: src/Tribe/Main.php:1972 src/Tribe/Main.php:2431
|
2913 |
msgid "category"
|
2914 |
msgstr ""
|
2915 |
|
2916 |
+
#: src/Tribe/Main.php:1986 src/Tribe/Main.php:2430
|
2917 |
msgid "tag"
|
2918 |
msgstr ""
|
2919 |
|
2920 |
+
#: src/Tribe/Main.php:2019 src/Tribe/Organizer.php:91 src/Tribe/Venue.php:110
|
2921 |
msgid "Add New"
|
2922 |
msgstr ""
|
2923 |
|
2924 |
+
#: src/Tribe/Main.php:2020 src/Tribe/Main.php:2157 src/Tribe/Main.php:2158
|
2925 |
#: src/Tribe/Organizer.php:92 src/Tribe/Venue.php:111
|
2926 |
msgid "Add New %s"
|
2927 |
msgstr ""
|
2928 |
|
2929 |
+
#: src/Tribe/Main.php:2022 src/Tribe/Organizer.php:94 src/Tribe/Venue.php:113
|
2930 |
msgid "New %s"
|
2931 |
msgstr ""
|
2932 |
|
2933 |
+
#: src/Tribe/Main.php:2023 src/Tribe/Organizer.php:95 src/Tribe/Venue.php:114
|
2934 |
#: src/views/month/single-day.php:26
|
2935 |
msgid "View %s"
|
2936 |
msgstr ""
|
2937 |
|
2938 |
+
#: src/Tribe/Main.php:2024 src/Tribe/Organizer.php:96 src/Tribe/Venue.php:115
|
2939 |
msgid "Search %s"
|
2940 |
msgstr ""
|
2941 |
|
2942 |
+
#: src/Tribe/Main.php:2025 src/Tribe/Organizer.php:97 src/Tribe/Venue.php:116
|
2943 |
msgid "No %s found"
|
2944 |
msgstr ""
|
2945 |
|
2946 |
+
#: src/Tribe/Main.php:2026 src/Tribe/Organizer.php:98 src/Tribe/Venue.php:117
|
2947 |
msgid "No %s found in Trash"
|
2948 |
msgstr ""
|
2949 |
|
2950 |
+
#: src/Tribe/Main.php:2027 src/Tribe/Main.php:2114 src/Tribe/Main.php:2134
|
2951 |
#: src/Tribe/Organizer.php:99 src/Tribe/Venue.php:118
|
2952 |
msgid "%s published."
|
2953 |
msgstr ""
|
2954 |
|
2955 |
+
#: src/Tribe/Main.php:2028 src/Tribe/Organizer.php:100 src/Tribe/Venue.php:119
|
2956 |
msgid "%s published privately."
|
2957 |
msgstr ""
|
2958 |
|
2959 |
+
#: src/Tribe/Main.php:2029 src/Tribe/Organizer.php:101 src/Tribe/Venue.php:120
|
2960 |
msgid "%s reverted to draft."
|
2961 |
msgstr ""
|
2962 |
|
2963 |
+
#: src/Tribe/Main.php:2030 src/Tribe/Organizer.php:102 src/Tribe/Venue.php:121
|
2964 |
msgid "%s scheduled."
|
2965 |
msgstr ""
|
2966 |
|
2967 |
+
#: src/Tribe/Main.php:2031 src/Tribe/Main.php:2073 src/Tribe/Main.php:2108
|
2968 |
+
#: src/Tribe/Main.php:2111 src/Tribe/Main.php:2128 src/Tribe/Main.php:2131
|
2969 |
#: src/Tribe/Organizer.php:103 src/Tribe/Venue.php:122
|
2970 |
msgid "%s updated."
|
2971 |
msgstr ""
|
2972 |
|
2973 |
+
#: src/Tribe/Main.php:2041
|
2974 |
msgid "%s Category"
|
2975 |
msgstr ""
|
2976 |
|
2977 |
+
#: src/Tribe/Main.php:2042
|
2978 |
msgid "Search %s Categories"
|
2979 |
msgstr ""
|
2980 |
|
2981 |
+
#: src/Tribe/Main.php:2043
|
2982 |
msgid "All %s Categories"
|
2983 |
msgstr ""
|
2984 |
|
2985 |
+
#: src/Tribe/Main.php:2044
|
2986 |
msgid "Parent %s Category"
|
2987 |
msgstr ""
|
2988 |
|
2989 |
+
#: src/Tribe/Main.php:2045
|
2990 |
msgid "Parent %s Category:"
|
2991 |
msgstr ""
|
2992 |
|
2993 |
+
#: src/Tribe/Main.php:2046
|
2994 |
msgid "Edit %s Category"
|
2995 |
msgstr ""
|
2996 |
|
2997 |
+
#: src/Tribe/Main.php:2047
|
2998 |
msgid "Update %s Category"
|
2999 |
msgstr ""
|
3000 |
|
3001 |
+
#: src/Tribe/Main.php:2048
|
3002 |
msgid "Add New %s Category"
|
3003 |
msgstr ""
|
3004 |
|
3005 |
+
#: src/Tribe/Main.php:2049
|
3006 |
msgid "New %s Category Name"
|
3007 |
msgstr ""
|
3008 |
|
3009 |
+
#: src/Tribe/Main.php:2066
|
3010 |
msgid "%1$s updated. %2$sView %1$s%3$s"
|
3011 |
msgstr ""
|
3012 |
|
3013 |
+
#: src/Tribe/Main.php:2071 src/Tribe/Main.php:2109 src/Tribe/Main.php:2129
|
3014 |
msgid "Custom field updated."
|
3015 |
msgstr ""
|
3016 |
|
3017 |
+
#: src/Tribe/Main.php:2072 src/Tribe/Main.php:2110 src/Tribe/Main.php:2130
|
3018 |
msgid "Custom field deleted."
|
3019 |
msgstr ""
|
3020 |
|
3021 |
#. translators: %s: date and time of the revision
|
3022 |
+
#: src/Tribe/Main.php:2075 src/Tribe/Main.php:2113
|
3023 |
msgid "%1$s restored to revision from %2$s"
|
3024 |
msgstr ""
|
3025 |
|
3026 |
+
#: src/Tribe/Main.php:2077
|
3027 |
msgid "%1$s published. %2$sView %3$s"
|
3028 |
msgstr ""
|
3029 |
|
3030 |
+
#: src/Tribe/Main.php:2082 src/Tribe/Main.php:2115 src/Tribe/Main.php:2135
|
3031 |
msgid "%s saved."
|
3032 |
msgstr ""
|
3033 |
|
3034 |
+
#: src/Tribe/Main.php:2084
|
3035 |
msgid "%1$s submitted. %2$sPreview %3$s"
|
3036 |
msgstr ""
|
3037 |
|
3038 |
+
#: src/Tribe/Main.php:2090
|
3039 |
msgid "%1$s scheduled for: %2$s. %3$sPreview %4$s"
|
3040 |
msgstr ""
|
3041 |
|
3042 |
#. translators: Publish box date format, see http://php.net/date
|
3043 |
+
#: src/Tribe/Main.php:2093 src/Tribe/Main.php:2121 src/Tribe/Main.php:2141
|
3044 |
msgid "M j, Y @ G:i"
|
3045 |
msgstr ""
|
3046 |
|
3047 |
+
#: src/Tribe/Main.php:2099
|
3048 |
msgid "%1$s draft updated. %2$sPreview %3$s"
|
3049 |
msgstr ""
|
3050 |
|
3051 |
+
#: src/Tribe/Main.php:2116 src/Tribe/Main.php:2136
|
3052 |
msgid "%s submitted."
|
3053 |
msgstr ""
|
3054 |
|
3055 |
+
#: src/Tribe/Main.php:2118 src/Tribe/Main.php:2138
|
3056 |
msgid "%1$s scheduled for: %2$s."
|
3057 |
msgstr ""
|
3058 |
|
3059 |
+
#: src/Tribe/Main.php:2123 src/Tribe/Main.php:2143
|
3060 |
msgid "%s draft updated."
|
3061 |
msgstr ""
|
3062 |
|
3063 |
#. translators: %s: date and time of the revision
|
3064 |
+
#: src/Tribe/Main.php:2133
|
3065 |
msgid "%s restored to revision from %s"
|
3066 |
msgstr ""
|
3067 |
|
3068 |
+
#: src/Tribe/Main.php:2187
|
3069 |
msgid ""
|
3070 |
"Without a defined location your event will not display a %sGoogle Rich "
|
3071 |
"Snippet%s on the search results."
|
3072 |
msgstr ""
|
3073 |
|
3074 |
+
#: src/Tribe/Main.php:2432
|
3075 |
msgid "page"
|
3076 |
msgstr ""
|
3077 |
|
3078 |
+
#: src/Tribe/Main.php:2433 src/functions/template-tags/general.php:79
|
3079 |
msgid "event"
|
3080 |
msgstr ""
|
3081 |
|
3082 |
+
#: src/Tribe/Main.php:2434 src/functions/template-tags/general.php:111
|
3083 |
msgid "events"
|
3084 |
msgstr ""
|
3085 |
|
3086 |
+
#: src/Tribe/Main.php:2435
|
3087 |
msgid "all"
|
3088 |
msgstr ""
|
3089 |
|
3090 |
+
#: src/Tribe/Main.php:2826
|
3091 |
msgid " (View Full %1$s Description Here: %2$s)"
|
3092 |
msgstr ""
|
3093 |
|
3094 |
+
#: src/Tribe/Main.php:3652 src/Tribe/Main.php:3687
|
3095 |
#: src/functions/template-tags/day.php:157
|
3096 |
#: src/functions/template-tags/day.php:178
|
3097 |
msgid "Date out of range."
|
3098 |
msgstr ""
|
3099 |
|
3100 |
+
#: src/Tribe/Main.php:3729
|
3101 |
msgid "%s Options"
|
3102 |
msgstr ""
|
3103 |
|
3104 |
+
#: src/Tribe/Main.php:3738 src/Tribe/Main.php:3751
|
3105 |
msgid "%s Information"
|
3106 |
msgstr ""
|
3107 |
|
3108 |
+
#: src/Tribe/Main.php:4080
|
3109 |
msgid "Support"
|
3110 |
msgstr ""
|
3111 |
|
3112 |
+
#: src/Tribe/Main.php:4083
|
3113 |
msgid "View All Add-Ons"
|
3114 |
msgstr ""
|
3115 |
|
3116 |
+
#: src/Tribe/Main.php:4103
|
3117 |
msgid "News from Modern Tribe"
|
3118 |
msgstr ""
|
3119 |
|
3120 |
+
#: src/Tribe/Main.php:4148
|
3121 |
msgid "Additional Functionality"
|
3122 |
msgstr ""
|
3123 |
|
3124 |
+
#: src/Tribe/Main.php:4153
|
3125 |
msgid ""
|
3126 |
"Looking for additional functionality including recurring events, ticket "
|
3127 |
"sales, publicly submitted events, new views and more?"
|
3128 |
msgstr ""
|
3129 |
|
3130 |
+
#: src/Tribe/Main.php:4154
|
3131 |
msgid "Check out the %savailable add-ons%s."
|
3132 |
msgstr ""
|
3133 |
|
3134 |
+
#: src/Tribe/Main.php:4255
|
3135 |
msgid "Calendar"
|
3136 |
msgstr ""
|
3137 |
|
3138 |
+
#: src/Tribe/Main.php:4271
|
3139 |
msgid "List"
|
3140 |
msgstr ""
|
3141 |
|
3142 |
+
#: src/Tribe/Main.php:4289
|
3143 |
msgid "Month"
|
3144 |
msgstr ""
|
3145 |
|
3146 |
+
#: src/Tribe/Main.php:4306 src/admin-views/aggregator/fields/schedule.php:44
|
3147 |
#: src/admin-views/aggregator/fields/schedule.php:62
|
3148 |
msgid "Day"
|
3149 |
msgstr ""
|
3150 |
|
3151 |
+
#: src/Tribe/Main.php:4329
|
3152 |
msgid "Search for %s by Keyword."
|
3153 |
msgstr ""
|
3154 |
|
3155 |
+
#: src/Tribe/Main.php:4332
|
3156 |
#: src/views/v2/components/events-bar/search-button.php:25
|
3157 |
msgid "Search"
|
3158 |
msgstr ""
|
3159 |
|
3160 |
+
#: src/Tribe/Main.php:4333
|
3161 |
msgid "Keyword"
|
3162 |
msgstr ""
|
3163 |
|
3164 |
+
#: src/Tribe/Main.php:4350
|
3165 |
msgid "4 digit year hyphen 2 digit month hyphen 2 digit day"
|
3166 |
msgstr ""
|
3167 |
|
3168 |
+
#: src/Tribe/Main.php:4351
|
3169 |
msgid "1 digit month slash 1 digit day slash 4 digit year"
|
3170 |
msgstr ""
|
3171 |
|
3172 |
+
#: src/Tribe/Main.php:4352
|
3173 |
msgid "2 digit month slash 2 digit day slash 4 digit year"
|
3174 |
msgstr ""
|
3175 |
|
3176 |
+
#: src/Tribe/Main.php:4353
|
3177 |
msgid "1 digit day slash 1 digit month slash 4 digit year"
|
3178 |
msgstr ""
|
3179 |
|
3180 |
+
#: src/Tribe/Main.php:4354
|
3181 |
msgid "2 digit day slash 2 digit month slash 4 digit year"
|
3182 |
msgstr ""
|
3183 |
|
3184 |
+
#: src/Tribe/Main.php:4355
|
3185 |
msgid "1 digit month hyphen 1 digit day hyphen 4 digit year"
|
3186 |
msgstr ""
|
3187 |
|
3188 |
+
#: src/Tribe/Main.php:4356
|
3189 |
msgid "1 digit month hyphen 2 digit day hyphen 4 digit year"
|
3190 |
msgstr ""
|
3191 |
|
3192 |
+
#: src/Tribe/Main.php:4357
|
3193 |
msgid "1 digit day hyphen 1 digit month hyphen 4 digit year"
|
3194 |
msgstr ""
|
3195 |
|
3196 |
+
#: src/Tribe/Main.php:4358
|
3197 |
msgid "2 digit day hyphen 2 digit month hyphen 4 digit year"
|
3198 |
msgstr ""
|
3199 |
|
3200 |
+
#: src/Tribe/Main.php:4359
|
3201 |
msgid "4 digit year dot 2 digit month dot 2 digit day"
|
3202 |
msgstr ""
|
3203 |
|
3204 |
+
#: src/Tribe/Main.php:4360
|
3205 |
msgid "2 digit month dot 2 digit day dot 4 digit year"
|
3206 |
msgstr ""
|
3207 |
|
3208 |
+
#: src/Tribe/Main.php:4361
|
3209 |
msgid "2 digit day dot 2 digit month dot 4 digit year"
|
3210 |
msgstr ""
|
3211 |
|
3212 |
+
#: src/Tribe/Main.php:4365
|
3213 |
msgid "4 digit year hyphen 2 digit month"
|
3214 |
msgstr ""
|
3215 |
|
3216 |
+
#: src/Tribe/Main.php:4366 src/Tribe/Main.php:4368
|
3217 |
msgid "1 digit month slash 4 digit year"
|
3218 |
msgstr ""
|
3219 |
|
3220 |
+
#: src/Tribe/Main.php:4367 src/Tribe/Main.php:4369
|
3221 |
msgid "2 digit month slash 4 digit year"
|
3222 |
msgstr ""
|
3223 |
|
3224 |
+
#: src/Tribe/Main.php:4370 src/Tribe/Main.php:4371 src/Tribe/Main.php:4372
|
3225 |
msgid "1 digit month hyphen 4 digit year"
|
3226 |
msgstr ""
|
3227 |
|
3228 |
+
#: src/Tribe/Main.php:4373
|
3229 |
msgid "2 digit month hyphen 4 digit year"
|
3230 |
msgstr ""
|
3231 |
|
3232 |
+
#: src/Tribe/Main.php:4374
|
3233 |
msgid "4 digit year dot 2 digit month"
|
3234 |
msgstr ""
|
3235 |
|
3236 |
+
#: src/Tribe/Main.php:4375 src/Tribe/Main.php:4376
|
3237 |
msgid "2 digit month dot 4 digit year"
|
3238 |
msgstr ""
|
3239 |
|
3240 |
+
#: src/Tribe/Main.php:4405 src/Tribe/Main.php:4442
|
3241 |
#: src/admin-views/aggregator/origins/refine.php:7
|
3242 |
msgid "Date"
|
3243 |
msgstr ""
|
3244 |
|
3245 |
+
#: src/Tribe/Main.php:4407
|
3246 |
msgid "Search for %s by Date. Please use the format %s."
|
3247 |
msgstr ""
|
3248 |
|
3249 |
+
#: src/Tribe/Main.php:4420
|
3250 |
msgid "%s In"
|
3251 |
msgstr ""
|
3252 |
|
3253 |
+
#: src/Tribe/Main.php:4422
|
3254 |
msgid "Search for %s by month. Please use the format %s."
|
3255 |
msgstr ""
|
3256 |
|
3257 |
+
#: src/Tribe/Main.php:4425
|
3258 |
msgid "%s From"
|
3259 |
msgstr ""
|
3260 |
|
3261 |
+
#: src/Tribe/Main.php:4428
|
3262 |
msgid "Day Of"
|
3263 |
msgstr ""
|
3264 |
|
3265 |
+
#: src/Tribe/Main.php:4508
|
3266 |
msgid "Once Every 30 Mins"
|
3267 |
msgstr ""
|
3268 |
|
3269 |
+
#: src/Tribe/Main.php:5235
|
3270 |
msgid ""
|
3271 |
"Your version of The Events Calendar is not up-to-date with one of your The "
|
3272 |
"Events Calendar add-ons. Please %supdate now.%s"
|
3273 |
msgstr ""
|
3274 |
|
3275 |
+
#: src/Tribe/Main.php:5247
|
3276 |
msgid ""
|
3277 |
"The following plugins are out of date: %1$s. All add-ons contain "
|
3278 |
"dependencies on The Events Calendar and will not function properly unless "
|
3279 |
"paired with the right version. %2$sLearn More%3$s."
|
3280 |
msgstr ""
|
3281 |
|
3282 |
+
#: src/Tribe/Main.php:5286 src/Tribe/Main.php:5343
|
3283 |
msgid "Use Saved %s:"
|
3284 |
msgstr ""
|
3285 |
|
4562 |
msgid "The requested event term archive page does not exist"
|
4563 |
msgstr ""
|
4564 |
|
4565 |
+
#: src/Tribe/Rewrite.php:248
|
4566 |
msgctxt "The \"/page/\" URL string component."
|
4567 |
msgid "page"
|
4568 |
msgstr ""
|
4694 |
msgid "Unnamed Venue"
|
4695 |
msgstr ""
|
4696 |
|
4697 |
+
#: src/Tribe/Views/V2/Hooks.php:396
|
4698 |
msgid "We recommend a 16:9 aspect ratio for featured images."
|
4699 |
msgstr ""
|
4700 |
|
4701 |
+
#: src/Tribe/Views/V2/Hooks.php:458
|
4702 |
msgid "Recommended for all sites using the updated calendar views."
|
4703 |
msgstr ""
|
4704 |
|
4705 |
+
#: src/Tribe/Views/V2/Hooks.php:473
|
4706 |
msgid "The Events Calendar - View V2"
|
4707 |
msgstr ""
|
4708 |
|
4759 |
msgid "%1$s for %2$s"
|
4760 |
msgstr ""
|
4761 |
|
4762 |
+
#: src/Tribe/Views/V2/View.php:1858 src/views/v2/day/event/date.php:27
|
4763 |
#: src/views/v2/day/event/date.php:28 src/views/v2/day/event/date.php:32
|
4764 |
#: src/views/v2/list/event/date.php:27 src/views/v2/list/event/date.php:28
|
4765 |
#: src/views/v2/list/event/date.php:32
|
4777 |
msgid "Featured"
|
4778 |
msgstr ""
|
4779 |
|
4780 |
+
#: src/Tribe/Views/V2/View.php:1943 src/Tribe/iCal.php:162
|
4781 |
msgid "Export Events"
|
4782 |
msgstr ""
|
4783 |
|
4784 |
+
#: src/Tribe/Views/V2/View.php:1945 src/Tribe/iCal.php:163
|
4785 |
msgid ""
|
4786 |
"Use this to share calendar data with Google Calendar, Apple iCal and other "
|
4787 |
"compatible apps"
|
6417 |
"outside source."
|
6418 |
msgstr ""
|
6419 |
|
6420 |
+
#: src/admin-views/tribe-options-display.php:5
|
6421 |
msgid "Default Events Template"
|
6422 |
msgstr ""
|
6423 |
|
6424 |
+
#: src/admin-views/tribe-options-display.php:6
|
6425 |
msgid "Default Page Template"
|
6426 |
msgstr ""
|
6427 |
|
6428 |
+
#: src/admin-views/tribe-options-display.php:15
|
6429 |
+
msgid "Skeleton Styles"
|
6430 |
+
msgstr ""
|
6431 |
+
|
6432 |
+
#: src/admin-views/tribe-options-display.php:17
|
6433 |
+
msgid ""
|
6434 |
+
"Only includes enough css to achieve complex layouts like calendar and week "
|
6435 |
+
"view."
|
6436 |
+
msgstr ""
|
6437 |
+
|
6438 |
+
#: src/admin-views/tribe-options-display.php:22
|
6439 |
+
msgid "Full Styles"
|
6440 |
+
msgstr ""
|
6441 |
+
|
6442 |
+
#: src/admin-views/tribe-options-display.php:24
|
6443 |
+
msgid "More detailed styling, tries to grab styles from your theme."
|
6444 |
+
msgstr ""
|
6445 |
+
|
6446 |
+
#: src/admin-views/tribe-options-display.php:29
|
6447 |
+
msgid "Tribe Events Styles"
|
6448 |
+
msgstr ""
|
6449 |
+
|
6450 |
+
#: src/admin-views/tribe-options-display.php:31
|
6451 |
+
msgid "A fully designed and styled theme for your events pages."
|
6452 |
+
msgstr ""
|
6453 |
+
|
6454 |
+
#: src/admin-views/tribe-options-display.php:46
|
6455 |
+
msgid "Default stylesheet used for events templates"
|
6456 |
+
msgstr ""
|
6457 |
+
|
6458 |
+
#: src/admin-views/tribe-options-display.php:100
|
6459 |
msgid "Display Settings"
|
6460 |
msgstr ""
|
6461 |
|
6462 |
+
#: src/admin-views/tribe-options-display.php:105
|
6463 |
msgid ""
|
6464 |
"The settings below control the display of your calendar. If things don't "
|
6465 |
"look right, try switching between the three style sheet options or pick a "
|
6466 |
"page template from your theme."
|
6467 |
msgstr ""
|
6468 |
|
6469 |
+
#: src/admin-views/tribe-options-display.php:108
|
6470 |
msgid ""
|
6471 |
"There are going to be situations where no out-of-the-box template is "
|
6472 |
"100% perfect. Check out our <a href=\"%s\">our themer's guide</a> for "
|
6473 |
"instructions on custom modifications."
|
6474 |
msgstr ""
|
6475 |
|
6476 |
+
#: src/admin-views/tribe-options-display.php:127
|
6477 |
msgid "Date with year"
|
6478 |
msgstr ""
|
6479 |
|
6480 |
+
#: src/admin-views/tribe-options-display.php:128
|
6481 |
msgid ""
|
6482 |
"Enter the format to use for displaying dates with the year. Used when "
|
6483 |
"displaying a date in a future year."
|
6484 |
msgstr ""
|
6485 |
|
6486 |
+
#: src/admin-views/tribe-options-display.php:135
|
6487 |
msgid "Date time separator"
|
6488 |
msgstr ""
|
6489 |
|
6490 |
+
#: src/admin-views/tribe-options-display.php:136
|
6491 |
msgid ""
|
6492 |
"Enter the separator that will be placed between the date and time, when both "
|
6493 |
"are shown."
|
6494 |
msgstr ""
|
6495 |
|
6496 |
+
#: src/admin-views/tribe-options-display.php:150
|
6497 |
msgid "Date without year"
|
6498 |
msgstr ""
|
6499 |
|
6500 |
+
#: src/admin-views/tribe-options-display.php:151
|
6501 |
msgid ""
|
6502 |
"Enter the format to use for displaying dates without a year. Used when "
|
6503 |
"showing an event from the current year."
|
6504 |
msgstr ""
|
6505 |
|
6506 |
+
#: src/admin-views/tribe-options-display.php:158
|
6507 |
msgid "Month and year format"
|
6508 |
msgstr ""
|
6509 |
|
6510 |
+
#: src/admin-views/tribe-options-display.php:159
|
6511 |
msgid ""
|
6512 |
"Enter the format to use for dates that show a month and year only. Used on "
|
6513 |
"month view."
|
6514 |
msgstr ""
|
6515 |
|
6516 |
+
#: src/admin-views/tribe-options-display.php:173
|
6517 |
msgid "Time range separator"
|
6518 |
msgstr ""
|
6519 |
|
6520 |
+
#: src/admin-views/tribe-options-display.php:174
|
6521 |
msgid ""
|
6522 |
"Enter the separator that will be used between the start and end time of an "
|
6523 |
"event."
|
6524 |
msgstr ""
|
6525 |
|
6526 |
+
#: src/admin-views/tribe-options-display.php:182
|
6527 |
msgid "You must select at least one view."
|
6528 |
msgstr ""
|
6529 |
|
6530 |
+
#: src/admin-views/tribe-options-display.php:186
|
6531 |
msgid ""
|
6532 |
"Please note that you are using The Events Calendar's default Google Maps API "
|
6533 |
"key, which will limit the Map View's functionality. Visit %sthe API Settings "
|
6534 |
"page%s to learn more and add your own Google Maps API key."
|
6535 |
msgstr ""
|
6536 |
|
6537 |
+
#: src/admin-views/tribe-options-display.php:198
|
6538 |
msgid "Basic Template Settings"
|
6539 |
msgstr ""
|
6540 |
|
6541 |
+
#: src/admin-views/tribe-options-display.php:204
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6542 |
msgid "Events template"
|
6543 |
msgstr ""
|
6544 |
|
6545 |
+
#: src/admin-views/tribe-options-display.php:205
|
6546 |
msgid ""
|
6547 |
"Choose a page template to control the appearance of your calendar and event "
|
6548 |
"content."
|
6549 |
msgstr ""
|
6550 |
|
6551 |
+
#: src/admin-views/tribe-options-display.php:213
|
6552 |
msgid "Enable event views"
|
6553 |
msgstr ""
|
6554 |
|
6555 |
+
#: src/admin-views/tribe-options-display.php:229
|
6556 |
msgid "Use updated calendar designs"
|
6557 |
msgstr ""
|
6558 |
|
6559 |
+
#: src/admin-views/tribe-options-display.php:230
|
6560 |
msgid "Enable updated designs for all calendar views"
|
6561 |
msgstr ""
|
6562 |
|
6563 |
+
#: src/admin-views/tribe-options-display.php:244
|
6564 |
msgid "Default view"
|
6565 |
msgstr ""
|
6566 |
|
6567 |
+
#: src/admin-views/tribe-options-display.php:252
|
6568 |
msgid "Disable the Event Search Bar"
|
6569 |
msgstr ""
|
6570 |
|
6571 |
+
#: src/admin-views/tribe-options-display.php:253
|
6572 |
msgid "Check this to use the classic header."
|
6573 |
msgstr ""
|
6574 |
|
6575 |
+
#: src/admin-views/tribe-options-display.php:259
|
6576 |
msgid "Month view events per day"
|
6577 |
msgstr ""
|
6578 |
|
6579 |
+
#: src/admin-views/tribe-options-display.php:260
|
6580 |
msgid ""
|
6581 |
"Change the default 3 events per day in month view. To impose no limit, you "
|
6582 |
"may specify -1. Please note there may be performance issues if you allow too "
|
6583 |
"many events per day. <a href=\"%s\">Read more</a>."
|
6584 |
msgstr ""
|
6585 |
|
6586 |
+
#: src/admin-views/tribe-options-display.php:267
|
6587 |
msgid "Enable the Month View Cache"
|
6588 |
msgstr ""
|
6589 |
|
6590 |
+
#: src/admin-views/tribe-options-display.php:268
|
6591 |
msgid ""
|
6592 |
"Check this to cache your month view HTML in transients, which can help "
|
6593 |
"improve calendar speed on sites with many events. <a href=\"%s\">Read more</"
|
6594 |
"a>."
|
6595 |
msgstr ""
|
6596 |
|
6597 |
+
#: src/admin-views/tribe-options-display.php:281
|
6598 |
msgid "Advanced Template Settings"
|
6599 |
msgstr ""
|
6600 |
|
6601 |
+
#: src/admin-views/tribe-options-display.php:285
|
6602 |
msgid "Add HTML before event content"
|
6603 |
msgstr ""
|
6604 |
|
6605 |
+
#: src/admin-views/tribe-options-display.php:286
|
6606 |
msgid ""
|
6607 |
"If you are familiar with HTML, you can add additional code before the event "
|
6608 |
"template. Some themes may require this to help with styling or layout."
|
6609 |
msgstr ""
|
6610 |
|
6611 |
+
#: src/admin-views/tribe-options-display.php:291
|
6612 |
msgid "Add HTML after event content"
|
6613 |
msgstr ""
|
6614 |
|
6615 |
+
#: src/admin-views/tribe-options-display.php:292
|
6616 |
msgid ""
|
6617 |
"If you are familiar with HTML, you can add additional code after the event "
|
6618 |
"template. Some themes may require this to help with styling or layout."
|
6654 |
msgstr ""
|
6655 |
|
6656 |
#: src/admin-views/tribe-options-general.php:52
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6657 |
msgid "Show comments"
|
6658 |
msgstr ""
|
6659 |
|
6660 |
+
#: src/admin-views/tribe-options-general.php:53
|
6661 |
msgid "Enable comments on event pages."
|
6662 |
msgstr ""
|
6663 |
|
6664 |
+
#: src/admin-views/tribe-options-general.php:59
|
6665 |
msgid "Show Custom Fields metabox"
|
6666 |
msgstr ""
|
6667 |
|
6668 |
+
#: src/admin-views/tribe-options-general.php:60
|
6669 |
msgid "Enable WordPress Custom Fields on events in the classic editor."
|
6670 |
msgstr ""
|
6671 |
|
6672 |
+
#: src/admin-views/tribe-options-general.php:66
|
6673 |
msgid "Include events in main blog loop"
|
6674 |
msgstr ""
|
6675 |
|
6676 |
+
#: src/admin-views/tribe-options-general.php:67
|
6677 |
msgid ""
|
6678 |
"Show events with the site's other posts. When this box is checked, events "
|
6679 |
"will also continue to appear on the default events page."
|
6680 |
msgstr ""
|
6681 |
|
6682 |
+
#: src/admin-views/tribe-options-general.php:73
|
6683 |
+
#: src/admin-views/tribe-options-general.php:89
|
6684 |
msgid "Events URL slug"
|
6685 |
msgstr ""
|
6686 |
|
6687 |
+
#: src/admin-views/tribe-options-general.php:76
|
6688 |
msgid ""
|
6689 |
"The current URL for your events page is %1$s. <br><br> You cannot edit the "
|
6690 |
"slug for your events page as you do not have pretty permalinks enabled. In "
|
6691 |
"order to edit the slug here, <a href=\"%2$s\">enable pretty permalinks</a>."
|
6692 |
msgstr ""
|
6693 |
|
6694 |
+
#: src/admin-views/tribe-options-general.php:96
|
6695 |
#: src/functions/template-tags/options.php:20
|
6696 |
msgid "The slug used for building the events URL."
|
6697 |
msgstr ""
|
6698 |
|
6699 |
+
#: src/admin-views/tribe-options-general.php:96
|
6700 |
msgid "Your current events URL is: %s"
|
6701 |
msgstr ""
|
6702 |
|
6703 |
+
#: src/admin-views/tribe-options-general.php:101
|
6704 |
#: src/functions/template-tags/options.php:39
|
6705 |
msgid "Here is the iCal feed URL for your events:"
|
6706 |
msgstr ""
|
6707 |
|
6708 |
+
#: src/admin-views/tribe-options-general.php:106
|
6709 |
msgid "Single event URL slug"
|
6710 |
msgstr ""
|
6711 |
|
6712 |
+
#: src/admin-views/tribe-options-general.php:113
|
6713 |
msgid ""
|
6714 |
"The above should ideally be plural, and this singular.<br />Your single "
|
6715 |
"event URL is: %s"
|
6716 |
msgstr ""
|
6717 |
|
6718 |
+
#: src/admin-views/tribe-options-general.php:118
|
6719 |
msgid "End of day cutoff"
|
6720 |
msgstr ""
|
6721 |
|
6722 |
+
#: src/admin-views/tribe-options-general.php:139
|
6723 |
msgid ""
|
6724 |
"Have an event that runs past midnight? Select a time after that event's end "
|
6725 |
"to avoid showing the event on the next day's calendar."
|
6726 |
msgstr ""
|
6727 |
|
6728 |
+
#: src/admin-views/tribe-options-general.php:144
|
6729 |
msgid "Default currency symbol"
|
6730 |
msgstr ""
|
6731 |
|
6732 |
+
#: src/admin-views/tribe-options-general.php:145
|
6733 |
msgid ""
|
6734 |
"Set the default currency symbol for event costs. Note that this only impacts "
|
6735 |
"future events, and changes made will not apply retroactively."
|
6736 |
msgstr ""
|
6737 |
|
6738 |
+
#: src/admin-views/tribe-options-general.php:152
|
6739 |
msgid "Currency symbol follows value"
|
6740 |
msgstr ""
|
6741 |
|
6742 |
+
#: src/admin-views/tribe-options-general.php:153
|
6743 |
msgid ""
|
6744 |
"The currency symbol normally precedes the value. Enabling this option "
|
6745 |
"positions the symbol after the value."
|
6746 |
msgstr ""
|
6747 |
|
6748 |
+
#: src/admin-views/tribe-options-general.php:159
|
6749 |
msgid "Duplicate Venues & Organizers"
|
6750 |
msgstr ""
|
6751 |
|
6752 |
+
#: src/admin-views/tribe-options-general.php:159
|
6753 |
msgid ""
|
6754 |
"You might find duplicate venues and organizers when updating The Events "
|
6755 |
"Calendar from a pre-3.0 version. Click this button to automatically merge "
|
6756 |
"identical venues and organizers."
|
6757 |
msgstr ""
|
6758 |
|
6759 |
+
#: src/admin-views/tribe-options-general.php:163
|
6760 |
msgid "Move to trash events older than"
|
6761 |
msgstr ""
|
6762 |
|
6763 |
+
#: src/admin-views/tribe-options-general.php:164
|
6764 |
msgid "This option allows you to automatically move past events to trash."
|
6765 |
msgstr ""
|
6766 |
|
6767 |
+
#: src/admin-views/tribe-options-general.php:169
|
6768 |
+
#: src/admin-views/tribe-options-general.php:186
|
6769 |
msgid "Disabled"
|
6770 |
msgstr ""
|
6771 |
|
6772 |
+
#: src/admin-views/tribe-options-general.php:170
|
6773 |
+
#: src/admin-views/tribe-options-general.php:187
|
6774 |
msgid "3 months"
|
6775 |
msgstr ""
|
6776 |
|
6777 |
+
#: src/admin-views/tribe-options-general.php:171
|
6778 |
+
#: src/admin-views/tribe-options-general.php:188
|
6779 |
msgid "6 months"
|
6780 |
msgstr ""
|
6781 |
|
6782 |
+
#: src/admin-views/tribe-options-general.php:172
|
6783 |
+
#: src/admin-views/tribe-options-general.php:189
|
6784 |
msgid "9 months"
|
6785 |
msgstr ""
|
6786 |
|
6787 |
+
#: src/admin-views/tribe-options-general.php:173
|
6788 |
+
#: src/admin-views/tribe-options-general.php:190
|
6789 |
msgid "1 year"
|
6790 |
msgstr ""
|
6791 |
|
6792 |
+
#: src/admin-views/tribe-options-general.php:174
|
6793 |
+
#: src/admin-views/tribe-options-general.php:191
|
6794 |
msgid "2 years"
|
6795 |
msgstr ""
|
6796 |
|
6797 |
+
#: src/admin-views/tribe-options-general.php:175
|
6798 |
+
#: src/admin-views/tribe-options-general.php:192
|
6799 |
msgid "3 years"
|
6800 |
msgstr ""
|
6801 |
|
6802 |
+
#: src/admin-views/tribe-options-general.php:180
|
6803 |
msgid "Permanently delete events older than"
|
6804 |
msgstr ""
|
6805 |
|
6806 |
+
#: src/admin-views/tribe-options-general.php:181
|
6807 |
msgid ""
|
6808 |
"This option allows you to bulk delete past events. Be careful and backup "
|
6809 |
"your database before removing your events as there is no way to reverse the "
|
6810 |
"changes."
|
6811 |
msgstr ""
|
6812 |
|
6813 |
+
#: src/admin-views/tribe-options-general.php:197
|
6814 |
msgid "Miscellaneous Settings"
|
6815 |
msgstr ""
|
6816 |
|
6817 |
+
#: src/admin-views/tribe-options-general.php:210
|
6818 |
+
#: src/admin-views/tribe-options-general.php:211
|
6819 |
msgid "View Welcome Page"
|
6820 |
msgstr ""
|
6821 |
|
6822 |
+
#: src/admin-views/tribe-options-general.php:211
|
6823 |
msgid "View the page that displayed when you initially installed the plugin."
|
6824 |
msgstr ""
|
6825 |
|
6826 |
+
#: src/admin-views/tribe-options-general.php:217
|
6827 |
+
#: src/admin-views/tribe-options-general.php:218
|
6828 |
msgid "View Update Page"
|
6829 |
msgstr ""
|
6830 |
|
6831 |
+
#: src/admin-views/tribe-options-general.php:218
|
6832 |
msgid "View the page that displayed when you updated the plugin."
|
6833 |
msgstr ""
|
6834 |
|
6835 |
+
#: src/admin-views/tribe-options-general.php:230
|
6836 |
msgid "Map Settings"
|
6837 |
msgstr ""
|
6838 |
|
6839 |
+
#: src/admin-views/tribe-options-general.php:234
|
6840 |
msgid "Enable Maps"
|
6841 |
msgstr ""
|
6842 |
|
6843 |
+
#: src/admin-views/tribe-options-general.php:235
|
6844 |
msgid "Check to enable maps for events and venues."
|
6845 |
msgstr ""
|
6846 |
|
6847 |
+
#: src/admin-views/tribe-options-general.php:242
|
6848 |
msgid "Google Maps default zoom level"
|
6849 |
msgstr ""
|
6850 |
|
6851 |
+
#: src/admin-views/tribe-options-general.php:243
|
6852 |
msgid "0 = zoomed out; 21 = zoomed in."
|
6853 |
msgstr ""
|
6854 |
|
6855 |
+
#: src/admin-views/tribe-options-general.php:256
|
6856 |
+
msgid "Filter Activation"
|
6857 |
+
msgstr ""
|
6858 |
+
|
6859 |
+
#: src/admin-views/tribe-options-general.php:258
|
6860 |
+
msgid "Calendar view is updated immediately when a filter is selected"
|
6861 |
+
msgstr ""
|
6862 |
+
|
6863 |
+
#: src/admin-views/tribe-options-general.php:259
|
6864 |
+
msgid "Submit button activates any selected filters"
|
6865 |
+
msgstr ""
|
6866 |
+
|
6867 |
+
#: src/admin-views/tribe-options-general.php:261
|
6868 |
+
msgid ""
|
6869 |
+
"Immediate filter activation may not be fully compliant with Web "
|
6870 |
+
"Accessibility Standards."
|
6871 |
+
msgstr ""
|
6872 |
+
|
6873 |
#: src/admin-views/tribe-options-timezones.php:7
|
6874 |
msgid "Enable Time Zone support"
|
6875 |
msgstr ""
|
7088 |
msgid "Today"
|
7089 |
msgstr ""
|
7090 |
|
7091 |
+
#: src/deprecated/Tribe__Events__Customizer__Text.php:73
|
7092 |
+
msgid "Text"
|
7093 |
+
msgstr ""
|
7094 |
+
|
7095 |
+
#: src/deprecated/Tribe__Events__Customizer__Text.php:74
|
7096 |
+
msgid ""
|
7097 |
+
"Options selected here will override what was selected in the General section."
|
7098 |
+
msgstr ""
|
7099 |
+
|
7100 |
#: src/deprecated/Tribe__Events__Importer__Admin_Page.php:77
|
7101 |
#: src/deprecated/Tribe__Events__Importer__Admin_Page.php:78
|
7102 |
msgid "Legacy Import"
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Contributors: ModernTribe, borkweb, barry.hughes, bordoni, brianjessee, aguseo,
|
|
4 |
Tags: events, calendar, event, venue, organizer, dates, date, google maps, conference, workshop, concert, meeting, seminar, summit, class, modern tribe, tribe, widget
|
5 |
Donate link: http://m.tri.be/29
|
6 |
Requires at least: 4.9
|
7 |
-
Stable tag: 5.0.
|
8 |
Tested up to: 5.3.2
|
9 |
Requires PHP: 5.6
|
10 |
License: GPLv2 or later
|
@@ -223,6 +223,22 @@ Remember to always make a backup of your database and files before updating!
|
|
223 |
|
224 |
== Changelog ==
|
225 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
= [5.0.1] 2020-02-12 =
|
227 |
|
228 |
* Version - The Events Calendar 5.0.1 is only compatible with Filter Bar 4.9.1 and higher
|
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: http://m.tri.be/29
|
6 |
Requires at least: 4.9
|
7 |
+
Stable tag: 5.0.2
|
8 |
Tested up to: 5.3.2
|
9 |
Requires PHP: 5.6
|
10 |
License: GPLv2 or later
|
223 |
|
224 |
== Changelog ==
|
225 |
|
226 |
+
= [5.0.2] 2020-02-19 =
|
227 |
+
|
228 |
+
* Version - The Events Calendar 5.0.2 is only compatible with Filter Bar 4.9.2 and higher
|
229 |
+
* Version - The Events Calendar 5.0.2 is only compatible with Events Calendar PRO 5.0.2 and higher
|
230 |
+
* Tweak - Modify Link Color Customizer option for single event links in description, the venue, the organizer, and the website link in classic editor. [TEC-3219]
|
231 |
+
* Tweak - Move link color option to General tab in Customizer and remove Text tab. [TEC-3244]
|
232 |
+
* Tweak - Freemius Opt-out workflow now present on all occasions [TEC-3171]
|
233 |
+
* Tweak - Freemius updated to the latest version 2.3.2 [TEC-3171]
|
234 |
+
* Tweak - Remove the "Default stylesheet - full" option from display settings, for the new views. [TEC-3125]
|
235 |
+
* Tweak - Change the live refresh option to a radio, adjust conditional checks to accommodate. [TEC-3072]
|
236 |
+
* Fix - Freemius activation URL send via email works as expected [TEC-3218]
|
237 |
+
* Fix - Improve compatibility from Updated Views V2 with Beaver Builder plugins [TEC-3248]
|
238 |
+
* Fix - More robust handling of `hide_from_listings` in REST API v2, thanks @maxm123
|
239 |
+
* Fix - Make sure the new Views (v2) will correctly print JSON-LD schema information [TEC-3241]
|
240 |
+
* Language - 4 new strings added, 248 updated, 1 fuzzied, and 3 obsoleted
|
241 |
+
|
242 |
= [5.0.1] 2020-02-12 =
|
243 |
|
244 |
* Version - The Events Calendar 5.0.1 is only compatible with Filter Bar 4.9.1 and higher
|
src/Tribe/Customizer/Global_Elements.php
CHANGED
@@ -176,11 +176,22 @@ final class Tribe__Events__Customizer__Global_Elements extends Tribe__Customizer
|
|
176 |
|
177 |
}
|
178 |
|
179 |
-
if ( tribe_events_views_v2_is_enabled() ) {
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
$template .= '
|
185 |
#tribe-events-content a,
|
186 |
.tribe-events-event-meta a {
|
@@ -189,6 +200,11 @@ final class Tribe__Events__Customizer__Global_Elements extends Tribe__Customizer
|
|
189 |
';
|
190 |
}
|
191 |
|
|
|
|
|
|
|
|
|
|
|
192 |
if ( $customizer->has_option( $this->ID, 'filterbar_color' ) ) {
|
193 |
$template .= '
|
194 |
#tribe-bar-form {
|
@@ -259,6 +275,10 @@ final class Tribe__Events__Customizer__Global_Elements extends Tribe__Customizer
|
|
259 |
$title = $views_v2_is_enabled ? esc_html__( 'General', 'the-events-calendar' ) : esc_html__( 'Global Elements', 'the-events-calendar' );
|
260 |
$description = $views_v2_is_enabled ? '' : esc_html__( 'Options selected here will override what was selected in the "General Theme" section', 'the-events-calendar' );
|
261 |
|
|
|
|
|
|
|
|
|
262 |
$this->arguments = array(
|
263 |
'priority' => 20,
|
264 |
'capability' => 'edit_theme_options',
|
@@ -302,10 +322,6 @@ final class Tribe__Events__Customizer__Global_Elements extends Tribe__Customizer
|
|
302 |
|
303 |
$customizer->add_setting_name( $customizer->get_setting_name( 'accent_color', $section ) );
|
304 |
|
305 |
-
if ( tribe_events_views_v2_is_enabled() ) {
|
306 |
-
return;
|
307 |
-
}
|
308 |
-
|
309 |
$manager->add_setting(
|
310 |
$customizer->get_setting_name( 'link_color', $section ),
|
311 |
array(
|
@@ -330,6 +346,9 @@ final class Tribe__Events__Customizer__Global_Elements extends Tribe__Customizer
|
|
330 |
|
331 |
$customizer->add_setting_name( $customizer->get_setting_name( 'link_color', $section ) );
|
332 |
|
|
|
|
|
|
|
333 |
|
334 |
$manager->add_setting(
|
335 |
$customizer->get_setting_name( 'filterbar_color', $section ),
|
176 |
|
177 |
}
|
178 |
|
179 |
+
if ( tribe_events_views_v2_is_enabled() && $customizer->has_option( $this->ID, 'link_color' ) ) {
|
180 |
+
$template .= '
|
181 |
+
.tribe-events-single-event-description a,
|
182 |
+
.tribe-events-event-url a,
|
183 |
+
.tribe-venue-url a,
|
184 |
+
.tribe-organizer-url a,
|
185 |
+
|
186 |
+
.tribe-events-pro .tribe-events-pro-organizer__meta-website a,
|
187 |
+
.tribe-block__organizer__website a,
|
188 |
+
.tribe-events-pro .tribe-events-pro-venue__meta-website a,
|
189 |
+
.tribe-block__venue__website a,
|
190 |
+
.tribe_events p a {
|
191 |
+
color: <%= global_elements.link_color %>;
|
192 |
+
}
|
193 |
+
';
|
194 |
+
} elseif ( $customizer->has_option( $this->ID, 'link_color' ) ) {
|
195 |
$template .= '
|
196 |
#tribe-events-content a,
|
197 |
.tribe-events-event-meta a {
|
200 |
';
|
201 |
}
|
202 |
|
203 |
+
|
204 |
+
if ( tribe_events_views_v2_is_enabled() ) {
|
205 |
+
return $template;
|
206 |
+
}
|
207 |
+
|
208 |
if ( $customizer->has_option( $this->ID, 'filterbar_color' ) ) {
|
209 |
$template .= '
|
210 |
#tribe-bar-form {
|
275 |
$title = $views_v2_is_enabled ? esc_html__( 'General', 'the-events-calendar' ) : esc_html__( 'Global Elements', 'the-events-calendar' );
|
276 |
$description = $views_v2_is_enabled ? '' : esc_html__( 'Options selected here will override what was selected in the "General Theme" section', 'the-events-calendar' );
|
277 |
|
278 |
+
$this->defaults = [
|
279 |
+
'link_color' => '#141827',
|
280 |
+
];
|
281 |
+
|
282 |
$this->arguments = array(
|
283 |
'priority' => 20,
|
284 |
'capability' => 'edit_theme_options',
|
322 |
|
323 |
$customizer->add_setting_name( $customizer->get_setting_name( 'accent_color', $section ) );
|
324 |
|
|
|
|
|
|
|
|
|
325 |
$manager->add_setting(
|
326 |
$customizer->get_setting_name( 'link_color', $section ),
|
327 |
array(
|
346 |
|
347 |
$customizer->add_setting_name( $customizer->get_setting_name( 'link_color', $section ) );
|
348 |
|
349 |
+
if ( tribe_events_views_v2_is_enabled() ) {
|
350 |
+
return;
|
351 |
+
}
|
352 |
|
353 |
$manager->add_setting(
|
354 |
$customizer->get_setting_name( 'filterbar_color', $section ),
|
src/Tribe/Editor/Compatibility.php
CHANGED
@@ -118,11 +118,11 @@ class Tribe__Events__Editor__Compatibility {
|
|
118 |
return $fields;
|
119 |
}
|
120 |
|
121 |
-
$read_more_url
|
122 |
$read_more_link = sprintf( ' <a href="%2$s" target="_blank">%1$s</a>.', esc_html__( 'Read more', 'the-events-calendar' ), esc_url( $read_more_url ) );
|
123 |
|
124 |
-
$
|
125 |
-
$insert_data
|
126 |
$this->get_toggle_blocks_editor_key() => array(
|
127 |
'type' => 'checkbox_bool',
|
128 |
'label' => esc_html__( 'Activate Block Editor for Events', 'the-events-calendar' ),
|
@@ -140,7 +140,7 @@ class Tribe__Events__Editor__Compatibility {
|
|
140 |
),
|
141 |
);
|
142 |
|
143 |
-
return Tribe__Main::
|
144 |
}
|
145 |
|
146 |
}
|
118 |
return $fields;
|
119 |
}
|
120 |
|
121 |
+
$read_more_url = 'https://theeventscalendar.com/gutenberg-block-editor-news/?utm_source=tec&utm_medium=eventscalendarapp&utm_term=adminnotice&utm_campaign=gutenbergrelease&utm_content=ebook-gutenberg&cid=tec_eventscalendarapp_adminnotice_gutenbergrelease_ebook-gutenberg';
|
122 |
$read_more_link = sprintf( ' <a href="%2$s" target="_blank">%1$s</a>.', esc_html__( 'Read more', 'the-events-calendar' ), esc_url( $read_more_url ) );
|
123 |
|
124 |
+
$insert_before = 'showComments';
|
125 |
+
$insert_data = array(
|
126 |
$this->get_toggle_blocks_editor_key() => array(
|
127 |
'type' => 'checkbox_bool',
|
128 |
'label' => esc_html__( 'Activate Block Editor for Events', 'the-events-calendar' ),
|
140 |
),
|
141 |
);
|
142 |
|
143 |
+
return Tribe__Main::array_insert_before_key( $insert_before, $fields, $insert_data );
|
144 |
}
|
145 |
|
146 |
}
|
src/Tribe/Integrations/Beaver_Builder.php
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Handles compatibility with Beaver Builder plugin.
|
4 |
+
*
|
5 |
+
* @package Tribe\Events\Integrations
|
6 |
+
* @since 5.0.2
|
7 |
+
*/
|
8 |
+
namespace Tribe\Events\Integrations;
|
9 |
+
|
10 |
+
use Tribe\Events\Views\V2\Template\Page;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Integrations with Beaver Builder plugin.
|
14 |
+
*
|
15 |
+
* @package Tribe\Events\Integrations
|
16 |
+
*
|
17 |
+
* @since 5.0.2
|
18 |
+
*/
|
19 |
+
class Beaver_Builder {
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Hooks all the required methods for Beaver_Builder usage on our code.
|
23 |
+
*
|
24 |
+
* @since 5.0.2
|
25 |
+
*
|
26 |
+
* @return void Action hook with no return.
|
27 |
+
*/
|
28 |
+
public function hook() {
|
29 |
+
// Bail when not on V2.
|
30 |
+
if ( ! tribe_events_views_v2_is_enabled() ) {
|
31 |
+
return;
|
32 |
+
}
|
33 |
+
|
34 |
+
add_filter( 'fl_theme_builder_before_render_content', [ $this, 'action_restore_post' ] );
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Restore main post for Beaver Builder plugin.
|
39 |
+
*
|
40 |
+
* @since 5.0.2
|
41 |
+
*
|
42 |
+
* @param int $post_id Which Beaver Builder layout.
|
43 |
+
*
|
44 |
+
* @return void Action hook with no return.
|
45 |
+
*/
|
46 |
+
public function action_restore_post( $post_id ) {
|
47 |
+
/* @var Page $page_template */
|
48 |
+
$page_template = tribe( Page::class );
|
49 |
+
|
50 |
+
// Bail when not using page template.
|
51 |
+
if ( ! $page_template->has_hijacked_posts() ) {
|
52 |
+
return;
|
53 |
+
}
|
54 |
+
|
55 |
+
$page_template->restore_main_query();
|
56 |
+
}
|
57 |
+
}
|
src/Tribe/Integrations/Freemius.php
CHANGED
@@ -1,12 +1,14 @@
|
|
1 |
<?php
|
|
|
2 |
/**
|
3 |
* Facilitates smoother integration with the Freemius.
|
4 |
*
|
5 |
* @since 4.9
|
6 |
*/
|
7 |
class Tribe__Events__Integrations__Freemius {
|
|
|
8 |
/**
|
9 |
-
* Stores the instance for the Freemius
|
10 |
*
|
11 |
* @since 4.9
|
12 |
*
|
@@ -15,7 +17,25 @@ class Tribe__Events__Integrations__Freemius {
|
|
15 |
private $instance;
|
16 |
|
17 |
/**
|
18 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
*
|
20 |
* @since 4.9
|
21 |
*
|
@@ -24,7 +44,7 @@ class Tribe__Events__Integrations__Freemius {
|
|
24 |
private $freemius_id = '3069';
|
25 |
|
26 |
/**
|
27 |
-
* Stores the slug for the Freemius application
|
28 |
*
|
29 |
* @since 4.9
|
30 |
*
|
@@ -32,6 +52,15 @@ class Tribe__Events__Integrations__Freemius {
|
|
32 |
*/
|
33 |
private $slug = 'the-events-calendar';
|
34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
/**
|
36 |
* Store the value from the 'page' in the request.
|
37 |
*
|
@@ -39,183 +68,222 @@ class Tribe__Events__Integrations__Freemius {
|
|
39 |
*
|
40 |
* @var string
|
41 |
*/
|
42 |
-
private $page = '';
|
43 |
|
44 |
/**
|
45 |
-
*
|
46 |
-
*
|
47 |
-
* @since 4.9
|
48 |
*
|
49 |
-
* @
|
50 |
*/
|
51 |
public function __construct() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
if ( ! is_admin() ) {
|
53 |
return;
|
54 |
}
|
|
|
|
|
55 |
|
56 |
global $pagenow;
|
57 |
|
58 |
-
$
|
59 |
|
60 |
$valid_page = [
|
61 |
-
Tribe__Settings::$parent_slug,
|
62 |
-
Tribe__App_Shop::MENU_SLUG,
|
63 |
-
Tribe__Events__Aggregator__Page::$slug,
|
64 |
-
'tribe-help',
|
65 |
];
|
66 |
|
67 |
-
if (
|
68 |
-
|
69 |
-
|
70 |
-
) {
|
71 |
return;
|
72 |
}
|
73 |
|
74 |
-
//
|
75 |
if ( ! tribe()->offsetExists( 'freemius' ) ) {
|
76 |
return;
|
77 |
}
|
78 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
/**
|
80 |
-
* Allows third-party disabling of
|
81 |
*
|
82 |
* @since 4.9
|
83 |
*
|
84 |
-
* @param
|
85 |
*/
|
86 |
-
$should_load = apply_filters( 'tribe_events_integrations_should_load_freemius', $
|
87 |
|
88 |
if ( ! $should_load ) {
|
89 |
return;
|
90 |
}
|
91 |
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
[
|
97 |
-
'
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
$this->instance->add_filter( '
|
110 |
-
$this->instance->add_filter( '
|
111 |
-
$this->instance->add_filter( '
|
112 |
-
$this->instance->add_filter(
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
// Freemius typically hooks this action–which bootstraps the deactivation dialog–during plugins_loaded, but we
|
120 |
-
// initialize our plugins AFTER plugins_loaded, so we'll register it on admin_init instead
|
121 |
add_action( 'admin_init', [ $this->instance, '_hook_action_links_and_register_account_hooks' ] );
|
122 |
add_action( 'admin_init', [ $this, 'action_skip_activation' ] );
|
123 |
|
124 |
-
$this->instance->add_filter( '
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
|
126 |
add_action( 'admin_init', [ $this, 'maybe_remove_activation_complete_notice' ] );
|
127 |
}
|
128 |
|
|
|
129 |
/**
|
130 |
-
*
|
|
|
131 |
*
|
132 |
-
* @since
|
133 |
*
|
134 |
-
* @
|
|
|
|
|
135 |
*/
|
136 |
-
public function
|
137 |
-
$
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
}
|
145 |
|
146 |
/**
|
147 |
-
*
|
148 |
*
|
149 |
-
* @since
|
150 |
*
|
151 |
-
* @param
|
152 |
*
|
153 |
-
* @return
|
154 |
*/
|
155 |
-
public function
|
156 |
-
|
157 |
-
defined( 'TRIBE_EVENTS_INTEGRATIONS_SHOULD_LOAD_FREEMIUS' )
|
158 |
-
&& TRIBE_EVENTS_INTEGRATIONS_SHOULD_LOAD_FREEMIUS
|
159 |
-
) {
|
160 |
-
return TRIBE_EVENTS_INTEGRATIONS_SHOULD_LOAD_FREEMIUS;
|
161 |
-
}
|
162 |
-
|
163 |
-
// activate Freemius in all instances
|
164 |
-
return true;
|
165 |
|
166 |
-
|
167 |
-
|
168 |
-
$seed_misses_threshold = null === $seed || $threshold < $seed;
|
169 |
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
*/
|
175 |
-
$previous_versions = Tribe__Settings_Manager::get_option( 'previous_ecp_versions', [] );
|
176 |
-
$has_previous_versions = ! empty( $previous_versions ) && '0' != end( $previous_versions );
|
177 |
-
|
178 |
-
if ( $has_previous_versions && $seed_misses_threshold ) {
|
179 |
-
return false;
|
180 |
}
|
181 |
|
182 |
-
|
183 |
-
|
184 |
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
189 |
|
190 |
-
|
191 |
-
|
192 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
193 |
|
194 |
-
|
195 |
-
|
196 |
-
return true;
|
197 |
-
}
|
198 |
|
199 |
-
|
200 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
}
|
202 |
|
203 |
/**
|
204 |
-
* Action to skip activation since
|
205 |
*
|
206 |
* @since 4.9
|
207 |
*
|
208 |
-
* @return bool
|
209 |
*/
|
210 |
public function action_skip_activation() {
|
211 |
$fs_action = tribe_get_request_var( 'fs_action' );
|
212 |
|
213 |
-
// Prevent
|
214 |
if ( ! function_exists( 'fs_redirect' ) || ! function_exists( 'fs_is_network_admin' ) ) {
|
215 |
return false;
|
216 |
}
|
217 |
|
218 |
-
// Actually do the
|
219 |
if ( $this->slug . '_skip_activation' !== $fs_action ) {
|
220 |
return false;
|
221 |
}
|
@@ -225,57 +293,53 @@ class Tribe__Events__Integrations__Freemius {
|
|
225 |
$this->instance->skip_connection( null, fs_is_network_admin() );
|
226 |
|
227 |
fs_redirect( $this->instance->get_after_activation_url( 'after_skip_url' ) );
|
|
|
|
|
228 |
}
|
229 |
|
230 |
/**
|
231 |
-
* Filter the content for the Freemius Popup
|
232 |
*
|
233 |
* @since 4.9
|
234 |
*
|
235 |
-
* @param
|
236 |
-
* @param
|
237 |
-
* @param
|
238 |
-
* @param
|
239 |
-
* @param
|
240 |
-
* @param
|
241 |
*
|
242 |
* @return string
|
243 |
*/
|
244 |
public function filter_connect_message_on_update(
|
245 |
-
$message,
|
246 |
-
$user_first_name,
|
247 |
-
$product_title,
|
248 |
-
$user_login,
|
249 |
-
$site_link,
|
250 |
-
$freemius_link
|
251 |
) {
|
252 |
-
$
|
253 |
-
$title = '<h3>' . sprintf( esc_html__( 'We hope you love %1$s', 'the-events-calendar' ), $plugin_name ) . '</h3>';
|
254 |
-
$html = '';
|
255 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
$html .= '<p>';
|
257 |
-
$html .= sprintf(
|
258 |
-
esc_html__( 'Hi, %1$s! This is an invitation to help %2$s community. If you opt-in, some data about your usage of %2$s will be shared with our teams (so they can work their butts off to improve). We will also share some helpful info on events management, WordPress, and our products from time to time.', 'the-events-calendar' ),
|
259 |
-
$user_first_name,
|
260 |
-
$plugin_name
|
261 |
-
);
|
262 |
$html .= '</p>';
|
263 |
|
264 |
$html .= '<p>';
|
265 |
-
$html .= sprintf(
|
266 |
-
esc_html__( 'And if you skip this, that\'s okay! %1$s will still work just fine.', 'the-events-calendar' ),
|
267 |
-
$plugin_name
|
268 |
-
);
|
269 |
$html .= '</p>';
|
270 |
|
271 |
-
// Powered by HTML
|
272 |
$html .= '<div class="tribe-powered-by-freemius">' . esc_html__( 'Powered by', 'the-events-calendar' ) . '</div>';
|
273 |
|
274 |
return $title . $html;
|
275 |
}
|
276 |
|
277 |
/**
|
278 |
-
* Returns
|
279 |
*
|
280 |
* @since 4.9
|
281 |
*
|
@@ -286,36 +350,29 @@ class Tribe__Events__Integrations__Freemius {
|
|
286 |
}
|
287 |
|
288 |
/**
|
289 |
-
* Method to remove the sticky message when the plugin is active for
|
290 |
*
|
291 |
* @since 4.9
|
292 |
-
*
|
293 |
-
* @return void
|
294 |
*/
|
295 |
public function maybe_remove_activation_complete_notice() {
|
296 |
-
|
297 |
-
// Bail if the is_pending_activation() method doesn't exist
|
298 |
if ( ! method_exists( $this->instance, 'is_pending_activation' ) ) {
|
299 |
return;
|
300 |
}
|
301 |
|
302 |
-
// Bail if it's still pending activation
|
303 |
if ( $this->instance->is_pending_activation() ) {
|
304 |
return;
|
305 |
}
|
306 |
|
307 |
-
$admin_notices = FS_Admin_Notices::instance(
|
308 |
-
$this->slug,
|
309 |
-
'The Events Calendar',
|
310 |
-
$this->instance->get_unique_affix()
|
311 |
-
);
|
312 |
|
313 |
-
// Bail if it doesn't have the activation complete notice
|
314 |
if ( ! $admin_notices->has_sticky( 'activation_complete' ) ) {
|
315 |
return;
|
316 |
}
|
317 |
|
318 |
-
// Remove the sticky notice for activation complete
|
319 |
$admin_notices->remove_sticky( 'activation_complete' );
|
320 |
}
|
321 |
}
|
1 |
<?php
|
2 |
+
|
3 |
/**
|
4 |
* Facilitates smoother integration with the Freemius.
|
5 |
*
|
6 |
* @since 4.9
|
7 |
*/
|
8 |
class Tribe__Events__Integrations__Freemius {
|
9 |
+
|
10 |
/**
|
11 |
+
* Stores the instance for the Freemius.
|
12 |
*
|
13 |
* @since 4.9
|
14 |
*
|
17 |
private $instance;
|
18 |
|
19 |
/**
|
20 |
+
* The object class used for assets.
|
21 |
+
*
|
22 |
+
* @since 5.0.2
|
23 |
+
*
|
24 |
+
* @var string
|
25 |
+
*/
|
26 |
+
private $object_class = 'Tribe__Events__Main';
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Stores the public key for Freemius.
|
30 |
+
*
|
31 |
+
* @since 5.0.2
|
32 |
+
*
|
33 |
+
* @var string
|
34 |
+
*/
|
35 |
+
private $public_key = 'pk_e32061abc28cfedf231f3e5c4e626';
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Stores the ID for the Freemius application.
|
39 |
*
|
40 |
* @since 4.9
|
41 |
*
|
44 |
private $freemius_id = '3069';
|
45 |
|
46 |
/**
|
47 |
+
* Stores the slug for the Freemius application.
|
48 |
*
|
49 |
* @since 4.9
|
50 |
*
|
52 |
*/
|
53 |
private $slug = 'the-events-calendar';
|
54 |
|
55 |
+
/**
|
56 |
+
* Stores the name for the Freemius application.
|
57 |
+
*
|
58 |
+
* @since 5.0.2
|
59 |
+
*
|
60 |
+
* @var string
|
61 |
+
*/
|
62 |
+
private $name = 'The Events Calendar';
|
63 |
+
|
64 |
/**
|
65 |
* Store the value from the 'page' in the request.
|
66 |
*
|
68 |
*
|
69 |
* @var string
|
70 |
*/
|
71 |
+
private $page = 'tribe-common';
|
72 |
|
73 |
/**
|
74 |
+
* Tribe__Tickets__Integrations__Freemius constructor.
|
|
|
|
|
75 |
*
|
76 |
+
* @since 5.0.2
|
77 |
*/
|
78 |
public function __construct() {
|
79 |
+
$this->setup();
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Performs setup for the Freemius integration singleton.
|
84 |
+
*
|
85 |
+
* @since 5.0.2
|
86 |
+
*/
|
87 |
+
public function setup() {
|
88 |
if ( ! is_admin() ) {
|
89 |
return;
|
90 |
}
|
91 |
+
// Setup possible redirect.
|
92 |
+
add_action( 'wp_loaded', [ $this, 'action_redirect_incorrect_page' ] );
|
93 |
|
94 |
global $pagenow;
|
95 |
|
96 |
+
$page = tribe_get_request_var( 'page' );
|
97 |
|
98 |
$valid_page = [
|
99 |
+
Tribe__Settings::$parent_slug => true,
|
100 |
+
Tribe__App_Shop::MENU_SLUG => true,
|
101 |
+
Tribe__Events__Aggregator__Page::$slug => true,
|
102 |
+
'tribe-help' => true,
|
103 |
];
|
104 |
|
105 |
+
if ( isset( $valid_page[ $page ] ) ) {
|
106 |
+
$this->page = $page;
|
107 |
+
} elseif ( 'plugins.php' !== $pagenow && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
|
|
|
108 |
return;
|
109 |
}
|
110 |
|
111 |
+
// If the common that loaded doesn't include Freemius, let's bail.
|
112 |
if ( ! tribe()->offsetExists( 'freemius' ) ) {
|
113 |
return;
|
114 |
}
|
115 |
|
116 |
+
$should_load = true;
|
117 |
+
|
118 |
+
// Check if Freemius integration is disabled.
|
119 |
+
if ( ( defined( 'TRIBE_NO_FREEMIUS' ) && true === TRIBE_NO_FREEMIUS ) || true === (bool) getenv( 'TRIBE_NO_FREEMIUS' ) ) {
|
120 |
+
$should_load = false;
|
121 |
+
}
|
122 |
+
|
123 |
/**
|
124 |
+
* Allows third-party disabling of the integration.
|
125 |
*
|
126 |
* @since 4.9
|
127 |
*
|
128 |
+
* @param bool $should_load Whether the Freemius integration should load.
|
129 |
*/
|
130 |
+
$should_load = apply_filters( 'tribe_events_integrations_should_load_freemius', $should_load );
|
131 |
|
132 |
if ( ! $should_load ) {
|
133 |
return;
|
134 |
}
|
135 |
|
136 |
+
/** @var Tribe__Freemius $freemius */
|
137 |
+
$freemius = tribe( 'freemius' );
|
138 |
+
|
139 |
+
$this->instance = $freemius->initialize( $this->slug, $this->freemius_id, $this->public_key, [
|
140 |
+
'menu' => [
|
141 |
+
'slug' => $this->page,
|
142 |
+
'first-path' => $this->get_settings_path(),
|
143 |
+
'account' => false,
|
144 |
+
'contact' => false,
|
145 |
+
'support' => false,
|
146 |
+
],
|
147 |
+
'is_premium' => false,
|
148 |
+
'has_addons' => false,
|
149 |
+
'has_paid_plans' => false,
|
150 |
+
] );
|
151 |
+
|
152 |
+
$this->instance->add_filter( 'connect_url', [ $this, 'get_connect_url' ], 10, 10 );
|
153 |
+
$this->instance->add_filter( 'after_skip_url', [ $this, 'get_settings_url' ] );
|
154 |
+
$this->instance->add_filter( 'after_connect_url', [ $this, 'get_settings_url' ] );
|
155 |
+
$this->instance->add_filter( 'after_pending_connect_url', [ $this, 'get_settings_url' ] );
|
156 |
+
$this->instance->add_filter( 'plugin_icon', [ $this, 'get_plugin_icon_url' ] );
|
157 |
+
|
158 |
+
/*
|
159 |
+
* Freemius typically hooks this action–which bootstraps the deactivation dialog–during plugins_loaded, but we
|
160 |
+
* initialize our plugins AFTER plugins_loaded, so we'll register it on admin_init instead.
|
161 |
+
*/
|
|
|
|
|
|
|
162 |
add_action( 'admin_init', [ $this->instance, '_hook_action_links_and_register_account_hooks' ] );
|
163 |
add_action( 'admin_init', [ $this, 'action_skip_activation' ] );
|
164 |
|
165 |
+
$this->instance->add_filter( 'connect_message', [
|
166 |
+
$this,
|
167 |
+
'filter_connect_message_on_update',
|
168 |
+
], 10, 6 );
|
169 |
+
$this->instance->add_filter( 'connect_message_on_update', [
|
170 |
+
$this,
|
171 |
+
'filter_connect_message_on_update',
|
172 |
+
], 10, 6 );
|
173 |
|
174 |
add_action( 'admin_init', [ $this, 'maybe_remove_activation_complete_notice' ] );
|
175 |
}
|
176 |
|
177 |
+
|
178 |
/**
|
179 |
+
* For some reason Freemius is redirecting some customers to a page that doesnt exist. So we catch that page and
|
180 |
+
* redirect them back to the actual page that we are using to setup the plugins integration.
|
181 |
*
|
182 |
+
* @since 5.0.2
|
183 |
*
|
184 |
+
* @link https://moderntribe.atlassian.net/browse/TEC-3218
|
185 |
+
*
|
186 |
+
* @return void Retuning a Redirect header, so nothing gets returned otherwise.
|
187 |
*/
|
188 |
+
public function action_redirect_incorrect_page() {
|
189 |
+
$action = tribe_get_request_var( 'fs_action', false );
|
190 |
+
|
191 |
+
if ( 'sync_user' !== $action ) {
|
192 |
+
return;
|
193 |
+
}
|
194 |
+
|
195 |
+
$page = tribe_get_request_var( 'page', false );
|
196 |
+
|
197 |
+
if ( 'tribe-common-account' !== $page ) {
|
198 |
+
return;
|
199 |
+
}
|
200 |
+
|
201 |
+
$url = admin_url( 'admin.php' );
|
202 |
+
$url = add_query_arg( [
|
203 |
+
'fs_action' => $action,
|
204 |
+
'page' => $this->page,
|
205 |
+
'_wpnonce' => tribe_get_request_var( '_wpnonce' ),
|
206 |
+
], $url );
|
207 |
+
|
208 |
+
wp_safe_redirect( $url );
|
209 |
+
tribe_exit();
|
210 |
}
|
211 |
|
212 |
/**
|
213 |
+
* Get the connect page URL.
|
214 |
*
|
215 |
+
* @since 5.0.2
|
216 |
*
|
217 |
+
* @param string $connect_url Current connect page URL.
|
218 |
*
|
219 |
+
* @return string The connect page URL.
|
220 |
*/
|
221 |
+
public function get_connect_url( $connect_url ) {
|
222 |
+
$settings_url = $this->get_settings_url();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
223 |
|
224 |
+
if ( false !== strpos( $connect_url, 'fs_action' ) ) {
|
225 |
+
$action = $this->slug . '_reconnect';
|
|
|
226 |
|
227 |
+
$settings_url = add_query_arg( [
|
228 |
+
'nonce' => wp_create_nonce( $action ),
|
229 |
+
'fs_action' => $action,
|
230 |
+
], $settings_url );
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
}
|
232 |
|
233 |
+
return $settings_url;
|
234 |
+
}
|
235 |
|
236 |
+
/**
|
237 |
+
* Get the Settings page URL.
|
238 |
+
*
|
239 |
+
* @since 5.0.2
|
240 |
+
*
|
241 |
+
* @return string The Settings page URL.
|
242 |
+
*/
|
243 |
+
public function get_settings_url() {
|
244 |
+
return admin_url( $this->get_settings_path() );
|
245 |
+
}
|
246 |
|
247 |
+
/**
|
248 |
+
* Get the plugin icon URL.
|
249 |
+
*
|
250 |
+
* @since 5.0.2
|
251 |
+
*
|
252 |
+
* @return string The plugin icon URL.
|
253 |
+
*/
|
254 |
+
public function get_plugin_icon_url() {
|
255 |
+
$class = $this->object_class;
|
256 |
|
257 |
+
return $class::instance()->plugin_url . '/src/resources/images/' . $this->slug . '.svg';
|
258 |
+
}
|
|
|
|
|
259 |
|
260 |
+
/**
|
261 |
+
* Get the Settings page path.
|
262 |
+
*
|
263 |
+
* @since 5.0.2
|
264 |
+
*
|
265 |
+
* @return string The Settings page path.
|
266 |
+
*/
|
267 |
+
public function get_settings_path() {
|
268 |
+
return sprintf( 'edit.php?post_type=%s&page=%s', Tribe__Events__Main::POSTTYPE, $this->page );
|
269 |
}
|
270 |
|
271 |
/**
|
272 |
+
* Action to skip activation since Freemius code does not skip correctly here.
|
273 |
*
|
274 |
* @since 4.9
|
275 |
*
|
276 |
+
* @return bool Whether activation was skipped.
|
277 |
*/
|
278 |
public function action_skip_activation() {
|
279 |
$fs_action = tribe_get_request_var( 'fs_action' );
|
280 |
|
281 |
+
// Prevent fatal errors.
|
282 |
if ( ! function_exists( 'fs_redirect' ) || ! function_exists( 'fs_is_network_admin' ) ) {
|
283 |
return false;
|
284 |
}
|
285 |
|
286 |
+
// Actually do the skipping of connection, since Freemius code does not do this.
|
287 |
if ( $this->slug . '_skip_activation' !== $fs_action ) {
|
288 |
return false;
|
289 |
}
|
293 |
$this->instance->skip_connection( null, fs_is_network_admin() );
|
294 |
|
295 |
fs_redirect( $this->instance->get_after_activation_url( 'after_skip_url' ) );
|
296 |
+
|
297 |
+
return true;
|
298 |
}
|
299 |
|
300 |
/**
|
301 |
+
* Filter the content for the Freemius Popup.
|
302 |
*
|
303 |
* @since 4.9
|
304 |
*
|
305 |
+
* @param string $message The message content.
|
306 |
+
* @param string $user_first_name The first name of user.
|
307 |
+
* @param string $product_title The product title.
|
308 |
+
* @param string $user_login The user_login of user.
|
309 |
+
* @param string $site_link The site URL.
|
310 |
+
* @param string $freemius_link The Freemius URL.
|
311 |
*
|
312 |
* @return string
|
313 |
*/
|
314 |
public function filter_connect_message_on_update(
|
315 |
+
$message, $user_first_name, $product_title, $user_login, $site_link, $freemius_link
|
|
|
|
|
|
|
|
|
|
|
316 |
) {
|
317 |
+
$class = $this->object_class;
|
|
|
|
|
318 |
|
319 |
+
wp_enqueue_style( 'tribe-' . $this->slug . '-freemius', $class::instance()->plugin_url . '/src/resources/css/freemius.css' );
|
320 |
+
|
321 |
+
// Add the heading HTML.
|
322 |
+
$plugin_name = $this->name;
|
323 |
+
$title = '<h3>' . sprintf( esc_html__( 'We hope you love %1$s', 'the-events-calendar' ), $plugin_name ) . '</h3>';
|
324 |
+
$html = '';
|
325 |
+
|
326 |
+
// Add the introduction HTML.
|
327 |
$html .= '<p>';
|
328 |
+
$html .= sprintf( esc_html__( 'Hi, %1$s! This is an invitation to help our %2$s community. If you opt-in, some data about your usage of %2$s will be shared with our teams (so they can work their butts off to improve). We will also share some helpful info on events management, WordPress, and our products from time to time.', 'the-events-calendar' ), $user_first_name, $plugin_name );
|
|
|
|
|
|
|
|
|
329 |
$html .= '</p>';
|
330 |
|
331 |
$html .= '<p>';
|
332 |
+
$html .= sprintf( esc_html__( 'And if you skip this, that\'s okay! %1$s will still work just fine.', 'the-events-calendar' ), $plugin_name );
|
|
|
|
|
|
|
333 |
$html .= '</p>';
|
334 |
|
335 |
+
// Add the "Powered by" HTML.
|
336 |
$html .= '<div class="tribe-powered-by-freemius">' . esc_html__( 'Powered by', 'the-events-calendar' ) . '</div>';
|
337 |
|
338 |
return $title . $html;
|
339 |
}
|
340 |
|
341 |
/**
|
342 |
+
* Returns the instance of Freemius plugin.
|
343 |
*
|
344 |
* @since 4.9
|
345 |
*
|
350 |
}
|
351 |
|
352 |
/**
|
353 |
+
* Method to remove the sticky message when the plugin is active for Freemius.
|
354 |
*
|
355 |
* @since 4.9
|
|
|
|
|
356 |
*/
|
357 |
public function maybe_remove_activation_complete_notice() {
|
358 |
+
// Bail if the is_pending_activation() method doesn't exist.
|
|
|
359 |
if ( ! method_exists( $this->instance, 'is_pending_activation' ) ) {
|
360 |
return;
|
361 |
}
|
362 |
|
363 |
+
// Bail if it's still pending activation.
|
364 |
if ( $this->instance->is_pending_activation() ) {
|
365 |
return;
|
366 |
}
|
367 |
|
368 |
+
$admin_notices = FS_Admin_Notices::instance( $this->slug, $this->name, $this->instance->get_unique_affix() );
|
|
|
|
|
|
|
|
|
369 |
|
370 |
+
// Bail if it doesn't have the activation complete notice.
|
371 |
if ( ! $admin_notices->has_sticky( 'activation_complete' ) ) {
|
372 |
return;
|
373 |
}
|
374 |
|
375 |
+
// Remove the sticky notice for activation complete.
|
376 |
$admin_notices->remove_sticky( 'activation_complete' );
|
377 |
}
|
378 |
}
|
src/Tribe/Integrations/Manager.php
CHANGED
@@ -1,5 +1,6 @@
|
|
1 |
<?php
|
2 |
use \Tribe\Events\Integrations\WP_Rocket;
|
|
|
3 |
|
4 |
/**
|
5 |
* Class Tribe__Events__Integrations__Manager
|
@@ -39,6 +40,7 @@ class Tribe__Events__Integrations__Manager {
|
|
39 |
$this->load_wpml_integration();
|
40 |
$this->load_X_theme_integration();
|
41 |
$this->load_wp_rocket_integration();
|
|
|
42 |
}
|
43 |
|
44 |
/**
|
@@ -136,7 +138,9 @@ class Tribe__Events__Integrations__Manager {
|
|
136 |
/**
|
137 |
* Loads our WP Rocket plugin integration.
|
138 |
*
|
139 |
-
* @
|
|
|
|
|
140 |
*/
|
141 |
private function load_wp_rocket_integration() {
|
142 |
if ( ! defined( 'WP_ROCKET_VERSION' ) ) {
|
@@ -147,4 +151,21 @@ class Tribe__Events__Integrations__Manager {
|
|
147 |
|
148 |
return true;
|
149 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
}
|
1 |
<?php
|
2 |
use \Tribe\Events\Integrations\WP_Rocket;
|
3 |
+
use \Tribe\Events\Integrations\Beaver_Builder;
|
4 |
|
5 |
/**
|
6 |
* Class Tribe__Events__Integrations__Manager
|
40 |
$this->load_wpml_integration();
|
41 |
$this->load_X_theme_integration();
|
42 |
$this->load_wp_rocket_integration();
|
43 |
+
$this->load_beaver_builder_integration();
|
44 |
}
|
45 |
|
46 |
/**
|
138 |
/**
|
139 |
* Loads our WP Rocket plugin integration.
|
140 |
*
|
141 |
+
* @since 5.0.0.2
|
142 |
+
*
|
143 |
+
* @return bool Whether we loaded WP Rocket compatibility or not.
|
144 |
*/
|
145 |
private function load_wp_rocket_integration() {
|
146 |
if ( ! defined( 'WP_ROCKET_VERSION' ) ) {
|
151 |
|
152 |
return true;
|
153 |
}
|
154 |
+
|
155 |
+
/**
|
156 |
+
* Loads our beaver builder plugin integration.
|
157 |
+
*
|
158 |
+
* @since 5.0.2
|
159 |
+
*
|
160 |
+
* @return bool Whether we loaded Beaver Builder compatibility or not.
|
161 |
+
*/
|
162 |
+
private function load_beaver_builder_integration() {
|
163 |
+
if ( ! class_exists( 'FLThemeBuilderLoader' ) || ! class_exists( 'FLBuilderLoader' ) ) {
|
164 |
+
return false;
|
165 |
+
}
|
166 |
+
|
167 |
+
tribe( Beaver_Builder::class )->hook();
|
168 |
+
|
169 |
+
return true;
|
170 |
+
}
|
171 |
}
|
src/Tribe/Main.php
CHANGED
@@ -32,7 +32,7 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
|
|
32 |
const VENUE_POST_TYPE = 'tribe_venue';
|
33 |
const ORGANIZER_POST_TYPE = 'tribe_organizer';
|
34 |
|
35 |
-
const VERSION = '5.0.
|
36 |
|
37 |
/**
|
38 |
* Min Pro Addon
|
@@ -566,6 +566,7 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
|
|
566 |
// Integrations
|
567 |
tribe_singleton( 'tec.integrations.twenty-seventeen', 'Tribe__Events__Integrations__Twenty_Seventeen', array( 'hook' ) );
|
568 |
tribe_singleton( \Tribe\Events\Integrations\WP_Rocket::class, \Tribe\Events\Integrations\WP_Rocket::class );
|
|
|
569 |
|
570 |
// Linked Posts
|
571 |
tribe_singleton( 'tec.linked-posts', 'Tribe__Events__Linked_Posts' );
|
@@ -615,8 +616,6 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
|
|
615 |
|
616 |
if ( ! tribe_events_views_v2_is_enabled() ) {
|
617 |
tribe_singleton( 'tec.customizer.widget', new Tribe__Events__Customizer__Widget() );
|
618 |
-
} else {
|
619 |
-
tribe_singleton( 'tec.customizer.text', new Tribe__Events__Customizer__Text() );
|
620 |
}
|
621 |
|
622 |
/**
|
@@ -1057,7 +1056,7 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
|
|
1057 |
}
|
1058 |
|
1059 |
$data_attributes = array(
|
1060 |
-
'live_ajax' => tribe_get_option( 'liveFiltersUpdate',
|
1061 |
'datepicker_format' => \Tribe__Date_Utils::get_datepicker_format_index(),
|
1062 |
'category' => $category,
|
1063 |
'featured' => tribe( 'tec.featured_events' )->is_featured_query(),
|
@@ -1853,7 +1852,7 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
|
|
1853 |
*/
|
1854 |
public function body_class( $classes ) {
|
1855 |
if ( get_query_var( 'post_type' ) == self::POSTTYPE ) {
|
1856 |
-
if ( ! is_admin() && tribe_get_option( 'liveFiltersUpdate',
|
1857 |
$classes[] = 'tribe-filter-live';
|
1858 |
}
|
1859 |
}
|
32 |
const VENUE_POST_TYPE = 'tribe_venue';
|
33 |
const ORGANIZER_POST_TYPE = 'tribe_organizer';
|
34 |
|
35 |
+
const VERSION = '5.0.2';
|
36 |
|
37 |
/**
|
38 |
* Min Pro Addon
|
566 |
// Integrations
|
567 |
tribe_singleton( 'tec.integrations.twenty-seventeen', 'Tribe__Events__Integrations__Twenty_Seventeen', array( 'hook' ) );
|
568 |
tribe_singleton( \Tribe\Events\Integrations\WP_Rocket::class, \Tribe\Events\Integrations\WP_Rocket::class );
|
569 |
+
tribe_singleton( \Tribe\Events\Integrations\Beaver_Builder::class, \Tribe\Events\Integrations\Beaver_Builder::class );
|
570 |
|
571 |
// Linked Posts
|
572 |
tribe_singleton( 'tec.linked-posts', 'Tribe__Events__Linked_Posts' );
|
616 |
|
617 |
if ( ! tribe_events_views_v2_is_enabled() ) {
|
618 |
tribe_singleton( 'tec.customizer.widget', new Tribe__Events__Customizer__Widget() );
|
|
|
|
|
619 |
}
|
620 |
|
621 |
/**
|
1056 |
}
|
1057 |
|
1058 |
$data_attributes = array(
|
1059 |
+
'live_ajax' => 'automatic' === tribe_get_option( 'liveFiltersUpdate', 'automatic' ) ? 1 : 0,
|
1060 |
'datepicker_format' => \Tribe__Date_Utils::get_datepicker_format_index(),
|
1061 |
'category' => $category,
|
1062 |
'featured' => tribe( 'tec.featured_events' )->is_featured_query(),
|
1852 |
*/
|
1853 |
public function body_class( $classes ) {
|
1854 |
if ( get_query_var( 'post_type' ) == self::POSTTYPE ) {
|
1855 |
+
if ( ! is_admin() && 'automatic' === tribe_get_option( 'liveFiltersUpdate', 'automatic' ) ) {
|
1856 |
$classes[] = 'tribe-filter-live';
|
1857 |
}
|
1858 |
}
|
src/Tribe/Plugin_Register.php
CHANGED
@@ -6,8 +6,8 @@ class Tribe__Events__Plugin_Register extends Tribe__Abstract_Plugin_Register {
|
|
6 |
protected $main_class = 'Tribe__Events__Main';
|
7 |
protected $dependencies = array(
|
8 |
'addon-dependencies' => array(
|
9 |
-
'Tribe__Events__Pro__Main' => '5.0.
|
10 |
-
'Tribe__Events__Filterbar__View' => '4.9.
|
11 |
'Tribe__Events__Tickets__Eventbrite__Main' => '4.6-dev',
|
12 |
'Tribe__Events__Community__Main' => '4.6-dev',
|
13 |
'Tribe__Events__Community__Tickets__Main' => '4.7.2-dev',
|
6 |
protected $main_class = 'Tribe__Events__Main';
|
7 |
protected $dependencies = array(
|
8 |
'addon-dependencies' => array(
|
9 |
+
'Tribe__Events__Pro__Main' => '5.0.2-dev',
|
10 |
+
'Tribe__Events__Filterbar__View' => '4.9.2-dev',
|
11 |
'Tribe__Events__Tickets__Eventbrite__Main' => '4.6-dev',
|
12 |
'Tribe__Events__Community__Main' => '4.6-dev',
|
13 |
'Tribe__Events__Community__Tickets__Main' => '4.7.2-dev',
|
src/Tribe/REST/V1/Endpoints/Single_Event.php
CHANGED
@@ -622,7 +622,9 @@ class Tribe__Events__REST__V1__Endpoints__Single_Event
|
|
622 |
// Event presentation data
|
623 |
$postarr['EventShowMap'] = tribe_is_truthy( $request['show_map'] );
|
624 |
$postarr['EventShowMapLink'] = tribe_is_truthy( $request['show_map_link'] );
|
625 |
-
|
|
|
|
|
626 |
$postarr['EventShowInCalendar'] = tribe_is_truthy( $request['sticky'] );
|
627 |
$postarr['feature_event'] = tribe_is_truthy( $request['featured'] );
|
628 |
|
622 |
// Event presentation data
|
623 |
$postarr['EventShowMap'] = tribe_is_truthy( $request['show_map'] );
|
624 |
$postarr['EventShowMapLink'] = tribe_is_truthy( $request['show_map_link'] );
|
625 |
+
if ( tribe_is_truthy( $request['hide_from_listings'] ) ) {
|
626 |
+
$postarr['EventHideFromUpcoming'] = 'yes';
|
627 |
+
}
|
628 |
$postarr['EventShowInCalendar'] = tribe_is_truthy( $request['sticky'] );
|
629 |
$postarr['feature_event'] = tribe_is_truthy( $request['featured'] );
|
630 |
|
src/Tribe/Repositories/Event.php
CHANGED
@@ -1050,6 +1050,10 @@ class Tribe__Events__Repositories__Event extends Tribe__Repository {
|
|
1050 |
'_EventTimezone',
|
1051 |
$current_event_timezone_string
|
1052 |
);
|
|
|
|
|
|
|
|
|
1053 |
$timezone = Tribe__Timezones::build_timezone_object( $input_timezone );
|
1054 |
$timezone_changed = $input_timezone !== $current_event_timezone_string;
|
1055 |
$utc = $this->normal_timezone;
|
@@ -1119,7 +1123,11 @@ class Tribe__Events__Repositories__Event extends Tribe__Repository {
|
|
1119 |
|
1120 |
$dates_make_sense = true;
|
1121 |
|
1122 |
-
|
|
|
|
|
|
|
|
|
1123 |
unset(
|
1124 |
$postarr['meta_input']['_EventStartDate'],
|
1125 |
$postarr['meta_input']['_EventStartDateUTC'],
|
@@ -1182,12 +1190,8 @@ class Tribe__Events__Repositories__Event extends Tribe__Repository {
|
|
1182 |
$timezone->getName()
|
1183 |
);
|
1184 |
|
1185 |
-
|
1186 |
-
|
1187 |
-
$postarr['meta_input']['_EventTimezone'] = Timezones::build_timezone_object(
|
1188 |
-
$postarr['meta_input']['_EventTimezone']
|
1189 |
-
)->getName();
|
1190 |
-
}
|
1191 |
} catch ( Exception $e ) {
|
1192 |
tribe( 'logger' )->log(
|
1193 |
'There was an error updating the dates for event ' . $post_id . ': ' . $e->getMessage(),
|
1050 |
'_EventTimezone',
|
1051 |
$current_event_timezone_string
|
1052 |
);
|
1053 |
+
|
1054 |
+
// Empty strings will use the site timezone.
|
1055 |
+
$input_timezone = $input_timezone ?: $current_event_timezone_string;
|
1056 |
+
|
1057 |
$timezone = Tribe__Timezones::build_timezone_object( $input_timezone );
|
1058 |
$timezone_changed = $input_timezone !== $current_event_timezone_string;
|
1059 |
$utc = $this->normal_timezone;
|
1123 |
|
1124 |
$dates_make_sense = true;
|
1125 |
|
1126 |
+
/*
|
1127 |
+
* To support both "punctual" (i.e. start === end) events and all-day events (that might be punctual at
|
1128 |
+
* this stage) do not make this check inclusive.
|
1129 |
+
*/
|
1130 |
+
if ( Tribe__Date_Utils::build_date_object( $end ) < Tribe__Date_Utils::build_date_object( $start ) ) {
|
1131 |
unset(
|
1132 |
$postarr['meta_input']['_EventStartDate'],
|
1133 |
$postarr['meta_input']['_EventStartDateUTC'],
|
1190 |
$timezone->getName()
|
1191 |
);
|
1192 |
|
1193 |
+
$postarr['meta_input']['_EventTimezone'] = Timezones::build_timezone_object( $input_timezone )->getName();
|
1194 |
+
|
|
|
|
|
|
|
|
|
1195 |
} catch ( Exception $e ) {
|
1196 |
tribe( 'logger' )->log(
|
1197 |
'There was an error updating the dates for event ' . $post_id . ': ' . $e->getMessage(),
|
src/Tribe/Rewrite.php
CHANGED
@@ -4,6 +4,7 @@ defined( 'WPINC' ) or die;
|
|
4 |
|
5 |
use Tribe__Events__Main as TEC;
|
6 |
use Tribe__Main as Common;
|
|
|
7 |
|
8 |
/**
|
9 |
* Rewrite Configuration Class
|
@@ -538,8 +539,9 @@ class Tribe__Events__Rewrite extends Tribe__Rewrite {
|
|
538 |
* Categories can be hierarchical and the path will be something like
|
539 |
* `/events/category/grand-parent/parent/child/list/page/2/`.
|
540 |
* If we can match the category to an existing one then let's make sure to build the hierarchical slug.
|
|
|
541 |
*/
|
542 |
-
$category_slug = $query_vars['tribe_events_cat'];
|
543 |
$category_term = get_term_by( 'slug', $category_slug, TEC::TAXONOMY );
|
544 |
if ( $category_term instanceof WP_Term ) {
|
545 |
$category_slug = get_term_parents_list(
|
4 |
|
5 |
use Tribe__Events__Main as TEC;
|
6 |
use Tribe__Main as Common;
|
7 |
+
use Tribe__Utils__Array as Arr;
|
8 |
|
9 |
/**
|
10 |
* Rewrite Configuration Class
|
539 |
* Categories can be hierarchical and the path will be something like
|
540 |
* `/events/category/grand-parent/parent/child/list/page/2/`.
|
541 |
* If we can match the category to an existing one then let's make sure to build the hierarchical slug.
|
542 |
+
* We cast to comma-separated list to ensure multi-category queries will not resolve to a URL.
|
543 |
*/
|
544 |
+
$category_slug = Arr::to_list( $query_vars['tribe_events_cat'] );
|
545 |
$category_term = get_term_by( 'slug', $category_slug, TEC::TAXONOMY );
|
546 |
if ( $category_term instanceof WP_Term ) {
|
547 |
$category_slug = get_term_parents_list(
|
src/Tribe/Views/V2/Assets.php
CHANGED
@@ -412,8 +412,8 @@ class Assets extends \tad_DI52_ServiceProvider {
|
|
412 |
/**
|
413 |
* Verifies if we dont have skeleton active, which will trigger true for the two other possible options.
|
414 |
* Options:
|
415 |
-
* - `
|
416 |
-
* - `
|
417 |
*
|
418 |
* @since 4.9.11
|
419 |
*
|
412 |
/**
|
413 |
* Verifies if we dont have skeleton active, which will trigger true for the two other possible options.
|
414 |
* Options:
|
415 |
+
* - `full` - Deprecated
|
416 |
+
* - `tribe` - All styles load
|
417 |
*
|
418 |
* @since 4.9.11
|
419 |
*
|
src/Tribe/Views/V2/Hooks.php
CHANGED
@@ -89,6 +89,7 @@ class Hooks extends \tad_DI52_ServiceProvider {
|
|
89 |
add_filter( 'tribe_events_rewrite_i18n_slugs_raw', [ $this, 'filter_rewrite_i18n_slugs_raw' ], 50, 2 );
|
90 |
add_filter( 'tribe_get_event_after', [ $this, 'filter_events_properties' ] );
|
91 |
add_filter( 'tribe_template_file', [ $this, 'filter_template_file' ], 10, 3 );
|
|
|
92 |
|
93 |
if ( tribe_context()->doing_php_initial_state() ) {
|
94 |
add_filter( 'wp_title', [ $this, 'filter_wp_title' ], 10, 2 );
|
@@ -601,4 +602,37 @@ class Hooks extends \tad_DI52_ServiceProvider {
|
|
601 |
public function filter_template_file( $file, $name, $template ) {
|
602 |
return $this->container->make( Template_Bootstrap::class )->filter_template_file( $file, $name, $template );
|
603 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
604 |
}
|
89 |
add_filter( 'tribe_events_rewrite_i18n_slugs_raw', [ $this, 'filter_rewrite_i18n_slugs_raw' ], 50, 2 );
|
90 |
add_filter( 'tribe_get_event_after', [ $this, 'filter_events_properties' ] );
|
91 |
add_filter( 'tribe_template_file', [ $this, 'filter_template_file' ], 10, 3 );
|
92 |
+
add_filter( 'tribe_get_option', [ $this, 'filter_get_stylesheet_option' ], 10, 2 );
|
93 |
|
94 |
if ( tribe_context()->doing_php_initial_state() ) {
|
95 |
add_filter( 'wp_title', [ $this, 'filter_wp_title' ], 10, 2 );
|
602 |
public function filter_template_file( $file, $name, $template ) {
|
603 |
return $this->container->make( Template_Bootstrap::class )->filter_template_file( $file, $name, $template );
|
604 |
}
|
605 |
+
|
606 |
+
/**
|
607 |
+
* Filter the stylesheet option to do some switching for V2
|
608 |
+
*
|
609 |
+
* @since 5.0.2
|
610 |
+
*
|
611 |
+
* @param string $value The option value.
|
612 |
+
* @param string $key The option key.
|
613 |
+
*
|
614 |
+
* @return void
|
615 |
+
*/
|
616 |
+
public function filter_get_stylesheet_option( $value, $key ) {
|
617 |
+
// Remove this filter so we don't loop infinitely.
|
618 |
+
remove_filter( 'tribe_get_option', [ $this, 'filter_get_stylesheet_option' ], 10, 2 );
|
619 |
+
|
620 |
+
$default = 'tribe';
|
621 |
+
|
622 |
+
if ( 'stylesheet_mode' === $key && empty( $value ) ) {
|
623 |
+
$value = tribe_get_option( 'stylesheetOption', $default );
|
624 |
+
if ( 'full' === $value ) {
|
625 |
+
$value = $default;
|
626 |
+
}
|
627 |
+
}
|
628 |
+
|
629 |
+
if ( 'stylesheetOption' === $key ) {
|
630 |
+
$value = tribe_get_option( 'stylesheet_mode', $default );
|
631 |
+
}
|
632 |
+
|
633 |
+
// Add the filter back
|
634 |
+
add_filter( 'tribe_get_option', [ $this, 'filter_get_stylesheet_option' ], 10, 2 );
|
635 |
+
|
636 |
+
return $value;
|
637 |
+
}
|
638 |
}
|
src/Tribe/Views/V2/Template/Page.php
CHANGED
@@ -14,15 +14,26 @@ use Tribe\Events\Views\V2\Kitchen_Sink;
|
|
14 |
use Tribe\Events\Views\V2\Template_Bootstrap;
|
15 |
use Tribe__Events__Main as TEC;
|
16 |
use Tribe__Utils__Array as Arr;
|
|
|
|
|
17 |
|
18 |
class Page {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
/**
|
20 |
* Determines the Path for the PHP file to be used as the main template.
|
21 |
* For Page base template setting it will select from theme or child theme.
|
22 |
*
|
23 |
* @since 4.9.2
|
24 |
*
|
25 |
-
* @return string
|
26 |
*/
|
27 |
public function get_path() {
|
28 |
// Fetches the WP default path for Page.
|
@@ -41,9 +52,11 @@ class Page {
|
|
41 |
*
|
42 |
* @since 4.9.10
|
43 |
*
|
44 |
-
* @param
|
|
|
|
|
45 |
*/
|
46 |
-
public function hijack_on_loop_start(
|
47 |
// After attaching itself it will prevent it from happening again.
|
48 |
remove_action( 'loop_start', [ $this, 'hijack_on_loop_start' ], 1000 );
|
49 |
|
@@ -56,11 +69,11 @@ class Page {
|
|
56 |
*
|
57 |
* @since 4.9.2
|
58 |
*
|
59 |
-
* @param
|
60 |
*
|
61 |
-
* @return boolean
|
62 |
*/
|
63 |
-
public function maybe_hijack_page_template(
|
64 |
if ( ! $this->should_hijack_page_template( $query ) ) {
|
65 |
return false;
|
66 |
}
|
@@ -82,6 +95,8 @@ class Page {
|
|
82 |
|
83 |
// Makes sure Comments are not active.
|
84 |
add_filter( 'comments_template', [ $this, 'filter_remove_comments' ], 25 );
|
|
|
|
|
85 |
}
|
86 |
|
87 |
/**
|
@@ -90,13 +105,50 @@ class Page {
|
|
90 |
* @todo Take in consideration tribe_get_option( 'showComments', false ) values later on.
|
91 |
*
|
92 |
* @since 4.9.2
|
|
|
|
|
93 |
*/
|
94 |
-
public function filter_remove_comments(
|
95 |
remove_filter( 'comments_template', [ $this, 'filter_remove_comments' ], 25 );
|
96 |
|
97 |
return false;
|
98 |
}
|
99 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
/**
|
101 |
* Prevents the Edit link to ever be displayed on any well designed theme.
|
102 |
* Ideally this method is here to return an empty string for the Mock Page.
|
@@ -106,11 +158,15 @@ class Page {
|
|
106 |
* @param string $url Old URL for editing the post
|
107 |
* @param string|int $post_id Post ID in question
|
108 |
*
|
109 |
-
* @return string
|
110 |
*/
|
111 |
public function filter_prevent_edit_link( $url, $post_id ) {
|
112 |
$query = tribe_get_global_query_object();
|
113 |
|
|
|
|
|
|
|
|
|
114 |
// Bail in case of any other page template.
|
115 |
if ( ! $this->should_hijack_page_template( $query ) ) {
|
116 |
return $url;
|
@@ -132,7 +188,7 @@ class Page {
|
|
132 |
*
|
133 |
* @since 4.9.2
|
134 |
*
|
135 |
-
* @return void
|
136 |
*/
|
137 |
public function hijack_the_post() {
|
138 |
remove_filter( 'the_post', [ $this, 'hijack_the_post' ], 25 );
|
@@ -141,86 +197,103 @@ class Page {
|
|
141 |
}
|
142 |
|
143 |
/**
|
144 |
-
* Depending on params from Default templating for events we will Hijack
|
145 |
-
*
|
146 |
-
*
|
147 |
-
* as well as `the_title`.
|
148 |
*
|
149 |
* @since 4.9.2
|
150 |
*
|
151 |
-
* @return
|
152 |
*/
|
153 |
public function maybe_hijack_main_query() {
|
154 |
$wp_query = tribe_get_global_query_object();
|
155 |
|
|
|
|
|
|
|
|
|
156 |
if ( ! $this->should_hijack_page_template( $wp_query ) ) {
|
157 |
return false;
|
158 |
}
|
159 |
|
160 |
-
// Store old posts
|
161 |
-
$
|
162 |
|
163 |
$mocked_post = $this->get_mocked_page();
|
164 |
|
165 |
-
// Replace the Mocked post in a couple of places
|
166 |
$GLOBALS['post'] = $mocked_post;
|
167 |
$wp_query->posts = [ $mocked_post ];
|
168 |
$wp_query->post_count = count( $wp_query->posts );
|
169 |
|
170 |
-
// re-do counting
|
171 |
$wp_query->rewind_posts();
|
|
|
172 |
|
173 |
add_action( 'loop_start', [ $this, 'hijack_on_loop_start' ], 1000 );
|
|
|
|
|
174 |
}
|
175 |
|
176 |
/**
|
177 |
* Restored the Hijacked posts from the main query so that we can run
|
178 |
-
* the template method properly with a fully populated WP_Query object
|
|
|
|
|
179 |
*
|
180 |
* @since 4.9.2
|
181 |
*
|
182 |
-
* @return void
|
183 |
*/
|
184 |
-
|
|
|
|
|
|
|
|
|
|
|
185 |
$wp_query = tribe_get_global_query_object();
|
186 |
|
187 |
-
|
188 |
-
if ( ! isset( $wp_query->tribe_hijacked_posts ) ) {
|
189 |
return;
|
190 |
}
|
191 |
|
192 |
-
$wp_query->posts = $
|
193 |
$wp_query->post_count = count( $wp_query->posts );
|
194 |
|
195 |
-
// If we have other posts besides the spoof, rewind and reset
|
196 |
if ( $wp_query->post_count > 0 ) {
|
|
|
197 |
$wp_query->rewind_posts();
|
198 |
wp_reset_postdata();
|
199 |
}
|
200 |
-
// If there are no other posts, unset the $post property
|
201 |
elseif ( 0 === $wp_query->post_count ) {
|
202 |
$wp_query->current_post = -1;
|
203 |
-
|
204 |
}
|
205 |
|
206 |
-
|
207 |
-
unset( $wp_query->tribe_hijacked_posts );
|
208 |
}
|
209 |
|
210 |
/**
|
211 |
-
* Prevents Looping multiple pages when including Page templates
|
212 |
-
*
|
213 |
-
* no posts to loop
|
214 |
*
|
215 |
* @since 4.9.2
|
216 |
*
|
217 |
-
* @return void
|
218 |
*/
|
219 |
-
|
220 |
$wp_query = tribe_get_global_query_object();
|
221 |
|
|
|
|
|
|
|
|
|
222 |
$wp_query->current_post = -1;
|
223 |
$wp_query->post_count = 0;
|
|
|
|
|
224 |
}
|
225 |
|
226 |
/**
|
@@ -232,7 +305,7 @@ class Page {
|
|
232 |
*
|
233 |
* @param string $content Default content of the page we hijacked
|
234 |
*
|
235 |
-
* @return string
|
236 |
*/
|
237 |
public function filter_hijack_page_content( $content = '' ) {
|
238 |
remove_filter( 'the_content', [ $this, 'filter_hijack_page_content' ], 25 );
|
@@ -252,45 +325,49 @@ class Page {
|
|
252 |
*
|
253 |
* @since 4.9.2
|
254 |
*
|
255 |
-
* @param
|
256 |
*
|
257 |
-
* @return boolean
|
258 |
*/
|
259 |
-
public function should_hijack_page_template(
|
260 |
$should_hijack = true;
|
261 |
|
262 |
-
|
263 |
-
if ( is_feed() ) {
|
264 |
-
$should_hijack = false;
|
265 |
-
}
|
266 |
-
|
267 |
-
// don't hijack a password protected page
|
268 |
-
if ( is_single() && post_password_required() ) {
|
269 |
-
$should_hijack = false;
|
270 |
-
}
|
271 |
-
|
272 |
-
// Dont hijack non-page event based
|
273 |
-
if ( 'page' !== tribe( Template_Bootstrap::class )->get_template_setting() ) {
|
274 |
-
$should_hijack = false;
|
275 |
-
}
|
276 |
-
|
277 |
-
// We dont want the main Query
|
278 |
-
if ( ! $query->is_main_query() ) {
|
279 |
-
$should_hijack = false;
|
280 |
-
}
|
281 |
-
|
282 |
-
// We wont hijack in case we are not dealing with a Post Type query
|
283 |
-
if ( empty( $query->tribe_is_event_query ) ) {
|
284 |
$should_hijack = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
285 |
}
|
286 |
|
287 |
/**
|
288 |
-
* Allows third-party to influence when we will hijack the page template
|
289 |
*
|
290 |
* @since 4.9.2
|
291 |
*
|
292 |
-
* @param boolean $should_hijack Will we hijack and include our page template
|
293 |
-
* @param WP_Query $query WordPress query
|
294 |
*/
|
295 |
return apply_filters( 'tribe_events_views_v2_should_hijack_page_template', $should_hijack, $query );
|
296 |
}
|
@@ -301,7 +378,7 @@ class Page {
|
|
301 |
*
|
302 |
* @since 4.9.2
|
303 |
*
|
304 |
-
* @return object A Mocked stdClass that
|
305 |
*/
|
306 |
protected function get_mocked_page() {
|
307 |
$page = [
|
@@ -332,4 +409,4 @@ class Page {
|
|
332 |
|
333 |
return (object) $page;
|
334 |
}
|
335 |
-
}
|
14 |
use Tribe\Events\Views\V2\Template_Bootstrap;
|
15 |
use Tribe__Events__Main as TEC;
|
16 |
use Tribe__Utils__Array as Arr;
|
17 |
+
use WP_Post;
|
18 |
+
use WP_Query;
|
19 |
|
20 |
class Page {
|
21 |
+
/**
|
22 |
+
* Makes sure we save the current post before hijacking for a page.
|
23 |
+
*
|
24 |
+
* @since 5.0.2
|
25 |
+
*
|
26 |
+
* @var array[ WP_Post ] $hijacked_post All WP_Posts on this query.
|
27 |
+
*/
|
28 |
+
protected $hijacked_posts;
|
29 |
+
|
30 |
/**
|
31 |
* Determines the Path for the PHP file to be used as the main template.
|
32 |
* For Page base template setting it will select from theme or child theme.
|
33 |
*
|
34 |
* @since 4.9.2
|
35 |
*
|
36 |
+
* @return string Path for the Page template to be loaded.
|
37 |
*/
|
38 |
public function get_path() {
|
39 |
// Fetches the WP default path for Page.
|
52 |
*
|
53 |
* @since 4.9.10
|
54 |
*
|
55 |
+
* @param WP_Query $query Main WordPress query where we are hijacking the_content.
|
56 |
+
*
|
57 |
+
* @return void Action hook with no return.
|
58 |
*/
|
59 |
+
public function hijack_on_loop_start( WP_Query $query ) {
|
60 |
// After attaching itself it will prevent it from happening again.
|
61 |
remove_action( 'loop_start', [ $this, 'hijack_on_loop_start' ], 1000 );
|
62 |
|
69 |
*
|
70 |
* @since 4.9.2
|
71 |
*
|
72 |
+
* @param WP_Query $query WordPress query executed to get here.
|
73 |
*
|
74 |
+
* @return boolean Whether we did hijack the post or not.
|
75 |
*/
|
76 |
+
public function maybe_hijack_page_template( WP_Query $query ) {
|
77 |
if ( ! $this->should_hijack_page_template( $query ) ) {
|
78 |
return false;
|
79 |
}
|
95 |
|
96 |
// Makes sure Comments are not active.
|
97 |
add_filter( 'comments_template', [ $this, 'filter_remove_comments' ], 25 );
|
98 |
+
|
99 |
+
return true;
|
100 |
}
|
101 |
|
102 |
/**
|
105 |
* @todo Take in consideration tribe_get_option( 'showComments', false ) values later on.
|
106 |
*
|
107 |
* @since 4.9.2
|
108 |
+
*
|
109 |
+
* @return bool False to remove comments on the Event Page template.
|
110 |
*/
|
111 |
+
public function filter_remove_comments() {
|
112 |
remove_filter( 'comments_template', [ $this, 'filter_remove_comments' ], 25 );
|
113 |
|
114 |
return false;
|
115 |
}
|
116 |
|
117 |
+
/**
|
118 |
+
* Determines if we have hijacked posts for this request.
|
119 |
+
*
|
120 |
+
* @since 5.0.2
|
121 |
+
*
|
122 |
+
* @return bool Did we hijack posts on this request.
|
123 |
+
*/
|
124 |
+
public function has_hijacked_posts() {
|
125 |
+
return null !== $this->hijacked_posts;
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Gets the hijacked posts that we stored.
|
130 |
+
*
|
131 |
+
* @since 5.0.2
|
132 |
+
*
|
133 |
+
* @return array[ WP_Post ] Posts that we hijacked earlier.
|
134 |
+
*/
|
135 |
+
public function get_hijacked_posts() {
|
136 |
+
return $this->hijacked_posts;
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* Sets the hijacked posts for later restoring.
|
141 |
+
*
|
142 |
+
* @since 5.0.2
|
143 |
+
*
|
144 |
+
* @param array[WP_Post] $posts Which posts to be set as the one hijacked.
|
145 |
+
*
|
146 |
+
* @return void No return when setting hijacked posts.
|
147 |
+
*/
|
148 |
+
public function set_hijacked_posts( array $posts ) {
|
149 |
+
$this->hijacked_posts = $posts;
|
150 |
+
}
|
151 |
+
|
152 |
/**
|
153 |
* Prevents the Edit link to ever be displayed on any well designed theme.
|
154 |
* Ideally this method is here to return an empty string for the Mock Page.
|
158 |
* @param string $url Old URL for editing the post
|
159 |
* @param string|int $post_id Post ID in question
|
160 |
*
|
161 |
+
* @return string Modify the link to return nothing for when we hijacked the page.
|
162 |
*/
|
163 |
public function filter_prevent_edit_link( $url, $post_id ) {
|
164 |
$query = tribe_get_global_query_object();
|
165 |
|
166 |
+
if ( ! $query instanceof WP_Query ) {
|
167 |
+
return $url;
|
168 |
+
}
|
169 |
+
|
170 |
// Bail in case of any other page template.
|
171 |
if ( ! $this->should_hijack_page_template( $query ) ) {
|
172 |
return $url;
|
188 |
*
|
189 |
* @since 4.9.2
|
190 |
*
|
191 |
+
* @return void Action hook with no return.
|
192 |
*/
|
193 |
public function hijack_the_post() {
|
194 |
remove_filter( 'the_post', [ $this, 'hijack_the_post' ], 25 );
|
197 |
}
|
198 |
|
199 |
/**
|
200 |
+
* Depending on params from Default templating for events we will Hijack the main query for events to mimic a
|
201 |
+
* ghost page element so the theme can properly run `the_content` so we can hijack the content of that page as
|
202 |
+
* well as `the_title`.
|
|
|
203 |
*
|
204 |
* @since 4.9.2
|
205 |
*
|
206 |
+
* @return boolean Whether we hijacked the main query or not.
|
207 |
*/
|
208 |
public function maybe_hijack_main_query() {
|
209 |
$wp_query = tribe_get_global_query_object();
|
210 |
|
211 |
+
if ( ! $wp_query instanceof WP_Query ) {
|
212 |
+
return false;
|
213 |
+
}
|
214 |
+
|
215 |
if ( ! $this->should_hijack_page_template( $wp_query ) ) {
|
216 |
return false;
|
217 |
}
|
218 |
|
219 |
+
// Store old posts.
|
220 |
+
$this->set_hijacked_posts( $wp_query->posts );
|
221 |
|
222 |
$mocked_post = $this->get_mocked_page();
|
223 |
|
224 |
+
// Replace the Mocked post in a couple of places.
|
225 |
$GLOBALS['post'] = $mocked_post;
|
226 |
$wp_query->posts = [ $mocked_post ];
|
227 |
$wp_query->post_count = count( $wp_query->posts );
|
228 |
|
229 |
+
// re-do counting.
|
230 |
$wp_query->rewind_posts();
|
231 |
+
$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'] = $wp_query;
|
232 |
|
233 |
add_action( 'loop_start', [ $this, 'hijack_on_loop_start' ], 1000 );
|
234 |
+
|
235 |
+
return true;
|
236 |
}
|
237 |
|
238 |
/**
|
239 |
* Restored the Hijacked posts from the main query so that we can run
|
240 |
+
* the template method properly with a fully populated WP_Query object.
|
241 |
+
*
|
242 |
+
* @global WP_Query $wp_query Global WP query we are dealing with.
|
243 |
*
|
244 |
* @since 4.9.2
|
245 |
*
|
246 |
+
* @return void Action hook with no return.
|
247 |
*/
|
248 |
+
public function restore_main_query() {
|
249 |
+
// If the query doesnt have hijacked posts.
|
250 |
+
if ( ! $this->has_hijacked_posts() ) {
|
251 |
+
return;
|
252 |
+
}
|
253 |
+
|
254 |
$wp_query = tribe_get_global_query_object();
|
255 |
|
256 |
+
if ( ! $wp_query instanceof WP_Query ) {
|
|
|
257 |
return;
|
258 |
}
|
259 |
|
260 |
+
$wp_query->posts = $this->get_hijacked_posts();
|
261 |
$wp_query->post_count = count( $wp_query->posts );
|
262 |
|
263 |
+
// If we have other posts besides the spoof, rewind and reset.
|
264 |
if ( $wp_query->post_count > 0 ) {
|
265 |
+
$wp_query->post = reset( $wp_query->posts );
|
266 |
$wp_query->rewind_posts();
|
267 |
wp_reset_postdata();
|
268 |
}
|
269 |
+
// If there are no other posts, unset the $post property.
|
270 |
elseif ( 0 === $wp_query->post_count ) {
|
271 |
$wp_query->current_post = -1;
|
272 |
+
$wp_query->post = null;
|
273 |
}
|
274 |
|
275 |
+
$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'] = $wp_query;
|
|
|
276 |
}
|
277 |
|
278 |
/**
|
279 |
+
* Prevents Looping multiple pages when including Page templates by modifying the global WP_Query object by
|
280 |
+
* pretending there are no posts to loop
|
|
|
281 |
*
|
282 |
* @since 4.9.2
|
283 |
*
|
284 |
+
* @return void Action hook with no return.
|
285 |
*/
|
286 |
+
protected function prevent_page_looping() {
|
287 |
$wp_query = tribe_get_global_query_object();
|
288 |
|
289 |
+
if ( ! $wp_query instanceof WP_Query ) {
|
290 |
+
return;
|
291 |
+
}
|
292 |
+
|
293 |
$wp_query->current_post = -1;
|
294 |
$wp_query->post_count = 0;
|
295 |
+
|
296 |
+
$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'] = $wp_query;
|
297 |
}
|
298 |
|
299 |
/**
|
305 |
*
|
306 |
* @param string $content Default content of the page we hijacked
|
307 |
*
|
308 |
+
* @return string HTML for the view when using Page Template.
|
309 |
*/
|
310 |
public function filter_hijack_page_content( $content = '' ) {
|
311 |
remove_filter( 'the_content', [ $this, 'filter_hijack_page_content' ], 25 );
|
325 |
*
|
326 |
* @since 4.9.2
|
327 |
*
|
328 |
+
* @param WP_Query $query WordPress query executed to get here.
|
329 |
*
|
330 |
+
* @return boolean Should we hijack to use page template.
|
331 |
*/
|
332 |
+
public function should_hijack_page_template( WP_Query $query ) {
|
333 |
$should_hijack = true;
|
334 |
|
335 |
+
if ( ! $query instanceof WP_Query ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
336 |
$should_hijack = false;
|
337 |
+
} else {
|
338 |
+
// don't hijack a feed.
|
339 |
+
if ( is_feed() ) {
|
340 |
+
$should_hijack = false;
|
341 |
+
}
|
342 |
+
|
343 |
+
// don't hijack a password protected page.
|
344 |
+
if ( is_single() && post_password_required() ) {
|
345 |
+
$should_hijack = false;
|
346 |
+
}
|
347 |
+
|
348 |
+
// Dont hijack non-page event based.
|
349 |
+
if ( 'page' !== tribe( Template_Bootstrap::class )->get_template_setting() ) {
|
350 |
+
$should_hijack = false;
|
351 |
+
}
|
352 |
+
|
353 |
+
// We dont want the main Query.
|
354 |
+
if ( ! $query->is_main_query() ) {
|
355 |
+
$should_hijack = false;
|
356 |
+
}
|
357 |
+
|
358 |
+
// We wont hijack in case we are not dealing with a Post Type query.
|
359 |
+
if ( empty( $query->tribe_is_event_query ) ) {
|
360 |
+
$should_hijack = false;
|
361 |
+
}
|
362 |
}
|
363 |
|
364 |
/**
|
365 |
+
* Allows third-party to influence when we will hijack the page template.
|
366 |
*
|
367 |
* @since 4.9.2
|
368 |
*
|
369 |
+
* @param boolean $should_hijack Will we hijack and include our page template.
|
370 |
+
* @param WP_Query $query WordPress query executed to get here.
|
371 |
*/
|
372 |
return apply_filters( 'tribe_events_views_v2_should_hijack_page_template', $should_hijack, $query );
|
373 |
}
|
378 |
*
|
379 |
* @since 4.9.2
|
380 |
*
|
381 |
+
* @return object A Mocked stdClass that mimics a WP_Post.
|
382 |
*/
|
383 |
protected function get_mocked_page() {
|
384 |
$page = [
|
409 |
|
410 |
return (object) $page;
|
411 |
}
|
412 |
+
}
|
src/Tribe/Views/V2/View.php
CHANGED
@@ -10,8 +10,11 @@ namespace Tribe\Events\Views\V2;
|
|
10 |
|
11 |
use Tribe\Events\Views\V2\Template\Settings\Advanced_Display;
|
12 |
use Tribe\Events\Views\V2\Template\Title;
|
|
|
13 |
use Tribe\Events\Views\V2\Views\Traits\Breakpoint_Behavior;
|
14 |
use Tribe\Events\Views\V2\Views\Traits\HTML_Cache;
|
|
|
|
|
15 |
use Tribe__Container as Container;
|
16 |
use Tribe__Context as Context;
|
17 |
use Tribe__Date_Utils as Dates;
|
@@ -21,7 +24,6 @@ use Tribe__Events__Rewrite as TEC_Rewrite;
|
|
21 |
use Tribe__Events__Venue as Venue;
|
22 |
use Tribe__Repository__Interface as Repository;
|
23 |
use Tribe__Utils__Array as Arr;
|
24 |
-
use Tribe\Events\Views\V2\Utils;
|
25 |
|
26 |
/**
|
27 |
* Class View
|
@@ -33,6 +35,7 @@ class View implements View_Interface {
|
|
33 |
|
34 |
use Breakpoint_Behavior;
|
35 |
use HTML_Cache;
|
|
|
36 |
|
37 |
/**
|
38 |
* An instance of the DI container.
|
@@ -219,7 +222,7 @@ class View implements View_Interface {
|
|
219 |
$this->rewrite = TEC_Rewrite::instance();
|
220 |
|
221 |
// For plain permalinks, the pagination variable is "page".
|
222 |
-
if (
|
223 |
$this->page_key = 'page';
|
224 |
}
|
225 |
}
|
@@ -260,6 +263,18 @@ class View implements View_Interface {
|
|
260 |
$params = array_merge( $params, $params['view_data'] );
|
261 |
}
|
262 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
263 |
/*
|
264 |
* WordPress would replicate the `post_name`, when resolving the request, both as `name` and as the post type.
|
265 |
* We emulate this behavior here hydrating the request context to provide a `name` alongside the post type.
|
@@ -307,6 +322,7 @@ class View implements View_Interface {
|
|
307 |
$params = apply_filters( "tribe_events_views_v2_{$slug}_rest_params", $params, $request );
|
308 |
}
|
309 |
|
|
|
310 |
// Determine context based on the request parameters.
|
311 |
$do_not_override = [ 'event_display_mode' ];
|
312 |
$not_overridable_params = array_intersect_key( $params, array_combine( $do_not_override, $do_not_override ) );
|
@@ -314,7 +330,7 @@ class View implements View_Interface {
|
|
314 |
->alter(
|
315 |
array_merge(
|
316 |
$params,
|
317 |
-
tribe_context()->translate_sub_locations( $params,
|
318 |
$not_overridable_params
|
319 |
)
|
320 |
);
|
@@ -335,13 +351,13 @@ class View implements View_Interface {
|
|
335 |
*
|
336 |
* @since 4.9.2
|
337 |
*
|
338 |
-
* @param string
|
339 |
-
* @param
|
340 |
-
*
|
341 |
*
|
342 |
-
* @return
|
343 |
*/
|
344 |
-
public static function make( $view = null,
|
345 |
$manager = tribe( Manager::class );
|
346 |
|
347 |
$default_view = $manager->get_default_view();
|
@@ -379,7 +395,7 @@ class View implements View_Interface {
|
|
379 |
*/
|
380 |
do_action( 'tribe_events_views_v2_before_make_view', $view_class, $view_slug );
|
381 |
|
382 |
-
/** @var
|
383 |
$instance = self::$container->make( $view_class );
|
384 |
|
385 |
$template = new Template( $instance );
|
@@ -417,10 +433,9 @@ class View implements View_Interface {
|
|
417 |
*
|
418 |
* @since 4.9.3
|
419 |
*
|
420 |
-
* @param
|
421 |
-
*
|
422 |
-
* @param
|
423 |
-
* @param View $instance The current View object.
|
424 |
*/
|
425 |
$view_context = apply_filters( 'tribe_events_views_v2_view_context', $view_context, $view_slug, $instance );
|
426 |
|
@@ -429,9 +444,8 @@ class View implements View_Interface {
|
|
429 |
*
|
430 |
* @since 4.9.3
|
431 |
*
|
432 |
-
* @param
|
433 |
-
*
|
434 |
-
* @param View $instance The current View object.
|
435 |
*/
|
436 |
$view_context = apply_filters( "tribe_events_views_v2_{$view_slug}_view_context", $view_context, $instance );
|
437 |
|
@@ -1044,6 +1058,16 @@ class View implements View_Interface {
|
|
1044 |
* @return array An associative array of variables that will be set, and exported, in the template.
|
1045 |
*/
|
1046 |
protected function filter_template_vars( array $template_vars ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1047 |
/**
|
1048 |
* Filters the variables that will be set on the View template.
|
1049 |
*
|
@@ -1077,11 +1101,11 @@ class View implements View_Interface {
|
|
1077 |
*
|
1078 |
* @since 4.9.3
|
1079 |
*
|
1080 |
-
* @param
|
1081 |
*
|
1082 |
* @return array The arguments, ready to be set on the View repository instance.
|
1083 |
*/
|
1084 |
-
protected function setup_repository_args(
|
1085 |
$context = null !== $context ? $context : $this->context;
|
1086 |
|
1087 |
$context_arr = $context->to_array();
|
@@ -1115,6 +1139,10 @@ class View implements View_Interface {
|
|
1115 |
$args[ TEC::TAXONOMY ] = $context_arr[ TEC::TAXONOMY ];
|
1116 |
}
|
1117 |
|
|
|
|
|
|
|
|
|
1118 |
// Setup featured only when set to true.
|
1119 |
if ( $is_featured = tribe_is_truthy( $this->context->get( 'featured', false ) ) ) {
|
1120 |
$args['featured'] = $is_featured;
|
@@ -1389,7 +1417,7 @@ class View implements View_Interface {
|
|
1389 |
'after_events' => tribe( Advanced_Display::class )->get_after_events_html( $this ),
|
1390 |
'display_events_bar' => $this->filter_display_events_bar( $this->display_events_bar ),
|
1391 |
'disable_event_search' => tribe_is_truthy( tribe_get_option( 'tribeDisableTribeBar', false ) ),
|
1392 |
-
'live_refresh' => tribe_is_truthy( tribe_get_option( 'liveFiltersUpdate',
|
1393 |
'ical' => $this->get_ical_data(),
|
1394 |
'container_classes' => $this->get_html_classes(),
|
1395 |
'container_data' => $this->get_container_data(),
|
@@ -1413,7 +1441,7 @@ class View implements View_Interface {
|
|
1413 |
*
|
1414 |
* @return array The filtered repository arguments.
|
1415 |
*/
|
1416 |
-
protected function filter_repository_args( array $repository_args,
|
1417 |
$context = null !== $context ? $context : $this->context;
|
1418 |
|
1419 |
/**
|
@@ -1422,7 +1450,7 @@ class View implements View_Interface {
|
|
1422 |
* @since 4.9.5
|
1423 |
*
|
1424 |
* @param array $repository_args An array of repository arguments that will be set for all Views.
|
1425 |
-
* @param
|
1426 |
* @param View_Interface $this The View that will use the repository arguments.
|
1427 |
*/
|
1428 |
$repository_args = apply_filters( 'tribe_events_views_v2_view_repository_args', $repository_args, $context, $this );
|
@@ -1433,7 +1461,7 @@ class View implements View_Interface {
|
|
1433 |
* @since 4.9.5
|
1434 |
*
|
1435 |
* @param array $repository_args An array of repository arguments that will be set for a specific View.
|
1436 |
-
* @param
|
1437 |
* @param View_Interface $this The View that will use the repository arguments.
|
1438 |
*/
|
1439 |
$repository_args = apply_filters(
|
@@ -1956,7 +1984,7 @@ class View implements View_Interface {
|
|
1956 |
* @return bool
|
1957 |
*/
|
1958 |
protected function get_show_datepicker_submit() {
|
1959 |
-
$live_refresh = tribe_is_truthy( tribe_get_option( 'liveFiltersUpdate',
|
1960 |
$disable_events_bar = tribe_is_truthy( tribe_get_option( 'tribeDisableTribeBar', false ) );
|
1961 |
|
1962 |
$show_datepicker_submit = empty( $live_refresh ) && ! empty( $disable_events_bar );
|
10 |
|
11 |
use Tribe\Events\Views\V2\Template\Settings\Advanced_Display;
|
12 |
use Tribe\Events\Views\V2\Template\Title;
|
13 |
+
use Tribe\Events\Views\V2\Utils;
|
14 |
use Tribe\Events\Views\V2\Views\Traits\Breakpoint_Behavior;
|
15 |
use Tribe\Events\Views\V2\Views\Traits\HTML_Cache;
|
16 |
+
use Tribe\Events\Views\V2\Views\Traits\Json_Ld_Data;
|
17 |
+
use Tribe\Events\Views\V2\Views\Traits\List_Behavior;
|
18 |
use Tribe__Container as Container;
|
19 |
use Tribe__Context as Context;
|
20 |
use Tribe__Date_Utils as Dates;
|
24 |
use Tribe__Events__Venue as Venue;
|
25 |
use Tribe__Repository__Interface as Repository;
|
26 |
use Tribe__Utils__Array as Arr;
|
|
|
27 |
|
28 |
/**
|
29 |
* Class View
|
35 |
|
36 |
use Breakpoint_Behavior;
|
37 |
use HTML_Cache;
|
38 |
+
use Json_Ld_Data;
|
39 |
|
40 |
/**
|
41 |
* An instance of the DI container.
|
222 |
$this->rewrite = TEC_Rewrite::instance();
|
223 |
|
224 |
// For plain permalinks, the pagination variable is "page".
|
225 |
+
if ( $this->rewrite->is_plain_permalink() ) {
|
226 |
$this->page_key = 'page';
|
227 |
}
|
228 |
}
|
263 |
$params = array_merge( $params, $params['view_data'] );
|
264 |
}
|
265 |
|
266 |
+
// Ensure plain permalink is covered.
|
267 |
+
if (
|
268 |
+
TEC_Rewrite::instance()->is_plain_permalink()
|
269 |
+
&& ! empty( $params['eventDate'] )
|
270 |
+
&& (
|
271 |
+
! empty( $params['tribe-event-date'] )
|
272 |
+
|| ! empty( $params['tribe-bar-date'] )
|
273 |
+
)
|
274 |
+
) {
|
275 |
+
unset( $params['eventDate'] );
|
276 |
+
}
|
277 |
+
|
278 |
/*
|
279 |
* WordPress would replicate the `post_name`, when resolving the request, both as `name` and as the post type.
|
280 |
* We emulate this behavior here hydrating the request context to provide a `name` alongside the post type.
|
322 |
$params = apply_filters( "tribe_events_views_v2_{$slug}_rest_params", $params, $request );
|
323 |
}
|
324 |
|
325 |
+
|
326 |
// Determine context based on the request parameters.
|
327 |
$do_not_override = [ 'event_display_mode' ];
|
328 |
$not_overridable_params = array_intersect_key( $params, array_combine( $do_not_override, $do_not_override ) );
|
330 |
->alter(
|
331 |
array_merge(
|
332 |
$params,
|
333 |
+
tribe_context()->translate_sub_locations( $params, Context::REQUEST_VAR ),
|
334 |
$not_overridable_params
|
335 |
)
|
336 |
);
|
351 |
*
|
352 |
* @since 4.9.2
|
353 |
*
|
354 |
+
* @param string $view The view slug, as registered in the `tribe_events_views` filter, or class.
|
355 |
+
* @param Context|null $context The context this view should render from; if not set then the global
|
356 |
+
* one will be used.
|
357 |
*
|
358 |
+
* @return View_Interface An instance of the built view.
|
359 |
*/
|
360 |
+
public static function make( $view = null, Context $context = null ) {
|
361 |
$manager = tribe( Manager::class );
|
362 |
|
363 |
$default_view = $manager->get_default_view();
|
395 |
*/
|
396 |
do_action( 'tribe_events_views_v2_before_make_view', $view_class, $view_slug );
|
397 |
|
398 |
+
/** @var View_Interface $instance */
|
399 |
$instance = self::$container->make( $view_class );
|
400 |
|
401 |
$template = new Template( $instance );
|
433 |
*
|
434 |
* @since 4.9.3
|
435 |
*
|
436 |
+
* @param Context $view_context The context abstraction object that will be passed to the view.
|
437 |
+
* @param string $view The current view slug.
|
438 |
+
* @param View $instance The current View object.
|
|
|
439 |
*/
|
440 |
$view_context = apply_filters( 'tribe_events_views_v2_view_context', $view_context, $view_slug, $instance );
|
441 |
|
444 |
*
|
445 |
* @since 4.9.3
|
446 |
*
|
447 |
+
* @param Context $view_context The context abstraction object that will be passed to the view.
|
448 |
+
* @param View $instance The current View object.
|
|
|
449 |
*/
|
450 |
$view_context = apply_filters( "tribe_events_views_v2_{$view_slug}_view_context", $view_context, $instance );
|
451 |
|
1058 |
* @return array An associative array of variables that will be set, and exported, in the template.
|
1059 |
*/
|
1060 |
protected function filter_template_vars( array $template_vars ) {
|
1061 |
+
$events = $template_vars['events'] ?: [];
|
1062 |
+
|
1063 |
+
/*
|
1064 |
+
* Add the JSON-LD data here as all Views will pass from this code, but not all Views will call the
|
1065 |
+
* `View::setup_template_vars` method.
|
1066 |
+
*
|
1067 |
+
* Filters to control the data are available in the `Tribe__JSON_LD__Abstract` object and its extending classes.
|
1068 |
+
*/
|
1069 |
+
$template_vars['json_ld_data'] = $this->build_json_ld_data( $events );
|
1070 |
+
|
1071 |
/**
|
1072 |
* Filters the variables that will be set on the View template.
|
1073 |
*
|
1101 |
*
|
1102 |
* @since 4.9.3
|
1103 |
*
|
1104 |
+
* @param Context|null $context A context to use to setup the args, or `null` to use the View Context.
|
1105 |
*
|
1106 |
* @return array The arguments, ready to be set on the View repository instance.
|
1107 |
*/
|
1108 |
+
protected function setup_repository_args( Context $context = null ) {
|
1109 |
$context = null !== $context ? $context : $this->context;
|
1110 |
|
1111 |
$context_arr = $context->to_array();
|
1139 |
$args[ TEC::TAXONOMY ] = $context_arr[ TEC::TAXONOMY ];
|
1140 |
}
|
1141 |
|
1142 |
+
if ( ! empty( $context_arr['event_category'] ) ) {
|
1143 |
+
$args['event_category'] = $context_arr['event_category'];
|
1144 |
+
}
|
1145 |
+
|
1146 |
// Setup featured only when set to true.
|
1147 |
if ( $is_featured = tribe_is_truthy( $this->context->get( 'featured', false ) ) ) {
|
1148 |
$args['featured'] = $is_featured;
|
1417 |
'after_events' => tribe( Advanced_Display::class )->get_after_events_html( $this ),
|
1418 |
'display_events_bar' => $this->filter_display_events_bar( $this->display_events_bar ),
|
1419 |
'disable_event_search' => tribe_is_truthy( tribe_get_option( 'tribeDisableTribeBar', false ) ),
|
1420 |
+
'live_refresh' => tribe_is_truthy( 'automatic' === tribe_get_option( 'liveFiltersUpdate', 'automatic' ) ),
|
1421 |
'ical' => $this->get_ical_data(),
|
1422 |
'container_classes' => $this->get_html_classes(),
|
1423 |
'container_data' => $this->get_container_data(),
|
1441 |
*
|
1442 |
* @return array The filtered repository arguments.
|
1443 |
*/
|
1444 |
+
protected function filter_repository_args( array $repository_args, Context $context = null ) {
|
1445 |
$context = null !== $context ? $context : $this->context;
|
1446 |
|
1447 |
/**
|
1450 |
* @since 4.9.5
|
1451 |
*
|
1452 |
* @param array $repository_args An array of repository arguments that will be set for all Views.
|
1453 |
+
* @param Context $context The current render context object.
|
1454 |
* @param View_Interface $this The View that will use the repository arguments.
|
1455 |
*/
|
1456 |
$repository_args = apply_filters( 'tribe_events_views_v2_view_repository_args', $repository_args, $context, $this );
|
1461 |
* @since 4.9.5
|
1462 |
*
|
1463 |
* @param array $repository_args An array of repository arguments that will be set for a specific View.
|
1464 |
+
* @param Context $context The current render context object.
|
1465 |
* @param View_Interface $this The View that will use the repository arguments.
|
1466 |
*/
|
1467 |
$repository_args = apply_filters(
|
1984 |
* @return bool
|
1985 |
*/
|
1986 |
protected function get_show_datepicker_submit() {
|
1987 |
+
$live_refresh = tribe_is_truthy( 'automatic' === tribe_get_option( 'liveFiltersUpdate', 'automatic' ) );
|
1988 |
$disable_events_bar = tribe_is_truthy( tribe_get_option( 'tribeDisableTribeBar', false ) );
|
1989 |
|
1990 |
$show_datepicker_submit = empty( $live_refresh ) && ! empty( $disable_events_bar );
|
src/Tribe/Views/V2/Views/Traits/HTML_Cache.php
CHANGED
@@ -445,7 +445,8 @@ trait HTML_Cache {
|
|
445 |
*/
|
446 |
public function get_cache_html_key_salts() {
|
447 |
$can_read_private_posts = current_user_can( 'read_private_posts', TEC::POSTTYPE );
|
448 |
-
|
|
|
449 |
'current_user_can_read_private_events' => $can_read_private_posts,
|
450 |
];
|
451 |
|
445 |
*/
|
446 |
public function get_cache_html_key_salts() {
|
447 |
$can_read_private_posts = current_user_can( 'read_private_posts', TEC::POSTTYPE );
|
448 |
+
|
449 |
+
$salts = [
|
450 |
'current_user_can_read_private_events' => $can_read_private_posts,
|
451 |
];
|
452 |
|
src/Tribe/Views/V2/Views/Traits/Json_Ld_Data.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Provides methods for Views to produce JSON-LD structured output.
|
4 |
+
*
|
5 |
+
* View classes using this Trait can define a `cache_key` property to cache the JSON-LD data output.
|
6 |
+
*
|
7 |
+
* @since 5.0.2
|
8 |
+
*
|
9 |
+
* @package Tribe\Events\Views\V2\Views\Traits
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Tribe\Events\Views\V2\Views\Traits;
|
13 |
+
|
14 |
+
use Tribe__Cache_Listener as Listener;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Trait Json_Ld_Data
|
18 |
+
*
|
19 |
+
* @since 5.0.2
|
20 |
+
*
|
21 |
+
* @package Tribe\Events\Views\V2\Views\Traits
|
22 |
+
*/
|
23 |
+
trait Json_Ld_Data {
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Build the JSON-LD markup for a View provided events.
|
27 |
+
*
|
28 |
+
* @since 5.0.2
|
29 |
+
*
|
30 |
+
* @param array<\WP_Post|int|array<string,int>> $events Either a list of event post objects or IDs (e.g. List View)
|
31 |
+
* or a map of days and events per day (e.g. Month View).
|
32 |
+
*
|
33 |
+
* @return string The JSON-LD information corresponding to the events, or an empty string if there are no events
|
34 |
+
* or there was an issue building the JSON-LD output.
|
35 |
+
*/
|
36 |
+
protected function build_json_ld_data( array $events = [] ) {
|
37 |
+
if ( method_exists( $this, 'get_cache_html_key' ) ) {
|
38 |
+
$cache_key = $this->get_cache_html_key() . 'json_ld';
|
39 |
+
/** @var \Tribe__Cache $cache */
|
40 |
+
$cache = tribe( 'cache' );
|
41 |
+
$cached = $cache->get( $cache_key, Listener::TRIGGER_SAVE_POST );
|
42 |
+
|
43 |
+
if ( false !== $cached ) {
|
44 |
+
tribe_cache()['json-ld-data'] = array_filter(
|
45 |
+
array_merge( (array) tribe_cache()['json-ld-data'],
|
46 |
+
[ $cached ] )
|
47 |
+
);
|
48 |
+
|
49 |
+
return $cached;
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
53 |
+
if ( empty( $events ) ) {
|
54 |
+
return '';
|
55 |
+
}
|
56 |
+
|
57 |
+
$idify = static function ( $event ) {
|
58 |
+
return $event instanceof \WP_Post ? $event->ID : absint( $event );
|
59 |
+
};
|
60 |
+
|
61 |
+
$canary = reset( $events );
|
62 |
+
$is_nested_array = ! $canary instanceof \WP_Post;
|
63 |
+
if ( $is_nested_array && is_array( $events ) ) {
|
64 |
+
$events = array_merge( ...array_values( $events ) );
|
65 |
+
}
|
66 |
+
|
67 |
+
$event_ids = array_unique( array_map( $idify, $events ) );
|
68 |
+
|
69 |
+
$json_ld_data = \Tribe__Events__JSON_LD__Event::instance()->get_markup( $event_ids );
|
70 |
+
|
71 |
+
tribe_cache()['json-ld-data'] = array_filter(
|
72 |
+
array_merge( (array) tribe_cache()['json-ld-data'],
|
73 |
+
[ $json_ld_data ] )
|
74 |
+
);
|
75 |
+
|
76 |
+
if ( isset( $cache_key ) ) {
|
77 |
+
/** @var \Tribe__Cache $cache */
|
78 |
+
$cache = tribe( 'cache' );
|
79 |
+
$cache->set( $cache_key, $json_ld_data, DAY_IN_SECONDS, Listener::TRIGGER_SAVE_POST );
|
80 |
+
}
|
81 |
+
|
82 |
+
return $json_ld_data;
|
83 |
+
}
|
84 |
+
}
|
src/admin-views/tribe-options-display.php
CHANGED
@@ -1,5 +1,4 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
$tec = Tribe__Events__Main::instance();
|
4 |
|
5 |
$template_options = array(
|
@@ -12,6 +11,54 @@ foreach ( array_keys( $templates ) as $template ) {
|
|
12 |
$template_options[ $templates[ $template ] ] = $template;
|
13 |
}
|
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
/**
|
16 |
* Filter the array of views that are registered for the tribe bar
|
17 |
* @param array array() {
|
@@ -150,26 +197,8 @@ $display_tab_fields = Tribe__Main::array_insert_before_key(
|
|
150 |
'type' => 'html',
|
151 |
'html' => '<h3>' . __( 'Basic Template Settings', 'the-events-calendar' ) . '</h3>',
|
152 |
],
|
153 |
-
'stylesheetOption' =>
|
154 |
-
|
155 |
-
'label' => __( 'Default stylesheet used for events templates', 'the-events-calendar' ),
|
156 |
-
'default' => 'tribe',
|
157 |
-
'options' => [
|
158 |
-
'skeleton' => __( 'Skeleton Styles', 'the-events-calendar' ) .
|
159 |
-
'<p class=\'description tribe-style-selection\'>' .
|
160 |
-
__( 'Only includes enough css to achieve complex layouts like calendar and week view.', 'the-events-calendar' ) .
|
161 |
-
'</p>',
|
162 |
-
'full' => __( 'Full Styles', 'the-events-calendar' ) .
|
163 |
-
'<p class=\'description tribe-style-selection\'>' .
|
164 |
-
__( 'More detailed styling, tries to grab styles from your theme.', 'the-events-calendar' ) .
|
165 |
-
'</p>',
|
166 |
-
'tribe' => __( 'Tribe Events Styles', 'the-events-calendar' ) .
|
167 |
-
'<p class=\'description tribe-style-selection\'>' .
|
168 |
-
__( 'A fully designed and styled theme for your events pages.', 'the-events-calendar' ) .
|
169 |
-
'</p>',
|
170 |
-
],
|
171 |
-
'validation_type' => 'options',
|
172 |
-
],
|
173 |
'tribeEventsTemplate' => [
|
174 |
'type' => 'dropdown',
|
175 |
'label' => __( 'Events template', 'the-events-calendar' ),
|
1 |
<?php
|
|
|
2 |
$tec = Tribe__Events__Main::instance();
|
3 |
|
4 |
$template_options = array(
|
11 |
$template_options[ $templates[ $template ] ] = $template;
|
12 |
}
|
13 |
|
14 |
+
$stylesheet_choices = [
|
15 |
+
'skeleton' => __( 'Skeleton Styles', 'the-events-calendar' )
|
16 |
+
. '<p class=\'description tribe-style-selection\'>'
|
17 |
+
. __(
|
18 |
+
'Only includes enough css to achieve complex layouts like calendar and week view.',
|
19 |
+
'the-events-calendar'
|
20 |
+
)
|
21 |
+
.'</p>',
|
22 |
+
'full' => __( 'Full Styles', 'the-events-calendar' )
|
23 |
+
. '<p class=\'description tribe-style-selection\'>'
|
24 |
+
. __(
|
25 |
+
'More detailed styling, tries to grab styles from your theme.',
|
26 |
+
'the-events-calendar'
|
27 |
+
)
|
28 |
+
. '</p>',
|
29 |
+
'tribe' => __( 'Tribe Events Styles', 'the-events-calendar' )
|
30 |
+
. '<p class=\'description tribe-style-selection\'>'
|
31 |
+
. __(
|
32 |
+
'A fully designed and styled theme for your events pages.',
|
33 |
+
'the-events-calendar'
|
34 |
+
)
|
35 |
+
. '</p>',
|
36 |
+
];
|
37 |
+
|
38 |
+
|
39 |
+
// If V2 is ensabled, we don't show the (redundant) 'full' option
|
40 |
+
if ( tribe_events_views_v2_is_enabled() ) {
|
41 |
+
unset( $stylesheet_choices[ 'full' ] ) ;
|
42 |
+
}
|
43 |
+
|
44 |
+
$stylesheet_option = [
|
45 |
+
'type' => 'radio',
|
46 |
+
'label' => __( 'Default stylesheet used for events templates', 'the-events-calendar' ),
|
47 |
+
'default' => 'tribe',
|
48 |
+
'options' => $stylesheet_choices,
|
49 |
+
'validation_type' => 'options',
|
50 |
+
];
|
51 |
+
|
52 |
+
$stylesheet_mode = [ 'type' => 'html'];
|
53 |
+
|
54 |
+
// If V2 is ensabled, we swap the options so we don't overwrite. For backwards compatibility.
|
55 |
+
if ( tribe_events_views_v2_is_enabled() ) {
|
56 |
+
$stylesheet_mode = $stylesheet_option;
|
57 |
+
$stylesheet_option = [ 'type' => 'html' ];
|
58 |
+
}
|
59 |
+
|
60 |
+
|
61 |
+
|
62 |
/**
|
63 |
* Filter the array of views that are registered for the tribe bar
|
64 |
* @param array array() {
|
197 |
'type' => 'html',
|
198 |
'html' => '<h3>' . __( 'Basic Template Settings', 'the-events-calendar' ) . '</h3>',
|
199 |
],
|
200 |
+
'stylesheetOption' => $stylesheet_option,
|
201 |
+
'stylesheet_mode' => $stylesheet_mode,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
202 |
'tribeEventsTemplate' => [
|
203 |
'type' => 'dropdown',
|
204 |
'label' => __( 'Events template', 'the-events-calendar' ),
|
src/admin-views/tribe-options-general.php
CHANGED
@@ -47,15 +47,6 @@ $general_tab_fields = Tribe__Main::array_insert_before_key(
|
|
47 |
'default' => tribe_events_views_v2_is_enabled() ? 12 : get_option( 'posts_per_page' ),
|
48 |
'validation_type' => 'positive_int',
|
49 |
],
|
50 |
-
'liveFiltersUpdate' => [
|
51 |
-
'type' => 'checkbox_bool',
|
52 |
-
'label' => esc_html__( 'Enable live refresh', 'the-events-calendar' ),
|
53 |
-
'tooltip' => tribe_get_option( 'tribeDisableTribeBar', false ) == true && ! tribe_events_views_v2_is_enabled() ? esc_html__( 'This option is disabled when "Disable the Event Search Bar" is checked on the Display settings tab.', 'the-events-calendar' ) : esc_html__( 'Instantly updates the calendar view when searching for or filtering events.', 'the-events-calendar' ),
|
54 |
-
'attributes' => tribe_get_option( 'tribeDisableTribeBar', false ) == true && ! tribe_events_views_v2_is_enabled() ? [ 'disabled' => 'disabled' ] : null,
|
55 |
-
'default' => true,
|
56 |
-
'validation_type' => 'boolean',
|
57 |
-
'class' => tribe_get_option( 'tribeDisableTribeBar', false ) == true && ! tribe_events_views_v2_is_enabled() ? 'tribe-fieldset-disabled' : null,
|
58 |
-
],
|
59 |
'showComments' => [
|
60 |
'type' => 'checkbox_bool',
|
61 |
'label' => esc_html__( 'Show comments', 'the-events-calendar' ),
|
@@ -234,7 +225,7 @@ $general_tab_fields = Tribe__Main::array_insert_before_key(
|
|
234 |
'tribeEventsMiscellaneousTitle',
|
235 |
$general_tab_fields,
|
236 |
[
|
237 |
-
'
|
238 |
'type' => 'html',
|
239 |
'html' => '<h3>' . esc_html__( 'Map Settings', 'the-events-calendar' ) . '</h3>',
|
240 |
],
|
@@ -258,6 +249,36 @@ $general_tab_fields = Tribe__Main::array_insert_before_key(
|
|
258 |
]
|
259 |
);
|
260 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
261 |
$general_tab_fields = tribe( 'events.editor.compatibility' )->insert_toggle_blocks_editor_field( $general_tab_fields );
|
262 |
|
|
|
|
|
263 |
return $general_tab_fields;
|
47 |
'default' => tribe_events_views_v2_is_enabled() ? 12 : get_option( 'posts_per_page' ),
|
48 |
'validation_type' => 'positive_int',
|
49 |
],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
'showComments' => [
|
51 |
'type' => 'checkbox_bool',
|
52 |
'label' => esc_html__( 'Show comments', 'the-events-calendar' ),
|
225 |
'tribeEventsMiscellaneousTitle',
|
226 |
$general_tab_fields,
|
227 |
[
|
228 |
+
'tribeGoogleMapsSettingsTitle' => [
|
229 |
'type' => 'html',
|
230 |
'html' => '<h3>' . esc_html__( 'Map Settings', 'the-events-calendar' ) . '</h3>',
|
231 |
],
|
249 |
]
|
250 |
);
|
251 |
|
252 |
+
$filter_activation = [
|
253 |
+
'liveFiltersUpdate' => [
|
254 |
+
'class' => tribe_get_option( 'tribeDisableTribeBar', false ) == true ? 'tribe-fieldset-disabled' : null,
|
255 |
+
'default' => 'automatic',
|
256 |
+
'label' => esc_html__( 'Filter Activation', 'the-events-calendar' ),
|
257 |
+
'options' => [
|
258 |
+
'automatic' => __( 'Calendar view is updated immediately when a filter is selected', 'the-events-calendar' ),
|
259 |
+
'manual' => __( 'Submit button activates any selected filters', 'the-events-calendar' ),
|
260 |
+
],
|
261 |
+
'tooltip' => esc_html__( 'Immediate filter activation may not be fully compliant with Web Accessibility Standards.', 'the-events-calendar' ),
|
262 |
+
'type' => 'radio',
|
263 |
+
'validation_type' => 'options',
|
264 |
+
]
|
265 |
+
];
|
266 |
+
|
267 |
+
if ( tribe_events_views_v2_is_enabled() ) {
|
268 |
+
add_filter( 'tribe-event-filters-settings-fields', function ( $fields ) use ( $filter_activation ) {
|
269 |
+
$fields += $filter_activation;
|
270 |
+
return $fields;
|
271 |
+
} );
|
272 |
+
} else {
|
273 |
+
$general_tab_fields = Tribe__Main::array_insert_before_key(
|
274 |
+
'showComments',
|
275 |
+
$general_tab_fields,
|
276 |
+
$filter_activation
|
277 |
+
);
|
278 |
+
}
|
279 |
+
|
280 |
$general_tab_fields = tribe( 'events.editor.compatibility' )->insert_toggle_blocks_editor_field( $general_tab_fields );
|
281 |
|
282 |
+
$general_tab_fields = apply_filters( 'tribe-event-general-settings-fields', $general_tab_fields );
|
283 |
+
|
284 |
return $general_tab_fields;
|
src/{Tribe/Customizer/Text.php → deprecated/Tribe__Events__Customizer__Text.php}
RENAMED
@@ -1,4 +1,6 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
/**
|
3 |
* The Events Calendar Customizer Section: Text.
|
4 |
*
|
1 |
<?php
|
2 |
+
_deprecated_file( __FILE__, 'TBD', 'Tribe__Events__Customizer__Global_Elements' );
|
3 |
+
|
4 |
/**
|
5 |
* The Events Calendar Customizer Section: Text.
|
6 |
*
|
src/views/v2/components/data.php
CHANGED
@@ -7,6 +7,9 @@
|
|
7 |
*
|
8 |
* See more documentation about our views templating system.
|
9 |
*
|
|
|
|
|
|
|
10 |
* @link {INSERT_ARTCILE_LINK_HERE}
|
11 |
*
|
12 |
* @version 5.0.0
|
7 |
*
|
8 |
* See more documentation about our views templating system.
|
9 |
*
|
10 |
+
* @var string $view_slug The slug of the view currently being rendered.
|
11 |
+
* @var Tribe\Events\Views\V2\View_Interface $view The View instance that is being rendered.
|
12 |
+
*
|
13 |
* @link {INSERT_ARTCILE_LINK_HERE}
|
14 |
*
|
15 |
* @version 5.0.0
|
src/views/v2/components/json-ld-data.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* View: Events JSON-LD Data.
|
4 |
+
*
|
5 |
+
* Override this template in your own theme by creating a file at:
|
6 |
+
* [your-theme]/tribe/events/v2/components/json-ld-data.php
|
7 |
+
*
|
8 |
+
* See more documentation about our views templating system.
|
9 |
+
*
|
10 |
+
* @var string $view_slug The slug of the view currently being rendered.
|
11 |
+
* @var Tribe\Events\Views\V2\View_Interface $view The View instance that is being rendered.
|
12 |
+
* @var string $json_ld_data The View JSON-LD data markup.
|
13 |
+
*
|
14 |
+
* @link {INSERT_ARTCILE_LINK_HERE}
|
15 |
+
*
|
16 |
+
* @version 5.0.2
|
17 |
+
*/
|
18 |
+
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Filters the JSON-LD data markup that will be printed for the View.
|
22 |
+
*
|
23 |
+
* While this filter controls the markup at the view level, other earlier filters are available in the View template vars
|
24 |
+
* and in the code responsible for the JSON-LD data.
|
25 |
+
*
|
26 |
+
* @since 5.0.2
|
27 |
+
*
|
28 |
+
* @param array $json_ld_data The JSON-LD data markup for the current View and Context.
|
29 |
+
* @param string $view_slug The slug of the view currently being rendered.
|
30 |
+
* @param Tribe\Events\Views\V2\View_Interface $view The View instance that is being rendered.
|
31 |
+
*/
|
32 |
+
$json_ld_data = apply_filters( 'tribe_events_views_v2_view_json_ld_markup', $json_ld_data, $view_slug, $view );
|
33 |
+
|
34 |
+
echo $json_ld_data;
|
src/views/v2/day.php
CHANGED
@@ -9,7 +9,7 @@
|
|
9 |
*
|
10 |
* @link {INSERT_ARTCILE_LINK_HERE}
|
11 |
*
|
12 |
-
* @version 5.0.
|
13 |
*
|
14 |
* @var array $events The array containing the events.
|
15 |
* @var string $rest_url The REST URL.
|
@@ -43,6 +43,8 @@ if ( empty( $disable_event_search ) ) {
|
|
43 |
<div class="tribe-common-l-container tribe-events-l-container">
|
44 |
<?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
|
45 |
|
|
|
|
|
46 |
<?php $this->template( 'components/data' ); ?>
|
47 |
|
48 |
<?php $this->template( 'components/before' ); ?>
|
9 |
*
|
10 |
* @link {INSERT_ARTCILE_LINK_HERE}
|
11 |
*
|
12 |
+
* @version 5.0.2
|
13 |
*
|
14 |
* @var array $events The array containing the events.
|
15 |
* @var string $rest_url The REST URL.
|
43 |
<div class="tribe-common-l-container tribe-events-l-container">
|
44 |
<?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
|
45 |
|
46 |
+
<?php $this->template( 'components/json-ld-data' ); ?>
|
47 |
+
|
48 |
<?php $this->template( 'components/data' ); ?>
|
49 |
|
50 |
<?php $this->template( 'components/before' ); ?>
|
src/views/v2/list.php
CHANGED
@@ -9,7 +9,7 @@
|
|
9 |
*
|
10 |
* @link {INSERT_ARTCILE_LINK_HERE}
|
11 |
*
|
12 |
-
* @version 5.0.
|
13 |
*
|
14 |
* @var array $events The array containing the events.
|
15 |
* @var string $rest_url The REST URL.
|
@@ -42,6 +42,8 @@ if ( empty( $disable_event_search ) ) {
|
|
42 |
<div class="tribe-common-l-container tribe-events-l-container">
|
43 |
<?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
|
44 |
|
|
|
|
|
45 |
<?php $this->template( 'components/data' ); ?>
|
46 |
|
47 |
<?php $this->template( 'components/before' ); ?>
|
9 |
*
|
10 |
* @link {INSERT_ARTCILE_LINK_HERE}
|
11 |
*
|
12 |
+
* @version 5.0.2
|
13 |
*
|
14 |
* @var array $events The array containing the events.
|
15 |
* @var string $rest_url The REST URL.
|
42 |
<div class="tribe-common-l-container tribe-events-l-container">
|
43 |
<?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
|
44 |
|
45 |
+
<?php $this->template( 'components/json-ld-data' ); ?>
|
46 |
+
|
47 |
<?php $this->template( 'components/data' ); ?>
|
48 |
|
49 |
<?php $this->template( 'components/before' ); ?>
|
src/views/v2/month.php
CHANGED
@@ -9,7 +9,7 @@
|
|
9 |
*
|
10 |
* @link {INSERT_ARTCILE_LINK_HERE}
|
11 |
*
|
12 |
-
* @version
|
13 |
*
|
14 |
* @var string $rest_url The REST URL.
|
15 |
* @var string $rest_nonce The REST nonce.
|
@@ -41,6 +41,8 @@ if ( empty( $disable_event_search ) ) {
|
|
41 |
<div class="tribe-common-l-container tribe-events-l-container">
|
42 |
<?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
|
43 |
|
|
|
|
|
44 |
<?php $this->template( 'components/data' ); ?>
|
45 |
|
46 |
<?php $this->template( 'components/before' ); ?>
|
9 |
*
|
10 |
* @link {INSERT_ARTCILE_LINK_HERE}
|
11 |
*
|
12 |
+
* @version 5.0.2
|
13 |
*
|
14 |
* @var string $rest_url The REST URL.
|
15 |
* @var string $rest_nonce The REST nonce.
|
41 |
<div class="tribe-common-l-container tribe-events-l-container">
|
42 |
<?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
|
43 |
|
44 |
+
<?php $this->template( 'components/json-ld-data' ); ?>
|
45 |
+
|
46 |
<?php $this->template( 'components/data' ); ?>
|
47 |
|
48 |
<?php $this->template( 'components/before' ); ?>
|
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.0.
|
6 |
* Author: Modern Tribe, Inc.
|
7 |
* Author URI: http://m.tri.be/1x
|
8 |
* Text Domain: the-events-calendar
|
2 |
/**
|
3 |
* Plugin Name: The Events Calendar
|
4 |
* Description: The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events. Beautiful. Solid. Awesome.
|
5 |
+
* Version: 5.0.2
|
6 |
* Author: Modern Tribe, Inc.
|
7 |
* Author URI: http://m.tri.be/1x
|
8 |
* Text Domain: the-events-calendar
|
vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInitf9be21f72a00ed90ee8c58bcb9aa86a6::getLoader();
|
vendor/composer/autoload_classmap.php
CHANGED
@@ -7,6 +7,7 @@ $baseDir = dirname($vendorDir);
|
|
7 |
|
8 |
return array(
|
9 |
'Tribe\\Events\\Collections\\Lazy_Post_Collection' => $baseDir . '/src/Tribe/Collections/Lazy_Post_Collection.php',
|
|
|
10 |
'Tribe\\Events\\Integrations\\WP_Rocket' => $baseDir . '/src/Tribe/Integrations/WP_Rocket.php',
|
11 |
'Tribe\\Events\\Models\\Post_Types\\Event' => $baseDir . '/src/Tribe/Models/Post_Types/Event.php',
|
12 |
'Tribe\\Events\\Models\\Post_Types\\Venue' => $baseDir . '/src/Tribe/Models/Post_Types/Venue.php',
|
@@ -210,6 +211,7 @@ return array(
|
|
210 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\Breakpoint_Behavior' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/Breakpoint_Behavior.php',
|
211 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\HTML_Cache' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/HTML_Cache.php',
|
212 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\HTML_CacheTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Views/Traits/HTML_CacheTest.php',
|
|
|
213 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_Behavior' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/List_Behavior.php',
|
214 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_BehaviorTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Views/Traits/List_BehaviorTest.php',
|
215 |
);
|
7 |
|
8 |
return array(
|
9 |
'Tribe\\Events\\Collections\\Lazy_Post_Collection' => $baseDir . '/src/Tribe/Collections/Lazy_Post_Collection.php',
|
10 |
+
'Tribe\\Events\\Integrations\\Beaver_Builder' => $baseDir . '/src/Tribe/Integrations/Beaver_Builder.php',
|
11 |
'Tribe\\Events\\Integrations\\WP_Rocket' => $baseDir . '/src/Tribe/Integrations/WP_Rocket.php',
|
12 |
'Tribe\\Events\\Models\\Post_Types\\Event' => $baseDir . '/src/Tribe/Models/Post_Types/Event.php',
|
13 |
'Tribe\\Events\\Models\\Post_Types\\Venue' => $baseDir . '/src/Tribe/Models/Post_Types/Venue.php',
|
211 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\Breakpoint_Behavior' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/Breakpoint_Behavior.php',
|
212 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\HTML_Cache' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/HTML_Cache.php',
|
213 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\HTML_CacheTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Views/Traits/HTML_CacheTest.php',
|
214 |
+
'Tribe\\Events\\Views\\V2\\Views\\Traits\\Json_Ld_Data' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/Json_Ld_Data.php',
|
215 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_Behavior' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/List_Behavior.php',
|
216 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_BehaviorTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Views/Traits/List_BehaviorTest.php',
|
217 |
);
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInitb3e0e6e71a0e02c7ce059a3e38602e1d
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
-
call_user_func(\Composer\Autoload\
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInitf9be21f72a00ed90ee8c58bcb9aa86a6
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInitf9be21f72a00ed90ee8c58bcb9aa86a6', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInitf9be21f72a00ed90ee8c58bcb9aa86a6', '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\ComposerStaticInitf9be21f72a00ed90ee8c58bcb9aa86a6::getInitializer($loader));
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $prefixLengthsPsr4 = array (
|
10 |
'T' =>
|
@@ -32,6 +32,7 @@ class ComposerStaticInitb3e0e6e71a0e02c7ce059a3e38602e1d
|
|
32 |
|
33 |
public static $classMap = array (
|
34 |
'Tribe\\Events\\Collections\\Lazy_Post_Collection' => __DIR__ . '/../..' . '/src/Tribe/Collections/Lazy_Post_Collection.php',
|
|
|
35 |
'Tribe\\Events\\Integrations\\WP_Rocket' => __DIR__ . '/../..' . '/src/Tribe/Integrations/WP_Rocket.php',
|
36 |
'Tribe\\Events\\Models\\Post_Types\\Event' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Event.php',
|
37 |
'Tribe\\Events\\Models\\Post_Types\\Venue' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Venue.php',
|
@@ -235,6 +236,7 @@ class ComposerStaticInitb3e0e6e71a0e02c7ce059a3e38602e1d
|
|
235 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\Breakpoint_Behavior' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/Breakpoint_Behavior.php',
|
236 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\HTML_Cache' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/HTML_Cache.php',
|
237 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\HTML_CacheTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Views/Traits/HTML_CacheTest.php',
|
|
|
238 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_Behavior' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/List_Behavior.php',
|
239 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_BehaviorTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Views/Traits/List_BehaviorTest.php',
|
240 |
);
|
@@ -242,9 +244,9 @@ class ComposerStaticInitb3e0e6e71a0e02c7ce059a3e38602e1d
|
|
242 |
public static function getInitializer(ClassLoader $loader)
|
243 |
{
|
244 |
return \Closure::bind(function () use ($loader) {
|
245 |
-
$loader->prefixLengthsPsr4 =
|
246 |
-
$loader->prefixDirsPsr4 =
|
247 |
-
$loader->classMap =
|
248 |
|
249 |
}, null, ClassLoader::class);
|
250 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInitf9be21f72a00ed90ee8c58bcb9aa86a6
|
8 |
{
|
9 |
public static $prefixLengthsPsr4 = array (
|
10 |
'T' =>
|
32 |
|
33 |
public static $classMap = array (
|
34 |
'Tribe\\Events\\Collections\\Lazy_Post_Collection' => __DIR__ . '/../..' . '/src/Tribe/Collections/Lazy_Post_Collection.php',
|
35 |
+
'Tribe\\Events\\Integrations\\Beaver_Builder' => __DIR__ . '/../..' . '/src/Tribe/Integrations/Beaver_Builder.php',
|
36 |
'Tribe\\Events\\Integrations\\WP_Rocket' => __DIR__ . '/../..' . '/src/Tribe/Integrations/WP_Rocket.php',
|
37 |
'Tribe\\Events\\Models\\Post_Types\\Event' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Event.php',
|
38 |
'Tribe\\Events\\Models\\Post_Types\\Venue' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Venue.php',
|
236 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\Breakpoint_Behavior' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/Breakpoint_Behavior.php',
|
237 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\HTML_Cache' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/HTML_Cache.php',
|
238 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\HTML_CacheTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Views/Traits/HTML_CacheTest.php',
|
239 |
+
'Tribe\\Events\\Views\\V2\\Views\\Traits\\Json_Ld_Data' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/Json_Ld_Data.php',
|
240 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_Behavior' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/List_Behavior.php',
|
241 |
'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_BehaviorTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Views/Traits/List_BehaviorTest.php',
|
242 |
);
|
244 |
public static function getInitializer(ClassLoader $loader)
|
245 |
{
|
246 |
return \Closure::bind(function () use ($loader) {
|
247 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInitf9be21f72a00ed90ee8c58bcb9aa86a6::$prefixLengthsPsr4;
|
248 |
+
$loader->prefixDirsPsr4 = ComposerStaticInitf9be21f72a00ed90ee8c58bcb9aa86a6::$prefixDirsPsr4;
|
249 |
+
$loader->classMap = ComposerStaticInitf9be21f72a00ed90ee8c58bcb9aa86a6::$classMap;
|
250 |
|
251 |
}, null, ClassLoader::class);
|
252 |
}
|