Version Description
- Preparation for v5: prevent auto-updating across major release.
- Update Freemius library.
Download this release
Release Info
Developer | invisnet |
Plugin | WP fail2ban |
Version | 4.4.0.9 |
Comparing to | |
See all releases |
Code changes from version 4.4.0.8 to 4.4.0.9
- constants.php +1 -1
- filters.d/wordpress-extra.conf +1 -1
- filters.d/wordpress-hard.conf +4 -4
- filters.d/wordpress-soft.conf +1 -1
- functions.php +1 -0
- init.php +5 -0
- lib/update.php +39 -0
- readme.txt +43 -30
- vendor/freemius/wordpress-sdk/assets/css/admin/account.css +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/add-ons.css +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/add-ons.css.map +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/affiliation.css +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/checkout.css +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/clone-resolution.css +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/common.css +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/common.css.map +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/connect.css +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/connect.css.map +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/debug.css +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/debug.css.map +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/dialog-boxes.css +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/dialog-boxes.css.map +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/gdpr-optin-notice.css +1 -1
- vendor/freemius/wordpress-sdk/assets/css/admin/optout.css +1 -0
- vendor/freemius/wordpress-sdk/assets/css/admin/optout.css.map +1 -0
- vendor/freemius/wordpress-sdk/assets/css/admin/plugins.css +1 -1
- vendor/freemius/wordpress-sdk/assets/css/customizer.css +1 -1
- vendor/freemius/wordpress-sdk/includes/class-freemius-abstract.php +4 -63
- vendor/freemius/wordpress-sdk/includes/class-freemius.php +740 -663
- vendor/freemius/wordpress-sdk/includes/class-fs-admin-notices.php +4 -3
- vendor/freemius/wordpress-sdk/includes/class-fs-lock.php +110 -0
- vendor/freemius/wordpress-sdk/includes/class-fs-plugin-updater.php +71 -40
- vendor/freemius/wordpress-sdk/includes/class-fs-storage.php +106 -80
- vendor/freemius/wordpress-sdk/includes/class-fs-user-lock.php +10 -46
- vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-tag.php +4 -0
- vendor/freemius/wordpress-sdk/includes/entities/class-fs-site.php +16 -17
- vendor/freemius/wordpress-sdk/includes/fs-core-functions.php +1 -1
- vendor/freemius/wordpress-sdk/includes/fs-plugin-info-dialog.php +54 -3
- vendor/freemius/wordpress-sdk/includes/managers/class-fs-admin-notice-manager.php +8 -2
- vendor/freemius/wordpress-sdk/includes/managers/class-fs-clone-manager.php +213 -140
- vendor/freemius/wordpress-sdk/includes/managers/class-fs-option-manager.php +10 -4
- vendor/freemius/wordpress-sdk/includes/managers/class-fs-permission-manager.php +698 -0
- vendor/freemius/wordpress-sdk/includes/sdk/FreemiusBase.php +169 -171
- vendor/freemius/wordpress-sdk/includes/sdk/FreemiusWordPress.php +2 -4
- vendor/freemius/wordpress-sdk/includes/supplements/fs-migration-2.5.1.php +31 -0
- vendor/freemius/wordpress-sdk/languages/freemius-cs_CZ.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-da_DK.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-de_DE.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-en.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-es_ES.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-fr_FR.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-he_IL.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-hu_HU.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-it_IT.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-ja.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-nl_NL.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-ru_RU.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-ta.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius-zh_CN.mo +0 -0
- vendor/freemius/wordpress-sdk/languages/freemius.pot +1289 -463
- vendor/freemius/wordpress-sdk/require.php +1 -0
- vendor/freemius/wordpress-sdk/start.php +1 -1
- vendor/freemius/wordpress-sdk/templates/account/partials/site.php +5 -3
- vendor/freemius/wordpress-sdk/templates/clone-resolution-js.php +10 -8
- vendor/freemius/wordpress-sdk/templates/connect.php +111 -133
- vendor/freemius/wordpress-sdk/templates/connect/index.php +3 -0
- vendor/freemius/wordpress-sdk/templates/connect/permission.php +43 -0
- vendor/freemius/wordpress-sdk/templates/connect/permissions-group.php +72 -0
- vendor/freemius/wordpress-sdk/templates/debug.php +52 -8
- vendor/freemius/wordpress-sdk/templates/forms/license-activation.php +2 -9
- vendor/freemius/wordpress-sdk/templates/forms/optout.php +147 -301
- vendor/freemius/wordpress-sdk/templates/js/permissions.php +546 -0
- vendor/freemius/wordpress-sdk/templates/plugin-icon.php +3 -1
- vendor/freemius/wordpress-sdk/templates/plugin-info/description.php +1 -1
- wp-fail2ban.php +1 -1
constants.php
CHANGED
@@ -12,7 +12,7 @@ namespace org\lecklider\charles\wordpress\wp_fail2ban;
|
|
12 |
// @codeCoverageIgnoreStart
|
13 |
|
14 |
if (!defined('WP_FAIL2BAN_VER')) {
|
15 |
-
define('WP_FAIL2BAN_VER', '4.4.0.
|
16 |
}
|
17 |
if (!defined('WP_FAIL2BAN_VER_SHORT')) {
|
18 |
define('WP_FAIL2BAN_VER_SHORT', '4.4');
|
12 |
// @codeCoverageIgnoreStart
|
13 |
|
14 |
if (!defined('WP_FAIL2BAN_VER')) {
|
15 |
+
define('WP_FAIL2BAN_VER', '4.4.0.9');
|
16 |
}
|
17 |
if (!defined('WP_FAIL2BAN_VER_SHORT')) {
|
18 |
define('WP_FAIL2BAN_VER_SHORT', '4.4');
|
filters.d/wordpress-extra.conf
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
# Fail2Ban filter for extra failures
|
2 |
-
# Auto-generated: 2022-
|
3 |
#
|
4 |
|
5 |
[INCLUDES]
|
1 |
# Fail2Ban filter for extra failures
|
2 |
+
# Auto-generated: 2022-12-08T18:19:00+00:00
|
3 |
#
|
4 |
|
5 |
[INCLUDES]
|
filters.d/wordpress-hard.conf
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
# Fail2Ban filter for hard failures
|
2 |
-
# Auto-generated: 2022-
|
3 |
#
|
4 |
|
5 |
[INCLUDES]
|
@@ -11,18 +11,18 @@ before = common.conf
|
|
11 |
_daemon = (?:wordpress|wp)
|
12 |
|
13 |
failregex = ^%(__prefix_line)sImmediately block connections from <HOST>$
|
|
|
|
|
14 |
^%(__prefix_line)sBlocked authentication attempt for .* from <HOST>$
|
15 |
^%(__prefix_line)sBlocked username authentication attempt for .* from <HOST>$
|
16 |
-
^%(__prefix_line)sBlocked user enumeration attempt from <HOST>$
|
17 |
^%(__prefix_line)sXML-RPC multicall authentication failure from <HOST>$
|
18 |
^%(__prefix_line)sPingback error .* generated from <HOST>$
|
19 |
-
^%(__prefix_line)sSpam comment \d+ from <HOST>$
|
20 |
^%(__prefix_line)sAuthentication attempt for unknown user .* from <HOST>$
|
21 |
^%(__prefix_line)sREST authentication attempt for unknown user .* from <HOST>$
|
22 |
^%(__prefix_line)sXML-RPC authentication attempt for unknown user .* from <HOST>$
|
23 |
-
^%(__prefix_line)sBlocked access from country '..' from <HOST>$
|
24 |
^%(__prefix_line)sXML-RPC request blocked from <HOST>$
|
25 |
^%(__prefix_line)s.*; Bogus Pingback from <HOST>$
|
|
|
26 |
|
27 |
ignoreregex =
|
28 |
|
1 |
# Fail2Ban filter for hard failures
|
2 |
+
# Auto-generated: 2022-12-08T18:19:00+00:00
|
3 |
#
|
4 |
|
5 |
[INCLUDES]
|
11 |
_daemon = (?:wordpress|wp)
|
12 |
|
13 |
failregex = ^%(__prefix_line)sImmediately block connections from <HOST>$
|
14 |
+
^%(__prefix_line)sSpam comment \d+ from <HOST>$
|
15 |
+
^%(__prefix_line)sBlocked user enumeration attempt from <HOST>$
|
16 |
^%(__prefix_line)sBlocked authentication attempt for .* from <HOST>$
|
17 |
^%(__prefix_line)sBlocked username authentication attempt for .* from <HOST>$
|
|
|
18 |
^%(__prefix_line)sXML-RPC multicall authentication failure from <HOST>$
|
19 |
^%(__prefix_line)sPingback error .* generated from <HOST>$
|
|
|
20 |
^%(__prefix_line)sAuthentication attempt for unknown user .* from <HOST>$
|
21 |
^%(__prefix_line)sREST authentication attempt for unknown user .* from <HOST>$
|
22 |
^%(__prefix_line)sXML-RPC authentication attempt for unknown user .* from <HOST>$
|
|
|
23 |
^%(__prefix_line)sXML-RPC request blocked from <HOST>$
|
24 |
^%(__prefix_line)s.*; Bogus Pingback from <HOST>$
|
25 |
+
^%(__prefix_line)sBlocked access from country '..' from <HOST>$
|
26 |
|
27 |
ignoreregex =
|
28 |
|
filters.d/wordpress-soft.conf
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
# Fail2Ban filter for soft failures
|
2 |
-
# Auto-generated: 2022-
|
3 |
#
|
4 |
|
5 |
[INCLUDES]
|
1 |
# Fail2Ban filter for soft failures
|
2 |
+
# Auto-generated: 2022-12-08T18:19:00+00:00
|
3 |
#
|
4 |
|
5 |
[INCLUDES]
|
functions.php
CHANGED
@@ -18,6 +18,7 @@ require_once __DIR__.'/lib/compat.php';
|
|
18 |
require_once __DIR__.'/lib/loader.php';
|
19 |
require_once __DIR__.'/lib/site-health.php';
|
20 |
require_once __DIR__.'/lib/syslog.php';
|
|
|
21 |
|
22 |
require_once __DIR__.'/core.php';
|
23 |
require_once __DIR__.'/feature/comments.php';
|
18 |
require_once __DIR__.'/lib/loader.php';
|
19 |
require_once __DIR__.'/lib/site-health.php';
|
20 |
require_once __DIR__.'/lib/syslog.php';
|
21 |
+
require_once __DIR__.'/lib/update.php';
|
22 |
|
23 |
require_once __DIR__.'/core.php';
|
24 |
require_once __DIR__.'/feature/comments.php';
|
init.php
CHANGED
@@ -190,6 +190,11 @@ function init(): void
|
|
190 |
require_once __DIR__.'/admin/admin.php'; // @codeCoverageIgnore
|
191 |
}
|
192 |
|
|
|
|
|
|
|
|
|
|
|
193 |
/**
|
194 |
* @since 4.4.0.8 Add our tests to Site Health
|
195 |
*/
|
190 |
require_once __DIR__.'/admin/admin.php'; // @codeCoverageIgnore
|
191 |
}
|
192 |
|
193 |
+
/**
|
194 |
+
* @since 4.4.0.9
|
195 |
+
*/
|
196 |
+
add_filter('auto_update_plugin', __NAMESPACE__.'\auto_update_plugin', 10, 2);
|
197 |
+
|
198 |
/**
|
199 |
* @since 4.4.0.8 Add our tests to Site Health
|
200 |
*/
|
lib/update.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php declare(strict_types=1);
|
2 |
+
/**
|
3 |
+
* WP fail2ban main file
|
4 |
+
*
|
5 |
+
* @package wp-fail2ban
|
6 |
+
* @since 4.4.0.9
|
7 |
+
*/
|
8 |
+
namespace org\lecklider\charles\wordpress\wp_fail2ban;
|
9 |
+
|
10 |
+
defined('ABSPATH') or exit;
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Allow auto-updates based on semver
|
14 |
+
*
|
15 |
+
* Major version must match.
|
16 |
+
* Minor version must match.
|
17 |
+
* Patch and below are ignored.
|
18 |
+
*
|
19 |
+
* @since 4.4.0.9
|
20 |
+
*
|
21 |
+
* @param mixed $update
|
22 |
+
* @param object $item
|
23 |
+
*
|
24 |
+
* @return mixed
|
25 |
+
*/
|
26 |
+
function auto_update_plugin($update, $item)
|
27 |
+
{
|
28 |
+
if ('wp-fail2ban' == $item->slug) {
|
29 |
+
$old_ver = explode('.', WP_FAIL2BAN_VER);
|
30 |
+
$new_ver = explode('.', $item->new_version);
|
31 |
+
|
32 |
+
// Only allow auto-update if Major and Minor match
|
33 |
+
return ($old_ver[0] == $new_ver[0] && $old_ver[1] == $new_ver[1])
|
34 |
+
? $update // Do not force auto-update
|
35 |
+
: false;
|
36 |
+
}
|
37 |
+
return $update;
|
38 |
+
}
|
39 |
+
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Plugin URI: https://wp-fail2ban.com/?utm_source=wordpress.org&utm_medium=readme&
|
|
5 |
Tags: fail2ban, login, security, syslog, brute force, protection, classicpress
|
6 |
Requires at least: 4.2
|
7 |
Tested up to: 6.1
|
8 |
-
Stable tag: 4.4.0.
|
9 |
Requires PHP: 7.4
|
10 |
License: GPLv3 or later
|
11 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
@@ -25,49 +25,55 @@ Write a myriad of WordPress events to syslog for integration with fail2ban.
|
|
25 |
|
26 |
= Features =
|
27 |
|
28 |
-
* **
|
29 |
-
|
30 |
-
|
31 |
-
* **Block
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
|
34 |
* **Block username logins**
|
35 |
-
Sometimes it's not possible to block user enumeration (for example, if your theme provides Author profiles).
|
36 |
|
37 |
-
* **
|
38 |
-
|
39 |
-
|
|
|
|
|
40 |
|
41 |
-
* **
|
42 |
-
|
|
|
|
|
43 |
|
44 |
-
* **
|
45 |
-
*WPf2b*
|
46 |
|
47 |
-
* **
|
48 |
-
|
49 |
|
50 |
* **Pingbacks**
|
51 |
-
|
52 |
|
53 |
-
* **
|
54 |
-
|
55 |
|
56 |
-
* **Block
|
57 |
-
|
58 |
|
59 |
-
* **
|
60 |
-
*WPf2b*
|
61 |
-
You can also configure your own list of trusted proxies.
|
62 |
|
63 |
-
* **
|
64 |
-
|
65 |
|
66 |
* **`mu-plugins` Support**
|
67 |
-
*WPf2b* can easily be configured as a
|
68 |
-
|
69 |
-
* **API to Extend *WPf2b***
|
70 |
-
If your plugin can detect behaviour which should be blocked, why reinvent the wheel?
|
71 |
|
72 |
== Installation ==
|
73 |
|
@@ -77,6 +83,10 @@ Write a myriad of WordPress events to syslog for integration with fail2ban.
|
|
77 |
|
78 |
== Changelog ==
|
79 |
|
|
|
|
|
|
|
|
|
80 |
= 4.4.0.8 =
|
81 |
* Backport fix for `mu-plugins` activation.
|
82 |
* Update Freemius library.
|
@@ -333,6 +343,9 @@ Write a myriad of WordPress events to syslog for integration with fail2ban.
|
|
333 |
|
334 |
== Upgrade Notice ==
|
335 |
|
|
|
|
|
|
|
336 |
= 4.4.0.8 =
|
337 |
This is a bugfix release. You do not need to update your filters from 4.4.0.
|
338 |
|
5 |
Tags: fail2ban, login, security, syslog, brute force, protection, classicpress
|
6 |
Requires at least: 4.2
|
7 |
Tested up to: 6.1
|
8 |
+
Stable tag: 4.4.0.9
|
9 |
Requires PHP: 7.4
|
10 |
License: GPLv3 or later
|
11 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
25 |
|
26 |
= Features =
|
27 |
|
28 |
+
* **Allow Pingbacks with XML-RPC Blocked** [Premium only]
|
29 |
+
Pingbacks might be a relic of a bygone age, but they're still nice to have. *Wf2b* can now allow Pingsbacks while blocking other XML-RPC requests.
|
30 |
+
|
31 |
+
* **Block XML-RPC Requests** [Premium only]
|
32 |
+
Allow access for Jetpack and other trusted IPs while blocking everything else; introduces a new "hard" filter.
|
33 |
+
|
34 |
+
* **Block Countries** [Premium only]
|
35 |
+
Nothing but attacks from some countries? Block them!
|
36 |
+
|
37 |
+
* **Multisite Support**
|
38 |
+
Version 4.3 introduced [proper support for multisite networks](https://wp-fail2ban.com/features/multisite-networks/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0).
|
39 |
|
40 |
* **Block username logins**
|
41 |
+
Sometimes it's not possible to block user enumeration (for example, if your theme provides Author profiles). Version 4.3 added support for requiring the use of email addresses for login.
|
42 |
|
43 |
+
* **Filter for Empty Username Login Attempts**
|
44 |
+
Some bots will try to login without a username. Version 4.3 logs these attempts and provides an "extra" filter to match them.
|
45 |
+
|
46 |
+
* **syslog Dashboard Widget**
|
47 |
+
Ever wondered what's being logged? The new dashboard widget shows the last 5 messages; the Premium version keeps a full history to help you analyse and prevent attacks.
|
48 |
|
49 |
+
* **Support for 3rd-party Plugins**
|
50 |
+
Version 4.2 introduced a simple API for authors to integrate their plugins with *WPf2b*, with 2 *experimental* add-ons:
|
51 |
+
* [Contact Form 7](https://wordpress.org/plugins/wp-fail2ban-addon-contact-form-7/)
|
52 |
+
* [Gravity Forms](https://wordpress.org/plugins/wp-fail2ban-addon-gravity-forms/)
|
53 |
|
54 |
+
* **CloudFlare and Proxy Servers**
|
55 |
+
*WPf2b* can be configured to work with [CloudFlare and other proxy servers](https://wp-fail2ban.com/features/cloudflare-and-proxy-servers/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0).
|
56 |
|
57 |
+
* **Comments**
|
58 |
+
*WPf2b* can log comments (see [`WP_FAIL2BAN_LOG_COMMENTS`](https://docs.wp-fail2ban.com/en/4.4/defines.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0#wp-fail2ban-log-comments)) and attempted comments (see [`WP_FAIL2BAN_LOG_COMMENTS_EXTRA`](https://docs.wp-fail2ban.com/en/4.3/defines.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0#wp-fail2ban-log-comments-extra)).
|
59 |
|
60 |
* **Pingbacks**
|
61 |
+
*WPf2b* logs failed pingbacks, and can log all pingbacks. For an overview see [`WP_FAIL2BAN_LOG_PINGBACKS`](https://docs.wp-fail2ban.com/en/4.4/defines.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0#wp-fail2ban-log-pingbacks).
|
62 |
|
63 |
+
* **Spam**
|
64 |
+
*WPf2b* can log comments marked as spam. See [`WP_FAIL2BAN_LOG_SPAM`](https://docs.wp-fail2ban.com/en/4.4/defines.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0#wp-fail2ban-log-spam).
|
65 |
|
66 |
+
* **Block User Enumeration**
|
67 |
+
*WPf2b* can [block user enumeration](https://wp-fail2ban.com/features/block-user-enumeration/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0).
|
68 |
|
69 |
+
* **Work-Arounds for Broken syslogd**
|
70 |
+
*WPf2b* can be configured to work around most syslogd weirdness. For an overview see [`WP_FAIL2BAN_SYSLOG_SHORT_TAG`](https://docs.wp-fail2ban.com/en/4.4/defines.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0#wp-fail2ban-syslog-short-tag) and [`WP_FAIL2BAN_HTTP_HOST`](https://docs.wp-fail2ban.com/en/4.3/defines.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0#wp-fail2ban-http-host).
|
|
|
71 |
|
72 |
+
* **Blocking Users**
|
73 |
+
*WPf2b* can be configured to short-cut the login process when the username matches a regex. For an overview see [`WP_FAIL2BAN_BLOCKED_USERS`](https://docs.wp-fail2ban.com/en/4.4/defines.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0#wp-fail2ban-blocked-users).
|
74 |
|
75 |
* **`mu-plugins` Support**
|
76 |
+
*WPf2b* can easily be configured as a must-use plugin - see [Configuration](https://docs.wp-fail2ban.com/en/4.4/configuration.html?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0#mu-plugins-support).
|
|
|
|
|
|
|
77 |
|
78 |
== Installation ==
|
79 |
|
83 |
|
84 |
== Changelog ==
|
85 |
|
86 |
+
= 4.4.0.9 =
|
87 |
+
* Preparation for v5: prevent auto-updating across major release.
|
88 |
+
* Update Freemius library.
|
89 |
+
|
90 |
= 4.4.0.8 =
|
91 |
* Backport fix for `mu-plugins` activation.
|
92 |
* Update Freemius library.
|
343 |
|
344 |
== Upgrade Notice ==
|
345 |
|
346 |
+
= 4.4.0.9 =
|
347 |
+
This is a minor release. You do not need to update your filters from 4.4.0.
|
348 |
+
|
349 |
= 4.4.0.8 =
|
350 |
This is a bugfix release. You do not need to update your filters from 4.4.0.
|
351 |
|
vendor/freemius/wordpress-sdk/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-notice[data-id=license_not_whitelabeled].success,.fs-notice[data-id=license_whitelabeled].success{color:inherit;border-left-color:#00a0d2}.fs-notice[data-id=license_not_whitelabeled].success label.fs-plugin-title,.fs-notice[data-id=license_whitelabeled].success label.fs-plugin-title{display:none}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #f1f1f1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:.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:gray;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%}@media screen and (max-width: 639px){#fs_account .fs-header-actions{position:static;padding:0 15px 12px 15px;margin:0 0 12px 0}#fs_account .fs-header-actions li{float:none;display:inline-block}#fs_account #fs_account_details{display:block}#fs_account #fs_account_details tbody,#fs_account #fs_account_details tr,#fs_account #fs_account_details td,#fs_account #fs_account_details th{display:block}#fs_account #fs_account_details tr td:first-child{text-align:left}#fs_account #fs_account_details tr td:nth-child(2){padding:0 12px}#fs_account #fs_account_details tr td:nth-child(2) code{margin:0;padding:0}#fs_account #fs_account_details tr td:nth-child(2) label{margin-left:0}#fs_account #fs_account_details tr td:nth-child(3){text-align:left}#fs_account #fs_account_details tr.fs-field-plan td:nth-child(2) .button-group{float:none;margin:12px 0}}
|
1 |
+
label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}.fs-notice[data-id=license_not_whitelabeled].success,.fs-notice[data-id=license_whitelabeled].success{color:inherit;border-left-color:#00a0d2}.fs-notice[data-id=license_not_whitelabeled].success label.fs-plugin-title,.fs-notice[data-id=license_whitelabeled].success label.fs-plugin-title{display:none}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #f1f1f1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:.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:gray;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%}@media screen and (max-width: 639px){#fs_account .fs-header-actions{position:static;padding:0 15px 12px 15px;margin:0 0 12px 0}#fs_account .fs-header-actions li{float:none;display:inline-block}#fs_account #fs_account_details{display:block}#fs_account #fs_account_details tbody,#fs_account #fs_account_details tr,#fs_account #fs_account_details td,#fs_account #fs_account_details th{display:block}#fs_account #fs_account_details tr td:first-child{text-align:left}#fs_account #fs_account_details tr td:nth-child(2){padding:0 12px}#fs_account #fs_account_details tr td:nth-child(2) code{margin:0;padding:0}#fs_account #fs_account_details tr td:nth-child(2) label{margin-left:0}#fs_account #fs_account_details tr td:nth-child(3){text-align:left}#fs_account #fs_account_details tr.fs-field-plan td:nth-child(2) .button-group{float:none;margin:12px 0}}
|
vendor/freemius/wordpress-sdk/assets/css/admin/add-ons.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;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,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(0,0,0,.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:#adff2f;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:1px 1px 1px rgba(0,0,0,.3);text-transform:uppercase;font-size:.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description iframe{max-width:100%}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:#adff2f;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid #006400;padding:2px;text-align:center;font-size:.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#f3f3f3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:#adff2f}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid #fff;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}/*# sourceMappingURL=add-ons.css.map */
|
1 |
+
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;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,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(0,0,0,.3)}#fs_addons .fs-cards-list{list-style:none}#fs_addons .fs-cards-list .fs-card{float:left;height:152px;width:310px;padding:0;margin:0 0 30px 30px;font-size:14px;list-style:none;border:1px solid #ddd;cursor:pointer;position:relative}#fs_addons .fs-cards-list .fs-card .fs-overlay{position:absolute;left:0;right:0;bottom:0;top:0;z-index:9}#fs_addons .fs-cards-list .fs-card .fs-inner{background-color:#fff;overflow:hidden;height:100%;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner>ul{-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s;left:0;right:0;top:0;position:absolute}#fs_addons .fs-cards-list .fs-card .fs-inner>ul>li{list-style:none;line-height:18px;padding:0 15px;width:100%;display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner{padding:0;margin:0;line-height:0;display:block;height:100px;background-repeat:repeat-x;background-size:100% 100%;-moz-transition:all,.15s;-o-transition:all,.15s;-ms-transition:all,.15s;-webkit-transition:all,.15s;transition:all,.15s}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-card-banner .fs-badge.fs-installed-addon-badge{font-size:1.02em;line-height:1.3em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-title{margin:10px 0 0 0;height:18px;overflow:hidden;color:#000;white-space:nowrap;text-overflow:ellipsis;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-offer{font-size:.9em}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-description{background-color:#f9f9f9;padding:10px 15px 100px 15px;border-top:1px solid #eee;margin:0 0 10px 0;color:#777}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-tag{position:absolute;top:10px;right:0px;background:#adff2f;display:block;padding:2px 10px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:1px 1px 1px rgba(0,0,0,.3);text-transform:uppercase;font-size:.9em;font-weight:bold}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button,#fs_addons .fs-cards-list .fs-card .fs-inner .fs-cta .button-group{position:absolute;top:112px;right:10px}@media screen and (min-width: 960px){#fs_addons .fs-cards-list .fs-card:hover .fs-overlay{border:2px solid #29abe1;margin-left:-1px;margin-top:-1px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner ul{top:-100px}#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-title,#fs_addons .fs-cards-list .fs-card:hover .fs-inner .fs-offer{color:#29abe1}}#TB_window,#TB_window iframe{width:821px !important}#plugin-information .fyi{width:266px !important}#plugin-information #section-holder{margin-right:299px;clear:none}#plugin-information #section-description h2,#plugin-information #section-description h3,#plugin-information #section-description p,#plugin-information #section-description b,#plugin-information #section-description i,#plugin-information #section-description blockquote,#plugin-information #section-description li,#plugin-information #section-description ul,#plugin-information #section-description ol{clear:none}#plugin-information #section-description iframe{max-width:100%}#plugin-information #section-description .fs-selling-points{padding-bottom:10px;border-bottom:1px solid #ddd}#plugin-information #section-description .fs-selling-points ul{margin:0}#plugin-information #section-description .fs-selling-points ul li{padding:0;list-style:none outside none}#plugin-information #section-description .fs-selling-points ul li i.dashicons{color:#71ae00;font-size:3em;vertical-align:middle;line-height:30px;float:left;margin:0 0 0 -15px}#plugin-information #section-description .fs-selling-points ul li h3{margin:1em 30px !important}#plugin-information #section-description .fs-screenshots:after{content:"";display:table;clear:both}#plugin-information #section-description .fs-screenshots ul{list-style:none;margin:0}#plugin-information #section-description .fs-screenshots ul li{width:225px;height:225px;float:left;margin-bottom:20px;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}#plugin-information #section-description .fs-screenshots ul li a{display:block;width:100%;height:100%;border:1px solid;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);background-size:cover}#plugin-information #section-description .fs-screenshots ul li.odd{margin-right:20px}#plugin-information .plugin-information-pricing{margin:-16px;border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan h3{margin-top:0;padding:20px;font-size:16px}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper{border-bottom:1px solid #ddd}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab{cursor:pointer;position:relative;padding:0 10px;font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab label{text-transform:uppercase;color:green;background:#adff2f;position:absolute;left:-1px;right:-1px;bottom:100%;border:1px solid #006400;padding:2px;text-align:center;font-size:.9em;line-height:1em}#plugin-information .plugin-information-pricing .fs-plan .nav-tab-wrapper .nav-tab.nav-tab-active{cursor:default;background:#fffeec;border-bottom-color:#fffeec}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle h3{background:#fffeec;margin:0;padding-bottom:0;color:#0073aa}#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .nav-tab-wrapper,#plugin-information .plugin-information-pricing .fs-plan.fs-single-cycle .fs-billing-frequency{display:none}#plugin-information .plugin-information-pricing .fs-plan .fs-pricing-body{background:#fffeec;padding:20px}#plugin-information .plugin-information-pricing .fs-plan .button{width:100%;text-align:center;font-weight:bold;text-transform:uppercase;font-size:1.1em}#plugin-information .plugin-information-pricing .fs-plan label{white-space:nowrap}#plugin-information .plugin-information-pricing .fs-plan var{font-style:normal}#plugin-information .plugin-information-pricing .fs-plan .fs-billing-frequency,#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-align:center;display:block;font-weight:bold;margin-bottom:10px;text-transform:uppercase;background:#f3f3f3;padding:2px;border:1px solid #ccc}#plugin-information .plugin-information-pricing .fs-plan .fs-annual-discount{text-transform:none;color:green;background:#adff2f}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms{font-size:.9em}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms i{float:left;margin:0 0 0 -15px}#plugin-information .plugin-information-pricing .fs-plan ul.fs-trial-terms li{margin:10px 0 0 0}#plugin-information #section-features .fs-features{margin:-20px -26px}#plugin-information #section-features table{width:100%;border-spacing:0;border-collapse:separate}#plugin-information #section-features table thead th{padding:10px 0}#plugin-information #section-features table thead .fs-price{color:#71ae00;font-weight:normal;display:block;text-align:center}#plugin-information #section-features table tbody td{border-top:1px solid #ccc;padding:10px 0;text-align:center;width:100px;color:#71ae00}#plugin-information #section-features table tbody td:first-child{text-align:left;width:auto;color:inherit;padding-left:26px}#plugin-information #section-features table tbody tr.fs-odd td{background:#fefefe}#plugin-information #section-features .dashicons-yes{width:30px;height:30px;font-size:30px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button,#plugin-information .fs-dropdown .button-group .button{position:relative;width:auto;top:0;right:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .button:focus,#plugin-information .fs-dropdown .button-group .button:focus{z-index:10}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .button-group .fs-dropdown-arrow,#plugin-information .fs-dropdown .button-group .fs-dropdown-arrow{border-top:6px solid #fff;border-right:4px solid transparent;border-left:4px solid transparent;top:12px;position:relative}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active:not(.up) .button:not(.fs-dropdown-arrow-button){border-bottom-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active:not(.up) .fs-dropdown-arrow-button{border-bottom-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button),#plugin-information .fs-dropdown.active.up .button:not(.fs-dropdown-arrow-button){border-top-left-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.active.up .fs-dropdown-arrow-button,#plugin-information .fs-dropdown.active.up .fs-dropdown-arrow-button{border-top-right-radius:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list,#plugin-information .fs-dropdown .fs-dropdown-list{position:absolute;right:-1px;top:100%;margin-left:auto;padding:3px 0;border:1px solid #bfbfbf;background-color:#fff;z-index:1;width:230px;text-align:left;-moz-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);-webkit-box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12);box-shadow:0px 2px 4px -1px rgba(0,0,0,.2),0px 4px 5px 0px rgba(0,0,0,.14),0px 1px 10px 0px rgba(0,0,0,.12)}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li,#plugin-information .fs-dropdown .fs-dropdown-list li{margin:0}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li a,#plugin-information .fs-dropdown .fs-dropdown-list li a{display:block;padding:5px 10px;text-decoration:none;text-shadow:none}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover,#plugin-information .fs-dropdown .fs-dropdown-list li:hover{background-color:#0074a3;color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown .fs-dropdown-list li:hover a,#plugin-information .fs-dropdown .fs-dropdown-list li:hover a{color:#fff}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown:not(.up) .fs-dropdown-list,#plugin-information .fs-dropdown:not(.up) .fs-dropdown-list{-moz-border-radius:3px 0 3px 3px;-webkit-border-radius:3px 0 3px 3px;border-radius:3px 0 3px 3px}#fs_addons .fs-cards-list .fs-card .fs-inner .fs-dropdown.up .fs-dropdown-list,#plugin-information .fs-dropdown.up .fs-dropdown-list{-moz-border-radius:3px 3px 0 3px;-webkit-border-radius:3px 3px 0 3px;border-radius:3px 3px 0 3px}#plugin-information .fs-dropdown .button-group{width:100%}#plugin-information .fs-dropdown .button-group .button{float:none;font-size:14px;font-weight:normal;text-transform:none}#plugin-information .fs-dropdown .fs-dropdown-list{margin-top:1px}#plugin-information .fs-dropdown.up .fs-dropdown-list{top:auto;bottom:100%;margin-bottom:2px}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group{text-align:center;display:table}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button{display:table-cell}#plugin-information.wp-core-ui .fs-pricing-body .fs-dropdown .button-group .button:not(.fs-dropdown-arrow-button){left:1px;width:100%}#plugin-information-footer>.button,#plugin-information-footer .fs-dropdown{position:relative;top:3px}#plugin-information-footer>.button.left,#plugin-information-footer .fs-dropdown.left{float:left}#plugin-information-footer>.right,#plugin-information-footer .fs-dropdown{float:right}@media screen and (max-width: 961px){#fs_addons .fs-cards-list .fs-card{height:265px}}
|
vendor/freemius/wordpress-sdk/assets/css/admin/add-ons.css.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sourceRoot":"","sources":["../../scss/admin/_badge.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/add-ons.scss"],"names":[],"mappings":"AAAA,UAEI,kBACA,SACA,QACA,WCckB,QDblB,WACA,yBACA,iBEuCC,mBFtCD,YEuCF,sBFvCE,YEwCM,cFxCN,YACA,iBACA,eE6CC,gBF5CD,8BE6CF,mBF7CE,8BE8CM,WF9CN,8BGPA,0BAEI,gBAEA,mCAEI,WAEA,aACA,YACA,UACA,qBACA,eACA,gBACA,sBACA,eACA,kBAEA,+CAEI,kBACA,OACA,QACA,SACA,MACA,UAGJ,6CAEI,sBACA,gBACA,YACA,kBAEA,gDDsIX,gBCpIe,SDqIb,cCrIa,SDsId,eCtIc,SDuIlB,mBCvIkB,SDwIV,WCxIU,SACA,OACA,QACA,MACA,kBAEA,mDAEI,gBACA,iBACA,eACA,WACA,cDoBnB,gBCnBuC,WDoB1C,mBCpB0C,WDqBlC,WCrBkC,WAI5B,6DAEI,UACA,SACA,cACA,cACA,aACA,2BACA,0BD2Gf,gBC1Ge,SD2Gb,cC3Ga,SD4Gd,eC5Gc,SD6GlB,mBC7GkB,SD8GV,WC9GU,SAEA,gGACI,iBACA,kBAIR,uDAEI,kBACA,YACA,gBACA,WACA,mBACA,uBACA,iBAGJ,uDAEI,eAGJ,6DAEI,yBACA,6BACA,0BACA,kBACA,WAGJ,qDAEI,kBACA,SACA,UACA,mBACA,cACA,iBDpDf,gBCqDe,2BDpDlB,mBCoDkB,2BDnDV,WCmDU,2BACA,yBACA,eACA,iBAKA,gIAEI,kBACA,UACA,WAKZ,qCAGQ,qDAEI,yBACA,iBACA,gBAKA,sDAEI,WAQJ,0HAGI,MFnJX,SE8Jb,6BAEI,uBAMJ,yBACI,uBAGJ,oCACI,
|
1 |
+
{"version":3,"sourceRoot":"","sources":["../../scss/admin/_badge.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/add-ons.scss"],"names":[],"mappings":"AAAA,UAEI,kBACA,SACA,QACA,WCckB,QDblB,WACA,yBACA,iBEuCC,mBFtCD,YEuCF,sBFvCE,YEwCM,cFxCN,YACA,iBACA,eE6CC,gBF5CD,8BE6CF,mBF7CE,8BE8CM,WF9CN,8BGPA,0BAEI,gBAEA,mCAEI,WAEA,aACA,YACA,UACA,qBACA,eACA,gBACA,sBACA,eACA,kBAEA,+CAEI,kBACA,OACA,QACA,SACA,MACA,UAGJ,6CAEI,sBACA,gBACA,YACA,kBAEA,gDDsIX,gBCpIe,SDqIb,cCrIa,SDsId,eCtIc,SDuIlB,mBCvIkB,SDwIV,WCxIU,SACA,OACA,QACA,MACA,kBAEA,mDAEI,gBACA,iBACA,eACA,WACA,cDoBnB,gBCnBuC,WDoB1C,mBCpB0C,WDqBlC,WCrBkC,WAI5B,6DAEI,UACA,SACA,cACA,cACA,aACA,2BACA,0BD2Gf,gBC1Ge,SD2Gb,cC3Ga,SD4Gd,eC5Gc,SD6GlB,mBC7GkB,SD8GV,WC9GU,SAEA,gGACI,iBACA,kBAIR,uDAEI,kBACA,YACA,gBACA,WACA,mBACA,uBACA,iBAGJ,uDAEI,eAGJ,6DAEI,yBACA,6BACA,0BACA,kBACA,WAGJ,qDAEI,kBACA,SACA,UACA,mBACA,cACA,iBDpDf,gBCqDe,2BDpDlB,mBCoDkB,2BDnDV,WCmDU,2BACA,yBACA,eACA,iBAKA,gIAEI,kBACA,UACA,WAKZ,qCAGQ,qDAEI,yBACA,iBACA,gBAKA,sDAEI,WAQJ,0HAGI,MFnJX,SE8Jb,6BAEI,uBAMJ,yBACI,uBAGJ,oCACI,mBACA,WAKA,iZAEI,WAGJ,gDAEI,eAGJ,4DAEI,oBACA,6BAEA,+DAEI,SAEA,kEAEI,UACA,6BAEA,8EAEI,MF5LF,QE6LE,cACA,sBACA,iBACA,WACA,mBAGJ,qEAEI,2BDoCpB,+DACI,WACA,cACA,WC9BI,4DAEI,gBACA,SAEA,+DAEI,YACA,aACA,WACA,mBDlKf,gBCmKmC,YDlKtC,mBCkKsC,YDjK9B,WCiK8B,YAEpB,iEAEI,cACA,WACA,YACA,iBD5LnB,gBC6LmB,2BD5LtB,mBC4LsB,2BD3Ld,WC2Lc,2BACA,sBAGJ,mEAEI,kBAOpB,gDAII,aAEA,6BAKI,4DAEI,aACA,aACA,eAGJ,0EAEI,6BAEA,mFAEI,eACA,kBACA,eACA,eAEA,yFAEI,yBACA,YACA,mBACA,kBACA,UACA,WACA,YACA,yBACA,YACA,kBACA,eACA,gBAGJ,kGAEI,eACA,WA9CA,QA+CA,oBA/CA,QAsDR,4EAEI,WAxDI,QAyDJ,SACA,iBACA,cAGJ,yLAGI,aAIR,0EAEI,WAvEQ,QAwER,aAGJ,iEAEI,WACA,kBACA,iBACA,yBACA,gBAGJ,+DAEI,mBAGJ,6DACI,kBAGJ,4JAGI,kBACA,cACA,iBACA,mBACA,yBACA,mBACA,YACA,sBAGJ,6EAEI,oBACA,YACA,mBAGJ,2EAEI,eAEA,6EAEI,WACA,mBAGJ,8EAEI,kBAQZ,mDAEI,mBAGJ,4CAEI,WACA,iBACA,yBAII,qDAEI,eAGJ,4DAEI,MF1YE,QE2YF,mBACA,cACA,kBAMJ,qDAEI,0BACA,eACA,kBACA,YACA,MFzZE,QE2ZF,iEAEI,gBACA,WACA,cACA,kBAKJ,+DAEI,mBAMhB,qDAEI,WACA,YACA,eAQN,uIACE,kBACA,WACA,MACA,QAEA,mJACE,WAIJ,6JACE,0BACA,mCACA,kCACA,SACA,kBAKF,yMACE,4BAGF,+KACE,6BAKF,6LACE,yBAGF,mKACE,0BAIJ,+HACE,kBACA,WACA,SACA,iBACA,cACA,yBACA,sBACA,UACA,YACA,gBDtcD,gBCucC,iGDtcJ,mBCscI,iGDrcI,WCqcJ,iGAEA,qIACE,SAEA,yIACE,cACA,iBACA,qBACA,iBAGF,iJACE,iBF/dU,QEgeV,WAEA,qJACE,WAON,iJDxeD,mBCyeG,cDxeN,sBCweM,cDveE,cCueF,cAKF,qID9eD,mBC+eG,cD9eN,sBC8eM,cD7eE,cC6eF,cAMJ,+CACE,WAEA,uDACE,WACA,eACA,mBACA,oBAIJ,mDACE,eAIA,sDACE,SACA,YACA,kBAMR,2EACE,kBAEA,cAEA,mFACE,mBAEA,kHACE,SACA,WAMJ,2EACE,kBACA,QAEA,qFACE,WAIJ,0EACE,YAIJ,qCAKY,mCAEI","file":"add-ons.css"}
|
vendor/freemius/wordpress-sdk/assets/css/admin/affiliation.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#fs_affiliation_content_wrapper #messages{margin-top:25px}#fs_affiliation_content_wrapper h3{font-size:24px;padding:0;margin-left:0}#fs_affiliation_content_wrapper ul li{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;list-style-type:none}#fs_affiliation_content_wrapper ul li:before{content:"✓";margin-right:10px;font-weight:bold}#fs_affiliation_content_wrapper p:not(.description),#fs_affiliation_content_wrapper li,#fs_affiliation_content_wrapper label{font-size:16px !important;line-height:26px !important}#fs_affiliation_content_wrapper .button{margin-top:20px;margin-bottom:7px;line-height:35px;height:40px;font-size:16px}#fs_affiliation_content_wrapper .button#cancel_button{margin-right:5px}#fs_affiliation_content_wrapper form .input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form .input-container .input-label{font-weight:bold;display:block;width:100%}#fs_affiliation_content_wrapper form .input-container.input-container-text label,#fs_affiliation_content_wrapper form .input-container.input-container-text input,#fs_affiliation_content_wrapper form .input-container.input-container-text textarea{display:block}#fs_affiliation_content_wrapper form .input-container #add_domain,#fs_affiliation_content_wrapper form .input-container .remove-domain{text-decoration:none;display:inline-block;margin-top:3px}#fs_affiliation_content_wrapper form .input-container #add_domain:focus,#fs_affiliation_content_wrapper form .input-container .remove-domain:focus{box-shadow:none}#fs_affiliation_content_wrapper form .input-container #add_domain.disabled,#fs_affiliation_content_wrapper form .input-container .remove-domain.disabled{color:#aaa;cursor:default}#fs_affiliation_content_wrapper form #extra_domains_container .description{margin-top:0;position:relative;top:-4px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain{display:inline-block;margin-right:5px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain:last-of-type{margin-bottom:0}
|
1 |
+
#fs_affiliation_content_wrapper #messages{margin-top:25px}#fs_affiliation_content_wrapper h3{font-size:24px;padding:0;margin-left:0}#fs_affiliation_content_wrapper ul li{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;list-style-type:none}#fs_affiliation_content_wrapper ul li:before{content:"✓";margin-right:10px;font-weight:bold}#fs_affiliation_content_wrapper p:not(.description),#fs_affiliation_content_wrapper li,#fs_affiliation_content_wrapper label{font-size:16px !important;line-height:26px !important}#fs_affiliation_content_wrapper .button{margin-top:20px;margin-bottom:7px;line-height:35px;height:40px;font-size:16px}#fs_affiliation_content_wrapper .button#cancel_button{margin-right:5px}#fs_affiliation_content_wrapper form .input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form .input-container .input-label{font-weight:bold;display:block;width:100%}#fs_affiliation_content_wrapper form .input-container.input-container-text label,#fs_affiliation_content_wrapper form .input-container.input-container-text input,#fs_affiliation_content_wrapper form .input-container.input-container-text textarea{display:block}#fs_affiliation_content_wrapper form .input-container #add_domain,#fs_affiliation_content_wrapper form .input-container .remove-domain{text-decoration:none;display:inline-block;margin-top:3px}#fs_affiliation_content_wrapper form .input-container #add_domain:focus,#fs_affiliation_content_wrapper form .input-container .remove-domain:focus{box-shadow:none}#fs_affiliation_content_wrapper form .input-container #add_domain.disabled,#fs_affiliation_content_wrapper form .input-container .remove-domain.disabled{color:#aaa;cursor:default}#fs_affiliation_content_wrapper form #extra_domains_container .description{margin-top:0;position:relative;top:-4px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container{margin-bottom:15px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain{display:inline-block;margin-right:5px}#fs_affiliation_content_wrapper form #extra_domains_container .extra-domain-input-container .domain:last-of-type{margin-bottom:0}
|
vendor/freemius/wordpress-sdk/assets/css/admin/checkout.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
@media screen and (max-width: 782px){#wpbody-content{padding-bottom:0 !important}}
|
1 |
+
@media screen and (max-width: 782px){#wpbody-content{padding-bottom:0 !important}}
|
vendor/freemius/wordpress-sdk/assets/css/admin/clone-resolution.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.fs-notice[data-id^=clone_resolution_options_notice]{padding:0;color:inherit !important}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-body{padding:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-header{padding:5px 10px}.fs-notice[data-id^=clone_resolution_options_notice] ol{margin-top:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{display:flex;flex-direction:row;padding:0 10px 10px}@media(max-width: 750px){.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{flex-direction:column}}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option{border:1px solid #ccc;padding:10px 10px 15px 10px;flex:auto;margin:5px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:first-child{margin-left:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:last-child{margin-right:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option strong{font-size:1.2em;padding:2px;line-height:1.5em}.fs-notice[data-id^=clone_resolution_options_notice] a{text-decoration:none}.fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:10px}.rtl .fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:0;margin-left:10px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-documentation-container{padding:0 10px 15px}.fs-notice[data-id=temporary_duplicate_notice] #fs_clone_resolution_error_message{border:1px solid #d3135a;background:#fee;color:#d3135a;padding:10px}.fs-notice[data-id=temporary_duplicate_notice] ol{margin-top:0}
|
1 |
+
.fs-notice[data-id^=clone_resolution_options_notice]{padding:0;color:inherit !important}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-body{padding:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-notice-header{padding:5px 10px}.fs-notice[data-id^=clone_resolution_options_notice] ol{margin-top:0;margin-bottom:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{display:flex;flex-direction:row;padding:0 10px 10px}@media(max-width: 750px){.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-options-container{flex-direction:column}}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option{border:1px solid #ccc;padding:10px 10px 15px 10px;flex:auto;margin:5px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:first-child{margin-left:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option:last-child{margin-right:0}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-resolution-option strong{font-size:1.2em;padding:2px;line-height:1.5em}.fs-notice[data-id^=clone_resolution_options_notice] a{text-decoration:none}.fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:10px}.rtl .fs-notice[data-id^=clone_resolution_options_notice] .button{margin-right:0;margin-left:10px}.fs-notice[data-id^=clone_resolution_options_notice] .fs-clone-documentation-container{padding:0 10px 15px}.fs-notice[data-id=temporary_duplicate_notice] #fs_clone_resolution_error_message{border:1px solid #d3135a;background:#fee;color:#d3135a;padding:10px}.fs-notice[data-id=temporary_duplicate_notice] ol{margin-top:0}
|
vendor/freemius/wordpress-sdk/assets/css/admin/common.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;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,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(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,.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);background:#ececec;box-shadow:0 0 4px rgba(0,0,0,.1),inset 0 1px 3px 0 rgba(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,.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,.5);z-index:999;-moz-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-o-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-ms-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-webkit-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);transition:.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-
|
1 |
+
.fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:#fff;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,.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,.3);box-shadow:0 2px 1px -1px rgba(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,.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);background:#ececec;box-shadow:0 0 4px rgba(0,0,0,.1),inset 0 1px 3px 0 rgba(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,.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,.5);z-index:999;-moz-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-o-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-ms-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);-webkit-transition:.4s cubic-bezier(0.54, 1.6, 0.5, 1);transition:.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}body.fs-loading,body.fs-loading *{cursor:wait !important}#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}}.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,.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,.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,.3);box-shadow:0 2px 2px rgba(6,113,6,.3);opacity:.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: 1250px){#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:"↳";padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:"↲"}.fs-submenu-item.pricing.upgrade-mode{color:#adff2f}.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}
|
vendor/freemius/wordpress-sdk/assets/css/admin/common.css.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sourceRoot":"","sources":["../../scss/admin/_badge.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/_themes.scss","../../scss/admin/_switch.scss","../../scss/admin/common.scss","../../scss/admin/_plugin-upgrade-notice.scss"],"names":[],"mappings":"CAAA,UAEI,kBACA,SACA,QACA,WCckB,QDblB,WACA,yBACA,iBEuCC,mBFtCD,YEuCF,sBFvCE,YEwCM,cFxCN,YACA,iBACA,eE6CC,gBF5CD,8BE6CF,mBF7CE,8BE8CM,WF9CN,8BGNI,wDACI,kBACA,QACA,MAEA,kEACI,kBACA,MACA,gBACA,kBAEA,yFACI,gBAGJ,sFACI,mBClBpB,WAEI,kBACA,qBAGA,WACA,2CACA,YACA,wBACA,sBACA,gCAEA,mBACA,mEACA,eAEA,gBAEI,qBACA,WACA,yBAGJ,sBAEI,kBACA,QACA,WACA,YACA,sBACA,gCACA,kBACA,gBFoDS,iBEnDyB,KFqDxC,8GACA,6DACA,0DACA,yDACA,wDACA,6DEzDM,gDACA,YFsIH,gBErIG,oCFsID,cEtIC,oCFuIF,eEvIE,oCFwIN,mBExIM,oCFyIE,WEzIF,oCAGJ,6BAEI,QAEJ,4BAEI,SAIJ,oBAEI,QACA,iBFVH,mBEWG,KFVN,sBEUM,KFTE,cESF,KAEA,+BAEI,MACA,MA/DE,KAgEF,OAhEE,KF+CT,mBEkBO,KFjBV,sBEiBU,KFhBF,cEgBE,KAGJ,sCAEI,UAGJ,0BAEI,WHjByB,QGmBzB,qCAEI,UAOR,6BAEI,iBAEA,wCAEI,MACA,MA5FI,KA6FJ,OA7FI,KF8Cf,mBEgDW,KF/Cd,sBE+Cc,KF9CN,cE8CM,KAGJ,8CAEI,
|
1 |
+
{"version":3,"sourceRoot":"","sources":["../../scss/admin/_badge.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/_themes.scss","../../scss/admin/_switch.scss","../../scss/admin/common.scss","../../scss/admin/_plugin-upgrade-notice.scss"],"names":[],"mappings":"CAAA,UAEI,kBACA,SACA,QACA,WCckB,QDblB,WACA,yBACA,iBEuCC,mBFtCD,YEuCF,sBFvCE,YEwCM,cFxCN,YACA,iBACA,eE6CC,gBF5CD,8BE6CF,mBF7CE,8BE8CM,WF9CN,8BGNI,wDACI,kBACA,QACA,MAEA,kEACI,kBACA,MACA,gBACA,kBAEA,yFACI,gBAGJ,sFACI,mBClBpB,WAEI,kBACA,qBAGA,WACA,2CACA,YACA,wBACA,sBACA,gCAEA,mBACA,mEACA,eAEA,gBAEI,qBACA,WACA,yBAGJ,sBAEI,kBACA,QACA,WACA,YACA,sBACA,gCACA,kBACA,gBFoDS,iBEnDyB,KFqDxC,8GACA,6DACA,0DACA,yDACA,wDACA,6DEzDM,gDACA,YFsIH,gBErIG,oCFsID,cEtIC,oCFuIF,eEvIE,oCFwIN,mBExIM,oCFyIE,WEzIF,oCAGJ,6BAEI,QAEJ,4BAEI,SAIJ,oBAEI,QACA,iBFVH,mBEWG,KFVN,sBEUM,KFTE,cESF,KAEA,+BAEI,MACA,MA/DE,KAgEF,OAhEE,KF+CT,mBEkBO,KFjBV,sBEiBU,KFhBF,cEgBE,KAGJ,sCAEI,UAGJ,0BAEI,WHjByB,QGmBzB,qCAEI,UAOR,6BAEI,iBAEA,wCAEI,MACA,MA5FI,KA6FJ,OA7FI,KF8Cf,mBEgDW,KF/Cd,sBE+Cc,KF9CN,cE8CM,KAGJ,8CAEI,UC/FZ,kCACI,uBAIR,UAEI,cACA,YAGJ,sBAEI,0BAEA,yBAJJ,sBAKQ,wBAIR,WAEI,kBAEA,wBAEI,8BAGJ,mBAEI,YAIJ,qBAEI,gCACA,oCAGJ,2BAEI,cACA,YAGJ,qBASI,eACA,WACA,YAEA,2BAEI,WAIJ,uBAEI,eACA,qBAIR,iCAEI,0BACA,WACA,iBACA,kBACA,SACA,YACA,WHvCH,mBGwCG,YHvCN,sBGuCM,YHtCE,cGsCF,YACA,UACA,eACA,iBACA,YAMJ,oEAII,yBAMJ,0BAMI,WAIR,kBAEI,eACA,SACA,WACA,QACA,mBACA,kBACA,YACA,aHtEC,gBGuED,2BHtEF,mBGsEE,2BHrEM,WGqEN,2BHiHA,QGhHiB,IHkHjB,yBGhHA,wBH8GA,QG5GqB,EH8GrB,0BG3GA,sCAEI,YACA,qBAIR,qCACI,kBAEI,WAIR,qCACI,kBAEI,cAIR,sCACI,cAEI,cAIR,qCACI,kBAEI,OACA,SACA,mBAIR,mCAGI,YACA,cAKA,wCAGI,YAQA,sCAEI,cAGJ,oCAEI,cAKZ,oCAEI,yBAEJ,iBAEI,SACA,WACA,YACA,iBACA,mBACA,qBACA,uDACA,wBACA,mBAIA,oBACI,gBC/NR,6BAEI,SACA,yBACA,aACA,cACA","file":"common.css"}
|
vendor/freemius/wordpress-sdk/assets/css/admin/connect.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,.3);box-shadow:0px 1px 2px rgba(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,.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(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:" ➜"}#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 .5s ease;-o-transition:background .5s ease;-ms-transition:background .5s ease;-webkit-transition:background .5s ease;transition:background .5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions>.fs-trigger{font-size:.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{overflow:initial;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:.85em;padding:5px;background:rgba(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 .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:rgba(0,0,0,.8);color:#fff !important;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.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,.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:" »"}.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,.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:#fff;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,.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}#license_issues_link{display:block;text-align:center;font-size:.9em;margin-top:10px}/*# sourceMappingURL=connect.css.map */
|
1 |
+
.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .dashicons{float:none !important}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:rgba(0,0,0,.8);color:#fff !important;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.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,.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_connect{width:484px;margin:60px auto 20px auto}#fs_connect a{color:inherit}#fs_connect a:not(.button){text-decoration:underline}#fs_connect .fs-box-container{box-shadow:0 1px 2px rgba(0,0,0,.3);border-radius:3px;overflow:hidden;padding-top:40px;background:#f0f0f1}@media screen and (max-width: 483px){#fs_connect{width:auto;margin:30px 0 0 -10px}#fs_connect .fs-box-container{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}}#fs_connect .fs-content{background:#fff;padding:30px 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,.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content h2{line-height:1.5em}#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-content{padding-bottom:10px}#fs_connect.require-license-key .fs-actions{border-top:none}#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:#fff;border-width:1px 0;border-style:solid;border-color:#f1f1f1}#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:" ➜"}#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:#fff;-moz-transition:background .5s ease;-o-transition:background .5s ease;-ms-transition:background .5s ease;-webkit-transition:background .5s ease;transition:background .5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions>.fs-trigger{font-size:.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions>.fs-trigger .fs-arrow::after{content:"→";width:20px;display:inline-block}#fs_connect .fs-permissions.fs-open>.fs-trigger .fs-arrow::after{content:"↓" !important}#fs_connect .fs-permissions ul li{padding-left:0;padding-right:0}@media screen and (max-width: 483px){#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:inherit;text-decoration:underline}#fs_connect .fs-header{padding:0;line-height:0;height:0;position:relative}#fs_connect .fs-header .fs-site-icon,#fs_connect .fs-header .fs-connect-logo{position:absolute;top:-8px;border-radius:50%}#fs_connect .fs-header .fs-site-icon{left:152px}#fs_connect .fs-header .fs-connect-logo{right:152px}#fs_connect .fs-header .fs-site-icon,#fs_connect .fs-header img,#fs_connect .fs-header object{width:50px;height:50px;border-radius:50%}#fs_connect .fs-header .fs-plugin-icon{position:absolute;overflow:hidden;top:-23px;left:50%;margin-left:-44px;border-radius:50%;z-index:1}#fs_connect .fs-header .fs-plugin-icon,#fs_connect .fs-header .fs-plugin-icon img{width:80px;height:80px}#fs_connect .fs-header .dashicons-wordpress-alt{font-size:40px;background:#01749a;color:#fff;width:40px;height:40px;padding:5px;border-radius:50%}#fs_connect .fs-header .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-header .dashicons-plus.fs-first{left:28%}#fs_connect .fs-header .dashicons-plus.fs-second{left:65%}#fs_connect .fs-header .fs-plugin-icon,#fs_connect .fs-header .fs-connect-logo,#fs_connect .fs-header .fs-site-icon{border:1px solid #efefef;padding:3px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:.85em;padding:10px 5px}#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:20px;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_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{border-radius:3px}.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:" »"}.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-header .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-header .fs-connect-logo{right:auto;left:20px}.rtl #fs_connect .fs-permissions>.fs-trigger .fs-arrow::after{content:"←"}#fs_theme_connect_wrapper{position:fixed;top:0;height:100%;width:100%;z-index:99990;background:rgba(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:#fff;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:0;margin-bottom:20px}#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}#license_issues_link{display:block;text-align:center;font-size:.9em;margin-top:10px}.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .dashicons{float:none !important}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:rgba(0,0,0,.8);color:#fff !important;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.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,.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-permissions .fs-permission.fs-disabled{color:#aaa}.fs-permissions .fs-permission.fs-disabled .fs-permission-description span{color:#aaa}.fs-permissions .fs-permission .fs-switch-feedback{position:absolute;right:15px;top:52px}.fs-permissions ul{height:0;overflow:hidden;margin:0}.fs-permissions ul li{padding:17px 15px;margin:0;position:relative}.fs-permissions ul li>i.dashicons{float:left;font-size:30px;width:30px;height:30px;padding:5px}.fs-permissions ul li .fs-switch{float:right}.fs-permissions ul li .fs-permission-description{margin-left:55px}.fs-permissions ul li .fs-permission-description span{font-size:14px;font-weight:500;color:#23282d}.fs-permissions ul li .fs-permission-description .fs-tooltip{font-size:13px;font-weight:bold}.fs-permissions ul li .fs-permission-description .fs-tooltip-trigger .dashicons{margin:-1px 2px 0 2px}.fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}.fs-permissions.fs-open{background:#fff}.fs-permissions.fs-open ul{overflow:initial;height:auto;margin:20px 0 10px 0}.fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-right:10px}.fs-permissions .fs-switch-feedback.success{color:#71ae00}.rtl .fs-permissions .fs-switch-feedback{right:auto;left:15px}.rtl .fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-left:10px;margin-right:0}.rtl .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl .fs-permissions ul li .fs-switch{float:left}.rtl .fs-permissions ul li i.dashicons{float:right}
|
vendor/freemius/wordpress-sdk/assets/css/admin/connect.css.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sourceRoot":"","sources":["../../scss/admin/
|
1 |
+
{"version":3,"sourceRoot":"","sources":["../../scss/admin/_tooltip.scss","../../scss/_mixins.scss","../../scss/_colors.scss","../../scss/admin/connect.scss","../../scss/admin/_multisite-options.scss","../../scss/admin/_gdpr-consent.scss","../../scss/admin/_permissions.scss"],"names":[],"mappings":"CAEA,oBAOI,kBALA,2BAEI,YAKJ,+BACI,sBAGJ,gCAEI,UACA,kBC4JH,gBD3JG,wBC4JD,cD5JC,wBC6JF,eD7JE,wBC8JN,mBD9JM,wBC+JE,WD/JF,wBACA,kBACA,WE+DY,eF9DZ,sBACA,0BACA,eACA,aACA,eACA,YACA,kBACA,WACA,QCiBH,mBDhBG,ICiBN,sBDjBM,ICkBE,cDlBF,ICyBH,gBDxBG,2BCyBN,mBDzBM,2BC0BE,WD1BF,2BACA,kBACA,iBACA,gBACA,+BAEA,qCAEI,iBACA,UACA,YAGJ,uCAEI,YACA,cACA,QACA,SACA,mBACA,2BACA,gEACA,kBACA,SACA,UAEA,4CAEI,WACA,UAOR,sCAEI,mBACA,UG9DZ,YAEI,MAPS,MAQT,2BAEA,cACI,cAEA,2BACI,0BAIR,8BACI,oCACA,cAjBY,IAkBZ,gBACA,iBACA,mBAKJ,qCAvBJ,YAwBQ,WACA,sBAEA,8BFoBH,gBEnBO,KFoBV,mBEpBU,KFqBF,WErBE,MAIR,wBAEI,gBACA,kBAGA,kCACI,gBACA,MD7BY,QC8BZ,yBFMP,gBELO,2BFMV,mBENU,2BFOF,WEPE,2BACA,kBACA,YACA,mBAGJ,2BACI,kBAGJ,0BAEI,SACA,UACA,gBAIR,sCACI,kBACA,YACA,wBAEA,4CACI,WAGJ,iDACI,kBACA,QACA,UAKJ,4CACI,oBAGJ,4CACI,gBAIA,4DACI,eAKZ,qCACI,kBACA,YACA,YACA,sBACA,iBACA,iBACA,yBACA,qBAEA,yCACI,iBACA,eAIR,wBAEI,kBACA,gBACA,mBACA,mBACA,aDnHK,QCqHL,gCAEI,mBACA,iBACA,YACA,eACA,gBAEA,2CAEI,eACA,iBACA,kBAGJ,+CAEI,mBACA,kBAEA,qDAEI,aAKA,gEAEI,WAKZ,iDAEI,YAiBJ,qEAEI,WAKZ,4BAEI,kBACA,gBFdH,gBEeG,oBFdD,cEcC,oBFbF,eEaE,oBFZN,mBEYM,oBFXE,WEWF,oBAEA,wDACI,kBACA,aAGJ,wCAEI,eACA,qBACA,kBACA,cAEA,yDACI,YACA,WACA,qBAMA,iEACI,uBAKZ,kCACI,eACA,gBAGJ,qCACI,+BAEI,YACA,aAKZ,mCACI,YACA,gBACA,WAEA,qCACI,kBACA,cACA,SACA,UAGJ,qCACI,cACA,0BAYR,uBAEI,UACA,cAEA,SACA,kBAGA,6EAGI,kBACA,SACA,cAlBc,IAqBlB,qCAEI,KArBQ,MAwBZ,wCAEI,MA1BQ,MA6BZ,8FAII,MAvCI,KAwCJ,OAxCI,KAyCJ,cArCc,IAwClB,uCAEI,kBACA,gBAEA,UACA,SACA,kBACA,cAhDc,IAiDd,UAEA,kFACI,MAvDO,KAwDP,OAxDO,KA4Df,gDAEI,eACA,WD1PM,QC2PN,WACA,WACA,YACA,QAlEU,IAmEV,cAjEc,IAoElB,uCAEI,kBACA,QACA,eACA,iBACA,WAEA,gDAEI,SAEJ,iDAEI,SAIR,oHAII,yBACA,QApVG,IAqVH,gBAIR,sBAEI,kBACA,gBACA,iBAGA,8CAEI,WAGJ,wBAEI,qBC5WZ,gCACI,gBACA,sBACA,YAEA,kCACI,qBAEA,wCACI,gBAGJ,2CACI,iBAIR,sDACI,cACA,UAEA,4EACI,iBAEA,iGACI,aAKZ,yDACI,aACA,cAEA,kEACI,0BACA,gBCpCZ,oBAEI,aACA,gBACA,sBACA,aACA,kBAEA,gCAEI,cACA,kBACA,iBACA,gBAGJ,0BAEI,yBACA,gBAEA,sCAEI,MHHY,QGOpB,wCAEI,eAEA,8CAEI,eACA,cAEA,oDAEI,WACA,iBAGJ,0DAEI,cACA,kBAKZ,oCAEI,cACA,iBAEA,gDAEI,0BAWA,yDAEI,YAIR,yCAEI,cACA,kBFySR,iBAEI,kBAEA,6BAEI,kBACA,mBAII,gDAEI,eACA,iBACA,kBAKA,0DAEI,aAKA,qEAEI,WAKZ,sDAEI,WAOR,0CAEI,WACA,UAGJ,6CAEI,WACA,UAOJ,8DACI,YAMhB,0BACI,eACA,MACA,YACA,WACA,cACA,2BACA,kBACA,gBAEA,iCACI,WACA,qBACA,sBACA,YAGJ,uCACI,WACA,eACA,YACA,WACA,kBACA,QACA,SACA,6BACA,SAGJ,sCACI,MACA,gBACA,qBACA,sBACA,aACA,mBAKI,kGAEI,cAQZ,gCAEI,SFpbH,gBEqbG,KFpbN,mBEobM,KFnbE,WEmbF,KAMJ,uCAEI,UAKA,oDAEI,4BAEJ,0DAEI,4BAMJ,uDAEI,yBAEJ,6DAEI,yBAMJ,qDAEI,2BAEJ,2DAEI,2BAMJ,sDAEI,0BAEJ,4DAEI,0BAKZ,qBACI,cACA,kBACA,eACA,gBH3iBJ,oBAOI,kBALA,2BAEI,YAKJ,+BACI,sBAGJ,gCAEI,UACA,kBC4JH,gBD3JG,wBC4JD,cD5JC,wBC6JF,eD7JE,wBC8JN,mBD9JM,wBC+JE,WD/JF,wBACA,kBACA,WE+DY,eF9DZ,sBACA,0BACA,eACA,aACA,eACA,YACA,kBACA,WACA,QCiBH,mBDhBG,ICiBN,sBDjBM,ICkBE,cDlBF,ICyBH,gBDxBG,2BCyBN,mBDzBM,2BC0BE,WD1BF,2BACA,kBACA,iBACA,gBACA,+BAEA,qCAEI,iBACA,UACA,YAGJ,uCAEI,YACA,cACA,QACA,SACA,mBACA,2BACA,gEACA,kBACA,SACA,UAEA,4CAEI,WACA,UAOR,sCAEI,mBACA,UMhEJ,2CACI,WAEA,2EACI,WAIR,mDACI,kBACA,WACA,SAIR,mBACI,SACA,gBACA,SAEA,sBACI,kBACA,SACA,kBAEA,kCACI,WACA,UA/BO,KAgCP,MAhCO,KAiCP,OAjCO,KAkCP,YAGJ,iCACI,YAGJ,iDACI,iBAEA,sDACI,eACA,gBACA,cAGJ,6DACI,eACA,iBAGJ,gFACI,sBAGJ,mDACI,iBAMhB,wBACI,gBAEA,2BACI,iBACA,YACA,qBAKJ,qDACI,kBAGJ,4CACI,MJlEU,QIqEd,yCAEI,WACA,UAEA,0DACI,iBACA,eAUA,sDACI,kBACA,cAGJ,sCACI,WAGJ,uCACI","file":"connect.css"}
|
vendor/freemius/wordpress-sdk/assets/css/admin/debug.css
CHANGED
@@ -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}
|
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-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}
|
vendor/freemius/wordpress-sdk/assets/css/admin/debug.css.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sourceRoot":"","sources":["../../scss/admin/debug.scss"],"names":[],"mappings":"
|
1 |
+
{"version":3,"sourceRoot":"","sources":["../../scss/admin/_tag.scss","../../scss/admin/debug.scss"],"names":[],"mappings":"AAAA,yBAEI,mBACA,WACA,qBACA,kBACA,YACA,eACA,iBACA,wBAEA,yCAEI,mBAEJ,yCAEI,mBAEJ,+CAEI,mBAEJ,2CAEI,mBCtBR,iBAEI,eACA,iBACA,aAIA,mBACI,sCACA,eAEA,sBACI,WAGJ,sBACI,mBAEA,gCACI,mBAIA,wCACI,cAEJ,sCACI,cAEJ,0CACI,cACA,iBAGA,oFAEI,yBAGR,sCACI,cAEJ,2CACI","file":"debug.css"}
|
vendor/freemius/wordpress-sdk/assets/css/admin/dialog-boxes.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(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:#eee 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:.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 .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .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:#eee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:last-of-type{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}.rtl .fs-modal .fs-modal-footer{text-align:left}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,.fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:left;line-height:30px}.rtl .fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label,.rtl .fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:right}.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}}.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-modal.fs-modal-email-address-update .fs-modal-body input[type=text]{width:100%}.fs-modal.fs-modal-email-address-update p{margin-bottom:0}.fs-modal.fs-modal-email-address-update ul{margin:1em .5em}.fs-modal.fs-modal-email-address-update ul li label span{float:left;margin-top:0}.fs-modal.fs-modal-email-address-update ul li label span:last-child{display:block;float:none;margin-left:20px}.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:.3;-o-transform:.3;-ms-transform:.3;-webkit-transform:.3;transform:.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,.1) !important}/*# sourceMappingURL=dialog-boxes.css.map */
|
1 |
+
.fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,.6)}@media(min-width: 961px){.fs-modal{padding-left:160px}.rtl .fs-modal{padding-left:0;padding-right:160px}}.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:#eee 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:.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 .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;transition:all .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:#eee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:last-of-type{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}.rtl .fs-modal .fs-modal-footer{text-align:left}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,.fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:left;line-height:30px}.rtl .fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label,.rtl .fs-modal.fs-modal-deactivation-feedback .feedback-from-snooze-label{float:right}.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:20px;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}}.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-modal.fs-modal-email-address-update .fs-modal-body input[type=text]{width:100%}.fs-modal.fs-modal-email-address-update p{margin-bottom:0}.fs-modal.fs-modal-email-address-update ul{margin:1em .5em}.fs-modal.fs-modal-email-address-update ul li label span{float:left;margin-top:0}.fs-modal.fs-modal-email-address-update ul li label span:last-child{display:block;float:none;margin-left:20px}.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:.3;-o-transform:.3;-ms-transform:.3;-webkit-transform:.3;transform:.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,.1) !important}
|
vendor/freemius/wordpress-sdk/assets/css/admin/dialog-boxes.css.map
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sourceRoot":"","sources":["../../scss/admin/_modal-common.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/_deactivation-feedback.scss","../../scss/admin/_subscription-cancellation.scss","../../scss/admin/_license-activation.scss","../../scss/admin/_user-change.scss","../../scss/admin/_data-debug-mode.scss","../../scss/admin/_multisite-options.scss","../../scss/admin/_license-key-resend.scss","../../scss/admin/_email-address-update.scss","../../scss/admin/_ajax-loader.scss","../../scss/admin/_auto-install.scss","../../scss/admin/_buttons.scss"],"names":[],"mappings":"AAGA,UACC,eACA,cACA,YACA,WACA,MACA,eACA,aACA,0BAEA,qBAEC,sBAGD,2BACC,uBACA,kBACA,SACA,mBACA,oBACA,UACA,eACA,YAEA,yBAVD,2BAWE,iBACA,sBACA,kBACA,mBACA,WAEA,qDACC,iBAKH,iBACC,cAEA,wBACC,cAGD,kCACC,QAKD,sCACC,
|
1 |
+
{"version":3,"sourceRoot":"","sources":["../../scss/admin/_modal-common.scss","../../scss/_colors.scss","../../scss/_mixins.scss","../../scss/admin/_deactivation-feedback.scss","../../scss/admin/_subscription-cancellation.scss","../../scss/admin/_license-activation.scss","../../scss/admin/_user-change.scss","../../scss/admin/_data-debug-mode.scss","../../scss/admin/_multisite-options.scss","../../scss/admin/_license-key-resend.scss","../../scss/admin/_email-address-update.scss","../../scss/admin/_ajax-loader.scss","../../scss/admin/_auto-install.scss","../../scss/admin/_buttons.scss"],"names":[],"mappings":"AAGA,UACC,eACA,cACA,YACA,WACA,MACA,eACA,aACA,0BAEA,yBAVD,UAWE,mBAEA,eACC,eACA,qBAIF,qBAEC,sBAGD,2BACC,uBACA,kBACA,SACA,mBACA,oBACA,UACA,eACA,YAEA,yBAVD,2BAWE,iBACA,sBACA,kBACA,mBACA,WAEA,qDACC,iBAKH,iBACC,cAEA,wBACC,cAGD,kCACC,QAKD,sCACC,oBCjC4B,QDoC7B,oCACC,iBCtCuB,QD2CxB,mCACC,oBCvCyB,QD0C1B,iCACC,iBC5CoB,QDiDrB,oCACC,oBCnD0B,QDsD3B,kCACC,iBCxDqB,QD6DvB,oDAEC,SACA,mBACA,aAGE,2BACI,6BACA,mBACA,kBACA,kBACN,oBAGM,8BACI,SACA,UACA,yBACA,gBACA,iBACA,cACA,6BACA,oBACA,mCAGJ,qCACI,kBACA,WACA,SACA,eACA,WE9EP,mBF+EO,KE9EV,sBF8EU,KE7EF,cF6EE,KACA,YE+CP,gBF9CO,oBE+CL,cF/CK,oBEgDN,eFhDM,oBEiDV,mBFjDU,oBEkDF,WFlDE,oBAEA,2CACI,WACA,gBAKZ,sGAEC,qBAMJ,yBACC,gBAEA,2BACC,eAGD,4BACC,eACA,kBAGD,6BACC,gBAEA,gCACC,iBACA,eACA,aAKH,2BACC,0BACA,iBAEA,mCACC,aAEA,gDACC,SAMF,yCACC,SACA,aAGD,uCACC,aASS,0CACI,WACA,UAId,gCACC,gBAKH,kBACC,gBG/MA,kHACC,sBAEA,kQACC,WAKD,0FACC,sBACA,YACA,aAGD,yBACC,6DACC,mBAEA,0JACC,iBAGD,mEACC,cAEA,wEACC,mBACA,iBAOL,wIAEC,WACA,iBAEA,kJACC,YAIC,yDACI,wBAEA,4DACI,aACA,kBAKZ,+BACC,aC1DA,wEACC,UACA,iBACA,eACA,gBAIM,iFACI,WACA,QACA,kBAEA,sFACI,YAIR,gFACI,cACA,iBAEA,qFACI,cACA,kBCvBd,0EACC,WAOD,6IACC,WAGD,mDACC,SAIA,0EACC,kBACA,QACA,WACA,iBAGD,wEACC,gBACA,WACA,YACA,cACA,QACA,kBAEA,8EACC,SAQJ,4BACC,eC1CA,2EACC,WAMF,wCACC,WACA,yBAEA,2CACC,cACA,kBAIA,uEACC,qBAGD,sFACC,gBACA,aAIF,0EACC,WAEA,8EACC,cACA,WAEA,sKACC,mBAGD,oFACC,SACA,iBACA,kBAGD,kFACC,WAEA,wFACC,WChDJ,4FACC,WCHH,gCACI,gBACA,sBACA,YAEA,kCACI,qBAEA,wCACI,gBAGJ,2CACI,iBAIR,sDACI,cACA,UAEA,4EACI,iBAEA,iGACI,aAKZ,yDACI,aACA,cAEA,kEACI,0BACA,gBClCR,+DAEI,gBACA,kBAKA,sEAEI,YAGJ,wDAEI,cACA,mBAMJ,qEAEI,WAGJ,mEAEI,YACA,gBAEA,yBALJ,mEAMQ,gBAYJ,oGAEI,iBACA,gBAGJ,4EAEI,WACA,iBACA,cAMhB,4BAEI,eACA,qBChEI,wEACI,WAIR,0CACI,gBAGJ,2CACI,gBAGI,yDACI,WACA,aAEA,oEACI,cACA,WACA,iBClBpB,gBAEI,kBACA,YACA,YACA,YAEA,oCAEI,kBACA,MACA,iBV8BY,QU7BZ,WACA,YT6KJ,yCACA,sCACA,qCACA,oCACA,iCAIA,gCACA,6BACA,4BACA,2BACA,wBAoBA,mCACA,sCACA,uCACA,2CACA,wCApBA,mCACA,gCACA,+BACA,8BACA,2BAhEA,eS5HuB,GT6HrB,aS7HqB,GT8HtB,cS9HsB,GT+H1B,kBS/H0B,GTgIjB,UShIiB,GAKnB,sCAEI,STyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,UTyLR,sBACA,yBACA,0BACA,8BACA,2BS/LI,sCAEI,UTyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,UTyLR,sBACA,yBACA,0BACA,8BACA,2BS/LI,sCAEI,UTyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,UTyLR,sBACA,yBACA,0BACA,8BACA,2BS/LI,sCAEI,WTyLR,qBACA,wBACA,yBACA,6BACA,0BS/LI,sCAEI,WTyLR,sBACA,yBACA,0BACA,8BACA,2BAzIC,kCS5CD,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MTiFN,iCS7CF,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MTkFL,gCS9CH,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MTmFV,qCS/CE,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MToFF,6BShDN,GT6GA,eS3GuB,ST4GrB,aS5GqB,ST6GtB,cS7GsB,ST8G1B,kBS9G0B,ST+GjB,US/GiB,SACnB,iBVKY,QUFhB,KTuGA,eSrGuB,WTsGrB,aStGqB,WTuGtB,cSvGsB,WTwG1B,kBSxG0B,WTyGjB,USzGiB,WACnB,iBA7CI,MCKJ,0KAGI,aAGJ,4OAII,wBACA,2BACA,MAhBI,MAiBJ,eAGJ,uMAII,MAxBI,MAyBJ,eACA,cACA,cC7BZ,qBACI,2BACA,sFACA,WZgD+B,QY/C/B,qCAEA,2BACI,WZ6CmC,QY5CnC,aZsCuB,QYnC3B,2BACI,+CAGJ,4BACI,WZqCkC,QYpClC,aZ6BuB,QY5BvB,iCAGJ,8BACI,yBACA,8BACA,gCACA","file":"dialog-boxes.css"}
|
vendor/freemius/wordpress-sdk/assets/css/admin/gdpr-optin-notice.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.fs-notice[data-id^=gdpr_optin_actions] .underlined{text-decoration:underline}.fs-notice[data-id^=gdpr_optin_actions] ul .button,.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{vertical-align:middle}.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{display:inline-block;margin-left:3px}
|
1 |
+
.fs-notice[data-id^=gdpr_optin_actions] .underlined{text-decoration:underline}.fs-notice[data-id^=gdpr_optin_actions] ul .button,.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{vertical-align:middle}.fs-notice[data-id^=gdpr_optin_actions] ul .action-description{display:inline-block;margin-left:3px}
|
vendor/freemius/wordpress-sdk/assets/css/admin/optout.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .dashicons{float:none !important}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;position:absolute;background:rgba(0,0,0,.8);color:#fff !important;font-family:"arial",serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:-17px;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(0,0,0,.2);line-height:1.3em;font-weight:bold;text-align:left;text-transform:none !important}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right;left:auto;right:-17px}.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,.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-permissions .fs-permission.fs-disabled{color:#aaa}.fs-permissions .fs-permission.fs-disabled .fs-permission-description span{color:#aaa}.fs-permissions .fs-permission .fs-switch-feedback{position:absolute;right:15px;top:52px}.fs-permissions ul{height:0;overflow:hidden;margin:0}.fs-permissions ul li{padding:17px 15px;margin:0;position:relative}.fs-permissions ul li>i.dashicons{float:left;font-size:30px;width:30px;height:30px;padding:5px}.fs-permissions ul li .fs-switch{float:right}.fs-permissions ul li .fs-permission-description{margin-left:55px}.fs-permissions ul li .fs-permission-description span{font-size:14px;font-weight:500;color:#23282d}.fs-permissions ul li .fs-permission-description .fs-tooltip{font-size:13px;font-weight:bold}.fs-permissions ul li .fs-permission-description .fs-tooltip-trigger .dashicons{margin:-1px 2px 0 2px}.fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}.fs-permissions.fs-open{background:#fff}.fs-permissions.fs-open ul{overflow:initial;height:auto;margin:20px 0 10px 0}.fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-right:10px}.fs-permissions .fs-switch-feedback.success{color:#71ae00}.rtl .fs-permissions .fs-switch-feedback{right:auto;left:15px}.rtl .fs-permissions .fs-switch-feedback .fs-ajax-spinner{margin-left:10px;margin-right:0}.rtl .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl .fs-permissions ul li .fs-switch{float:left}.rtl .fs-permissions ul li i.dashicons{float:right}.fs-modal-opt-out .fs-modal-footer .fs-opt-out-button{line-height:30px;margin-right:10px}.fs-modal-opt-out .fs-permissions{margin-top:0 !important}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-group-opt-out-button{float:right;line-height:1.1em}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-switch-feedback{float:right;line-height:1.1em;margin-right:10px}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header .fs-switch-feedback .fs-ajax-spinner{margin:-2px 0 0}.fs-modal-opt-out .fs-permissions .fs-permissions-section--header-title{font-size:1.1em;font-weight:600;text-transform:uppercase;display:block;line-height:1.1em;margin:.5em 0}.fs-modal-opt-out .fs-permissions .fs-permissions-section--desc{margin-top:0}.fs-modal-opt-out .fs-permissions hr{border:0;border-top:#eee solid 1px;margin:25px 0 20px 0}.fs-modal-opt-out .fs-permissions ul{border:1px solid #c3c4c7;border-radius:3px;margin:10px 0 0 0;box-shadow:0 1px 1px rgba(0,0,0,.04)}.fs-modal-opt-out .fs-permissions ul li{border-bottom:1px solid #d7dde1;border-left:4px solid #72aee6}.rtl .fs-modal-opt-out .fs-permissions ul li{border-left:none;border-right:4px solid #72aee6}.fs-modal-opt-out .fs-permissions ul li.fs-disabled{border-left-color:rgba(114,174,230,0)}.fs-modal-opt-out .fs-permissions ul li:last-child{border-bottom:none}
|
vendor/freemius/wordpress-sdk/assets/css/admin/optout.css.map
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
{"version":3,"sourceRoot":"","sources":["../../scss/admin/_tooltip.scss","../../scss/_mixins.scss","../../scss/_colors.scss","../../scss/admin/_permissions.scss","../../scss/admin/optout.scss"],"names":[],"mappings":"AAEA,oBAOI,kBALA,2BAEI,YAKJ,+BACI,sBAGJ,gCAEI,UACA,kBC4JH,gBD3JG,wBC4JD,cD5JC,wBC6JF,eD7JE,wBC8JN,mBD9JM,wBC+JE,WD/JF,wBACA,kBACA,WE+DY,eF9DZ,sBACA,0BACA,eACA,aACA,eACA,YACA,kBACA,WACA,QCiBH,mBDhBG,ICiBN,sBDjBM,ICkBE,cDlBF,ICyBH,gBDxBG,2BCyBN,mBDzBM,2BC0BE,WD1BF,2BACA,kBACA,iBACA,gBACA,+BAEA,qCAEI,iBACA,UACA,YAGJ,uCAEI,YACA,cACA,QACA,SACA,mBACA,2BACA,gEACA,kBACA,SACA,UAEA,4CAEI,WACA,UAOR,sCAEI,mBACA,UGhEJ,2CACI,WAEA,2EACI,WAIR,mDACI,kBACA,WACA,SAIR,mBACI,SACA,gBACA,SAEA,sBACI,kBACA,SACA,kBAEA,kCACI,WACA,UA/BO,KAgCP,MAhCO,KAiCP,OAjCO,KAkCP,YAGJ,iCACI,YAGJ,iDACI,iBAEA,sDACI,eACA,gBACA,cAGJ,6DACI,eACA,iBAGJ,gFACI,sBAGJ,mDACI,iBAMhB,wBACI,gBAEA,2BACI,iBACA,YACA,qBAKJ,qDACI,kBAGJ,4CACI,MDlEU,QCqEd,yCAEI,WACA,UAEA,0DACI,iBACA,eAUA,sDACI,kBACA,cAGJ,sCACI,WAGJ,uCACI,YC3GZ,sDACI,iBACA,kBAIR,kCACI,wBAEA,2FACI,YACA,kBAGJ,sFACI,YACA,kBACA,kBAEA,uGACI,gBAIR,wEACI,gBACA,gBACA,yBACA,cACA,kBACA,cAGJ,gEACI,aAGJ,qCACI,SACA,0BACA,qBAGJ,qCACI,yBACA,kBACA,kBACA,qCAEA,wCACI,gCACA,8BAEA,6CACI,iBACA,+BAGJ,oDACI,sCAGJ,mDACI","file":"optout.css"}
|
vendor/freemius/wordpress-sdk/assets/css/admin/plugins.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}.wp-list-table.plugins .plugin-title span.fs-tag{display:inline-block;margin-left:5px;line-height:10px}
|
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}
|
vendor/freemius/wordpress-sdk/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 .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .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,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(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}
|
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 .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;-webkit-transition:opacity .3s ease-in-out;transition:opacity .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,.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,.2);box-shadow:1px 1px 1px rgba(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}
|
vendor/freemius/wordpress-sdk/includes/class-freemius-abstract.php
CHANGED
@@ -37,9 +37,12 @@
|
|
37 |
* `$fs->is_registered() && $fs->is_tracking_allowed()`
|
38 |
*
|
39 |
* @since 1.0.1
|
|
|
|
|
|
|
40 |
* @return bool
|
41 |
*/
|
42 |
-
abstract function is_registered();
|
43 |
|
44 |
/**
|
45 |
* Check if the user skipped connecting the account with Freemius.
|
@@ -61,68 +64,6 @@
|
|
61 |
|
62 |
#endregion
|
63 |
|
64 |
-
#----------------------------------------------------------------------------------
|
65 |
-
#region Usage Tracking
|
66 |
-
#----------------------------------------------------------------------------------
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Returns TRUE if the user opted-in and didn't disconnect (opt-out).
|
70 |
-
*
|
71 |
-
* @author Leo Fajardo (@leorw)
|
72 |
-
* @since 1.2.1.5
|
73 |
-
*
|
74 |
-
* @return bool
|
75 |
-
*/
|
76 |
-
abstract function is_tracking_allowed();
|
77 |
-
|
78 |
-
/**
|
79 |
-
* Returns TRUE if the user never opted-in or manually opted-out.
|
80 |
-
*
|
81 |
-
* @author Vova Feldman (@svovaf)
|
82 |
-
* @since 1.2.1.5
|
83 |
-
*
|
84 |
-
* @return bool
|
85 |
-
*/
|
86 |
-
function is_tracking_prohibited() {
|
87 |
-
return ! $this->is_registered() || ! $this->is_tracking_allowed();
|
88 |
-
}
|
89 |
-
|
90 |
-
/**
|
91 |
-
* Opt-out from usage tracking.
|
92 |
-
*
|
93 |
-
* Note: This will not delete the account information but will stop all tracking.
|
94 |
-
*
|
95 |
-
* Returns:
|
96 |
-
* 1. FALSE - If the user never opted-in.
|
97 |
-
* 2. TRUE - If successfully opted-out.
|
98 |
-
* 3. object - API Result on failure.
|
99 |
-
*
|
100 |
-
* @author Leo Fajardo (@leorw)
|
101 |
-
* @since 1.2.1.5
|
102 |
-
*
|
103 |
-
* @return bool|object
|
104 |
-
*/
|
105 |
-
abstract function stop_tracking();
|
106 |
-
|
107 |
-
/**
|
108 |
-
* Opt-in back into usage tracking.
|
109 |
-
*
|
110 |
-
* Note: This will only work if the user opted-in previously.
|
111 |
-
*
|
112 |
-
* Returns:
|
113 |
-
* 1. FALSE - If the user never opted-in.
|
114 |
-
* 2. TRUE - If successfully opted-in back to usage tracking.
|
115 |
-
* 3. object - API result on failure.
|
116 |
-
*
|
117 |
-
* @author Leo Fajardo (@leorw)
|
118 |
-
* @since 1.2.1.5
|
119 |
-
*
|
120 |
-
* @return bool|object
|
121 |
-
*/
|
122 |
-
abstract function allow_tracking();
|
123 |
-
|
124 |
-
#endregion
|
125 |
-
|
126 |
#----------------------------------------------------------------------------------
|
127 |
#region Module Type
|
128 |
#----------------------------------------------------------------------------------
|
37 |
* `$fs->is_registered() && $fs->is_tracking_allowed()`
|
38 |
*
|
39 |
* @since 1.0.1
|
40 |
+
*
|
41 |
+
* @param bool $ignore_anonymous_state Since 2.5.1
|
42 |
+
*
|
43 |
* @return bool
|
44 |
*/
|
45 |
+
abstract function is_registered( $ignore_anonymous_state = false );
|
46 |
|
47 |
/**
|
48 |
* Check if the user skipped connecting the account with Freemius.
|
64 |
|
65 |
#endregion
|
66 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
#----------------------------------------------------------------------------------
|
68 |
#region Module Type
|
69 |
#----------------------------------------------------------------------------------
|
vendor/freemius/wordpress-sdk/includes/class-freemius.php
CHANGED
@@ -941,82 +941,27 @@
|
|
941 |
* @param string $sdk_version
|
942 |
*/
|
943 |
function _sdk_version_update( $sdk_prev_version, $sdk_version ) {
|
944 |
-
/**
|
945 |
-
* @since 1.1.7.3 Fixed unwanted connectivity test cleanup.
|
946 |
-
*/
|
947 |
if ( empty( $sdk_prev_version ) ) {
|
948 |
return;
|
949 |
}
|
950 |
|
951 |
-
if (
|
952 |
-
version_compare( $
|
953 |
-
|
954 |
-
$this->_storage->handle_gdpr_admin_notice = true;
|
955 |
-
}
|
956 |
-
|
957 |
-
if ( version_compare( $sdk_prev_version, '2.0.0', '<' ) &&
|
958 |
-
version_compare( $sdk_version, '2.0.0', '>=' )
|
959 |
-
) {
|
960 |
-
$this->migrate_to_subscriptions_collection();
|
961 |
-
|
962 |
-
$this->consolidate_licenses();
|
963 |
-
|
964 |
-
// Clear trial_plan since it's now loaded from the plans collection when needed.
|
965 |
-
$this->_storage->remove( 'trial_plan', true, false );
|
966 |
-
}
|
967 |
-
|
968 |
-
if ( version_compare( $sdk_prev_version, '1.2.3', '<' ) &&
|
969 |
-
version_compare( $sdk_version, '1.2.3', '>=' )
|
970 |
-
) {
|
971 |
-
/**
|
972 |
-
* Starting from version 1.2.3, paths are stored as relative instead of absolute and some of them can be
|
973 |
-
* invalid.
|
974 |
-
*
|
975 |
-
* @author Leo Fajardo (@leorw)
|
976 |
-
*/
|
977 |
-
$this->remove_invalid_paths();
|
978 |
-
}
|
979 |
-
|
980 |
-
if ( version_compare( $sdk_prev_version, '1.1.5', '<' ) &&
|
981 |
-
version_compare( $sdk_version, '1.1.5', '>=' )
|
982 |
) {
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
$connectivity_data = $this->_storage->connectivity_test;
|
989 |
-
$connectivity_data['is_active'] = $this->_storage->is_on['is_active'];
|
990 |
-
$connectivity_data['timestamp'] = $this->_storage->is_on['timestamp'];
|
991 |
-
|
992 |
-
// Override.
|
993 |
-
$this->_storage->connectivity_test = $connectivity_data;
|
994 |
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
|
|
|
999 |
}
|
1000 |
}
|
1001 |
-
|
1002 |
-
if (
|
1003 |
-
version_compare( $sdk_prev_version, '2.2.1', '<' ) &&
|
1004 |
-
version_compare( $sdk_version, '2.2.1', '>=' )
|
1005 |
-
) {
|
1006 |
-
/**
|
1007 |
-
* Clear the file cache without storing the previous path since it could be a wrong path. For example,
|
1008 |
-
* in the versions of the SDK lower than 2.2.1, it's possible for the path of an add-on to be the same
|
1009 |
-
* as the parent plugin's when the add-on was auto-installed since the relevant method names were not
|
1010 |
-
* skipped in the logic that determines the right path in the `get_caller_main_file_and_type` method
|
1011 |
-
* (e.g. `try_activate_plugin`). Since it was an auto-installation, the caller was the parent plugin
|
1012 |
-
* and so its path was used. In case the stored path is wrong, clearing the cache will resolve issues
|
1013 |
-
* related to data mix-up between plugins (e.g. titles and versions of an add-on and its parent plugin).
|
1014 |
-
*
|
1015 |
-
* @author Leo Fajardo (@leorw)
|
1016 |
-
* @since 2.2.1
|
1017 |
-
*/
|
1018 |
-
$this->clear_module_main_file_cache( false );
|
1019 |
-
}
|
1020 |
}
|
1021 |
|
1022 |
/**
|
@@ -1067,102 +1012,6 @@
|
|
1067 |
}
|
1068 |
}
|
1069 |
|
1070 |
-
/**
|
1071 |
-
* @author Leo Fajardo (@leorw)
|
1072 |
-
* @since 2.0.0
|
1073 |
-
*/
|
1074 |
-
private function migrate_to_subscriptions_collection() {
|
1075 |
-
if ( ! is_object( $this->_site ) ) {
|
1076 |
-
return;
|
1077 |
-
}
|
1078 |
-
|
1079 |
-
if ( isset( $this->_storage->subscription ) && is_object( $this->_storage->subscription ) ) {
|
1080 |
-
$this->_storage->subscriptions = array( fs_get_entity( $this->_storage->subscription, FS_Subscription::get_class_name() ) );
|
1081 |
-
}
|
1082 |
-
}
|
1083 |
-
|
1084 |
-
/**
|
1085 |
-
* @author Leo Fajardo (@leorw)
|
1086 |
-
* @since 2.0.0
|
1087 |
-
*/
|
1088 |
-
private function consolidate_licenses() {
|
1089 |
-
$plugin_licenses = self::get_account_option( 'licenses', WP_FS__MODULE_TYPE_PLUGIN );
|
1090 |
-
if ( isset( $plugin_licenses[ $this->_slug ] ) ) {
|
1091 |
-
$plugin_licenses = $plugin_licenses[ $this->_slug ];
|
1092 |
-
} else {
|
1093 |
-
$plugin_licenses = array();
|
1094 |
-
}
|
1095 |
-
|
1096 |
-
$theme_licenses = self::get_account_option( 'licenses', WP_FS__MODULE_TYPE_THEME );
|
1097 |
-
if ( isset( $theme_licenses[ $this->_slug ] ) ) {
|
1098 |
-
$theme_licenses = $theme_licenses[ $this->_slug ];
|
1099 |
-
} else {
|
1100 |
-
$theme_licenses = array();
|
1101 |
-
}
|
1102 |
-
|
1103 |
-
if ( empty( $plugin_licenses ) && empty( $theme_licenses ) ) {
|
1104 |
-
return;
|
1105 |
-
}
|
1106 |
-
|
1107 |
-
$all_licenses = array();
|
1108 |
-
$user_id_license_ids_map = array();
|
1109 |
-
|
1110 |
-
foreach ( $plugin_licenses as $user_id => $user_licenses ) {
|
1111 |
-
if ( is_array( $user_licenses ) ) {
|
1112 |
-
if ( ! isset( $user_license_ids[ $user_id ] ) ) {
|
1113 |
-
$user_id_license_ids_map[ $user_id ] = array();
|
1114 |
-
}
|
1115 |
-
|
1116 |
-
foreach ( $user_licenses as $user_license ) {
|
1117 |
-
$all_licenses[] = $user_license;
|
1118 |
-
$user_id_license_ids_map[ $user_id ][] = $user_license->id;
|
1119 |
-
}
|
1120 |
-
}
|
1121 |
-
}
|
1122 |
-
|
1123 |
-
foreach ( $theme_licenses as $user_id => $user_licenses ) {
|
1124 |
-
if ( is_array( $user_licenses ) ) {
|
1125 |
-
if ( ! isset( $user_license_ids[ $user_id ] ) ) {
|
1126 |
-
$user_id_license_ids_map[ $user_id ] = array();
|
1127 |
-
}
|
1128 |
-
|
1129 |
-
foreach ( $user_licenses as $user_license ) {
|
1130 |
-
$all_licenses[] = $user_license;
|
1131 |
-
$user_id_license_ids_map[ $user_id ][] = $user_license->id;
|
1132 |
-
}
|
1133 |
-
}
|
1134 |
-
}
|
1135 |
-
|
1136 |
-
self::store_user_id_license_ids_map(
|
1137 |
-
$user_id_license_ids_map,
|
1138 |
-
$this->_module_id
|
1139 |
-
);
|
1140 |
-
|
1141 |
-
$this->_store_licenses( true, $this->_module_id, $all_licenses );
|
1142 |
-
}
|
1143 |
-
|
1144 |
-
/**
|
1145 |
-
* Remove invalid paths.
|
1146 |
-
*
|
1147 |
-
* @author Leo Fajardo (@leorw)
|
1148 |
-
* @since 1.2.3
|
1149 |
-
*/
|
1150 |
-
private function remove_invalid_paths() {
|
1151 |
-
// Remove invalid path that is still associated with the current slug if there's any.
|
1152 |
-
$file_slug_map = self::$_accounts->get_option( 'file_slug_map', array() );
|
1153 |
-
foreach ( $file_slug_map as $plugin_basename => $slug ) {
|
1154 |
-
if ( $slug === $this->_slug &&
|
1155 |
-
$plugin_basename !== $this->_plugin_basename &&
|
1156 |
-
! file_exists( $this->get_absolute_path( $plugin_basename ) )
|
1157 |
-
) {
|
1158 |
-
unset( $file_slug_map[ $plugin_basename ] );
|
1159 |
-
self::$_accounts->set_option( 'file_slug_map', $file_slug_map, true );
|
1160 |
-
|
1161 |
-
break;
|
1162 |
-
}
|
1163 |
-
}
|
1164 |
-
}
|
1165 |
-
|
1166 |
/**
|
1167 |
* @author Vova Feldman (@svovaf)
|
1168 |
* @since 1.2.2.7
|
@@ -2024,7 +1873,13 @@
|
|
2024 |
return;
|
2025 |
}
|
2026 |
|
2027 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2028 |
|
2029 |
if ( self::is_plugins_page() && $this->is_plugin() ) {
|
2030 |
$this->hook_plugin_action_links();
|
@@ -3577,10 +3432,12 @@
|
|
3577 |
* @author Leo Fajardo (@leorw)
|
3578 |
* @since 2.5.0
|
3579 |
*
|
|
|
|
|
3580 |
* @return bool
|
3581 |
*/
|
3582 |
-
private function is_unresolved_clone() {
|
3583 |
-
if ( ! $this->is_clone() ) {
|
3584 |
return false;
|
3585 |
}
|
3586 |
|
@@ -3590,14 +3447,33 @@
|
|
3590 |
/**
|
3591 |
* @author Leo Fajardo (@leorw)
|
3592 |
* @since 2.5.0
|
|
|
|
|
3593 |
*/
|
3594 |
-
function is_clone() {
|
3595 |
if ( ! is_object( $this->_site ) ) {
|
3596 |
return false;
|
3597 |
}
|
3598 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3599 |
return (
|
3600 |
-
|
|
|
3601 |
);
|
3602 |
}
|
3603 |
|
@@ -3772,7 +3648,7 @@
|
|
3772 |
} else {
|
3773 |
// Add hidden debug page.
|
3774 |
$hook = FS_Admin_Menu_Manager::add_subpage(
|
3775 |
-
|
3776 |
$title,
|
3777 |
$title,
|
3778 |
'manage_options',
|
@@ -4513,11 +4389,16 @@
|
|
4513 |
$install_previous_desc = $this->esc_html_inline( 'Uninstall this version and install the previous one.', 'install-previous-desc' );
|
4514 |
$fix_issue_title = $this->esc_html_inline( 'Yes - I\'m giving you a chance to fix it', 'fix-issue-title' );
|
4515 |
$fix_issue_desc = $this->esc_html_inline( 'We will do our best to whitelist your server and resolve this issue ASAP. You will get a follow-up email to %s once we have an update.', 'fix-issue-desc' );
|
4516 |
-
/* translators: %s: product title (e.g. "Awesome Plugin" requires
|
4517 |
-
$x_requires_access_to_api = $this->esc_html_inline( '%s requires
|
4518 |
$sysadmin_title = $this->esc_html_inline( 'I\'m a system administrator', 'sysadmin-title' );
|
4519 |
$happy_to_resolve_issue_asap = $this->esc_html_inline( 'We are sure it\'s an issue on our side and more than happy to resolve it for you ASAP if you give us a chance.', 'happy-to-resolve-issue-asap' );
|
4520 |
|
|
|
|
|
|
|
|
|
|
|
4521 |
$message = false;
|
4522 |
if ( is_object( $api_result ) &&
|
4523 |
isset( $api_result->error ) &&
|
@@ -5149,7 +5030,7 @@
|
|
5149 |
|
5150 |
/**
|
5151 |
* This should be executed even if Freemius is off for the core module,
|
5152 |
-
* otherwise, the add-ons
|
5153 |
* relevant when the developer decided to turn FS off for existing users.
|
5154 |
*
|
5155 |
* @author Vova Feldman (@svovaf)
|
@@ -5346,7 +5227,7 @@
|
|
5346 |
* because the updater has some logic that needs to be executed
|
5347 |
* during AJAX calls.
|
5348 |
*
|
5349 |
-
* Currently we need to hook to the `http_request_host_is_external` filter.
|
5350 |
* In the future, there might be additional logic added.
|
5351 |
*
|
5352 |
* @author Vova Feldman
|
@@ -5366,7 +5247,7 @@
|
|
5366 |
( file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $this->premium_plugin_basename() ) ) )
|
5367 |
) &&
|
5368 |
$this->has_release_on_freemius() &&
|
5369 |
-
( ! $this->is_unresolved_clone() )
|
5370 |
) {
|
5371 |
FS_Plugin_Updater::instance( $this );
|
5372 |
}
|
@@ -5435,150 +5316,70 @@
|
|
5435 |
}
|
5436 |
|
5437 |
/**
|
5438 |
-
* @
|
|
|
|
|
5439 |
*
|
5440 |
-
* @
|
5441 |
*/
|
5442 |
-
function
|
5443 |
$this->_logger->entrance();
|
5444 |
|
5445 |
-
$
|
5446 |
-
|
5447 |
-
|
5448 |
-
|
5449 |
-
if ( true === $result ) {
|
5450 |
-
self::shoot_ajax_success();
|
5451 |
-
}
|
5452 |
-
|
5453 |
-
$this->_logger->api_error( $result );
|
5454 |
-
|
5455 |
-
self::shoot_ajax_failure(
|
5456 |
-
sprintf( $this->get_text_inline( 'Unexpected API error. Please contact the %s\'s author with the following error.', 'unexpected-api-error' ), $this->_module_type ) .
|
5457 |
-
( $this->is_api_error( $result ) && isset( $result->error ) ?
|
5458 |
-
$result->error->message :
|
5459 |
-
var_export( $result, true ) )
|
5460 |
);
|
5461 |
-
}
|
5462 |
-
|
5463 |
-
/**
|
5464 |
-
* @author Leo Fajardo (@leorw)
|
5465 |
-
* @since 1.2.1.5
|
5466 |
-
*/
|
5467 |
-
function _allow_tracking_callback() {
|
5468 |
-
$this->_logger->entrance();
|
5469 |
|
5470 |
-
$
|
5471 |
-
|
5472 |
-
$
|
5473 |
-
|
5474 |
-
if ( true === $result ) {
|
5475 |
-
self::shoot_ajax_success();
|
5476 |
}
|
5477 |
|
5478 |
-
$this->
|
5479 |
-
|
5480 |
-
self::shoot_ajax_failure(
|
5481 |
-
sprintf( $this->get_text_inline( 'Unexpected API error. Please contact the %s\'s author with the following error.', 'unexpected-api-error' ), $this->_module_type ) .
|
5482 |
-
( $this->is_api_error( $result ) && isset( $result->error ) ?
|
5483 |
-
$result->error->message :
|
5484 |
-
var_export( $result, true ) )
|
5485 |
-
);
|
5486 |
-
}
|
5487 |
|
5488 |
-
|
5489 |
-
|
5490 |
-
*
|
5491 |
-
* Note: This will not delete the account information but will stop all tracking.
|
5492 |
-
*
|
5493 |
-
* Returns:
|
5494 |
-
* 1. FALSE - If the user never opted-in.
|
5495 |
-
* 2. TRUE - If successfully opted-out.
|
5496 |
-
* 3. object - API result on failure.
|
5497 |
-
*
|
5498 |
-
* @author Leo Fajardo (@leorw)
|
5499 |
-
* @since 1.2.1.5
|
5500 |
-
*
|
5501 |
-
* @return bool|object
|
5502 |
-
*/
|
5503 |
-
function stop_site_tracking() {
|
5504 |
-
$this->_logger->entrance();
|
5505 |
-
|
5506 |
-
if ( ! $this->is_registered() ) {
|
5507 |
-
// User never opted-in.
|
5508 |
-
return false;
|
5509 |
-
}
|
5510 |
-
|
5511 |
-
if ( $this->is_tracking_prohibited() ) {
|
5512 |
-
// Already disconnected.
|
5513 |
-
return true;
|
5514 |
}
|
5515 |
|
5516 |
-
|
5517 |
-
|
5518 |
-
|
5519 |
-
) );
|
5520 |
-
|
5521 |
-
if ( ! $this->is_api_result_entity( $result ) ||
|
5522 |
-
! isset( $result->is_disconnected ) ||
|
5523 |
-
! $result->is_disconnected
|
5524 |
) {
|
5525 |
$this->_logger->api_error( $result );
|
5526 |
|
5527 |
return $result;
|
5528 |
}
|
5529 |
|
5530 |
-
$this->_site->is_disconnected = $result->is_disconnected;
|
5531 |
-
$this->_store_site();
|
5532 |
-
|
5533 |
-
$this->clear_sync_cron();
|
5534 |
-
|
5535 |
-
// Successfully disconnected.
|
5536 |
return true;
|
5537 |
}
|
5538 |
|
5539 |
/**
|
5540 |
-
*
|
5541 |
-
*
|
5542 |
-
*
|
5543 |
-
*
|
5544 |
-
* Returns:
|
5545 |
-
* 1. FALSE - If the user never opted-in.
|
5546 |
-
* 2. TRUE - If successfully opted-out.
|
5547 |
-
* 3. object - API result on failure.
|
5548 |
*
|
5549 |
-
* @
|
5550 |
-
* @since 1.2.1.5
|
5551 |
-
*
|
5552 |
-
* @return bool|object
|
5553 |
*/
|
5554 |
-
function
|
|
|
|
|
|
|
|
|
5555 |
$this->_logger->entrance();
|
5556 |
|
5557 |
-
if ( ! $this->is_registered() ) {
|
5558 |
-
// User never opted-in.
|
5559 |
-
return false;
|
5560 |
-
}
|
5561 |
-
|
5562 |
$install_id_2_blog_id = array();
|
5563 |
-
$
|
5564 |
|
5565 |
-
$
|
5566 |
-
|
5567 |
-
$params = array();
|
5568 |
-
foreach ( $installs_map as $blog_id => $install ) {
|
5569 |
-
if ( $install->is_tracking_prohibited() ) {
|
5570 |
-
// Already opted-out.
|
5571 |
-
continue;
|
5572 |
-
}
|
5573 |
|
|
|
5574 |
if ( $this->is_site_delegated_connection( $blog_id ) ) {
|
5575 |
-
//
|
5576 |
-
$
|
5577 |
continue;
|
5578 |
}
|
5579 |
|
5580 |
-
$params[] = array( 'id' => $install->id );
|
5581 |
-
|
5582 |
$install_id_2_blog_id[ $install->id ] = $blog_id;
|
5583 |
}
|
5584 |
|
@@ -5586,171 +5387,188 @@
|
|
5586 |
return true;
|
5587 |
}
|
5588 |
|
5589 |
-
$params
|
|
|
|
|
|
|
|
|
5590 |
|
5591 |
// Send update to FS.
|
5592 |
-
$result = $this->get_current_or_network_user_api_scope()->call(
|
|
|
|
|
|
|
|
|
5593 |
|
5594 |
-
if ( ! $this->is_api_result_object( $result, '
|
5595 |
$this->_logger->api_error( $result );
|
5596 |
|
5597 |
return $result;
|
5598 |
}
|
5599 |
|
5600 |
-
foreach ( $result->installs as $r_install ) {
|
5601 |
-
$blog_id = $install_id_2_blog_id[ $r_install->id ];
|
5602 |
-
$install = $installs_map[ $blog_id ];
|
5603 |
-
$install->is_disconnected = $r_install->is_disconnected;
|
5604 |
-
$this->_store_site( true, $blog_id, $install );
|
5605 |
-
}
|
5606 |
-
|
5607 |
-
$this->clear_sync_cron( $opt_out_all );
|
5608 |
-
|
5609 |
-
// Successfully disconnected.
|
5610 |
return true;
|
5611 |
}
|
5612 |
|
5613 |
/**
|
5614 |
-
*
|
5615 |
-
*
|
5616 |
-
* Note: This will not delete the account information but will stop all tracking.
|
5617 |
-
*
|
5618 |
-
* Returns:
|
5619 |
-
* 1. FALSE - If the user never opted-in.
|
5620 |
-
* 2. TRUE - If successfully opted-out.
|
5621 |
-
* 3. object - API result on failure.
|
5622 |
-
*
|
5623 |
-
* @author Leo Fajardo (@leorw)
|
5624 |
-
* @since 1.2.1.5
|
5625 |
-
*
|
5626 |
-
* @param bool $is_network_action
|
5627 |
*
|
5628 |
-
* @return
|
5629 |
*/
|
5630 |
-
function
|
5631 |
-
$this->
|
|
|
5632 |
|
5633 |
-
|
5634 |
-
$this->
|
5635 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5636 |
}
|
5637 |
|
5638 |
/**
|
5639 |
-
*
|
5640 |
-
*
|
5641 |
-
* Note: This will only work if the user opted-in previously.
|
5642 |
-
*
|
5643 |
-
* Returns:
|
5644 |
-
* 1. FALSE - If the user never opted-in.
|
5645 |
-
* 2. TRUE - If successfully opted-in back to usage tracking.
|
5646 |
-
* 3. object - API result on failure.
|
5647 |
-
*
|
5648 |
-
* @author Leo Fajardo (@leorw)
|
5649 |
-
* @since 1.2.1.5
|
5650 |
-
*
|
5651 |
-
* @return bool|object
|
5652 |
*/
|
5653 |
-
function
|
5654 |
$this->_logger->entrance();
|
5655 |
|
5656 |
-
|
5657 |
-
// User never opted-in.
|
5658 |
-
return false;
|
5659 |
-
}
|
5660 |
|
5661 |
-
if ( $this->
|
5662 |
-
|
5663 |
-
return true;
|
5664 |
}
|
5665 |
|
5666 |
-
$
|
5667 |
-
|
5668 |
-
) );
|
5669 |
-
|
5670 |
-
if ( ! $this->is_api_result_entity( $result ) ||
|
5671 |
-
! isset( $result->is_disconnected ) ||
|
5672 |
-
$result->is_disconnected
|
5673 |
-
) {
|
5674 |
-
$this->_logger->api_error( $result );
|
5675 |
|
5676 |
-
|
|
|
5677 |
}
|
5678 |
|
5679 |
-
$
|
5680 |
-
$this->_store_site();
|
5681 |
|
5682 |
-
$this->
|
5683 |
|
5684 |
-
|
5685 |
-
|
|
|
|
|
|
|
5686 |
}
|
5687 |
|
5688 |
/**
|
5689 |
-
*
|
5690 |
-
*
|
5691 |
-
*
|
5692 |
-
*
|
5693 |
-
* Returns:
|
5694 |
-
* 1. FALSE - If the user never opted-in.
|
5695 |
-
* 2. TRUE - If successfully opted-in back to usage tracking.
|
5696 |
-
* 3. object - API result on failure.
|
5697 |
-
*
|
5698 |
-
* @author Leo Fajardo (@leorw)
|
5699 |
-
* @since 1.2.1.5
|
5700 |
*
|
5701 |
-
* @return bool|
|
5702 |
*/
|
5703 |
-
function
|
5704 |
-
$this->
|
5705 |
-
|
5706 |
-
if ( ! $this->is_registered() ) {
|
5707 |
// User never opted-in.
|
5708 |
return false;
|
5709 |
}
|
5710 |
|
5711 |
-
|
5712 |
-
|
5713 |
-
|
5714 |
-
|
5715 |
-
|
5716 |
-
|
5717 |
-
|
5718 |
-
}
|
5719 |
-
|
5720 |
-
$params[] = array( 'id' => $install->id );
|
5721 |
-
|
5722 |
-
$install_id_2_blog_id[ $install->id ] = $blog_id;
|
5723 |
}
|
5724 |
|
5725 |
-
|
5726 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5727 |
}
|
5728 |
|
5729 |
-
|
|
|
5730 |
|
5731 |
-
|
5732 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5733 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5734 |
|
5735 |
-
|
5736 |
-
|
|
|
5737 |
|
5738 |
-
|
5739 |
-
|
|
|
|
|
|
|
|
|
|
|
5740 |
|
5741 |
-
|
5742 |
-
|
5743 |
-
|
5744 |
-
$install->is_disconnected = $r_install->is_disconnected;
|
5745 |
-
$this->_store_site( true, $blog_id, $install );
|
5746 |
}
|
5747 |
|
5748 |
-
$this->
|
|
|
|
|
|
|
|
|
5749 |
|
5750 |
-
// Successfully reconnected.
|
5751 |
return true;
|
5752 |
}
|
5753 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5754 |
/**
|
5755 |
* Opt-in back into usage tracking.
|
5756 |
*
|
@@ -5764,16 +5582,18 @@
|
|
5764 |
* @author Leo Fajardo (@leorw)
|
5765 |
* @since 1.2.1.5
|
5766 |
*
|
5767 |
-
* @
|
5768 |
*
|
5769 |
* @return bool|object
|
5770 |
*/
|
5771 |
-
function
|
5772 |
$this->_logger->entrance();
|
5773 |
|
5774 |
-
return $
|
5775 |
-
$this->
|
5776 |
-
$
|
|
|
|
|
5777 |
}
|
5778 |
|
5779 |
/**
|
@@ -5794,8 +5614,7 @@
|
|
5794 |
|
5795 |
if ( ! fs_is_network_admin() || $is_context_single_site ) {
|
5796 |
if ( $this->is_tracking_prohibited() ) {
|
5797 |
-
$this->
|
5798 |
-
$this->_store_site();
|
5799 |
}
|
5800 |
} else {
|
5801 |
$installs_map = $this->get_blog_install_map();
|
@@ -5803,73 +5622,69 @@
|
|
5803 |
/**
|
5804 |
* @var FS_Site $install
|
5805 |
*/
|
5806 |
-
if ( $
|
5807 |
-
$
|
5808 |
-
$this->_store_site( true, $blog_id, $install );
|
5809 |
}
|
5810 |
}
|
5811 |
}
|
5812 |
}
|
5813 |
|
5814 |
/**
|
5815 |
-
*
|
5816 |
-
* @since 2.3.2
|
5817 |
*
|
5818 |
-
* @
|
|
|
|
|
|
|
|
|
5819 |
*/
|
5820 |
-
function
|
5821 |
-
|
5822 |
-
|
5823 |
-
$this->_storage->get( 'is_extensions_tracking_allowed', null )
|
5824 |
-
) );
|
5825 |
-
}
|
5826 |
|
5827 |
-
|
5828 |
-
|
5829 |
-
|
5830 |
-
*/
|
5831 |
-
function _update_tracking_permission_callback() {
|
5832 |
-
$this->_logger->entrance();
|
5833 |
|
5834 |
-
|
|
|
|
|
5835 |
|
5836 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5837 |
|
5838 |
-
|
5839 |
-
|
|
|
5840 |
}
|
5841 |
|
5842 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5843 |
|
5844 |
-
|
5845 |
-
case 'extensions':
|
5846 |
-
$this->update_extensions_tracking_flag( $is_enabled );
|
5847 |
-
break;
|
5848 |
-
default:
|
5849 |
$permission = 'no_match';
|
5850 |
-
|
5851 |
|
5852 |
-
|
5853 |
-
self::shoot_ajax_failure();
|
5854 |
}
|
5855 |
|
5856 |
-
|
5857 |
-
'permissions' => array(
|
5858 |
-
$permission => $is_enabled,
|
5859 |
-
)
|
5860 |
-
) );
|
5861 |
-
}
|
5862 |
-
|
5863 |
-
/**
|
5864 |
-
* @author Leo Fajardo (@leorw)
|
5865 |
-
* @since 2.3.2
|
5866 |
-
*
|
5867 |
-
* @param bool|null $is_enabled
|
5868 |
-
*/
|
5869 |
-
function update_extensions_tracking_flag( $is_enabled ) {
|
5870 |
-
if ( is_bool( $is_enabled ) ) {
|
5871 |
-
$this->_storage->store( 'is_extensions_tracking_allowed', $is_enabled );
|
5872 |
-
}
|
5873 |
}
|
5874 |
|
5875 |
/**
|
@@ -6075,8 +5890,7 @@
|
|
6075 |
if ( $this->is_activation_mode() ) {
|
6076 |
if ( ! is_admin() ) {
|
6077 |
/**
|
6078 |
-
* If in activation mode, don't execute Freemius outside
|
6079 |
-
* admin dashboard.
|
6080 |
*
|
6081 |
* @author Vova Feldman (@svovaf)
|
6082 |
* @since 1.1.7.3
|
@@ -6623,7 +6437,25 @@
|
|
6623 |
if ( ! isset( $this->_is_anonymous ) ) {
|
6624 |
if ( $this->is_network_anonymous() ) {
|
6625 |
$this->_is_anonymous = true;
|
6626 |
-
} else if (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6627 |
if ( ! isset( $this->_storage->is_anonymous ) ) {
|
6628 |
// Not skipped.
|
6629 |
$this->_is_anonymous = false;
|
@@ -6882,18 +6714,23 @@
|
|
6882 |
return 0;
|
6883 |
}
|
6884 |
|
6885 |
-
if ( $this->_is_network_active
|
6886 |
-
|
6887 |
-
$except_blog_id != $this->_storage->network_install_blog_id &&
|
6888 |
-
self::is_site_active( $this->_storage->network_install_blog_id )
|
6889 |
-
) {
|
6890 |
-
// Try to run cron from the main network blog.
|
6891 |
-
$install = $this->get_install_by_blog_id( $this->_storage->network_install_blog_id );
|
6892 |
|
6893 |
-
if (
|
6894 |
-
|
|
|
|
|
6895 |
) {
|
6896 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6897 |
}
|
6898 |
}
|
6899 |
|
@@ -6902,7 +6739,7 @@
|
|
6902 |
foreach ( $installs as $blog_id => $install ) {
|
6903 |
if ( $except_blog_id != $blog_id &&
|
6904 |
self::is_site_active( $blog_id ) &&
|
6905 |
-
|
6906 |
) {
|
6907 |
return $blog_id;
|
6908 |
}
|
@@ -6934,7 +6771,7 @@
|
|
6934 |
/**
|
6935 |
* @var FS_Site $install
|
6936 |
*/
|
6937 |
-
if ( $
|
6938 |
$clear_cron = false;
|
6939 |
break;
|
6940 |
}
|
@@ -7093,7 +6930,7 @@
|
|
7093 |
} else {
|
7094 |
$installs = $this->get_blog_install_map();
|
7095 |
foreach ( $installs as $blog_id => $install ) {
|
7096 |
-
if ( $this->
|
7097 |
if ( ! isset( $users_2_blog_ids[ $install->user_id ] ) ) {
|
7098 |
$users_2_blog_ids[ $install->user_id ] = array();
|
7099 |
}
|
@@ -7478,12 +7315,12 @@
|
|
7478 |
|
7479 |
$this->_admin_notices->add_sticky(
|
7480 |
sprintf(
|
7481 |
-
$this->get_text_inline( 'You should receive
|
7482 |
'<b>' . $this->get_plugin_name() . '</b>',
|
7483 |
'<b>' . $email . '</b>',
|
7484 |
( $is_pending_trial ?
|
7485 |
$this->get_text_inline( 'start the trial', 'start-the-trial' ) :
|
7486 |
-
$this->get_text_inline( 'complete the
|
7487 |
),
|
7488 |
'activation_pending',
|
7489 |
'Thanks!'
|
@@ -7553,7 +7390,7 @@
|
|
7553 |
if ( fs_request_is_action( $this->get_unique_affix() . '_skip_activation' ) ) {
|
7554 |
check_admin_referer( $this->get_unique_affix() . '_skip_activation' );
|
7555 |
|
7556 |
-
$this->skip_connection(
|
7557 |
|
7558 |
fs_redirect( $this->get_after_activation_url( 'after_skip_url' ) );
|
7559 |
}
|
@@ -7784,7 +7621,7 @@
|
|
7784 |
*
|
7785 |
* @return string
|
7786 |
*/
|
7787 |
-
function current_page_url() {
|
7788 |
$url = 'http';
|
7789 |
|
7790 |
if ( isset( $_SERVER["HTTPS"] ) ) {
|
@@ -7982,10 +7819,19 @@
|
|
7982 |
* @author Leo Fajardo (@leorw)
|
7983 |
* @since 1.2.2
|
7984 |
*
|
7985 |
-
* @return
|
7986 |
*/
|
7987 |
private function can_activate_previous_theme() {
|
7988 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7989 |
if ( false !== $slug && current_user_can( 'switch_themes' ) ) {
|
7990 |
$theme_instance = wp_get_theme( $slug );
|
7991 |
|
@@ -8961,6 +8807,20 @@
|
|
8961 |
$this->_is_anonymous = $is_anonymous;
|
8962 |
}
|
8963 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8964 |
/**
|
8965 |
* @author Vova Feldman (@svovaf)
|
8966 |
* @since 2.0.0
|
@@ -9123,13 +8983,38 @@
|
|
9123 |
* @author Vova Feldman (@svovaf)
|
9124 |
* @since 1.1.3
|
9125 |
*
|
9126 |
-
* @param bool|int $
|
9127 |
*/
|
9128 |
-
private function reset_anonymous_mode( $
|
9129 |
-
if ( true === $
|
9130 |
-
|
9131 |
-
|
9132 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9133 |
}
|
9134 |
|
9135 |
/**
|
@@ -9140,11 +9025,7 @@
|
|
9140 |
* @author Leo Fajardo (@leorw)
|
9141 |
* @since 1.2.2
|
9142 |
*/
|
9143 |
-
if ( ! $this->_is_network_active
|
9144 |
-
0 === $network_or_blog_id ||
|
9145 |
-
get_current_blog_id() == $network_or_blog_id ||
|
9146 |
-
( true === $network_or_blog_id && fs_is_network_admin() )
|
9147 |
-
) {
|
9148 |
$this->_is_anonymous = null;
|
9149 |
}
|
9150 |
}
|
@@ -9190,44 +9071,42 @@
|
|
9190 |
* @author Vova Feldman (@svovaf)
|
9191 |
* @since 1.1.1
|
9192 |
*
|
9193 |
-
* @param
|
9194 |
-
* @param bool $skip_all_network Since 2.0.0. If true, skip connection for all sites.
|
9195 |
*/
|
9196 |
-
function skip_connection( $
|
9197 |
$this->_logger->entrance();
|
9198 |
|
9199 |
$this->_admin_notices->remove_sticky( 'connect_account' );
|
9200 |
|
9201 |
-
if ( $
|
9202 |
$this->set_anonymous_mode( true, true );
|
9203 |
-
}
|
9204 |
|
9205 |
-
|
9206 |
-
|
9207 |
-
|
9208 |
-
$uids = array();
|
9209 |
|
9210 |
-
|
9211 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
9212 |
|
9213 |
-
|
9214 |
-
|
9215 |
-
|
9216 |
-
|
9217 |
-
|
9218 |
-
|
9219 |
-
|
9220 |
-
foreach ( $sites as $site ) {
|
9221 |
-
$uids[] = $site['uid'];
|
9222 |
-
$this->skip_site_connection( $site['blog_id'], false );
|
9223 |
}
|
9224 |
}
|
|
|
9225 |
|
9226 |
-
|
9227 |
-
|
9228 |
-
$this->get_api_plugin_scope()->call( 'skip.json', 'put', array(
|
9229 |
-
'uids' => $uids,
|
9230 |
-
) );
|
9231 |
}
|
9232 |
|
9233 |
$this->network_upgrade_mode_completed();
|
@@ -9242,18 +9121,12 @@
|
|
9242 |
* @param int|null $blog_id
|
9243 |
* @param bool $send_skip
|
9244 |
*/
|
9245 |
-
private function skip_site_connection( $blog_id = null
|
9246 |
$this->_logger->entrance();
|
9247 |
|
9248 |
$this->_admin_notices->remove_sticky( 'connect_account', $blog_id );
|
9249 |
|
9250 |
$this->set_anonymous_mode( true, $blog_id );
|
9251 |
-
|
9252 |
-
if ( $send_skip ) {
|
9253 |
-
$this->get_api_plugin_scope()->call( 'skip.json', 'put', array(
|
9254 |
-
'uids' => array( $this->get_anonymous_id( $blog_id ) ),
|
9255 |
-
) );
|
9256 |
-
}
|
9257 |
}
|
9258 |
|
9259 |
/**
|
@@ -9635,7 +9508,10 @@
|
|
9635 |
$include_themes = true,
|
9636 |
$include_blog_data = true
|
9637 |
) {
|
9638 |
-
|
|
|
|
|
|
|
9639 |
if ( ! defined( 'WP_FS__TRACK_PLUGINS' ) || false !== WP_FS__TRACK_PLUGINS ) {
|
9640 |
/**
|
9641 |
* @since 1.1.8 Also send plugin updates.
|
@@ -9663,20 +9539,23 @@
|
|
9663 |
|
9664 |
$versions = $this->get_versions();
|
9665 |
|
9666 |
-
$blog_data =
|
9667 |
-
|
9668 |
-
|
9669 |
-
|
9670 |
-
|
9671 |
-
|
9672 |
-
|
|
|
|
|
|
|
|
|
9673 |
|
9674 |
return array_merge( $versions, $blog_data, array(
|
9675 |
'version' => $this->get_plugin_version(),
|
9676 |
'is_premium' => $this->is_premium(),
|
9677 |
// Special params.
|
9678 |
'is_active' => true,
|
9679 |
-
'is_disconnected' => $this->is_tracking_prohibited(),
|
9680 |
'is_uninstalled' => false,
|
9681 |
), $override );
|
9682 |
}
|
@@ -9753,7 +9632,7 @@
|
|
9753 |
continue;
|
9754 |
}
|
9755 |
|
9756 |
-
if ( ! $this->
|
9757 |
// Don't send updates regarding opted-out installs.
|
9758 |
continue;
|
9759 |
}
|
@@ -9811,7 +9690,6 @@
|
|
9811 |
unset( $install_data['url'] );
|
9812 |
unset( $install_data['registration_date'] );
|
9813 |
|
9814 |
-
$install_data['is_disconnected'] = $install->is_disconnected;
|
9815 |
$install_data['is_active'] = $this->is_active_for_site( $blog_id );
|
9816 |
$install_data['is_uninstalled'] = $install->is_uninstalled;
|
9817 |
|
@@ -9921,6 +9799,78 @@
|
|
9921 |
return $diff;
|
9922 |
}
|
9923 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9924 |
/**
|
9925 |
* Update install only if changed.
|
9926 |
*
|
@@ -9944,7 +9894,6 @@
|
|
9944 |
$params = $this->get_install_diff_for_api( $check_properties, $this->_site, $override );
|
9945 |
}
|
9946 |
|
9947 |
-
$keepalive_only_update = false;
|
9948 |
if ( empty( $params ) ) {
|
9949 |
$keepalive_only_update = $this->should_send_keepalive_update();
|
9950 |
|
@@ -10616,7 +10565,7 @@
|
|
10616 |
function get_eula_url() {
|
10617 |
return $this->apply_filters(
|
10618 |
'eula_url',
|
10619 |
-
"https://freemius.com/
|
10620 |
);
|
10621 |
}
|
10622 |
|
@@ -11235,10 +11184,20 @@
|
|
11235 |
*
|
11236 |
* @author Vova Feldman (@svovaf)
|
11237 |
* @since 1.0.1
|
|
|
|
|
|
|
11238 |
* @return bool
|
11239 |
*/
|
11240 |
-
function is_registered() {
|
11241 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11242 |
}
|
11243 |
|
11244 |
/**
|
@@ -11249,8 +11208,34 @@
|
|
11249 |
*
|
11250 |
* @return bool
|
11251 |
*/
|
11252 |
-
function is_tracking_allowed() {
|
11253 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11254 |
}
|
11255 |
|
11256 |
/**
|
@@ -13947,7 +13932,8 @@
|
|
13947 |
fs_request_get( 'blog_id', null ),
|
13948 |
fs_request_get( 'module_id', null, 'post' ),
|
13949 |
fs_request_get( 'user_id', null ),
|
13950 |
-
fs_request_get_bool( 'is_extensions_tracking_allowed', null )
|
|
|
13951 |
);
|
13952 |
|
13953 |
if (
|
@@ -14192,6 +14178,9 @@
|
|
14192 |
* @param null|int $blog_id
|
14193 |
* @param null|number $plugin_id
|
14194 |
* @param null|number $license_owner_id
|
|
|
|
|
|
|
14195 |
*
|
14196 |
* @return array {
|
14197 |
* @var bool $success
|
@@ -14206,7 +14195,8 @@
|
|
14206 |
$blog_id = null,
|
14207 |
$plugin_id = null,
|
14208 |
$license_owner_id = null,
|
14209 |
-
$is_extensions_tracking_allowed = null
|
|
|
14210 |
) {
|
14211 |
$this->_logger->entrance();
|
14212 |
|
@@ -14226,7 +14216,10 @@
|
|
14226 |
$this :
|
14227 |
$this->get_addon_instance( $plugin_id );
|
14228 |
|
14229 |
-
$this->
|
|
|
|
|
|
|
14230 |
|
14231 |
$error = false;
|
14232 |
$next_page = false;
|
@@ -14391,8 +14384,8 @@
|
|
14391 |
}
|
14392 |
}
|
14393 |
|
14394 |
-
$all_sites
|
14395 |
-
$
|
14396 |
|
14397 |
/**
|
14398 |
* Check if there are any sites that are not connected, skipped, nor delegated. For every site that falls into that category, if the product is freemium, skip the connection. If the product is premium only, delegate the connection to the site administrator.
|
@@ -14422,14 +14415,14 @@
|
|
14422 |
continue;
|
14423 |
}
|
14424 |
|
14425 |
-
$
|
14426 |
}
|
14427 |
|
14428 |
-
if ( ! empty( $
|
14429 |
if ( $fs->is_freemium() && $fs->is_enable_anonymous() ) {
|
14430 |
-
$fs->skip_connection( $
|
14431 |
} else {
|
14432 |
-
$fs->delegate_connection( $
|
14433 |
}
|
14434 |
}
|
14435 |
}
|
@@ -14565,11 +14558,11 @@
|
|
14565 |
$this->delegate_connection();
|
14566 |
} else {
|
14567 |
if ( ! empty( $sites_by_action['delegate'] ) ) {
|
14568 |
-
$this->delegate_connection( $sites_by_action['delegate'] );
|
14569 |
}
|
14570 |
|
14571 |
if ( ! empty( $sites_by_action['skip'] ) ) {
|
14572 |
-
$this->skip_connection( $sites_by_action['skip'] );
|
14573 |
}
|
14574 |
|
14575 |
if ( empty( $sites_by_action['allow'] ) ) {
|
@@ -15685,20 +15678,20 @@
|
|
15685 |
* @author Leo Fajardo (@leorw)
|
15686 |
* @since 2.0.0
|
15687 |
*
|
15688 |
-
* @param
|
15689 |
*/
|
15690 |
-
private function delegate_connection( $
|
15691 |
$this->_logger->entrance();
|
15692 |
|
15693 |
$this->_admin_notices->remove_sticky( 'connect_account' );
|
15694 |
|
15695 |
-
if (
|
15696 |
// All sites delegation.
|
15697 |
-
$this->_storage->store( 'is_delegated_connection', true, true
|
15698 |
} else {
|
15699 |
// Specified sites delegation.
|
15700 |
-
foreach ( $
|
15701 |
-
$this->delegate_site_connection( $
|
15702 |
}
|
15703 |
}
|
15704 |
|
@@ -15714,7 +15707,7 @@
|
|
15714 |
* @param int $blog_id
|
15715 |
*/
|
15716 |
private function delegate_site_connection( $blog_id ) {
|
15717 |
-
$this->_storage->store( 'is_delegated_connection', true, $blog_id
|
15718 |
}
|
15719 |
|
15720 |
/**
|
@@ -15754,7 +15747,7 @@
|
|
15754 |
}
|
15755 |
|
15756 |
/**
|
15757 |
-
* Check if delegated the connection. When running within the
|
15758 |
* and haven't specified the blog ID, checks if network level delegated. If running
|
15759 |
* within a site admin or specified a blog ID, check if delegated the connection for
|
15760 |
* the current context site.
|
@@ -15850,25 +15843,7 @@
|
|
15850 |
'offset' => $offset,
|
15851 |
);
|
15852 |
|
15853 |
-
|
15854 |
-
// For WP 4.6 and above.
|
15855 |
-
return get_sites( $args );
|
15856 |
-
} else if ( function_exists( 'wp_' . 'get_sites' ) ) {
|
15857 |
-
// For WP 3.7 to WP 4.5.
|
15858 |
-
/**
|
15859 |
-
* This is a hack suggested previously proposed by the TRT. Our SDK is compliant with older WP versions and we'd like to keep it that way.
|
15860 |
-
*
|
15861 |
-
* @todo Remove this hack once this false-positive error is removed from the Theme Sniffer.
|
15862 |
-
*
|
15863 |
-
* @since 2.3.3
|
15864 |
-
* @author Vova Feldman (@svovaf)
|
15865 |
-
*/
|
15866 |
-
$fn = 'wp_' . 'get_sites';
|
15867 |
-
return $fn( $args );
|
15868 |
-
} else {
|
15869 |
-
// For WP 3.6 and below.
|
15870 |
-
return get_blog_list( 0, 'all' );
|
15871 |
-
}
|
15872 |
}
|
15873 |
|
15874 |
/**
|
@@ -15953,6 +15928,42 @@
|
|
15953 |
return $install_map;
|
15954 |
}
|
15955 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15956 |
/**
|
15957 |
* Gets a map of module IDs that the given user has opted-in to.
|
15958 |
*
|
@@ -16139,6 +16150,23 @@
|
|
16139 |
$site['blog_id'] );
|
16140 |
}
|
16141 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16142 |
/**
|
16143 |
* @author Leo Fajardo (@leorw)
|
16144 |
* @since 2.0.0
|
@@ -16186,12 +16214,18 @@
|
|
16186 |
}
|
16187 |
|
16188 |
$info = array(
|
16189 |
-
'uid'
|
16190 |
-
'url'
|
16191 |
-
'title' => $name,
|
16192 |
-
'language' => self::get_sanitized_language(),
|
16193 |
);
|
16194 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16195 |
if ( is_numeric( $blog_id ) ) {
|
16196 |
$info['blog_id'] = $blog_id;
|
16197 |
}
|
@@ -17136,12 +17170,13 @@
|
|
17136 |
$this->_register_account_hooks();
|
17137 |
}
|
17138 |
|
17139 |
-
if (
|
17140 |
-
|
17141 |
-
|
17142 |
-
|
17143 |
-
|
17144 |
-
FS_Clone_Manager::instance()->
|
|
|
17145 |
}
|
17146 |
}
|
17147 |
|
@@ -17221,11 +17256,14 @@
|
|
17221 |
* @return array
|
17222 |
*/
|
17223 |
private function get_versions() {
|
17224 |
-
$versions = array(
|
17225 |
-
|
17226 |
-
|
17227 |
-
|
17228 |
-
)
|
|
|
|
|
|
|
17229 |
|
17230 |
foreach ( $versions as $k => $version ) {
|
17231 |
$versions[ $k ] = self::get_api_sanitized_property( $k, $version );
|
@@ -17432,11 +17470,17 @@
|
|
17432 |
|
17433 |
$site = $this->get_site_info( $site );
|
17434 |
|
17435 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17436 |
'site_uid' => $site['uid'],
|
17437 |
'site_url' => $site['url'],
|
17438 |
-
'site_name' => $site['title'],
|
17439 |
-
'language' => self::get_sanitized_language( $site['language'] ),
|
17440 |
) );
|
17441 |
}
|
17442 |
|
@@ -17483,7 +17527,7 @@
|
|
17483 |
* In this case, the user and site info will be sent to the server but no
|
17484 |
* data will be saved to the WP installation's database.
|
17485 |
* @param number|bool $trial_plan_id
|
17486 |
-
* @param bool $is_disconnected Whether
|
17487 |
* @param null|bool $is_marketing_allowed
|
17488 |
* @param array $sites If network-level opt-in, an array of containing details of sites.
|
17489 |
* @param bool $redirect
|
@@ -17593,8 +17637,10 @@
|
|
17593 |
$params['is_marketing_allowed'] = $is_marketing_allowed;
|
17594 |
}
|
17595 |
|
17596 |
-
$params['is_disconnected']
|
17597 |
-
$params['format']
|
|
|
|
|
17598 |
|
17599 |
$request = array(
|
17600 |
'method' => 'POST',
|
@@ -17699,6 +17745,9 @@
|
|
17699 |
( isset( $decoded->is_extensions_tracking_allowed ) && ! is_null( $decoded->is_extensions_tracking_allowed ) ?
|
17700 |
$decoded->is_extensions_tracking_allowed :
|
17701 |
null ),
|
|
|
|
|
|
|
17702 |
$decoded->install_id,
|
17703 |
$decoded->install_public_key,
|
17704 |
$decoded->install_secret_key,
|
@@ -17715,6 +17764,9 @@
|
|
17715 |
( isset( $decoded->is_extensions_tracking_allowed ) && ! is_null( $decoded->is_extensions_tracking_allowed ) ?
|
17716 |
$decoded->is_extensions_tracking_allowed :
|
17717 |
null ),
|
|
|
|
|
|
|
17718 |
$decoded->installs,
|
17719 |
false
|
17720 |
);
|
@@ -17816,7 +17868,7 @@
|
|
17816 |
|
17817 |
if ( ! $this->is_paying_or_trial() ) {
|
17818 |
$this->_admin_notices->add_sticky(
|
17819 |
-
sprintf( $this->get_text_inline( '%s
|
17820 |
'activation_complete'
|
17821 |
);
|
17822 |
}
|
@@ -17938,6 +17990,7 @@
|
|
17938 |
fs_request_get( 'user_secret_key' ),
|
17939 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
17940 |
fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
|
|
|
17941 |
$pending_sites_info['blog_ids'],
|
17942 |
$pending_sites_info['license_key'],
|
17943 |
$pending_sites_info['trial_plan_id']
|
@@ -17949,6 +18002,7 @@
|
|
17949 |
fs_request_get( 'user_secret_key' ),
|
17950 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
17951 |
fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
|
|
|
17952 |
fs_request_get( 'install_id' ),
|
17953 |
fs_request_get( 'install_public_key' ),
|
17954 |
fs_request_get( 'install_secret_key' ),
|
@@ -18011,6 +18065,7 @@
|
|
18011 |
* @param string $user_secret_key
|
18012 |
* @param bool|null $is_marketing_allowed
|
18013 |
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
|
|
18014 |
* @param number $install_id
|
18015 |
* @param string $install_public_key
|
18016 |
* @param string $install_secret_key
|
@@ -18025,6 +18080,7 @@
|
|
18025 |
$user_secret_key,
|
18026 |
$is_marketing_allowed,
|
18027 |
$is_extensions_tracking_allowed,
|
|
|
18028 |
$install_id,
|
18029 |
$install_public_key,
|
18030 |
$install_secret_key,
|
@@ -18066,7 +18122,10 @@
|
|
18066 |
$this->disable_opt_in_notice_and_lock_user();
|
18067 |
}
|
18068 |
|
18069 |
-
$this->
|
|
|
|
|
|
|
18070 |
|
18071 |
return $this->setup_account(
|
18072 |
$this->_user,
|
@@ -18087,6 +18146,7 @@
|
|
18087 |
* @param string $user_secret_key
|
18088 |
* @param bool|null $is_marketing_allowed
|
18089 |
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
|
|
18090 |
* @param array $site_ids
|
18091 |
* @param bool $license_key
|
18092 |
* @param bool $trial_plan_id
|
@@ -18100,6 +18160,7 @@
|
|
18100 |
$user_secret_key,
|
18101 |
$is_marketing_allowed,
|
18102 |
$is_extensions_tracking_allowed,
|
|
|
18103 |
$site_ids,
|
18104 |
$license_key = false,
|
18105 |
$trial_plan_id = false,
|
@@ -18111,7 +18172,10 @@
|
|
18111 |
$this->disable_opt_in_notice_and_lock_user();
|
18112 |
}
|
18113 |
|
18114 |
-
$this->
|
|
|
|
|
|
|
18115 |
|
18116 |
$sites = array();
|
18117 |
foreach ( $site_ids as $site_id ) {
|
@@ -18132,6 +18196,7 @@
|
|
18132 |
* @param string $user_secret_key
|
18133 |
* @param bool|null $is_marketing_allowed
|
18134 |
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
|
|
18135 |
* @param object[] $installs
|
18136 |
* @param bool $redirect
|
18137 |
* @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.
|
@@ -18144,6 +18209,7 @@
|
|
18144 |
$user_secret_key,
|
18145 |
$is_marketing_allowed,
|
18146 |
$is_extensions_tracking_allowed,
|
|
|
18147 |
array $installs,
|
18148 |
$redirect = true,
|
18149 |
$auto_install = false
|
@@ -18154,7 +18220,10 @@
|
|
18154 |
$this->disable_opt_in_notice_and_lock_user();
|
18155 |
}
|
18156 |
|
18157 |
-
$this->
|
|
|
|
|
|
|
18158 |
|
18159 |
$install_ids = array();
|
18160 |
|
@@ -18218,7 +18287,7 @@
|
|
18218 |
* @author Vova Feldman
|
18219 |
* @since 1.2.1.6
|
18220 |
*/
|
18221 |
-
$this->skip_connection(
|
18222 |
} else {
|
18223 |
// Install must be activated via email since
|
18224 |
// user with the same email already exist.
|
@@ -18238,8 +18307,8 @@
|
|
18238 |
|
18239 |
$next_page = $this->get_after_activation_url( 'after_pending_connect_url' );
|
18240 |
|
18241 |
-
// Reload the page with with pending activation message.
|
18242 |
if ( $redirect ) {
|
|
|
18243 |
fs_redirect( $next_page );
|
18244 |
}
|
18245 |
|
@@ -18268,7 +18337,10 @@
|
|
18268 |
*/
|
18269 |
$license_key = fs_request_get( 'license_secret_key' );
|
18270 |
|
18271 |
-
$this->
|
|
|
|
|
|
|
18272 |
|
18273 |
$this->install_with_current_user( $license_key );
|
18274 |
}
|
@@ -18903,7 +18975,7 @@
|
|
18903 |
if ( ! $this->has_settings_menu() ) {
|
18904 |
// Add the opt-in page without a menu item.
|
18905 |
$hook = FS_Admin_Menu_Manager::add_subpage(
|
18906 |
-
|
18907 |
$this->get_plugin_name(),
|
18908 |
$this->get_plugin_name(),
|
18909 |
'manage_options',
|
@@ -19335,7 +19407,7 @@
|
|
19335 |
$hook = FS_Admin_Menu_Manager::add_subpage(
|
19336 |
$item['show_submenu'] ?
|
19337 |
$top_level_menu_slug :
|
19338 |
-
|
19339 |
$item['page_title'],
|
19340 |
$menu_item,
|
19341 |
$capability,
|
@@ -19350,7 +19422,7 @@
|
|
19350 |
FS_Admin_Menu_Manager::add_subpage(
|
19351 |
$item['show_submenu'] ?
|
19352 |
$top_level_menu_slug :
|
19353 |
-
|
19354 |
$item['page_title'],
|
19355 |
$menu_item,
|
19356 |
$capability,
|
@@ -22154,8 +22226,7 @@
|
|
22154 |
if ( ! $this->is_api_result_entity( $plan ) ) {
|
22155 |
// Some API error while trying to start the trial.
|
22156 |
$this->_admin_notices->add(
|
22157 |
-
|
22158 |
-
. ' ' . var_export( $plan, true ),
|
22159 |
$oops_text,
|
22160 |
'error'
|
22161 |
);
|
@@ -22333,7 +22404,7 @@
|
|
22333 |
) {
|
22334 |
$this->_logger->entrance();
|
22335 |
|
22336 |
-
if ( $this->is_unresolved_clone() ) {
|
22337 |
return false;
|
22338 |
}
|
22339 |
|
@@ -22343,7 +22414,8 @@
|
|
22343 |
* @since 1.1.7.3 Check for plugin updates from Freemius only if opted-in.
|
22344 |
* @since 1.1.7.4 Also check updates for add-ons.
|
22345 |
*/
|
22346 |
-
if (
|
|
|
22347 |
! $this->_is_addon_id( $addon_id )
|
22348 |
) {
|
22349 |
if ( ! is_multisite() ) {
|
@@ -22353,6 +22425,10 @@
|
|
22353 |
$installs_map = $this->get_blog_install_map();
|
22354 |
|
22355 |
foreach ( $installs_map as $blog_id => $install ) {
|
|
|
|
|
|
|
|
|
22356 |
/**
|
22357 |
* @var FS_Site $install
|
22358 |
*/
|
@@ -23136,26 +23212,23 @@
|
|
23136 |
|
23137 |
if ( $is_parent_plugin_action ) {
|
23138 |
if ( $is_network_action && ! empty( $blog_id ) ) {
|
23139 |
-
if ( $this->is_registered() ) {
|
23140 |
-
if ( $this->is_tracking_prohibited() ) {
|
23141 |
-
if ( $this->
|
23142 |
$this->_admin_notices->add(
|
23143 |
-
sprintf( $this->get_text_inline( '
|
23144 |
$this->get_text_inline( 'Thank you!', 'thank-you' )
|
23145 |
);
|
23146 |
}
|
23147 |
} else {
|
23148 |
-
if ( $this->
|
|
|
|
|
23149 |
$this->_admin_notices->add(
|
23150 |
sprintf(
|
23151 |
-
$this->get_text_inline( '
|
23152 |
-
$this->get_plugin_title(),
|
23153 |
self::get_unfiltered_site_url( $blog_id, true ),
|
23154 |
-
|
23155 |
-
'<a href="%s" target="_blank" rel="noopener">%s</a>',
|
23156 |
-
'https://freemius.com',
|
23157 |
-
'freemius.com'
|
23158 |
-
)
|
23159 |
)
|
23160 |
);
|
23161 |
}
|
@@ -23757,7 +23830,17 @@
|
|
23757 |
}
|
23758 |
|
23759 |
static function _clean_admin_content_section_hook() {
|
23760 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23761 |
|
23762 |
// Hide footer.
|
23763 |
echo '<style>#wpfooter { display: none !important; }</style>';
|
@@ -23898,29 +23981,29 @@
|
|
23898 |
private function api_site_call( $path, $method = 'GET', $params = array(), $flush_instance = false ) {
|
23899 |
$result = $this->get_api_site_scope( $flush_instance )->call( $path, $method, $params );
|
23900 |
|
23901 |
-
|
23902 |
-
|
23903 |
-
|
23904 |
-
|
23905 |
-
|
23906 |
-
|
23907 |
if (
|
23908 |
$this->is_registered() &&
|
23909 |
FS_Api::is_api_result_entity( $result ) &&
|
23910 |
isset( $result->url )
|
23911 |
) {
|
23912 |
-
|
23913 |
$stored_remote_url = trailingslashit( $result->url );
|
23914 |
|
23915 |
-
|
23916 |
$this->_site->url = $result->url;
|
23917 |
-
|
23918 |
-
|
23919 |
|
23920 |
-
|
23921 |
FS_Clone_Manager::instance()->maybe_run_clone_resolution();
|
|
|
23922 |
}
|
23923 |
-
}
|
23924 |
|
23925 |
return $result;
|
23926 |
}
|
@@ -24531,15 +24614,6 @@
|
|
24531 |
|
24532 |
$this->_logger->entrance();
|
24533 |
|
24534 |
-
/**
|
24535 |
-
* @author Vova Feldman (@svovaf)
|
24536 |
-
* @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.
|
24537 |
-
*/
|
24538 |
-
/*if ( $this->is_premium() ) {
|
24539 |
-
// Don't add opt-in/out for premium code base.
|
24540 |
-
return;
|
24541 |
-
}*/
|
24542 |
-
|
24543 |
if ( $this->is_only_premium() && $this->is_free_plan() ) {
|
24544 |
// 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.
|
24545 |
return;
|
@@ -24602,23 +24676,15 @@
|
|
24602 |
}
|
24603 |
}
|
24604 |
|
24605 |
-
if ( $this->add_ajax_action( '
|
24606 |
-
return;
|
24607 |
-
}
|
24608 |
-
|
24609 |
-
if ( $this->add_ajax_action( 'allow_tracking', array( &$this, '_allow_tracking_callback' ) ) ) {
|
24610 |
-
return;
|
24611 |
-
}
|
24612 |
-
|
24613 |
-
if ( $this->add_ajax_action( 'update_tracking_permission', array( &$this, '_update_tracking_permission_callback' ) ) ) {
|
24614 |
return;
|
24615 |
}
|
24616 |
|
24617 |
$link_text_id = '';
|
24618 |
$url = '#';
|
24619 |
|
24620 |
-
if ( $this->is_registered() ) {
|
24621 |
-
if ( $this->is_tracking_allowed() ) {
|
24622 |
$link_text_id = $this->get_text_inline( 'Opt Out', 'opt-out' );
|
24623 |
} else {
|
24624 |
$link_text_id = $this->get_text_inline( 'Opt In', 'opt-in' );
|
@@ -24815,9 +24881,12 @@
|
|
24815 |
*/
|
24816 |
private function is_premium_version_installed() {
|
24817 |
$premium_plugin_basename = $this->premium_plugin_basename();
|
24818 |
-
$premium_plugin = get_plugins( '/' . dirname( $premium_plugin_basename ) );
|
24819 |
|
24820 |
-
|
|
|
|
|
|
|
|
|
24821 |
}
|
24822 |
|
24823 |
/**
|
@@ -24853,7 +24922,9 @@
|
|
24853 |
* @author Leo Fajardo (@leorw)
|
24854 |
* @since 2.2.1
|
24855 |
*/
|
24856 |
-
$
|
|
|
|
|
24857 |
|
24858 |
return sprintf(
|
24859 |
/* translators: %1$s: Product title; %2$s: Plan title */
|
@@ -24862,7 +24933,9 @@
|
|
24862 |
$plan_title,
|
24863 |
sprintf(
|
24864 |
'<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s</button></a>',
|
24865 |
-
|
|
|
|
|
24866 |
esc_html( sprintf(
|
24867 |
/* translators: %s: Plan title */
|
24868 |
$this->get_text_inline( 'Activate %s features', 'activate-x-features' ),
|
@@ -24887,7 +24960,7 @@
|
|
24887 |
) ),
|
24888 |
$deactivation_step,
|
24889 |
$this->get_text_inline( 'Upload and activate the downloaded version', 'upload-and-activate' ),
|
24890 |
-
$this->apply_filters( 'upload_and_install_video_url', '//bit.ly/
|
24891 |
$this->get_text_inline( 'How to upload and activate?', 'howto-upload-activate' )
|
24892 |
);
|
24893 |
}
|
@@ -25340,8 +25413,10 @@
|
|
25340 |
function _tabs_capture() {
|
25341 |
$this->_logger->entrance();
|
25342 |
|
25343 |
-
if (
|
25344 |
-
|
|
|
|
|
25345 |
) {
|
25346 |
return;
|
25347 |
}
|
@@ -25395,8 +25470,10 @@
|
|
25395 |
function _store_tabs_styles() {
|
25396 |
$this->_logger->entrance();
|
25397 |
|
25398 |
-
if (
|
25399 |
-
|
|
|
|
|
25400 |
) {
|
25401 |
return;
|
25402 |
}
|
941 |
* @param string $sdk_version
|
942 |
*/
|
943 |
function _sdk_version_update( $sdk_prev_version, $sdk_version ) {
|
|
|
|
|
|
|
944 |
if ( empty( $sdk_prev_version ) ) {
|
945 |
return;
|
946 |
}
|
947 |
|
948 |
+
if (
|
949 |
+
version_compare( $sdk_prev_version, '2.5.1', '<' ) &&
|
950 |
+
version_compare( $sdk_version, '2.5.1', '>=' )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
951 |
) {
|
952 |
+
if ( $this->is_registered( true ) ) {
|
953 |
+
/**
|
954 |
+
* Migrate to new permissions layer.
|
955 |
+
*/
|
956 |
+
require_once WP_FS__DIR_INCLUDES . '/supplements/fs-migration-2.5.1.php';
|
|
|
|
|
|
|
|
|
|
|
|
|
957 |
|
958 |
+
$install_by_blog_id = is_multisite() ?
|
959 |
+
$this->get_blog_install_map() :
|
960 |
+
array( 0 => $this->_site );
|
961 |
|
962 |
+
fs_migrate_251( $this, $install_by_blog_id );
|
963 |
}
|
964 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
965 |
}
|
966 |
|
967 |
/**
|
1012 |
}
|
1013 |
}
|
1014 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1015 |
/**
|
1016 |
* @author Vova Feldman (@svovaf)
|
1017 |
* @since 1.2.2.7
|
1873 |
return;
|
1874 |
}
|
1875 |
|
1876 |
+
if (
|
1877 |
+
( self::is_plugins_page() && $this->is_plugin() ) ||
|
1878 |
+
( self::is_themes_page() && $this->is_theme() ) ||
|
1879 |
+
fs_request_is_action_secure( $this->get_unique_affix() . '_reconnect' )
|
1880 |
+
) {
|
1881 |
+
$this->_add_tracking_links();
|
1882 |
+
}
|
1883 |
|
1884 |
if ( self::is_plugins_page() && $this->is_plugin() ) {
|
1885 |
$this->hook_plugin_action_links();
|
3432 |
* @author Leo Fajardo (@leorw)
|
3433 |
* @since 2.5.0
|
3434 |
*
|
3435 |
+
* @param bool $only_if_manual_resolution_is_not_hidden
|
3436 |
+
*
|
3437 |
* @return bool
|
3438 |
*/
|
3439 |
+
private function is_unresolved_clone( $only_if_manual_resolution_is_not_hidden = false ) {
|
3440 |
+
if ( ! $this->is_clone( $only_if_manual_resolution_is_not_hidden ) ) {
|
3441 |
return false;
|
3442 |
}
|
3443 |
|
3447 |
/**
|
3448 |
* @author Leo Fajardo (@leorw)
|
3449 |
* @since 2.5.0
|
3450 |
+
*
|
3451 |
+
* @param bool $only_if_manual_resolution_is_not_hidden
|
3452 |
*/
|
3453 |
+
function is_clone( $only_if_manual_resolution_is_not_hidden = false ) {
|
3454 |
if ( ! is_object( $this->_site ) ) {
|
3455 |
return false;
|
3456 |
}
|
3457 |
|
3458 |
+
$blog_id = null;
|
3459 |
+
|
3460 |
+
if (
|
3461 |
+
fs_is_network_admin() &&
|
3462 |
+
FS_Site::is_valid_id( $this->_storage->network_install_blog_id )
|
3463 |
+
) {
|
3464 |
+
// Ensure that we're comparing the network install's URL with the relevant subsite's URL.
|
3465 |
+
$blog_id = $this->_storage->network_install_blog_id;
|
3466 |
+
}
|
3467 |
+
|
3468 |
+
$site_url = Freemius::get_unfiltered_site_url( $blog_id, true, true );
|
3469 |
+
|
3470 |
+
if ( ! $this->_site->is_clone( $site_url ) ) {
|
3471 |
+
return false;
|
3472 |
+
}
|
3473 |
+
|
3474 |
return (
|
3475 |
+
! $only_if_manual_resolution_is_not_hidden ||
|
3476 |
+
! FS_Clone_Manager::instance()->should_hide_manual_resolution()
|
3477 |
);
|
3478 |
}
|
3479 |
|
3648 |
} else {
|
3649 |
// Add hidden debug page.
|
3650 |
$hook = FS_Admin_Menu_Manager::add_subpage(
|
3651 |
+
'',
|
3652 |
$title,
|
3653 |
$title,
|
3654 |
'manage_options',
|
4389 |
$install_previous_desc = $this->esc_html_inline( 'Uninstall this version and install the previous one.', 'install-previous-desc' );
|
4390 |
$fix_issue_title = $this->esc_html_inline( 'Yes - I\'m giving you a chance to fix it', 'fix-issue-title' );
|
4391 |
$fix_issue_desc = $this->esc_html_inline( 'We will do our best to whitelist your server and resolve this issue ASAP. You will get a follow-up email to %s once we have an update.', 'fix-issue-desc' );
|
4392 |
+
/* translators: %s: product title (e.g. "Awesome Plugin" requires access to...) */
|
4393 |
+
$x_requires_access_to_api = $this->esc_html_inline( '%s requires access to our API.', 'x-requires-access-to-api' );
|
4394 |
$sysadmin_title = $this->esc_html_inline( 'I\'m a system administrator', 'sysadmin-title' );
|
4395 |
$happy_to_resolve_issue_asap = $this->esc_html_inline( 'We are sure it\'s an issue on our side and more than happy to resolve it for you ASAP if you give us a chance.', 'happy-to-resolve-issue-asap' );
|
4396 |
|
4397 |
+
if ( $this->is_premium() ) {
|
4398 |
+
/* translators: This string is optionally prepended to 'plugin requires access to our API.' */
|
4399 |
+
$x_requires_access_to_api = $this->esc_html_inline( 'For automatic delivery of security & feature updates,', 'requires-api-for' ) . ' ' . $x_requires_access_to_api;
|
4400 |
+
}
|
4401 |
+
|
4402 |
$message = false;
|
4403 |
if ( is_object( $api_result ) &&
|
4404 |
isset( $api_result->error ) &&
|
5030 |
|
5031 |
/**
|
5032 |
* This should be executed even if Freemius is off for the core module,
|
5033 |
+
* otherwise, the add-ons dialog box won't work properly. This is especially
|
5034 |
* relevant when the developer decided to turn FS off for existing users.
|
5035 |
*
|
5036 |
* @author Vova Feldman (@svovaf)
|
5227 |
* because the updater has some logic that needs to be executed
|
5228 |
* during AJAX calls.
|
5229 |
*
|
5230 |
+
* Currently, we need to hook to the `http_request_host_is_external` filter.
|
5231 |
* In the future, there might be additional logic added.
|
5232 |
*
|
5233 |
* @author Vova Feldman
|
5247 |
( file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $this->premium_plugin_basename() ) ) )
|
5248 |
) &&
|
5249 |
$this->has_release_on_freemius() &&
|
5250 |
+
( ! $this->is_unresolved_clone( true ) )
|
5251 |
) {
|
5252 |
FS_Plugin_Updater::instance( $this );
|
5253 |
}
|
5316 |
}
|
5317 |
|
5318 |
/**
|
5319 |
+
* @param string[] $permissions
|
5320 |
+
* @param bool $is_enabled
|
5321 |
+
* @param int|null $blog_id
|
5322 |
*
|
5323 |
+
* @return true|object `true` on success, API error object on failure.
|
5324 |
*/
|
5325 |
+
private function update_site_permissions( array $permissions, $is_enabled, $blog_id = null ) {
|
5326 |
$this->_logger->entrance();
|
5327 |
|
5328 |
+
$params = array(
|
5329 |
+
'permissions' => implode( ',', $permissions ),
|
5330 |
+
'is_enabled' => $is_enabled,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5331 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5332 |
|
5333 |
+
$current_blog_id = get_current_blog_id();
|
5334 |
+
$is_blog_switched = false;
|
5335 |
+
if ( is_numeric( $blog_id ) && $current_blog_id != $blog_id ) {
|
5336 |
+
$is_blog_switched = $this->switch_to_blog( $blog_id );
|
|
|
|
|
5337 |
}
|
5338 |
|
5339 |
+
$result = $this->api_site_call( '/permissions.json', 'put', $params );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5340 |
|
5341 |
+
if ( $is_blog_switched ) {
|
5342 |
+
$this->switch_to_blog( $current_blog_id );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5343 |
}
|
5344 |
|
5345 |
+
if (
|
5346 |
+
! $this->is_api_result_object( $result ) ||
|
5347 |
+
! isset( $result->install_id )
|
|
|
|
|
|
|
|
|
|
|
5348 |
) {
|
5349 |
$this->_logger->api_error( $result );
|
5350 |
|
5351 |
return $result;
|
5352 |
}
|
5353 |
|
|
|
|
|
|
|
|
|
|
|
|
|
5354 |
return true;
|
5355 |
}
|
5356 |
|
5357 |
/**
|
5358 |
+
* @param string[] $permissions
|
5359 |
+
* @param bool $is_enabled
|
5360 |
+
* @param bool $has_site_delegated_connection
|
|
|
|
|
|
|
|
|
|
|
5361 |
*
|
5362 |
+
* @return true|object `true` on success, API error object on failure.
|
|
|
|
|
|
|
5363 |
*/
|
5364 |
+
private function update_network_permissions(
|
5365 |
+
array $permissions,
|
5366 |
+
$is_enabled,
|
5367 |
+
&$has_site_delegated_connection
|
5368 |
+
) {
|
5369 |
$this->_logger->entrance();
|
5370 |
|
|
|
|
|
|
|
|
|
|
|
5371 |
$install_id_2_blog_id = array();
|
5372 |
+
$install_by_blog_id = $this->get_blog_install_map();
|
5373 |
|
5374 |
+
$has_site_delegated_connection = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5375 |
|
5376 |
+
foreach ( $install_by_blog_id as $blog_id => $install ) {
|
5377 |
if ( $this->is_site_delegated_connection( $blog_id ) ) {
|
5378 |
+
// Only update permissions of non-delegated installs.
|
5379 |
+
$has_site_delegated_connection = true;
|
5380 |
continue;
|
5381 |
}
|
5382 |
|
|
|
|
|
5383 |
$install_id_2_blog_id[ $install->id ] = $blog_id;
|
5384 |
}
|
5385 |
|
5387 |
return true;
|
5388 |
}
|
5389 |
|
5390 |
+
$params = array(
|
5391 |
+
'permissions' => implode( ',', $permissions ),
|
5392 |
+
'is_enabled' => $is_enabled,
|
5393 |
+
'install_ids' => implode( ',', array_keys( $install_id_2_blog_id ) ),
|
5394 |
+
);
|
5395 |
|
5396 |
// Send update to FS.
|
5397 |
+
$result = $this->get_current_or_network_user_api_scope()->call(
|
5398 |
+
"/plugins/{$this->_module_id}/installs/permissions.json",
|
5399 |
+
'put',
|
5400 |
+
$params
|
5401 |
+
);
|
5402 |
|
5403 |
+
if ( ! $this->is_api_result_object( $result, 'installs_metadata' ) ) {
|
5404 |
$this->_logger->api_error( $result );
|
5405 |
|
5406 |
return $result;
|
5407 |
}
|
5408 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5409 |
return true;
|
5410 |
}
|
5411 |
|
5412 |
/**
|
5413 |
+
* @param mixed $result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5414 |
*
|
5415 |
+
* @return string
|
5416 |
*/
|
5417 |
+
private function get_api_error_message( $result ) {
|
5418 |
+
$error_message = sprintf( $this->get_text_inline( 'There was an unexpected API error while processing your request. Please try again in a few minutes and if it still doesn\'t work, contact the %s\'s author with the following:',
|
5419 |
+
'unexpected-api-error' ), $this->_module_type ) . ' ';
|
5420 |
|
5421 |
+
if (
|
5422 |
+
$this->is_api_error( $result ) &&
|
5423 |
+
isset( $result->error )
|
5424 |
+
) {
|
5425 |
+
$code = empty( $result->error->code ) ? '' : " Code: {$result->error->code}";
|
5426 |
+
|
5427 |
+
$error_message .= "<b>{$result->error->message}{$code}</b>";
|
5428 |
+
} else {
|
5429 |
+
$error_message .= var_export( $result, true );
|
5430 |
+
}
|
5431 |
+
|
5432 |
+
return $error_message;
|
5433 |
}
|
5434 |
|
5435 |
/**
|
5436 |
+
* @author Vova Feldman (@svovaf)
|
5437 |
+
* @since 2.5.1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5438 |
*/
|
5439 |
+
function _toggle_permission_tracking_callback() {
|
5440 |
$this->_logger->entrance();
|
5441 |
|
5442 |
+
$this->check_ajax_referer( 'toggle_permission_tracking' );
|
|
|
|
|
|
|
5443 |
|
5444 |
+
if ( ! $this->is_registered( true ) ) {
|
5445 |
+
self::shoot_ajax_failure( 'User never opted-in.' );
|
|
|
5446 |
}
|
5447 |
|
5448 |
+
$is_enabled = fs_request_get_bool( 'is_enabled' );
|
5449 |
+
$permissions = fs_request_get( 'permissions' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5450 |
|
5451 |
+
if ( ! is_string( $permissions ) ) {
|
5452 |
+
self::shoot_ajax_failure( 'The permissions param must be a string.' );
|
5453 |
}
|
5454 |
|
5455 |
+
$permissions = explode( ',', $permissions );
|
|
|
5456 |
|
5457 |
+
$result = $this->toggle_permission_tracking( $permissions, $is_enabled );
|
5458 |
|
5459 |
+
if ( true !== $result ) {
|
5460 |
+
self::shoot_ajax_failure( $this->get_api_error_message( $result ) );
|
5461 |
+
}
|
5462 |
+
|
5463 |
+
self::shoot_ajax_success();
|
5464 |
}
|
5465 |
|
5466 |
/**
|
5467 |
+
* @param string[] $permissions
|
5468 |
+
* @param bool $is_enabled
|
5469 |
+
* @param int|null $blog_id
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5470 |
*
|
5471 |
+
* @return bool|mixed `true` if updated successfully or no update is needed.
|
5472 |
*/
|
5473 |
+
private function toggle_permission_tracking( $permissions, $is_enabled, $blog_id = null ) {
|
5474 |
+
if ( ! $this->is_registered( true ) ) {
|
|
|
|
|
5475 |
// User never opted-in.
|
5476 |
return false;
|
5477 |
}
|
5478 |
|
5479 |
+
// Check if permissions are already set as needed.
|
5480 |
+
if ( FS_Permission_Manager::instance( $this )->are_permissions( $permissions, $is_enabled, $blog_id ) ) {
|
5481 |
+
/**
|
5482 |
+
* Note:
|
5483 |
+
* When running on the network admin, there's no need to iterate through all the installs individually since network opt-in permissions are managed for ALL non-delegated installs through a single option (per permission) on the network-level storage.
|
5484 |
+
*/
|
5485 |
+
return true;
|
|
|
|
|
|
|
|
|
|
|
5486 |
}
|
5487 |
|
5488 |
+
$api_managed_permissions = array_intersect(
|
5489 |
+
$permissions,
|
5490 |
+
FS_Permission_Manager::get_api_managed_permission_ids()
|
5491 |
+
);
|
5492 |
+
|
5493 |
+
if (
|
5494 |
+
in_array( FS_Permission_Manager::PERMISSION_ESSENTIALS, $permissions ) &&
|
5495 |
+
! in_array( FS_Permission_Manager::PERMISSION_SITE, $permissions )
|
5496 |
+
) {
|
5497 |
+
$api_managed_permissions[] = FS_Permission_Manager::PERMISSION_SITE;
|
5498 |
}
|
5499 |
|
5500 |
+
if ( ! empty( $api_managed_permissions ) ) {
|
5501 |
+
$has_site_delegated_connection = false;
|
5502 |
|
5503 |
+
if (
|
5504 |
+
! $is_enabled &&
|
5505 |
+
! in_array( FS_Permission_Manager::PERMISSION_EXTENSIONS, $api_managed_permissions ) &&
|
5506 |
+
false === FS_Permission_Manager::instance( $this )->is_extensions_tracking_allowed( $blog_id )
|
5507 |
+
) {
|
5508 |
+
/**
|
5509 |
+
* If we are turning off a permission and the extensions permission is off too, enrich the permissions update request to also turn off extensions tracking, as currently when opting in with extensions tracking disabled the extensions tracking is off but the API isn't aware of it.
|
5510 |
+
*
|
5511 |
+
* @todo Remove this entire `if` after implementing granular opt-in that also sends the permissions to the API when opting in.
|
5512 |
+
*/
|
5513 |
+
$api_managed_permissions[] = FS_Permission_Manager::PERMISSION_EXTENSIONS;
|
5514 |
+
}
|
5515 |
|
5516 |
+
if ( is_null( $blog_id ) && fs_is_network_admin() ) {
|
5517 |
+
$result = $this->update_network_permissions(
|
5518 |
+
$api_managed_permissions,
|
5519 |
+
$is_enabled,
|
5520 |
+
$has_site_delegated_connection
|
5521 |
+
);
|
5522 |
+
} else {
|
5523 |
+
$result = $this->update_site_permissions(
|
5524 |
+
$api_managed_permissions,
|
5525 |
+
$is_enabled,
|
5526 |
+
$blog_id
|
5527 |
+
);
|
5528 |
+
}
|
5529 |
|
5530 |
+
if ( true !== $result ) {
|
5531 |
+
return $result;
|
5532 |
+
}
|
5533 |
|
5534 |
+
if ( in_array( FS_Permission_Manager::PERMISSION_SITE, $api_managed_permissions ) ) {
|
5535 |
+
if ( $is_enabled ) {
|
5536 |
+
$this->schedule_sync_cron();
|
5537 |
+
} else {
|
5538 |
+
$this->clear_sync_cron( ! $has_site_delegated_connection );
|
5539 |
+
}
|
5540 |
+
}
|
5541 |
|
5542 |
+
if ( in_array( FS_Permission_Manager::PERMISSION_USER, $api_managed_permissions ) ) {
|
5543 |
+
$this->toggle_user_permission( $is_enabled, $blog_id );
|
5544 |
+
}
|
|
|
|
|
5545 |
}
|
5546 |
|
5547 |
+
$this->update_tracking_permissions(
|
5548 |
+
$permissions,
|
5549 |
+
$is_enabled,
|
5550 |
+
$blog_id
|
5551 |
+
);
|
5552 |
|
|
|
5553 |
return true;
|
5554 |
}
|
5555 |
|
5556 |
+
/**
|
5557 |
+
* @param bool $is_enabled
|
5558 |
+
* @param int|null $blog_id
|
5559 |
+
*/
|
5560 |
+
private function toggle_user_permission( $is_enabled, $blog_id = null ) {
|
5561 |
+
$network_or_blog_ids = is_numeric( $blog_id ) ?
|
5562 |
+
$blog_id :
|
5563 |
+
fs_is_network_admin();
|
5564 |
+
|
5565 |
+
if ( $is_enabled ) {
|
5566 |
+
$this->reset_anonymous_mode( $network_or_blog_ids );
|
5567 |
+
} else {
|
5568 |
+
$this->skip_connection( $network_or_blog_ids );
|
5569 |
+
}
|
5570 |
+
}
|
5571 |
+
|
5572 |
/**
|
5573 |
* Opt-in back into usage tracking.
|
5574 |
*
|
5582 |
* @author Leo Fajardo (@leorw)
|
5583 |
* @since 1.2.1.5
|
5584 |
*
|
5585 |
+
* @bool $is_enabled
|
5586 |
*
|
5587 |
* @return bool|object
|
5588 |
*/
|
5589 |
+
private function toggle_site_tracking( $is_enabled, $blog_id = null ) {
|
5590 |
$this->_logger->entrance();
|
5591 |
|
5592 |
+
return $this->toggle_permission_tracking(
|
5593 |
+
FS_Permission_Manager::instance( $this )->get_site_tracking_permission_names(),
|
5594 |
+
$is_enabled,
|
5595 |
+
$blog_id
|
5596 |
+
);
|
5597 |
}
|
5598 |
|
5599 |
/**
|
5614 |
|
5615 |
if ( ! fs_is_network_admin() || $is_context_single_site ) {
|
5616 |
if ( $this->is_tracking_prohibited() ) {
|
5617 |
+
FS_Permission_Manager::instance( $this )->update_site_tracking( true );
|
|
|
5618 |
}
|
5619 |
} else {
|
5620 |
$installs_map = $this->get_blog_install_map();
|
5622 |
/**
|
5623 |
* @var FS_Site $install
|
5624 |
*/
|
5625 |
+
if ( ! $this->is_tracking_allowed( $blog_id, $install ) ) {
|
5626 |
+
FS_Permission_Manager::instance( $this )->update_site_tracking( true, $blog_id );
|
|
|
5627 |
}
|
5628 |
}
|
5629 |
}
|
5630 |
}
|
5631 |
|
5632 |
/**
|
5633 |
+
* Update permission tracking flags. When updating in a network context, in addition to updating the network-level flags, also update the permissions on the site-level for all non-delegated sites.
|
|
|
5634 |
*
|
5635 |
+
* @param string[] $permissions
|
5636 |
+
* @param bool $is_enabled
|
5637 |
+
* @param int|null $blog_id
|
5638 |
+
*
|
5639 |
+
* @return array
|
5640 |
*/
|
5641 |
+
private function update_tracking_permissions( $permissions, $is_enabled, $blog_id = null ) {
|
5642 |
+
// Alias.
|
5643 |
+
$permission_manager = FS_Permission_Manager::instance( $this );
|
|
|
|
|
|
|
5644 |
|
5645 |
+
$network_or_blog_ids = is_numeric( $blog_id ) ?
|
5646 |
+
$blog_id :
|
5647 |
+
fs_is_network_admin();
|
|
|
|
|
|
|
5648 |
|
5649 |
+
if ( true === $network_or_blog_ids ) {
|
5650 |
+
// Update the permission for all non-delegated sub-sites.
|
5651 |
+
$blog_ids = $this->get_non_delegated_blog_ids();
|
5652 |
|
5653 |
+
// Add the network-level to the array, to update the permission on the network-level storage.
|
5654 |
+
array_unshift( $blog_ids, null );
|
5655 |
+
}
|
5656 |
+
else
|
5657 |
+
{
|
5658 |
+
if ( false === $network_or_blog_ids ) {
|
5659 |
+
$network_or_blog_ids = null;
|
5660 |
+
}
|
5661 |
|
5662 |
+
$blog_ids = is_array( $network_or_blog_ids ) ?
|
5663 |
+
$network_or_blog_ids :
|
5664 |
+
array( $network_or_blog_ids );
|
5665 |
}
|
5666 |
|
5667 |
+
$result = array();
|
5668 |
+
foreach ( $permissions as $permission ) {
|
5669 |
+
$permission = trim( $permission );
|
5670 |
+
$is_permission_supported = true;
|
5671 |
+
|
5672 |
+
foreach ( $blog_ids as $id ) {
|
5673 |
+
$is_permission_supported = $permission_manager->update_permission_tracking_flag(
|
5674 |
+
$permission,
|
5675 |
+
$is_enabled,
|
5676 |
+
$id
|
5677 |
+
);
|
5678 |
+
}
|
5679 |
|
5680 |
+
if ( ! $is_permission_supported ) {
|
|
|
|
|
|
|
|
|
5681 |
$permission = 'no_match';
|
5682 |
+
}
|
5683 |
|
5684 |
+
$result[ $permission ] = $is_enabled;
|
|
|
5685 |
}
|
5686 |
|
5687 |
+
return $result;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5688 |
}
|
5689 |
|
5690 |
/**
|
5890 |
if ( $this->is_activation_mode() ) {
|
5891 |
if ( ! is_admin() ) {
|
5892 |
/**
|
5893 |
+
* If in activation mode, don't execute Freemius outside the admin dashboard.
|
|
|
5894 |
*
|
5895 |
* @author Vova Feldman (@svovaf)
|
5896 |
* @since 1.1.7.3
|
6437 |
if ( ! isset( $this->_is_anonymous ) ) {
|
6438 |
if ( $this->is_network_anonymous() ) {
|
6439 |
$this->_is_anonymous = true;
|
6440 |
+
} else if ( fs_is_network_admin() ) {
|
6441 |
+
/**
|
6442 |
+
* When not-network-anonymous, yet, running in the network admin, consider as anonymous only when ALL non-delegated sites are set to anonymous.
|
6443 |
+
*/
|
6444 |
+
$non_delegated_sites = $this->get_non_delegated_blog_ids();
|
6445 |
+
|
6446 |
+
foreach ( $non_delegated_sites as $blog_id ) {
|
6447 |
+
$is_anonymous = $this->_storage->get( 'is_anonymous', false, $blog_id );
|
6448 |
+
|
6449 |
+
if ( empty( $is_anonymous ) || false === $is_anonymous[ 'is' ] ) {
|
6450 |
+
$this->_is_anonymous = false;
|
6451 |
+
break;
|
6452 |
+
}
|
6453 |
+
}
|
6454 |
+
|
6455 |
+
if ( false !== $this->_is_anonymous ) {
|
6456 |
+
$this->_is_anonymous = true;
|
6457 |
+
}
|
6458 |
+
} else {
|
6459 |
if ( ! isset( $this->_storage->is_anonymous ) ) {
|
6460 |
// Not skipped.
|
6461 |
$this->_is_anonymous = false;
|
6714 |
return 0;
|
6715 |
}
|
6716 |
|
6717 |
+
if ( $this->_is_network_active ) {
|
6718 |
+
$network_install_blog_id = $this->_storage->network_install_blog_id;
|
|
|
|
|
|
|
|
|
|
|
6719 |
|
6720 |
+
if (
|
6721 |
+
is_numeric( $network_install_blog_id ) &&
|
6722 |
+
$except_blog_id != $network_install_blog_id &&
|
6723 |
+
self::is_site_active( $network_install_blog_id )
|
6724 |
) {
|
6725 |
+
// Try to run cron from the main network blog.
|
6726 |
+
$install = $this->get_install_by_blog_id( $network_install_blog_id );
|
6727 |
+
|
6728 |
+
if (
|
6729 |
+
is_object( $install ) &&
|
6730 |
+
$this->is_tracking_allowed( $network_install_blog_id, $install )
|
6731 |
+
) {
|
6732 |
+
return $network_install_blog_id;
|
6733 |
+
}
|
6734 |
}
|
6735 |
}
|
6736 |
|
6739 |
foreach ( $installs as $blog_id => $install ) {
|
6740 |
if ( $except_blog_id != $blog_id &&
|
6741 |
self::is_site_active( $blog_id ) &&
|
6742 |
+
$this->is_tracking_allowed( $blog_id, $install )
|
6743 |
) {
|
6744 |
return $blog_id;
|
6745 |
}
|
6771 |
/**
|
6772 |
* @var FS_Site $install
|
6773 |
*/
|
6774 |
+
if ( $this->is_tracking_allowed( $blog_id, $install ) ) {
|
6775 |
$clear_cron = false;
|
6776 |
break;
|
6777 |
}
|
6930 |
} else {
|
6931 |
$installs = $this->get_blog_install_map();
|
6932 |
foreach ( $installs as $blog_id => $install ) {
|
6933 |
+
if ( $this->is_tracking_allowed( $blog_id, $install ) ) {
|
6934 |
if ( ! isset( $users_2_blog_ids[ $install->user_id ] ) ) {
|
6935 |
$users_2_blog_ids[ $install->user_id ] = array();
|
6936 |
}
|
7315 |
|
7316 |
$this->_admin_notices->add_sticky(
|
7317 |
sprintf(
|
7318 |
+
$this->get_text_inline( 'You should receive a confirmation email for %s to your mailbox at %s. Please make sure you click the button in that email to %s.', 'pending-activation-message' ),
|
7319 |
'<b>' . $this->get_plugin_name() . '</b>',
|
7320 |
'<b>' . $email . '</b>',
|
7321 |
( $is_pending_trial ?
|
7322 |
$this->get_text_inline( 'start the trial', 'start-the-trial' ) :
|
7323 |
+
$this->get_text_inline( 'complete the opt-in', 'complete-the-opt-in' ) )
|
7324 |
),
|
7325 |
'activation_pending',
|
7326 |
'Thanks!'
|
7390 |
if ( fs_request_is_action( $this->get_unique_affix() . '_skip_activation' ) ) {
|
7391 |
check_admin_referer( $this->get_unique_affix() . '_skip_activation' );
|
7392 |
|
7393 |
+
$this->skip_connection( fs_is_network_admin() );
|
7394 |
|
7395 |
fs_redirect( $this->get_after_activation_url( 'after_skip_url' ) );
|
7396 |
}
|
7621 |
*
|
7622 |
* @return string
|
7623 |
*/
|
7624 |
+
static function current_page_url() {
|
7625 |
$url = 'http';
|
7626 |
|
7627 |
if ( isset( $_SERVER["HTTPS"] ) ) {
|
7819 |
* @author Leo Fajardo (@leorw)
|
7820 |
* @since 1.2.2
|
7821 |
*
|
7822 |
+
* @return bool
|
7823 |
*/
|
7824 |
private function can_activate_previous_theme() {
|
7825 |
+
return $this->can_activate_theme( $this->get_previous_theme_slug() );
|
7826 |
+
}
|
7827 |
+
|
7828 |
+
/**
|
7829 |
+
* @author Leo Fajardo (@leorw)
|
7830 |
+
* @since 2.5.0
|
7831 |
+
*
|
7832 |
+
* @return bool
|
7833 |
+
*/
|
7834 |
+
private function can_activate_theme( $slug ) {
|
7835 |
if ( false !== $slug && current_user_can( 'switch_themes' ) ) {
|
7836 |
$theme_instance = wp_get_theme( $slug );
|
7837 |
|
8807 |
$this->_is_anonymous = $is_anonymous;
|
8808 |
}
|
8809 |
|
8810 |
+
/**
|
8811 |
+
* @author Vova Feldman (@svovaf)
|
8812 |
+
* @since 2.5.1
|
8813 |
+
*
|
8814 |
+
* @param bool|int $network_or_blog_id
|
8815 |
+
*/
|
8816 |
+
private function unset_anonymous_mode( $network_or_blog_id = 0 ) {
|
8817 |
+
if ( true === $network_or_blog_id ) {
|
8818 |
+
unset( $this->_storage->is_anonymous_ms );
|
8819 |
+
} else {
|
8820 |
+
$this->_storage->remove( 'is_anonymous', true, $network_or_blog_id );
|
8821 |
+
}
|
8822 |
+
}
|
8823 |
+
|
8824 |
/**
|
8825 |
* @author Vova Feldman (@svovaf)
|
8826 |
* @since 2.0.0
|
8983 |
* @author Vova Feldman (@svovaf)
|
8984 |
* @since 1.1.3
|
8985 |
*
|
8986 |
+
* @param bool|int|int[] $network_or_blog_ids Since 2.0.0.
|
8987 |
*/
|
8988 |
+
private function reset_anonymous_mode( $network_or_blog_ids = false ) {
|
8989 |
+
if ( true === $network_or_blog_ids ) {
|
8990 |
+
$this->unset_anonymous_mode( true );
|
8991 |
+
|
8992 |
+
if ( fs_is_network_admin() ) {
|
8993 |
+
$this->_is_anonymous = null;
|
8994 |
+
}
|
8995 |
+
|
8996 |
+
// Rest anonymous mode for all non-delegated sub-sites.
|
8997 |
+
$blog_ids = $this->get_non_delegated_blog_ids();
|
8998 |
+
}
|
8999 |
+
else
|
9000 |
+
{
|
9001 |
+
if ( false === $network_or_blog_ids ) {
|
9002 |
+
$network_or_blog_ids = 0;
|
9003 |
+
}
|
9004 |
+
|
9005 |
+
$blog_ids = is_array( $network_or_blog_ids ) ?
|
9006 |
+
$network_or_blog_ids :
|
9007 |
+
array( $network_or_blog_ids );
|
9008 |
+
|
9009 |
+
foreach ( $blog_ids as $blog_id ) {
|
9010 |
+
if ( 0 === $blog_id || get_current_blog_id() == $blog_id ) {
|
9011 |
+
$this->_is_anonymous = null;
|
9012 |
+
}
|
9013 |
+
}
|
9014 |
+
}
|
9015 |
+
|
9016 |
+
foreach ( $blog_ids as $blog_id ) {
|
9017 |
+
$this->unset_anonymous_mode( $blog_id );
|
9018 |
}
|
9019 |
|
9020 |
/**
|
9025 |
* @author Leo Fajardo (@leorw)
|
9026 |
* @since 1.2.2
|
9027 |
*/
|
9028 |
+
if ( ! $this->_is_network_active ) {
|
|
|
|
|
|
|
|
|
9029 |
$this->_is_anonymous = null;
|
9030 |
}
|
9031 |
}
|
9071 |
* @author Vova Feldman (@svovaf)
|
9072 |
* @since 1.1.1
|
9073 |
*
|
9074 |
+
* @param bool|int|int[] $network_or_blog_ids Since 2.5.1
|
|
|
9075 |
*/
|
9076 |
+
function skip_connection( $network_or_blog_ids = false ) {
|
9077 |
$this->_logger->entrance();
|
9078 |
|
9079 |
$this->_admin_notices->remove_sticky( 'connect_account' );
|
9080 |
|
9081 |
+
if ( true === $network_or_blog_ids ) {
|
9082 |
$this->set_anonymous_mode( true, true );
|
|
|
9083 |
|
9084 |
+
if ( fs_is_network_admin() ) {
|
9085 |
+
$this->_is_anonymous = null;
|
9086 |
+
}
|
|
|
9087 |
|
9088 |
+
// Rest anonymous mode for all non-delegated sub-sites.
|
9089 |
+
$blog_ids = $this->get_non_delegated_blog_ids();
|
9090 |
+
}
|
9091 |
+
else
|
9092 |
+
{
|
9093 |
+
if ( false === $network_or_blog_ids ) {
|
9094 |
+
$network_or_blog_ids = 0;
|
9095 |
+
}
|
9096 |
|
9097 |
+
$blog_ids = is_array( $network_or_blog_ids ) ?
|
9098 |
+
$network_or_blog_ids :
|
9099 |
+
array( $network_or_blog_ids );
|
9100 |
+
|
9101 |
+
foreach ( $blog_ids as $blog_id ) {
|
9102 |
+
if ( 0 === $blog_id || get_current_blog_id() == $blog_id ) {
|
9103 |
+
$this->_is_anonymous = null;
|
|
|
|
|
|
|
9104 |
}
|
9105 |
}
|
9106 |
+
}
|
9107 |
|
9108 |
+
foreach ( $blog_ids as $blog_id ) {
|
9109 |
+
$this->skip_site_connection( $blog_id );
|
|
|
|
|
|
|
9110 |
}
|
9111 |
|
9112 |
$this->network_upgrade_mode_completed();
|
9121 |
* @param int|null $blog_id
|
9122 |
* @param bool $send_skip
|
9123 |
*/
|
9124 |
+
private function skip_site_connection( $blog_id = null ) {
|
9125 |
$this->_logger->entrance();
|
9126 |
|
9127 |
$this->_admin_notices->remove_sticky( 'connect_account', $blog_id );
|
9128 |
|
9129 |
$this->set_anonymous_mode( true, $blog_id );
|
|
|
|
|
|
|
|
|
|
|
|
|
9130 |
}
|
9131 |
|
9132 |
/**
|
9508 |
$include_themes = true,
|
9509 |
$include_blog_data = true
|
9510 |
) {
|
9511 |
+
// Alias.
|
9512 |
+
$permissions = FS_Permission_Manager::instance( $this );
|
9513 |
+
|
9514 |
+
if ( $permissions->is_extensions_tracking_allowed() ) {
|
9515 |
if ( ! defined( 'WP_FS__TRACK_PLUGINS' ) || false !== WP_FS__TRACK_PLUGINS ) {
|
9516 |
/**
|
9517 |
* @since 1.1.8 Also send plugin updates.
|
9539 |
|
9540 |
$versions = $this->get_versions();
|
9541 |
|
9542 |
+
$blog_data = array();
|
9543 |
+
if ( $include_blog_data ) {
|
9544 |
+
$blog_data['url'] = self::get_unfiltered_site_url();
|
9545 |
+
|
9546 |
+
if ( $permissions->is_diagnostic_tracking_allowed() ) {
|
9547 |
+
$blog_data = array_merge( $blog_data, array(
|
9548 |
+
'language' => self::get_sanitized_language(),
|
9549 |
+
'title' => get_bloginfo( 'name' ),
|
9550 |
+
) );
|
9551 |
+
}
|
9552 |
+
}
|
9553 |
|
9554 |
return array_merge( $versions, $blog_data, array(
|
9555 |
'version' => $this->get_plugin_version(),
|
9556 |
'is_premium' => $this->is_premium(),
|
9557 |
// Special params.
|
9558 |
'is_active' => true,
|
|
|
9559 |
'is_uninstalled' => false,
|
9560 |
), $override );
|
9561 |
}
|
9632 |
continue;
|
9633 |
}
|
9634 |
|
9635 |
+
if ( ! $this->is_tracking_allowed( $blog_id, $install ) ) {
|
9636 |
// Don't send updates regarding opted-out installs.
|
9637 |
continue;
|
9638 |
}
|
9690 |
unset( $install_data['url'] );
|
9691 |
unset( $install_data['registration_date'] );
|
9692 |
|
|
|
9693 |
$install_data['is_active'] = $this->is_active_for_site( $blog_id );
|
9694 |
$install_data['is_uninstalled'] = $install->is_uninstalled;
|
9695 |
|
9799 |
return $diff;
|
9800 |
}
|
9801 |
|
9802 |
+
/**
|
9803 |
+
* @author Leo Fajardo (@leorw)
|
9804 |
+
* @since 2.5.1
|
9805 |
+
*/
|
9806 |
+
private function send_pending_clone_update_once() {
|
9807 |
+
$this->_logger->entrance();
|
9808 |
+
|
9809 |
+
if ( ! empty( $this->_storage->clone_id ) ) {
|
9810 |
+
return;
|
9811 |
+
}
|
9812 |
+
|
9813 |
+
$install_clone = $this->get_api_site_scope()->call(
|
9814 |
+
'/clones',
|
9815 |
+
'post',
|
9816 |
+
array( 'site_url' => self::get_unfiltered_site_url() )
|
9817 |
+
);
|
9818 |
+
|
9819 |
+
if ( $this->is_api_result_entity( $install_clone ) ) {
|
9820 |
+
$this->_storage->clone_id = $install_clone->id;
|
9821 |
+
}
|
9822 |
+
}
|
9823 |
+
|
9824 |
+
/**
|
9825 |
+
* @author Leo Fajardo (@leorw)
|
9826 |
+
* @since 2.5.1
|
9827 |
+
*
|
9828 |
+
* @param string $resolution_type
|
9829 |
+
* @param FS_Site $clone_context_install
|
9830 |
+
*/
|
9831 |
+
function send_clone_resolution_update( $resolution_type, $clone_context_install ) {
|
9832 |
+
$this->_logger->entrance();
|
9833 |
+
|
9834 |
+
if ( empty( $this->_storage->clone_id ) ) {
|
9835 |
+
return;
|
9836 |
+
}
|
9837 |
+
|
9838 |
+
$new_install_id = null;
|
9839 |
+
$current_site = null;
|
9840 |
+
|
9841 |
+
$flush = false;
|
9842 |
+
|
9843 |
+
/**
|
9844 |
+
* If the current site is now different from the context install before the clone resolution, we need to override `$this->_site` so that the API call below will be made with the right install scope entity.
|
9845 |
+
*/
|
9846 |
+
if ( $clone_context_install->id != $this->_site->id ) {
|
9847 |
+
$new_install_id = $this->_site->id;
|
9848 |
+
$current_site = $this->_site;
|
9849 |
+
$this->_site = $clone_context_install;
|
9850 |
+
|
9851 |
+
$flush = true;
|
9852 |
+
}
|
9853 |
+
|
9854 |
+
$this->get_api_site_scope( $flush )->call(
|
9855 |
+
"/clones/{$this->_storage->clone_id}",
|
9856 |
+
'put',
|
9857 |
+
array(
|
9858 |
+
'resolution' => $resolution_type,
|
9859 |
+
'new_install_id' => $new_install_id,
|
9860 |
+
)
|
9861 |
+
);
|
9862 |
+
|
9863 |
+
if ( is_object( $current_site ) ) {
|
9864 |
+
/**
|
9865 |
+
* Ensure that the install scope entity is updated back to the previous install entity.
|
9866 |
+
*/
|
9867 |
+
$this->_site = $current_site;
|
9868 |
+
|
9869 |
+
// Restore the previous install scope entity of the API.
|
9870 |
+
$this->get_api_site_scope( true );
|
9871 |
+
}
|
9872 |
+
}
|
9873 |
+
|
9874 |
/**
|
9875 |
* Update install only if changed.
|
9876 |
*
|
9894 |
$params = $this->get_install_diff_for_api( $check_properties, $this->_site, $override );
|
9895 |
}
|
9896 |
|
|
|
9897 |
if ( empty( $params ) ) {
|
9898 |
$keepalive_only_update = $this->should_send_keepalive_update();
|
9899 |
|
10565 |
function get_eula_url() {
|
10566 |
return $this->apply_filters(
|
10567 |
'eula_url',
|
10568 |
+
"https://freemius.com/product/{$this->_plugin->id}/{$this->_slug}/legal/eula/"
|
10569 |
);
|
10570 |
}
|
10571 |
|
11184 |
*
|
11185 |
* @author Vova Feldman (@svovaf)
|
11186 |
* @since 1.0.1
|
11187 |
+
*
|
11188 |
+
* @param bool $ignore_anonymous_state Since 2.5.1
|
11189 |
+
*
|
11190 |
* @return bool
|
11191 |
*/
|
11192 |
+
function is_registered( $ignore_anonymous_state = false ) {
|
11193 |
+
return (
|
11194 |
+
is_object( $this->_user ) &&
|
11195 |
+
(
|
11196 |
+
$this->is_premium() ||
|
11197 |
+
$ignore_anonymous_state ||
|
11198 |
+
! $this->is_anonymous()
|
11199 |
+
)
|
11200 |
+
);
|
11201 |
}
|
11202 |
|
11203 |
/**
|
11208 |
*
|
11209 |
* @return bool
|
11210 |
*/
|
11211 |
+
function is_tracking_allowed( $blog_id = null, $install = null ) {
|
11212 |
+
if ( is_null( $install ) ) {
|
11213 |
+
$install = is_null( $blog_id ) ?
|
11214 |
+
$this->_site :
|
11215 |
+
$this->get_install_by_blog_id( $blog_id );
|
11216 |
+
}
|
11217 |
+
|
11218 |
+
return (
|
11219 |
+
is_object( $install ) &&
|
11220 |
+
FS_Permission_Manager::instance( $this )->is_homepage_url_tracking_allowed( $blog_id )
|
11221 |
+
);
|
11222 |
+
}
|
11223 |
+
|
11224 |
+
/**
|
11225 |
+
* Returns TRUE if the user never opted-in or manually opted-out.
|
11226 |
+
*
|
11227 |
+
* @author Vova Feldman (@svovaf)
|
11228 |
+
* @since 1.2.1.5
|
11229 |
+
*
|
11230 |
+
* @param int|null $blog_id
|
11231 |
+
*
|
11232 |
+
* @return bool
|
11233 |
+
*/
|
11234 |
+
function is_tracking_prohibited( $blog_id = null ) {
|
11235 |
+
return (
|
11236 |
+
! $this->is_registered( true ) ||
|
11237 |
+
! $this->is_tracking_allowed( $blog_id )
|
11238 |
+
);
|
11239 |
}
|
11240 |
|
11241 |
/**
|
13932 |
fs_request_get( 'blog_id', null ),
|
13933 |
fs_request_get( 'module_id', null, 'post' ),
|
13934 |
fs_request_get( 'user_id', null ),
|
13935 |
+
fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
|
13936 |
+
fs_request_get_bool( 'is_diagnostic_tracking_allowed', null )
|
13937 |
);
|
13938 |
|
13939 |
if (
|
14178 |
* @param null|int $blog_id
|
14179 |
* @param null|number $plugin_id
|
14180 |
* @param null|number $license_owner_id
|
14181 |
+
* @param bool|null $is_extensions_tracking_allowed
|
14182 |
+
* @param bool|null $is_diagnostic_tracking_allowed Since 2.5.0.2 to allow license activation with minimal data footprint.
|
14183 |
+
*
|
14184 |
*
|
14185 |
* @return array {
|
14186 |
* @var bool $success
|
14195 |
$blog_id = null,
|
14196 |
$plugin_id = null,
|
14197 |
$license_owner_id = null,
|
14198 |
+
$is_extensions_tracking_allowed = null,
|
14199 |
+
$is_diagnostic_tracking_allowed = null
|
14200 |
) {
|
14201 |
$this->_logger->entrance();
|
14202 |
|
14216 |
$this :
|
14217 |
$this->get_addon_instance( $plugin_id );
|
14218 |
|
14219 |
+
FS_Permission_Manager::instance( $this )->update_permissions_tracking_flag( array(
|
14220 |
+
FS_Permission_Manager::PERMISSION_DIAGNOSTIC => $is_diagnostic_tracking_allowed,
|
14221 |
+
FS_Permission_Manager::PERMISSION_EXTENSIONS => $is_extensions_tracking_allowed,
|
14222 |
+
) );
|
14223 |
|
14224 |
$error = false;
|
14225 |
$next_page = false;
|
14384 |
}
|
14385 |
}
|
14386 |
|
14387 |
+
$all_sites = self::get_sites();
|
14388 |
+
$pending_blog_ids = array();
|
14389 |
|
14390 |
/**
|
14391 |
* Check if there are any sites that are not connected, skipped, nor delegated. For every site that falls into that category, if the product is freemium, skip the connection. If the product is premium only, delegate the connection to the site administrator.
|
14415 |
continue;
|
14416 |
}
|
14417 |
|
14418 |
+
$pending_blog_ids[] = $blog_id;
|
14419 |
}
|
14420 |
|
14421 |
+
if ( ! empty( $pending_blog_ids ) ) {
|
14422 |
if ( $fs->is_freemium() && $fs->is_enable_anonymous() ) {
|
14423 |
+
$fs->skip_connection( $pending_blog_ids );
|
14424 |
} else {
|
14425 |
+
$fs->delegate_connection( $pending_blog_ids );
|
14426 |
}
|
14427 |
}
|
14428 |
}
|
14558 |
$this->delegate_connection();
|
14559 |
} else {
|
14560 |
if ( ! empty( $sites_by_action['delegate'] ) ) {
|
14561 |
+
$this->delegate_connection( self::get_sites_blog_ids( $sites_by_action['delegate'] ) );
|
14562 |
}
|
14563 |
|
14564 |
if ( ! empty( $sites_by_action['skip'] ) ) {
|
14565 |
+
$this->skip_connection( self::get_sites_blog_ids( $sites_by_action['skip'] ) );
|
14566 |
}
|
14567 |
|
14568 |
if ( empty( $sites_by_action['allow'] ) ) {
|
15678 |
* @author Leo Fajardo (@leorw)
|
15679 |
* @since 2.0.0
|
15680 |
*
|
15681 |
+
* @param bool|int[] $all_or_blog_ids
|
15682 |
*/
|
15683 |
+
private function delegate_connection( $all_or_blog_ids = true ) {
|
15684 |
$this->_logger->entrance();
|
15685 |
|
15686 |
$this->_admin_notices->remove_sticky( 'connect_account' );
|
15687 |
|
15688 |
+
if ( true === $all_or_blog_ids ) {
|
15689 |
// All sites delegation.
|
15690 |
+
$this->_storage->store( 'is_delegated_connection', true, true );
|
15691 |
} else {
|
15692 |
// Specified sites delegation.
|
15693 |
+
foreach ( $all_or_blog_ids as $blog_id ) {
|
15694 |
+
$this->delegate_site_connection( $blog_id );
|
15695 |
}
|
15696 |
}
|
15697 |
|
15707 |
* @param int $blog_id
|
15708 |
*/
|
15709 |
private function delegate_site_connection( $blog_id ) {
|
15710 |
+
$this->_storage->store( 'is_delegated_connection', true, $blog_id );
|
15711 |
}
|
15712 |
|
15713 |
/**
|
15747 |
}
|
15748 |
|
15749 |
/**
|
15750 |
+
* Check if delegated the connection. When running within the network admin,
|
15751 |
* and haven't specified the blog ID, checks if network level delegated. If running
|
15752 |
* within a site admin or specified a blog ID, check if delegated the connection for
|
15753 |
* the current context site.
|
15843 |
'offset' => $offset,
|
15844 |
);
|
15845 |
|
15846 |
+
return get_sites( $args );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15847 |
}
|
15848 |
|
15849 |
/**
|
15928 |
return $install_map;
|
15929 |
}
|
15930 |
|
15931 |
+
/**
|
15932 |
+
* @author Vova Feldman (@svovaf)
|
15933 |
+
* @since 2.5.1
|
15934 |
+
*
|
15935 |
+
* @param bool|null $is_delegated When `true`, returns only connection delegated blog IDs. When `false`, only non-delegated blog IDs.
|
15936 |
+
*
|
15937 |
+
* @return int[]
|
15938 |
+
*/
|
15939 |
+
private function get_blog_ids( $is_delegated = null ) {
|
15940 |
+
$blog_ids = array();
|
15941 |
+
|
15942 |
+
$sites = self::get_sites();
|
15943 |
+
foreach ( $sites as $site ) {
|
15944 |
+
$blog_id = self::get_site_blog_id( $site );
|
15945 |
+
|
15946 |
+
if (
|
15947 |
+
is_null( $is_delegated ) ||
|
15948 |
+
$is_delegated === $this->is_site_delegated_connection( $blog_id )
|
15949 |
+
) {
|
15950 |
+
$blog_ids[] = $blog_id;
|
15951 |
+
}
|
15952 |
+
}
|
15953 |
+
|
15954 |
+
return $blog_ids;
|
15955 |
+
}
|
15956 |
+
|
15957 |
+
/**
|
15958 |
+
* @author Vova Feldman (@svovaf)
|
15959 |
+
* @since 2.5.1
|
15960 |
+
*
|
15961 |
+
* @return int[]
|
15962 |
+
*/
|
15963 |
+
private function get_non_delegated_blog_ids() {
|
15964 |
+
return $this->get_blog_ids( false );
|
15965 |
+
}
|
15966 |
+
|
15967 |
/**
|
15968 |
* Gets a map of module IDs that the given user has opted-in to.
|
15969 |
*
|
16150 |
$site['blog_id'] );
|
16151 |
}
|
16152 |
|
16153 |
+
/**
|
16154 |
+
* @author Vova Feldman (@svovaf)
|
16155 |
+
* @since 2.5.1
|
16156 |
+
*
|
16157 |
+
* @param WP_Site[]|array[] $sites
|
16158 |
+
*
|
16159 |
+
* @return int[]
|
16160 |
+
*/
|
16161 |
+
static function get_sites_blog_ids( $sites ) {
|
16162 |
+
$blog_ids = array();
|
16163 |
+
foreach ( $sites as $site ) {
|
16164 |
+
$blog_ids[] = self::get_site_blog_id( $site );
|
16165 |
+
}
|
16166 |
+
|
16167 |
+
return $blog_ids;
|
16168 |
+
}
|
16169 |
+
|
16170 |
/**
|
16171 |
* @author Leo Fajardo (@leorw)
|
16172 |
* @since 2.0.0
|
16214 |
}
|
16215 |
|
16216 |
$info = array(
|
16217 |
+
'uid' => $this->get_anonymous_id( $blog_id ),
|
16218 |
+
'url' => $url,
|
|
|
|
|
16219 |
);
|
16220 |
|
16221 |
+
// Add these diagnostic information only if user allowed to track.
|
16222 |
+
if ( FS_Permission_Manager::instance( $this )->is_diagnostic_tracking_allowed() ) {
|
16223 |
+
$info = array_merge( $info, array(
|
16224 |
+
'title' => $name,
|
16225 |
+
'language' => self::get_sanitized_language(),
|
16226 |
+
) );
|
16227 |
+
}
|
16228 |
+
|
16229 |
if ( is_numeric( $blog_id ) ) {
|
16230 |
$info['blog_id'] = $blog_id;
|
16231 |
}
|
17170 |
$this->_register_account_hooks();
|
17171 |
}
|
17172 |
|
17173 |
+
if ( $this->is_user_in_admin() && $this->is_clone() ) {
|
17174 |
+
if ( empty( FS_Clone_Manager::instance()->get_clone_identification_timestamp() ) ) {
|
17175 |
+
FS_Clone_Manager::instance()->store_clone_identification_timestamp();
|
17176 |
+
}
|
17177 |
+
|
17178 |
+
FS_Clone_Manager::instance()->maybe_update_clone_resolution_support_flag( $this->_storage->sdk_last_version );
|
17179 |
+
$this->send_pending_clone_update_once();
|
17180 |
}
|
17181 |
}
|
17182 |
|
17256 |
* @return array
|
17257 |
*/
|
17258 |
private function get_versions() {
|
17259 |
+
$versions = array();
|
17260 |
+
$versions['sdk_version'] = $this->version;
|
17261 |
+
|
17262 |
+
// Collect these diagnostic information only if it's allowed.
|
17263 |
+
if ( FS_Permission_Manager::instance( $this )->is_diagnostic_tracking_allowed() ) {
|
17264 |
+
$versions['platform_version'] = get_bloginfo( 'version' );
|
17265 |
+
$versions['programming_language_version'] = phpversion();
|
17266 |
+
}
|
17267 |
|
17268 |
foreach ( $versions as $k => $version ) {
|
17269 |
$versions[ $k ] = self::get_api_sanitized_property( $k, $version );
|
17470 |
|
17471 |
$site = $this->get_site_info( $site );
|
17472 |
|
17473 |
+
$diagnostic_info = array();
|
17474 |
+
if ( FS_Permission_Manager::instance( $this )->is_diagnostic_tracking_allowed() ) {
|
17475 |
+
$diagnostic_info = array(
|
17476 |
+
'site_name' => $site['title'],
|
17477 |
+
'language' => self::get_sanitized_language( $site['language'] ),
|
17478 |
+
);
|
17479 |
+
}
|
17480 |
+
|
17481 |
+
$params = array_merge( $params, $diagnostic_info, array(
|
17482 |
'site_uid' => $site['uid'],
|
17483 |
'site_url' => $site['url'],
|
|
|
|
|
17484 |
) );
|
17485 |
}
|
17486 |
|
17527 |
* In this case, the user and site info will be sent to the server but no
|
17528 |
* data will be saved to the WP installation's database.
|
17529 |
* @param number|bool $trial_plan_id
|
17530 |
+
* @param bool $is_disconnected Whether to opt in without tracking.
|
17531 |
* @param null|bool $is_marketing_allowed
|
17532 |
* @param array $sites If network-level opt-in, an array of containing details of sites.
|
17533 |
* @param bool $redirect
|
17637 |
$params['is_marketing_allowed'] = $is_marketing_allowed;
|
17638 |
}
|
17639 |
|
17640 |
+
$params['is_disconnected'] = $is_disconnected;
|
17641 |
+
$params['format'] = 'json';
|
17642 |
+
$params['is_extensions_tracking_allowed'] = FS_Permission_Manager::instance( $this )->is_extensions_tracking_allowed();
|
17643 |
+
$params['is_diagnostic_tracking_allowed'] = FS_Permission_Manager::instance( $this )->is_diagnostic_tracking_allowed();
|
17644 |
|
17645 |
$request = array(
|
17646 |
'method' => 'POST',
|
17745 |
( isset( $decoded->is_extensions_tracking_allowed ) && ! is_null( $decoded->is_extensions_tracking_allowed ) ?
|
17746 |
$decoded->is_extensions_tracking_allowed :
|
17747 |
null ),
|
17748 |
+
( isset( $decoded->is_diagnostic_tracking_allowed ) && ! is_null( $decoded->is_diagnostic_tracking_allowed ) ?
|
17749 |
+
$decoded->is_diagnostic_tracking_allowed :
|
17750 |
+
null ),
|
17751 |
$decoded->install_id,
|
17752 |
$decoded->install_public_key,
|
17753 |
$decoded->install_secret_key,
|
17764 |
( isset( $decoded->is_extensions_tracking_allowed ) && ! is_null( $decoded->is_extensions_tracking_allowed ) ?
|
17765 |
$decoded->is_extensions_tracking_allowed :
|
17766 |
null ),
|
17767 |
+
( isset( $decoded->is_diagnostic_tracking_allowed ) && ! is_null( $decoded->is_diagnostic_tracking_allowed ) ?
|
17768 |
+
$decoded->is_diagnostic_tracking_allowed :
|
17769 |
+
null ),
|
17770 |
$decoded->installs,
|
17771 |
false
|
17772 |
);
|
17868 |
|
17869 |
if ( ! $this->is_paying_or_trial() ) {
|
17870 |
$this->_admin_notices->add_sticky(
|
17871 |
+
sprintf( $this->get_text_inline( '%s opt-in was successfully completed.', 'plugin-x-activation-message' ), '<b>' . $this->get_plugin_name() . '</b>' ),
|
17872 |
'activation_complete'
|
17873 |
);
|
17874 |
}
|
17990 |
fs_request_get( 'user_secret_key' ),
|
17991 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
17992 |
fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
|
17993 |
+
fs_request_get_bool( 'is_diagnostic_tracking_allowed', null ),
|
17994 |
$pending_sites_info['blog_ids'],
|
17995 |
$pending_sites_info['license_key'],
|
17996 |
$pending_sites_info['trial_plan_id']
|
18002 |
fs_request_get( 'user_secret_key' ),
|
18003 |
fs_request_get_bool( 'is_marketing_allowed', null ),
|
18004 |
fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
|
18005 |
+
fs_request_get_bool( 'is_diagnostic_tracking_allowed', null ),
|
18006 |
fs_request_get( 'install_id' ),
|
18007 |
fs_request_get( 'install_public_key' ),
|
18008 |
fs_request_get( 'install_secret_key' ),
|
18065 |
* @param string $user_secret_key
|
18066 |
* @param bool|null $is_marketing_allowed
|
18067 |
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
18068 |
+
* @param bool|null $is_diagnostic_tracking_allowed Since 2.5.0.2
|
18069 |
* @param number $install_id
|
18070 |
* @param string $install_public_key
|
18071 |
* @param string $install_secret_key
|
18080 |
$user_secret_key,
|
18081 |
$is_marketing_allowed,
|
18082 |
$is_extensions_tracking_allowed,
|
18083 |
+
$is_diagnostic_tracking_allowed,
|
18084 |
$install_id,
|
18085 |
$install_public_key,
|
18086 |
$install_secret_key,
|
18122 |
$this->disable_opt_in_notice_and_lock_user();
|
18123 |
}
|
18124 |
|
18125 |
+
FS_Permission_Manager::instance( $this )->update_permissions_tracking_flag( array(
|
18126 |
+
FS_Permission_Manager::PERMISSION_DIAGNOSTIC => $is_diagnostic_tracking_allowed,
|
18127 |
+
FS_Permission_Manager::PERMISSION_EXTENSIONS => $is_extensions_tracking_allowed,
|
18128 |
+
) );
|
18129 |
|
18130 |
return $this->setup_account(
|
18131 |
$this->_user,
|
18146 |
* @param string $user_secret_key
|
18147 |
* @param bool|null $is_marketing_allowed
|
18148 |
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
18149 |
+
* @param bool|null $is_diagnostic_tracking_allowed Since 2.5.0.2
|
18150 |
* @param array $site_ids
|
18151 |
* @param bool $license_key
|
18152 |
* @param bool $trial_plan_id
|
18160 |
$user_secret_key,
|
18161 |
$is_marketing_allowed,
|
18162 |
$is_extensions_tracking_allowed,
|
18163 |
+
$is_diagnostic_tracking_allowed,
|
18164 |
$site_ids,
|
18165 |
$license_key = false,
|
18166 |
$trial_plan_id = false,
|
18172 |
$this->disable_opt_in_notice_and_lock_user();
|
18173 |
}
|
18174 |
|
18175 |
+
FS_Permission_Manager::instance( $this )->update_permissions_tracking_flag( array(
|
18176 |
+
FS_Permission_Manager::PERMISSION_DIAGNOSTIC => $is_diagnostic_tracking_allowed,
|
18177 |
+
FS_Permission_Manager::PERMISSION_EXTENSIONS => $is_extensions_tracking_allowed,
|
18178 |
+
) );
|
18179 |
|
18180 |
$sites = array();
|
18181 |
foreach ( $site_ids as $site_id ) {
|
18196 |
* @param string $user_secret_key
|
18197 |
* @param bool|null $is_marketing_allowed
|
18198 |
* @param bool|null $is_extensions_tracking_allowed Since 2.3.2
|
18199 |
+
* @param bool|null $is_diagnostic_tracking_allowed Since 2.5.0.2
|
18200 |
* @param object[] $installs
|
18201 |
* @param bool $redirect
|
18202 |
* @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.
|
18209 |
$user_secret_key,
|
18210 |
$is_marketing_allowed,
|
18211 |
$is_extensions_tracking_allowed,
|
18212 |
+
$is_diagnostic_tracking_allowed,
|
18213 |
array $installs,
|
18214 |
$redirect = true,
|
18215 |
$auto_install = false
|
18220 |
$this->disable_opt_in_notice_and_lock_user();
|
18221 |
}
|
18222 |
|
18223 |
+
FS_Permission_Manager::instance( $this )->update_permissions_tracking_flag( array(
|
18224 |
+
FS_Permission_Manager::PERMISSION_DIAGNOSTIC => $is_diagnostic_tracking_allowed,
|
18225 |
+
FS_Permission_Manager::PERMISSION_EXTENSIONS => $is_extensions_tracking_allowed,
|
18226 |
+
) );
|
18227 |
|
18228 |
$install_ids = array();
|
18229 |
|
18287 |
* @author Vova Feldman
|
18288 |
* @since 1.2.1.6
|
18289 |
*/
|
18290 |
+
$this->skip_connection( fs_is_network_admin() );
|
18291 |
} else {
|
18292 |
// Install must be activated via email since
|
18293 |
// user with the same email already exist.
|
18307 |
|
18308 |
$next_page = $this->get_after_activation_url( 'after_pending_connect_url' );
|
18309 |
|
|
|
18310 |
if ( $redirect ) {
|
18311 |
+
// Reload the page with a pending activation message.
|
18312 |
fs_redirect( $next_page );
|
18313 |
}
|
18314 |
|
18337 |
*/
|
18338 |
$license_key = fs_request_get( 'license_secret_key' );
|
18339 |
|
18340 |
+
FS_Permission_Manager::instance( $this )->update_permissions_tracking_flag( array(
|
18341 |
+
FS_Permission_Manager::PERMISSION_DIAGNOSTIC => fs_request_get_bool( 'is_diagnostic_tracking_allowed', null ),
|
18342 |
+
FS_Permission_Manager::PERMISSION_EXTENSIONS => fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
|
18343 |
+
) );
|
18344 |
|
18345 |
$this->install_with_current_user( $license_key );
|
18346 |
}
|
18975 |
if ( ! $this->has_settings_menu() ) {
|
18976 |
// Add the opt-in page without a menu item.
|
18977 |
$hook = FS_Admin_Menu_Manager::add_subpage(
|
18978 |
+
'',
|
18979 |
$this->get_plugin_name(),
|
18980 |
$this->get_plugin_name(),
|
18981 |
'manage_options',
|
19407 |
$hook = FS_Admin_Menu_Manager::add_subpage(
|
19408 |
$item['show_submenu'] ?
|
19409 |
$top_level_menu_slug :
|
19410 |
+
'',
|
19411 |
$item['page_title'],
|
19412 |
$menu_item,
|
19413 |
$capability,
|
19422 |
FS_Admin_Menu_Manager::add_subpage(
|
19423 |
$item['show_submenu'] ?
|
19424 |
$top_level_menu_slug :
|
19425 |
+
'',
|
19426 |
$item['page_title'],
|
19427 |
$menu_item,
|
19428 |
$capability,
|
22226 |
if ( ! $this->is_api_result_entity( $plan ) ) {
|
22227 |
// Some API error while trying to start the trial.
|
22228 |
$this->_admin_notices->add(
|
22229 |
+
$this->get_api_error_message( $plan ),
|
|
|
22230 |
$oops_text,
|
22231 |
'error'
|
22232 |
);
|
22404 |
) {
|
22405 |
$this->_logger->entrance();
|
22406 |
|
22407 |
+
if ( $this->is_unresolved_clone( true ) ) {
|
22408 |
return false;
|
22409 |
}
|
22410 |
|
22414 |
* @since 1.1.7.3 Check for plugin updates from Freemius only if opted-in.
|
22415 |
* @since 1.1.7.4 Also check updates for add-ons.
|
22416 |
*/
|
22417 |
+
if (
|
22418 |
+
( ! $this->is_registered() || ! FS_Permission_Manager::instance( $this )->is_essentials_tracking_allowed() ) &&
|
22419 |
! $this->_is_addon_id( $addon_id )
|
22420 |
) {
|
22421 |
if ( ! is_multisite() ) {
|
22425 |
$installs_map = $this->get_blog_install_map();
|
22426 |
|
22427 |
foreach ( $installs_map as $blog_id => $install ) {
|
22428 |
+
if ( ! FS_Permission_Manager::instance( $this )->is_essentials_tracking_allowed( $blog_id ) ) {
|
22429 |
+
continue;
|
22430 |
+
}
|
22431 |
+
|
22432 |
/**
|
22433 |
* @var FS_Site $install
|
22434 |
*/
|
23212 |
|
23213 |
if ( $is_parent_plugin_action ) {
|
23214 |
if ( $is_network_action && ! empty( $blog_id ) ) {
|
23215 |
+
if ( $this->is_registered( true ) ) {
|
23216 |
+
if ( $this->is_tracking_prohibited( $blog_id ) ) {
|
23217 |
+
if ( $this->toggle_site_tracking( true, $blog_id ) ) {
|
23218 |
$this->_admin_notices->add(
|
23219 |
+
sprintf( $this->get_text_inline( 'Sharing diagnostic data with %s helps to provide functionality that\'s more relevant to your website, avoid WordPress or PHP version incompatibilities that can break your website, and recognize which languages & regions the plugin should be translated and tailored to.', 'opt-out-message-appreciation' ), "<b>{$this->get_plugin_title()}</b>" ),
|
23220 |
$this->get_text_inline( 'Thank you!', 'thank-you' )
|
23221 |
);
|
23222 |
}
|
23223 |
} else {
|
23224 |
+
if ( $this->toggle_site_tracking( false, $blog_id ) ) {
|
23225 |
+
$install = $this->get_install_by_blog_id( $blog_id );
|
23226 |
+
|
23227 |
$this->_admin_notices->add(
|
23228 |
sprintf(
|
23229 |
+
$this->get_text_inline( 'Diagnostic data will no longer be sent from %s to %s.', 'opted-out-successfully' ),
|
|
|
23230 |
self::get_unfiltered_site_url( $blog_id, true ),
|
23231 |
+
"<b>{$this->get_plugin_title()}</b>"
|
|
|
|
|
|
|
|
|
23232 |
)
|
23233 |
);
|
23234 |
}
|
23830 |
}
|
23831 |
|
23832 |
static function _clean_admin_content_section_hook() {
|
23833 |
+
$hide_admin_notices = true;
|
23834 |
+
|
23835 |
+
if ( fs_request_is_action( 'allow_clone_resolution_notice' ) ) {
|
23836 |
+
check_admin_referer( 'fs_allow_clone_resolution_notice' );
|
23837 |
+
|
23838 |
+
$hide_admin_notices = false;
|
23839 |
+
}
|
23840 |
+
|
23841 |
+
if ( $hide_admin_notices ) {
|
23842 |
+
self::_hide_admin_notices();
|
23843 |
+
}
|
23844 |
|
23845 |
// Hide footer.
|
23846 |
echo '<style>#wpfooter { display: none !important; }</style>';
|
23981 |
private function api_site_call( $path, $method = 'GET', $params = array(), $flush_instance = false ) {
|
23982 |
$result = $this->get_api_site_scope( $flush_instance )->call( $path, $method, $params );
|
23983 |
|
23984 |
+
/**
|
23985 |
+
* Checks if the local install's URL is different from the remote install's URL, update the local install if necessary, and then run the clone handler if the install's URL is different from the URL of the site.
|
23986 |
+
*
|
23987 |
+
* @author Leo Fajardo (@leorw)
|
23988 |
+
* @since 2.5.0
|
23989 |
+
*/
|
23990 |
if (
|
23991 |
$this->is_registered() &&
|
23992 |
FS_Api::is_api_result_entity( $result ) &&
|
23993 |
isset( $result->url )
|
23994 |
) {
|
23995 |
+
$stored_local_url = trailingslashit( $this->_site->url );
|
23996 |
$stored_remote_url = trailingslashit( $result->url );
|
23997 |
|
23998 |
+
if ( $stored_local_url !== $stored_remote_url ) {
|
23999 |
$this->_site->url = $result->url;
|
24000 |
+
$this->_store_site();
|
24001 |
+
}
|
24002 |
|
24003 |
+
if ( fs_strip_url_protocol( $stored_remote_url ) !== self::get_unfiltered_site_url( null, true, true ) ) {
|
24004 |
FS_Clone_Manager::instance()->maybe_run_clone_resolution();
|
24005 |
+
}
|
24006 |
}
|
|
|
24007 |
|
24008 |
return $result;
|
24009 |
}
|
24614 |
|
24615 |
$this->_logger->entrance();
|
24616 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24617 |
if ( $this->is_only_premium() && $this->is_free_plan() ) {
|
24618 |
// 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.
|
24619 |
return;
|
24676 |
}
|
24677 |
}
|
24678 |
|
24679 |
+
if ( $this->add_ajax_action( 'toggle_permission_tracking', array( &$this, '_toggle_permission_tracking_callback' ) ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24680 |
return;
|
24681 |
}
|
24682 |
|
24683 |
$link_text_id = '';
|
24684 |
$url = '#';
|
24685 |
|
24686 |
+
if ( $this->is_registered( true ) ) {
|
24687 |
+
if ( $this->is_registered() && $this->is_tracking_allowed() ) {
|
24688 |
$link_text_id = $this->get_text_inline( 'Opt Out', 'opt-out' );
|
24689 |
} else {
|
24690 |
$link_text_id = $this->get_text_inline( 'Opt In', 'opt-in' );
|
24881 |
*/
|
24882 |
private function is_premium_version_installed() {
|
24883 |
$premium_plugin_basename = $this->premium_plugin_basename();
|
|
|
24884 |
|
24885 |
+
if ( $this->is_theme() ) {
|
24886 |
+
return $this->can_activate_theme( $this->get_premium_slug() );
|
24887 |
+
}
|
24888 |
+
|
24889 |
+
return file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $premium_plugin_basename ) );
|
24890 |
}
|
24891 |
|
24892 |
/**
|
24922 |
* @author Leo Fajardo (@leorw)
|
24923 |
* @since 2.2.1
|
24924 |
*/
|
24925 |
+
$premium_theme_slug_or_plugin_basename = $this->is_theme() ?
|
24926 |
+
$this->get_premium_slug() :
|
24927 |
+
$this->premium_plugin_basename();
|
24928 |
|
24929 |
return sprintf(
|
24930 |
/* translators: %1$s: Product title; %2$s: Plan title */
|
24933 |
$plan_title,
|
24934 |
sprintf(
|
24935 |
'<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s</button></a>',
|
24936 |
+
( $this->is_theme() ?
|
24937 |
+
wp_nonce_url( 'themes.php?action=activate&stylesheet=' . $premium_theme_slug_or_plugin_basename, 'switch-theme_' . $premium_theme_slug_or_plugin_basename ) :
|
24938 |
+
wp_nonce_url( 'plugins.php?action=activate&plugin=' . $premium_theme_slug_or_plugin_basename, 'activate-plugin_' . $premium_theme_slug_or_plugin_basename ) ),
|
24939 |
esc_html( sprintf(
|
24940 |
/* translators: %s: Plan title */
|
24941 |
$this->get_text_inline( 'Activate %s features', 'activate-x-features' ),
|
24960 |
) ),
|
24961 |
$deactivation_step,
|
24962 |
$this->get_text_inline( 'Upload and activate the downloaded version', 'upload-and-activate' ),
|
24963 |
+
$this->apply_filters( 'upload_and_install_video_url', '//bit.ly/wp-' . $this->_module_type . '-upload' ),
|
24964 |
$this->get_text_inline( 'How to upload and activate?', 'howto-upload-activate' )
|
24965 |
);
|
24966 |
}
|
25413 |
function _tabs_capture() {
|
25414 |
$this->_logger->entrance();
|
25415 |
|
25416 |
+
if (
|
25417 |
+
! $this->is_product_settings_page() ||
|
25418 |
+
! $this->should_page_include_tabs() ||
|
25419 |
+
! $this->is_matching_url( $this->main_menu_url() )
|
25420 |
) {
|
25421 |
return;
|
25422 |
}
|
25470 |
function _store_tabs_styles() {
|
25471 |
$this->_logger->entrance();
|
25472 |
|
25473 |
+
if (
|
25474 |
+
! $this->is_product_settings_page() ||
|
25475 |
+
! $this->should_page_include_tabs() ||
|
25476 |
+
! $this->is_matching_url( $this->main_menu_url() )
|
25477 |
) {
|
25478 |
return;
|
25479 |
}
|
vendor/freemius/wordpress-sdk/includes/class-fs-admin-notices.php
CHANGED
@@ -241,21 +241,22 @@
|
|
241 |
* @since 2.0.0
|
242 |
*
|
243 |
* @param int|null $network_level_or_blog_id
|
|
|
244 |
*/
|
245 |
-
function clear_all_sticky( $network_level_or_blog_id = null ) {
|
246 |
if ( ! $this->_is_multisite ||
|
247 |
false === $network_level_or_blog_id ||
|
248 |
0 == $network_level_or_blog_id ||
|
249 |
is_null( $network_level_or_blog_id )
|
250 |
) {
|
251 |
$notices = $this->get_site_notices( $network_level_or_blog_id );
|
252 |
-
$notices->clear_all_sticky();
|
253 |
}
|
254 |
|
255 |
if ( $this->_is_multisite &&
|
256 |
( true === $network_level_or_blog_id || is_null( $network_level_or_blog_id ) )
|
257 |
) {
|
258 |
-
$this->_network_notices->clear_all_sticky();
|
259 |
}
|
260 |
}
|
261 |
|
241 |
* @since 2.0.0
|
242 |
*
|
243 |
* @param int|null $network_level_or_blog_id
|
244 |
+
* @param bool $is_temporary
|
245 |
*/
|
246 |
+
function clear_all_sticky( $network_level_or_blog_id = null, $is_temporary = false ) {
|
247 |
if ( ! $this->_is_multisite ||
|
248 |
false === $network_level_or_blog_id ||
|
249 |
0 == $network_level_or_blog_id ||
|
250 |
is_null( $network_level_or_blog_id )
|
251 |
) {
|
252 |
$notices = $this->get_site_notices( $network_level_or_blog_id );
|
253 |
+
$notices->clear_all_sticky( $is_temporary );
|
254 |
}
|
255 |
|
256 |
if ( $this->_is_multisite &&
|
257 |
( true === $network_level_or_blog_id || is_null( $network_level_or_blog_id ) )
|
258 |
) {
|
259 |
+
$this->_network_notices->clear_all_sticky( $is_temporary );
|
260 |
}
|
261 |
}
|
262 |
|
vendor/freemius/wordpress-sdk/includes/class-fs-lock.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.5.1
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Class FS_Lock
|
15 |
+
*
|
16 |
+
* @author Vova Feldman (@svovaf)
|
17 |
+
* @since 2.5.1
|
18 |
+
*/
|
19 |
+
class FS_Lock {
|
20 |
+
/**
|
21 |
+
* @var int Random ID representing the current PHP thread.
|
22 |
+
*/
|
23 |
+
private static $_thread_id;
|
24 |
+
/**
|
25 |
+
* @var string
|
26 |
+
*/
|
27 |
+
private $_lock_id;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @param string $lock_id
|
31 |
+
*/
|
32 |
+
function __construct( $lock_id ) {
|
33 |
+
if ( ! fs_starts_with( $lock_id, WP_FS___OPTION_PREFIX ) ) {
|
34 |
+
$lock_id = WP_FS___OPTION_PREFIX . $lock_id;
|
35 |
+
}
|
36 |
+
|
37 |
+
$this->_lock_id = $lock_id;
|
38 |
+
|
39 |
+
if ( ! isset( self::$_thread_id ) ) {
|
40 |
+
self::$_thread_id = mt_rand( 0, 32000 );
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Try to acquire lock. If the lock is already set or is being acquired by another locker, don't do anything.
|
46 |
+
*
|
47 |
+
* @param int $expiration
|
48 |
+
*
|
49 |
+
* @return bool TRUE if successfully acquired lock.
|
50 |
+
*/
|
51 |
+
function try_lock( $expiration = 0 ) {
|
52 |
+
if ( $this->is_locked() ) {
|
53 |
+
// Already locked.
|
54 |
+
return false;
|
55 |
+
}
|
56 |
+
|
57 |
+
set_site_transient( $this->_lock_id, self::$_thread_id, $expiration );
|
58 |
+
|
59 |
+
if ( $this->has_lock() ) {
|
60 |
+
$this->lock($expiration);
|
61 |
+
|
62 |
+
return true;
|
63 |
+
}
|
64 |
+
|
65 |
+
return false;
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Acquire lock regardless if it's already acquired by another locker or not.
|
70 |
+
*
|
71 |
+
* @author Vova Feldman (@svovaf)
|
72 |
+
* @since 2.1.0
|
73 |
+
*
|
74 |
+
* @param int $expiration
|
75 |
+
*/
|
76 |
+
function lock( $expiration = 0 ) {
|
77 |
+
set_site_transient( $this->_lock_id, true, $expiration );
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Checks if lock is currently acquired.
|
82 |
+
*
|
83 |
+
* @author Vova Feldman (@svovaf)
|
84 |
+
* @since 2.1.0
|
85 |
+
*
|
86 |
+
* @return bool
|
87 |
+
*/
|
88 |
+
function is_locked() {
|
89 |
+
return ( false !== get_site_transient( $this->_lock_id ) );
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Unlock the lock.
|
94 |
+
*
|
95 |
+
* @author Vova Feldman (@svovaf)
|
96 |
+
* @since 2.1.0
|
97 |
+
*/
|
98 |
+
function unlock() {
|
99 |
+
delete_site_transient( $this->_lock_id );
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Checks if lock is currently acquired by the current locker.
|
104 |
+
*
|
105 |
+
* @return bool
|
106 |
+
*/
|
107 |
+
protected function has_lock() {
|
108 |
+
return ( self::$_thread_id == get_site_transient( $this->_lock_id ) );
|
109 |
+
}
|
110 |
+
}
|
vendor/freemius/wordpress-sdk/includes/class-fs-plugin-updater.php
CHANGED
@@ -166,15 +166,19 @@
|
|
166 |
|
167 |
$contents = ob_get_clean();
|
168 |
|
169 |
-
$
|
170 |
|
171 |
-
if ( false
|
172 |
-
$
|
173 |
-
|
|
|
|
|
|
|
|
|
174 |
'<a'
|
175 |
);
|
176 |
|
177 |
-
$
|
178 |
|
179 |
/**
|
180 |
* The part of the contents without the update button.
|
@@ -182,20 +186,20 @@
|
|
182 |
* @author Leo Fajardo (@leorw)
|
183 |
* @since 2.2.5
|
184 |
*/
|
185 |
-
$modified_contents = substr( $contents, 0, $
|
186 |
|
187 |
-
$
|
188 |
|
189 |
/**
|
190 |
* Replace the plugin information dialog's "Install Update Now" button's text and URL. If there's a license,
|
191 |
* the text will be "Renew license" and will link to the checkout page with the license's billing cycle
|
192 |
* and quota. If there's no license, the text will be "Buy license" and will link to the pricing page.
|
193 |
*/
|
194 |
-
$
|
195 |
-
'/(\<a.+)(id="
|
196 |
is_object( $license ) ?
|
197 |
sprintf(
|
198 |
-
'$1$
|
199 |
$this->_fs->checkout_url(
|
200 |
is_object( $subscription ) ?
|
201 |
( 1 == $subscription->billing_cycle ? WP_FS__PERIOD_MONTHLY : WP_FS__PERIOD_ANNUALLY ) :
|
@@ -206,11 +210,11 @@
|
|
206 |
fs_text_inline( 'Renew license', 'renew-license', $this->_fs->get_slug() )
|
207 |
) :
|
208 |
sprintf(
|
209 |
-
'$1$
|
210 |
$this->_fs->pricing_url(),
|
211 |
fs_text_inline( 'Buy license', 'buy-license', $this->_fs->get_slug() )
|
212 |
),
|
213 |
-
$
|
214 |
);
|
215 |
|
216 |
/**
|
@@ -219,7 +223,7 @@
|
|
219 |
* @author Leo Fajardo (@leorw)
|
220 |
* @since 2.2.5
|
221 |
*/
|
222 |
-
$modified_contents .= $
|
223 |
|
224 |
/**
|
225 |
* Append the remaining part of the contents after the update button.
|
@@ -227,7 +231,7 @@
|
|
227 |
* @author Leo Fajardo (@leorw)
|
228 |
* @since 2.2.5
|
229 |
*/
|
230 |
-
$modified_contents .= substr( $contents, $
|
231 |
|
232 |
$contents = $modified_contents;
|
233 |
}
|
@@ -243,7 +247,7 @@
|
|
243 |
if (
|
244 |
$this->_fs->is_premium() &&
|
245 |
$this->_fs->is_registered() &&
|
246 |
-
! $this->_fs->
|
247 |
) {
|
248 |
$this->_logger->log( 'Opted out sites cannot receive automatic software updates.' );
|
249 |
|
@@ -417,7 +421,7 @@
|
|
417 |
|
418 |
$themes_update = get_site_transient( 'update_themes' );
|
419 |
if ( ! isset( $themes_update->response[ $theme_basename ] ) ||
|
420 |
-
|
421 |
) {
|
422 |
return $prepared_themes;
|
423 |
}
|
@@ -636,7 +640,7 @@
|
|
636 |
foreach ( $this->_translation_updates as $translation_update ) {
|
637 |
$lang = $translation_update['language'];
|
638 |
if ( ! isset( $current_plugin_translation_updates_map[ $lang ] ) ||
|
639 |
-
|
640 |
) {
|
641 |
$current_plugin_translation_updates_map[ $lang ] = $translation_update;
|
642 |
}
|
@@ -650,7 +654,7 @@
|
|
650 |
}
|
651 |
|
652 |
/**
|
653 |
-
* Get module's required data for the updates mechanism.
|
654 |
*
|
655 |
* @author Vova Feldman (@svovaf)
|
656 |
* @since 2.0.0
|
@@ -660,13 +664,14 @@
|
|
660 |
* @return object
|
661 |
*/
|
662 |
function get_update_details( FS_Plugin_Tag $new_version ) {
|
663 |
-
$update
|
664 |
-
$update->slug
|
665 |
-
$update->new_version
|
666 |
-
$update->url
|
667 |
-
$update->package
|
668 |
-
$update->tested
|
669 |
-
$update->requires
|
|
|
670 |
|
671 |
$icon = $this->_fs->get_local_icon_url();
|
672 |
|
@@ -808,9 +813,9 @@
|
|
808 |
$basename = $this->_fs->get_plugin_basename();
|
809 |
|
810 |
if ( ! is_object( $transient_data ) ||
|
811 |
-
|
812 |
! is_array( $transient_data->response ) ||
|
813 |
-
|
814 |
) {
|
815 |
return;
|
816 |
}
|
@@ -837,28 +842,34 @@
|
|
837 |
* @return bool|mixed
|
838 |
*/
|
839 |
static function _fetch_plugin_info_from_repository( $action, $args ) {
|
840 |
-
$url = $http_url = 'http://api.wordpress.org/plugins/info/1.
|
841 |
-
|
842 |
-
|
843 |
-
}
|
844 |
-
|
845 |
-
$args = array(
|
846 |
-
'timeout' => 15,
|
847 |
-
'body' => array(
|
848 |
'action' => $action,
|
849 |
-
'request' =>
|
850 |
-
)
|
|
|
851 |
);
|
852 |
|
853 |
-
|
|
|
|
|
|
|
|
|
|
|
854 |
|
855 |
if ( is_wp_error( $request ) ) {
|
856 |
return false;
|
857 |
}
|
858 |
|
859 |
-
$res =
|
|
|
|
|
|
|
|
|
|
|
860 |
|
861 |
-
if ( ! is_object( $res )
|
862 |
return false;
|
863 |
}
|
864 |
|
@@ -1095,6 +1106,7 @@ if ( !isset($info->error) ) {
|
|
1095 |
if ( ! $plugin_in_repo ) {
|
1096 |
$data->last_updated = ! is_null( $new_version->updated ) ? $new_version->updated : $new_version->created;
|
1097 |
$data->requires = $new_version->requires_platform_version;
|
|
|
1098 |
$data->tested = $new_version->tested_up_to_version;
|
1099 |
}
|
1100 |
|
@@ -1148,9 +1160,28 @@ if ( !isset($info->error) ) {
|
|
1148 |
}
|
1149 |
}
|
1150 |
|
|
|
|
|
|
|
|
|
1151 |
return $data;
|
1152 |
}
|
1153 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1154 |
/**
|
1155 |
* @author Vova Feldman (@svovaf)
|
1156 |
* @since 1.2.1.7
|
166 |
|
167 |
$contents = ob_get_clean();
|
168 |
|
169 |
+
$install_or_update_button_id_attribute_pos = strpos( $contents, 'id="plugin_install_from_iframe"' );
|
170 |
|
171 |
+
if ( false === $install_or_update_button_id_attribute_pos ) {
|
172 |
+
$install_or_update_button_id_attribute_pos = strpos( $contents, 'id="plugin_update_from_iframe"' );
|
173 |
+
}
|
174 |
+
|
175 |
+
if ( false !== $install_or_update_button_id_attribute_pos ) {
|
176 |
+
$install_or_update_button_start_pos = strrpos(
|
177 |
+
substr( $contents, 0, $install_or_update_button_id_attribute_pos ),
|
178 |
'<a'
|
179 |
);
|
180 |
|
181 |
+
$install_or_update_button_end_pos = ( strpos( $contents, '</a>', $install_or_update_button_id_attribute_pos ) + strlen( '</a>' ) );
|
182 |
|
183 |
/**
|
184 |
* The part of the contents without the update button.
|
186 |
* @author Leo Fajardo (@leorw)
|
187 |
* @since 2.2.5
|
188 |
*/
|
189 |
+
$modified_contents = substr( $contents, 0, $install_or_update_button_start_pos );
|
190 |
|
191 |
+
$install_or_update_button = substr( $contents, $install_or_update_button_start_pos, ( $install_or_update_button_end_pos - $install_or_update_button_start_pos ) );
|
192 |
|
193 |
/**
|
194 |
* Replace the plugin information dialog's "Install Update Now" button's text and URL. If there's a license,
|
195 |
* the text will be "Renew license" and will link to the checkout page with the license's billing cycle
|
196 |
* and quota. If there's no license, the text will be "Buy license" and will link to the pricing page.
|
197 |
*/
|
198 |
+
$install_or_update_button = preg_replace(
|
199 |
+
'/(\<a.+)(id="plugin_(install|update)_from_iframe")(.+href=")([^\s]+)(".*\>)(.+)(\<\/a>)/is',
|
200 |
is_object( $license ) ?
|
201 |
sprintf(
|
202 |
+
'$1$4%s$6%s$8',
|
203 |
$this->_fs->checkout_url(
|
204 |
is_object( $subscription ) ?
|
205 |
( 1 == $subscription->billing_cycle ? WP_FS__PERIOD_MONTHLY : WP_FS__PERIOD_ANNUALLY ) :
|
210 |
fs_text_inline( 'Renew license', 'renew-license', $this->_fs->get_slug() )
|
211 |
) :
|
212 |
sprintf(
|
213 |
+
'$1$4%s$6%s$8',
|
214 |
$this->_fs->pricing_url(),
|
215 |
fs_text_inline( 'Buy license', 'buy-license', $this->_fs->get_slug() )
|
216 |
),
|
217 |
+
$install_or_update_button
|
218 |
);
|
219 |
|
220 |
/**
|
223 |
* @author Leo Fajardo (@leorw)
|
224 |
* @since 2.2.5
|
225 |
*/
|
226 |
+
$modified_contents .= $install_or_update_button;
|
227 |
|
228 |
/**
|
229 |
* Append the remaining part of the contents after the update button.
|
231 |
* @author Leo Fajardo (@leorw)
|
232 |
* @since 2.2.5
|
233 |
*/
|
234 |
+
$modified_contents .= substr( $contents, $install_or_update_button_end_pos );
|
235 |
|
236 |
$contents = $modified_contents;
|
237 |
}
|
247 |
if (
|
248 |
$this->_fs->is_premium() &&
|
249 |
$this->_fs->is_registered() &&
|
250 |
+
! FS_Permission_Manager::instance( $this->_fs )->is_essentials_tracking_allowed()
|
251 |
) {
|
252 |
$this->_logger->log( 'Opted out sites cannot receive automatic software updates.' );
|
253 |
|
421 |
|
422 |
$themes_update = get_site_transient( 'update_themes' );
|
423 |
if ( ! isset( $themes_update->response[ $theme_basename ] ) ||
|
424 |
+
empty( $themes_update->response[ $theme_basename ]['package'] )
|
425 |
) {
|
426 |
return $prepared_themes;
|
427 |
}
|
640 |
foreach ( $this->_translation_updates as $translation_update ) {
|
641 |
$lang = $translation_update['language'];
|
642 |
if ( ! isset( $current_plugin_translation_updates_map[ $lang ] ) ||
|
643 |
+
version_compare( $translation_update['version'], $current_plugin_translation_updates_map[ $lang ]['version'], '>' )
|
644 |
) {
|
645 |
$current_plugin_translation_updates_map[ $lang ] = $translation_update;
|
646 |
}
|
654 |
}
|
655 |
|
656 |
/**
|
657 |
+
* Get module's required data for the updates' mechanism.
|
658 |
*
|
659 |
* @author Vova Feldman (@svovaf)
|
660 |
* @since 2.0.0
|
664 |
* @return object
|
665 |
*/
|
666 |
function get_update_details( FS_Plugin_Tag $new_version ) {
|
667 |
+
$update = new stdClass();
|
668 |
+
$update->slug = $this->_fs->get_slug();
|
669 |
+
$update->new_version = $new_version->version;
|
670 |
+
$update->url = WP_FS__ADDRESS;
|
671 |
+
$update->package = $new_version->url;
|
672 |
+
$update->tested = self::get_tested_wp_version( $new_version->tested_up_to_version );
|
673 |
+
$update->requires = $new_version->requires_platform_version;
|
674 |
+
$update->requires_php = $new_version->requires_programming_language_version;
|
675 |
|
676 |
$icon = $this->_fs->get_local_icon_url();
|
677 |
|
813 |
$basename = $this->_fs->get_plugin_basename();
|
814 |
|
815 |
if ( ! is_object( $transient_data ) ||
|
816 |
+
! isset( $transient_data->response ) ||
|
817 |
! is_array( $transient_data->response ) ||
|
818 |
+
empty( $transient_data->response[ $basename ] )
|
819 |
) {
|
820 |
return;
|
821 |
}
|
842 |
* @return bool|mixed
|
843 |
*/
|
844 |
static function _fetch_plugin_info_from_repository( $action, $args ) {
|
845 |
+
$url = $http_url = 'http://api.wordpress.org/plugins/info/1.2/';
|
846 |
+
$url = add_query_arg(
|
847 |
+
array(
|
|
|
|
|
|
|
|
|
|
|
848 |
'action' => $action,
|
849 |
+
'request' => $args,
|
850 |
+
),
|
851 |
+
$url
|
852 |
);
|
853 |
|
854 |
+
if ( wp_http_supports( array( 'ssl' ) ) ) {
|
855 |
+
$url = set_url_scheme( $url, 'https' );
|
856 |
+
}
|
857 |
+
|
858 |
+
// The new endpoint version serves only GET requests.
|
859 |
+
$request = wp_remote_get( $url, array( 'timeout' => 15 ) );
|
860 |
|
861 |
if ( is_wp_error( $request ) ) {
|
862 |
return false;
|
863 |
}
|
864 |
|
865 |
+
$res = json_decode( wp_remote_retrieve_body( $request ), true );
|
866 |
+
|
867 |
+
if ( is_array( $res ) ) {
|
868 |
+
// Object casting is required in order to match the info/1.0 format. We are not decoding directly into an object as we need some fields to remain an array (e.g., $res->sections).
|
869 |
+
$res = (object) $res;
|
870 |
+
}
|
871 |
|
872 |
+
if ( ! is_object( $res ) || isset( $res->error ) ) {
|
873 |
return false;
|
874 |
}
|
875 |
|
1106 |
if ( ! $plugin_in_repo ) {
|
1107 |
$data->last_updated = ! is_null( $new_version->updated ) ? $new_version->updated : $new_version->created;
|
1108 |
$data->requires = $new_version->requires_platform_version;
|
1109 |
+
$data->requires_php = $new_version->requires_programming_language_version;
|
1110 |
$data->tested = $new_version->tested_up_to_version;
|
1111 |
}
|
1112 |
|
1160 |
}
|
1161 |
}
|
1162 |
|
1163 |
+
if ( ! empty( $data->tested ) ) {
|
1164 |
+
$data->tested = self::get_tested_wp_version( $data->tested );
|
1165 |
+
}
|
1166 |
+
|
1167 |
return $data;
|
1168 |
}
|
1169 |
|
1170 |
+
/**
|
1171 |
+
* @since 2.5.3 If the current WordPress version is a patch of the tested version (e.g., 6.1.2 is a patch of 6.1), then override the tested version with the patch so developers won't need to release a new version just to bump the latest supported WP version.
|
1172 |
+
*
|
1173 |
+
* @param string|null $tested_up_to
|
1174 |
+
*
|
1175 |
+
* @return string|null
|
1176 |
+
*/
|
1177 |
+
private static function get_tested_wp_version( $tested_up_to ) {
|
1178 |
+
$current_wp_version = get_bloginfo( 'version' );
|
1179 |
+
|
1180 |
+
return ( ! empty($tested_up_to) && fs_starts_with( $current_wp_version, $tested_up_to . '.' ) ) ?
|
1181 |
+
$current_wp_version :
|
1182 |
+
$tested_up_to;
|
1183 |
+
}
|
1184 |
+
|
1185 |
/**
|
1186 |
* @author Vova Feldman (@svovaf)
|
1187 |
* @since 1.2.1.7
|
vendor/freemius/wordpress-sdk/includes/class-fs-storage.php
CHANGED
@@ -15,9 +15,11 @@
|
|
15 |
*
|
16 |
* A wrapper class for handling network level and single site level storage.
|
17 |
*
|
18 |
-
* @property bool
|
19 |
-
* @property int
|
20 |
-
* @property
|
|
|
|
|
21 |
*/
|
22 |
class FS_Storage {
|
23 |
/**
|
@@ -72,6 +74,16 @@
|
|
72 |
*/
|
73 |
private static $_NETWORK_OPTIONS_MAP;
|
74 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
/**
|
76 |
* @author Leo Fajardo (@leorw)
|
77 |
*
|
@@ -142,10 +154,17 @@
|
|
142 |
* @param string $key
|
143 |
* @param mixed $value
|
144 |
* @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::$_BINARY_MAP).
|
|
|
145 |
* @param bool $flush
|
146 |
*/
|
147 |
-
function store(
|
148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
149 |
$this->_network_storage->store( $key, $value, $flush );
|
150 |
} else {
|
151 |
$storage = $this->get_site_storage( $network_level_or_blog_id );
|
@@ -199,11 +218,17 @@
|
|
199 |
* @param string $key
|
200 |
* @param mixed $default
|
201 |
* @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::$_BINARY_MAP).
|
|
|
202 |
*
|
203 |
* @return mixed
|
204 |
*/
|
205 |
-
function get(
|
206 |
-
|
|
|
|
|
|
|
|
|
|
|
207 |
return $this->_network_storage->get( $key, $default );
|
208 |
} else {
|
209 |
$storage = $this->get_site_storage( $network_level_or_blog_id );
|
@@ -289,19 +314,6 @@
|
|
289 |
// Migrate option to the network storage.
|
290 |
$this->_network_storage->store( $option, $this->_storage->{$option}, false );
|
291 |
|
292 |
-
/**
|
293 |
-
* Remove the option from site level storage.
|
294 |
-
*
|
295 |
-
* IMPORTANT:
|
296 |
-
* The line below is intentionally commented since we want to preserve the option
|
297 |
-
* on the site storage level for "downgrade compatibility". Basically, if the user
|
298 |
-
* will downgrade to an older version of the plugin with the prev storage structure,
|
299 |
-
* it will continue working.
|
300 |
-
*
|
301 |
-
* @todo After a few releases we can remove this.
|
302 |
-
*/
|
303 |
-
// $this->_storage->remove($option, false);
|
304 |
-
|
305 |
$updated = true;
|
306 |
}
|
307 |
}
|
@@ -336,63 +348,61 @@
|
|
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 |
-
'license_migration' =>
|
375 |
|
376 |
// When network activated, then network level.
|
377 |
-
'install_timestamp' =>
|
378 |
-
'prev_is_premium' =>
|
379 |
-
'require_license_activation' =>
|
380 |
|
381 |
// If not network activated OR delegated, then site level.
|
382 |
-
'activation_timestamp'
|
383 |
-
'expired_license_notice_shown'
|
384 |
-
'is_whitelabeled'
|
385 |
-
'last_license_key'
|
386 |
-
'last_license_user_id'
|
387 |
-
'prev_user_id'
|
388 |
-
'sticky_optin_added'
|
389 |
-
'uninstall_reason'
|
390 |
-
'is_pending_activation'
|
391 |
-
'pending_license_key'
|
392 |
-
'is_extensions_tracking_allowed' => 2,
|
393 |
|
394 |
// Site level options.
|
395 |
-
'is_anonymous' =>
|
|
|
396 |
);
|
397 |
}
|
398 |
|
@@ -403,25 +413,33 @@
|
|
403 |
* @since 2.0.0
|
404 |
*
|
405 |
* @param string $key
|
|
|
406 |
*
|
407 |
-
* @return bool
|
408 |
*/
|
409 |
-
private function is_multisite_option( $key ) {
|
410 |
if ( ! isset( self::$_NETWORK_OPTIONS_MAP ) ) {
|
411 |
self::load_network_options_map();
|
412 |
}
|
413 |
|
414 |
-
if (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
415 |
// Option not found -> use site level storage.
|
416 |
return false;
|
417 |
}
|
418 |
|
419 |
-
if (
|
420 |
// Option found and set to always use the network level storage on a multisite.
|
421 |
return true;
|
422 |
}
|
423 |
|
424 |
-
if (
|
425 |
// Option found and set to always use the site level storage on a multisite.
|
426 |
return false;
|
427 |
}
|
@@ -430,12 +448,15 @@
|
|
430 |
return false;
|
431 |
}
|
432 |
|
433 |
-
if (
|
434 |
// Network activated.
|
435 |
return true;
|
436 |
}
|
437 |
|
438 |
-
if (
|
|
|
|
|
|
|
439 |
// Network activated and not delegated.
|
440 |
return true;
|
441 |
}
|
@@ -448,10 +469,15 @@
|
|
448 |
*
|
449 |
* @param string $key
|
450 |
* @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::$_BINARY_MAP).
|
|
|
451 |
*
|
452 |
* @return bool
|
453 |
*/
|
454 |
-
private function should_use_network_storage(
|
|
|
|
|
|
|
|
|
455 |
if ( ! $this->_is_multisite ) {
|
456 |
// Not a multisite environment.
|
457 |
return false;
|
@@ -463,12 +489,12 @@
|
|
463 |
}
|
464 |
|
465 |
if ( is_bool( $network_level_or_blog_id ) ) {
|
466 |
-
// Explicitly specified whether should use the network or blog level storage.
|
467 |
return $network_level_or_blog_id;
|
468 |
}
|
469 |
|
470 |
// Determine which storage to use based on the option.
|
471 |
-
return $this->is_multisite_option( $key );
|
472 |
}
|
473 |
|
474 |
/**
|
@@ -529,4 +555,4 @@
|
|
529 |
}
|
530 |
|
531 |
#endregion
|
532 |
-
}
|
15 |
*
|
16 |
* A wrapper class for handling network level and single site level storage.
|
17 |
*
|
18 |
+
* @property bool $is_network_activation
|
19 |
+
* @property int $network_install_blog_id
|
20 |
+
* @property bool|null $is_extensions_tracking_allowed
|
21 |
+
* @property bool|null $is_diagnostic_tracking_allowed
|
22 |
+
* @property object $sync_cron
|
23 |
*/
|
24 |
class FS_Storage {
|
25 |
/**
|
74 |
*/
|
75 |
private static $_NETWORK_OPTIONS_MAP;
|
76 |
|
77 |
+
const OPTION_LEVEL_UNDEFINED = -1;
|
78 |
+
// The option should be stored on the network level.
|
79 |
+
const OPTION_LEVEL_NETWORK = 0;
|
80 |
+
// The option should be stored on the network level when the plugin is network-activated.
|
81 |
+
const OPTION_LEVEL_NETWORK_ACTIVATED = 1;
|
82 |
+
// The option should be stored on the network level when the plugin is network-activated and the opt-in connection was NOT delegated to the sub-site admin.
|
83 |
+
const OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED = 2;
|
84 |
+
// The option should be stored on the site level.
|
85 |
+
const OPTION_LEVEL_SITE = 3;
|
86 |
+
|
87 |
/**
|
88 |
* @author Leo Fajardo (@leorw)
|
89 |
*
|
154 |
* @param string $key
|
155 |
* @param mixed $value
|
156 |
* @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::$_BINARY_MAP).
|
157 |
+
* @param int $option_level Since 2.5.1
|
158 |
* @param bool $flush
|
159 |
*/
|
160 |
+
function store(
|
161 |
+
$key,
|
162 |
+
$value,
|
163 |
+
$network_level_or_blog_id = null,
|
164 |
+
$option_level = self::OPTION_LEVEL_UNDEFINED,
|
165 |
+
$flush = true
|
166 |
+
) {
|
167 |
+
if ( $this->should_use_network_storage( $key, $network_level_or_blog_id, $option_level ) ) {
|
168 |
$this->_network_storage->store( $key, $value, $flush );
|
169 |
} else {
|
170 |
$storage = $this->get_site_storage( $network_level_or_blog_id );
|
218 |
* @param string $key
|
219 |
* @param mixed $default
|
220 |
* @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::$_BINARY_MAP).
|
221 |
+
* @param int $option_level Since 2.5.1
|
222 |
*
|
223 |
* @return mixed
|
224 |
*/
|
225 |
+
function get(
|
226 |
+
$key,
|
227 |
+
$default = false,
|
228 |
+
$network_level_or_blog_id = null,
|
229 |
+
$option_level = self::OPTION_LEVEL_UNDEFINED
|
230 |
+
) {
|
231 |
+
if ( $this->should_use_network_storage( $key, $network_level_or_blog_id, $option_level ) ) {
|
232 |
return $this->_network_storage->get( $key, $default );
|
233 |
} else {
|
234 |
$storage = $this->get_site_storage( $network_level_or_blog_id );
|
314 |
// Migrate option to the network storage.
|
315 |
$this->_network_storage->store( $option, $this->_storage->{$option}, false );
|
316 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
317 |
$updated = true;
|
318 |
}
|
319 |
}
|
348 |
private static function load_network_options_map() {
|
349 |
self::$_NETWORK_OPTIONS_MAP = array(
|
350 |
// Network level options.
|
351 |
+
'affiliate_application_data' => self::OPTION_LEVEL_NETWORK,
|
352 |
+
'beta_data' => self::OPTION_LEVEL_NETWORK,
|
353 |
+
'connectivity_test' => self::OPTION_LEVEL_NETWORK,
|
354 |
+
'handle_gdpr_admin_notice' => self::OPTION_LEVEL_NETWORK,
|
355 |
+
'has_trial_plan' => self::OPTION_LEVEL_NETWORK,
|
356 |
+
'install_sync_timestamp' => self::OPTION_LEVEL_NETWORK,
|
357 |
+
'install_sync_cron' => self::OPTION_LEVEL_NETWORK,
|
358 |
+
'is_anonymous_ms' => self::OPTION_LEVEL_NETWORK,
|
359 |
+
'is_network_activated' => self::OPTION_LEVEL_NETWORK,
|
360 |
+
'is_on' => self::OPTION_LEVEL_NETWORK,
|
361 |
+
'is_plugin_new_install' => self::OPTION_LEVEL_NETWORK,
|
362 |
+
'network_install_blog_id' => self::OPTION_LEVEL_NETWORK,
|
363 |
+
'pending_sites_info' => self::OPTION_LEVEL_NETWORK,
|
364 |
+
'plugin_last_version' => self::OPTION_LEVEL_NETWORK,
|
365 |
+
'plugin_main_file' => self::OPTION_LEVEL_NETWORK,
|
366 |
+
'plugin_version' => self::OPTION_LEVEL_NETWORK,
|
367 |
+
'sdk_downgrade_mode' => self::OPTION_LEVEL_NETWORK,
|
368 |
+
'sdk_last_version' => self::OPTION_LEVEL_NETWORK,
|
369 |
+
'sdk_upgrade_mode' => self::OPTION_LEVEL_NETWORK,
|
370 |
+
'sdk_version' => self::OPTION_LEVEL_NETWORK,
|
371 |
+
'sticky_optin_added_ms' => self::OPTION_LEVEL_NETWORK,
|
372 |
+
'subscriptions' => self::OPTION_LEVEL_NETWORK,
|
373 |
+
'sync_timestamp' => self::OPTION_LEVEL_NETWORK,
|
374 |
+
'sync_cron' => self::OPTION_LEVEL_NETWORK,
|
375 |
+
'was_plugin_loaded' => self::OPTION_LEVEL_NETWORK,
|
376 |
+
'network_user_id' => self::OPTION_LEVEL_NETWORK,
|
377 |
+
'plugin_upgrade_mode' => self::OPTION_LEVEL_NETWORK,
|
378 |
+
'plugin_downgrade_mode' => self::OPTION_LEVEL_NETWORK,
|
379 |
+
'is_network_connected' => self::OPTION_LEVEL_NETWORK,
|
380 |
/**
|
381 |
+
* Special flag that is used when a super-admin upgrades to the new version of the SDK that supports network level integration, when the connection decision wasn't made for all the sites in the network.
|
|
|
|
|
382 |
*/
|
383 |
+
'is_network_activation' => self::OPTION_LEVEL_NETWORK,
|
384 |
+
'license_migration' => self::OPTION_LEVEL_NETWORK,
|
385 |
|
386 |
// When network activated, then network level.
|
387 |
+
'install_timestamp' => self::OPTION_LEVEL_NETWORK_ACTIVATED,
|
388 |
+
'prev_is_premium' => self::OPTION_LEVEL_NETWORK_ACTIVATED,
|
389 |
+
'require_license_activation' => self::OPTION_LEVEL_NETWORK_ACTIVATED,
|
390 |
|
391 |
// If not network activated OR delegated, then site level.
|
392 |
+
'activation_timestamp' => self::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED,
|
393 |
+
'expired_license_notice_shown' => self::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED,
|
394 |
+
'is_whitelabeled' => self::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED,
|
395 |
+
'last_license_key' => self::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED,
|
396 |
+
'last_license_user_id' => self::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED,
|
397 |
+
'prev_user_id' => self::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED,
|
398 |
+
'sticky_optin_added' => self::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED,
|
399 |
+
'uninstall_reason' => self::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED,
|
400 |
+
'is_pending_activation' => self::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED,
|
401 |
+
'pending_license_key' => self::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED,
|
|
|
402 |
|
403 |
// Site level options.
|
404 |
+
'is_anonymous' => self::OPTION_LEVEL_SITE,
|
405 |
+
'clone_id' => self::OPTION_LEVEL_SITE,
|
406 |
);
|
407 |
}
|
408 |
|
413 |
* @since 2.0.0
|
414 |
*
|
415 |
* @param string $key
|
416 |
+
* @param int $option_level Since 2.5.1
|
417 |
*
|
418 |
+
* @return bool
|
419 |
*/
|
420 |
+
private function is_multisite_option( $key, $option_level = self::OPTION_LEVEL_UNDEFINED ) {
|
421 |
if ( ! isset( self::$_NETWORK_OPTIONS_MAP ) ) {
|
422 |
self::load_network_options_map();
|
423 |
}
|
424 |
|
425 |
+
if (
|
426 |
+
self::OPTION_LEVEL_UNDEFINED === $option_level &&
|
427 |
+
isset( self::$_NETWORK_OPTIONS_MAP[ $key ] )
|
428 |
+
) {
|
429 |
+
$option_level = self::$_NETWORK_OPTIONS_MAP[ $key ];
|
430 |
+
}
|
431 |
+
|
432 |
+
if ( self::OPTION_LEVEL_UNDEFINED === $option_level ) {
|
433 |
// Option not found -> use site level storage.
|
434 |
return false;
|
435 |
}
|
436 |
|
437 |
+
if ( self::OPTION_LEVEL_NETWORK === $option_level ) {
|
438 |
// Option found and set to always use the network level storage on a multisite.
|
439 |
return true;
|
440 |
}
|
441 |
|
442 |
+
if ( self::OPTION_LEVEL_SITE === $option_level ) {
|
443 |
// Option found and set to always use the site level storage on a multisite.
|
444 |
return false;
|
445 |
}
|
448 |
return false;
|
449 |
}
|
450 |
|
451 |
+
if ( self::OPTION_LEVEL_NETWORK_ACTIVATED === $option_level ) {
|
452 |
// Network activated.
|
453 |
return true;
|
454 |
}
|
455 |
|
456 |
+
if (
|
457 |
+
self::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED === $option_level &&
|
458 |
+
! $this->_is_delegated_connection
|
459 |
+
) {
|
460 |
// Network activated and not delegated.
|
461 |
return true;
|
462 |
}
|
469 |
*
|
470 |
* @param string $key
|
471 |
* @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::$_BINARY_MAP).
|
472 |
+
* @param int $option_level Since 2.5.1
|
473 |
*
|
474 |
* @return bool
|
475 |
*/
|
476 |
+
private function should_use_network_storage(
|
477 |
+
$key,
|
478 |
+
$network_level_or_blog_id = null,
|
479 |
+
$option_level = self::OPTION_LEVEL_UNDEFINED
|
480 |
+
) {
|
481 |
if ( ! $this->_is_multisite ) {
|
482 |
// Not a multisite environment.
|
483 |
return false;
|
489 |
}
|
490 |
|
491 |
if ( is_bool( $network_level_or_blog_id ) ) {
|
492 |
+
// Explicitly specified whether it should use the network or blog level storage.
|
493 |
return $network_level_or_blog_id;
|
494 |
}
|
495 |
|
496 |
// Determine which storage to use based on the option.
|
497 |
+
return $this->is_multisite_option( $key, $option_level );
|
498 |
}
|
499 |
|
500 |
/**
|
555 |
}
|
556 |
|
557 |
#endregion
|
558 |
+
}
|
vendor/freemius/wordpress-sdk/includes/class-fs-user-lock.php
CHANGED
@@ -10,18 +10,16 @@
|
|
10 |
exit;
|
11 |
}
|
12 |
|
|
|
|
|
13 |
/**
|
14 |
* Class FS_User_Lock
|
15 |
*/
|
16 |
class FS_User_Lock {
|
17 |
/**
|
18 |
-
* @var
|
19 |
-
*/
|
20 |
-
private $_wp_user_id;
|
21 |
-
/**
|
22 |
-
* @var int
|
23 |
*/
|
24 |
-
private $
|
25 |
|
26 |
#--------------------------------------------------------------------------------
|
27 |
#region Singleton
|
@@ -49,10 +47,10 @@
|
|
49 |
#endregion
|
50 |
|
51 |
private function __construct() {
|
52 |
-
$
|
53 |
-
$this->_thread_id = mt_rand( 0, 32000 );
|
54 |
-
}
|
55 |
|
|
|
|
|
56 |
|
57 |
/**
|
58 |
* Try to acquire lock. If the lock is already set or is being acquired by another locker, don't do anything.
|
@@ -65,20 +63,7 @@
|
|
65 |
* @return bool TRUE if successfully acquired lock.
|
66 |
*/
|
67 |
function try_lock( $expiration = 0 ) {
|
68 |
-
|
69 |
-
// Already locked.
|
70 |
-
return false;
|
71 |
-
}
|
72 |
-
|
73 |
-
set_site_transient( "locked_{$this->_wp_user_id}", $this->_thread_id, $expiration );
|
74 |
-
|
75 |
-
if ( $this->has_lock() ) {
|
76 |
-
set_site_transient( "locked_{$this->_wp_user_id}", true, $expiration );
|
77 |
-
|
78 |
-
return true;
|
79 |
-
}
|
80 |
-
|
81 |
-
return false;
|
82 |
}
|
83 |
|
84 |
/**
|
@@ -90,19 +75,7 @@
|
|
90 |
* @param int $expiration
|
91 |
*/
|
92 |
function lock( $expiration = 0 ) {
|
93 |
-
|
94 |
-
}
|
95 |
-
|
96 |
-
/**
|
97 |
-
* Checks if lock is currently acquired.
|
98 |
-
*
|
99 |
-
* @author Vova Feldman (@svovaf)
|
100 |
-
* @since 2.1.0
|
101 |
-
*
|
102 |
-
* @return bool
|
103 |
-
*/
|
104 |
-
function is_locked() {
|
105 |
-
return ( false !== get_site_transient( "locked_{$this->_wp_user_id}" ) );
|
106 |
}
|
107 |
|
108 |
/**
|
@@ -112,15 +85,6 @@
|
|
112 |
* @since 2.1.0
|
113 |
*/
|
114 |
function unlock() {
|
115 |
-
|
116 |
-
}
|
117 |
-
|
118 |
-
/**
|
119 |
-
* Checks if lock is currently acquired by the current locker.
|
120 |
-
*
|
121 |
-
* @return bool
|
122 |
-
*/
|
123 |
-
private function has_lock() {
|
124 |
-
return ( $this->_thread_id == get_site_transient( "locked_{$this->_wp_user_id}" ) );
|
125 |
}
|
126 |
}
|
10 |
exit;
|
11 |
}
|
12 |
|
13 |
+
require_once WP_FS__DIR_INCLUDES . '/class-fs-lock.php';
|
14 |
+
|
15 |
/**
|
16 |
* Class FS_User_Lock
|
17 |
*/
|
18 |
class FS_User_Lock {
|
19 |
/**
|
20 |
+
* @var FS_Lock
|
|
|
|
|
|
|
|
|
21 |
*/
|
22 |
+
private $_lock;
|
23 |
|
24 |
#--------------------------------------------------------------------------------
|
25 |
#region Singleton
|
47 |
#endregion
|
48 |
|
49 |
private function __construct() {
|
50 |
+
$current_user_id = Freemius::get_current_wp_user_id();
|
|
|
|
|
51 |
|
52 |
+
$this->_lock = new FS_Lock( "locked_{$current_user_id}" );
|
53 |
+
}
|
54 |
|
55 |
/**
|
56 |
* Try to acquire lock. If the lock is already set or is being acquired by another locker, don't do anything.
|
63 |
* @return bool TRUE if successfully acquired lock.
|
64 |
*/
|
65 |
function try_lock( $expiration = 0 ) {
|
66 |
+
return $this->_lock->try_lock( $expiration );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
}
|
68 |
|
69 |
/**
|
75 |
* @param int $expiration
|
76 |
*/
|
77 |
function lock( $expiration = 0 ) {
|
78 |
+
$this->_lock->lock( $expiration );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
}
|
80 |
|
81 |
/**
|
85 |
* @since 2.1.0
|
86 |
*/
|
87 |
function unlock() {
|
88 |
+
$this->_lock->unlock();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
}
|
90 |
}
|
vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-tag.php
CHANGED
@@ -23,6 +23,10 @@
|
|
23 |
* @var string
|
24 |
*/
|
25 |
public $requires_platform_version;
|
|
|
|
|
|
|
|
|
26 |
/**
|
27 |
* @var string
|
28 |
*/
|
23 |
* @var string
|
24 |
*/
|
25 |
public $requires_platform_version;
|
26 |
+
/**
|
27 |
+
* @var string
|
28 |
+
*/
|
29 |
+
public $requires_programming_language_version;
|
30 |
/**
|
31 |
* @var string
|
32 |
*/
|
vendor/freemius/wordpress-sdk/includes/entities/class-fs-site.php
CHANGED
@@ -10,6 +10,9 @@
|
|
10 |
exit;
|
11 |
}
|
12 |
|
|
|
|
|
|
|
13 |
class FS_Site extends FS_Scope_Entity {
|
14 |
/**
|
15 |
* @var number
|
@@ -82,6 +85,8 @@
|
|
82 |
* @author Leo Fajardo (@leorw)
|
83 |
*
|
84 |
* @since 1.2.1.5
|
|
|
|
|
85 |
*
|
86 |
* @var bool
|
87 |
*/
|
@@ -225,31 +230,25 @@
|
|
225 |
}
|
226 |
|
227 |
/**
|
228 |
-
* @author
|
229 |
-
* @since 2.0.0
|
230 |
*
|
231 |
* @return bool
|
232 |
*/
|
233 |
-
function
|
234 |
-
return ( true
|
235 |
}
|
236 |
|
237 |
/**
|
238 |
-
* @author
|
239 |
-
* @since
|
240 |
*
|
241 |
-
* @
|
242 |
-
*/
|
243 |
-
function is_tracking_prohibited() {
|
244 |
-
return ! $this->is_tracking_allowed();
|
245 |
-
}
|
246 |
-
|
247 |
-
/**
|
248 |
-
* @author Edgar Melkonyan
|
249 |
*
|
250 |
* @return bool
|
251 |
*/
|
252 |
-
function
|
253 |
-
|
|
|
|
|
254 |
}
|
255 |
-
}
|
10 |
exit;
|
11 |
}
|
12 |
|
13 |
+
/**
|
14 |
+
* @property int $blog_id
|
15 |
+
*/
|
16 |
class FS_Site extends FS_Scope_Entity {
|
17 |
/**
|
18 |
* @var number
|
85 |
* @author Leo Fajardo (@leorw)
|
86 |
*
|
87 |
* @since 1.2.1.5
|
88 |
+
* @deprecated Since 2.5.1
|
89 |
+
* @todo Remove after a few releases.
|
90 |
*
|
91 |
* @var bool
|
92 |
*/
|
230 |
}
|
231 |
|
232 |
/**
|
233 |
+
* @author Edgar Melkonyan
|
|
|
234 |
*
|
235 |
* @return bool
|
236 |
*/
|
237 |
+
function is_beta() {
|
238 |
+
return ( isset( $this->is_beta ) && true === $this->is_beta );
|
239 |
}
|
240 |
|
241 |
/**
|
242 |
+
* @author Leo Fajardo (@leorw)
|
243 |
+
* @since 2.5.1
|
244 |
*
|
245 |
+
* @param string $site_url
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
246 |
*
|
247 |
* @return bool
|
248 |
*/
|
249 |
+
function is_clone( $site_url ) {
|
250 |
+
$clone_install_url = trailingslashit( fs_strip_url_protocol( $this->url ) );
|
251 |
+
|
252 |
+
return ( $clone_install_url !== $site_url );
|
253 |
}
|
254 |
+
}
|
vendor/freemius/wordpress-sdk/includes/fs-core-functions.php
CHANGED
@@ -756,7 +756,7 @@
|
|
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
|
760 |
elseif ( ( ! isset( $a['priority'] ) && ! isset( $b['priority'] ) ) || $a['priority'] === $b['priority'] ) {
|
761 |
return 0;
|
762 |
}
|
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 it's a tie.
|
760 |
elseif ( ( ! isset( $a['priority'] ) && ! isset( $b['priority'] ) ) || $a['priority'] === $b['priority'] ) {
|
761 |
return 0;
|
762 |
}
|
vendor/freemius/wordpress-sdk/includes/fs-plugin-info-dialog.php
CHANGED
@@ -332,6 +332,7 @@
|
|
332 |
$data->version = $latest->version;
|
333 |
$data->last_updated = $latest->created;
|
334 |
$data->requires = $latest->requires_platform_version;
|
|
|
335 |
$data->tested = $latest->tested_up_to_version;
|
336 |
} else if ( ! empty( $current_addon_version ) ) {
|
337 |
$data->version = $current_addon_version;
|
@@ -1366,7 +1367,10 @@
|
|
1366 |
?>
|
1367 |
<li>
|
1368 |
<strong><?php fs_esc_html_echo_inline( 'Requires WordPress Version', 'requires-wordpress-version', $api->slug ) ?>
|
1369 |
-
:</strong> <?php echo esc_html( sprintf(
|
|
|
|
|
|
|
1370 |
</li>
|
1371 |
<?php
|
1372 |
}
|
@@ -1378,6 +1382,19 @@
|
|
1378 |
</li>
|
1379 |
<?php
|
1380 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1381 |
if ( ! empty( $api->downloaded ) ) {
|
1382 |
?>
|
1383 |
<li>
|
@@ -1507,9 +1524,43 @@
|
|
1507 |
</div>
|
1508 |
<div id="section-holder" class="wrap">
|
1509 |
<?php
|
1510 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1511 |
echo '<div class="notice notice-warning"><p>' . '<strong>' . fs_text_inline( 'Warning', 'warning', $api->slug ) . ':</strong> ' . fs_text_inline( 'This plugin has not been tested with your current version of WordPress.', 'not-tested-warning', $api->slug ) . '</p></div>';
|
1512 |
-
} else if ( !
|
1513 |
echo '<div class="notice notice-warning"><p>' . '<strong>' . fs_text_inline( 'Warning', 'warning', $api->slug ) . ':</strong> ' . fs_text_inline( 'This plugin has not been marked as compatible with your version of WordPress.', 'not-compatible-warning', $api->slug ) . '</p></div>';
|
1514 |
}
|
1515 |
|
332 |
$data->version = $latest->version;
|
333 |
$data->last_updated = $latest->created;
|
334 |
$data->requires = $latest->requires_platform_version;
|
335 |
+
$data->requires_php = $latest->requires_programming_language_version;
|
336 |
$data->tested = $latest->tested_up_to_version;
|
337 |
} else if ( ! empty( $current_addon_version ) ) {
|
338 |
$data->version = $current_addon_version;
|
1367 |
?>
|
1368 |
<li>
|
1369 |
<strong><?php fs_esc_html_echo_inline( 'Requires WordPress Version', 'requires-wordpress-version', $api->slug ) ?>
|
1370 |
+
:</strong> <?php echo esc_html( sprintf(
|
1371 |
+
/* translators: %s: Version number. */
|
1372 |
+
fs_text_inline( '%s or higher', 'x-or-higher', $api->slug ), $api->requires )
|
1373 |
+
) ?>
|
1374 |
</li>
|
1375 |
<?php
|
1376 |
}
|
1382 |
</li>
|
1383 |
<?php
|
1384 |
}
|
1385 |
+
if ( ! empty( $api->requires_php ) ) {
|
1386 |
+
?>
|
1387 |
+
<li>
|
1388 |
+
<strong><?php fs_esc_html_echo_inline( 'Requires PHP Version', 'requires-php-version', $api->slug ); ?>:</strong>
|
1389 |
+
<?php
|
1390 |
+
echo esc_html( sprintf(
|
1391 |
+
/* translators: %s: Version number. */
|
1392 |
+
fs_text_inline( '%s or higher', 'x-or-higher', $api->slug ), $api->requires_php )
|
1393 |
+
);
|
1394 |
+
?>
|
1395 |
+
</li>
|
1396 |
+
<?php
|
1397 |
+
}
|
1398 |
if ( ! empty( $api->downloaded ) ) {
|
1399 |
?>
|
1400 |
<li>
|
1524 |
</div>
|
1525 |
<div id="section-holder" class="wrap">
|
1526 |
<?php
|
1527 |
+
$requires_php = isset( $api->requires_php ) ? $api->requires_php : null;
|
1528 |
+
$requires_wp = isset( $api->requires ) ? $api->requires : null;
|
1529 |
+
|
1530 |
+
$compatible_php = empty( $requires_php ) || version_compare( PHP_VERSION, $requires_php, '>=' );
|
1531 |
+
|
1532 |
+
// Strip off any -alpha, -RC, -beta, -src suffixes.
|
1533 |
+
list( $wp_version ) = explode( '-', $GLOBALS['wp_version'] );
|
1534 |
+
|
1535 |
+
$compatible_wp = empty( $requires_wp ) || version_compare( $wp_version, $requires_wp, '>=' );
|
1536 |
+
$tested_wp = ( empty( $api->tested ) || version_compare( $wp_version, $api->tested, '<=' ) );
|
1537 |
+
|
1538 |
+
if ( ! $compatible_php ) {
|
1539 |
+
echo '<div class="notice notice-error notice-alt"><p><strong>' . fs_text_inline( 'Error', 'error', $api->slug ) . ':</strong> ' . fs_text_inline( 'This plugin requires a newer version of PHP.', 'newer-php-required-error', $api->slug );
|
1540 |
+
|
1541 |
+
if ( current_user_can( 'update_php' ) ) {
|
1542 |
+
$wp_get_update_php_url = function_exists( 'wp_get_update_php_url' ) ?
|
1543 |
+
wp_get_update_php_url() :
|
1544 |
+
'https://wordpress.org/support/update-php/';
|
1545 |
+
|
1546 |
+
printf(
|
1547 |
+
/* translators: %s: URL to Update PHP page. */
|
1548 |
+
' ' . fs_text_inline( '<a href="%s" target="_blank">Click here to learn more about updating PHP</a>.', 'php-update-learn-more-link', $api->slug ),
|
1549 |
+
esc_url( $wp_get_update_php_url )
|
1550 |
+
);
|
1551 |
+
|
1552 |
+
if ( function_exists( 'wp_update_php_annotation' ) ) {
|
1553 |
+
wp_update_php_annotation( '</p><p><em>', '</em>' );
|
1554 |
+
}
|
1555 |
+
} else {
|
1556 |
+
echo '</p>';
|
1557 |
+
}
|
1558 |
+
echo '</div>';
|
1559 |
+
}
|
1560 |
+
|
1561 |
+
if ( ! $tested_wp ) {
|
1562 |
echo '<div class="notice notice-warning"><p>' . '<strong>' . fs_text_inline( 'Warning', 'warning', $api->slug ) . ':</strong> ' . fs_text_inline( 'This plugin has not been tested with your current version of WordPress.', 'not-tested-warning', $api->slug ) . '</p></div>';
|
1563 |
+
} else if ( ! $compatible_wp ) {
|
1564 |
echo '<div class="notice notice-warning"><p>' . '<strong>' . fs_text_inline( 'Warning', 'warning', $api->slug ) . ':</strong> ' . fs_text_inline( 'This plugin has not been marked as compatible with your version of WordPress.', 'not-compatible-warning', $api->slug ) . '</p></div>';
|
1565 |
}
|
1566 |
|
vendor/freemius/wordpress-sdk/includes/managers/class-fs-admin-notice-manager.php
CHANGED
@@ -501,9 +501,15 @@
|
|
501 |
*
|
502 |
* @author Vova Feldman (@svovaf)
|
503 |
* @since 1.0.8
|
|
|
|
|
504 |
*/
|
505 |
-
function clear_all_sticky() {
|
506 |
-
$
|
|
|
|
|
|
|
|
|
507 |
}
|
508 |
|
509 |
#--------------------------------------------------------------------------------
|
501 |
*
|
502 |
* @author Vova Feldman (@svovaf)
|
503 |
* @since 1.0.8
|
504 |
+
*
|
505 |
+
* @param bool $is_temporary @since 2.5.1
|
506 |
*/
|
507 |
+
function clear_all_sticky( $is_temporary = false ) {
|
508 |
+
if ( $is_temporary ) {
|
509 |
+
$this->_notices = array();
|
510 |
+
} else {
|
511 |
+
$this->_sticky_storage->clear_all();
|
512 |
+
}
|
513 |
}
|
514 |
|
515 |
#--------------------------------------------------------------------------------
|
vendor/freemius/wordpress-sdk/includes/managers/class-fs-clone-manager.php
CHANGED
@@ -22,6 +22,8 @@
|
|
22 |
* @property string $request_handler_id
|
23 |
* @property int $request_handler_timestamp
|
24 |
* @property int $request_handler_retries_count
|
|
|
|
|
25 |
*/
|
26 |
class FS_Clone_Manager {
|
27 |
/**
|
@@ -32,23 +34,6 @@
|
|
32 |
* @var FS_Option_Manager
|
33 |
*/
|
34 |
private $_network_storage;
|
35 |
-
/**
|
36 |
-
* @var array {
|
37 |
-
* @type int $clone_identification_timestamp
|
38 |
-
* @type int $temporary_duplicate_mode_selection_timestamp
|
39 |
-
* @type int $temporary_duplicate_notice_shown_timestamp
|
40 |
-
* @type string $request_handler_id
|
41 |
-
* @type int $request_handler_timestamp
|
42 |
-
* @type int $request_handler_retries_count
|
43 |
-
* }
|
44 |
-
*/
|
45 |
-
private $_data;
|
46 |
-
/**
|
47 |
-
* @var array {
|
48 |
-
* @type array $new_blog_install_map
|
49 |
-
* }
|
50 |
-
*/
|
51 |
-
private $_network_data;
|
52 |
/**
|
53 |
* @var FS_Admin_Notices
|
54 |
*/
|
@@ -116,36 +101,37 @@
|
|
116 |
private function __construct() {
|
117 |
$this->_storage = FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true );
|
118 |
$this->_network_storage = FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true, true );
|
119 |
-
|
120 |
-
$this->
|
121 |
|
122 |
$this->_notices = FS_Admin_Notices::instance( 'global_clone_resolution_notices', '', '', true );
|
123 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . '_clone_manager', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
|
|
124 |
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
|
|
|
|
|
|
|
|
132 |
);
|
133 |
|
134 |
-
|
135 |
-
$
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
}
|
143 |
|
144 |
-
|
145 |
-
|
146 |
-
! isset( $this->_network_data['new_blog_install_map'] )
|
147 |
-
) {
|
148 |
-
$this->_network_data = array( 'new_blog_install_map' => null );
|
149 |
}
|
150 |
}
|
151 |
|
@@ -159,17 +145,17 @@
|
|
159 |
add_action( 'admin_post_fs_clone_resolution', array( $this, '_handle_clone_resolution' ) );
|
160 |
}
|
161 |
|
162 |
-
if (
|
163 |
-
|
164 |
-
(
|
165 |
-
! fs_is_network_admin() ||
|
166 |
-
! ( $this->is_clone_resolution_options_notice_shown() || $this->is_temporary_duplicate_notice_shown() )
|
167 |
-
)
|
168 |
-
) {
|
169 |
-
$this->hide_clone_admin_notices();
|
170 |
} else {
|
171 |
-
if (
|
172 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
173 |
} else if ( ! Freemius::is_cron() && ! Freemius::is_admin_post() ) {
|
174 |
$this->try_resolve_clone_automatically();
|
175 |
$this->maybe_show_clone_admin_notice();
|
@@ -186,7 +172,24 @@
|
|
186 |
* @return int|null
|
187 |
*/
|
188 |
function get_clone_identification_timestamp() {
|
189 |
-
return $this->clone_identification_timestamp;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
}
|
191 |
|
192 |
/**
|
@@ -227,6 +230,16 @@
|
|
227 |
return ( time() > ( $this->request_handler_timestamp + self::CLONE_RESOLUTION_MAX_EXECUTION_TIME ) );
|
228 |
}
|
229 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
230 |
/**
|
231 |
* Executes the clones handler logic if it should be executed, i.e., based on the return value of the should_handle_clones() method.
|
232 |
*
|
@@ -293,7 +306,6 @@
|
|
293 |
}
|
294 |
|
295 |
if ( ! $this->try_automatic_resolution() ) {
|
296 |
-
$this->store_clone_identification_timestamp();
|
297 |
$this->clear_temporary_duplicate_notice_shown_timestamp();
|
298 |
}
|
299 |
}
|
@@ -364,7 +376,7 @@
|
|
364 |
* @return object
|
365 |
*/
|
366 |
private function find_other_install_by_url( Freemius $instance, $url ) {
|
367 |
-
$result = $instance->get_api_user_scope()->get( "/plugins/{$instance->get_id()}/installs.json?
|
368 |
|
369 |
$current_install = $instance->get_site();
|
370 |
|
@@ -635,6 +647,14 @@
|
|
635 |
return;
|
636 |
}
|
637 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
638 |
$instance->switch_to_blog( $blog_id );
|
639 |
|
640 |
$current_url = untrailingslashit( Freemius::get_unfiltered_site_url( null, true ) );
|
@@ -684,6 +704,8 @@
|
|
684 |
|
685 |
// Remove the current site's information from the map to prevent handling it again.
|
686 |
$this->remove_new_blog_install_info_from_storage( $blog_id );
|
|
|
|
|
687 |
}
|
688 |
|
689 |
/**
|
@@ -740,6 +762,17 @@
|
|
740 |
private function try_automatic_resolution() {
|
741 |
$this->_logger->entrance();
|
742 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
743 |
$current_url = untrailingslashit( Freemius::get_unfiltered_site_url( null, true ) );
|
744 |
$is_localhost = FS_Site::is_localhost_by_address( $current_url );
|
745 |
|
@@ -761,6 +794,9 @@
|
|
761 |
}
|
762 |
}
|
763 |
|
|
|
|
|
|
|
764 |
return ( ! $require_manual_resolution );
|
765 |
}
|
766 |
|
@@ -790,6 +826,13 @@
|
|
790 |
check_ajax_referer( Freemius::get_ajax_action_static( 'handle_clone_resolution' ), 'security' );
|
791 |
|
792 |
$clone_action = fs_request_get( 'clone_action' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
793 |
|
794 |
if ( empty( $clone_action ) ) {
|
795 |
Freemius::shoot_ajax_failure( array(
|
@@ -798,7 +841,7 @@
|
|
798 |
) );
|
799 |
}
|
800 |
|
801 |
-
$result = $this->resolve_cloned_sites( $clone_action );
|
802 |
|
803 |
Freemius::shoot_ajax_success( $result );
|
804 |
}
|
@@ -809,61 +852,85 @@
|
|
809 |
*
|
810 |
* @param string $clone_action
|
811 |
* @param Freemius[] $fs_instances
|
|
|
812 |
*
|
813 |
* @return array
|
814 |
*/
|
815 |
-
private function resolve_cloned_sites( $clone_action, $fs_instances = array() ) {
|
816 |
$this->_logger->entrance();
|
817 |
|
818 |
$result = array();
|
819 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
820 |
if ( self::OPTION_TEMPORARY_DUPLICATE === $clone_action ) {
|
821 |
$this->store_temporary_duplicate_timestamp();
|
822 |
} else {
|
823 |
-
$
|
824 |
-
$instance_with_error = null;
|
825 |
-
$has_error = false;
|
826 |
-
|
827 |
-
$instances = ( ! empty( $fs_instances ) ) ?
|
828 |
-
$fs_instances :
|
829 |
-
Freemius::_get_all_instances();
|
830 |
-
|
831 |
-
foreach ( $instances as $instance ) {
|
832 |
-
if ( ! $instance->is_registered() ) {
|
833 |
-
continue;
|
834 |
-
}
|
835 |
|
836 |
-
|
837 |
-
|
|
|
838 |
}
|
839 |
|
840 |
-
$
|
841 |
|
842 |
if ( self::OPTION_NEW_HOME === $clone_action ) {
|
843 |
$instance->sync_install( array( 'is_new_site' => true ), true );
|
|
|
|
|
|
|
|
|
844 |
} else {
|
845 |
$instance->_handle_long_term_duplicate();
|
846 |
|
847 |
if ( ! is_object( $instance->get_site() ) ) {
|
848 |
$has_error = true;
|
849 |
-
|
850 |
-
if ( ! is_object( $instance_with_error ) ) {
|
851 |
-
$instance_with_error = $instance;
|
852 |
-
}
|
853 |
}
|
854 |
}
|
|
|
|
|
|
|
|
|
855 |
}
|
856 |
|
857 |
-
$
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
$redirect_url = $instance_with_error->get_activation_url();
|
864 |
}
|
865 |
|
866 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
867 |
}
|
868 |
|
869 |
if ( 'temporary_duplicate_license_activation' !== $clone_action ) {
|
@@ -872,6 +939,12 @@
|
|
872 |
$this->remove_temporary_duplicate_notice();
|
873 |
}
|
874 |
|
|
|
|
|
|
|
|
|
|
|
|
|
875 |
return $result;
|
876 |
}
|
877 |
|
@@ -888,7 +961,7 @@
|
|
888 |
* @author Leo Fajardo (@leorw)
|
889 |
* @since 2.5.0
|
890 |
*/
|
891 |
-
|
892 |
$this->_logger->entrance();
|
893 |
|
894 |
if ( fs_is_network_admin() ) {
|
@@ -916,7 +989,7 @@
|
|
916 |
continue;
|
917 |
}
|
918 |
|
919 |
-
if ( ! $instance->is_clone() ) {
|
920 |
continue;
|
921 |
}
|
922 |
|
@@ -989,7 +1062,7 @@
|
|
989 |
}
|
990 |
|
991 |
if ( ! $this->is_temporary_duplicate_notice_shown() ) {
|
992 |
-
$last_time_temporary_duplicate_notice_shown = $this->
|
993 |
$was_temporary_duplicate_notice_shown_before = is_numeric( $last_time_temporary_duplicate_notice_shown );
|
994 |
|
995 |
if ( $was_temporary_duplicate_notice_shown_before ) {
|
@@ -1177,7 +1250,7 @@
|
|
1177 |
$option_template,
|
1178 |
fs_esc_html_inline( 'Is %2$s a duplicate of %4$s?', 'duplicate-site-confirmation-message' ),
|
1179 |
fs_esc_html_inline( 'Yes, %2$s is a duplicate of %4$s for the purpose of testing, staging, or development.', 'duplicate-site-message' ),
|
1180 |
-
($this->has_temporary_duplicate_mode_expired() ?
|
1181 |
sprintf(
|
1182 |
$button_template,
|
1183 |
'long_term_duplicate',
|
@@ -1187,7 +1260,7 @@
|
|
1187 |
$button_template,
|
1188 |
'temporary_duplicate',
|
1189 |
fs_text_inline( 'Duplicate Website', 'duplicate-site' )
|
1190 |
-
))
|
1191 |
);
|
1192 |
|
1193 |
$migration_option = sprintf(
|
@@ -1223,6 +1296,8 @@
|
|
1223 |
)
|
1224 |
);
|
1225 |
|
|
|
|
|
1226 |
/**
|
1227 |
* %1$s - single product's title or product titles list.
|
1228 |
* %2$s - site's URL.
|
@@ -1231,7 +1306,7 @@
|
|
1231 |
*/
|
1232 |
$message = sprintf(
|
1233 |
$notice_header .
|
1234 |
-
'<div class="fs-clone-resolution-options-container" data-ajax-url="' . esc_attr( admin_url( 'admin-ajax.php?_fs_network_admin=false', 'relative' ) ) . '">' .
|
1235 |
$duplicate_option .
|
1236 |
$migration_option .
|
1237 |
$new_website . '</div>' .
|
@@ -1266,7 +1341,7 @@
|
|
1266 |
false,
|
1267 |
array(
|
1268 |
'product_ids' => $product_ids,
|
1269 |
-
'blog_id' =>
|
1270 |
)
|
1271 |
);
|
1272 |
}
|
@@ -1374,7 +1449,7 @@
|
|
1374 |
*/
|
1375 |
function has_temporary_duplicate_mode_expired() {
|
1376 |
$temporary_duplicate_mode_start_timestamp = $this->was_temporary_duplicate_mode_selected() ?
|
1377 |
-
$this->temporary_duplicate_mode_selection_timestamp :
|
1378 |
$this->get_clone_identification_timestamp();
|
1379 |
|
1380 |
if ( ! is_numeric( $temporary_duplicate_mode_start_timestamp ) ) {
|
@@ -1390,10 +1465,7 @@
|
|
1390 |
* @return bool
|
1391 |
*/
|
1392 |
function was_temporary_duplicate_mode_selected() {
|
1393 |
-
return (
|
1394 |
-
isset( $this->temporary_duplicate_mode_selection_timestamp ) &&
|
1395 |
-
is_numeric( $this->temporary_duplicate_mode_selection_timestamp )
|
1396 |
-
);
|
1397 |
}
|
1398 |
|
1399 |
/**
|
@@ -1445,23 +1517,12 @@
|
|
1445 |
* @return bool
|
1446 |
*/
|
1447 |
function is_temporary_duplicate_by_blog_id( $blog_id ) {
|
1448 |
-
$
|
1449 |
-
$data = $storage->get_option( self::OPTION_NAME, array() );
|
1450 |
-
|
1451 |
-
if ( ! is_array( $data ) ) {
|
1452 |
-
return false;
|
1453 |
-
}
|
1454 |
|
1455 |
-
|
1456 |
-
|
1457 |
-
|
1458 |
);
|
1459 |
-
|
1460 |
-
if ( ! $was_temporary_duplicate_mode_selected ) {
|
1461 |
-
return false;
|
1462 |
-
}
|
1463 |
-
|
1464 |
-
return ( time() < ( $data['temporary_duplicate_mode_selection_timestamp'] + self::TEMPORARY_DUPLICATE_PERIOD ) );
|
1465 |
}
|
1466 |
|
1467 |
/**
|
@@ -1470,16 +1531,14 @@
|
|
1470 |
* @return int|null
|
1471 |
*/
|
1472 |
function last_time_temporary_duplicate_notice_was_shown() {
|
1473 |
-
return
|
1474 |
-
null :
|
1475 |
-
$this->temporary_duplicate_notice_shown_timestamp;
|
1476 |
}
|
1477 |
|
1478 |
/**
|
1479 |
* Clears the time that has been stored when the temporary duplicate notice was shown.
|
1480 |
*/
|
1481 |
function clear_temporary_duplicate_notice_shown_timestamp() {
|
1482 |
-
$this->temporary_duplicate_notice_shown_timestamp
|
1483 |
}
|
1484 |
|
1485 |
/**
|
@@ -1487,7 +1546,6 @@
|
|
1487 |
*
|
1488 |
* @param number[] $product_ids
|
1489 |
* @param string $message
|
1490 |
-
* @param string $message
|
1491 |
* @param string|null $plugin_title
|
1492 |
*/
|
1493 |
function add_temporary_duplicate_sticky_notice(
|
@@ -1530,6 +1588,33 @@
|
|
1530 |
return ( 'new_blog_install_map' === $key );
|
1531 |
}
|
1532 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1533 |
#--------------------------------------------------------------------------------
|
1534 |
#region Magic methods
|
1535 |
#--------------------------------------------------------------------------------
|
@@ -1539,21 +1624,7 @@
|
|
1539 |
* @param int|string $value
|
1540 |
*/
|
1541 |
function __set( $name, $value ) {
|
1542 |
-
|
1543 |
-
$storage = $this->_storage;
|
1544 |
-
$data = $this->_data;
|
1545 |
-
} else {
|
1546 |
-
$storage = $this->_network_storage;
|
1547 |
-
$data = $this->_network_data;
|
1548 |
-
}
|
1549 |
-
|
1550 |
-
if ( ! array_key_exists( $name, $data ) ) {
|
1551 |
-
return;
|
1552 |
-
}
|
1553 |
-
|
1554 |
-
$data[ $name ] = $value;
|
1555 |
-
|
1556 |
-
$storage->set_option( self::OPTION_NAME, $data, true );
|
1557 |
}
|
1558 |
|
1559 |
/**
|
@@ -1562,10 +1633,14 @@
|
|
1562 |
* @return bool
|
1563 |
*/
|
1564 |
function __isset( $name ) {
|
1565 |
-
return (
|
1566 |
-
|
1567 |
-
|
1568 |
-
|
|
|
|
|
|
|
|
|
1569 |
}
|
1570 |
|
1571 |
/**
|
@@ -1574,13 +1649,11 @@
|
|
1574 |
* @return null|int|string
|
1575 |
*/
|
1576 |
function __get( $name ) {
|
1577 |
-
|
1578 |
-
$
|
1579 |
-
|
1580 |
-
|
1581 |
-
|
1582 |
-
$data[ $name ] :
|
1583 |
-
null;
|
1584 |
}
|
1585 |
|
1586 |
#endregion
|
22 |
* @property string $request_handler_id
|
23 |
* @property int $request_handler_timestamp
|
24 |
* @property int $request_handler_retries_count
|
25 |
+
* @property bool $hide_manual_resolution
|
26 |
+
* @property array $new_blog_install_map
|
27 |
*/
|
28 |
class FS_Clone_Manager {
|
29 |
/**
|
34 |
* @var FS_Option_Manager
|
35 |
*/
|
36 |
private $_network_storage;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
/**
|
38 |
* @var FS_Admin_Notices
|
39 |
*/
|
101 |
private function __construct() {
|
102 |
$this->_storage = FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true );
|
103 |
$this->_network_storage = FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true, true );
|
104 |
+
|
105 |
+
$this->maybe_migrate_options();
|
106 |
|
107 |
$this->_notices = FS_Admin_Notices::instance( 'global_clone_resolution_notices', '', '', true );
|
108 |
$this->_logger = FS_Logger::get_logger( WP_FS__SLUG . '_' . '_clone_manager', WP_FS__DEBUG_SDK, WP_FS__ECHO_DEBUG_SDK );
|
109 |
+
}
|
110 |
|
111 |
+
/**
|
112 |
+
* Migrate clone resolution options from 2.5.0 array-based structure, to a new flat structure.
|
113 |
+
*
|
114 |
+
* The reason this logic is not in a separate migration script is that we want to be 100% sure data is migrated before any execution of clone logic.
|
115 |
+
*
|
116 |
+
* @todo Delete this one in the future.
|
117 |
+
*/
|
118 |
+
private function maybe_migrate_options() {
|
119 |
+
$storages = array(
|
120 |
+
$this->_storage,
|
121 |
+
$this->_network_storage
|
122 |
);
|
123 |
|
124 |
+
foreach ( $storages as $storage ) {
|
125 |
+
$clone_data = $storage->get_option( self::OPTION_NAME );
|
126 |
+
if ( is_array( $clone_data ) && ! empty( $clone_data ) ) {
|
127 |
+
foreach ( $clone_data as $key => $val ) {
|
128 |
+
if ( ! is_null( $val ) ) {
|
129 |
+
$storage->set_option( $key, $val );
|
130 |
+
}
|
131 |
+
}
|
|
|
132 |
|
133 |
+
$storage->unset_option( self::OPTION_NAME, true );
|
134 |
+
}
|
|
|
|
|
|
|
135 |
}
|
136 |
}
|
137 |
|
145 |
add_action( 'admin_post_fs_clone_resolution', array( $this, '_handle_clone_resolution' ) );
|
146 |
}
|
147 |
|
148 |
+
if ( Freemius::is_ajax() ) {
|
149 |
+
Freemius::add_ajax_action_static( 'handle_clone_resolution', array( $this, '_clone_resolution_action_ajax_handler' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
} else {
|
151 |
+
if (
|
152 |
+
empty( $this->get_clone_identification_timestamp() ) &&
|
153 |
+
(
|
154 |
+
! fs_is_network_admin() ||
|
155 |
+
! ( $this->is_clone_resolution_options_notice_shown() || $this->is_temporary_duplicate_notice_shown() )
|
156 |
+
)
|
157 |
+
) {
|
158 |
+
$this->hide_clone_admin_notices();
|
159 |
} else if ( ! Freemius::is_cron() && ! Freemius::is_admin_post() ) {
|
160 |
$this->try_resolve_clone_automatically();
|
161 |
$this->maybe_show_clone_admin_notice();
|
172 |
* @return int|null
|
173 |
*/
|
174 |
function get_clone_identification_timestamp() {
|
175 |
+
return $this->get_option( 'clone_identification_timestamp', true );
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* @author Leo Fajardo (@leorw)
|
180 |
+
* @since 2.5.1
|
181 |
+
*
|
182 |
+
* @param string $sdk_last_version
|
183 |
+
*/
|
184 |
+
function maybe_update_clone_resolution_support_flag( $sdk_last_version ) {
|
185 |
+
if ( null !== $this->hide_manual_resolution ) {
|
186 |
+
return;
|
187 |
+
}
|
188 |
+
|
189 |
+
$this->hide_manual_resolution = (
|
190 |
+
! empty( $sdk_last_version ) &&
|
191 |
+
version_compare( $sdk_last_version, '2.5.0', '<' )
|
192 |
+
);
|
193 |
}
|
194 |
|
195 |
/**
|
230 |
return ( time() > ( $this->request_handler_timestamp + self::CLONE_RESOLUTION_MAX_EXECUTION_TIME ) );
|
231 |
}
|
232 |
|
233 |
+
/**
|
234 |
+
* @author Leo Fajardo (@leorw)
|
235 |
+
* @since 2.5.1
|
236 |
+
*
|
237 |
+
* @return bool
|
238 |
+
*/
|
239 |
+
function should_hide_manual_resolution() {
|
240 |
+
return ( true === $this->hide_manual_resolution );
|
241 |
+
}
|
242 |
+
|
243 |
/**
|
244 |
* Executes the clones handler logic if it should be executed, i.e., based on the return value of the should_handle_clones() method.
|
245 |
*
|
306 |
}
|
307 |
|
308 |
if ( ! $this->try_automatic_resolution() ) {
|
|
|
309 |
$this->clear_temporary_duplicate_notice_shown_timestamp();
|
310 |
}
|
311 |
}
|
376 |
* @return object
|
377 |
*/
|
378 |
private function find_other_install_by_url( Freemius $instance, $url ) {
|
379 |
+
$result = $instance->get_api_user_scope()->get( "/plugins/{$instance->get_id()}/installs.json?url=" . urlencode( $url ) . "&all=true", true );
|
380 |
|
381 |
$current_install = $instance->get_site();
|
382 |
|
647 |
return;
|
648 |
}
|
649 |
|
650 |
+
require_once WP_FS__DIR_INCLUDES . '/class-fs-lock.php';
|
651 |
+
|
652 |
+
$lock = new FS_Lock( self::OPTION_NAME . '_subsite' );
|
653 |
+
|
654 |
+
if ( ! $lock->try_lock(60) ) {
|
655 |
+
return;
|
656 |
+
}
|
657 |
+
|
658 |
$instance->switch_to_blog( $blog_id );
|
659 |
|
660 |
$current_url = untrailingslashit( Freemius::get_unfiltered_site_url( null, true ) );
|
704 |
|
705 |
// Remove the current site's information from the map to prevent handling it again.
|
706 |
$this->remove_new_blog_install_info_from_storage( $blog_id );
|
707 |
+
|
708 |
+
$lock->unlock();
|
709 |
}
|
710 |
|
711 |
/**
|
762 |
private function try_automatic_resolution() {
|
763 |
$this->_logger->entrance();
|
764 |
|
765 |
+
require_once WP_FS__DIR_INCLUDES . '/class-fs-lock.php';
|
766 |
+
|
767 |
+
$lock = new FS_Lock( self::OPTION_NAME );
|
768 |
+
|
769 |
+
/**
|
770 |
+
* Try to acquire lock for the next 60 sec based on the thread ID.
|
771 |
+
*/
|
772 |
+
if ( ! $lock->try_lock( 60 ) ) {
|
773 |
+
return false;
|
774 |
+
}
|
775 |
+
|
776 |
$current_url = untrailingslashit( Freemius::get_unfiltered_site_url( null, true ) );
|
777 |
$is_localhost = FS_Site::is_localhost_by_address( $current_url );
|
778 |
|
794 |
}
|
795 |
}
|
796 |
|
797 |
+
// Create a 1-day lock.
|
798 |
+
$lock->lock( WP_FS__TIME_24_HOURS_IN_SEC );
|
799 |
+
|
800 |
return ( ! $require_manual_resolution );
|
801 |
}
|
802 |
|
826 |
check_ajax_referer( Freemius::get_ajax_action_static( 'handle_clone_resolution' ), 'security' );
|
827 |
|
828 |
$clone_action = fs_request_get( 'clone_action' );
|
829 |
+
$blog_id = is_multisite() ?
|
830 |
+
fs_request_get( 'blog_id' ) :
|
831 |
+
0;
|
832 |
+
|
833 |
+
if ( is_multisite() && $blog_id == get_current_blog_id() ) {
|
834 |
+
$blog_id = 0;
|
835 |
+
}
|
836 |
|
837 |
if ( empty( $clone_action ) ) {
|
838 |
Freemius::shoot_ajax_failure( array(
|
841 |
) );
|
842 |
}
|
843 |
|
844 |
+
$result = $this->resolve_cloned_sites( $clone_action, array(), $blog_id );
|
845 |
|
846 |
Freemius::shoot_ajax_success( $result );
|
847 |
}
|
852 |
*
|
853 |
* @param string $clone_action
|
854 |
* @param Freemius[] $fs_instances
|
855 |
+
* @param int $blog_id
|
856 |
*
|
857 |
* @return array
|
858 |
*/
|
859 |
+
private function resolve_cloned_sites( $clone_action, $fs_instances = array(), $blog_id = 0 ) {
|
860 |
$this->_logger->entrance();
|
861 |
|
862 |
$result = array();
|
863 |
|
864 |
+
$instances_with_clone = array();
|
865 |
+
$instances_with_clone_count = 0;
|
866 |
+
$install_by_instance_id = array();
|
867 |
+
|
868 |
+
$instances = ( ! empty( $fs_instances ) ) ?
|
869 |
+
$fs_instances :
|
870 |
+
Freemius::_get_all_instances();
|
871 |
+
|
872 |
+
$should_switch_to_blog = ( $blog_id > 0 );
|
873 |
+
|
874 |
+
foreach ( $instances as $instance ) {
|
875 |
+
if ( $should_switch_to_blog ) {
|
876 |
+
$instance->switch_to_blog( $blog_id );
|
877 |
+
}
|
878 |
+
|
879 |
+
if ( $instance->is_registered() && $instance->is_clone() ) {
|
880 |
+
$instances_with_clone[] = $instance;
|
881 |
+
|
882 |
+
$instances_with_clone_count ++;
|
883 |
+
|
884 |
+
$install_by_instance_id[ $instance->get_id() ] = $instance->get_site();
|
885 |
+
}
|
886 |
+
}
|
887 |
+
|
888 |
if ( self::OPTION_TEMPORARY_DUPLICATE === $clone_action ) {
|
889 |
$this->store_temporary_duplicate_timestamp();
|
890 |
} else {
|
891 |
+
$redirect_url = '';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
892 |
|
893 |
+
foreach ( $instances_with_clone as $instance ) {
|
894 |
+
if ( $should_switch_to_blog ) {
|
895 |
+
$instance->switch_to_blog( $blog_id );
|
896 |
}
|
897 |
|
898 |
+
$has_error = false;
|
899 |
|
900 |
if ( self::OPTION_NEW_HOME === $clone_action ) {
|
901 |
$instance->sync_install( array( 'is_new_site' => true ), true );
|
902 |
+
|
903 |
+
if ( $instance->is_clone() ) {
|
904 |
+
$has_error = true;
|
905 |
+
}
|
906 |
} else {
|
907 |
$instance->_handle_long_term_duplicate();
|
908 |
|
909 |
if ( ! is_object( $instance->get_site() ) ) {
|
910 |
$has_error = true;
|
|
|
|
|
|
|
|
|
911 |
}
|
912 |
}
|
913 |
+
|
914 |
+
if ( $has_error && 1 === $instances_with_clone_count ) {
|
915 |
+
$redirect_url = $instance->get_activation_url();
|
916 |
+
}
|
917 |
}
|
918 |
|
919 |
+
$result = ( array( 'redirect_url' => $redirect_url ) );
|
920 |
+
}
|
921 |
+
|
922 |
+
foreach ( $instances_with_clone as $instance ) {
|
923 |
+
if ( $should_switch_to_blog ) {
|
924 |
+
$instance->switch_to_blog( $blog_id );
|
|
|
925 |
}
|
926 |
|
927 |
+
// No longer a clone, send an update.
|
928 |
+
if ( ! $instance->is_clone() ) {
|
929 |
+
$instance->send_clone_resolution_update(
|
930 |
+
$clone_action,
|
931 |
+
$install_by_instance_id[ $instance->get_id() ]
|
932 |
+
);
|
933 |
+
}
|
934 |
}
|
935 |
|
936 |
if ( 'temporary_duplicate_license_activation' !== $clone_action ) {
|
939 |
$this->remove_temporary_duplicate_notice();
|
940 |
}
|
941 |
|
942 |
+
if ( $should_switch_to_blog ) {
|
943 |
+
foreach ( $instances as $instance ) {
|
944 |
+
$instance->restore_current_blog();
|
945 |
+
}
|
946 |
+
}
|
947 |
+
|
948 |
return $result;
|
949 |
}
|
950 |
|
961 |
* @author Leo Fajardo (@leorw)
|
962 |
* @since 2.5.0
|
963 |
*/
|
964 |
+
function maybe_show_clone_admin_notice() {
|
965 |
$this->_logger->entrance();
|
966 |
|
967 |
if ( fs_is_network_admin() ) {
|
989 |
continue;
|
990 |
}
|
991 |
|
992 |
+
if ( ! $instance->is_clone( true ) ) {
|
993 |
continue;
|
994 |
}
|
995 |
|
1062 |
}
|
1063 |
|
1064 |
if ( ! $this->is_temporary_duplicate_notice_shown() ) {
|
1065 |
+
$last_time_temporary_duplicate_notice_shown = $this->temporary_duplicate_notice_shown_timestamp;
|
1066 |
$was_temporary_duplicate_notice_shown_before = is_numeric( $last_time_temporary_duplicate_notice_shown );
|
1067 |
|
1068 |
if ( $was_temporary_duplicate_notice_shown_before ) {
|
1250 |
$option_template,
|
1251 |
fs_esc_html_inline( 'Is %2$s a duplicate of %4$s?', 'duplicate-site-confirmation-message' ),
|
1252 |
fs_esc_html_inline( 'Yes, %2$s is a duplicate of %4$s for the purpose of testing, staging, or development.', 'duplicate-site-message' ),
|
1253 |
+
( $this->has_temporary_duplicate_mode_expired() ?
|
1254 |
sprintf(
|
1255 |
$button_template,
|
1256 |
'long_term_duplicate',
|
1260 |
$button_template,
|
1261 |
'temporary_duplicate',
|
1262 |
fs_text_inline( 'Duplicate Website', 'duplicate-site' )
|
1263 |
+
) )
|
1264 |
);
|
1265 |
|
1266 |
$migration_option = sprintf(
|
1296 |
)
|
1297 |
);
|
1298 |
|
1299 |
+
$blog_id = get_current_blog_id();
|
1300 |
+
|
1301 |
/**
|
1302 |
* %1$s - single product's title or product titles list.
|
1303 |
* %2$s - site's URL.
|
1306 |
*/
|
1307 |
$message = sprintf(
|
1308 |
$notice_header .
|
1309 |
+
'<div class="fs-clone-resolution-options-container" data-ajax-url="' . esc_attr( admin_url( 'admin-ajax.php?_fs_network_admin=false', 'relative' ) ) . '" data-blog-id="' . $blog_id . '">' .
|
1310 |
$duplicate_option .
|
1311 |
$migration_option .
|
1312 |
$new_website . '</div>' .
|
1341 |
false,
|
1342 |
array(
|
1343 |
'product_ids' => $product_ids,
|
1344 |
+
'blog_id' => $blog_id
|
1345 |
)
|
1346 |
);
|
1347 |
}
|
1449 |
*/
|
1450 |
function has_temporary_duplicate_mode_expired() {
|
1451 |
$temporary_duplicate_mode_start_timestamp = $this->was_temporary_duplicate_mode_selected() ?
|
1452 |
+
$this->get_option( 'temporary_duplicate_mode_selection_timestamp', true ) :
|
1453 |
$this->get_clone_identification_timestamp();
|
1454 |
|
1455 |
if ( ! is_numeric( $temporary_duplicate_mode_start_timestamp ) ) {
|
1465 |
* @return bool
|
1466 |
*/
|
1467 |
function was_temporary_duplicate_mode_selected() {
|
1468 |
+
return is_numeric( $this->temporary_duplicate_mode_selection_timestamp );
|
|
|
|
|
|
|
1469 |
}
|
1470 |
|
1471 |
/**
|
1517 |
* @return bool
|
1518 |
*/
|
1519 |
function is_temporary_duplicate_by_blog_id( $blog_id ) {
|
1520 |
+
$timestamp = $this->get_option( 'temporary_duplicate_mode_selection_timestamp', false, $blog_id );
|
|
|
|
|
|
|
|
|
|
|
1521 |
|
1522 |
+
return (
|
1523 |
+
is_numeric( $timestamp ) &&
|
1524 |
+
time() < ( $timestamp + self::TEMPORARY_DUPLICATE_PERIOD )
|
1525 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
1526 |
}
|
1527 |
|
1528 |
/**
|
1531 |
* @return int|null
|
1532 |
*/
|
1533 |
function last_time_temporary_duplicate_notice_was_shown() {
|
1534 |
+
return $this->temporary_duplicate_notice_shown_timestamp;
|
|
|
|
|
1535 |
}
|
1536 |
|
1537 |
/**
|
1538 |
* Clears the time that has been stored when the temporary duplicate notice was shown.
|
1539 |
*/
|
1540 |
function clear_temporary_duplicate_notice_shown_timestamp() {
|
1541 |
+
unset( $this->temporary_duplicate_notice_shown_timestamp );
|
1542 |
}
|
1543 |
|
1544 |
/**
|
1546 |
*
|
1547 |
* @param number[] $product_ids
|
1548 |
* @param string $message
|
|
|
1549 |
* @param string|null $plugin_title
|
1550 |
*/
|
1551 |
function add_temporary_duplicate_sticky_notice(
|
1588 |
return ( 'new_blog_install_map' === $key );
|
1589 |
}
|
1590 |
|
1591 |
+
/**
|
1592 |
+
* @param string $key
|
1593 |
+
* @param number|null $blog_id
|
1594 |
+
*
|
1595 |
+
* @return FS_Option_Manager
|
1596 |
+
*/
|
1597 |
+
private function get_storage( $key, $blog_id = null ) {
|
1598 |
+
if ( is_numeric( $blog_id ) ){
|
1599 |
+
return FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true, $blog_id );
|
1600 |
+
}
|
1601 |
+
|
1602 |
+
return $this->should_use_network_storage( $key ) ?
|
1603 |
+
$this->_network_storage :
|
1604 |
+
$this->_storage;
|
1605 |
+
}
|
1606 |
+
|
1607 |
+
/**
|
1608 |
+
* @param string $name
|
1609 |
+
* @param bool $flush
|
1610 |
+
* @param number|null $blog_id
|
1611 |
+
*
|
1612 |
+
* @return mixed
|
1613 |
+
*/
|
1614 |
+
private function get_option( $name, $flush = false, $blog_id = null ) {
|
1615 |
+
return $this->get_storage( $name, $blog_id )->get_option( $name, null, $flush );
|
1616 |
+
}
|
1617 |
+
|
1618 |
#--------------------------------------------------------------------------------
|
1619 |
#region Magic methods
|
1620 |
#--------------------------------------------------------------------------------
|
1624 |
* @param int|string $value
|
1625 |
*/
|
1626 |
function __set( $name, $value ) {
|
1627 |
+
$this->get_storage( $name )->set_option( $name, $value, true );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1628 |
}
|
1629 |
|
1630 |
/**
|
1633 |
* @return bool
|
1634 |
*/
|
1635 |
function __isset( $name ) {
|
1636 |
+
return $this->get_storage( $name )->has_option( $name, true );
|
1637 |
+
}
|
1638 |
+
|
1639 |
+
/**
|
1640 |
+
* @param string $name
|
1641 |
+
*/
|
1642 |
+
function __unset( $name ) {
|
1643 |
+
$this->get_storage( $name )->unset_option( $name, true );
|
1644 |
}
|
1645 |
|
1646 |
/**
|
1649 |
* @return null|int|string
|
1650 |
*/
|
1651 |
function __get( $name ) {
|
1652 |
+
return $this->get_option(
|
1653 |
+
$name,
|
1654 |
+
// Reload storage from DB when accessing request_handler_* options to avoid race conditions.
|
1655 |
+
fs_starts_with( $name, 'request_handler' )
|
1656 |
+
);
|
|
|
|
|
1657 |
}
|
1658 |
|
1659 |
#endregion
|
vendor/freemius/wordpress-sdk/includes/managers/class-fs-option-manager.php
CHANGED
@@ -243,10 +243,15 @@
|
|
243 |
* @since 1.0.6
|
244 |
*
|
245 |
* @param string $option
|
|
|
246 |
*
|
247 |
* @return bool
|
248 |
*/
|
249 |
-
function has_option( $option ) {
|
|
|
|
|
|
|
|
|
250 |
return array_key_exists( $option, $this->_options );
|
251 |
}
|
252 |
|
@@ -256,14 +261,15 @@
|
|
256 |
*
|
257 |
* @param string $option
|
258 |
* @param mixed $default
|
|
|
259 |
*
|
260 |
* @return mixed
|
261 |
*/
|
262 |
-
function get_option( $option, $default = null ) {
|
263 |
$this->_logger->entrance( 'option = ' . $option );
|
264 |
|
265 |
-
if ( ! $this->is_loaded() ) {
|
266 |
-
$this->load();
|
267 |
}
|
268 |
|
269 |
if ( is_array( $this->_options ) ) {
|
243 |
* @since 1.0.6
|
244 |
*
|
245 |
* @param string $option
|
246 |
+
* @param bool $flush
|
247 |
*
|
248 |
* @return bool
|
249 |
*/
|
250 |
+
function has_option( $option, $flush = false ) {
|
251 |
+
if ( ! $this->is_loaded() || $flush ) {
|
252 |
+
$this->load( $flush );
|
253 |
+
}
|
254 |
+
|
255 |
return array_key_exists( $option, $this->_options );
|
256 |
}
|
257 |
|
261 |
*
|
262 |
* @param string $option
|
263 |
* @param mixed $default
|
264 |
+
* @param bool $flush
|
265 |
*
|
266 |
* @return mixed
|
267 |
*/
|
268 |
+
function get_option( $option, $default = null, $flush = false ) {
|
269 |
$this->_logger->entrance( 'option = ' . $option );
|
270 |
|
271 |
+
if ( ! $this->is_loaded() || $flush ) {
|
272 |
+
$this->load( $flush );
|
273 |
}
|
274 |
|
275 |
if ( is_array( $this->_options ) ) {
|
vendor/freemius/wordpress-sdk/includes/managers/class-fs-permission-manager.php
ADDED
@@ -0,0 +1,698 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Freemius
|
4 |
+
* @copyright Copyright (c) 2022, Freemius, Inc.
|
5 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
+
* @since 2.5.1
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* This class is responsible for managing the user permissions.
|
15 |
+
*
|
16 |
+
* @author Vova Feldman (@svovaf)
|
17 |
+
* @since 2.5.1
|
18 |
+
*/
|
19 |
+
class FS_Permission_Manager {
|
20 |
+
/**
|
21 |
+
* @var Freemius
|
22 |
+
*/
|
23 |
+
private $_fs;
|
24 |
+
/**
|
25 |
+
* @var FS_Storage
|
26 |
+
*/
|
27 |
+
private $_storage;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @var array<number,self>
|
31 |
+
*/
|
32 |
+
private static $_instances = array();
|
33 |
+
|
34 |
+
const PERMISSION_USER = 'user';
|
35 |
+
const PERMISSION_SITE = 'site';
|
36 |
+
const PERMISSION_EVENTS = 'events';
|
37 |
+
const PERMISSION_ESSENTIALS = 'essentials';
|
38 |
+
const PERMISSION_DIAGNOSTIC = 'diagnostic';
|
39 |
+
const PERMISSION_EXTENSIONS = 'extensions';
|
40 |
+
const PERMISSION_NEWSLETTER = 'newsletter';
|
41 |
+
|
42 |
+
/**
|
43 |
+
* @param Freemius $fs
|
44 |
+
*
|
45 |
+
* @return self
|
46 |
+
*/
|
47 |
+
static function instance( Freemius $fs ) {
|
48 |
+
$id = $fs->get_id();
|
49 |
+
|
50 |
+
if ( ! isset( self::$_instances[ $id ] ) ) {
|
51 |
+
self::$_instances[ $id ] = new self( $fs );
|
52 |
+
}
|
53 |
+
|
54 |
+
return self::$_instances[ $id ];
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @param Freemius $fs
|
59 |
+
*/
|
60 |
+
protected function __construct( Freemius $fs ) {
|
61 |
+
$this->_fs = $fs;
|
62 |
+
$this->_storage = FS_Storage::instance( $fs->get_module_type(), $fs->get_slug() );
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @return string[]
|
67 |
+
*/
|
68 |
+
static function get_all_permission_ids() {
|
69 |
+
return array(
|
70 |
+
self::PERMISSION_USER,
|
71 |
+
self::PERMISSION_SITE,
|
72 |
+
self::PERMISSION_EVENTS,
|
73 |
+
self::PERMISSION_ESSENTIALS,
|
74 |
+
self::PERMISSION_DIAGNOSTIC,
|
75 |
+
self::PERMISSION_EXTENSIONS,
|
76 |
+
self::PERMISSION_NEWSLETTER,
|
77 |
+
);
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* @return string[]
|
82 |
+
*/
|
83 |
+
static function get_api_managed_permission_ids() {
|
84 |
+
return array(
|
85 |
+
self::PERMISSION_USER,
|
86 |
+
self::PERMISSION_SITE,
|
87 |
+
self::PERMISSION_EXTENSIONS,
|
88 |
+
);
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* @param string $permission
|
93 |
+
*
|
94 |
+
* @return bool
|
95 |
+
*/
|
96 |
+
static function is_supported_permission( $permission ) {
|
97 |
+
return in_array( $permission, self::get_all_permission_ids() );
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* @param bool $is_license_activation
|
102 |
+
* @param array[] $extra_permissions
|
103 |
+
*
|
104 |
+
* @return array[]
|
105 |
+
*/
|
106 |
+
function get_permissions( $is_license_activation, array $extra_permissions = array() ) {
|
107 |
+
return $is_license_activation ?
|
108 |
+
$this->get_license_activation_permissions( $extra_permissions ) :
|
109 |
+
$this->get_opt_in_permissions( $extra_permissions );
|
110 |
+
}
|
111 |
+
|
112 |
+
#--------------------------------------------------------------------------------
|
113 |
+
#region Opt-In Permissions
|
114 |
+
#--------------------------------------------------------------------------------
|
115 |
+
|
116 |
+
/**
|
117 |
+
* @param array[] $extra_permissions
|
118 |
+
*
|
119 |
+
* @return array[]
|
120 |
+
*/
|
121 |
+
function get_opt_in_permissions(
|
122 |
+
array $extra_permissions = array(),
|
123 |
+
$load_default_from_storage = false,
|
124 |
+
$is_optional = false
|
125 |
+
) {
|
126 |
+
$permissions = array_merge(
|
127 |
+
$this->get_opt_in_required_permissions( $load_default_from_storage ),
|
128 |
+
$this->get_opt_in_optional_permissions( $load_default_from_storage, $is_optional ),
|
129 |
+
$extra_permissions
|
130 |
+
);
|
131 |
+
|
132 |
+
return $this->get_sorted_permissions_by_priority( $permissions );
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* @param bool $load_default_from_storage
|
137 |
+
*
|
138 |
+
* @return array[]
|
139 |
+
*/
|
140 |
+
function get_opt_in_required_permissions( $load_default_from_storage = false ) {
|
141 |
+
return array( $this->get_user_permission( $load_default_from_storage ) );
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* @param bool $load_default_from_storage
|
146 |
+
* @param bool $is_optional
|
147 |
+
*
|
148 |
+
* @return array[]
|
149 |
+
*/
|
150 |
+
function get_opt_in_optional_permissions(
|
151 |
+
$load_default_from_storage = false,
|
152 |
+
$is_optional = false
|
153 |
+
) {
|
154 |
+
return array_merge(
|
155 |
+
$this->get_opt_in_diagnostic_permissions( $load_default_from_storage, $is_optional ),
|
156 |
+
array( $this->get_extensions_permission(
|
157 |
+
false,
|
158 |
+
false,
|
159 |
+
$load_default_from_storage
|
160 |
+
) )
|
161 |
+
);
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* @param bool $load_default_from_storage
|
166 |
+
* @param bool $is_optional
|
167 |
+
*
|
168 |
+
* @return array[]
|
169 |
+
*/
|
170 |
+
function get_opt_in_diagnostic_permissions(
|
171 |
+
$load_default_from_storage = false,
|
172 |
+
$is_optional = false
|
173 |
+
) {
|
174 |
+
// Alias.
|
175 |
+
$fs = $this->_fs;
|
176 |
+
|
177 |
+
$permissions = array();
|
178 |
+
|
179 |
+
$permissions[] = $this->get_permission(
|
180 |
+
self::PERMISSION_SITE,
|
181 |
+
'admin-links',
|
182 |
+
$fs->get_text_inline( 'View Basic Website Info', 'permissions-site' ),
|
183 |
+
$fs->get_text_inline( 'Homepage URL & title, WP & PHP versions, and site language', 'permissions-site_desc' ),
|
184 |
+
sprintf(
|
185 |
+
/* translators: %s: 'Plugin' or 'Theme' */
|
186 |
+
$fs->get_text_inline( 'To provide additional functionality that\'s relevant to your website, avoid WordPress or PHP version incompatibilities that can break your website, and recognize which languages & regions the %s should be translated and tailored to.', 'permissions-site_tooltip' ),
|
187 |
+
$fs->get_module_label( true )
|
188 |
+
),
|
189 |
+
10,
|
190 |
+
$is_optional,
|
191 |
+
true,
|
192 |
+
$load_default_from_storage
|
193 |
+
);
|
194 |
+
|
195 |
+
$permissions[] = $this->get_permission(
|
196 |
+
self::PERMISSION_EVENTS,
|
197 |
+
'admin-' . ( $fs->is_plugin() ? 'plugins' : 'appearance' ),
|
198 |
+
sprintf( $fs->get_text_inline( 'View Basic %s Info', 'permissions-events' ), $fs->get_module_label() ),
|
199 |
+
sprintf(
|
200 |
+
/* translators: %s: 'Plugin' or 'Theme' */
|
201 |
+
$fs->get_text_inline( 'Current %s & SDK versions, and if active or uninstalled', 'permissions-events_desc' ),
|
202 |
+
$fs->get_module_label( true )
|
203 |
+
),
|
204 |
+
'',
|
205 |
+
20,
|
206 |
+
$is_optional,
|
207 |
+
true,
|
208 |
+
$load_default_from_storage
|
209 |
+
);
|
210 |
+
|
211 |
+
return $permissions;
|
212 |
+
}
|
213 |
+
|
214 |
+
#endregion
|
215 |
+
|
216 |
+
#--------------------------------------------------------------------------------
|
217 |
+
#region License Activation Permissions
|
218 |
+
#--------------------------------------------------------------------------------
|
219 |
+
|
220 |
+
/**
|
221 |
+
* @param array[] $extra_permissions
|
222 |
+
*
|
223 |
+
* @return array[]
|
224 |
+
*/
|
225 |
+
function get_license_activation_permissions(
|
226 |
+
array $extra_permissions = array(),
|
227 |
+
$include_optional_label = true
|
228 |
+
) {
|
229 |
+
$permissions = array_merge(
|
230 |
+
$this->get_license_required_permissions(),
|
231 |
+
$this->get_license_optional_permissions( $include_optional_label ),
|
232 |
+
$extra_permissions
|
233 |
+
);
|
234 |
+
|
235 |
+
return $this->get_sorted_permissions_by_priority( $permissions );
|
236 |
+
}
|
237 |
+
|
238 |
+
/**
|
239 |
+
* @param bool $load_default_from_storage
|
240 |
+
*
|
241 |
+
* @return array[]
|
242 |
+
*/
|
243 |
+
function get_license_required_permissions( $load_default_from_storage = false ) {
|
244 |
+
// Alias.
|
245 |
+
$fs = $this->_fs;
|
246 |
+
|
247 |
+
$permissions = array();
|
248 |
+
|
249 |
+
$permissions[] = $this->get_permission(
|
250 |
+
self::PERMISSION_ESSENTIALS,
|
251 |
+
'admin-links',
|
252 |
+
$fs->get_text_inline( 'View License Essentials', 'permissions-essentials' ),
|
253 |
+
$fs->get_text_inline(
|
254 |
+
sprintf(
|
255 |
+
/* translators: %s: 'Plugin' or 'Theme' */
|
256 |
+
'Homepage URL, %s version, SDK version',
|
257 |
+
$fs->get_module_label()
|
258 |
+
),
|
259 |
+
'permissions-essentials_desc'
|
260 |
+
),
|
261 |
+
sprintf(
|
262 |
+
/* translators: %s: 'Plugin' or 'Theme' */
|
263 |
+
$fs->get_text_inline( 'To let you manage & control where the license is activated and ensure %s security & feature updates are only delivered to websites you authorize.', 'permissions-essentials_tooltip' ),
|
264 |
+
$fs->get_module_label( true )
|
265 |
+
),
|
266 |
+
10,
|
267 |
+
false,
|
268 |
+
true,
|
269 |
+
$load_default_from_storage
|
270 |
+
);
|
271 |
+
|
272 |
+
$permissions[] = $this->get_permission(
|
273 |
+
self::PERMISSION_EVENTS,
|
274 |
+
'admin-' . ( $fs->is_plugin() ? 'plugins' : 'appearance' ),
|
275 |
+
sprintf( $fs->get_text_inline( 'View %s State', 'permissions-events' ), $fs->get_module_label() ),
|
276 |
+
sprintf(
|
277 |
+
/* translators: %s: 'Plugin' or 'Theme' */
|
278 |
+
$fs->get_text_inline( 'Is active, deactivated, or uninstalled', 'permissions-events_desc-paid' ),
|
279 |
+
$fs->get_module_label( true )
|
280 |
+
),
|
281 |
+
sprintf( $fs->get_text_inline( 'So you can reuse the license when the %s is no longer active.', 'permissions-events_tooltip' ), $fs->get_module_label( true ) ),
|
282 |
+
20,
|
283 |
+
false,
|
284 |
+
true,
|
285 |
+
$load_default_from_storage
|
286 |
+
);
|
287 |
+
|
288 |
+
return $permissions;
|
289 |
+
}
|
290 |
+
|
291 |
+
/**
|
292 |
+
* @return array[]
|
293 |
+
*/
|
294 |
+
function get_license_optional_permissions(
|
295 |
+
$include_optional_label = false,
|
296 |
+
$load_default_from_storage = false
|
297 |
+
) {
|
298 |
+
return array(
|
299 |
+
$this->get_diagnostic_permission( $include_optional_label, $load_default_from_storage ),
|
300 |
+
$this->get_extensions_permission( true, $include_optional_label, $load_default_from_storage ),
|
301 |
+
);
|
302 |
+
}
|
303 |
+
|
304 |
+
/**
|
305 |
+
* @param bool $include_optional_label
|
306 |
+
* @param bool $load_default_from_storage
|
307 |
+
*
|
308 |
+
* @return array
|
309 |
+
*/
|
310 |
+
function get_diagnostic_permission(
|
311 |
+
$include_optional_label = false,
|
312 |
+
$load_default_from_storage = false
|
313 |
+
) {
|
314 |
+
return $this->get_permission(
|
315 |
+
self::PERMISSION_DIAGNOSTIC,
|
316 |
+
'wordpress-alt',
|
317 |
+
$this->_fs->get_text_inline( 'View Diagnostic Info', 'permissions-diagnostic' ) . ( $include_optional_label ? ' (' . $this->_fs->get_text_inline( 'optional' ) . ')' : '' ),
|
318 |
+
$this->_fs->get_text_inline( 'WordPress & PHP versions, site language & title', 'permissions-diagnostic_desc' ),
|
319 |
+
sprintf(
|
320 |
+
/* translators: %s: 'Plugin' or 'Theme' */
|
321 |
+
$this->_fs->get_text_inline( 'To avoid breaking your website due to WordPress or PHP version incompatibilities, and recognize which languages & regions the %s should be translated and tailored to.', 'permissions-diagnostic_tooltip' ),
|
322 |
+
$this->_fs->get_module_label( true )
|
323 |
+
),
|
324 |
+
25,
|
325 |
+
true,
|
326 |
+
true,
|
327 |
+
$load_default_from_storage
|
328 |
+
);
|
329 |
+
}
|
330 |
+
|
331 |
+
#endregion
|
332 |
+
|
333 |
+
#--------------------------------------------------------------------------------
|
334 |
+
#region Common Permissions
|
335 |
+
#--------------------------------------------------------------------------------
|
336 |
+
|
337 |
+
/**
|
338 |
+
* @param bool $is_license_activation
|
339 |
+
* @param bool $include_optional_label
|
340 |
+
* @param bool $load_default_from_storage
|
341 |
+
*
|
342 |
+
* @return array
|
343 |
+
*/
|
344 |
+
function get_extensions_permission(
|
345 |
+
$is_license_activation,
|
346 |
+
$include_optional_label = false,
|
347 |
+
$load_default_from_storage = false
|
348 |
+
) {
|
349 |
+
$is_on_by_default = ! $is_license_activation;
|
350 |
+
|
351 |
+
return $this->get_permission(
|
352 |
+
self::PERMISSION_EXTENSIONS,
|
353 |
+
'block-default',
|
354 |
+
$this->_fs->get_text_inline( 'View Plugins & Themes List', 'permissions-extensions' ) . ( $is_license_activation ? ( $include_optional_label ? ' (' . $this->_fs->get_text_inline( 'optional' ) . ')' : '' ) : '' ),
|
355 |
+
$this->_fs->get_text_inline( 'Names, slugs, versions, and if active or not', 'permissions-extensions_desc' ),
|
356 |
+
$this->_fs->get_text_inline( 'To ensure compatibility and avoid conflicts with your installed plugins and themes.', 'permissions-events_tooltip' ),
|
357 |
+
25,
|
358 |
+
true,
|
359 |
+
$is_on_by_default,
|
360 |
+
$load_default_from_storage
|
361 |
+
);
|
362 |
+
}
|
363 |
+
|
364 |
+
/**
|
365 |
+
* @param bool $load_default_from_storage
|
366 |
+
*
|
367 |
+
* @return array
|
368 |
+
*/
|
369 |
+
function get_user_permission( $load_default_from_storage = false ) {
|
370 |
+
return $this->get_permission(
|
371 |
+
self::PERMISSION_USER,
|
372 |
+
'admin-users',
|
373 |
+
$this->_fs->get_text_inline( 'View Basic Profile Info', 'permissions-profile' ),
|
374 |
+
$this->_fs->get_text_inline( 'Your WordPress user\'s: first & last name, and email address', 'permissions-profile_desc' ),
|
375 |
+
$this->_fs->get_text_inline( 'Never miss important updates, get security warnings before they become public knowledge, and receive notifications about special offers and awesome new features.', 'permissions-profile_tooltip' ),
|
376 |
+
5,
|
377 |
+
false,
|
378 |
+
true,
|
379 |
+
$load_default_from_storage
|
380 |
+
);
|
381 |
+
}
|
382 |
+
|
383 |
+
#endregion
|
384 |
+
|
385 |
+
#--------------------------------------------------------------------------------
|
386 |
+
#region Optional Permissions
|
387 |
+
#--------------------------------------------------------------------------------
|
388 |
+
|
389 |
+
/**
|
390 |
+
* @return array[]
|
391 |
+
*/
|
392 |
+
function get_newsletter_permission() {
|
393 |
+
return $this->get_permission(
|
394 |
+
self::PERMISSION_NEWSLETTER,
|
395 |
+
'email-alt',
|
396 |
+
$this->_fs->get_text_inline( 'Newsletter', 'permissions-newsletter' ),
|
397 |
+
$this->_fs->get_text_inline( 'Updates, announcements, marketing, no spam', 'permissions-newsletter_desc' ),
|
398 |
+
'',
|
399 |
+
15
|
400 |
+
);
|
401 |
+
}
|
402 |
+
|
403 |
+
#endregion
|
404 |
+
|
405 |
+
#--------------------------------------------------------------------------------
|
406 |
+
#region Permissions Storage
|
407 |
+
#--------------------------------------------------------------------------------
|
408 |
+
|
409 |
+
/**
|
410 |
+
* @param int|null $blog_id
|
411 |
+
*
|
412 |
+
* @return bool
|
413 |
+
*/
|
414 |
+
function is_extensions_tracking_allowed( $blog_id = null ) {
|
415 |
+
return $this->is_permission_allowed( self::PERMISSION_EXTENSIONS, ! $this->_fs->is_premium(), $blog_id );
|
416 |
+
}
|
417 |
+
|
418 |
+
/**
|
419 |
+
* @param int|null $blog_id
|
420 |
+
*
|
421 |
+
* @return bool
|
422 |
+
*/
|
423 |
+
function is_essentials_tracking_allowed( $blog_id = null ) {
|
424 |
+
return $this->is_permission_allowed( self::PERMISSION_ESSENTIALS, true, $blog_id );
|
425 |
+
}
|
426 |
+
|
427 |
+
/**
|
428 |
+
* @param bool $default
|
429 |
+
*
|
430 |
+
* @return bool
|
431 |
+
*/
|
432 |
+
function is_diagnostic_tracking_allowed( $default = true ) {
|
433 |
+
return $this->_fs->is_premium() ?
|
434 |
+
$this->is_permission_allowed( self::PERMISSION_DIAGNOSTIC, $default ) :
|
435 |
+
$this->is_permission_allowed( self::PERMISSION_SITE, $default );
|
436 |
+
}
|
437 |
+
|
438 |
+
/**
|
439 |
+
* @param int|null $blog_id
|
440 |
+
*
|
441 |
+
* @return bool
|
442 |
+
*/
|
443 |
+
function is_homepage_url_tracking_allowed( $blog_id = null ) {
|
444 |
+
return $this->is_permission_allowed( $this->get_site_permission_name(), true, $blog_id );
|
445 |
+
}
|
446 |
+
|
447 |
+
/**
|
448 |
+
* @param int|null $blog_id
|
449 |
+
*
|
450 |
+
* @return bool
|
451 |
+
*/
|
452 |
+
function update_site_tracking( $is_enabled, $blog_id = null, $only_if_not_set = false ) {
|
453 |
+
$permissions = $this->get_site_tracking_permission_names();
|
454 |
+
|
455 |
+
$result = true;
|
456 |
+
foreach ( $permissions as $permission ) {
|
457 |
+
if ( ! $only_if_not_set || ! $this->is_permission_set( $permission, $blog_id ) ) {
|
458 |
+
$result = ( $result && $this->update_permission_tracking_flag( $permission, $is_enabled, $blog_id ) );
|
459 |
+
}
|
460 |
+
}
|
461 |
+
|
462 |
+
return $result;
|
463 |
+
}
|
464 |
+
|
465 |
+
/**
|
466 |
+
* @param string $permission
|
467 |
+
* @param bool $default
|
468 |
+
* @param int|null $blog_id
|
469 |
+
*
|
470 |
+
* @return bool
|
471 |
+
*/
|
472 |
+
function is_permission_allowed( $permission, $default = false, $blog_id = null ) {
|
473 |
+
if ( ! self::is_supported_permission( $permission ) ) {
|
474 |
+
return $default;
|
475 |
+
}
|
476 |
+
|
477 |
+
return $this->is_permission( $permission, true, $blog_id );
|
478 |
+
}
|
479 |
+
|
480 |
+
/**
|
481 |
+
* @param string $permission
|
482 |
+
* @param bool $is_allowed
|
483 |
+
* @param int|null $blog_id
|
484 |
+
*
|
485 |
+
* @return bool
|
486 |
+
*/
|
487 |
+
function is_permission( $permission, $is_allowed, $blog_id = null ) {
|
488 |
+
if ( ! self::is_supported_permission( $permission ) ) {
|
489 |
+
return false;
|
490 |
+
}
|
491 |
+
|
492 |
+
$tag = "is_{$permission}_tracking_allowed";
|
493 |
+
|
494 |
+
return ( $is_allowed === $this->_fs->apply_filters(
|
495 |
+
$tag,
|
496 |
+
$this->_storage->get(
|
497 |
+
$tag,
|
498 |
+
$this->get_permission_default( $permission ),
|
499 |
+
$blog_id,
|
500 |
+
FS_Storage::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED
|
501 |
+
)
|
502 |
+
) );
|
503 |
+
}
|
504 |
+
|
505 |
+
/**
|
506 |
+
* @param string $permission
|
507 |
+
* @param int|null $blog_id
|
508 |
+
*
|
509 |
+
* @return bool
|
510 |
+
*/
|
511 |
+
function is_permission_set( $permission, $blog_id = null ) {
|
512 |
+
$tag = "is_{$permission}_tracking_allowed";
|
513 |
+
|
514 |
+
$permission = $this->_storage->get(
|
515 |
+
$tag,
|
516 |
+
null,
|
517 |
+
$blog_id,
|
518 |
+
FS_Storage::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED
|
519 |
+
);
|
520 |
+
|
521 |
+
return is_bool( $permission );
|
522 |
+
}
|
523 |
+
|
524 |
+
/**
|
525 |
+
* @param string[] $permissions
|
526 |
+
* @param bool $is_allowed
|
527 |
+
*
|
528 |
+
* @return bool `true` if all given permissions are in sync with `$is_allowed`.
|
529 |
+
*/
|
530 |
+
function are_permissions( $permissions, $is_allowed, $blog_id = null ) {
|
531 |
+
foreach ( $permissions as $permission ) {
|
532 |
+
if ( ! $this->is_permission( $permission, $is_allowed, $blog_id ) ) {
|
533 |
+
return false;
|
534 |
+
}
|
535 |
+
}
|
536 |
+
|
537 |
+
return true;
|
538 |
+
}
|
539 |
+
|
540 |
+
/**
|
541 |
+
* @param string $permission
|
542 |
+
* @param bool $is_enabled
|
543 |
+
* @param int|null $blog_id
|
544 |
+
*
|
545 |
+
* @return bool `false` if permission not supported or `$is_enabled` is not a boolean.
|
546 |
+
*/
|
547 |
+
function update_permission_tracking_flag( $permission, $is_enabled, $blog_id = null ) {
|
548 |
+
if ( is_bool( $is_enabled ) && self::is_supported_permission( $permission ) ) {
|
549 |
+
$this->_storage->store(
|
550 |
+
"is_{$permission}_tracking_allowed",
|
551 |
+
$is_enabled,
|
552 |
+
$blog_id,
|
553 |
+
FS_Storage::OPTION_LEVEL_NETWORK_ACTIVATED_NOT_DELEGATED
|
554 |
+
);
|
555 |
+
|
556 |
+
return true;
|
557 |
+
}
|
558 |
+
|
559 |
+
return false;
|
560 |
+
}
|
561 |
+
|
562 |
+
/**
|
563 |
+
* @param array<string,bool> $permissions
|
564 |
+
*/
|
565 |
+
function update_permissions_tracking_flag( $permissions ) {
|
566 |
+
foreach ( $permissions as $permission => $is_enabled ) {
|
567 |
+
$this->update_permission_tracking_flag( $permission, $is_enabled );
|
568 |
+
}
|
569 |
+
}
|
570 |
+
|
571 |
+
#endregion
|
572 |
+
|
573 |
+
|
574 |
+
/**
|
575 |
+
* @param string $permission
|
576 |
+
*
|
577 |
+
* @return bool
|
578 |
+
*/
|
579 |
+
function get_permission_default( $permission ) {
|
580 |
+
if (
|
581 |
+
$this->_fs->is_premium() &&
|
582 |
+
self::PERMISSION_EXTENSIONS === $permission
|
583 |
+
) {
|
584 |
+
return false;
|
585 |
+
}
|
586 |
+
|
587 |
+
// All permissions except for the extensions in paid version are on by default when the user opts in to usage tracking.
|
588 |
+
return true;
|
589 |
+
}
|
590 |
+
|
591 |
+
/**
|
592 |
+
* @return string
|
593 |
+
*/
|
594 |
+
function get_site_permission_name() {
|
595 |
+
return $this->_fs->is_premium() ?
|
596 |
+
self::PERMISSION_ESSENTIALS :
|
597 |
+
self::PERMISSION_SITE;
|
598 |
+
}
|
599 |
+
|
600 |
+
/**
|
601 |
+
* @return string[]
|
602 |
+
*/
|
603 |
+
function get_site_tracking_permission_names() {
|
604 |
+
return $this->_fs->is_premium() ?
|
605 |
+
array(
|
606 |
+
FS_Permission_Manager::PERMISSION_ESSENTIALS,
|
607 |
+
FS_Permission_Manager::PERMISSION_EVENTS,
|
608 |
+
) :
|
609 |
+
array( FS_Permission_Manager::PERMISSION_SITE );
|
610 |
+
}
|
611 |
+
|
612 |
+
#--------------------------------------------------------------------------------
|
613 |
+
#region Rendering
|
614 |
+
#--------------------------------------------------------------------------------
|
615 |
+
|
616 |
+
/**
|
617 |
+
* @param array $permission
|
618 |
+
*/
|
619 |
+
function render_permission( array $permission ) {
|
620 |
+
fs_require_template( 'connect/permission.php', $permission );
|
621 |
+
}
|
622 |
+
|
623 |
+
/**
|
624 |
+
* @param array $permissions_group
|
625 |
+
*/
|
626 |
+
function render_permissions_group( array $permissions_group ) {
|
627 |
+
$permissions_group[ 'fs' ] = $this->_fs;
|
628 |
+
|
629 |
+
fs_require_template( 'connect/permissions-group.php', $permissions_group );
|
630 |
+
}
|
631 |
+
|
632 |
+
function require_permissions_js() {
|
633 |
+
fs_require_once_template( 'js/permissions.php', $params );
|
634 |
+
}
|
635 |
+
|
636 |
+
#endregion
|
637 |
+
|
638 |
+
#--------------------------------------------------------------------------------
|
639 |
+
#region Helper Methods
|
640 |
+
#--------------------------------------------------------------------------------
|
641 |
+
|
642 |
+
/**
|
643 |
+
* @param string $id
|
644 |
+
* @param string $dashicon
|
645 |
+
* @param string $label
|
646 |
+
* @param string $desc
|
647 |
+
* @param string $tooltip
|
648 |
+
* @param int $priority
|
649 |
+
* @param bool $is_optional
|
650 |
+
* @param bool $is_on_by_default
|
651 |
+
* @param bool $load_from_storage
|
652 |
+
*
|
653 |
+
* @return array
|
654 |
+
*/
|
655 |
+
private function get_permission(
|
656 |
+
$id,
|
657 |
+
$dashicon,
|
658 |
+
$label,
|
659 |
+
$desc,
|
660 |
+
$tooltip = '',
|
661 |
+
$priority = 10,
|
662 |
+
$is_optional = false,
|
663 |
+
$is_on_by_default = true,
|
664 |
+
$load_from_storage = false
|
665 |
+
) {
|
666 |
+
$is_on = $load_from_storage ?
|
667 |
+
$this->is_permission_allowed( $id, $is_on_by_default ) :
|
668 |
+
$is_on_by_default;
|
669 |
+
|
670 |
+
return array(
|
671 |
+
'id' => $id,
|
672 |
+
'icon-class' => $this->_fs->apply_filters( "permission_{$id}_icon", "dashicons dashicons-{$dashicon}" ),
|
673 |
+
'label' => $this->_fs->apply_filters( "permission_{$id}_label", $label ),
|
674 |
+
'tooltip' => $this->_fs->apply_filters( "permission_{$id}_tooltip", $tooltip ),
|
675 |
+
'desc' => $this->_fs->apply_filters( "permission_{$id}_desc", $desc ),
|
676 |
+
'priority' => $this->_fs->apply_filters( "permission_{$id}_priority", $priority ),
|
677 |
+
'optional' => $is_optional,
|
678 |
+
'default' => $this->_fs->apply_filters( "permission_{$id}_default", $is_on ),
|
679 |
+
);
|
680 |
+
}
|
681 |
+
|
682 |
+
/**
|
683 |
+
* @param array $permissions
|
684 |
+
*
|
685 |
+
* @return array[]
|
686 |
+
*/
|
687 |
+
private function get_sorted_permissions_by_priority( array $permissions ) {
|
688 |
+
// Allow filtering of the permissions list.
|
689 |
+
$permissions = $this->_fs->apply_filters( 'permission_list', $permissions );
|
690 |
+
|
691 |
+
// Sort by priority.
|
692 |
+
uasort( $permissions, 'fs_sort_by_priority' );
|
693 |
+
|
694 |
+
return $permissions;
|
695 |
+
}
|
696 |
+
|
697 |
+
#endregion
|
698 |
+
}
|
vendor/freemius/wordpress-sdk/includes/sdk/FreemiusBase.php
CHANGED
@@ -46,174 +46,172 @@
|
|
46 |
require_once FS_SDK__EXCEPTIONS_PATH . $e . '.php';
|
47 |
}
|
48 |
|
49 |
-
if ( class_exists( 'Freemius_Api_Base' ) ) {
|
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 |
-
}
|
46 |
require_once FS_SDK__EXCEPTIONS_PATH . $e . '.php';
|
47 |
}
|
48 |
|
49 |
+
if ( ! class_exists( 'Freemius_Api_Base' ) ) {
|
50 |
+
abstract class Freemius_Api_Base {
|
51 |
+
const VERSION = '1.0.4';
|
52 |
+
const FORMAT = 'json';
|
53 |
+
|
54 |
+
protected $_id;
|
55 |
+
protected $_public;
|
56 |
+
protected $_secret;
|
57 |
+
protected $_scope;
|
58 |
+
protected $_isSandbox;
|
59 |
+
|
60 |
+
/**
|
61 |
+
* @param string $pScope 'app', 'developer', 'plugin', 'user' or 'install'.
|
62 |
+
* @param number $pID Element's id.
|
63 |
+
* @param string $pPublic Public key.
|
64 |
+
* @param string $pSecret Element's secret key.
|
65 |
+
* @param bool $pIsSandbox Whether or not to run API in sandbox mode.
|
66 |
+
*/
|
67 |
+
public function Init( $pScope, $pID, $pPublic, $pSecret, $pIsSandbox = false ) {
|
68 |
+
$this->_id = $pID;
|
69 |
+
$this->_public = $pPublic;
|
70 |
+
$this->_secret = $pSecret;
|
71 |
+
$this->_scope = $pScope;
|
72 |
+
$this->_isSandbox = $pIsSandbox;
|
73 |
+
}
|
74 |
+
|
75 |
+
public function IsSandbox() {
|
76 |
+
return $this->_isSandbox;
|
77 |
+
}
|
78 |
+
|
79 |
+
function CanonizePath( $pPath ) {
|
80 |
+
$pPath = trim( $pPath, '/' );
|
81 |
+
$query_pos = strpos( $pPath, '?' );
|
82 |
+
$query = '';
|
83 |
+
|
84 |
+
if ( false !== $query_pos ) {
|
85 |
+
$query = substr( $pPath, $query_pos );
|
86 |
+
$pPath = substr( $pPath, 0, $query_pos );
|
87 |
+
}
|
88 |
+
|
89 |
+
// Trim '.json' suffix.
|
90 |
+
$format_length = strlen( '.' . self::FORMAT );
|
91 |
+
$start = $format_length * ( - 1 ); //negative
|
92 |
+
if ( substr( strtolower( $pPath ), $start ) === ( '.' . self::FORMAT ) ) {
|
93 |
+
$pPath = substr( $pPath, 0, strlen( $pPath ) - $format_length );
|
94 |
+
}
|
95 |
+
|
96 |
+
switch ( $this->_scope ) {
|
97 |
+
case 'app':
|
98 |
+
$base = '/apps/' . $this->_id;
|
99 |
+
break;
|
100 |
+
case 'developer':
|
101 |
+
$base = '/developers/' . $this->_id;
|
102 |
+
break;
|
103 |
+
case 'user':
|
104 |
+
$base = '/users/' . $this->_id;
|
105 |
+
break;
|
106 |
+
case 'plugin':
|
107 |
+
$base = '/plugins/' . $this->_id;
|
108 |
+
break;
|
109 |
+
case 'install':
|
110 |
+
$base = '/installs/' . $this->_id;
|
111 |
+
break;
|
112 |
+
default:
|
113 |
+
throw new Freemius_Exception( 'Scope not implemented.' );
|
114 |
+
}
|
115 |
+
|
116 |
+
return '/v' . FS_API__VERSION . $base .
|
117 |
+
( ! empty( $pPath ) ? '/' : '' ) . $pPath .
|
118 |
+
( ( false === strpos( $pPath, '.' ) ) ? '.' . self::FORMAT : '' ) . $query;
|
119 |
+
}
|
120 |
+
|
121 |
+
abstract function MakeRequest( $pCanonizedPath, $pMethod = 'GET', $pParams = array() );
|
122 |
+
|
123 |
+
/**
|
124 |
+
* @param string $pPath
|
125 |
+
* @param string $pMethod
|
126 |
+
* @param array $pParams
|
127 |
+
*
|
128 |
+
* @return object[]|object|null
|
129 |
+
*/
|
130 |
+
private function _Api( $pPath, $pMethod = 'GET', $pParams = array() ) {
|
131 |
+
$pMethod = strtoupper( $pMethod );
|
132 |
+
|
133 |
+
try {
|
134 |
+
$result = $this->MakeRequest( $pPath, $pMethod, $pParams );
|
135 |
+
} catch ( Freemius_Exception $e ) {
|
136 |
+
// Map to error object.
|
137 |
+
$result = (object) $e->getResult();
|
138 |
+
} catch ( Exception $e ) {
|
139 |
+
// Map to error object.
|
140 |
+
$result = (object) array(
|
141 |
+
'error' => (object) array(
|
142 |
+
'type' => 'Unknown',
|
143 |
+
'message' => $e->getMessage() . ' (' . $e->getFile() . ': ' . $e->getLine() . ')',
|
144 |
+
'code' => 'unknown',
|
145 |
+
'http' => 402
|
146 |
+
)
|
147 |
+
);
|
148 |
+
}
|
149 |
+
|
150 |
+
return $result;
|
151 |
+
}
|
152 |
+
|
153 |
+
public function Api( $pPath, $pMethod = 'GET', $pParams = array() ) {
|
154 |
+
return $this->_Api( $this->CanonizePath( $pPath ), $pMethod, $pParams );
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Base64 decoding that does not need to be urldecode()-ed.
|
159 |
+
*
|
160 |
+
* Exactly the same as PHP base64 encode except it uses
|
161 |
+
* `-` instead of `+`
|
162 |
+
* `_` instead of `/`
|
163 |
+
* No padded =
|
164 |
+
*
|
165 |
+
* @param string $input Base64UrlEncoded() string
|
166 |
+
*
|
167 |
+
* @return string
|
168 |
+
*/
|
169 |
+
protected static function Base64UrlDecode( $input ) {
|
170 |
+
/**
|
171 |
+
* IMPORTANT NOTE:
|
172 |
+
* This is a hack suggested by @otto42 and @greenshady from
|
173 |
+
* the theme's review team. The usage of base64 for API
|
174 |
+
* signature encoding was approved in a Slack meeting
|
175 |
+
* held on Tue (10/25 2016).
|
176 |
+
*
|
177 |
+
* @todo Remove this hack once the base64 error is removed from the Theme Check.
|
178 |
+
*
|
179 |
+
* @since 1.2.2
|
180 |
+
* @author Vova Feldman (@svovaf)
|
181 |
+
*/
|
182 |
+
$fn = 'base64' . '_decode';
|
183 |
+
return $fn( strtr( $input, '-_', '+/' ) );
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Base64 encoding that does not need to be urlencode()ed.
|
188 |
+
*
|
189 |
+
* Exactly the same as base64 encode except it uses
|
190 |
+
* `-` instead of `+
|
191 |
+
* `_` instead of `/`
|
192 |
+
*
|
193 |
+
* @param string $input string
|
194 |
+
*
|
195 |
+
* @return string Base64 encoded string
|
196 |
+
*/
|
197 |
+
protected static function Base64UrlEncode( $input ) {
|
198 |
+
/**
|
199 |
+
* IMPORTANT NOTE:
|
200 |
+
* This is a hack suggested by @otto42 and @greenshady from
|
201 |
+
* the theme's review team. The usage of base64 for API
|
202 |
+
* signature encoding was approved in a Slack meeting
|
203 |
+
* held on Tue (10/25 2016).
|
204 |
+
*
|
205 |
+
* @todo Remove this hack once the base64 error is removed from the Theme Check.
|
206 |
+
*
|
207 |
+
* @since 1.2.2
|
208 |
+
* @author Vova Feldman (@svovaf)
|
209 |
+
*/
|
210 |
+
$fn = 'base64' . '_encode';
|
211 |
+
$str = strtr( $fn( $input ), '+/', '-_' );
|
212 |
+
$str = str_replace( '=', '', $str );
|
213 |
+
|
214 |
+
return $str;
|
215 |
+
}
|
216 |
+
}
|
217 |
+
}
|
|
|
|
vendor/freemius/wordpress-sdk/includes/sdk/FreemiusWordPress.php
CHANGED
@@ -85,10 +85,7 @@
|
|
85 |
define( 'FS_API__SANDBOX_ADDRESS', '://sandbox-api.freemius.com' );
|
86 |
}
|
87 |
|
88 |
-
if ( class_exists( 'Freemius_Api_WordPress' ) ) {
|
89 |
-
return;
|
90 |
-
}
|
91 |
-
|
92 |
class Freemius_Api_WordPress extends Freemius_Api_Base {
|
93 |
private static $_logger = array();
|
94 |
|
@@ -715,3 +712,4 @@
|
|
715 |
|
716 |
#endregion
|
717 |
}
|
|
85 |
define( 'FS_API__SANDBOX_ADDRESS', '://sandbox-api.freemius.com' );
|
86 |
}
|
87 |
|
88 |
+
if ( ! class_exists( 'Freemius_Api_WordPress' ) ) {
|
|
|
|
|
|
|
89 |
class Freemius_Api_WordPress extends Freemius_Api_Base {
|
90 |
private static $_logger = array();
|
91 |
|
712 |
|
713 |
#endregion
|
714 |
}
|
715 |
+
}
|
vendor/freemius/wordpress-sdk/includes/supplements/fs-migration-2.5.1.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.5.1
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
if ( ! function_exists( 'fs_migrate_251' ) ) {
|
14 |
+
function fs_migrate_251( Freemius $fs, $install_by_blog_id ) {
|
15 |
+
$permission_manager = FS_Permission_Manager::instance( $fs );
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @var FS_Site $install
|
19 |
+
*/
|
20 |
+
foreach ( $install_by_blog_id as $blog_id => $install ) {
|
21 |
+
if ( true === $install->is_disconnected ) {
|
22 |
+
$permission_manager->update_site_tracking(
|
23 |
+
false,
|
24 |
+
( 0 == $blog_id ) ? null : $blog_id,
|
25 |
+
// Update only if permissions are not yet set.
|
26 |
+
true
|
27 |
+
);
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
}
|
vendor/freemius/wordpress-sdk/languages/freemius-cs_CZ.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-da_DK.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-de_DE.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-en.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-es_ES.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-fr_FR.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-he_IL.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-hu_HU.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-it_IT.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-ja.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-nl_NL.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-ru_RU.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-ta.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius-zh_CN.mo
CHANGED
Binary file
|
vendor/freemius/wordpress-sdk/languages/freemius.pot
CHANGED
@@ -8,7 +8,6 @@ msgstr ""
|
|
8 |
"Content-Transfer-Encoding: 8bit\n"
|
9 |
"Language-Team: Freemius Team <admin@freemius.com>\n"
|
10 |
"Last-Translator: Vova Feldman <vova@freemius.com>\n"
|
11 |
-
"POT-Creation-Date: 2022-07-06 12:49+0000\n"
|
12 |
"Report-Msgid-Bugs-To: https://github.com/Freemius/wordpress-sdk/issues\n"
|
13 |
"X-Poedit-Basepath: ..\n"
|
14 |
"X-Poedit-KeywordsList: get_text_inline;fs_text_inline;fs_echo_inline;fs_esc_js_inline;fs_esc_attr_inline;fs_esc_attr_echo_inline;fs_esc_html_inline;fs_esc_html_echo_inline;get_text_x_inline:1,2c;fs_text_x_inline:1,2c;fs_echo_x_inline:1,2c;fs_esc_attr_x_inline:1,2c;fs_esc_js_x_inline:1,2c;fs_esc_js_echo_x_inline:1,2c;fs_esc_html_x_inline:1,2c;fs_esc_html_echo_x_inline:1,2c\n"
|
@@ -17,34 +16,810 @@ msgstr ""
|
|
17 |
"X-Poedit-SourceCharset: UTF-8\n"
|
18 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
19 |
|
20 |
-
#: includes/class-freemius.php:
|
21 |
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."
|
22 |
msgstr ""
|
23 |
|
24 |
-
#: includes/class-freemius.php:
|
25 |
msgid "Would you like to proceed with the update?"
|
26 |
msgstr ""
|
27 |
|
28 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
msgid "Freemius Debug"
|
30 |
msgstr ""
|
31 |
|
32 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
|
34 |
msgstr ""
|
35 |
|
36 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
msgid "An unknown error has occurred while trying to set the user's beta mode."
|
38 |
msgstr ""
|
39 |
|
40 |
-
#: includes/class-freemius.php:
|
41 |
msgid "Invalid new user ID or email address."
|
42 |
msgstr ""
|
43 |
|
44 |
-
#: includes/class-freemius.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
msgid "Bundle"
|
46 |
msgstr ""
|
47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
#: includes/class-fs-plugin-updater.php:206, templates/forms/premium-versions-upgrade-handler.php:57
|
49 |
msgid "Renew license"
|
50 |
msgstr ""
|
@@ -53,15 +828,15 @@ msgstr ""
|
|
53 |
msgid "Buy license"
|
54 |
msgstr ""
|
55 |
|
56 |
-
#: includes/class-fs-plugin-updater.php:
|
57 |
msgid "There is a %s of %s available."
|
58 |
msgstr ""
|
59 |
|
60 |
-
#: includes/class-fs-plugin-updater.php:
|
61 |
msgid "new Beta version"
|
62 |
msgstr ""
|
63 |
|
64 |
-
#: includes/class-fs-plugin-updater.php:
|
65 |
msgid "new version"
|
66 |
msgstr ""
|
67 |
|
@@ -69,635 +844,604 @@ msgstr ""
|
|
69 |
msgid "Important Upgrade Notice:"
|
70 |
msgstr ""
|
71 |
|
72 |
-
#: includes/class-fs-plugin-updater.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
|
74 |
msgstr ""
|
75 |
|
76 |
-
#: includes/fs-plugin-info-dialog.php:
|
77 |
msgid "Purchase More"
|
78 |
msgstr ""
|
79 |
|
80 |
-
#: includes/fs-plugin-info-dialog.php:
|
81 |
msgctxt "verb"
|
82 |
msgid "Purchase"
|
83 |
msgstr ""
|
84 |
|
85 |
-
|
86 |
-
#: includes/fs-plugin-info-dialog.php:546
|
87 |
msgid "Start my free %s"
|
88 |
msgstr ""
|
89 |
|
90 |
-
#: includes/fs-plugin-info-dialog.php:
|
91 |
-
msgid "Install Free Version Now"
|
92 |
msgstr ""
|
93 |
|
94 |
-
#: includes/fs-plugin-info-dialog.php:
|
95 |
-
msgid "Install Now"
|
96 |
msgstr ""
|
97 |
|
98 |
-
#: includes/fs-plugin-info-dialog.php:
|
99 |
-
msgid "Install Free Version
|
100 |
msgstr ""
|
101 |
|
102 |
-
#: includes/fs-plugin-info-dialog.php:
|
103 |
-
msgid "Install
|
104 |
msgstr ""
|
105 |
|
106 |
-
#: includes/fs-plugin-info-dialog.php:
|
107 |
msgctxt "as download latest version"
|
108 |
msgid "Download Latest Free Version"
|
109 |
msgstr ""
|
110 |
|
111 |
-
#: includes/fs-plugin-info-dialog.php:
|
112 |
msgctxt "as download latest version"
|
113 |
msgid "Download Latest"
|
114 |
msgstr ""
|
115 |
|
116 |
-
#: includes/fs-plugin-info-dialog.php:
|
117 |
msgid "Activate this add-on"
|
118 |
msgstr ""
|
119 |
|
120 |
-
#: includes/fs-plugin-info-dialog.php:
|
121 |
msgid "Activate Free Version"
|
122 |
msgstr ""
|
123 |
|
124 |
-
#: includes/fs-plugin-info-dialog.php:
|
125 |
msgid "Activate"
|
126 |
msgstr ""
|
127 |
|
128 |
-
#: includes/fs-plugin-info-dialog.php:
|
129 |
msgctxt "Plugin installer section title"
|
130 |
msgid "Description"
|
131 |
msgstr ""
|
132 |
|
133 |
-
#: includes/fs-plugin-info-dialog.php:
|
134 |
msgctxt "Plugin installer section title"
|
135 |
msgid "Installation"
|
136 |
msgstr ""
|
137 |
|
138 |
-
#: includes/fs-plugin-info-dialog.php:
|
139 |
msgctxt "Plugin installer section title"
|
140 |
msgid "FAQ"
|
141 |
msgstr ""
|
142 |
|
143 |
-
#: includes/fs-plugin-info-dialog.php:
|
144 |
msgid "Screenshots"
|
145 |
msgstr ""
|
146 |
|
147 |
-
#: includes/fs-plugin-info-dialog.php:
|
148 |
msgctxt "Plugin installer section title"
|
149 |
msgid "Changelog"
|
150 |
msgstr ""
|
151 |
|
152 |
-
#: includes/fs-plugin-info-dialog.php:
|
153 |
msgctxt "Plugin installer section title"
|
154 |
msgid "Reviews"
|
155 |
msgstr ""
|
156 |
|
157 |
-
#: includes/fs-plugin-info-dialog.php:
|
158 |
msgctxt "Plugin installer section title"
|
159 |
msgid "Other Notes"
|
160 |
msgstr ""
|
161 |
|
162 |
-
#: includes/fs-plugin-info-dialog.php:
|
163 |
msgctxt "Plugin installer section title"
|
164 |
msgid "Features & Pricing"
|
165 |
msgstr ""
|
166 |
|
167 |
-
#: includes/fs-plugin-info-dialog.php:
|
168 |
msgid "Plugin Install"
|
169 |
msgstr ""
|
170 |
|
171 |
-
#: includes/fs-plugin-info-dialog.php:
|
172 |
msgctxt "e.g. Professional Plan"
|
173 |
msgid "%s Plan"
|
174 |
msgstr ""
|
175 |
|
176 |
-
#: includes/fs-plugin-info-dialog.php:
|
177 |
msgctxt "e.g. the best product"
|
178 |
msgid "Best"
|
179 |
msgstr ""
|
180 |
|
181 |
-
#: includes/fs-plugin-info-dialog.php:
|
182 |
msgctxt "as every month"
|
183 |
msgid "Monthly"
|
184 |
msgstr ""
|
185 |
|
186 |
-
#: includes/fs-plugin-info-dialog.php:
|
187 |
msgctxt "as once a year"
|
188 |
msgid "Annual"
|
189 |
msgstr ""
|
190 |
|
191 |
-
#: includes/fs-plugin-info-dialog.php:
|
192 |
msgid "Lifetime"
|
193 |
msgstr ""
|
194 |
|
195 |
-
#: includes/fs-plugin-info-dialog.php:
|
196 |
msgctxt "e.g. billed monthly"
|
197 |
msgid "Billed %s"
|
198 |
msgstr ""
|
199 |
|
200 |
-
#: includes/fs-plugin-info-dialog.php:
|
201 |
msgctxt "as once a year"
|
202 |
msgid "Annually"
|
203 |
msgstr ""
|
204 |
|
205 |
-
#: includes/fs-plugin-info-dialog.php:
|
206 |
msgctxt "as once a year"
|
207 |
msgid "Once"
|
208 |
msgstr ""
|
209 |
|
210 |
-
#: includes/fs-plugin-info-dialog.php:
|
211 |
msgid "Single Site License"
|
212 |
msgstr ""
|
213 |
|
214 |
-
#: includes/fs-plugin-info-dialog.php:
|
215 |
msgid "Unlimited Licenses"
|
216 |
msgstr ""
|
217 |
|
218 |
-
#: includes/fs-plugin-info-dialog.php:
|
219 |
msgid "Up to %s Sites"
|
220 |
msgstr ""
|
221 |
|
222 |
-
#: includes/fs-plugin-info-dialog.php:
|
223 |
msgctxt "as monthly period"
|
224 |
msgid "mo"
|
225 |
msgstr ""
|
226 |
|
227 |
-
#: includes/fs-plugin-info-dialog.php:
|
228 |
msgctxt "as annual period"
|
229 |
msgid "year"
|
230 |
msgstr ""
|
231 |
|
232 |
-
#: includes/fs-plugin-info-dialog.php:
|
233 |
msgctxt "noun"
|
234 |
msgid "Price"
|
235 |
msgstr ""
|
236 |
|
237 |
-
|
238 |
-
#: includes/fs-plugin-info-dialog.php:1290
|
239 |
msgid "Save %s"
|
240 |
msgstr ""
|
241 |
|
242 |
-
#: includes/fs-plugin-info-dialog.php:
|
243 |
msgid "No commitment for %s - cancel anytime"
|
244 |
msgstr ""
|
245 |
|
246 |
-
#: includes/fs-plugin-info-dialog.php:
|
247 |
msgid "After your free %s, pay as little as %s"
|
248 |
msgstr ""
|
249 |
|
250 |
-
#: includes/fs-plugin-info-dialog.php:
|
251 |
msgid "Details"
|
252 |
msgstr ""
|
253 |
|
254 |
-
#: includes/fs-plugin-info-dialog.php:
|
255 |
msgctxt "product version"
|
256 |
msgid "Version"
|
257 |
msgstr ""
|
258 |
|
259 |
-
#: includes/fs-plugin-info-dialog.php:
|
260 |
msgctxt "as the plugin author"
|
261 |
msgid "Author"
|
262 |
msgstr ""
|
263 |
|
264 |
-
#: includes/fs-plugin-info-dialog.php:
|
265 |
msgid "Last Updated"
|
266 |
msgstr ""
|
267 |
|
268 |
-
|
269 |
-
#: includes/fs-plugin-info-dialog.php:1337, templates/account.php:536
|
270 |
msgctxt "x-ago"
|
271 |
msgid "%s ago"
|
272 |
msgstr ""
|
273 |
|
274 |
-
#: includes/fs-plugin-info-dialog.php:
|
275 |
msgid "Requires WordPress Version"
|
276 |
msgstr ""
|
277 |
|
278 |
-
#: includes/fs-plugin-info-dialog.php:
|
279 |
msgid "%s or higher"
|
280 |
msgstr ""
|
281 |
|
282 |
-
#: includes/fs-plugin-info-dialog.php:
|
283 |
msgid "Compatible up to"
|
284 |
msgstr ""
|
285 |
|
286 |
-
#: includes/fs-plugin-info-dialog.php:
|
|
|
|
|
|
|
|
|
287 |
msgid "Downloaded"
|
288 |
msgstr ""
|
289 |
|
290 |
-
|
291 |
-
#: includes/fs-plugin-info-dialog.php:1366
|
292 |
msgid "%s time"
|
293 |
msgstr ""
|
294 |
|
295 |
-
|
296 |
-
#: includes/fs-plugin-info-dialog.php:1368
|
297 |
msgid "%s times"
|
298 |
msgstr ""
|
299 |
|
300 |
-
#: includes/fs-plugin-info-dialog.php:
|
301 |
msgid "WordPress.org Plugin Page"
|
302 |
msgstr ""
|
303 |
|
304 |
-
#: includes/fs-plugin-info-dialog.php:
|
305 |
msgid "Plugin Homepage"
|
306 |
msgstr ""
|
307 |
|
308 |
-
#: includes/fs-plugin-info-dialog.php:
|
309 |
msgid "Donate to this plugin"
|
310 |
msgstr ""
|
311 |
|
312 |
-
#: includes/fs-plugin-info-dialog.php:
|
313 |
msgid "Average Rating"
|
314 |
msgstr ""
|
315 |
|
316 |
-
#: includes/fs-plugin-info-dialog.php:
|
317 |
msgid "based on %s"
|
318 |
msgstr ""
|
319 |
|
320 |
-
|
321 |
-
#: includes/fs-plugin-info-dialog.php:1415
|
322 |
msgid "%s rating"
|
323 |
msgstr ""
|
324 |
|
325 |
-
|
326 |
-
#: includes/fs-plugin-info-dialog.php:1417
|
327 |
msgid "%s ratings"
|
328 |
msgstr ""
|
329 |
|
330 |
-
|
331 |
-
#: includes/fs-plugin-info-dialog.php:1432
|
332 |
msgid "%s star"
|
333 |
msgstr ""
|
334 |
|
335 |
-
|
336 |
-
#: includes/fs-plugin-info-dialog.php:1434
|
337 |
msgid "%s stars"
|
338 |
msgstr ""
|
339 |
|
340 |
-
|
341 |
-
#: includes/fs-plugin-info-dialog.php:1446
|
342 |
msgid "Click to see reviews that provided a rating of %s"
|
343 |
msgstr ""
|
344 |
|
345 |
-
#: includes/fs-plugin-info-dialog.php:
|
346 |
msgid "Contributors"
|
347 |
msgstr ""
|
348 |
|
349 |
-
#: includes/fs-plugin-info-dialog.php:
|
350 |
-
msgid "
|
351 |
msgstr ""
|
352 |
|
353 |
-
#: includes/fs-plugin-info-dialog.php:
|
354 |
-
msgid "
|
|
|
|
|
|
|
|
|
355 |
msgstr ""
|
356 |
|
357 |
-
#: includes/fs-plugin-info-dialog.php:
|
358 |
msgid "This plugin has not been tested with your current version of WordPress."
|
359 |
msgstr ""
|
360 |
|
361 |
-
#: includes/fs-plugin-info-dialog.php:
|
|
|
|
|
|
|
|
|
362 |
msgid "Paid add-on must be deployed to Freemius."
|
363 |
msgstr ""
|
364 |
|
365 |
-
#: includes/fs-plugin-info-dialog.php:
|
366 |
msgid "Add-on must be deployed to WordPress.org or Freemius."
|
367 |
msgstr ""
|
368 |
|
369 |
-
#: includes/fs-plugin-info-dialog.php:
|
370 |
-
msgid "
|
371 |
msgstr ""
|
372 |
|
373 |
-
#: includes/fs-plugin-info-dialog.php:
|
374 |
-
msgid "
|
375 |
msgstr ""
|
376 |
|
377 |
-
#: includes/fs-plugin-info-dialog.php:
|
378 |
-
msgid "
|
379 |
msgstr ""
|
380 |
|
381 |
-
#: includes/fs-plugin-info-dialog.php:
|
382 |
-
msgid "
|
383 |
msgstr ""
|
384 |
|
385 |
-
#: templates/account.php:
|
386 |
msgid "Downgrading your plan"
|
387 |
msgstr ""
|
388 |
|
389 |
-
#: templates/account.php:
|
390 |
msgid "Cancelling the subscription"
|
391 |
msgstr ""
|
392 |
|
393 |
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
|
394 |
-
#: templates/account.php:
|
395 |
msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
|
396 |
msgstr ""
|
397 |
|
398 |
-
#: templates/account.php:
|
399 |
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."
|
400 |
msgstr ""
|
401 |
|
402 |
-
#: templates/account.php:
|
403 |
msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
|
404 |
msgstr ""
|
405 |
|
406 |
-
#: templates/account.php:
|
407 |
msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
408 |
msgstr ""
|
409 |
|
410 |
-
#: templates/account.php:
|
411 |
msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
412 |
msgstr ""
|
413 |
|
414 |
#. translators: %s: Plan title (e.g. "Professional")
|
415 |
-
#: templates/account.php:
|
416 |
msgid "Activate %s Plan"
|
417 |
msgstr ""
|
418 |
|
419 |
#. translators: %s: Time period (e.g. Auto renews in "2 months")
|
420 |
-
#: templates/account.php:
|
421 |
msgid "Auto renews in %s"
|
422 |
msgstr ""
|
423 |
|
424 |
#. translators: %s: Time period (e.g. Expires in "2 months")
|
425 |
-
#: templates/account.php:
|
426 |
msgid "Expires in %s"
|
427 |
msgstr ""
|
428 |
|
429 |
-
#: templates/account.php:
|
430 |
msgctxt "as synchronize license"
|
431 |
msgid "Sync License"
|
432 |
msgstr ""
|
433 |
|
434 |
-
#: templates/account.php:
|
435 |
msgid "Cancel Trial"
|
436 |
msgstr ""
|
437 |
|
438 |
-
#: templates/account.php:
|
439 |
msgid "Change Plan"
|
440 |
msgstr ""
|
441 |
|
442 |
-
#: templates/account.php:
|
443 |
msgctxt "verb"
|
444 |
msgid "Upgrade"
|
445 |
msgstr ""
|
446 |
|
447 |
-
#: templates/account.php:
|
448 |
-
msgid "Add-Ons"
|
449 |
-
msgstr ""
|
450 |
-
|
451 |
-
#: templates/account.php:130, templates/account/partials/addon.php:50, templates/account/partials/site.php:318
|
452 |
msgctxt "verb"
|
453 |
msgid "Downgrade"
|
454 |
msgstr ""
|
455 |
|
456 |
-
#: templates/account.php:
|
457 |
-
msgctxt "trial period"
|
458 |
-
msgid "Trial"
|
459 |
-
msgstr ""
|
460 |
-
|
461 |
-
#: templates/account.php:132, templates/add-ons.php:246, templates/plugin-info/features.php:72, templates/account/partials/addon.php:52, templates/account/partials/site.php:33
|
462 |
msgid "Free"
|
463 |
msgstr ""
|
464 |
|
465 |
-
#: templates/account.php:
|
466 |
msgctxt "as product pricing plan"
|
467 |
msgid "Plan"
|
468 |
msgstr ""
|
469 |
|
470 |
-
#: templates/account.php:
|
471 |
msgid "Bundle Plan"
|
472 |
msgstr ""
|
473 |
|
474 |
-
#: templates/account.php:
|
475 |
-
msgid "Account"
|
476 |
-
msgstr ""
|
477 |
-
|
478 |
-
#: templates/account.php:259
|
479 |
msgid "Free Trial"
|
480 |
msgstr ""
|
481 |
|
482 |
-
#: templates/account.php:
|
483 |
msgid "Account Details"
|
484 |
msgstr ""
|
485 |
|
486 |
-
#: templates/account.php:
|
487 |
-
msgid "Stop Debug"
|
488 |
-
msgstr ""
|
489 |
-
|
490 |
-
#: templates/account.php:277, templates/forms/data-debug-mode.php:33
|
491 |
msgid "Start Debug"
|
492 |
msgstr ""
|
493 |
|
494 |
-
#: templates/account.php:
|
495 |
-
msgid "
|
496 |
msgstr ""
|
497 |
|
498 |
#: templates/account.php:299
|
499 |
-
msgid "
|
500 |
-
msgstr ""
|
501 |
-
|
502 |
-
#: templates/account.php:297
|
503 |
-
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?"
|
504 |
-
msgstr ""
|
505 |
-
|
506 |
-
#: templates/account.php:302
|
507 |
-
msgid "Delete Account"
|
508 |
msgstr ""
|
509 |
|
510 |
-
#: templates/account.php:
|
511 |
msgid "Deactivate License"
|
512 |
msgstr ""
|
513 |
|
514 |
-
#: templates/account.php:
|
515 |
msgid "Are you sure you want to proceed?"
|
516 |
msgstr ""
|
517 |
|
518 |
-
#: templates/account.php:
|
519 |
msgid "Cancel Subscription"
|
520 |
msgstr ""
|
521 |
|
522 |
-
#: templates/account.php:
|
523 |
msgctxt "as synchronize"
|
524 |
msgid "Sync"
|
525 |
msgstr ""
|
526 |
|
527 |
-
#: templates/account.php:
|
528 |
msgid "Name"
|
529 |
msgstr ""
|
530 |
|
531 |
-
#: templates/account.php:
|
532 |
msgid "Email"
|
533 |
msgstr ""
|
534 |
|
535 |
-
#: templates/account.php:
|
536 |
msgid "User ID"
|
537 |
msgstr ""
|
538 |
|
539 |
-
#: templates/account.php:
|
540 |
-
msgid "Plugin"
|
541 |
-
msgstr ""
|
542 |
-
|
543 |
-
#: templates/account.php:404, templates/account.php:412, templates/debug.php:372, templates/debug.php:567, templates/forms/deactivation/form.php:107
|
544 |
-
msgid "Theme"
|
545 |
-
msgstr ""
|
546 |
-
|
547 |
-
#: templates/account.php:412, templates/account.php:732, templates/account.php:783, templates/debug.php:250, templates/debug.php:377, templates/debug.php:463, templates/debug.php:522, templates/debug.php:571, templates/debug.php:650, templates/account/payments.php:35, templates/debug/logger.php:21
|
548 |
msgid "ID"
|
549 |
msgstr ""
|
550 |
|
551 |
-
#: templates/account.php:
|
552 |
msgid "Site ID"
|
553 |
msgstr ""
|
554 |
|
555 |
-
#: templates/account.php:
|
556 |
msgid "No ID"
|
557 |
msgstr ""
|
558 |
|
559 |
-
#: templates/account.php:
|
560 |
msgid "Public Key"
|
561 |
msgstr ""
|
562 |
|
563 |
-
#: templates/account.php:
|
564 |
msgid "Secret Key"
|
565 |
msgstr ""
|
566 |
|
567 |
-
#: templates/account.php:
|
568 |
msgctxt "as secret encryption key missing"
|
569 |
msgid "No Secret"
|
570 |
msgstr ""
|
571 |
|
572 |
-
#: templates/account.php:
|
573 |
-
msgid "
|
574 |
msgstr ""
|
575 |
|
576 |
-
#: templates/account.php:
|
577 |
-
msgid "
|
578 |
msgstr ""
|
579 |
|
580 |
-
#: templates/account.php:
|
581 |
msgid "Join the Beta program"
|
582 |
msgstr ""
|
583 |
|
584 |
-
#: templates/account.php:
|
585 |
msgid "not verified"
|
586 |
msgstr ""
|
587 |
|
588 |
-
#: templates/account.php:
|
589 |
-
msgid "
|
590 |
msgstr ""
|
591 |
|
592 |
-
#: templates/account.php:
|
593 |
msgid "Premium version"
|
594 |
msgstr ""
|
595 |
|
596 |
-
#: templates/account.php:
|
597 |
-
msgid "
|
598 |
-
msgstr ""
|
599 |
-
|
600 |
-
#: templates/account.php:567, templates/account.php:719, templates/connect.php:198, templates/connect.php:486, includes/managers/class-fs-clone-manager.php:1123, templates/forms/license-activation.php:27, templates/account/partials/addon.php:326
|
601 |
-
msgid "Activate License"
|
602 |
msgstr ""
|
603 |
|
604 |
-
#: templates/account.php:
|
605 |
msgid "Verify Email"
|
606 |
msgstr ""
|
607 |
|
608 |
-
#: templates/account.php:
|
609 |
-
msgid "
|
610 |
-
msgstr ""
|
611 |
-
|
612 |
-
#: templates/account.php:674
|
613 |
-
msgid "What is your %s?"
|
614 |
msgstr ""
|
615 |
|
616 |
-
#: templates/account.php:
|
617 |
-
|
618 |
-
msgid "Edit"
|
619 |
msgstr ""
|
620 |
|
621 |
-
#: templates/account.php:
|
622 |
msgctxt "verb"
|
623 |
msgid "Show"
|
624 |
msgstr ""
|
625 |
|
626 |
-
#: templates/account.php:
|
627 |
-
msgid "
|
628 |
msgstr ""
|
629 |
|
630 |
-
#: templates/account.php:
|
631 |
-
|
|
|
632 |
msgstr ""
|
633 |
|
634 |
-
#: templates/account.php:
|
635 |
-
msgid "
|
636 |
msgstr ""
|
637 |
|
638 |
-
#: templates/account.php:
|
639 |
msgid "Sites"
|
640 |
msgstr ""
|
641 |
|
642 |
-
#: templates/account.php:
|
643 |
msgid "Search by address"
|
644 |
msgstr ""
|
645 |
|
646 |
-
#: templates/account.php:
|
647 |
msgid "Address"
|
648 |
msgstr ""
|
649 |
|
650 |
-
#: templates/account.php:
|
651 |
msgid "License"
|
652 |
msgstr ""
|
653 |
|
654 |
-
#: templates/account.php:
|
655 |
msgid "Plan"
|
656 |
msgstr ""
|
657 |
|
658 |
-
#: templates/account.php:
|
659 |
msgctxt "as software license"
|
660 |
msgid "License"
|
661 |
msgstr ""
|
662 |
|
663 |
-
#: templates/account.php:
|
664 |
msgctxt "verb"
|
665 |
msgid "Hide"
|
666 |
msgstr ""
|
667 |
|
668 |
-
#: templates/account.php:
|
669 |
msgid "Processing"
|
670 |
msgstr ""
|
671 |
|
672 |
-
#: templates/account.php:
|
673 |
msgid "Get updates for bleeding edge Beta versions of %s."
|
674 |
msgstr ""
|
675 |
|
676 |
-
#: templates/account.php:
|
677 |
msgid "Cancelling %s"
|
678 |
msgstr ""
|
679 |
|
680 |
-
#: templates/account.php:
|
681 |
msgid "trial"
|
682 |
msgstr ""
|
683 |
|
684 |
-
#: templates/account.php:
|
685 |
msgid "Cancelling %s..."
|
686 |
msgstr ""
|
687 |
|
688 |
-
#: templates/account.php:
|
689 |
msgid "subscription"
|
690 |
msgstr ""
|
691 |
|
692 |
-
#: templates/account.php:
|
693 |
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?"
|
694 |
msgstr ""
|
695 |
|
696 |
-
#: templates/account.php:
|
697 |
msgid "Disabling white-label mode"
|
698 |
msgstr ""
|
699 |
|
700 |
-
#: templates/account.php:
|
701 |
msgid "Enabling white-label mode"
|
702 |
msgstr ""
|
703 |
|
@@ -709,19 +1453,10 @@ msgstr ""
|
|
709 |
msgid "Add Ons for %s"
|
710 |
msgstr ""
|
711 |
|
712 |
-
#: templates/add-ons.php:57
|
713 |
-
msgctxt "exclamation"
|
714 |
-
msgid "Oops"
|
715 |
-
msgstr ""
|
716 |
-
|
717 |
#: templates/add-ons.php:58
|
718 |
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."
|
719 |
msgstr ""
|
720 |
|
721 |
-
#: templates/add-ons.php:186, templates/account/partials/addon.php:386
|
722 |
-
msgid "More information about %s"
|
723 |
-
msgstr ""
|
724 |
-
|
725 |
#: templates/add-ons.php:229
|
726 |
msgctxt "active add-on"
|
727 |
msgid "Active"
|
@@ -732,16 +1467,11 @@ msgctxt "installed add-on"
|
|
732 |
msgid "Installed"
|
733 |
msgstr ""
|
734 |
|
735 |
-
#: templates/admin-notice.php:13, templates/forms/license-activation.php:
|
736 |
msgctxt "as close a window"
|
737 |
msgid "Dismiss"
|
738 |
msgstr ""
|
739 |
|
740 |
-
#: templates/auto-installation.php:32
|
741 |
-
msgid "Add-On"
|
742 |
-
msgstr ""
|
743 |
-
|
744 |
-
#. translators: %s: Number of seconds
|
745 |
#: templates/auto-installation.php:45
|
746 |
msgid "%s sec"
|
747 |
msgstr ""
|
@@ -762,147 +1492,164 @@ msgstr ""
|
|
762 |
msgid "Cancel Installation"
|
763 |
msgstr ""
|
764 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
765 |
#. translators: %s: name (e.g. Hey John,)
|
766 |
#: templates/connect.php:121
|
767 |
msgctxt "greeting"
|
768 |
msgid "Hey %s,"
|
769 |
msgstr ""
|
770 |
|
771 |
-
#: templates/connect.php:
|
772 |
-
msgid "
|
773 |
msgstr ""
|
774 |
|
775 |
-
#: templates/connect.php:
|
776 |
-
msgid "
|
777 |
msgstr ""
|
778 |
|
779 |
-
#: templates/connect.php:
|
780 |
-
msgid "
|
781 |
msgstr ""
|
782 |
|
783 |
-
#: templates/connect.php:
|
784 |
-
msgid "
|
785 |
msgstr ""
|
786 |
|
787 |
-
#: templates/connect.php:
|
788 |
-
msgid "
|
789 |
msgstr ""
|
790 |
|
791 |
-
#: templates/connect.php:
|
792 |
msgid "Welcome to %s! To get started, please enter your license key:"
|
793 |
msgstr ""
|
794 |
|
795 |
-
#: templates/connect.php:
|
796 |
-
msgid "
|
797 |
msgstr ""
|
798 |
|
799 |
-
#: templates/connect.php:
|
800 |
-
msgid "
|
801 |
msgstr ""
|
802 |
|
803 |
-
|
804 |
-
|
|
|
805 |
msgstr ""
|
806 |
|
807 |
-
#: templates/connect.php:
|
808 |
-
msgid "
|
809 |
msgstr ""
|
810 |
|
811 |
-
#: templates/connect.php:
|
812 |
-
msgid "
|
813 |
msgstr ""
|
814 |
|
815 |
-
#: templates/connect.php:
|
816 |
-
msgid "
|
817 |
msgstr ""
|
818 |
|
819 |
-
#: templates/connect.php:
|
|
|
|
|
|
|
|
|
820 |
msgid "During the update process we detected %d site(s) that are still pending license activation."
|
821 |
msgstr ""
|
822 |
|
823 |
-
#: templates/connect.php:
|
824 |
msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
825 |
msgstr ""
|
826 |
|
827 |
-
#: templates/connect.php:
|
828 |
msgid "%s's paid features"
|
829 |
msgstr ""
|
830 |
|
831 |
-
#: templates/connect.php:
|
832 |
msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
833 |
msgstr ""
|
834 |
|
835 |
-
#: templates/connect.php:
|
836 |
-
msgid "
|
837 |
msgstr ""
|
838 |
|
839 |
-
#: templates/connect.php:
|
840 |
-
msgid "
|
841 |
msgstr ""
|
842 |
|
843 |
-
#: templates/connect.php:308
|
844 |
-
msgid "
|
845 |
msgstr ""
|
846 |
|
847 |
-
#: templates/connect.php:
|
848 |
msgctxt "verb"
|
849 |
msgid "Skip"
|
850 |
msgstr ""
|
851 |
|
852 |
-
#: templates/connect.php:
|
853 |
msgid "Delegate to Site Admins"
|
854 |
msgstr ""
|
855 |
|
856 |
-
#: templates/connect.php:
|
857 |
msgid "If you click it, this decision will be delegated to the sites administrators."
|
858 |
msgstr ""
|
859 |
|
860 |
-
#: templates/connect.php:
|
861 |
msgid "License issues?"
|
862 |
msgstr ""
|
863 |
|
864 |
-
#: templates/connect.php:
|
865 |
-
msgid "
|
866 |
msgstr ""
|
867 |
|
868 |
-
#: templates/connect.php:
|
869 |
-
msgid "
|
870 |
msgstr ""
|
871 |
|
872 |
-
#: templates/connect.php:
|
873 |
-
msgid "
|
874 |
msgstr ""
|
875 |
|
876 |
-
#: templates/connect.php:
|
877 |
msgid "Have a license key?"
|
878 |
msgstr ""
|
879 |
|
880 |
-
#: templates/connect.php:
|
881 |
-
msgid "
|
882 |
msgstr ""
|
883 |
|
884 |
-
#: templates/connect.php:
|
885 |
msgid "Privacy Policy"
|
886 |
msgstr ""
|
887 |
|
888 |
-
#: templates/connect.php:
|
889 |
msgid "License Agreement"
|
890 |
msgstr ""
|
891 |
|
892 |
-
#: templates/connect.php:
|
893 |
msgid "Terms of Service"
|
894 |
msgstr ""
|
895 |
|
896 |
-
#: templates/connect.php:
|
897 |
msgctxt "as in the process of sending an email"
|
898 |
msgid "Sending email"
|
899 |
msgstr ""
|
900 |
|
901 |
-
#: templates/connect.php:
|
902 |
msgctxt "as activating plugin"
|
903 |
msgid "Activating"
|
904 |
msgstr ""
|
905 |
|
|
|
|
|
|
|
|
|
906 |
#: templates/debug.php:17
|
907 |
msgctxt "as turned off"
|
908 |
msgid "Off"
|
@@ -913,243 +1660,250 @@ msgctxt "as turned on"
|
|
913 |
msgid "On"
|
914 |
msgstr ""
|
915 |
|
916 |
-
#: templates/debug.php:
|
917 |
msgid "SDK"
|
918 |
msgstr ""
|
919 |
|
920 |
-
#: templates/debug.php:
|
921 |
msgctxt "as code debugging"
|
922 |
msgid "Debugging"
|
923 |
msgstr ""
|
924 |
|
925 |
-
#: templates/debug.php:
|
926 |
msgid "Actions"
|
927 |
msgstr ""
|
928 |
|
929 |
-
#: templates/debug.php:
|
930 |
msgid "Are you sure you want to delete all Freemius data?"
|
931 |
msgstr ""
|
932 |
|
933 |
-
#: templates/debug.php:
|
934 |
msgid "Delete All Accounts"
|
935 |
msgstr ""
|
936 |
|
937 |
-
#: templates/debug.php:
|
938 |
msgid "Clear API Cache"
|
939 |
msgstr ""
|
940 |
|
941 |
-
#: templates/debug.php:
|
942 |
msgid "Clear Updates Transients"
|
943 |
msgstr ""
|
944 |
|
945 |
-
#: templates/debug.php:
|
946 |
msgid "Reset Deactivation Snoozing"
|
947 |
msgstr ""
|
948 |
|
949 |
-
#: templates/debug.php:
|
950 |
msgid "Sync Data From Server"
|
951 |
msgstr ""
|
952 |
|
953 |
-
#: templates/debug.php:
|
954 |
msgid "Migrate Options to Network"
|
955 |
msgstr ""
|
956 |
|
957 |
-
#: templates/debug.php:
|
958 |
msgid "Load DB Option"
|
959 |
msgstr ""
|
960 |
|
961 |
-
#: templates/debug.php:
|
962 |
msgid "Set DB Option"
|
963 |
msgstr ""
|
964 |
|
965 |
-
#: templates/debug.php:
|
966 |
msgid "Key"
|
967 |
msgstr ""
|
968 |
|
969 |
-
#: templates/debug.php:
|
970 |
msgid "Value"
|
971 |
msgstr ""
|
972 |
|
973 |
-
#: templates/debug.php:
|
974 |
msgctxt "as software development kit versions"
|
975 |
msgid "SDK Versions"
|
976 |
msgstr ""
|
977 |
|
978 |
-
#: templates/debug.php:
|
979 |
msgid "SDK Path"
|
980 |
msgstr ""
|
981 |
|
982 |
-
#: templates/debug.php:
|
983 |
msgid "Module Path"
|
984 |
msgstr ""
|
985 |
|
986 |
-
#: templates/debug.php:
|
987 |
msgid "Is Active"
|
988 |
msgstr ""
|
989 |
|
990 |
-
#: templates/debug.php:
|
991 |
msgid "Plugins"
|
992 |
msgstr ""
|
993 |
|
994 |
-
#: templates/debug.php:
|
995 |
msgid "Themes"
|
996 |
msgstr ""
|
997 |
|
998 |
-
#: templates/debug.php:
|
999 |
msgid "Slug"
|
1000 |
msgstr ""
|
1001 |
|
1002 |
-
#: templates/debug.php:
|
1003 |
msgid "Title"
|
1004 |
msgstr ""
|
1005 |
|
1006 |
-
#: templates/debug.php:
|
1007 |
msgctxt "as application program interface"
|
1008 |
msgid "API"
|
1009 |
msgstr ""
|
1010 |
|
1011 |
-
#: templates/debug.php:
|
1012 |
msgid "Freemius State"
|
1013 |
msgstr ""
|
1014 |
|
1015 |
-
#: templates/debug.php:
|
1016 |
msgid "Network Blog"
|
1017 |
msgstr ""
|
1018 |
|
1019 |
-
#: templates/debug.php:
|
1020 |
msgid "Network User"
|
1021 |
msgstr ""
|
1022 |
|
1023 |
-
#: templates/debug.php:
|
1024 |
msgctxt "as connection was successful"
|
1025 |
msgid "Connected"
|
1026 |
msgstr ""
|
1027 |
|
1028 |
-
#: templates/debug.php:
|
1029 |
msgctxt "as connection blocked"
|
1030 |
msgid "Blocked"
|
1031 |
msgstr ""
|
1032 |
|
1033 |
-
#: templates/debug.php:
|
1034 |
msgid "Simulate Trial Promotion"
|
1035 |
msgstr ""
|
1036 |
|
1037 |
-
#: templates/debug.php:
|
1038 |
msgid "Simulate Network Upgrade"
|
1039 |
msgstr ""
|
1040 |
|
1041 |
-
|
1042 |
-
#: templates/debug.php:371
|
1043 |
msgid "%s Installs"
|
1044 |
msgstr ""
|
1045 |
|
1046 |
-
#: templates/debug.php:
|
1047 |
msgctxt "like websites"
|
1048 |
msgid "Sites"
|
1049 |
msgstr ""
|
1050 |
|
1051 |
-
#: templates/debug.php:
|
1052 |
msgid "Blog ID"
|
1053 |
msgstr ""
|
1054 |
|
1055 |
-
#: templates/debug.php:
|
1056 |
msgid "License ID"
|
1057 |
msgstr ""
|
1058 |
|
1059 |
-
#: templates/debug.php:
|
1060 |
msgctxt "verb"
|
1061 |
msgid "Delete"
|
1062 |
msgstr ""
|
1063 |
|
1064 |
-
#: templates/debug.php:
|
1065 |
msgid "Add Ons of module %s"
|
1066 |
msgstr ""
|
1067 |
|
1068 |
-
#: templates/debug.php:
|
1069 |
msgid "Users"
|
1070 |
msgstr ""
|
1071 |
|
1072 |
-
#: templates/debug.php:
|
1073 |
msgid "Verified"
|
1074 |
msgstr ""
|
1075 |
|
1076 |
-
#: templates/debug.php:
|
1077 |
msgid "%s Licenses"
|
1078 |
msgstr ""
|
1079 |
|
1080 |
-
#: templates/debug.php:
|
1081 |
msgid "Plugin ID"
|
1082 |
msgstr ""
|
1083 |
|
1084 |
-
#: templates/debug.php:
|
1085 |
msgid "Plan ID"
|
1086 |
msgstr ""
|
1087 |
|
1088 |
-
#: templates/debug.php:
|
1089 |
msgid "Quota"
|
1090 |
msgstr ""
|
1091 |
|
1092 |
-
#: templates/debug.php:
|
1093 |
msgid "Activated"
|
1094 |
msgstr ""
|
1095 |
|
1096 |
-
#: templates/debug.php:
|
1097 |
msgid "Blocking"
|
1098 |
msgstr ""
|
1099 |
|
1100 |
-
#: templates/debug.php:
|
1101 |
msgid "Type"
|
1102 |
msgstr ""
|
1103 |
|
1104 |
-
#: templates/debug.php:
|
1105 |
msgctxt "as expiration date"
|
1106 |
msgid "Expiration"
|
1107 |
msgstr ""
|
1108 |
|
1109 |
-
#: templates/debug.php:
|
1110 |
msgid "Debug Log"
|
1111 |
msgstr ""
|
1112 |
|
1113 |
-
#: templates/debug.php:
|
1114 |
msgid "All Types"
|
1115 |
msgstr ""
|
1116 |
|
1117 |
-
#: templates/debug.php:
|
1118 |
msgid "All Requests"
|
1119 |
msgstr ""
|
1120 |
|
1121 |
-
#: templates/debug.php:
|
1122 |
msgid "File"
|
1123 |
msgstr ""
|
1124 |
|
1125 |
-
#: templates/debug.php:
|
1126 |
msgid "Function"
|
1127 |
msgstr ""
|
1128 |
|
1129 |
-
#: templates/debug.php:
|
1130 |
msgid "Process ID"
|
1131 |
msgstr ""
|
1132 |
|
1133 |
-
#: templates/debug.php:
|
1134 |
msgid "Logger"
|
1135 |
msgstr ""
|
1136 |
|
1137 |
-
#: templates/debug.php:
|
1138 |
msgid "Message"
|
1139 |
msgstr ""
|
1140 |
|
1141 |
-
#: templates/debug.php:
|
1142 |
msgid "Filter"
|
1143 |
msgstr ""
|
1144 |
|
1145 |
-
#: templates/debug.php:
|
1146 |
msgid "Download"
|
1147 |
msgstr ""
|
1148 |
|
1149 |
-
#: templates/debug.php:
|
1150 |
msgid "Timestamp"
|
1151 |
msgstr ""
|
1152 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1153 |
#: includes/debug/class-fs-debug-bar-panel.php:48, templates/debug/api-calls.php:54, templates/debug/logger.php:62
|
1154 |
msgctxt "milliseconds"
|
1155 |
msgid "ms"
|
@@ -1163,120 +1917,211 @@ msgstr ""
|
|
1163 |
msgid "Requests"
|
1164 |
msgstr ""
|
1165 |
|
1166 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1167 |
msgid "Invalid clone resolution action."
|
1168 |
msgstr ""
|
1169 |
|
1170 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1171 |
msgid "products"
|
1172 |
msgstr ""
|
1173 |
|
1174 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1175 |
-
msgid "
|
1176 |
msgstr ""
|
1177 |
|
1178 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1179 |
-
msgid "The products below have been placed into safe mode because we noticed that %2$s is an exact copy of
|
1180 |
msgstr ""
|
1181 |
|
1182 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1183 |
-
msgid "
|
1184 |
msgstr ""
|
1185 |
|
1186 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1187 |
msgid "the above-mentioned sites"
|
1188 |
msgstr ""
|
1189 |
|
1190 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1191 |
msgid "Is %2$s a duplicate of %4$s?"
|
1192 |
msgstr ""
|
1193 |
|
1194 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1195 |
msgid "Yes, %2$s is a duplicate of %4$s for the purpose of testing, staging, or development."
|
1196 |
msgstr ""
|
1197 |
|
1198 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1199 |
msgid "Long-Term Duplicate"
|
1200 |
msgstr ""
|
1201 |
|
1202 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1203 |
msgid "Duplicate Website"
|
1204 |
msgstr ""
|
1205 |
|
1206 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1207 |
msgid "Is %2$s the new home of %4$s?"
|
1208 |
msgstr ""
|
1209 |
|
1210 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1211 |
msgid "Yes, %%2$s is replacing %%4$s. I would like to migrate my %s from %%4$s to %%2$s."
|
1212 |
msgstr ""
|
1213 |
|
1214 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1215 |
msgid "license"
|
1216 |
msgstr ""
|
1217 |
|
1218 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1219 |
msgid "data"
|
1220 |
msgstr ""
|
1221 |
|
1222 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1223 |
msgid "Migrate License"
|
1224 |
msgstr ""
|
1225 |
|
1226 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1227 |
msgid "Migrate"
|
1228 |
msgstr ""
|
1229 |
|
1230 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1231 |
msgid "Is %2$s a new website?"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1235 |
msgid "Yes, %2$s is a new and different website that is separate from %4$s."
|
1236 |
msgstr ""
|
1237 |
|
1238 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1239 |
msgid "It requires license activation."
|
1240 |
msgstr ""
|
1241 |
|
1242 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1243 |
msgid "New Website"
|
1244 |
msgstr ""
|
1245 |
|
1246 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1247 |
msgctxt "Clone resolution admin notice products list label"
|
1248 |
msgid "Products"
|
1249 |
msgstr ""
|
1250 |
|
1251 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1252 |
msgid "You marked this website, %s, as a temporary duplicate of %s."
|
1253 |
msgstr ""
|
1254 |
|
1255 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1256 |
msgid "You marked this website, %s, as a temporary duplicate of these sites"
|
1257 |
msgstr ""
|
1258 |
|
1259 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1260 |
msgid "%s automatic security & feature updates and paid functionality will keep working without interruptions until %s (or when your license expires, whatever comes first)."
|
1261 |
msgstr ""
|
1262 |
|
1263 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1264 |
msgctxt "\"The <product_label>\", e.g.: \"The plugin\""
|
1265 |
msgid "The %s's"
|
1266 |
msgstr ""
|
1267 |
|
1268 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1269 |
msgid "The following products'"
|
1270 |
msgstr ""
|
1271 |
|
1272 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1273 |
msgid "If this is a long term duplicate, to keep automatic updates and paid functionality after %s, please %s."
|
1274 |
msgstr ""
|
1275 |
|
1276 |
-
#: includes/managers/class-fs-clone-manager.php:
|
1277 |
msgid "activate a license here"
|
1278 |
msgstr ""
|
1279 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1280 |
#: templates/account/billing.php:22
|
1281 |
msgctxt "verb"
|
1282 |
msgid "Update"
|
@@ -1342,6 +2187,16 @@ msgstr ""
|
|
1342 |
msgid "Invoice"
|
1343 |
msgstr ""
|
1344 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1345 |
#: templates/debug/api-calls.php:56
|
1346 |
msgid "API"
|
1347 |
msgstr ""
|
@@ -1438,24 +2293,24 @@ msgstr ""
|
|
1438 |
msgid "Apply to become an affiliate"
|
1439 |
msgstr ""
|
1440 |
|
1441 |
-
#: templates/forms/affiliation.php:
|
1442 |
-
msgid "
|
1443 |
msgstr ""
|
1444 |
|
1445 |
-
#: templates/forms/affiliation.php:
|
1446 |
-
msgid "Thank you for applying for our affiliate program,
|
1447 |
msgstr ""
|
1448 |
|
1449 |
#: templates/forms/affiliation.php:126
|
1450 |
msgid "Your affiliation account was temporarily suspended."
|
1451 |
msgstr ""
|
1452 |
|
1453 |
-
#: templates/forms/affiliation.php:
|
1454 |
-
msgid "Thank you for applying for our affiliate program, we'
|
1455 |
msgstr ""
|
1456 |
|
1457 |
-
#: templates/forms/affiliation.php:
|
1458 |
-
msgid "
|
1459 |
msgstr ""
|
1460 |
|
1461 |
#: templates/forms/affiliation.php:145
|
@@ -1562,7 +2417,7 @@ msgstr ""
|
|
1562 |
msgid "Please provide details on how you intend to promote %s (please be as specific as possible)."
|
1563 |
msgstr ""
|
1564 |
|
1565 |
-
#: templates/forms/affiliation.php:233, templates/forms/resend-key.php:22
|
1566 |
msgid "Cancel"
|
1567 |
msgstr ""
|
1568 |
|
@@ -1586,10 +2441,6 @@ msgstr ""
|
|
1586 |
msgid "User key"
|
1587 |
msgstr ""
|
1588 |
|
1589 |
-
#: templates/forms/data-debug-mode.php:162
|
1590 |
-
msgid "An unknown error has occurred."
|
1591 |
-
msgstr ""
|
1592 |
-
|
1593 |
#: templates/forms/email-address-update.php:32
|
1594 |
msgid "Email address update"
|
1595 |
msgstr ""
|
@@ -1643,62 +2494,40 @@ msgstr ""
|
|
1643 |
msgid "Update License"
|
1644 |
msgstr ""
|
1645 |
|
1646 |
-
#: templates/forms/license-activation.php:
|
1647 |
-
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."
|
1648 |
-
msgstr ""
|
1649 |
-
|
1650 |
-
#: templates/forms/license-activation.php:211
|
1651 |
-
msgid "Associate with the license owner's account."
|
1652 |
-
msgstr ""
|
1653 |
-
|
1654 |
-
#: templates/forms/optout.php:30
|
1655 |
-
msgctxt "verb"
|
1656 |
-
msgid "Opt Out"
|
1657 |
msgstr ""
|
1658 |
|
1659 |
-
#: templates/forms/
|
1660 |
-
|
1661 |
-
msgid "Opt In"
|
1662 |
msgstr ""
|
1663 |
|
1664 |
-
#: templates/forms/
|
1665 |
-
msgid "
|
1666 |
msgstr ""
|
1667 |
|
1668 |
#: templates/forms/optout.php:44
|
1669 |
-
msgid "
|
1670 |
msgstr ""
|
1671 |
|
1672 |
-
#: templates/forms/optout.php:
|
1673 |
-
msgid "
|
1674 |
msgstr ""
|
1675 |
|
1676 |
-
#: templates/forms/optout.php:
|
1677 |
-
msgid "
|
1678 |
msgstr ""
|
1679 |
|
1680 |
-
#: templates/forms/optout.php:
|
1681 |
-
msgid "
|
1682 |
msgstr ""
|
1683 |
|
1684 |
-
#: templates/forms/optout.php:
|
1685 |
-
msgid "
|
1686 |
msgstr ""
|
1687 |
|
1688 |
-
#: templates/forms/optout.php:
|
1689 |
-
msgid "
|
1690 |
-
msgstr ""
|
1691 |
-
|
1692 |
-
#: templates/forms/optout.php:49
|
1693 |
-
msgid "By clicking \"Opt Out\", we will no longer be sending any data from %s to %s."
|
1694 |
-
msgstr ""
|
1695 |
-
|
1696 |
-
#: templates/forms/optout.php:74
|
1697 |
-
msgid "Plugins & themes tracking"
|
1698 |
-
msgstr ""
|
1699 |
-
|
1700 |
-
#: templates/forms/optout.php:261
|
1701 |
-
msgid "Saved"
|
1702 |
msgstr ""
|
1703 |
|
1704 |
#: templates/forms/premium-versions-upgrade-handler.php:40
|
@@ -1709,14 +2538,6 @@ msgstr ""
|
|
1709 |
msgid " %s to access version %s security & feature updates, and support."
|
1710 |
msgstr ""
|
1711 |
|
1712 |
-
#: templates/forms/premium-versions-upgrade-handler.php:46
|
1713 |
-
msgid "Renew your license now"
|
1714 |
-
msgstr ""
|
1715 |
-
|
1716 |
-
#: templates/forms/premium-versions-upgrade-handler.php:47
|
1717 |
-
msgid "Buy a license now"
|
1718 |
-
msgstr ""
|
1719 |
-
|
1720 |
#: templates/forms/premium-versions-upgrade-handler.php:54
|
1721 |
msgid "New Version Available"
|
1722 |
msgstr ""
|
@@ -1730,10 +2551,6 @@ msgstr ""
|
|
1730 |
msgid "Send License Key"
|
1731 |
msgstr ""
|
1732 |
|
1733 |
-
#: templates/forms/resend-key.php:24, templates/forms/user-change.php:29
|
1734 |
-
msgid "Other"
|
1735 |
-
msgstr ""
|
1736 |
-
|
1737 |
#: templates/forms/resend-key.php:58
|
1738 |
msgid "Enter the email address you've used during the purchase and we will resend you the license key."
|
1739 |
msgstr ""
|
@@ -1774,21 +2591,14 @@ msgstr ""
|
|
1774 |
msgid "Cancel %s & Proceed"
|
1775 |
msgstr ""
|
1776 |
|
1777 |
-
#. translators: %1$s: Number of trial days; %2$s: Plan name;
|
1778 |
#: templates/forms/trial-start.php:22
|
1779 |
msgid "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
|
1780 |
msgstr ""
|
1781 |
|
1782 |
-
#. translators: %s: Link to freemius.com
|
1783 |
#: templates/forms/trial-start.php:28
|
1784 |
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."
|
1785 |
msgstr ""
|
1786 |
|
1787 |
-
#: templates/forms/trial-start.php:53
|
1788 |
-
msgctxt "call to action"
|
1789 |
-
msgid "Start free trial"
|
1790 |
-
msgstr ""
|
1791 |
-
|
1792 |
#: templates/forms/user-change.php:26
|
1793 |
msgid "By changing the user, you agree to transfer the account ownership to:"
|
1794 |
msgstr ""
|
@@ -1801,12 +2611,16 @@ msgstr ""
|
|
1801 |
msgid "Enter email address"
|
1802 |
msgstr ""
|
1803 |
|
1804 |
-
#: templates/
|
1805 |
-
msgid "
|
1806 |
msgstr ""
|
1807 |
|
1808 |
-
#: templates/
|
1809 |
-
msgid "
|
|
|
|
|
|
|
|
|
1810 |
msgstr ""
|
1811 |
|
1812 |
#: templates/partials/network-activation.php:32
|
@@ -1817,6 +2631,14 @@ msgstr ""
|
|
1817 |
msgid "Apply on all sites in the network."
|
1818 |
msgstr ""
|
1819 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1820 |
#: templates/partials/network-activation.php:45, templates/partials/network-activation.php:79
|
1821 |
msgid "allow"
|
1822 |
msgstr ""
|
@@ -1833,10 +2655,6 @@ msgstr ""
|
|
1833 |
msgid "Click to view full-size screenshot %d"
|
1834 |
msgstr ""
|
1835 |
|
1836 |
-
#: templates/plugin-info/features.php:43
|
1837 |
-
msgid "Support"
|
1838 |
-
msgstr ""
|
1839 |
-
|
1840 |
#: templates/plugin-info/features.php:56
|
1841 |
msgid "Unlimited Updates"
|
1842 |
msgstr ""
|
@@ -1859,35 +2677,43 @@ msgstr ""
|
|
1859 |
msgid "%1$s will immediately stop all future recurring payments and your %s plan license will expire in %s."
|
1860 |
msgstr ""
|
1861 |
|
|
|
|
|
|
|
|
|
1862 |
#: templates/account/partials/addon.php:200
|
1863 |
msgid "No expiration"
|
1864 |
msgstr ""
|
1865 |
|
1866 |
-
#: templates/account/partials/
|
1867 |
-
msgid "
|
1868 |
msgstr ""
|
1869 |
|
1870 |
-
#: templates/account/partials/
|
1871 |
-
msgid "
|
1872 |
msgstr ""
|
1873 |
|
1874 |
-
#: templates/account/partials/
|
1875 |
-
msgid "
|
|
|
|
|
|
|
|
|
1876 |
msgstr ""
|
1877 |
|
1878 |
-
#: templates/account/partials/site.php:
|
1879 |
msgid "Owner Name"
|
1880 |
msgstr ""
|
1881 |
|
1882 |
-
#: templates/account/partials/site.php:
|
1883 |
msgid "Owner Email"
|
1884 |
msgstr ""
|
1885 |
|
1886 |
-
#: templates/account/partials/site.php:
|
1887 |
msgid "Owner ID"
|
1888 |
msgstr ""
|
1889 |
|
1890 |
-
#: templates/account/partials/site.php:
|
1891 |
msgid "Subscription"
|
1892 |
msgstr ""
|
1893 |
|
8 |
"Content-Transfer-Encoding: 8bit\n"
|
9 |
"Language-Team: Freemius Team <admin@freemius.com>\n"
|
10 |
"Last-Translator: Vova Feldman <vova@freemius.com>\n"
|
|
|
11 |
"Report-Msgid-Bugs-To: https://github.com/Freemius/wordpress-sdk/issues\n"
|
12 |
"X-Poedit-Basepath: ..\n"
|
13 |
"X-Poedit-KeywordsList: get_text_inline;fs_text_inline;fs_echo_inline;fs_esc_js_inline;fs_esc_attr_inline;fs_esc_attr_echo_inline;fs_esc_html_inline;fs_esc_html_echo_inline;get_text_x_inline:1,2c;fs_text_x_inline:1,2c;fs_echo_x_inline:1,2c;fs_esc_attr_x_inline:1,2c;fs_esc_js_x_inline:1,2c;fs_esc_js_echo_x_inline:1,2c;fs_esc_html_x_inline:1,2c;fs_esc_html_echo_x_inline:1,2c\n"
|
16 |
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
|
19 |
+
#: includes/class-freemius.php:1744, templates/account.php:947
|
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:1751
|
24 |
msgid "Would you like to proceed with the update?"
|
25 |
msgstr ""
|
26 |
|
27 |
+
#: includes/class-freemius.php:1976
|
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:1978, includes/fs-plugin-info-dialog.php:1517
|
32 |
+
msgid "Error"
|
33 |
+
msgstr ""
|
34 |
+
|
35 |
+
#: includes/class-freemius.php:2424
|
36 |
+
msgid "I found a better %s"
|
37 |
+
msgstr ""
|
38 |
+
|
39 |
+
#: includes/class-freemius.php:2426
|
40 |
+
msgid "What's the %s's name?"
|
41 |
+
msgstr ""
|
42 |
+
|
43 |
+
#: includes/class-freemius.php:2432
|
44 |
+
msgid "It's a temporary %s - I'm troubleshooting an issue"
|
45 |
+
msgstr ""
|
46 |
+
|
47 |
+
#: includes/class-freemius.php:2434
|
48 |
+
msgid "Deactivation"
|
49 |
+
msgstr ""
|
50 |
+
|
51 |
+
#: includes/class-freemius.php:2435
|
52 |
+
msgid "Theme Switch"
|
53 |
+
msgstr ""
|
54 |
+
|
55 |
+
#: includes/class-freemius.php:2444, templates/forms/resend-key.php:24, templates/forms/user-change.php:29
|
56 |
+
msgid "Other"
|
57 |
+
msgstr ""
|
58 |
+
|
59 |
+
#: includes/class-freemius.php:2452
|
60 |
+
msgid "I no longer need the %s"
|
61 |
+
msgstr ""
|
62 |
+
|
63 |
+
#: includes/class-freemius.php:2459
|
64 |
+
msgid "I only needed the %s for a short period"
|
65 |
+
msgstr ""
|
66 |
+
|
67 |
+
#: includes/class-freemius.php:2465
|
68 |
+
msgid "The %s broke my site"
|
69 |
+
msgstr ""
|
70 |
+
|
71 |
+
#: includes/class-freemius.php:2472
|
72 |
+
msgid "The %s suddenly stopped working"
|
73 |
+
msgstr ""
|
74 |
+
|
75 |
+
#: includes/class-freemius.php:2482
|
76 |
+
msgid "I can't pay for it anymore"
|
77 |
+
msgstr ""
|
78 |
+
|
79 |
+
#: includes/class-freemius.php:2484
|
80 |
+
msgid "What price would you feel comfortable paying?"
|
81 |
+
msgstr ""
|
82 |
+
|
83 |
+
#: includes/class-freemius.php:2490
|
84 |
+
msgid "I don't like to share my information with you"
|
85 |
+
msgstr ""
|
86 |
+
|
87 |
+
#: includes/class-freemius.php:2511
|
88 |
+
msgid "The %s didn't work"
|
89 |
+
msgstr ""
|
90 |
+
|
91 |
+
#: includes/class-freemius.php:2521
|
92 |
+
msgid "I couldn't understand how to make it work"
|
93 |
+
msgstr ""
|
94 |
+
|
95 |
+
#: includes/class-freemius.php:2529
|
96 |
+
msgid "The %s is great, but I need specific feature that you don't support"
|
97 |
+
msgstr ""
|
98 |
+
|
99 |
+
#: includes/class-freemius.php:2531
|
100 |
+
msgid "What feature?"
|
101 |
+
msgstr ""
|
102 |
+
|
103 |
+
#: includes/class-freemius.php:2535
|
104 |
+
msgid "The %s is not working"
|
105 |
+
msgstr ""
|
106 |
+
|
107 |
+
#: includes/class-freemius.php:2537
|
108 |
+
msgid "Kindly share what didn't work so we can fix it for future users..."
|
109 |
+
msgstr ""
|
110 |
+
|
111 |
+
#: includes/class-freemius.php:2541
|
112 |
+
msgid "It's not what I was looking for"
|
113 |
+
msgstr ""
|
114 |
+
|
115 |
+
#: includes/class-freemius.php:2543
|
116 |
+
msgid "What you've been looking for?"
|
117 |
+
msgstr ""
|
118 |
+
|
119 |
+
#: includes/class-freemius.php:2547
|
120 |
+
msgid "The %s didn't work as expected"
|
121 |
+
msgstr ""
|
122 |
+
|
123 |
+
#: includes/class-freemius.php:2549
|
124 |
+
msgid "What did you expect?"
|
125 |
+
msgstr ""
|
126 |
+
|
127 |
+
#: includes/class-freemius.php:3637, templates/debug.php:24
|
128 |
msgid "Freemius Debug"
|
129 |
msgstr ""
|
130 |
|
131 |
+
#: includes/class-freemius.php:4444
|
132 |
+
msgid "I don't know what is cURL or how to install it, help me!"
|
133 |
+
msgstr ""
|
134 |
+
|
135 |
+
#: includes/class-freemius.php:4446
|
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:4453
|
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:4558
|
144 |
+
msgid "Yes - do your thing"
|
145 |
+
msgstr ""
|
146 |
+
|
147 |
+
#: includes/class-freemius.php:4563
|
148 |
+
msgid "No - just deactivate"
|
149 |
+
msgstr ""
|
150 |
+
|
151 |
+
#: includes/class-freemius.php:4608, includes/class-freemius.php:5139, includes/class-freemius.php:6334, includes/class-freemius.php:13998, includes/class-freemius.php:14747, includes/class-freemius.php:18513, includes/class-freemius.php:18618, includes/class-freemius.php:18795, includes/class-freemius.php:21078, includes/class-freemius.php:21456, includes/class-freemius.php:21470, includes/class-freemius.php:22158, includes/class-freemius.php:23174, includes/class-freemius.php:23304, includes/class-freemius.php:23434, templates/add-ons.php:57
|
152 |
+
msgctxt "exclamation"
|
153 |
+
msgid "Oops"
|
154 |
+
msgstr ""
|
155 |
+
|
156 |
+
#: includes/class-freemius.php:4683
|
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:5108
|
161 |
+
msgid "You have purchased a %s license."
|
162 |
+
msgstr ""
|
163 |
+
|
164 |
+
#: includes/class-freemius.php:5112
|
165 |
+
msgid " The %s's %sdownload link%s, license key, and installation instructions have been sent to %s. If you can't find the email after 5 min, please check your spam box."
|
166 |
+
msgstr ""
|
167 |
+
|
168 |
+
#: includes/class-freemius.php:5122, includes/class-freemius.php:6031, includes/class-freemius.php:17889, includes/class-freemius.php:17900, includes/class-freemius.php:21347, includes/class-freemius.php:21738, includes/class-freemius.php:21807, includes/class-freemius.php:21979
|
169 |
+
msgctxt "interjection expressing joy or exuberance"
|
170 |
+
msgid "Yee-haw"
|
171 |
+
msgstr ""
|
172 |
+
|
173 |
+
#: includes/class-freemius.php:5136
|
174 |
+
msgctxt "addonX cannot run without pluginY"
|
175 |
+
msgid "%s cannot run without %s."
|
176 |
+
msgstr ""
|
177 |
+
|
178 |
+
#: includes/class-freemius.php:5137
|
179 |
+
msgctxt "addonX cannot run..."
|
180 |
+
msgid "%s cannot run without the plugin."
|
181 |
+
msgstr ""
|
182 |
+
|
183 |
+
#: includes/class-freemius.php:5418
|
184 |
+
msgid "There was an unexpected API error while processing your request. Please try again in a few minutes and if it still doesn't work, contact the %s's author with the following:"
|
185 |
+
msgstr ""
|
186 |
+
|
187 |
+
#: includes/class-freemius.php:6000
|
188 |
+
msgid "Premium %s version was successfully activated."
|
189 |
+
msgstr ""
|
190 |
+
|
191 |
+
#: includes/class-freemius.php:6012, includes/class-freemius.php:7992
|
192 |
+
msgctxt "Used to express elation, enthusiasm, or triumph (especially in electronic communication)."
|
193 |
+
msgid "W00t"
|
194 |
+
msgstr ""
|
195 |
+
|
196 |
+
#: includes/class-freemius.php:6027
|
197 |
+
msgid "You have a %s license."
|
198 |
+
msgstr ""
|
199 |
+
|
200 |
+
#: includes/class-freemius.php:6317
|
201 |
+
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."
|
202 |
+
msgstr ""
|
203 |
+
|
204 |
+
#: includes/class-freemius.php:6321
|
205 |
+
msgid "%s is a premium only add-on. You have to purchase a license first before activating the plugin."
|
206 |
+
msgstr ""
|
207 |
+
|
208 |
+
#: includes/class-freemius.php:6330, templates/add-ons.php:186, templates/account/partials/addon.php:386
|
209 |
+
msgid "More information about %s"
|
210 |
+
msgstr ""
|
211 |
+
|
212 |
+
#: includes/class-freemius.php:6331
|
213 |
+
msgid "Purchase License"
|
214 |
+
msgstr ""
|
215 |
+
|
216 |
+
#: includes/class-freemius.php:7318, templates/connect.php:216
|
217 |
+
msgid "You should receive a confirmation email for %s to your mailbox at %s. Please make sure you click the button in that email to %s."
|
218 |
+
msgstr ""
|
219 |
+
|
220 |
+
#: includes/class-freemius.php:7322
|
221 |
+
msgid "start the trial"
|
222 |
+
msgstr ""
|
223 |
+
|
224 |
+
#: includes/class-freemius.php:7323, templates/connect.php:220
|
225 |
+
msgid "complete the opt-in"
|
226 |
+
msgstr ""
|
227 |
+
|
228 |
+
#: includes/class-freemius.php:7456
|
229 |
+
msgid "You are just one step away - %s"
|
230 |
+
msgstr ""
|
231 |
+
|
232 |
+
#: includes/class-freemius.php:7459
|
233 |
+
msgctxt "%s - plugin name. As complete \"PluginX\" activation now"
|
234 |
+
msgid "Complete \"%s\" Activation Now"
|
235 |
+
msgstr ""
|
236 |
+
|
237 |
+
#: includes/class-freemius.php:7541
|
238 |
+
msgid "We made a few tweaks to the %s, %s"
|
239 |
+
msgstr ""
|
240 |
+
|
241 |
+
#: includes/class-freemius.php:7545
|
242 |
+
msgid "Opt in to make \"%s\" better!"
|
243 |
+
msgstr ""
|
244 |
+
|
245 |
+
#: includes/class-freemius.php:7991
|
246 |
+
msgid "The upgrade of %s was successfully completed."
|
247 |
+
msgstr ""
|
248 |
+
|
249 |
+
#: includes/class-freemius.php:10709, includes/class-fs-plugin-updater.php:1090, includes/class-fs-plugin-updater.php:1305, includes/class-fs-plugin-updater.php:1312, templates/auto-installation.php:32
|
250 |
+
msgid "Add-On"
|
251 |
+
msgstr ""
|
252 |
+
|
253 |
+
#: includes/class-freemius.php:10711, templates/account.php:411, templates/account.php:419, templates/debug.php:395, templates/debug.php:615
|
254 |
+
msgid "Plugin"
|
255 |
+
msgstr ""
|
256 |
+
|
257 |
+
#: includes/class-freemius.php:10712, templates/account.php:412, templates/account.php:420, templates/debug.php:395, templates/debug.php:615, templates/forms/deactivation/form.php:107
|
258 |
+
msgid "Theme"
|
259 |
+
msgstr ""
|
260 |
+
|
261 |
+
#: includes/class-freemius.php:13817
|
262 |
msgid "An unknown error has occurred while trying to toggle the license's white-label mode."
|
263 |
msgstr ""
|
264 |
|
265 |
+
#: includes/class-freemius.php:13831
|
266 |
+
msgid "Your %s license was flagged as white-labeled to hide sensitive information from the WP Admin (e.g. your email, license key, prices, billing address & invoices). If you ever wish to revert it back, you can easily do it through your %s. If this was a mistake you can also %s."
|
267 |
+
msgstr ""
|
268 |
+
|
269 |
+
#: includes/class-freemius.php:13836, templates/account/partials/disconnect-button.php:84
|
270 |
+
msgid "User Dashboard"
|
271 |
+
msgstr ""
|
272 |
+
|
273 |
+
#: includes/class-freemius.php:13837
|
274 |
+
msgid "revert it now"
|
275 |
+
msgstr ""
|
276 |
+
|
277 |
+
#: includes/class-freemius.php:13895
|
278 |
msgid "An unknown error has occurred while trying to set the user's beta mode."
|
279 |
msgstr ""
|
280 |
|
281 |
+
#: includes/class-freemius.php:13969
|
282 |
msgid "Invalid new user ID or email address."
|
283 |
msgstr ""
|
284 |
|
285 |
+
#: includes/class-freemius.php:13999
|
286 |
+
msgid "Sorry, we could not complete the email update. Another user with the same email is already registered."
|
287 |
+
msgstr ""
|
288 |
+
|
289 |
+
#: includes/class-freemius.php:14000
|
290 |
+
msgid "If you would like to give up the ownership of the %s's account to %s click the Change Ownership button."
|
291 |
+
msgstr ""
|
292 |
+
|
293 |
+
#: includes/class-freemius.php:14007
|
294 |
+
msgid "Change Ownership"
|
295 |
+
msgstr ""
|
296 |
+
|
297 |
+
#: includes/class-freemius.php:14614
|
298 |
+
msgid "Invalid site details collection."
|
299 |
+
msgstr ""
|
300 |
+
|
301 |
+
#: includes/class-freemius.php:14734
|
302 |
+
msgid "We couldn't find your email address in the system, are you sure it's the right address?"
|
303 |
+
msgstr ""
|
304 |
+
|
305 |
+
#: includes/class-freemius.php:14736
|
306 |
+
msgid "We can't see any active licenses associated with that email address, are you sure it's the right address?"
|
307 |
+
msgstr ""
|
308 |
+
|
309 |
+
#: includes/class-freemius.php:15034
|
310 |
+
msgid "Account is pending activation. Please check your email and click the link to activate your account and then submit the affiliate form again."
|
311 |
+
msgstr ""
|
312 |
+
|
313 |
+
#: includes/class-freemius.php:15148, templates/forms/premium-versions-upgrade-handler.php:47
|
314 |
+
msgid "Buy a license now"
|
315 |
+
msgstr ""
|
316 |
+
|
317 |
+
#: includes/class-freemius.php:15160, templates/forms/premium-versions-upgrade-handler.php:46
|
318 |
+
msgid "Renew your license now"
|
319 |
+
msgstr ""
|
320 |
+
|
321 |
+
#: includes/class-freemius.php:15164
|
322 |
+
msgid "%s to access version %s security & feature updates, and support."
|
323 |
+
msgstr ""
|
324 |
+
|
325 |
+
#: includes/class-freemius.php:17871
|
326 |
+
msgid "%s opt-in was successfully completed."
|
327 |
+
msgstr ""
|
328 |
+
|
329 |
+
#: includes/class-freemius.php:17885
|
330 |
+
msgid "Your account was successfully activated with the %s plan."
|
331 |
+
msgstr ""
|
332 |
+
|
333 |
+
#: includes/class-freemius.php:17896, includes/class-freemius.php:21803
|
334 |
+
msgid "Your trial has been successfully started."
|
335 |
+
msgstr ""
|
336 |
+
|
337 |
+
#: includes/class-freemius.php:18511, includes/class-freemius.php:18616, includes/class-freemius.php:18793
|
338 |
+
msgid "Couldn't activate %s."
|
339 |
+
msgstr ""
|
340 |
+
|
341 |
+
#: includes/class-freemius.php:18512, includes/class-freemius.php:18617, includes/class-freemius.php:18794
|
342 |
+
msgid "Please contact us with the following message:"
|
343 |
+
msgstr ""
|
344 |
+
|
345 |
+
#: includes/class-freemius.php:18613, templates/forms/data-debug-mode.php:162
|
346 |
+
msgid "An unknown error has occurred."
|
347 |
+
msgstr ""
|
348 |
+
|
349 |
+
#: includes/class-freemius.php:19153, includes/class-freemius.php:24542
|
350 |
+
msgid "Upgrade"
|
351 |
+
msgstr ""
|
352 |
+
|
353 |
+
#: includes/class-freemius.php:19159
|
354 |
+
msgid "Start Trial"
|
355 |
+
msgstr ""
|
356 |
+
|
357 |
+
#: includes/class-freemius.php:19161
|
358 |
+
msgid "Pricing"
|
359 |
+
msgstr ""
|
360 |
+
|
361 |
+
#: includes/class-freemius.php:19241, includes/class-freemius.php:19243
|
362 |
+
msgid "Affiliation"
|
363 |
+
msgstr ""
|
364 |
+
|
365 |
+
#: includes/class-freemius.php:19271, includes/class-freemius.php:19273, templates/account.php:264, templates/debug.php:362
|
366 |
+
msgid "Account"
|
367 |
+
msgstr ""
|
368 |
+
|
369 |
+
#: includes/class-freemius.php:19287, includes/class-freemius.php:19289, includes/customizer/class-fs-customizer-support-section.php:60
|
370 |
+
msgid "Contact Us"
|
371 |
+
msgstr ""
|
372 |
+
|
373 |
+
#: includes/class-freemius.php:19300, includes/class-freemius.php:19302, includes/class-freemius.php:24556, templates/account.php:134, templates/account/partials/addon.php:49
|
374 |
+
msgid "Add-Ons"
|
375 |
+
msgstr ""
|
376 |
+
|
377 |
+
#: includes/class-freemius.php:19336
|
378 |
+
msgctxt "ASCII arrow left icon"
|
379 |
+
msgid "←"
|
380 |
+
msgstr ""
|
381 |
+
|
382 |
+
#: includes/class-freemius.php:19336
|
383 |
+
msgctxt "ASCII arrow right icon"
|
384 |
+
msgid "➤"
|
385 |
+
msgstr ""
|
386 |
+
|
387 |
+
#: includes/class-freemius.php:19338, templates/pricing.php:110
|
388 |
+
msgctxt "noun"
|
389 |
+
msgid "Pricing"
|
390 |
+
msgstr ""
|
391 |
+
|
392 |
+
#: includes/class-freemius.php:19551, includes/customizer/class-fs-customizer-support-section.php:67
|
393 |
+
msgid "Support Forum"
|
394 |
+
msgstr ""
|
395 |
+
|
396 |
+
#: includes/class-freemius.php:20572
|
397 |
+
msgid "Your email has been successfully verified - you are AWESOME!"
|
398 |
+
msgstr ""
|
399 |
+
|
400 |
+
#: includes/class-freemius.php:20573
|
401 |
+
msgctxt "a positive response"
|
402 |
+
msgid "Right on"
|
403 |
+
msgstr ""
|
404 |
+
|
405 |
+
#: includes/class-freemius.php:21079
|
406 |
+
msgid "seems like the key you entered doesn't match our records."
|
407 |
+
msgstr ""
|
408 |
+
|
409 |
+
#: includes/class-freemius.php:21103
|
410 |
+
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."
|
411 |
+
msgstr ""
|
412 |
+
|
413 |
+
#: includes/class-freemius.php:21338
|
414 |
+
msgid "Your %s Add-on plan was successfully upgraded."
|
415 |
+
msgstr ""
|
416 |
+
|
417 |
+
#: includes/class-freemius.php:21340
|
418 |
+
msgid "%s Add-on was successfully purchased."
|
419 |
+
msgstr ""
|
420 |
+
|
421 |
+
#: includes/class-freemius.php:21343
|
422 |
+
msgid "Download the latest version"
|
423 |
+
msgstr ""
|
424 |
+
|
425 |
+
#: includes/class-freemius.php:21449
|
426 |
+
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"
|
427 |
+
msgstr ""
|
428 |
+
|
429 |
+
#: includes/class-freemius.php:21455, includes/class-freemius.php:21469, includes/class-freemius.php:21938, includes/class-freemius.php:22027
|
430 |
+
msgid "Error received from the server:"
|
431 |
+
msgstr ""
|
432 |
+
|
433 |
+
#: includes/class-freemius.php:21469
|
434 |
+
msgid "It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again."
|
435 |
+
msgstr ""
|
436 |
+
|
437 |
+
#: includes/class-freemius.php:21700, includes/class-freemius.php:21943, includes/class-freemius.php:21998, includes/class-freemius.php:22105
|
438 |
+
msgctxt "something somebody says when they are thinking about what you have just said."
|
439 |
+
msgid "Hmm"
|
440 |
+
msgstr ""
|
441 |
+
|
442 |
+
#: includes/class-freemius.php:21713
|
443 |
+
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."
|
444 |
+
msgstr ""
|
445 |
+
|
446 |
+
#: includes/class-freemius.php:21714, templates/account.php:136, templates/add-ons.php:250, templates/account/partials/addon.php:51
|
447 |
+
msgctxt "trial period"
|
448 |
+
msgid "Trial"
|
449 |
+
msgstr ""
|
450 |
+
|
451 |
+
#: includes/class-freemius.php:21719
|
452 |
+
msgid "I have upgraded my account but when I try to Sync the License, the plan remains %s."
|
453 |
+
msgstr ""
|
454 |
+
|
455 |
+
#: includes/class-freemius.php:21723, includes/class-freemius.php:21782
|
456 |
+
msgid "Please contact us here"
|
457 |
+
msgstr ""
|
458 |
+
|
459 |
+
#: includes/class-freemius.php:21734
|
460 |
+
msgid "Your plan was successfully activated."
|
461 |
+
msgstr ""
|
462 |
+
|
463 |
+
#: includes/class-freemius.php:21735
|
464 |
+
msgid "Your plan was successfully upgraded."
|
465 |
+
msgstr ""
|
466 |
+
|
467 |
+
#: includes/class-freemius.php:21752
|
468 |
+
msgid "Your plan was successfully changed to %s."
|
469 |
+
msgstr ""
|
470 |
+
|
471 |
+
#: includes/class-freemius.php:21768
|
472 |
+
msgid "Your license has expired. You can still continue using the free %s forever."
|
473 |
+
msgstr ""
|
474 |
+
|
475 |
+
#: includes/class-freemius.php:21770
|
476 |
+
msgid "Your license has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
477 |
+
msgstr ""
|
478 |
+
|
479 |
+
#: includes/class-freemius.php:21778
|
480 |
+
msgid "Your license has been cancelled. If you think it's a mistake, please contact support."
|
481 |
+
msgstr ""
|
482 |
+
|
483 |
+
#: includes/class-freemius.php:21791
|
484 |
+
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."
|
485 |
+
msgstr ""
|
486 |
+
|
487 |
+
#: includes/class-freemius.php:21817
|
488 |
+
msgid "Your free trial has expired. You can still continue using all our free features."
|
489 |
+
msgstr ""
|
490 |
+
|
491 |
+
#: includes/class-freemius.php:21819
|
492 |
+
msgid "Your free trial has expired. %1$sUpgrade now%2$s to continue using the %3$s without interruptions."
|
493 |
+
msgstr ""
|
494 |
+
|
495 |
+
#: includes/class-freemius.php:21934
|
496 |
+
msgid "It looks like the license could not be activated."
|
497 |
+
msgstr ""
|
498 |
+
|
499 |
+
#: includes/class-freemius.php:21976
|
500 |
+
msgid "Your license was successfully activated."
|
501 |
+
msgstr ""
|
502 |
+
|
503 |
+
#: includes/class-freemius.php:22002
|
504 |
+
msgid "It looks like your site currently doesn't have an active license."
|
505 |
+
msgstr ""
|
506 |
+
|
507 |
+
#: includes/class-freemius.php:22026
|
508 |
+
msgid "It looks like the license deactivation failed."
|
509 |
+
msgstr ""
|
510 |
+
|
511 |
+
#: includes/class-freemius.php:22055
|
512 |
+
msgid "Your %s license was successfully deactivated."
|
513 |
+
msgstr ""
|
514 |
+
|
515 |
+
#: includes/class-freemius.php:22056
|
516 |
+
msgid "Your license was successfully deactivated, you are back to the %s plan."
|
517 |
+
msgstr ""
|
518 |
+
|
519 |
+
#: includes/class-freemius.php:22059
|
520 |
+
msgid "O.K"
|
521 |
+
msgstr ""
|
522 |
+
|
523 |
+
#: includes/class-freemius.php:22112
|
524 |
+
msgid "Seems like we are having some temporary issue with your subscription cancellation. Please try again in few minutes."
|
525 |
+
msgstr ""
|
526 |
+
|
527 |
+
#: includes/class-freemius.php:22121
|
528 |
+
msgid "Your subscription was successfully cancelled. Your %s plan license will expire in %s."
|
529 |
+
msgstr ""
|
530 |
+
|
531 |
+
#: includes/class-freemius.php:22163
|
532 |
+
msgid "You are already running the %s in a trial mode."
|
533 |
+
msgstr ""
|
534 |
+
|
535 |
+
#: includes/class-freemius.php:22174
|
536 |
+
msgid "You already utilized a trial before."
|
537 |
+
msgstr ""
|
538 |
+
|
539 |
+
#: includes/class-freemius.php:22188
|
540 |
+
msgid "Plan %s do not exist, therefore, can't start a trial."
|
541 |
+
msgstr ""
|
542 |
+
|
543 |
+
#: includes/class-freemius.php:22199
|
544 |
+
msgid "Plan %s does not support a trial period."
|
545 |
+
msgstr ""
|
546 |
+
|
547 |
+
#: includes/class-freemius.php:22210
|
548 |
+
msgid "None of the %s's plans supports a trial period."
|
549 |
+
msgstr ""
|
550 |
+
|
551 |
+
#: includes/class-freemius.php:22259
|
552 |
+
msgid "It looks like you are not in trial mode anymore so there's nothing to cancel :)"
|
553 |
+
msgstr ""
|
554 |
+
|
555 |
+
#: includes/class-freemius.php:22295
|
556 |
+
msgid "Seems like we are having some temporary issue with your trial cancellation. Please try again in few minutes."
|
557 |
+
msgstr ""
|
558 |
+
|
559 |
+
#: includes/class-freemius.php:22314
|
560 |
+
msgid "Your %s free trial was successfully cancelled."
|
561 |
+
msgstr ""
|
562 |
+
|
563 |
+
#: includes/class-freemius.php:22641
|
564 |
+
msgid "Version %s was released."
|
565 |
+
msgstr ""
|
566 |
+
|
567 |
+
#: includes/class-freemius.php:22641
|
568 |
+
msgid "Please download %s."
|
569 |
+
msgstr ""
|
570 |
+
|
571 |
+
#: includes/class-freemius.php:22648
|
572 |
+
msgid "the latest %s version here"
|
573 |
+
msgstr ""
|
574 |
+
|
575 |
+
#: includes/class-freemius.php:22653
|
576 |
+
msgid "New"
|
577 |
+
msgstr ""
|
578 |
+
|
579 |
+
#: includes/class-freemius.php:22658
|
580 |
+
msgid "Seems like you got the latest release."
|
581 |
+
msgstr ""
|
582 |
+
|
583 |
+
#: includes/class-freemius.php:22659
|
584 |
+
msgid "You are all good!"
|
585 |
+
msgstr ""
|
586 |
+
|
587 |
+
#: includes/class-freemius.php:23062
|
588 |
+
msgid "Verification mail was just sent to %s. If you can't find it after 5 min, please check your spam box."
|
589 |
+
msgstr ""
|
590 |
+
|
591 |
+
#: includes/class-freemius.php:23202
|
592 |
+
msgid "Site successfully opted in."
|
593 |
+
msgstr ""
|
594 |
+
|
595 |
+
#: includes/class-freemius.php:23203, includes/class-freemius.php:24252
|
596 |
+
msgid "Awesome"
|
597 |
+
msgstr ""
|
598 |
+
|
599 |
+
#: includes/class-freemius.php:23219
|
600 |
+
msgid "Sharing diagnostic data with %s helps to provide functionality that's more relevant to your website, avoid WordPress or PHP version incompatibilities that can break your website, and recognize which languages & regions the plugin should be translated and tailored to."
|
601 |
+
msgstr ""
|
602 |
+
|
603 |
+
#: includes/class-freemius.php:23220
|
604 |
+
msgid "Thank you!"
|
605 |
+
msgstr ""
|
606 |
+
|
607 |
+
#: includes/class-freemius.php:23229
|
608 |
+
msgid "Diagnostic data will no longer be sent from %s to %s."
|
609 |
+
msgstr ""
|
610 |
+
|
611 |
+
#: includes/class-freemius.php:23384
|
612 |
+
msgid "A confirmation email was just sent to %s. The email owner must confirm the update within the next 4 hours."
|
613 |
+
msgstr ""
|
614 |
+
|
615 |
+
#: includes/class-freemius.php:23386
|
616 |
+
msgid "A confirmation email was just sent to %s. You must confirm the update within the next 4 hours. If you cannot find the email, please check your spam folder."
|
617 |
+
msgstr ""
|
618 |
+
|
619 |
+
#: includes/class-freemius.php:23393
|
620 |
+
msgid "Thanks for confirming the ownership change. An email was just sent to %s for final approval."
|
621 |
+
msgstr ""
|
622 |
+
|
623 |
+
#: includes/class-freemius.php:23398
|
624 |
+
msgid "%s is the new owner of the account."
|
625 |
+
msgstr ""
|
626 |
+
|
627 |
+
#: includes/class-freemius.php:23400
|
628 |
+
msgctxt "as congratulations"
|
629 |
+
msgid "Congrats"
|
630 |
+
msgstr ""
|
631 |
+
|
632 |
+
#: includes/class-freemius.php:23417
|
633 |
+
msgid "Please provide your full name."
|
634 |
+
msgstr ""
|
635 |
+
|
636 |
+
#: includes/class-freemius.php:23422
|
637 |
+
msgid "Your name was successfully updated."
|
638 |
+
msgstr ""
|
639 |
+
|
640 |
+
#: includes/class-freemius.php:23483
|
641 |
+
msgid "You have successfully updated your %s."
|
642 |
+
msgstr ""
|
643 |
+
|
644 |
+
#: includes/class-freemius.php:23542
|
645 |
+
msgid "Is this your client's site? %s if you wish to hide sensitive info like your email, license key, prices, billing address & invoices from the WP Admin."
|
646 |
+
msgstr ""
|
647 |
+
|
648 |
+
#: includes/class-freemius.php:23545
|
649 |
+
msgid "Click here"
|
650 |
+
msgstr ""
|
651 |
+
|
652 |
+
#: includes/class-freemius.php:23582, includes/class-freemius.php:23579
|
653 |
msgid "Bundle"
|
654 |
msgstr ""
|
655 |
|
656 |
+
#: includes/class-freemius.php:23662
|
657 |
+
msgid "Just letting you know that the add-ons information of %s is being pulled from an external server."
|
658 |
+
msgstr ""
|
659 |
+
|
660 |
+
#: includes/class-freemius.php:23663
|
661 |
+
msgctxt "advance notice of something that will need attention."
|
662 |
+
msgid "Heads up"
|
663 |
+
msgstr ""
|
664 |
+
|
665 |
+
#: includes/class-freemius.php:24292
|
666 |
+
msgctxt "exclamation"
|
667 |
+
msgid "Hey"
|
668 |
+
msgstr ""
|
669 |
+
|
670 |
+
#: includes/class-freemius.php:24292
|
671 |
+
msgid "How do you like %s so far? Test all our %s premium features with a %d-day free trial."
|
672 |
+
msgstr ""
|
673 |
+
|
674 |
+
#: includes/class-freemius.php:24300
|
675 |
+
msgid "No commitment for %s days - cancel anytime!"
|
676 |
+
msgstr ""
|
677 |
+
|
678 |
+
#: includes/class-freemius.php:24301
|
679 |
+
msgid "No credit card required"
|
680 |
+
msgstr ""
|
681 |
+
|
682 |
+
#: includes/class-freemius.php:24308, templates/forms/trial-start.php:53
|
683 |
+
msgctxt "call to action"
|
684 |
+
msgid "Start free trial"
|
685 |
+
msgstr ""
|
686 |
+
|
687 |
+
#: includes/class-freemius.php:24385
|
688 |
+
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!"
|
689 |
+
msgstr ""
|
690 |
+
|
691 |
+
#: includes/class-freemius.php:24394
|
692 |
+
msgid "Learn more"
|
693 |
+
msgstr ""
|
694 |
+
|
695 |
+
#: includes/class-freemius.php:24580, templates/account.php:573, templates/account.php:725, templates/connect.php:223, templates/connect.php:449, includes/managers/class-fs-clone-manager.php:1295, templates/forms/license-activation.php:27, templates/account/partials/addon.php:326
|
696 |
+
msgid "Activate License"
|
697 |
+
msgstr ""
|
698 |
+
|
699 |
+
#: includes/class-freemius.php:24581, templates/account.php:667, templates/account.php:724, templates/account/partials/addon.php:327, templates/account/partials/site.php:273
|
700 |
+
msgid "Change License"
|
701 |
+
msgstr ""
|
702 |
+
|
703 |
+
#: includes/class-freemius.php:24688, templates/account/partials/site.php:170
|
704 |
+
msgid "Opt Out"
|
705 |
+
msgstr ""
|
706 |
+
|
707 |
+
#: includes/class-freemius.php:24690, includes/class-freemius.php:24696, templates/account/partials/site.php:49, templates/account/partials/site.php:170
|
708 |
+
msgid "Opt In"
|
709 |
+
msgstr ""
|
710 |
+
|
711 |
+
#: includes/class-freemius.php:24931
|
712 |
+
msgid " The paid version of %1$s is already installed. Please activate it to start benefiting the %2$s features. %3$s"
|
713 |
+
msgstr ""
|
714 |
+
|
715 |
+
#: includes/class-freemius.php:24941
|
716 |
+
msgid "Activate %s features"
|
717 |
+
msgstr ""
|
718 |
+
|
719 |
+
#: includes/class-freemius.php:24954
|
720 |
+
msgid "Please follow these steps to complete the upgrade"
|
721 |
+
msgstr ""
|
722 |
+
|
723 |
+
#: includes/class-freemius.php:24958
|
724 |
+
msgid "Download the latest %s version"
|
725 |
+
msgstr ""
|
726 |
+
|
727 |
+
#: includes/class-freemius.php:24962
|
728 |
+
msgid "Upload and activate the downloaded version"
|
729 |
+
msgstr ""
|
730 |
+
|
731 |
+
#: includes/class-freemius.php:24964
|
732 |
+
msgid "How to upload and activate?"
|
733 |
+
msgstr ""
|
734 |
+
|
735 |
+
#: includes/class-freemius.php:25098
|
736 |
+
msgid "%sClick here%s to choose the sites where you'd like to activate the license on."
|
737 |
+
msgstr ""
|
738 |
+
|
739 |
+
#: includes/class-freemius.php:25267
|
740 |
+
msgid "Auto installation only works for opted-in users."
|
741 |
+
msgstr ""
|
742 |
+
|
743 |
+
#: includes/class-freemius.php:25277, includes/class-freemius.php:25310, includes/class-fs-plugin-updater.php:1284, includes/class-fs-plugin-updater.php:1298
|
744 |
+
msgid "Invalid module ID."
|
745 |
+
msgstr ""
|
746 |
+
|
747 |
+
#: includes/class-freemius.php:25286, includes/class-fs-plugin-updater.php:1320
|
748 |
+
msgid "Premium version already active."
|
749 |
+
msgstr ""
|
750 |
+
|
751 |
+
#: includes/class-freemius.php:25293
|
752 |
+
msgid "You do not have a valid license to access the premium version."
|
753 |
+
msgstr ""
|
754 |
+
|
755 |
+
#: includes/class-freemius.php:25300
|
756 |
+
msgid "Plugin is a \"Serviceware\" which means it does not have a premium code version."
|
757 |
+
msgstr ""
|
758 |
+
|
759 |
+
#: includes/class-freemius.php:25318, includes/class-fs-plugin-updater.php:1319
|
760 |
+
msgid "Premium add-on version already installed."
|
761 |
+
msgstr ""
|
762 |
+
|
763 |
+
#: includes/class-freemius.php:25672
|
764 |
+
msgid "View paid features"
|
765 |
+
msgstr ""
|
766 |
+
|
767 |
+
#: includes/class-freemius.php:25994
|
768 |
+
msgid "Thank you so much for using %s and its add-ons!"
|
769 |
+
msgstr ""
|
770 |
+
|
771 |
+
#: includes/class-freemius.php:25995
|
772 |
+
msgid "Thank you so much for using %s!"
|
773 |
+
msgstr ""
|
774 |
+
|
775 |
+
#: includes/class-freemius.php:26001
|
776 |
+
msgid "You've already opted-in to our usage-tracking, which helps us keep improving the %s."
|
777 |
+
msgstr ""
|
778 |
+
|
779 |
+
#: includes/class-freemius.php:26005
|
780 |
+
msgid "Thank you so much for using our products!"
|
781 |
+
msgstr ""
|
782 |
+
|
783 |
+
#: includes/class-freemius.php:26006
|
784 |
+
msgid "You've already opted-in to our usage-tracking, which helps us keep improving them."
|
785 |
+
msgstr ""
|
786 |
+
|
787 |
+
#: includes/class-freemius.php:26025
|
788 |
+
msgid "%s and its add-ons"
|
789 |
+
msgstr ""
|
790 |
+
|
791 |
+
#: includes/class-freemius.php:26034
|
792 |
+
msgid "Products"
|
793 |
+
msgstr ""
|
794 |
+
|
795 |
+
#: includes/class-freemius.php:26041, templates/connect.php:324
|
796 |
+
msgid "Yes"
|
797 |
+
msgstr ""
|
798 |
+
|
799 |
+
#: includes/class-freemius.php:26042, templates/connect.php:325
|
800 |
+
msgid "send me security & feature updates, educational content and offers."
|
801 |
+
msgstr ""
|
802 |
+
|
803 |
+
#: includes/class-freemius.php:26043, templates/connect.php:330
|
804 |
+
msgid "No"
|
805 |
+
msgstr ""
|
806 |
+
|
807 |
+
#: includes/class-freemius.php:26045, templates/connect.php:332
|
808 |
+
msgid "do %sNOT%s send me security & feature updates, educational content and offers."
|
809 |
+
msgstr ""
|
810 |
+
|
811 |
+
#: includes/class-freemius.php:26055
|
812 |
+
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 :-)"
|
813 |
+
msgstr ""
|
814 |
+
|
815 |
+
#: includes/class-freemius.php:26057, templates/connect.php:339
|
816 |
+
msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
|
817 |
+
msgstr ""
|
818 |
+
|
819 |
+
#: includes/class-freemius.php:26339
|
820 |
+
msgid "License key is empty."
|
821 |
+
msgstr ""
|
822 |
+
|
823 |
#: includes/class-fs-plugin-updater.php:206, templates/forms/premium-versions-upgrade-handler.php:57
|
824 |
msgid "Renew license"
|
825 |
msgstr ""
|
828 |
msgid "Buy license"
|
829 |
msgstr ""
|
830 |
|
831 |
+
#: includes/class-fs-plugin-updater.php:331, includes/class-fs-plugin-updater.php:364
|
832 |
msgid "There is a %s of %s available."
|
833 |
msgstr ""
|
834 |
|
835 |
+
#: includes/class-fs-plugin-updater.php:333, includes/class-fs-plugin-updater.php:369
|
836 |
msgid "new Beta version"
|
837 |
msgstr ""
|
838 |
|
839 |
+
#: includes/class-fs-plugin-updater.php:334, includes/class-fs-plugin-updater.php:370
|
840 |
msgid "new version"
|
841 |
msgstr ""
|
842 |
|
844 |
msgid "Important Upgrade Notice:"
|
845 |
msgstr ""
|
846 |
|
847 |
+
#: includes/class-fs-plugin-updater.php:1349
|
848 |
+
msgid "Installing plugin: %s"
|
849 |
+
msgstr ""
|
850 |
+
|
851 |
+
#: includes/class-fs-plugin-updater.php:1390
|
852 |
+
msgid "Unable to connect to the filesystem. Please confirm your credentials."
|
853 |
+
msgstr ""
|
854 |
+
|
855 |
+
#: includes/class-fs-plugin-updater.php:1572
|
856 |
msgid "The remote plugin package does not contain a folder with the desired slug and renaming did not work."
|
857 |
msgstr ""
|
858 |
|
859 |
+
#: includes/fs-plugin-info-dialog.php:542
|
860 |
msgid "Purchase More"
|
861 |
msgstr ""
|
862 |
|
863 |
+
#: includes/fs-plugin-info-dialog.php:543, templates/account/partials/addon.php:390
|
864 |
msgctxt "verb"
|
865 |
msgid "Purchase"
|
866 |
msgstr ""
|
867 |
|
868 |
+
#: includes/fs-plugin-info-dialog.php:547
|
|
|
869 |
msgid "Start my free %s"
|
870 |
msgstr ""
|
871 |
|
872 |
+
#: includes/fs-plugin-info-dialog.php:745
|
873 |
+
msgid "Install Free Version Update Now"
|
874 |
msgstr ""
|
875 |
|
876 |
+
#: includes/fs-plugin-info-dialog.php:746, templates/account.php:656
|
877 |
+
msgid "Install Update Now"
|
878 |
msgstr ""
|
879 |
|
880 |
+
#: includes/fs-plugin-info-dialog.php:755
|
881 |
+
msgid "Install Free Version Now"
|
882 |
msgstr ""
|
883 |
|
884 |
+
#: includes/fs-plugin-info-dialog.php:756, templates/add-ons.php:323, templates/auto-installation.php:111, templates/account/partials/addon.php:370, templates/account/partials/addon.php:423
|
885 |
+
msgid "Install Now"
|
886 |
msgstr ""
|
887 |
|
888 |
+
#: includes/fs-plugin-info-dialog.php:772
|
889 |
msgctxt "as download latest version"
|
890 |
msgid "Download Latest Free Version"
|
891 |
msgstr ""
|
892 |
|
893 |
+
#: includes/fs-plugin-info-dialog.php:773, templates/account.php:114, templates/add-ons.php:37, templates/account/partials/addon.php:30
|
894 |
msgctxt "as download latest version"
|
895 |
msgid "Download Latest"
|
896 |
msgstr ""
|
897 |
|
898 |
+
#: includes/fs-plugin-info-dialog.php:788, templates/add-ons.php:329, templates/account/partials/addon.php:361, templates/account/partials/addon.php:417
|
899 |
msgid "Activate this add-on"
|
900 |
msgstr ""
|
901 |
|
902 |
+
#: includes/fs-plugin-info-dialog.php:790, templates/connect.php:446
|
903 |
msgid "Activate Free Version"
|
904 |
msgstr ""
|
905 |
|
906 |
+
#: includes/fs-plugin-info-dialog.php:791, templates/account.php:138, templates/add-ons.php:330, templates/account/partials/addon.php:53
|
907 |
msgid "Activate"
|
908 |
msgstr ""
|
909 |
|
910 |
+
#: includes/fs-plugin-info-dialog.php:1003
|
911 |
msgctxt "Plugin installer section title"
|
912 |
msgid "Description"
|
913 |
msgstr ""
|
914 |
|
915 |
+
#: includes/fs-plugin-info-dialog.php:1004
|
916 |
msgctxt "Plugin installer section title"
|
917 |
msgid "Installation"
|
918 |
msgstr ""
|
919 |
|
920 |
+
#: includes/fs-plugin-info-dialog.php:1005
|
921 |
msgctxt "Plugin installer section title"
|
922 |
msgid "FAQ"
|
923 |
msgstr ""
|
924 |
|
925 |
+
#: includes/fs-plugin-info-dialog.php:1006, templates/plugin-info/description.php:55
|
926 |
msgid "Screenshots"
|
927 |
msgstr ""
|
928 |
|
929 |
+
#: includes/fs-plugin-info-dialog.php:1007
|
930 |
msgctxt "Plugin installer section title"
|
931 |
msgid "Changelog"
|
932 |
msgstr ""
|
933 |
|
934 |
+
#: includes/fs-plugin-info-dialog.php:1008
|
935 |
msgctxt "Plugin installer section title"
|
936 |
msgid "Reviews"
|
937 |
msgstr ""
|
938 |
|
939 |
+
#: includes/fs-plugin-info-dialog.php:1009
|
940 |
msgctxt "Plugin installer section title"
|
941 |
msgid "Other Notes"
|
942 |
msgstr ""
|
943 |
|
944 |
+
#: includes/fs-plugin-info-dialog.php:1024
|
945 |
msgctxt "Plugin installer section title"
|
946 |
msgid "Features & Pricing"
|
947 |
msgstr ""
|
948 |
|
949 |
+
#: includes/fs-plugin-info-dialog.php:1034
|
950 |
msgid "Plugin Install"
|
951 |
msgstr ""
|
952 |
|
953 |
+
#: includes/fs-plugin-info-dialog.php:1106
|
954 |
msgctxt "e.g. Professional Plan"
|
955 |
msgid "%s Plan"
|
956 |
msgstr ""
|
957 |
|
958 |
+
#: includes/fs-plugin-info-dialog.php:1132
|
959 |
msgctxt "e.g. the best product"
|
960 |
msgid "Best"
|
961 |
msgstr ""
|
962 |
|
963 |
+
#: includes/fs-plugin-info-dialog.php:1138, includes/fs-plugin-info-dialog.php:1158
|
964 |
msgctxt "as every month"
|
965 |
msgid "Monthly"
|
966 |
msgstr ""
|
967 |
|
968 |
+
#: includes/fs-plugin-info-dialog.php:1141
|
969 |
msgctxt "as once a year"
|
970 |
msgid "Annual"
|
971 |
msgstr ""
|
972 |
|
973 |
+
#: includes/fs-plugin-info-dialog.php:1144
|
974 |
msgid "Lifetime"
|
975 |
msgstr ""
|
976 |
|
977 |
+
#: includes/fs-plugin-info-dialog.php:1158, includes/fs-plugin-info-dialog.php:1160, includes/fs-plugin-info-dialog.php:1162
|
978 |
msgctxt "e.g. billed monthly"
|
979 |
msgid "Billed %s"
|
980 |
msgstr ""
|
981 |
|
982 |
+
#: includes/fs-plugin-info-dialog.php:1160
|
983 |
msgctxt "as once a year"
|
984 |
msgid "Annually"
|
985 |
msgstr ""
|
986 |
|
987 |
+
#: includes/fs-plugin-info-dialog.php:1162
|
988 |
msgctxt "as once a year"
|
989 |
msgid "Once"
|
990 |
msgstr ""
|
991 |
|
992 |
+
#: includes/fs-plugin-info-dialog.php:1168
|
993 |
msgid "Single Site License"
|
994 |
msgstr ""
|
995 |
|
996 |
+
#: includes/fs-plugin-info-dialog.php:1170
|
997 |
msgid "Unlimited Licenses"
|
998 |
msgstr ""
|
999 |
|
1000 |
+
#: includes/fs-plugin-info-dialog.php:1172
|
1001 |
msgid "Up to %s Sites"
|
1002 |
msgstr ""
|
1003 |
|
1004 |
+
#: includes/fs-plugin-info-dialog.php:1182, templates/plugin-info/features.php:82
|
1005 |
msgctxt "as monthly period"
|
1006 |
msgid "mo"
|
1007 |
msgstr ""
|
1008 |
|
1009 |
+
#: includes/fs-plugin-info-dialog.php:1189, templates/plugin-info/features.php:80
|
1010 |
msgctxt "as annual period"
|
1011 |
msgid "year"
|
1012 |
msgstr ""
|
1013 |
|
1014 |
+
#: includes/fs-plugin-info-dialog.php:1243
|
1015 |
msgctxt "noun"
|
1016 |
msgid "Price"
|
1017 |
msgstr ""
|
1018 |
|
1019 |
+
#: includes/fs-plugin-info-dialog.php:1291
|
|
|
1020 |
msgid "Save %s"
|
1021 |
msgstr ""
|
1022 |
|
1023 |
+
#: includes/fs-plugin-info-dialog.php:1301
|
1024 |
msgid "No commitment for %s - cancel anytime"
|
1025 |
msgstr ""
|
1026 |
|
1027 |
+
#: includes/fs-plugin-info-dialog.php:1304
|
1028 |
msgid "After your free %s, pay as little as %s"
|
1029 |
msgstr ""
|
1030 |
|
1031 |
+
#: includes/fs-plugin-info-dialog.php:1315
|
1032 |
msgid "Details"
|
1033 |
msgstr ""
|
1034 |
|
1035 |
+
#: includes/fs-plugin-info-dialog.php:1319, templates/account.php:125, templates/debug.php:232, templates/debug.php:269, templates/debug.php:514, templates/account/partials/addon.php:41
|
1036 |
msgctxt "product version"
|
1037 |
msgid "Version"
|
1038 |
msgstr ""
|
1039 |
|
1040 |
+
#: includes/fs-plugin-info-dialog.php:1326
|
1041 |
msgctxt "as the plugin author"
|
1042 |
msgid "Author"
|
1043 |
msgstr ""
|
1044 |
|
1045 |
+
#: includes/fs-plugin-info-dialog.php:1333
|
1046 |
msgid "Last Updated"
|
1047 |
msgstr ""
|
1048 |
|
1049 |
+
#: includes/fs-plugin-info-dialog.php:1338, templates/account.php:544
|
|
|
1050 |
msgctxt "x-ago"
|
1051 |
msgid "%s ago"
|
1052 |
msgstr ""
|
1053 |
|
1054 |
+
#: includes/fs-plugin-info-dialog.php:1347
|
1055 |
msgid "Requires WordPress Version"
|
1056 |
msgstr ""
|
1057 |
|
1058 |
+
#: includes/fs-plugin-info-dialog.php:1350, includes/fs-plugin-info-dialog.php:1370
|
1059 |
msgid "%s or higher"
|
1060 |
msgstr ""
|
1061 |
|
1062 |
+
#: includes/fs-plugin-info-dialog.php:1358
|
1063 |
msgid "Compatible up to"
|
1064 |
msgstr ""
|
1065 |
|
1066 |
+
#: includes/fs-plugin-info-dialog.php:1366
|
1067 |
+
msgid "Requires PHP Version"
|
1068 |
+
msgstr ""
|
1069 |
+
|
1070 |
+
#: includes/fs-plugin-info-dialog.php:1379
|
1071 |
msgid "Downloaded"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
+
#: includes/fs-plugin-info-dialog.php:1383
|
|
|
1075 |
msgid "%s time"
|
1076 |
msgstr ""
|
1077 |
|
1078 |
+
#: includes/fs-plugin-info-dialog.php:1385
|
|
|
1079 |
msgid "%s times"
|
1080 |
msgstr ""
|
1081 |
|
1082 |
+
#: includes/fs-plugin-info-dialog.php:1396
|
1083 |
msgid "WordPress.org Plugin Page"
|
1084 |
msgstr ""
|
1085 |
|
1086 |
+
#: includes/fs-plugin-info-dialog.php:1405
|
1087 |
msgid "Plugin Homepage"
|
1088 |
msgstr ""
|
1089 |
|
1090 |
+
#: includes/fs-plugin-info-dialog.php:1414, includes/fs-plugin-info-dialog.php:1498
|
1091 |
msgid "Donate to this plugin"
|
1092 |
msgstr ""
|
1093 |
|
1094 |
+
#: includes/fs-plugin-info-dialog.php:1421
|
1095 |
msgid "Average Rating"
|
1096 |
msgstr ""
|
1097 |
|
1098 |
+
#: includes/fs-plugin-info-dialog.php:1428
|
1099 |
msgid "based on %s"
|
1100 |
msgstr ""
|
1101 |
|
1102 |
+
#: includes/fs-plugin-info-dialog.php:1432
|
|
|
1103 |
msgid "%s rating"
|
1104 |
msgstr ""
|
1105 |
|
1106 |
+
#: includes/fs-plugin-info-dialog.php:1434
|
|
|
1107 |
msgid "%s ratings"
|
1108 |
msgstr ""
|
1109 |
|
1110 |
+
#: includes/fs-plugin-info-dialog.php:1449
|
|
|
1111 |
msgid "%s star"
|
1112 |
msgstr ""
|
1113 |
|
1114 |
+
#: includes/fs-plugin-info-dialog.php:1451
|
|
|
1115 |
msgid "%s stars"
|
1116 |
msgstr ""
|
1117 |
|
1118 |
+
#: includes/fs-plugin-info-dialog.php:1463
|
|
|
1119 |
msgid "Click to see reviews that provided a rating of %s"
|
1120 |
msgstr ""
|
1121 |
|
1122 |
+
#: includes/fs-plugin-info-dialog.php:1476
|
1123 |
msgid "Contributors"
|
1124 |
msgstr ""
|
1125 |
|
1126 |
+
#: includes/fs-plugin-info-dialog.php:1517
|
1127 |
+
msgid "This plugin requires a newer version of PHP."
|
1128 |
msgstr ""
|
1129 |
|
1130 |
+
#: includes/fs-plugin-info-dialog.php:1526
|
1131 |
+
msgid "<a href=\"%s\" target=\"_blank\">Click here to learn more about updating PHP</a>."
|
1132 |
+
msgstr ""
|
1133 |
+
|
1134 |
+
#: includes/fs-plugin-info-dialog.php:1540, includes/fs-plugin-info-dialog.php:1542
|
1135 |
+
msgid "Warning"
|
1136 |
msgstr ""
|
1137 |
|
1138 |
+
#: includes/fs-plugin-info-dialog.php:1540
|
1139 |
msgid "This plugin has not been tested with your current version of WordPress."
|
1140 |
msgstr ""
|
1141 |
|
1142 |
+
#: includes/fs-plugin-info-dialog.php:1542
|
1143 |
+
msgid "This plugin has not been marked as compatible with your version of WordPress."
|
1144 |
+
msgstr ""
|
1145 |
+
|
1146 |
+
#: includes/fs-plugin-info-dialog.php:1561
|
1147 |
msgid "Paid add-on must be deployed to Freemius."
|
1148 |
msgstr ""
|
1149 |
|
1150 |
+
#: includes/fs-plugin-info-dialog.php:1562
|
1151 |
msgid "Add-on must be deployed to WordPress.org or Freemius."
|
1152 |
msgstr ""
|
1153 |
|
1154 |
+
#: includes/fs-plugin-info-dialog.php:1583
|
1155 |
+
msgid "Newer Version (%s) Installed"
|
1156 |
msgstr ""
|
1157 |
|
1158 |
+
#: includes/fs-plugin-info-dialog.php:1584
|
1159 |
+
msgid "Newer Free Version (%s) Installed"
|
1160 |
msgstr ""
|
1161 |
|
1162 |
+
#: includes/fs-plugin-info-dialog.php:1591
|
1163 |
+
msgid "Latest Version Installed"
|
1164 |
msgstr ""
|
1165 |
|
1166 |
+
#: includes/fs-plugin-info-dialog.php:1592
|
1167 |
+
msgid "Latest Free Version Installed"
|
1168 |
msgstr ""
|
1169 |
|
1170 |
+
#: templates/account.php:115, templates/forms/subscription-cancellation.php:96, templates/account/partials/addon.php:31, templates/account/partials/site.php:313
|
1171 |
msgid "Downgrading your plan"
|
1172 |
msgstr ""
|
1173 |
|
1174 |
+
#: templates/account.php:116, templates/forms/subscription-cancellation.php:97, templates/account/partials/addon.php:32, templates/account/partials/site.php:314
|
1175 |
msgid "Cancelling the subscription"
|
1176 |
msgstr ""
|
1177 |
|
1178 |
#. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
|
1179 |
+
#: templates/account.php:118, templates/forms/subscription-cancellation.php:99, templates/account/partials/site.php:316
|
1180 |
msgid "%1$s will immediately stop all future recurring payments and your %2$s plan license will expire in %3$s."
|
1181 |
msgstr ""
|
1182 |
|
1183 |
+
#: templates/account.php:119, templates/forms/subscription-cancellation.php:100, templates/account/partials/addon.php:35, templates/account/partials/site.php:317
|
1184 |
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."
|
1185 |
msgstr ""
|
1186 |
|
1187 |
+
#: templates/account.php:120, templates/forms/subscription-cancellation.php:106, templates/account/partials/addon.php:36
|
1188 |
msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
|
1189 |
msgstr ""
|
1190 |
|
1191 |
+
#: templates/account.php:121, templates/forms/subscription-cancellation.php:101, templates/account/partials/addon.php:37, templates/account/partials/site.php:318
|
1192 |
msgid "You can still enjoy all %s features but you will not have access to %s security & feature updates, nor support."
|
1193 |
msgstr ""
|
1194 |
|
1195 |
+
#: templates/account.php:122, templates/forms/subscription-cancellation.php:102, templates/account/partials/addon.php:38, templates/account/partials/site.php:319
|
1196 |
msgid "Once your license expires you can still use the Free version but you will NOT have access to the %s features."
|
1197 |
msgstr ""
|
1198 |
|
1199 |
#. translators: %s: Plan title (e.g. "Professional")
|
1200 |
+
#: templates/account.php:124, templates/account/partials/activate-license-button.php:31, templates/account/partials/addon.php:40
|
1201 |
msgid "Activate %s Plan"
|
1202 |
msgstr ""
|
1203 |
|
1204 |
#. translators: %s: Time period (e.g. Auto renews in "2 months")
|
1205 |
+
#: templates/account.php:127, templates/account/partials/addon.php:43, templates/account/partials/site.php:293
|
1206 |
msgid "Auto renews in %s"
|
1207 |
msgstr ""
|
1208 |
|
1209 |
#. translators: %s: Time period (e.g. Expires in "2 months")
|
1210 |
+
#: templates/account.php:129, templates/account/partials/addon.php:45, templates/account/partials/site.php:295
|
1211 |
msgid "Expires in %s"
|
1212 |
msgstr ""
|
1213 |
|
1214 |
+
#: templates/account.php:130
|
1215 |
msgctxt "as synchronize license"
|
1216 |
msgid "Sync License"
|
1217 |
msgstr ""
|
1218 |
|
1219 |
+
#: templates/account.php:131, templates/account/partials/addon.php:46
|
1220 |
msgid "Cancel Trial"
|
1221 |
msgstr ""
|
1222 |
|
1223 |
+
#: templates/account.php:132, templates/account/partials/addon.php:47
|
1224 |
msgid "Change Plan"
|
1225 |
msgstr ""
|
1226 |
|
1227 |
+
#: templates/account.php:133, templates/account/partials/addon.php:48
|
1228 |
msgctxt "verb"
|
1229 |
msgid "Upgrade"
|
1230 |
msgstr ""
|
1231 |
|
1232 |
+
#: templates/account.php:135, templates/account/partials/addon.php:50, templates/account/partials/site.php:320
|
|
|
|
|
|
|
|
|
1233 |
msgctxt "verb"
|
1234 |
msgid "Downgrade"
|
1235 |
msgstr ""
|
1236 |
|
1237 |
+
#: templates/account.php:137, templates/add-ons.php:246, templates/plugin-info/features.php:72, templates/account/partials/addon.php:52, templates/account/partials/site.php:33
|
|
|
|
|
|
|
|
|
|
|
1238 |
msgid "Free"
|
1239 |
msgstr ""
|
1240 |
|
1241 |
+
#: templates/account.php:139, templates/debug.php:408, includes/customizer/class-fs-customizer-upsell-control.php:110, templates/account/partials/addon.php:54
|
1242 |
msgctxt "as product pricing plan"
|
1243 |
msgid "Plan"
|
1244 |
msgstr ""
|
1245 |
|
1246 |
+
#: templates/account.php:140
|
1247 |
msgid "Bundle Plan"
|
1248 |
msgstr ""
|
1249 |
|
1250 |
+
#: templates/account.php:272
|
|
|
|
|
|
|
|
|
1251 |
msgid "Free Trial"
|
1252 |
msgstr ""
|
1253 |
|
1254 |
+
#: templates/account.php:283
|
1255 |
msgid "Account Details"
|
1256 |
msgstr ""
|
1257 |
|
1258 |
+
#: templates/account.php:290, templates/forms/data-debug-mode.php:33
|
|
|
|
|
|
|
|
|
1259 |
msgid "Start Debug"
|
1260 |
msgstr ""
|
1261 |
|
1262 |
+
#: templates/account.php:292
|
1263 |
+
msgid "Stop Debug"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
#: templates/account.php:299
|
1267 |
+
msgid "Billing & Invoices"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1268 |
msgstr ""
|
1269 |
|
1270 |
+
#: templates/account.php:322, templates/account/partials/addon.php:236, templates/account/partials/deactivate-license-button.php:35
|
1271 |
msgid "Deactivate License"
|
1272 |
msgstr ""
|
1273 |
|
1274 |
+
#: templates/account.php:345, templates/forms/subscription-cancellation.php:125
|
1275 |
msgid "Are you sure you want to proceed?"
|
1276 |
msgstr ""
|
1277 |
|
1278 |
+
#: templates/account.php:345, templates/account/partials/addon.php:260
|
1279 |
msgid "Cancel Subscription"
|
1280 |
msgstr ""
|
1281 |
|
1282 |
+
#: templates/account.php:374, templates/account/partials/addon.php:345
|
1283 |
msgctxt "as synchronize"
|
1284 |
msgid "Sync"
|
1285 |
msgstr ""
|
1286 |
|
1287 |
+
#: templates/account.php:389, templates/debug.php:571
|
1288 |
msgid "Name"
|
1289 |
msgstr ""
|
1290 |
|
1291 |
+
#: templates/account.php:395, templates/debug.php:572
|
1292 |
msgid "Email"
|
1293 |
msgstr ""
|
1294 |
|
1295 |
+
#: templates/account.php:402, templates/debug.php:406, templates/debug.php:621
|
1296 |
msgid "User ID"
|
1297 |
msgstr ""
|
1298 |
|
1299 |
+
#: templates/account.php:420, templates/account.php:738, templates/account.php:789, templates/debug.php:267, templates/debug.php:400, templates/debug.php:511, templates/debug.php:570, templates/debug.php:619, templates/debug.php:698, templates/account/payments.php:35, templates/debug/logger.php:21
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1300 |
msgid "ID"
|
1301 |
msgstr ""
|
1302 |
|
1303 |
+
#: templates/account.php:427
|
1304 |
msgid "Site ID"
|
1305 |
msgstr ""
|
1306 |
|
1307 |
+
#: templates/account.php:430
|
1308 |
msgid "No ID"
|
1309 |
msgstr ""
|
1310 |
|
1311 |
+
#: templates/account.php:435, templates/debug.php:274, templates/debug.php:409, templates/debug.php:515, templates/debug.php:574, templates/account/partials/site.php:228
|
1312 |
msgid "Public Key"
|
1313 |
msgstr ""
|
1314 |
|
1315 |
+
#: templates/account.php:441, templates/debug.php:410, templates/debug.php:516, templates/debug.php:575, templates/account/partials/site.php:241
|
1316 |
msgid "Secret Key"
|
1317 |
msgstr ""
|
1318 |
|
1319 |
+
#: templates/account.php:444
|
1320 |
msgctxt "as secret encryption key missing"
|
1321 |
msgid "No Secret"
|
1322 |
msgstr ""
|
1323 |
|
1324 |
+
#: templates/account.php:471, templates/account/partials/site.php:120, templates/account/partials/site.php:122
|
1325 |
+
msgid "Trial"
|
1326 |
msgstr ""
|
1327 |
|
1328 |
+
#: templates/account.php:498, templates/debug.php:627, templates/account/partials/site.php:262
|
1329 |
+
msgid "License Key"
|
1330 |
msgstr ""
|
1331 |
|
1332 |
+
#: templates/account.php:529
|
1333 |
msgid "Join the Beta program"
|
1334 |
msgstr ""
|
1335 |
|
1336 |
+
#: templates/account.php:535
|
1337 |
msgid "not verified"
|
1338 |
msgstr ""
|
1339 |
|
1340 |
+
#: templates/account.php:544, templates/account/partials/addon.php:195
|
1341 |
+
msgid "Expired"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
+
#: templates/account.php:602
|
1345 |
msgid "Premium version"
|
1346 |
msgstr ""
|
1347 |
|
1348 |
+
#: templates/account.php:604
|
1349 |
+
msgid "Free version"
|
|
|
|
|
|
|
|
|
1350 |
msgstr ""
|
1351 |
|
1352 |
+
#: templates/account.php:616
|
1353 |
msgid "Verify Email"
|
1354 |
msgstr ""
|
1355 |
|
1356 |
+
#: templates/account.php:630
|
1357 |
+
msgid "Download %s Version"
|
|
|
|
|
|
|
|
|
1358 |
msgstr ""
|
1359 |
|
1360 |
+
#: templates/account.php:646
|
1361 |
+
msgid "Download Paid Version"
|
|
|
1362 |
msgstr ""
|
1363 |
|
1364 |
+
#: templates/account.php:664, templates/account.php:927, templates/account/partials/site.php:250, templates/account/partials/site.php:272
|
1365 |
msgctxt "verb"
|
1366 |
msgid "Show"
|
1367 |
msgstr ""
|
1368 |
|
1369 |
+
#: templates/account.php:680
|
1370 |
+
msgid "What is your %s?"
|
1371 |
msgstr ""
|
1372 |
|
1373 |
+
#: templates/account.php:688, templates/account/billing.php:21
|
1374 |
+
msgctxt "verb"
|
1375 |
+
msgid "Edit"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
+
#: templates/account.php:693, templates/forms/user-change.php:27
|
1379 |
+
msgid "Change User"
|
1380 |
msgstr ""
|
1381 |
|
1382 |
+
#: templates/account.php:717
|
1383 |
msgid "Sites"
|
1384 |
msgstr ""
|
1385 |
|
1386 |
+
#: templates/account.php:730
|
1387 |
msgid "Search by address"
|
1388 |
msgstr ""
|
1389 |
|
1390 |
+
#: templates/account.php:739, templates/debug.php:403
|
1391 |
msgid "Address"
|
1392 |
msgstr ""
|
1393 |
|
1394 |
+
#: templates/account.php:740
|
1395 |
msgid "License"
|
1396 |
msgstr ""
|
1397 |
|
1398 |
+
#: templates/account.php:741
|
1399 |
msgid "Plan"
|
1400 |
msgstr ""
|
1401 |
|
1402 |
+
#: templates/account.php:792
|
1403 |
msgctxt "as software license"
|
1404 |
msgid "License"
|
1405 |
msgstr ""
|
1406 |
|
1407 |
+
#: templates/account.php:921
|
1408 |
msgctxt "verb"
|
1409 |
msgid "Hide"
|
1410 |
msgstr ""
|
1411 |
|
1412 |
+
#: templates/account.php:943, templates/forms/data-debug-mode.php:31, templates/forms/deactivation/form.php:358, templates/forms/deactivation/form.php:389
|
1413 |
msgid "Processing"
|
1414 |
msgstr ""
|
1415 |
|
1416 |
+
#: templates/account.php:946
|
1417 |
msgid "Get updates for bleeding edge Beta versions of %s."
|
1418 |
msgstr ""
|
1419 |
|
1420 |
+
#: templates/account.php:1004
|
1421 |
msgid "Cancelling %s"
|
1422 |
msgstr ""
|
1423 |
|
1424 |
+
#: templates/account.php:1004, templates/account.php:1021, templates/forms/subscription-cancellation.php:27, templates/forms/deactivation/form.php:178
|
1425 |
msgid "trial"
|
1426 |
msgstr ""
|
1427 |
|
1428 |
+
#: templates/account.php:1019, templates/forms/deactivation/form.php:195
|
1429 |
msgid "Cancelling %s..."
|
1430 |
msgstr ""
|
1431 |
|
1432 |
+
#: templates/account.php:1022, templates/forms/subscription-cancellation.php:28, templates/forms/deactivation/form.php:179
|
1433 |
msgid "subscription"
|
1434 |
msgstr ""
|
1435 |
|
1436 |
+
#: templates/account.php:1036
|
1437 |
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?"
|
1438 |
msgstr ""
|
1439 |
|
1440 |
+
#: templates/account.php:1110
|
1441 |
msgid "Disabling white-label mode"
|
1442 |
msgstr ""
|
1443 |
|
1444 |
+
#: templates/account.php:1111
|
1445 |
msgid "Enabling white-label mode"
|
1446 |
msgstr ""
|
1447 |
|
1453 |
msgid "Add Ons for %s"
|
1454 |
msgstr ""
|
1455 |
|
|
|
|
|
|
|
|
|
|
|
1456 |
#: templates/add-ons.php:58
|
1457 |
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."
|
1458 |
msgstr ""
|
1459 |
|
|
|
|
|
|
|
|
|
1460 |
#: templates/add-ons.php:229
|
1461 |
msgctxt "active add-on"
|
1462 |
msgid "Active"
|
1467 |
msgid "Installed"
|
1468 |
msgstr ""
|
1469 |
|
1470 |
+
#: templates/admin-notice.php:13, templates/forms/license-activation.php:243, templates/forms/resend-key.php:80
|
1471 |
msgctxt "as close a window"
|
1472 |
msgid "Dismiss"
|
1473 |
msgstr ""
|
1474 |
|
|
|
|
|
|
|
|
|
|
|
1475 |
#: templates/auto-installation.php:45
|
1476 |
msgid "%s sec"
|
1477 |
msgstr ""
|
1492 |
msgid "Cancel Installation"
|
1493 |
msgstr ""
|
1494 |
|
1495 |
+
#: templates/checkout.php:180
|
1496 |
+
msgid "Checkout"
|
1497 |
+
msgstr ""
|
1498 |
+
|
1499 |
+
#: templates/checkout.php:180
|
1500 |
+
msgid "PCI compliant"
|
1501 |
+
msgstr ""
|
1502 |
+
|
1503 |
#. translators: %s: name (e.g. Hey John,)
|
1504 |
#: templates/connect.php:121
|
1505 |
msgctxt "greeting"
|
1506 |
msgid "Hey %s,"
|
1507 |
msgstr ""
|
1508 |
|
1509 |
+
#: templates/connect.php:189
|
1510 |
+
msgid "Never miss an important update"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
+
#: templates/connect.php:197
|
1514 |
+
msgid "Thank you for updating to %1$s v%2$s!"
|
1515 |
msgstr ""
|
1516 |
|
1517 |
+
#: templates/connect.php:207
|
1518 |
+
msgid "Allow & Continue"
|
1519 |
msgstr ""
|
1520 |
|
1521 |
+
#: templates/connect.php:211
|
1522 |
+
msgid "Re-send activation email"
|
1523 |
msgstr ""
|
1524 |
|
1525 |
+
#: templates/connect.php:215
|
1526 |
+
msgid "Thanks %s!"
|
1527 |
msgstr ""
|
1528 |
|
1529 |
+
#: templates/connect.php:227
|
1530 |
msgid "Welcome to %s! To get started, please enter your license key:"
|
1531 |
msgstr ""
|
1532 |
|
1533 |
+
#: templates/connect.php:237
|
1534 |
+
msgid "Opt in to get email notifications for security & feature updates, educational content, and occasional offers, and to share some basic WordPress environment info. This will help us make the %s more compatible with your site and better at doing what you need it to."
|
1535 |
msgstr ""
|
1536 |
|
1537 |
+
#: templates/connect.php:239
|
1538 |
+
msgid "Opt in to get email notifications for security & feature updates, and to share some basic WordPress environment info. This will help us make the %s more compatible with your site and better at doing what you need it to."
|
1539 |
msgstr ""
|
1540 |
|
1541 |
+
#. translators: %s: module type (plugin, theme, or add-on)
|
1542 |
+
#: templates/connect.php:245
|
1543 |
+
msgid "We have introduced this opt-in so you never miss an important update and help us make the %s more compatible with your site and better at doing what you need it to."
|
1544 |
msgstr ""
|
1545 |
|
1546 |
+
#: templates/connect.php:248
|
1547 |
+
msgid "Opt in to get email notifications for security & feature updates, educational content, and occasional offers, and to share some basic WordPress environment info."
|
1548 |
msgstr ""
|
1549 |
|
1550 |
+
#: templates/connect.php:249
|
1551 |
+
msgid "Opt in to get email notifications for security & feature updates, and to share some basic WordPress environment info."
|
1552 |
msgstr ""
|
1553 |
|
1554 |
+
#: templates/connect.php:252
|
1555 |
+
msgid "If you skip this, that's okay! %1$s will still work just fine."
|
1556 |
msgstr ""
|
1557 |
|
1558 |
+
#: templates/connect.php:282
|
1559 |
+
msgid "We're excited to introduce the Freemius network-level integration."
|
1560 |
+
msgstr ""
|
1561 |
+
|
1562 |
+
#: templates/connect.php:285
|
1563 |
msgid "During the update process we detected %d site(s) that are still pending license activation."
|
1564 |
msgstr ""
|
1565 |
|
1566 |
+
#: templates/connect.php:287
|
1567 |
msgid "If you'd like to use the %s on those sites, please enter your license key below and click the activation button."
|
1568 |
msgstr ""
|
1569 |
|
1570 |
+
#: templates/connect.php:289
|
1571 |
msgid "%s's paid features"
|
1572 |
msgstr ""
|
1573 |
|
1574 |
+
#: templates/connect.php:294
|
1575 |
msgid "Alternatively, you can skip it for now and activate the license later, in your %s's network-level Account page."
|
1576 |
msgstr ""
|
1577 |
|
1578 |
+
#: templates/connect.php:296
|
1579 |
+
msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
|
1580 |
msgstr ""
|
1581 |
|
1582 |
+
#: templates/connect.php:305, templates/forms/data-debug-mode.php:35, templates/forms/license-activation.php:42
|
1583 |
+
msgid "License key"
|
1584 |
msgstr ""
|
1585 |
|
1586 |
+
#: templates/connect.php:308, templates/forms/license-activation.php:22
|
1587 |
+
msgid "Can't find your license key?"
|
1588 |
msgstr ""
|
1589 |
|
1590 |
+
#: templates/connect.php:371, templates/connect.php:695, templates/forms/deactivation/retry-skip.php:20
|
1591 |
msgctxt "verb"
|
1592 |
msgid "Skip"
|
1593 |
msgstr ""
|
1594 |
|
1595 |
+
#: templates/connect.php:374
|
1596 |
msgid "Delegate to Site Admins"
|
1597 |
msgstr ""
|
1598 |
|
1599 |
+
#: templates/connect.php:374
|
1600 |
msgid "If you click it, this decision will be delegated to the sites administrators."
|
1601 |
msgstr ""
|
1602 |
|
1603 |
+
#: templates/connect.php:401
|
1604 |
msgid "License issues?"
|
1605 |
msgstr ""
|
1606 |
|
1607 |
+
#: templates/connect.php:425
|
1608 |
+
msgid "For delivery of security & feature updates, and license management, %s needs to"
|
1609 |
msgstr ""
|
1610 |
|
1611 |
+
#: templates/connect.php:430
|
1612 |
+
msgid "This will allow %s to"
|
1613 |
msgstr ""
|
1614 |
|
1615 |
+
#: templates/connect.php:445
|
1616 |
+
msgid "Don't have a license key?"
|
1617 |
msgstr ""
|
1618 |
|
1619 |
+
#: templates/connect.php:448
|
1620 |
msgid "Have a license key?"
|
1621 |
msgstr ""
|
1622 |
|
1623 |
+
#: templates/connect.php:456
|
1624 |
+
msgid "Freemius is our licensing and software updates engine"
|
1625 |
msgstr ""
|
1626 |
|
1627 |
+
#: templates/connect.php:459
|
1628 |
msgid "Privacy Policy"
|
1629 |
msgstr ""
|
1630 |
|
1631 |
+
#: templates/connect.php:461
|
1632 |
msgid "License Agreement"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
+
#: templates/connect.php:461
|
1636 |
msgid "Terms of Service"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
+
#: templates/connect.php:881
|
1640 |
msgctxt "as in the process of sending an email"
|
1641 |
msgid "Sending email"
|
1642 |
msgstr ""
|
1643 |
|
1644 |
+
#: templates/connect.php:882
|
1645 |
msgctxt "as activating plugin"
|
1646 |
msgid "Activating"
|
1647 |
msgstr ""
|
1648 |
|
1649 |
+
#: templates/contact.php:78
|
1650 |
+
msgid "Contact"
|
1651 |
+
msgstr ""
|
1652 |
+
|
1653 |
#: templates/debug.php:17
|
1654 |
msgctxt "as turned off"
|
1655 |
msgid "Off"
|
1660 |
msgid "On"
|
1661 |
msgstr ""
|
1662 |
|
1663 |
+
#: templates/debug.php:24
|
1664 |
msgid "SDK"
|
1665 |
msgstr ""
|
1666 |
|
1667 |
+
#: templates/debug.php:28
|
1668 |
msgctxt "as code debugging"
|
1669 |
msgid "Debugging"
|
1670 |
msgstr ""
|
1671 |
|
1672 |
+
#: templates/debug.php:58, templates/debug.php:279, templates/debug.php:411, templates/debug.php:576
|
1673 |
msgid "Actions"
|
1674 |
msgstr ""
|
1675 |
|
1676 |
+
#: templates/debug.php:68
|
1677 |
msgid "Are you sure you want to delete all Freemius data?"
|
1678 |
msgstr ""
|
1679 |
|
1680 |
+
#: templates/debug.php:68
|
1681 |
msgid "Delete All Accounts"
|
1682 |
msgstr ""
|
1683 |
|
1684 |
+
#: templates/debug.php:75
|
1685 |
msgid "Clear API Cache"
|
1686 |
msgstr ""
|
1687 |
|
1688 |
+
#: templates/debug.php:83
|
1689 |
msgid "Clear Updates Transients"
|
1690 |
msgstr ""
|
1691 |
|
1692 |
+
#: templates/debug.php:92
|
1693 |
msgid "Reset Deactivation Snoozing"
|
1694 |
msgstr ""
|
1695 |
|
1696 |
+
#: templates/debug.php:100
|
1697 |
msgid "Sync Data From Server"
|
1698 |
msgstr ""
|
1699 |
|
1700 |
+
#: templates/debug.php:109
|
1701 |
msgid "Migrate Options to Network"
|
1702 |
msgstr ""
|
1703 |
|
1704 |
+
#: templates/debug.php:114
|
1705 |
msgid "Load DB Option"
|
1706 |
msgstr ""
|
1707 |
|
1708 |
+
#: templates/debug.php:117
|
1709 |
msgid "Set DB Option"
|
1710 |
msgstr ""
|
1711 |
|
1712 |
+
#: templates/debug.php:211
|
1713 |
msgid "Key"
|
1714 |
msgstr ""
|
1715 |
|
1716 |
+
#: templates/debug.php:212
|
1717 |
msgid "Value"
|
1718 |
msgstr ""
|
1719 |
|
1720 |
+
#: templates/debug.php:228
|
1721 |
msgctxt "as software development kit versions"
|
1722 |
msgid "SDK Versions"
|
1723 |
msgstr ""
|
1724 |
|
1725 |
+
#: templates/debug.php:233
|
1726 |
msgid "SDK Path"
|
1727 |
msgstr ""
|
1728 |
|
1729 |
+
#: templates/debug.php:234, templates/debug.php:273
|
1730 |
msgid "Module Path"
|
1731 |
msgstr ""
|
1732 |
|
1733 |
+
#: templates/debug.php:235
|
1734 |
msgid "Is Active"
|
1735 |
msgstr ""
|
1736 |
|
1737 |
+
#: templates/debug.php:263, templates/debug/plugins-themes-sync.php:35
|
1738 |
msgid "Plugins"
|
1739 |
msgstr ""
|
1740 |
|
1741 |
+
#: templates/debug.php:263, templates/debug/plugins-themes-sync.php:56
|
1742 |
msgid "Themes"
|
1743 |
msgstr ""
|
1744 |
|
1745 |
+
#: templates/debug.php:268, templates/debug.php:405, templates/debug.php:513, templates/debug/scheduled-crons.php:80
|
1746 |
msgid "Slug"
|
1747 |
msgstr ""
|
1748 |
|
1749 |
+
#: templates/debug.php:270, templates/debug.php:512
|
1750 |
msgid "Title"
|
1751 |
msgstr ""
|
1752 |
|
1753 |
+
#: templates/debug.php:271
|
1754 |
msgctxt "as application program interface"
|
1755 |
msgid "API"
|
1756 |
msgstr ""
|
1757 |
|
1758 |
+
#: templates/debug.php:272
|
1759 |
msgid "Freemius State"
|
1760 |
msgstr ""
|
1761 |
|
1762 |
+
#: templates/debug.php:276
|
1763 |
msgid "Network Blog"
|
1764 |
msgstr ""
|
1765 |
|
1766 |
+
#: templates/debug.php:277
|
1767 |
msgid "Network User"
|
1768 |
msgstr ""
|
1769 |
|
1770 |
+
#: templates/debug.php:321
|
1771 |
msgctxt "as connection was successful"
|
1772 |
msgid "Connected"
|
1773 |
msgstr ""
|
1774 |
|
1775 |
+
#: templates/debug.php:322
|
1776 |
msgctxt "as connection blocked"
|
1777 |
msgid "Blocked"
|
1778 |
msgstr ""
|
1779 |
|
1780 |
+
#: templates/debug.php:358
|
1781 |
msgid "Simulate Trial Promotion"
|
1782 |
msgstr ""
|
1783 |
|
1784 |
+
#: templates/debug.php:370
|
1785 |
msgid "Simulate Network Upgrade"
|
1786 |
msgstr ""
|
1787 |
|
1788 |
+
#: templates/debug.php:394
|
|
|
1789 |
msgid "%s Installs"
|
1790 |
msgstr ""
|
1791 |
|
1792 |
+
#: templates/debug.php:396
|
1793 |
msgctxt "like websites"
|
1794 |
msgid "Sites"
|
1795 |
msgstr ""
|
1796 |
|
1797 |
+
#: templates/debug.php:402, templates/account/partials/site.php:156
|
1798 |
msgid "Blog ID"
|
1799 |
msgstr ""
|
1800 |
|
1801 |
+
#: templates/debug.php:407
|
1802 |
msgid "License ID"
|
1803 |
msgstr ""
|
1804 |
|
1805 |
+
#: templates/debug.php:493, templates/debug.php:599, templates/account/partials/addon.php:440
|
1806 |
msgctxt "verb"
|
1807 |
msgid "Delete"
|
1808 |
msgstr ""
|
1809 |
|
1810 |
+
#: templates/debug.php:507
|
1811 |
msgid "Add Ons of module %s"
|
1812 |
msgstr ""
|
1813 |
|
1814 |
+
#: templates/debug.php:566
|
1815 |
msgid "Users"
|
1816 |
msgstr ""
|
1817 |
|
1818 |
+
#: templates/debug.php:573
|
1819 |
msgid "Verified"
|
1820 |
msgstr ""
|
1821 |
|
1822 |
+
#: templates/debug.php:615
|
1823 |
msgid "%s Licenses"
|
1824 |
msgstr ""
|
1825 |
|
1826 |
+
#: templates/debug.php:620
|
1827 |
msgid "Plugin ID"
|
1828 |
msgstr ""
|
1829 |
|
1830 |
+
#: templates/debug.php:622
|
1831 |
msgid "Plan ID"
|
1832 |
msgstr ""
|
1833 |
|
1834 |
+
#: templates/debug.php:623
|
1835 |
msgid "Quota"
|
1836 |
msgstr ""
|
1837 |
|
1838 |
+
#: templates/debug.php:624
|
1839 |
msgid "Activated"
|
1840 |
msgstr ""
|
1841 |
|
1842 |
+
#: templates/debug.php:625
|
1843 |
msgid "Blocking"
|
1844 |
msgstr ""
|
1845 |
|
1846 |
+
#: templates/debug.php:626, templates/debug.php:697, templates/debug/logger.php:22
|
1847 |
msgid "Type"
|
1848 |
msgstr ""
|
1849 |
|
1850 |
+
#: templates/debug.php:628
|
1851 |
msgctxt "as expiration date"
|
1852 |
msgid "Expiration"
|
1853 |
msgstr ""
|
1854 |
|
1855 |
+
#: templates/debug.php:656
|
1856 |
msgid "Debug Log"
|
1857 |
msgstr ""
|
1858 |
|
1859 |
+
#: templates/debug.php:660
|
1860 |
msgid "All Types"
|
1861 |
msgstr ""
|
1862 |
|
1863 |
+
#: templates/debug.php:667
|
1864 |
msgid "All Requests"
|
1865 |
msgstr ""
|
1866 |
|
1867 |
+
#: templates/debug.php:672, templates/debug.php:701, templates/debug/logger.php:25
|
1868 |
msgid "File"
|
1869 |
msgstr ""
|
1870 |
|
1871 |
+
#: templates/debug.php:673, templates/debug.php:699, templates/debug/logger.php:23
|
1872 |
msgid "Function"
|
1873 |
msgstr ""
|
1874 |
|
1875 |
+
#: templates/debug.php:674
|
1876 |
msgid "Process ID"
|
1877 |
msgstr ""
|
1878 |
|
1879 |
+
#: templates/debug.php:675
|
1880 |
msgid "Logger"
|
1881 |
msgstr ""
|
1882 |
|
1883 |
+
#: templates/debug.php:676, templates/debug.php:700, templates/debug/logger.php:24
|
1884 |
msgid "Message"
|
1885 |
msgstr ""
|
1886 |
|
1887 |
+
#: templates/debug.php:678
|
1888 |
msgid "Filter"
|
1889 |
msgstr ""
|
1890 |
|
1891 |
+
#: templates/debug.php:686
|
1892 |
msgid "Download"
|
1893 |
msgstr ""
|
1894 |
|
1895 |
+
#: templates/debug.php:702, templates/debug/logger.php:26
|
1896 |
msgid "Timestamp"
|
1897 |
msgstr ""
|
1898 |
|
1899 |
+
#: templates/secure-https-header.php:28
|
1900 |
+
msgid "Secure HTTPS %s page, running from an external domain"
|
1901 |
+
msgstr ""
|
1902 |
+
|
1903 |
+
#: includes/customizer/class-fs-customizer-support-section.php:55, templates/plugin-info/features.php:43
|
1904 |
+
msgid "Support"
|
1905 |
+
msgstr ""
|
1906 |
+
|
1907 |
#: includes/debug/class-fs-debug-bar-panel.php:48, templates/debug/api-calls.php:54, templates/debug/logger.php:62
|
1908 |
msgctxt "milliseconds"
|
1909 |
msgid "ms"
|
1917 |
msgid "Requests"
|
1918 |
msgstr ""
|
1919 |
|
1920 |
+
#: includes/managers/class-fs-clone-manager.php:839
|
1921 |
msgid "Invalid clone resolution action."
|
1922 |
msgstr ""
|
1923 |
|
1924 |
+
#: includes/managers/class-fs-clone-manager.php:1024
|
1925 |
msgid "products"
|
1926 |
msgstr ""
|
1927 |
|
1928 |
+
#: includes/managers/class-fs-clone-manager.php:1205
|
1929 |
+
msgid "%1$s has been placed into safe mode because we noticed that %2$s is an exact copy of %3$s."
|
1930 |
msgstr ""
|
1931 |
|
1932 |
+
#: includes/managers/class-fs-clone-manager.php:1211
|
1933 |
+
msgid "The products below have been placed into safe mode because we noticed that %2$s is an exact copy of %3$s:%1$s"
|
1934 |
msgstr ""
|
1935 |
|
1936 |
+
#: includes/managers/class-fs-clone-manager.php:1212
|
1937 |
+
msgid "The products below have been placed into safe mode because we noticed that %2$s is an exact copy of these sites:%3$s%1$s"
|
1938 |
msgstr ""
|
1939 |
|
1940 |
+
#: includes/managers/class-fs-clone-manager.php:1238
|
1941 |
msgid "the above-mentioned sites"
|
1942 |
msgstr ""
|
1943 |
|
1944 |
+
#: includes/managers/class-fs-clone-manager.php:1251
|
1945 |
msgid "Is %2$s a duplicate of %4$s?"
|
1946 |
msgstr ""
|
1947 |
|
1948 |
+
#: includes/managers/class-fs-clone-manager.php:1252
|
1949 |
msgid "Yes, %2$s is a duplicate of %4$s for the purpose of testing, staging, or development."
|
1950 |
msgstr ""
|
1951 |
|
1952 |
+
#: includes/managers/class-fs-clone-manager.php:1257
|
1953 |
msgid "Long-Term Duplicate"
|
1954 |
msgstr ""
|
1955 |
|
1956 |
+
#: includes/managers/class-fs-clone-manager.php:1262
|
1957 |
msgid "Duplicate Website"
|
1958 |
msgstr ""
|
1959 |
|
1960 |
+
#: includes/managers/class-fs-clone-manager.php:1268
|
1961 |
msgid "Is %2$s the new home of %4$s?"
|
1962 |
msgstr ""
|
1963 |
|
1964 |
+
#: includes/managers/class-fs-clone-manager.php:1270
|
1965 |
msgid "Yes, %%2$s is replacing %%4$s. I would like to migrate my %s from %%4$s to %%2$s."
|
1966 |
msgstr ""
|
1967 |
|
1968 |
+
#: includes/managers/class-fs-clone-manager.php:1271, templates/forms/subscription-cancellation.php:52
|
1969 |
msgid "license"
|
1970 |
msgstr ""
|
1971 |
|
1972 |
+
#: includes/managers/class-fs-clone-manager.php:1271
|
1973 |
msgid "data"
|
1974 |
msgstr ""
|
1975 |
|
1976 |
+
#: includes/managers/class-fs-clone-manager.php:1277
|
1977 |
msgid "Migrate License"
|
1978 |
msgstr ""
|
1979 |
|
1980 |
+
#: includes/managers/class-fs-clone-manager.php:1278
|
1981 |
msgid "Migrate"
|
1982 |
msgstr ""
|
1983 |
|
1984 |
+
#: includes/managers/class-fs-clone-manager.php:1284
|
1985 |
msgid "Is %2$s a new website?"
|
1986 |
msgstr ""
|
1987 |
|
1988 |
+
#: includes/managers/class-fs-clone-manager.php:1285
|
1989 |
msgid "Yes, %2$s is a new and different website that is separate from %4$s."
|
1990 |
msgstr ""
|
1991 |
|
1992 |
+
#: includes/managers/class-fs-clone-manager.php:1287
|
1993 |
msgid "It requires license activation."
|
1994 |
msgstr ""
|
1995 |
|
1996 |
+
#: includes/managers/class-fs-clone-manager.php:1294
|
1997 |
msgid "New Website"
|
1998 |
msgstr ""
|
1999 |
|
2000 |
+
#: includes/managers/class-fs-clone-manager.php:1319
|
2001 |
msgctxt "Clone resolution admin notice products list label"
|
2002 |
msgid "Products"
|
2003 |
msgstr ""
|
2004 |
|
2005 |
+
#: includes/managers/class-fs-clone-manager.php:1408
|
2006 |
msgid "You marked this website, %s, as a temporary duplicate of %s."
|
2007 |
msgstr ""
|
2008 |
|
2009 |
+
#: includes/managers/class-fs-clone-manager.php:1409
|
2010 |
msgid "You marked this website, %s, as a temporary duplicate of these sites"
|
2011 |
msgstr ""
|
2012 |
|
2013 |
+
#: includes/managers/class-fs-clone-manager.php:1423
|
2014 |
msgid "%s automatic security & feature updates and paid functionality will keep working without interruptions until %s (or when your license expires, whatever comes first)."
|
2015 |
msgstr ""
|
2016 |
|
2017 |
+
#: includes/managers/class-fs-clone-manager.php:1426
|
2018 |
msgctxt "\"The <product_label>\", e.g.: \"The plugin\""
|
2019 |
msgid "The %s's"
|
2020 |
msgstr ""
|
2021 |
|
2022 |
+
#: includes/managers/class-fs-clone-manager.php:1429
|
2023 |
msgid "The following products'"
|
2024 |
msgstr ""
|
2025 |
|
2026 |
+
#: includes/managers/class-fs-clone-manager.php:1437
|
2027 |
msgid "If this is a long term duplicate, to keep automatic updates and paid functionality after %s, please %s."
|
2028 |
msgstr ""
|
2029 |
|
2030 |
+
#: includes/managers/class-fs-clone-manager.php:1439
|
2031 |
msgid "activate a license here"
|
2032 |
msgstr ""
|
2033 |
|
2034 |
+
#: includes/managers/class-fs-permission-manager.php:182
|
2035 |
+
msgid "View Basic Website Info"
|
2036 |
+
msgstr ""
|
2037 |
+
|
2038 |
+
#: includes/managers/class-fs-permission-manager.php:183
|
2039 |
+
msgid "Homepage URL & title, WP & PHP versions, and site language"
|
2040 |
+
msgstr ""
|
2041 |
+
|
2042 |
+
#: includes/managers/class-fs-permission-manager.php:186
|
2043 |
+
msgid "To provide additional functionality that's relevant to your website, avoid WordPress or PHP version incompatibilities that can break your website, and recognize which languages & regions the %s should be translated and tailored to."
|
2044 |
+
msgstr ""
|
2045 |
+
|
2046 |
+
#: includes/managers/class-fs-permission-manager.php:198
|
2047 |
+
msgid "View Basic %s Info"
|
2048 |
+
msgstr ""
|
2049 |
+
|
2050 |
+
#: includes/managers/class-fs-permission-manager.php:201
|
2051 |
+
msgid "Current %s & SDK versions, and if active or uninstalled"
|
2052 |
+
msgstr ""
|
2053 |
+
|
2054 |
+
#: includes/managers/class-fs-permission-manager.php:252
|
2055 |
+
msgid "View License Essentials"
|
2056 |
+
msgstr ""
|
2057 |
+
|
2058 |
+
#: includes/managers/class-fs-permission-manager.php:253
|
2059 |
+
msgstr ""
|
2060 |
+
|
2061 |
+
#: includes/managers/class-fs-permission-manager.php:263
|
2062 |
+
msgid "To let you manage & control where the license is activated and ensure %s security & feature updates are only delivered to websites you authorize."
|
2063 |
+
msgstr ""
|
2064 |
+
|
2065 |
+
#: includes/managers/class-fs-permission-manager.php:275
|
2066 |
+
msgid "View %s State"
|
2067 |
+
msgstr ""
|
2068 |
+
|
2069 |
+
#: includes/managers/class-fs-permission-manager.php:278
|
2070 |
+
msgid "Is active, deactivated, or uninstalled"
|
2071 |
+
msgstr ""
|
2072 |
+
|
2073 |
+
#: includes/managers/class-fs-permission-manager.php:281
|
2074 |
+
msgid "So you can reuse the license when the %s is no longer active."
|
2075 |
+
msgstr ""
|
2076 |
+
|
2077 |
+
#: includes/managers/class-fs-permission-manager.php:317
|
2078 |
+
msgid "View Diagnostic Info"
|
2079 |
+
msgstr ""
|
2080 |
+
|
2081 |
+
#: includes/managers/class-fs-permission-manager.php:317, includes/managers/class-fs-permission-manager.php:354
|
2082 |
+
msgid "optional"
|
2083 |
+
msgstr ""
|
2084 |
+
|
2085 |
+
#: includes/managers/class-fs-permission-manager.php:318
|
2086 |
+
msgid "WordPress & PHP versions, site language & title"
|
2087 |
+
msgstr ""
|
2088 |
+
|
2089 |
+
#: includes/managers/class-fs-permission-manager.php:321
|
2090 |
+
msgid "To avoid breaking your website due to WordPress or PHP version incompatibilities, and recognize which languages & regions the %s should be translated and tailored to."
|
2091 |
+
msgstr ""
|
2092 |
+
|
2093 |
+
#: includes/managers/class-fs-permission-manager.php:354
|
2094 |
+
msgid "View Plugins & Themes List"
|
2095 |
+
msgstr ""
|
2096 |
+
|
2097 |
+
#: includes/managers/class-fs-permission-manager.php:355
|
2098 |
+
msgid "Names, slugs, versions, and if active or not"
|
2099 |
+
msgstr ""
|
2100 |
+
|
2101 |
+
#: includes/managers/class-fs-permission-manager.php:356
|
2102 |
+
msgid "To ensure compatibility and avoid conflicts with your installed plugins and themes."
|
2103 |
+
msgstr ""
|
2104 |
+
|
2105 |
+
#: includes/managers/class-fs-permission-manager.php:373
|
2106 |
+
msgid "View Basic Profile Info"
|
2107 |
+
msgstr ""
|
2108 |
+
|
2109 |
+
#: includes/managers/class-fs-permission-manager.php:374
|
2110 |
+
msgid "Your WordPress user's: first & last name, and email address"
|
2111 |
+
msgstr ""
|
2112 |
+
|
2113 |
+
#: includes/managers/class-fs-permission-manager.php:375
|
2114 |
+
msgid "Never miss important updates, get security warnings before they become public knowledge, and receive notifications about special offers and awesome new features."
|
2115 |
+
msgstr ""
|
2116 |
+
|
2117 |
+
#: includes/managers/class-fs-permission-manager.php:396
|
2118 |
+
msgid "Newsletter"
|
2119 |
+
msgstr ""
|
2120 |
+
|
2121 |
+
#: includes/managers/class-fs-permission-manager.php:397
|
2122 |
+
msgid "Updates, announcements, marketing, no spam"
|
2123 |
+
msgstr ""
|
2124 |
+
|
2125 |
#: templates/account/billing.php:22
|
2126 |
msgctxt "verb"
|
2127 |
msgid "Update"
|
2187 |
msgid "Invoice"
|
2188 |
msgstr ""
|
2189 |
|
2190 |
+
#: templates/connect/permissions-group.php:31, templates/forms/optout.php:26, templates/js/permissions.php:78
|
2191 |
+
msgctxt "verb"
|
2192 |
+
msgid "Opt Out"
|
2193 |
+
msgstr ""
|
2194 |
+
|
2195 |
+
#: templates/connect/permissions-group.php:32, templates/js/permissions.php:77
|
2196 |
+
msgctxt "verb"
|
2197 |
+
msgid "Opt In"
|
2198 |
+
msgstr ""
|
2199 |
+
|
2200 |
#: templates/debug/api-calls.php:56
|
2201 |
msgid "API"
|
2202 |
msgstr ""
|
2293 |
msgid "Apply to become an affiliate"
|
2294 |
msgstr ""
|
2295 |
|
2296 |
+
#: templates/forms/affiliation.php:108
|
2297 |
+
msgid "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
|
2298 |
msgstr ""
|
2299 |
|
2300 |
+
#: templates/forms/affiliation.php:123
|
2301 |
+
msgid "Thank you for applying for our affiliate program, we'll review your details during the next 14 days and will get back to you with further information."
|
2302 |
msgstr ""
|
2303 |
|
2304 |
#: templates/forms/affiliation.php:126
|
2305 |
msgid "Your affiliation account was temporarily suspended."
|
2306 |
msgstr ""
|
2307 |
|
2308 |
+
#: templates/forms/affiliation.php:129
|
2309 |
+
msgid "Thank you for applying for our affiliate program, unfortunately, we've decided at this point to reject your application. Please try again in 30 days."
|
2310 |
msgstr ""
|
2311 |
|
2312 |
+
#: templates/forms/affiliation.php:132
|
2313 |
+
msgid "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
|
2314 |
msgstr ""
|
2315 |
|
2316 |
#: templates/forms/affiliation.php:145
|
2417 |
msgid "Please provide details on how you intend to promote %s (please be as specific as possible)."
|
2418 |
msgstr ""
|
2419 |
|
2420 |
+
#: templates/forms/affiliation.php:233, templates/forms/resend-key.php:22, templates/account/partials/disconnect-button.php:92
|
2421 |
msgid "Cancel"
|
2422 |
msgstr ""
|
2423 |
|
2441 |
msgid "User key"
|
2442 |
msgstr ""
|
2443 |
|
|
|
|
|
|
|
|
|
2444 |
#: templates/forms/email-address-update.php:32
|
2445 |
msgid "Email address update"
|
2446 |
msgstr ""
|
2494 |
msgid "Update License"
|
2495 |
msgstr ""
|
2496 |
|
2497 |
+
#: templates/forms/license-activation.php:34
|
2498 |
+
msgid "The %1$s will be periodically sending essential license data to %2$s to check for security and feature updates, and verify the validity of your license."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2499 |
msgstr ""
|
2500 |
|
2501 |
+
#: templates/forms/license-activation.php:39
|
2502 |
+
msgid "Agree & Activate License"
|
|
|
2503 |
msgstr ""
|
2504 |
|
2505 |
+
#: templates/forms/license-activation.php:204
|
2506 |
+
msgid "Associate with the license owner's account."
|
2507 |
msgstr ""
|
2508 |
|
2509 |
#: templates/forms/optout.php:44
|
2510 |
+
msgid "Communication"
|
2511 |
msgstr ""
|
2512 |
|
2513 |
+
#: templates/forms/optout.php:56
|
2514 |
+
msgid "Stay Connected"
|
2515 |
msgstr ""
|
2516 |
|
2517 |
+
#: templates/forms/optout.php:61
|
2518 |
+
msgid "Diagnostic Info"
|
2519 |
msgstr ""
|
2520 |
|
2521 |
+
#: templates/forms/optout.php:77
|
2522 |
+
msgid "Keep Sharing"
|
2523 |
msgstr ""
|
2524 |
|
2525 |
+
#: templates/forms/optout.php:82
|
2526 |
+
msgid "Extensions"
|
2527 |
msgstr ""
|
2528 |
|
2529 |
+
#: templates/forms/optout.php:104
|
2530 |
+
msgid "Keep automatic updates"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2531 |
msgstr ""
|
2532 |
|
2533 |
#: templates/forms/premium-versions-upgrade-handler.php:40
|
2538 |
msgid " %s to access version %s security & feature updates, and support."
|
2539 |
msgstr ""
|
2540 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2541 |
#: templates/forms/premium-versions-upgrade-handler.php:54
|
2542 |
msgid "New Version Available"
|
2543 |
msgstr ""
|
2551 |
msgid "Send License Key"
|
2552 |
msgstr ""
|
2553 |
|
|
|
|
|
|
|
|
|
2554 |
#: templates/forms/resend-key.php:58
|
2555 |
msgid "Enter the email address you've used during the purchase and we will resend you the license key."
|
2556 |
msgstr ""
|
2591 |
msgid "Cancel %s & Proceed"
|
2592 |
msgstr ""
|
2593 |
|
|
|
2594 |
#: templates/forms/trial-start.php:22
|
2595 |
msgid "You are 1-click away from starting your %1$s-day free trial of the %2$s plan."
|
2596 |
msgstr ""
|
2597 |
|
|
|
2598 |
#: templates/forms/trial-start.php:28
|
2599 |
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."
|
2600 |
msgstr ""
|
2601 |
|
|
|
|
|
|
|
|
|
|
|
2602 |
#: templates/forms/user-change.php:26
|
2603 |
msgid "By changing the user, you agree to transfer the account ownership to:"
|
2604 |
msgstr ""
|
2611 |
msgid "Enter email address"
|
2612 |
msgstr ""
|
2613 |
|
2614 |
+
#: templates/js/permissions.php:337, templates/js/permissions.php:485
|
2615 |
+
msgid "Saved"
|
2616 |
msgstr ""
|
2617 |
|
2618 |
+
#: templates/js/style-premium-theme.php:39
|
2619 |
+
msgid "Premium"
|
2620 |
+
msgstr ""
|
2621 |
+
|
2622 |
+
#: templates/js/style-premium-theme.php:42
|
2623 |
+
msgid "Beta"
|
2624 |
msgstr ""
|
2625 |
|
2626 |
#: templates/partials/network-activation.php:32
|
2631 |
msgid "Apply on all sites in the network."
|
2632 |
msgstr ""
|
2633 |
|
2634 |
+
#: templates/partials/network-activation.php:36
|
2635 |
+
msgid "Activate license on all pending sites."
|
2636 |
+
msgstr ""
|
2637 |
+
|
2638 |
+
#: templates/partials/network-activation.php:37
|
2639 |
+
msgid "Apply on all pending sites."
|
2640 |
+
msgstr ""
|
2641 |
+
|
2642 |
#: templates/partials/network-activation.php:45, templates/partials/network-activation.php:79
|
2643 |
msgid "allow"
|
2644 |
msgstr ""
|
2655 |
msgid "Click to view full-size screenshot %d"
|
2656 |
msgstr ""
|
2657 |
|
|
|
|
|
|
|
|
|
2658 |
#: templates/plugin-info/features.php:56
|
2659 |
msgid "Unlimited Updates"
|
2660 |
msgstr ""
|
2677 |
msgid "%1$s will immediately stop all future recurring payments and your %s plan license will expire in %s."
|
2678 |
msgstr ""
|
2679 |
|
2680 |
+
#: templates/account/partials/addon.php:190
|
2681 |
+
msgid "Cancelled"
|
2682 |
+
msgstr ""
|
2683 |
+
|
2684 |
#: templates/account/partials/addon.php:200
|
2685 |
msgid "No expiration"
|
2686 |
msgstr ""
|
2687 |
|
2688 |
+
#: templates/account/partials/disconnect-button.php:74
|
2689 |
+
msgid "By disconnecting the website, previously shared diagnostic data about %1$s will be deleted and no longer visible to %2$s."
|
2690 |
msgstr ""
|
2691 |
|
2692 |
+
#: templates/account/partials/disconnect-button.php:78
|
2693 |
+
msgid "Disconnecting the website will permanently remove %s from your User Dashboard's account."
|
2694 |
msgstr ""
|
2695 |
|
2696 |
+
#: templates/account/partials/disconnect-button.php:84
|
2697 |
+
msgid "If you wish to cancel your %1$s plan's subscription instead, please navigate to the %2$s and cancel it there."
|
2698 |
+
msgstr ""
|
2699 |
+
|
2700 |
+
#: templates/account/partials/disconnect-button.php:88
|
2701 |
+
msgid "Are you sure you would like to proceed with the disconnection?"
|
2702 |
msgstr ""
|
2703 |
|
2704 |
+
#: templates/account/partials/site.php:190
|
2705 |
msgid "Owner Name"
|
2706 |
msgstr ""
|
2707 |
|
2708 |
+
#: templates/account/partials/site.php:202
|
2709 |
msgid "Owner Email"
|
2710 |
msgstr ""
|
2711 |
|
2712 |
+
#: templates/account/partials/site.php:214
|
2713 |
msgid "Owner ID"
|
2714 |
msgstr ""
|
2715 |
|
2716 |
+
#: templates/account/partials/site.php:288
|
2717 |
msgid "Subscription"
|
2718 |
msgstr ""
|
2719 |
|
vendor/freemius/wordpress-sdk/require.php
CHANGED
@@ -22,6 +22,7 @@
|
|
22 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-option-manager.php';
|
23 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-gdpr-manager.php';
|
24 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-clone-manager.php';
|
|
|
25 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-cache-manager.php';
|
26 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-notice-manager.php';
|
27 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-menu-manager.php';
|
22 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-option-manager.php';
|
23 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-gdpr-manager.php';
|
24 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-clone-manager.php';
|
25 |
+
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-permission-manager.php';
|
26 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-cache-manager.php';
|
27 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-notice-manager.php';
|
28 |
require_once WP_FS__DIR_INCLUDES . '/managers/class-fs-admin-menu-manager.php';
|
vendor/freemius/wordpress-sdk/start.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
-
$this_sdk_version = '2.5.
|
19 |
|
20 |
#region SDK Selection Logic --------------------------------------------------------------------
|
21 |
|
15 |
*
|
16 |
* @var string
|
17 |
*/
|
18 |
+
$this_sdk_version = '2.5.3.1';
|
19 |
|
20 |
#region SDK Selection Logic --------------------------------------------------------------------
|
21 |
|
vendor/freemius/wordpress-sdk/templates/account/partials/site.php
CHANGED
@@ -159,14 +159,15 @@
|
|
159 |
<td><?php if ( ! FS_Plugin_License::is_valid_id( $install->license_id ) ) : ?>
|
160 |
<!-- Toggle Usage Tracking -->
|
161 |
<?php $action = 'toggle_tracking' ?>
|
|
|
162 |
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
|
163 |
<input type="hidden" name="fs_action" value="<?php echo $action ?>">
|
164 |
<?php wp_nonce_field( trim( "{$action}:{$blog_id}:{$install->id}", ':' ) ) ?>
|
165 |
<input type="hidden" name="install_id" value="<?php echo $install->id ?>">
|
166 |
<input type="hidden" name="blog_id" value="<?php echo $blog_id ?>">
|
167 |
-
<button class="fs-toggle-tracking button button-small<?php if ( $
|
168 |
echo ' button-primary';
|
169 |
-
} ?>" data-is-disconnected="<?php echo $
|
170 |
</form>
|
171 |
<!--/ Toggle Usage Tracking -->
|
172 |
<?php endif ?></td>
|
@@ -226,7 +227,8 @@
|
|
226 |
<td>
|
227 |
<nobr><?php fs_esc_html_echo_inline( 'Public Key', 'public-key', $slug ) ?>:</nobr>
|
228 |
</td>
|
229 |
-
<td
|
|
|
230 |
</tr>
|
231 |
<?php $row_index ++ ?>
|
232 |
<!--/ Public Key -->
|
159 |
<td><?php if ( ! FS_Plugin_License::is_valid_id( $install->license_id ) ) : ?>
|
160 |
<!-- Toggle Usage Tracking -->
|
161 |
<?php $action = 'toggle_tracking' ?>
|
162 |
+
<?php $is_disconnected = ! FS_Permission_Manager::instance( $fs )->is_homepage_url_tracking_allowed( $blog_id ) ?>
|
163 |
<form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
|
164 |
<input type="hidden" name="fs_action" value="<?php echo $action ?>">
|
165 |
<?php wp_nonce_field( trim( "{$action}:{$blog_id}:{$install->id}", ':' ) ) ?>
|
166 |
<input type="hidden" name="install_id" value="<?php echo $install->id ?>">
|
167 |
<input type="hidden" name="blog_id" value="<?php echo $blog_id ?>">
|
168 |
+
<button class="fs-toggle-tracking button button-small<?php if ( $is_disconnected ) {
|
169 |
echo ' button-primary';
|
170 |
+
} ?>" data-is-disconnected="<?php echo $is_disconnected ? 'true' : 'false' ?>"><?php $is_disconnected ? fs_esc_html_echo_inline( 'Opt In', 'opt-in', $slug ) : fs_esc_html_echo_inline( 'Opt Out', 'opt-out', $slug ) ?></button>
|
171 |
</form>
|
172 |
<!--/ Toggle Usage Tracking -->
|
173 |
<?php endif ?></td>
|
227 |
<td>
|
228 |
<nobr><?php fs_esc_html_echo_inline( 'Public Key', 'public-key', $slug ) ?>:</nobr>
|
229 |
</td>
|
230 |
+
<td><code><?php echo htmlspecialchars( $install->public_key ) ?></code></td>
|
231 |
+
<td></td>
|
232 |
</tr>
|
233 |
<?php $row_index ++ ?>
|
234 |
<!--/ Public Key -->
|
vendor/freemius/wordpress-sdk/templates/clone-resolution-js.php
CHANGED
@@ -29,26 +29,28 @@
|
|
29 |
$cloneResolutionNotice.on( 'click', '.button, #fs_temporary_duplicate_license_activation_link', function( evt ) {
|
30 |
evt.preventDefault();
|
31 |
|
32 |
-
var $this
|
33 |
-
$body = $( 'body' ),
|
34 |
-
cursor = $body.css( 'cursor' );
|
35 |
|
36 |
if ( $this.hasClass( 'disabled' ) ) {
|
37 |
return;
|
38 |
}
|
39 |
|
40 |
-
var
|
41 |
-
|
42 |
-
|
|
|
|
|
|
|
43 |
|
44 |
$.ajax( {
|
45 |
// Get the parent options container from the child as `$cloneResolutionNotice` can have different AJAX URLs if both the manual clone resolution options and temporary duplicate notices are shown (for different subsites in a multisite network).
|
46 |
-
url : $
|
47 |
method : 'POST',
|
48 |
data : {
|
49 |
action : '<?php echo $VARS['ajax_action'] ?>',
|
50 |
security : '<?php echo wp_create_nonce( $VARS['ajax_action'] ) ?>',
|
51 |
-
clone_action: $this.data( 'clone-action' )
|
|
|
52 |
},
|
53 |
beforeSend: function() {
|
54 |
$body.css( { cursor: 'wait' } );
|
29 |
$cloneResolutionNotice.on( 'click', '.button, #fs_temporary_duplicate_license_activation_link', function( evt ) {
|
30 |
evt.preventDefault();
|
31 |
|
32 |
+
var $this = $( this );
|
|
|
|
|
33 |
|
34 |
if ( $this.hasClass( 'disabled' ) ) {
|
35 |
return;
|
36 |
}
|
37 |
|
38 |
+
var $body = $( 'body' ),
|
39 |
+
$optionsContainer = $this.parents( '.fs-clone-resolution-options-container' ),
|
40 |
+
cursor = $body.css( 'cursor' ),
|
41 |
+
beforeUnload = function() {
|
42 |
+
return '<?php fs_esc_js_echo_inline( 'Please wait', 'please-wait' ) ?>';
|
43 |
+
};
|
44 |
|
45 |
$.ajax( {
|
46 |
// Get the parent options container from the child as `$cloneResolutionNotice` can have different AJAX URLs if both the manual clone resolution options and temporary duplicate notices are shown (for different subsites in a multisite network).
|
47 |
+
url : $optionsContainer.data( 'ajax-url' ),
|
48 |
method : 'POST',
|
49 |
data : {
|
50 |
action : '<?php echo $VARS['ajax_action'] ?>',
|
51 |
security : '<?php echo wp_create_nonce( $VARS['ajax_action'] ) ?>',
|
52 |
+
clone_action: $this.data( 'clone-action' ),
|
53 |
+
blog_id : $optionsContainer.data( 'blog-id' )
|
54 |
},
|
55 |
beforeSend: function() {
|
56 |
$body.css( { cursor: 'wait' } );
|
vendor/freemius/wordpress-sdk/templates/connect.php
CHANGED
@@ -161,22 +161,48 @@
|
|
161 |
class="wrap<?php if ( ! fs_is_network_admin() && ( ! $fs->is_enable_anonymous() || $is_pending_activation || $require_license_key ) ) {
|
162 |
echo ' fs-anonymous-disabled';
|
163 |
} ?><?php echo $require_license_key ? ' require-license-key' : '' ?>">
|
164 |
-
|
165 |
-
<b class="fs-site-icon"><i class="dashicons dashicons-wordpress"></i></b
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
|
|
|
|
|
|
|
|
174 |
<div class="fs-content">
|
175 |
<?php $fs->do_action( 'connect/before_message', $activation_state ) ?>
|
176 |
|
177 |
<?php if ( ! empty( $error ) ) : ?>
|
178 |
<p class="fs-error"><?php echo $fs->apply_filters( 'connect_error_esc_html', esc_html( $error ) ) ?></p>
|
179 |
<?php endif ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
<p><?php
|
181 |
$button_label = fs_text_inline( 'Allow & Continue', 'opt-in-connect', $slug );
|
182 |
$message = '';
|
@@ -187,16 +213,14 @@
|
|
187 |
$message = $fs->apply_filters( 'pending_activation_message', sprintf(
|
188 |
/* translators: %s: name (e.g. Thanks John!) */
|
189 |
fs_text_inline( 'Thanks %s!', 'thanks-x', $slug ) . '<br>' .
|
190 |
-
fs_text_inline( 'You should receive
|
191 |
$first_name,
|
192 |
'<b>' . $fs->get_plugin_name() . '</b>',
|
193 |
'<b>' . $current_user->user_email . '</b>',
|
194 |
-
fs_text_inline( 'complete the
|
195 |
) );
|
196 |
} else if ( $require_license_key ) {
|
197 |
-
$button_label = $
|
198 |
-
fs_text_inline( 'Activate License', 'agree-activate-license', $slug ) :
|
199 |
-
fs_text_inline( 'Agree & Activate License', 'agree-activate-license', $slug );
|
200 |
|
201 |
$message = $fs->apply_filters(
|
202 |
'connect-message_on-premium',
|
@@ -205,25 +229,32 @@
|
|
205 |
$fs->get_plugin_name()
|
206 |
);
|
207 |
} else {
|
208 |
-
|
209 |
-
$default_optin_message = $is_gdpr_required ?
|
210 |
-
fs_text_inline( 'Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s.', 'connect-message', $slug) :
|
211 |
-
fs_text_inline( 'Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s.', 'connect-message', $slug);
|
212 |
|
213 |
-
if ( $fs->is_plugin_update() ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
214 |
// If Freemius was added on a plugin update, set different
|
215 |
// opt-in message.
|
216 |
-
|
217 |
-
|
218 |
-
|
|
|
|
|
|
|
|
|
219 |
|
220 |
if ( $fs->is_enable_anonymous() ) {
|
221 |
-
$default_optin_message .= ' ' . fs_text_inline( 'If you skip this, that\'s okay! %1$s will still work just fine.', 'connect-message_on-update_skip', $slug );
|
222 |
}
|
223 |
|
224 |
// If user customized the opt-in message on update, use
|
225 |
// that message. Otherwise, fallback to regular opt-in
|
226 |
-
// custom message if
|
227 |
if ( $fs->has_filter( 'connect_message_on_update' ) ) {
|
228 |
$filter = 'connect_message_on_update';
|
229 |
}
|
@@ -232,11 +263,11 @@
|
|
232 |
$message = $fs->apply_filters(
|
233 |
$filter,
|
234 |
sprintf(
|
235 |
-
|
236 |
'<b>' . esc_html( $fs->get_plugin_name() ) . '</b>',
|
237 |
'<b>' . $current_user->user_login . '</b>',
|
238 |
'<a href="' . $site_url . '" target="_blank" rel="noopener noreferrer">' . $site_url . '</a>',
|
239 |
-
|
240 |
),
|
241 |
$first_name,
|
242 |
$fs->get_plugin_name(),
|
@@ -348,6 +379,7 @@
|
|
348 |
value="<?php echo $fs->get_unique_affix() ?>_activate_existing">
|
349 |
<?php wp_nonce_field( 'activate_existing_' . $fs->get_public_key() ) ?>
|
350 |
<input type="hidden" name="is_extensions_tracking_allowed" value="1">
|
|
|
351 |
<button class="button button-primary" tabindex="1"
|
352 |
type="submit"><?php echo esc_html( $button_label ) ?></button>
|
353 |
</form>
|
@@ -358,6 +390,7 @@
|
|
358 |
<input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
|
359 |
<?php endforeach ?>
|
360 |
<input type="hidden" name="is_extensions_tracking_allowed" value="1">
|
|
|
361 |
<button class="button button-primary" tabindex="1"
|
362 |
type="submit"<?php if ( $require_license_key ) {
|
363 |
echo ' disabled="disabled"';
|
@@ -370,109 +403,39 @@
|
|
370 |
|
371 |
<?php $fs->do_action( 'connect/after_actions', $activation_state ) ?>
|
372 |
</div><?php
|
|
|
373 |
|
374 |
// Set core permission list items.
|
375 |
$permissions = array();
|
376 |
|
377 |
-
/**
|
378 |
-
* When activating a license key the information of the admin is not collected, we gather the user info from the license.
|
379 |
-
*
|
380 |
-
* @since 2.3.2
|
381 |
-
* @author Vova Feldman
|
382 |
-
*/
|
383 |
-
if ( ! $require_license_key ) {
|
384 |
-
$permissions['profile'] = array(
|
385 |
-
'icon-class' => 'dashicons dashicons-admin-users',
|
386 |
-
'label' => $fs->get_text_inline( 'Your Profile Overview', 'permissions-profile' ),
|
387 |
-
'desc' => $fs->get_text_inline( 'Name and email address', 'permissions-profile_desc' ),
|
388 |
-
'priority' => 5,
|
389 |
-
);
|
390 |
-
}
|
391 |
-
|
392 |
-
$permissions['site'] = array(
|
393 |
-
'icon-class' => 'dashicons dashicons-admin-settings',
|
394 |
-
'tooltip' => ( $require_license_key ? sprintf( $fs->get_text_inline( 'So you can manage and control your license remotely from the User Dashboard.', 'permissions-site_tooltip' ), $fs->get_module_type() ) : '' ),
|
395 |
-
'label' => $fs->get_text_inline( 'Your Site Overview', 'permissions-site' ),
|
396 |
-
'desc' => $fs->get_text_inline( 'Site URL, WP version, PHP version', 'permissions-site_desc' ),
|
397 |
-
'priority' => 10,
|
398 |
-
);
|
399 |
-
|
400 |
-
if ( ! $require_license_key ) {
|
401 |
-
$permissions['notices'] = array(
|
402 |
-
'icon-class' => 'dashicons dashicons-testimonial',
|
403 |
-
'label' => $fs->get_text_inline( 'Admin Notices', 'permissions-admin-notices' ),
|
404 |
-
'desc' => $fs->get_text_inline( 'Updates, announcements, marketing, no spam', 'permissions-newsletter_desc' ),
|
405 |
-
'priority' => 13,
|
406 |
-
);
|
407 |
-
}
|
408 |
-
|
409 |
-
$permissions['events'] = array(
|
410 |
-
'icon-class' => 'dashicons dashicons-admin-' . ( $fs->is_plugin() ? 'plugins' : 'appearance' ),
|
411 |
-
'tooltip' => ( $require_license_key ? sprintf( $fs->get_text_inline( 'So you can reuse the license when the %s is no longer active.', 'permissions-events_tooltip' ), $fs->get_module_type() ) : '' ),
|
412 |
-
'label' => sprintf( $fs->get_text_inline( 'Current %s Status', 'permissions-events' ), ucfirst( $fs->get_module_type() ) ),
|
413 |
-
'desc' => $fs->get_text_inline( 'Active, deactivated, or uninstalled', 'permissions-events_desc' ),
|
414 |
-
'priority' => 20,
|
415 |
-
);
|
416 |
-
|
417 |
// Add newsletter permissions if enabled.
|
418 |
if ( $is_gdpr_required || $fs->is_permission_requested( 'newsletter' ) ) {
|
419 |
-
$permissions[
|
420 |
-
'icon-class' => 'dashicons dashicons-email-alt',
|
421 |
-
'label' => $fs->get_text_inline( 'Newsletter', 'permissions-newsletter' ),
|
422 |
-
'desc' => $fs->get_text_inline( 'Updates, announcements, marketing, no spam', 'permissions-newsletter_desc' ),
|
423 |
-
'priority' => 15,
|
424 |
-
);
|
425 |
}
|
426 |
|
427 |
-
$permissions
|
428 |
-
|
429 |
-
|
430 |
-
'tooltip' => $fs->get_text_inline( 'To help us troubleshoot any potential issues that may arise from other plugin or theme conflicts.', 'permissions-events_tooltip' ),
|
431 |
-
'desc' => $fs->get_text_inline( 'Title, slug, version, and is active', 'permissions-extensions_desc' ),
|
432 |
-
'priority' => 25,
|
433 |
-
'optional' => true,
|
434 |
-
'default' => $fs->apply_filters( 'permission_extensions_default', ! $require_license_key )
|
435 |
);
|
436 |
|
437 |
-
// Allow filtering of the permissions list.
|
438 |
-
$permissions = $fs->apply_filters( 'permission_list', $permissions );
|
439 |
-
|
440 |
-
// Sort by priority.
|
441 |
-
uasort( $permissions, 'fs_sort_by_priority' );
|
442 |
-
|
443 |
if ( ! empty( $permissions ) ) : ?>
|
444 |
<div class="fs-permissions">
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
<?php endif ?>
|
456 |
<ul><?php
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
<i class="<?php echo esc_attr( $permission['icon-class'] ); ?>"></i>
|
462 |
-
<?php if ( isset( $permission['optional'] ) && true === $permission['optional'] ) : ?>
|
463 |
-
<div class="fs-switch fs-small fs-round fs-<?php echo $is_permission_on ? 'on' : 'off' ?>">
|
464 |
-
<div class="fs-toggle"></div>
|
465 |
-
</div>
|
466 |
-
<?php endif ?>
|
467 |
-
|
468 |
-
<div class="fs-permission-description">
|
469 |
-
<span<?php if ( ! empty($permission['tooltip']) ) : ?> class="fs-tooltip-trigger"<?php endif ?>><?php echo esc_html( $permission['label'] ); ?><?php if ( ! empty($permission['tooltip']) ) : ?><i class="dashicons dashicons-editor-help"><span class="fs-tooltip" style="width: 200px"><?php echo $permission['tooltip'] ?></span></i><?php endif ?></span>
|
470 |
-
|
471 |
-
<p><?php echo esc_html( $permission['desc'] ); ?></p>
|
472 |
-
</div>
|
473 |
-
</li>
|
474 |
-
<?php endforeach; ?>
|
475 |
-
</ul>
|
476 |
</div>
|
477 |
<?php endif ?>
|
478 |
<?php if ( $is_premium_code && $is_freemium ) : ?>
|
@@ -488,7 +451,10 @@
|
|
488 |
</p>
|
489 |
</div>
|
490 |
<?php endif ?>
|
|
|
491 |
<div class="fs-terms">
|
|
|
|
|
492 |
<a href="https://freemius.com/privacy/" target="_blank" rel="noopener"
|
493 |
tabindex="1"><?php fs_esc_html_echo_inline( 'Privacy Policy', 'privacy-policy', $slug ) ?></a>
|
494 |
-
|
@@ -556,13 +522,12 @@
|
|
556 |
// Reset loading mode.
|
557 |
$primaryCta.html(primaryCtaLabel);
|
558 |
$primaryCta.prop('disabled', false);
|
559 |
-
$(
|
560 |
-
$('.fs-loading').removeClass('fs-loading');
|
561 |
|
562 |
console.log('resetLoadingMode - Primary button was enabled');
|
563 |
},
|
564 |
setLoadingMode = function () {
|
565 |
-
$(document.body).
|
566 |
};
|
567 |
|
568 |
$('.fs-actions .button').on('click', function () {
|
@@ -737,15 +702,25 @@
|
|
737 |
var ajaxOptin = ( requireLicenseKey || isNetworkActive );
|
738 |
|
739 |
$form.on('submit', function () {
|
740 |
-
var $extensionsPermission = $('#
|
741 |
-
isExtensionsTrackingAllowed = ($extensionsPermission.length > 0) ?
|
742 |
-
$extensionsPermission.hasClass('fs-on') :
|
|
|
|
|
|
|
|
|
|
|
743 |
null;
|
744 |
|
745 |
-
if (null === isExtensionsTrackingAllowed) {
|
746 |
-
$('input[name=is_extensions_tracking_allowed]').remove();
|
747 |
} else {
|
748 |
-
$('input[name=is_extensions_tracking_allowed]').val(isExtensionsTrackingAllowed ? 1 : 0);
|
|
|
|
|
|
|
|
|
|
|
749 |
}
|
750 |
|
751 |
/**
|
@@ -802,6 +777,8 @@
|
|
802 |
data.is_marketing_allowed = isMarketingAllowed;
|
803 |
|
804 |
data.is_extensions_tracking_allowed = isExtensionsTrackingAllowed;
|
|
|
|
|
805 |
}
|
806 |
|
807 |
$marketingOptin.removeClass( 'error' );
|
@@ -887,6 +864,15 @@
|
|
887 |
return true;
|
888 |
});
|
889 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
890 |
$primaryCta.on('click', function () {
|
891 |
console.log('Primary button was clicked');
|
892 |
|
@@ -903,14 +889,6 @@
|
|
903 |
return false;
|
904 |
});
|
905 |
|
906 |
-
$( '.fs-switch' ).click( function () {
|
907 |
-
$(this)
|
908 |
-
.toggleClass( 'fs-on' )
|
909 |
-
.toggleClass( 'fs-off' );
|
910 |
-
|
911 |
-
$( this ).parent().toggleClass( 'fs-disabled' );
|
912 |
-
});
|
913 |
-
|
914 |
if (requireLicenseKey) {
|
915 |
/**
|
916 |
* Submit license key on enter.
|
161 |
class="wrap<?php if ( ! fs_is_network_admin() && ( ! $fs->is_enable_anonymous() || $is_pending_activation || $require_license_key ) ) {
|
162 |
echo ' fs-anonymous-disabled';
|
163 |
} ?><?php echo $require_license_key ? ' require-license-key' : '' ?>">
|
164 |
+
<div class="fs-header">
|
165 |
+
<!-- <b class="fs-site-icon"><i class="dashicons dashicons-wordpress-alt"></i></b>-->
|
166 |
+
<?php
|
167 |
+
$size = 50;
|
168 |
+
$vars = array(
|
169 |
+
'id' => $fs->get_id(),
|
170 |
+
'size' => $size,
|
171 |
+
);
|
172 |
+
|
173 |
+
fs_require_once_template( 'plugin-icon.php', $vars );
|
174 |
+
?>
|
175 |
+
<!-- <img class="fs-connect-logo" width="--><?php //echo $size ?><!--" height="--><?php //echo $size ?><!--" src="//img.freemius.com/logo/connect.svg"/>-->
|
176 |
+
</div>
|
177 |
+
<div class="fs-box-container">
|
178 |
<div class="fs-content">
|
179 |
<?php $fs->do_action( 'connect/before_message', $activation_state ) ?>
|
180 |
|
181 |
<?php if ( ! empty( $error ) ) : ?>
|
182 |
<p class="fs-error"><?php echo $fs->apply_filters( 'connect_error_esc_html', esc_html( $error ) ) ?></p>
|
183 |
<?php endif ?>
|
184 |
+
<?php
|
185 |
+
if ( ! $is_pending_activation && ! $require_license_key ) {
|
186 |
+
if ( ! $fs->is_plugin_update() ) {
|
187 |
+
echo $fs->apply_filters( 'connect-header', sprintf(
|
188 |
+
'<h2 style="text-align: center">%s</h2>',
|
189 |
+
esc_html( fs_text_inline( 'Never miss an important update', 'connect-header' ) )
|
190 |
+
) );
|
191 |
+
} else {
|
192 |
+
echo $fs->apply_filters( 'connect-header_on-update', sprintf(
|
193 |
+
'<h2>%s</h2>',
|
194 |
+
sprintf(
|
195 |
+
esc_html(
|
196 |
+
/* translators: %1$s: plugin name (e.g., "Awesome Plugin"); %2$s: version (e.g., "1.2.3") */
|
197 |
+
fs_text_inline('Thank you for updating to %1$s v%2$s!', 'connect-header_on-update' )
|
198 |
+
),
|
199 |
+
esc_html( $fs->get_plugin_name() ),
|
200 |
+
$fs->get_plugin_version()
|
201 |
+
)
|
202 |
+
) );
|
203 |
+
}
|
204 |
+
}
|
205 |
+
?>
|
206 |
<p><?php
|
207 |
$button_label = fs_text_inline( 'Allow & Continue', 'opt-in-connect', $slug );
|
208 |
$message = '';
|
213 |
$message = $fs->apply_filters( 'pending_activation_message', sprintf(
|
214 |
/* translators: %s: name (e.g. Thanks John!) */
|
215 |
fs_text_inline( 'Thanks %s!', 'thanks-x', $slug ) . '<br>' .
|
216 |
+
fs_text_inline( 'You should receive a confirmation email for %s to your mailbox at %s. Please make sure you click the button in that email to %s.', 'pending-activation-message', $slug ),
|
217 |
$first_name,
|
218 |
'<b>' . $fs->get_plugin_name() . '</b>',
|
219 |
'<b>' . $current_user->user_email . '</b>',
|
220 |
+
fs_text_inline( 'complete the opt-in', 'complete-the-opt-in', $slug )
|
221 |
) );
|
222 |
} else if ( $require_license_key ) {
|
223 |
+
$button_label = fs_text_inline( 'Activate License', 'activate-license', $slug );
|
|
|
|
|
224 |
|
225 |
$message = $fs->apply_filters(
|
226 |
'connect-message_on-premium',
|
229 |
$fs->get_plugin_name()
|
230 |
);
|
231 |
} else {
|
232 |
+
$filter = 'connect_message';
|
|
|
|
|
|
|
233 |
|
234 |
+
if ( ! $fs->is_plugin_update() ) {
|
235 |
+
$default_optin_message = esc_html( sprintf( ( $is_gdpr_required ?
|
236 |
+
/* translators: %s: module type (plugin, theme, or add-on) */
|
237 |
+
fs_text_inline( 'Opt in to get email notifications for security & feature updates, educational content, and occasional offers, and to share some basic WordPress environment info. This will help us make the %s more compatible with your site and better at doing what you need it to.', 'connect-message', $slug ) :
|
238 |
+
/* translators: %s: module type (plugin, theme, or add-on) */
|
239 |
+
fs_text_inline( 'Opt in to get email notifications for security & feature updates, and to share some basic WordPress environment info. This will help us make the %s more compatible with your site and better at doing what you need it to.', 'connect-message', $slug ) ), $fs->get_module_label( true ) ) );
|
240 |
+
} else {
|
241 |
// If Freemius was added on a plugin update, set different
|
242 |
// opt-in message.
|
243 |
+
|
244 |
+
/* translators: %s: module type (plugin, theme, or add-on) */
|
245 |
+
$default_optin_message = esc_html( sprintf( fs_text_inline( 'We have introduced this opt-in so you never miss an important update and help us make the %s more compatible with your site and better at doing what you need it to.', 'connect-message_on-update_why' ), $fs->get_module_label( true ) ) );
|
246 |
+
|
247 |
+
$default_optin_message .= '<br><br>' . esc_html( $is_gdpr_required ?
|
248 |
+
fs_text_inline( 'Opt in to get email notifications for security & feature updates, educational content, and occasional offers, and to share some basic WordPress environment info.', 'connect-message_on-update', $slug ) :
|
249 |
+
fs_text_inline( 'Opt in to get email notifications for security & feature updates, and to share some basic WordPress environment info.', 'connect-message_on-update', $slug ) );
|
250 |
|
251 |
if ( $fs->is_enable_anonymous() ) {
|
252 |
+
$default_optin_message .= ' ' . esc_html( fs_text_inline( 'If you skip this, that\'s okay! %1$s will still work just fine.', 'connect-message_on-update_skip', $slug ) );
|
253 |
}
|
254 |
|
255 |
// If user customized the opt-in message on update, use
|
256 |
// that message. Otherwise, fallback to regular opt-in
|
257 |
+
// custom message if exists.
|
258 |
if ( $fs->has_filter( 'connect_message_on_update' ) ) {
|
259 |
$filter = 'connect_message_on_update';
|
260 |
}
|
263 |
$message = $fs->apply_filters(
|
264 |
$filter,
|
265 |
sprintf(
|
266 |
+
$default_optin_message,
|
267 |
'<b>' . esc_html( $fs->get_plugin_name() ) . '</b>',
|
268 |
'<b>' . $current_user->user_login . '</b>',
|
269 |
'<a href="' . $site_url . '" target="_blank" rel="noopener noreferrer">' . $site_url . '</a>',
|
270 |
+
$freemius_link
|
271 |
),
|
272 |
$first_name,
|
273 |
$fs->get_plugin_name(),
|
379 |
value="<?php echo $fs->get_unique_affix() ?>_activate_existing">
|
380 |
<?php wp_nonce_field( 'activate_existing_' . $fs->get_public_key() ) ?>
|
381 |
<input type="hidden" name="is_extensions_tracking_allowed" value="1">
|
382 |
+
<input type="hidden" name="is_diagnostic_tracking_allowed" value="1">
|
383 |
<button class="button button-primary" tabindex="1"
|
384 |
type="submit"><?php echo esc_html( $button_label ) ?></button>
|
385 |
</form>
|
390 |
<input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
|
391 |
<?php endforeach ?>
|
392 |
<input type="hidden" name="is_extensions_tracking_allowed" value="1">
|
393 |
+
<input type="hidden" name="is_diagnostic_tracking_allowed" value="1">
|
394 |
<button class="button button-primary" tabindex="1"
|
395 |
type="submit"<?php if ( $require_license_key ) {
|
396 |
echo ' disabled="disabled"';
|
403 |
|
404 |
<?php $fs->do_action( 'connect/after_actions', $activation_state ) ?>
|
405 |
</div><?php
|
406 |
+
$permission_manager = FS_Permission_Manager::instance( $fs );
|
407 |
|
408 |
// Set core permission list items.
|
409 |
$permissions = array();
|
410 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
411 |
// Add newsletter permissions if enabled.
|
412 |
if ( $is_gdpr_required || $fs->is_permission_requested( 'newsletter' ) ) {
|
413 |
+
$permissions[] = $permission_manager->get_newsletter_permission();
|
|
|
|
|
|
|
|
|
|
|
414 |
}
|
415 |
|
416 |
+
$permissions = $permission_manager->get_permissions(
|
417 |
+
$require_license_key,
|
418 |
+
$permissions
|
|
|
|
|
|
|
|
|
|
|
419 |
);
|
420 |
|
|
|
|
|
|
|
|
|
|
|
|
|
421 |
if ( ! empty( $permissions ) ) : ?>
|
422 |
<div class="fs-permissions">
|
423 |
+
<?php if ( $require_license_key ) : ?>
|
424 |
+
<a class="fs-trigger wp-core-ui" href="#" tabindex="1" style="color: inherit;"><?php echo sprintf(
|
425 |
+
fs_esc_html_inline( 'For delivery of security & feature updates, and license management, %s needs to', 'license-sync-disclaimer', $slug ) . '<b class="fs-arrow"></b>',
|
426 |
+
sprintf( '<nobr class="button-link" style="color: inherit;">%s</nobr>', $fs->get_plugin_title() )
|
427 |
+
) ?></a>
|
428 |
+
<?php else : ?>
|
429 |
+
<a class="fs-trigger wp-core-ui" href="#" tabindex="1" style="color: inherit;"><?php printf(
|
430 |
+
fs_esc_html_inline( 'This will allow %s to', 'this-will-allow-x', $slug ) . '<b class="fs-arrow"></b>',
|
431 |
+
sprintf( '<nobr class="button-link" style="color: inherit;">%s</nobr>', $fs->get_plugin_title() )
|
432 |
+
) ?></a>
|
433 |
<?php endif ?>
|
434 |
<ul><?php
|
435 |
+
foreach ( $permissions as $permission ) {
|
436 |
+
$permission_manager->render_permission( $permission );
|
437 |
+
}
|
438 |
+
?></ul>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
439 |
</div>
|
440 |
<?php endif ?>
|
441 |
<?php if ( $is_premium_code && $is_freemium ) : ?>
|
451 |
</p>
|
452 |
</div>
|
453 |
<?php endif ?>
|
454 |
+
</div>
|
455 |
<div class="fs-terms">
|
456 |
+
<a class="fs-tooltip-trigger<?php echo is_rtl() ? ' rtl' : '' ?>" href="<?php echo $freemius_site_url ?>" target="_blank" rel="noopener" tabindex="1">Powered by Freemius<?php if ( $require_license_key ) : ?> <span class="fs-tooltip" style="width: 170px"><?php echo $fs->get_text_inline( 'Freemius is our licensing and software updates engine', 'permissions-extensions_desc' ) ?></span><?php endif ?></a>
|
457 |
+
-
|
458 |
<a href="https://freemius.com/privacy/" target="_blank" rel="noopener"
|
459 |
tabindex="1"><?php fs_esc_html_echo_inline( 'Privacy Policy', 'privacy-policy', $slug ) ?></a>
|
460 |
-
|
522 |
// Reset loading mode.
|
523 |
$primaryCta.html(primaryCtaLabel);
|
524 |
$primaryCta.prop('disabled', false);
|
525 |
+
$( '.fs-loading' ).removeClass( 'fs-loading' );
|
|
|
526 |
|
527 |
console.log('resetLoadingMode - Primary button was enabled');
|
528 |
},
|
529 |
setLoadingMode = function () {
|
530 |
+
$( document.body ).addClass( 'fs-loading' );
|
531 |
};
|
532 |
|
533 |
$('.fs-actions .button').on('click', function () {
|
702 |
var ajaxOptin = ( requireLicenseKey || isNetworkActive );
|
703 |
|
704 |
$form.on('submit', function () {
|
705 |
+
var $extensionsPermission = $( '#fs_permission_extensions .fs-switch' ),
|
706 |
+
isExtensionsTrackingAllowed = ( $extensionsPermission.length > 0 ) ?
|
707 |
+
$extensionsPermission.hasClass( 'fs-on' ) :
|
708 |
+
null;
|
709 |
+
|
710 |
+
var $diagnosticPermission = $( '#fs_permission_diagnostic .fs-switch' ),
|
711 |
+
isDiagnosticTrackingAllowed = ( $diagnosticPermission.length > 0 ) ?
|
712 |
+
$diagnosticPermission.hasClass( 'fs-on' ) :
|
713 |
null;
|
714 |
|
715 |
+
if ( null === isExtensionsTrackingAllowed ) {
|
716 |
+
$( 'input[name=is_extensions_tracking_allowed]' ).remove();
|
717 |
} else {
|
718 |
+
$( 'input[name=is_extensions_tracking_allowed]' ).val( isExtensionsTrackingAllowed ? 1 : 0 );
|
719 |
+
}
|
720 |
+
|
721 |
+
// We are not showing switch to enable/disable diagnostic tracking while activating free version. So, don't remove hidden `is_diagnostic_tracking_allowed` element from DOM and change the value only if switch is available.
|
722 |
+
if ( null !== isDiagnosticTrackingAllowed ) {
|
723 |
+
$( 'input[name=is_diagnostic_tracking_allowed]' ).val( isDiagnosticTrackingAllowed ? 1 : 0 );
|
724 |
}
|
725 |
|
726 |
/**
|
777 |
data.is_marketing_allowed = isMarketingAllowed;
|
778 |
|
779 |
data.is_extensions_tracking_allowed = isExtensionsTrackingAllowed;
|
780 |
+
|
781 |
+
data.is_diagnostic_tracking_allowed = isDiagnosticTrackingAllowed;
|
782 |
}
|
783 |
|
784 |
$marketingOptin.removeClass( 'error' );
|
864 |
return true;
|
865 |
});
|
866 |
|
867 |
+
$( '#fs_connect .fs-permissions .fs-switch' ).on( 'click', function () {
|
868 |
+
$( this )
|
869 |
+
.toggleClass( 'fs-on' )
|
870 |
+
.toggleClass( 'fs-off' );
|
871 |
+
|
872 |
+
$( this ).closest( '.fs-permission' )
|
873 |
+
.toggleClass( 'fs-disabled' );
|
874 |
+
});
|
875 |
+
|
876 |
$primaryCta.on('click', function () {
|
877 |
console.log('Primary button was clicked');
|
878 |
|
889 |
return false;
|
890 |
});
|
891 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
892 |
if (requireLicenseKey) {
|
893 |
/**
|
894 |
* Submit license key on enter.
|
vendor/freemius/wordpress-sdk/templates/connect/index.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// Silence is golden.
|
3 |
+
// Hide file structure from users on unprotected servers.
|
vendor/freemius/wordpress-sdk/templates/connect/permission.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Freemius
|
4 |
+
* @copyright Copyright (c) 2022, Freemius, Inc.
|
5 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
+
* @since 2.5.1
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @var array $VARS
|
15 |
+
* @var array $permission {
|
16 |
+
* @type string $id
|
17 |
+
* @type bool $default
|
18 |
+
* @type string $icon-class
|
19 |
+
* @type bool $optional
|
20 |
+
* @type string $label
|
21 |
+
* @type string $tooltip
|
22 |
+
* @type string $desc
|
23 |
+
* }
|
24 |
+
*/
|
25 |
+
$permission = $VARS;
|
26 |
+
|
27 |
+
$is_permission_on = ( ! isset( $permission['default'] ) || true === $permission['default'] );
|
28 |
+
?>
|
29 |
+
<li id="fs_permission_<?php echo esc_attr( $permission['id'] ) ?>" data-permission-id="<?php echo esc_attr( $permission['id'] ) ?>"
|
30 |
+
class="fs-permission fs-<?php echo esc_attr( $permission['id'] ); ?><?php echo ( ! $is_permission_on ) ? ' fs-disabled' : ''; ?>">
|
31 |
+
<i class="<?php echo esc_attr( $permission['icon-class'] ); ?>"></i>
|
32 |
+
<?php if ( isset( $permission['optional'] ) && true === $permission['optional'] ) : ?>
|
33 |
+
<div class="fs-switch fs-small fs-round fs-<?php echo $is_permission_on ? 'on' : 'off' ?>">
|
34 |
+
<div class="fs-toggle"></div>
|
35 |
+
</div>
|
36 |
+
<?php endif ?>
|
37 |
+
|
38 |
+
<div class="fs-permission-description">
|
39 |
+
<span<?php if ( ! empty( $permission['tooltip'] ) ) : ?> class="fs-tooltip-trigger"<?php endif ?>><?php echo esc_html( $permission['label'] ); ?><?php if ( ! empty( $permission['tooltip'] ) ) : ?><i class="dashicons dashicons-editor-help"><span class="fs-tooltip" style="width: 200px"><?php echo esc_html( $permission['tooltip'] ) ?></span></i><?php endif ?></span>
|
40 |
+
|
41 |
+
<p><?php echo esc_html( $permission['desc'] ); ?></p>
|
42 |
+
</div>
|
43 |
+
</li>
|
vendor/freemius/wordpress-sdk/templates/connect/permissions-group.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Freemius
|
4 |
+
* @copyright Copyright (c) 2022, Freemius, Inc.
|
5 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3
|
6 |
+
* @since 2.5.1
|
7 |
+
*/
|
8 |
+
|
9 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
+
exit;
|
11 |
+
}
|
12 |
+
|
13 |
+
/**
|
14 |
+
* @var array $VARS
|
15 |
+
*
|
16 |
+
* @var array $permission_group {
|
17 |
+
* @type Freemius $fs
|
18 |
+
* @type string $id
|
19 |
+
* @type string $desc
|
20 |
+
* @type array $prompt
|
21 |
+
* @type array $permissions
|
22 |
+
* @type bool $is_enabled
|
23 |
+
* }
|
24 |
+
*/
|
25 |
+
$permission_group = $VARS;
|
26 |
+
|
27 |
+
$fs = $permission_group[ 'fs' ];
|
28 |
+
|
29 |
+
$permission_manager = FS_Permission_Manager::instance( $fs );
|
30 |
+
|
31 |
+
$opt_out_text = $fs->get_text_x_inline( 'Opt Out', 'verb', 'opt-out' );
|
32 |
+
$opt_in_text = $fs->get_text_x_inline( 'Opt In', 'verb', 'opt-in' );
|
33 |
+
|
34 |
+
if ( empty( $permission_group[ 'prompt' ] ) ) {
|
35 |
+
$is_enabled = false;
|
36 |
+
|
37 |
+
foreach ( $permission_group[ 'permissions' ] as $permission ) {
|
38 |
+
if ( true === $permission[ 'default' ] ) {
|
39 |
+
// Even if one of the permissions is on, treat as if the entire group is on.
|
40 |
+
$is_enabled = true;
|
41 |
+
break;
|
42 |
+
}
|
43 |
+
}
|
44 |
+
} else {
|
45 |
+
$is_enabled = ( isset( $permission_group['is_enabled'] ) && true === $permission_group['is_enabled'] );
|
46 |
+
}
|
47 |
+
?>
|
48 |
+
<div class="fs-permissions-section fs-<?php echo esc_attr( $permission_group[ 'id' ] ) ?>-permissions">
|
49 |
+
<div>
|
50 |
+
<div class="fs-permissions-section--header">
|
51 |
+
<a class="fs-group-opt-out-button"
|
52 |
+
data-type="<?php echo esc_attr( $permission_group['type'] ) ?>"
|
53 |
+
data-group-id="<?php echo esc_attr( $permission_group[ 'id' ] ) ?>"
|
54 |
+
data-is-enabled="<?php echo $is_enabled ? 'true' : 'false' ?>"
|
55 |
+
href="#"><?php echo esc_html( $is_enabled ? $opt_out_text : $opt_in_text ) ?></a>
|
56 |
+
<span class="fs-permissions-section--header-title"><?php
|
57 |
+
// The title is already HTML-escaped.
|
58 |
+
echo $permission_group[ 'title' ]
|
59 |
+
?></span>
|
60 |
+
</div>
|
61 |
+
<p class="fs-permissions-section--desc"><?php
|
62 |
+
// The description is already HTML-escaped.
|
63 |
+
echo $permission_group['desc']
|
64 |
+
?></p></div>
|
65 |
+
<ul>
|
66 |
+
<?php
|
67 |
+
foreach ( $permission_group['permissions'] as $permission ) {
|
68 |
+
$permission_manager->render_permission( $permission );
|
69 |
+
}
|
70 |
+
?>
|
71 |
+
</ul>
|
72 |
+
</div>
|
vendor/freemius/wordpress-sdk/templates/debug.php
CHANGED
@@ -16,6 +16,10 @@
|
|
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>
|
@@ -112,6 +116,15 @@
|
|
112 |
<td>
|
113 |
<button id="fs_set_db_option" class="button"><?php fs_esc_html_echo_inline( 'Set DB Option' ) ?></button>
|
114 |
</td>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
</tr>
|
116 |
</tbody>
|
117 |
</table>
|
@@ -243,7 +256,7 @@
|
|
243 |
WP_FS__MODULE_TYPE_THEME
|
244 |
);
|
245 |
?>
|
246 |
-
|
247 |
<?php foreach ( $module_types as $module_type ) : ?>
|
248 |
<?php $modules = fs_get_entities( $fs_options->get_option( $module_type . 's' ), FS_Plugin::get_class_name() ) ?>
|
249 |
<?php if ( is_array( $modules ) && count( $modules ) > 0 ) : ?>
|
@@ -259,7 +272,7 @@
|
|
259 |
<th><?php fs_esc_html_echo_inline( 'Freemius State' ) ?></th>
|
260 |
<th><?php fs_esc_html_echo_inline( 'Module Path' ) ?></th>
|
261 |
<th><?php fs_esc_html_echo_inline( 'Public Key' ) ?></th>
|
262 |
-
<?php if ( is_multisite
|
263 |
<th><?php fs_esc_html_echo_inline( 'Network Blog' ) ?></th>
|
264 |
<th><?php fs_esc_html_echo_inline( 'Network User' ) ?></th>
|
265 |
<?php endif ?>
|
@@ -282,7 +295,14 @@
|
|
282 |
}
|
283 |
}
|
284 |
?>
|
285 |
-
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
286 |
<tr<?php if ( $is_active ) {
|
287 |
if ( $fs->has_api_connectivity() && $fs->is_on() ) {
|
288 |
echo ' style="background: #E6FFE6; font-weight: bold"';
|
@@ -312,7 +332,7 @@
|
|
312 |
} ?></td>
|
313 |
<td><?php echo $data->file ?></td>
|
314 |
<td><?php echo $data->public_key ?></td>
|
315 |
-
<?php if ( is_multisite
|
316 |
<?php
|
317 |
$network_blog_id = null;
|
318 |
$network_user = null;
|
@@ -366,8 +386,7 @@
|
|
366 |
*/
|
367 |
$sites_map = $VARS[ $module_type . '_sites' ];
|
368 |
|
369 |
-
$
|
370 |
-
$all_plans = false;
|
371 |
?>
|
372 |
<?php if ( is_array( $sites_map ) && count( $sites_map ) > 0 ) : ?>
|
373 |
<h2><?php echo esc_html( sprintf(
|
@@ -393,12 +412,37 @@
|
|
393 |
</tr>
|
394 |
</thead>
|
395 |
<tbody>
|
|
|
396 |
<?php foreach ( $sites_map as $slug => $sites ) : ?>
|
397 |
<?php foreach ( $sites as $site ) : ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
398 |
<tr>
|
399 |
-
<td
|
|
|
|
|
|
|
|
|
|
|
400 |
<?php if ( $is_multisite ) : ?>
|
401 |
-
<td><?php echo $
|
402 |
<td><?php echo fs_strip_url_protocol( $site->url ) ?></td>
|
403 |
<?php endif ?>
|
404 |
<td><?php echo $slug ?></td>
|
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 |
+
$has_any_active_clone = false;
|
21 |
+
|
22 |
+
$is_multisite = is_multisite();
|
23 |
?>
|
24 |
<h1><?php echo fs_text_inline( 'Freemius Debug' ) . ' - ' . fs_text_inline( 'SDK' ) . ' v.' . $fs_active_plugins->newest->version ?></h1>
|
25 |
<div>
|
116 |
<td>
|
117 |
<button id="fs_set_db_option" class="button"><?php fs_esc_html_echo_inline( 'Set DB Option' ) ?></button>
|
118 |
</td>
|
119 |
+
<td>
|
120 |
+
<?php
|
121 |
+
$fs_debug_page_url = 'admin.php?page=freemius&fs_action=allow_clone_resolution_notice';
|
122 |
+
$fs_debug_page_url = fs_is_network_admin() ?
|
123 |
+
network_admin_url( $fs_debug_page_url ) :
|
124 |
+
admin_url( $fs_debug_page_url );
|
125 |
+
?>
|
126 |
+
<a href="<?php echo wp_nonce_url( $fs_debug_page_url, 'fs_allow_clone_resolution_notice' ) ?>" class="button button-primary">Resolve Clone(s)</a>
|
127 |
+
</td>
|
128 |
</tr>
|
129 |
</tbody>
|
130 |
</table>
|
256 |
WP_FS__MODULE_TYPE_THEME
|
257 |
);
|
258 |
?>
|
259 |
+
<?php $active_modules_by_id = array() ?>
|
260 |
<?php foreach ( $module_types as $module_type ) : ?>
|
261 |
<?php $modules = fs_get_entities( $fs_options->get_option( $module_type . 's' ), FS_Plugin::get_class_name() ) ?>
|
262 |
<?php if ( is_array( $modules ) && count( $modules ) > 0 ) : ?>
|
272 |
<th><?php fs_esc_html_echo_inline( 'Freemius State' ) ?></th>
|
273 |
<th><?php fs_esc_html_echo_inline( 'Module Path' ) ?></th>
|
274 |
<th><?php fs_esc_html_echo_inline( 'Public Key' ) ?></th>
|
275 |
+
<?php if ( $is_multisite ) : ?>
|
276 |
<th><?php fs_esc_html_echo_inline( 'Network Blog' ) ?></th>
|
277 |
<th><?php fs_esc_html_echo_inline( 'Network User' ) ?></th>
|
278 |
<?php endif ?>
|
295 |
}
|
296 |
}
|
297 |
?>
|
298 |
+
<?php
|
299 |
+
$fs = null;
|
300 |
+
if ( $is_active ) {
|
301 |
+
$fs = freemius( $data->id );
|
302 |
+
|
303 |
+
$active_modules_by_id[ $data->id ] = true;
|
304 |
+
}
|
305 |
+
?>
|
306 |
<tr<?php if ( $is_active ) {
|
307 |
if ( $fs->has_api_connectivity() && $fs->is_on() ) {
|
308 |
echo ' style="background: #E6FFE6; font-weight: bold"';
|
332 |
} ?></td>
|
333 |
<td><?php echo $data->file ?></td>
|
334 |
<td><?php echo $data->public_key ?></td>
|
335 |
+
<?php if ( $is_multisite ) : ?>
|
336 |
<?php
|
337 |
$network_blog_id = null;
|
338 |
$network_user = null;
|
386 |
*/
|
387 |
$sites_map = $VARS[ $module_type . '_sites' ];
|
388 |
|
389 |
+
$all_plans = false;
|
|
|
390 |
?>
|
391 |
<?php if ( is_array( $sites_map ) && count( $sites_map ) > 0 ) : ?>
|
392 |
<h2><?php echo esc_html( sprintf(
|
412 |
</tr>
|
413 |
</thead>
|
414 |
<tbody>
|
415 |
+
<?php $site_url = null ?>
|
416 |
<?php foreach ( $sites_map as $slug => $sites ) : ?>
|
417 |
<?php foreach ( $sites as $site ) : ?>
|
418 |
+
<?php
|
419 |
+
$blog_id = $is_multisite ?
|
420 |
+
$site->blog_id :
|
421 |
+
null;
|
422 |
+
|
423 |
+
if ( is_null( $site_url ) || $is_multisite ) {
|
424 |
+
$site_url = Freemius::get_unfiltered_site_url(
|
425 |
+
$blog_id,
|
426 |
+
true,
|
427 |
+
true
|
428 |
+
);
|
429 |
+
}
|
430 |
+
|
431 |
+
$is_active_clone = ( $site->is_clone( $site_url ) && isset( $active_modules_by_id[ $site->plugin_id ] ) );
|
432 |
+
|
433 |
+
if ( $is_active_clone ) {
|
434 |
+
$has_any_active_clone = true;
|
435 |
+
}
|
436 |
+
?>
|
437 |
<tr>
|
438 |
+
<td>
|
439 |
+
<?php echo $site->id ?>
|
440 |
+
<?php if ( $is_active_clone ) : ?>
|
441 |
+
<label class="fs-tag fs-warn">Clone</label>
|
442 |
+
<?php endif ?>
|
443 |
+
</td>
|
444 |
<?php if ( $is_multisite ) : ?>
|
445 |
+
<td><?php echo $blog_id ?></td>
|
446 |
<td><?php echo fs_strip_url_protocol( $site->url ) ?></td>
|
447 |
<?php endif ?>
|
448 |
<td><?php echo $slug ?></td>
|
vendor/freemius/wordpress-sdk/templates/forms/license-activation.php
CHANGED
@@ -30,17 +30,10 @@
|
|
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" rel="noopener" tabindex="0">freemius.com</a>';
|
39 |
-
|
40 |
$message_below_input_field = sprintf(
|
41 |
-
fs_text_inline( 'The %1$s will be periodically sending data to %2$s to check for security and feature updates, and verify the validity of your license.', 'license-sync-disclaimer', $slug ),
|
42 |
$fs->get_module_label( true ),
|
43 |
-
$
|
44 |
);
|
45 |
|
46 |
$activate_button_text = fs_text_inline( 'Agree & Activate License', 'agree-activate-license', $slug );
|
30 |
if ( $fs->is_registered() ) {
|
31 |
$activate_button_text = $header_title;
|
32 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
$message_below_input_field = sprintf(
|
34 |
+
fs_text_inline( 'The %1$s will be periodically sending essential license data to %2$s to check for security and feature updates, and verify the validity of your license.', 'license-sync-disclaimer', $slug ),
|
35 |
$fs->get_module_label( true ),
|
36 |
+
"<b>{$fs->get_plugin_title()}</b>"
|
37 |
);
|
38 |
|
39 |
$activate_button_text = fs_text_inline( 'Agree & Activate License', 'agree-activate-license', $slug );
|
vendor/freemius/wordpress-sdk/templates/forms/optout.php
CHANGED
@@ -17,320 +17,166 @@
|
|
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 |
-
|
30 |
-
|
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" rel="noopener">%s</a>',
|
53 |
-
'https://freemius.com',
|
54 |
-
'freemius.com'
|
55 |
-
)
|
56 |
-
);
|
57 |
|
58 |
-
|
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 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
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 |
-
actionLinkSelector = 'span.opt-in-or-opt-out.<?php echo $slug ?> a',
|
102 |
-
$optOutButton = $modal.find( '.button-opt-out' ),
|
103 |
-
$optOutErrorMessage = $modal.find( '.opt-out-error-message' ),
|
104 |
-
$extensionsTracking = $modal.find( '.fs-permission-extensions' ),
|
105 |
-
$body = $( 'body' ),
|
106 |
-
moduleID = '<?php echo $fs->get_id() ?>';
|
107 |
-
|
108 |
-
$modal.data( 'action', action );
|
109 |
-
$modal.appendTo( $body );
|
110 |
-
|
111 |
-
function registerActionLinkClick() {
|
112 |
-
$body.on( 'click', actionLinkSelector, function( evt ) {
|
113 |
-
evt.preventDefault();
|
114 |
-
|
115 |
-
if ( 'stop_tracking' == $modal.data( 'action' ) ) {
|
116 |
-
showModal();
|
117 |
-
} else {
|
118 |
-
optIn();
|
119 |
-
}
|
120 |
-
|
121 |
-
return false;
|
122 |
-
});
|
123 |
-
}
|
124 |
-
|
125 |
-
function registerEventHandlers() {
|
126 |
-
registerActionLinkClick();
|
127 |
-
|
128 |
-
$modal.on( 'click', '.button-opt-out', function( evt ) {
|
129 |
-
evt.preventDefault();
|
130 |
-
|
131 |
-
if ( $( this ).hasClass( 'disabled' ) ) {
|
132 |
-
return;
|
133 |
-
}
|
134 |
-
|
135 |
-
disableOptOutButton();
|
136 |
-
optOut();
|
137 |
-
});
|
138 |
-
|
139 |
-
// If the user has clicked outside the window, close the modal.
|
140 |
-
$modal.on( 'click', '.fs-close, .button-close', function() {
|
141 |
-
closeModal();
|
142 |
-
return false;
|
143 |
-
});
|
144 |
-
}
|
145 |
-
|
146 |
-
<?php if ( $fs->is_registered() ) : ?>
|
147 |
-
registerEventHandlers();
|
148 |
-
<?php endif ?>
|
149 |
-
|
150 |
-
function showModal() {
|
151 |
-
resetModal();
|
152 |
-
|
153 |
-
// Display the dialog box.
|
154 |
-
$modal.addClass( 'active' );
|
155 |
-
$body.addClass( 'has-fs-modal' );
|
156 |
-
}
|
157 |
-
|
158 |
-
function closeModal() {
|
159 |
-
$modal.removeClass( 'active' );
|
160 |
-
$body.removeClass( 'has-fs-modal' );
|
161 |
-
}
|
162 |
-
|
163 |
-
function resetOptOutButton() {
|
164 |
-
enableOptOutButton();
|
165 |
-
$optOutButton.text( <?php echo json_encode( $opt_out_text ) ?> );
|
166 |
-
}
|
167 |
-
|
168 |
-
function resetModal() {
|
169 |
-
hideError();
|
170 |
-
resetOptOutButton();
|
171 |
-
}
|
172 |
-
|
173 |
-
function optIn() {
|
174 |
-
sendRequest();
|
175 |
-
}
|
176 |
-
|
177 |
-
function optOut() {
|
178 |
-
sendRequest();
|
179 |
-
}
|
180 |
-
|
181 |
-
function sendRequest() {
|
182 |
-
var $actionLink = $( actionLinkSelector );
|
183 |
-
|
184 |
-
$.ajax({
|
185 |
-
url: <?php echo Freemius::ajax_url() ?>,
|
186 |
-
method: 'POST',
|
187 |
-
data: {
|
188 |
-
action : ( 'stop_tracking' == action ?
|
189 |
-
'<?php echo $fs->get_ajax_action( 'stop_tracking' ) ?>' :
|
190 |
-
'<?php echo $fs->get_ajax_action( 'allow_tracking' ) ?>'
|
191 |
-
),
|
192 |
-
security : ( 'stop_tracking' == action ?
|
193 |
-
'<?php echo $fs->get_ajax_security( 'stop_tracking' ) ?>' :
|
194 |
-
'<?php echo $fs->get_ajax_security( 'allow_tracking' ) ?>'
|
195 |
-
),
|
196 |
-
module_id: moduleID,
|
197 |
-
_wp_http_referer: '<?php echo $fs->current_page_url() ?>'
|
198 |
-
},
|
199 |
-
beforeSend: function() {
|
200 |
-
if ( 'allow_tracking' == action ) {
|
201 |
-
$actionLink.text( '<?php fs_esc_js_echo_inline( 'Opting in', 'opting-in', $slug ) ?>...' );
|
202 |
-
} else {
|
203 |
-
$optOutButton.text( '<?php fs_esc_js_echo_inline( 'Opting out', 'opting-out', $slug ) ?>...' );
|
204 |
-
}
|
205 |
-
},
|
206 |
-
success: function( resultObj ) {
|
207 |
-
if ( resultObj.success ) {
|
208 |
-
if ( 'allow_tracking' == action ) {
|
209 |
-
action = 'stop_tracking';
|
210 |
-
$actionLink.text( '<?php echo esc_js( $opt_out_text ) ?>' );
|
211 |
-
showOptInAppreciationMessageAndScrollToTop();
|
212 |
-
} else {
|
213 |
-
action = 'allow_tracking';
|
214 |
-
$actionLink.text( '<?php echo esc_js( $opt_in_text ) ?>' );
|
215 |
-
closeModal();
|
216 |
-
|
217 |
-
if ( $adminNotice.length > 0 ) {
|
218 |
-
$adminNotice.remove();
|
219 |
-
}
|
220 |
-
}
|
221 |
-
|
222 |
-
$modal.data( 'action', action );
|
223 |
-
} else {
|
224 |
-
showError( resultObj.error );
|
225 |
-
resetOptOutButton();
|
226 |
-
}
|
227 |
-
}
|
228 |
-
});
|
229 |
-
}
|
230 |
-
|
231 |
-
var isUpdatingPermission = false;
|
232 |
-
$extensionsTracking.on('click', function() {
|
233 |
-
if (isUpdatingPermission) {
|
234 |
-
return false;
|
235 |
-
}
|
236 |
-
|
237 |
-
isUpdatingPermission = true;
|
238 |
-
|
239 |
-
var $switch = $extensionsTracking.find( '.fs-switch' ),
|
240 |
-
$switchFeedback = $extensionsTracking.find( '.fs-switch-feedback' );
|
241 |
-
|
242 |
-
$switch
|
243 |
-
.toggleClass( 'fs-on' )
|
244 |
-
.toggleClass( 'fs-off' );
|
245 |
-
|
246 |
-
$switchFeedback.html( '<i class="fs-ajax-spinner"></i>' );
|
247 |
-
|
248 |
-
$.ajax({
|
249 |
-
url: <?php echo Freemius::ajax_url() ?>,
|
250 |
-
method: 'POST',
|
251 |
-
data: {
|
252 |
-
action : '<?php echo $fs->get_ajax_action( 'update_tracking_permission' ) ?>',
|
253 |
-
security : '<?php echo $fs->get_ajax_security( 'update_tracking_permission' ) ?>',
|
254 |
-
module_id : moduleID,
|
255 |
-
_wp_http_referer: '<?php echo $fs->current_page_url() ?>',
|
256 |
-
permission: 'extensions',
|
257 |
-
is_enabled: $switch.hasClass('fs-on')
|
258 |
-
},
|
259 |
-
success: function( resultObj ) {
|
260 |
-
if ( resultObj.success ) {
|
261 |
-
$switchFeedback.html( '<i class="dashicons dashicons-yes"></i> <?php echo esc_js( fs_text_inline( 'Saved', 'saved', $slug ) ) ?>' )
|
262 |
-
} else {
|
263 |
-
$switch
|
264 |
-
.toggleClass( 'fs-on' )
|
265 |
-
.toggleClass( 'fs-off' );
|
266 |
-
}
|
267 |
-
|
268 |
-
isUpdatingPermission = false;
|
269 |
-
}
|
270 |
-
});
|
271 |
-
});
|
272 |
-
|
273 |
-
function enableOptOutButton() {
|
274 |
-
$optOutButton.removeClass( 'disabled' );
|
275 |
-
}
|
276 |
-
|
277 |
-
function disableOptOutButton() {
|
278 |
-
$optOutButton.addClass( 'disabled' );
|
279 |
-
}
|
280 |
-
|
281 |
-
function hideError() {
|
282 |
-
$optOutErrorMessage.hide();
|
283 |
-
}
|
284 |
-
|
285 |
-
function showOptInAppreciationMessageAndScrollToTop() {
|
286 |
-
$adminNotice.insertAfter( $( '#wpbody-content' ).find( ' > .wrap > h1' ) );
|
287 |
-
window.scrollTo(0, 0);
|
288 |
-
}
|
289 |
-
|
290 |
-
function showError( msg ) {
|
291 |
-
$optOutErrorMessage.find( ' > p' ).html( msg );
|
292 |
-
$optOutErrorMessage.show();
|
293 |
-
}
|
294 |
-
|
295 |
-
<?php if ( $fs->is_theme() ) : ?>
|
296 |
-
/**
|
297 |
-
* Add opt-in/out button to the active theme's buttons collection
|
298 |
-
* in the theme's extended details overlay.
|
299 |
-
*
|
300 |
-
* @author Vova Feldman (@svovaf)
|
301 |
-
* @since 1.2.2.7
|
302 |
-
*/
|
303 |
-
$('.theme-overlay').contentChange(function () {
|
304 |
-
if (0 === $('.theme-overlay.active').length) {
|
305 |
-
// Add opt-in/out button only to the currently active theme.
|
306 |
-
return;
|
307 |
-
}
|
308 |
-
|
309 |
-
if ($('#fs_theme_opt_in_out').length > 0){
|
310 |
-
// Button already there.
|
311 |
-
return;
|
312 |
-
}
|
313 |
-
|
314 |
-
var label = (('stop_tracking' == action) ?
|
315 |
-
'<?php echo esc_js( $opt_out_text ) ?>' :
|
316 |
-
'<?php echo esc_js( $opt_in_text ) ?>'),
|
317 |
-
href = (('stop_tracking' != action) ?
|
318 |
-
'<?php echo ( $fs->is_registered() ? '' : esc_js( $reconnect_url ) ) ?>' :
|
319 |
-
'');
|
320 |
-
|
321 |
-
var $actionLink = $('<a id="fs_theme_opt_in_out" href="' + encodeURI(href) + '" class="button">' + label + '</a>');
|
322 |
-
|
323 |
-
actionLinkSelector = '#fs_theme_opt_in_out';
|
324 |
-
|
325 |
-
$modal.data( 'action', action );
|
326 |
-
|
327 |
-
$('.theme-wrap .theme-actions .active-theme').append($actionLink);
|
328 |
-
|
329 |
-
if ('' === href) {
|
330 |
-
registerActionLinkClick();
|
331 |
-
}
|
332 |
-
});
|
333 |
-
<?php endif ?>
|
334 |
});
|
335 |
})( jQuery );
|
336 |
</script>
|
17 |
$fs = freemius( $VARS['id'] );
|
18 |
$slug = $fs->get_slug();
|
19 |
|
|
|
|
|
|
|
|
|
20 |
$reconnect_url = $fs->get_activation_url( array(
|
21 |
'nonce' => wp_create_nonce( $fs->get_unique_affix() . '_reconnect' ),
|
22 |
'fs_action' => ( $fs->get_unique_affix() . '_reconnect' ),
|
23 |
) );
|
24 |
|
25 |
+
$plugin_title = "<strong>" . esc_html( $fs->get_plugin()->title ) . "</strong>";
|
26 |
+
$opt_out_text = fs_text_x_inline( 'Opt Out', 'verb', 'opt-out', $slug );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
|
28 |
+
$permission_manager = FS_Permission_Manager::instance( $fs );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
|
31 |
+
fs_enqueue_local_style( 'fs_optout', '/admin/optout.css' );
|
32 |
fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
|
33 |
+
|
34 |
+
if ( ! $fs->is_premium() ) {
|
35 |
+
$optional_permissions = array( $permission_manager->get_extensions_permission( false,
|
36 |
+
false,
|
37 |
+
true
|
38 |
+
) );
|
39 |
+
|
40 |
+
$permission_groups = array(
|
41 |
+
array(
|
42 |
+
'id' => 'communication',
|
43 |
+
'type' => 'required',
|
44 |
+
'title' => $fs->get_text_inline( 'Communication', 'communication' ),
|
45 |
+
'desc' => '',
|
46 |
+
'permissions' => $permission_manager->get_opt_in_required_permissions( true ),
|
47 |
+
'is_enabled' => $fs->is_registered(),
|
48 |
+
'prompt' => array(
|
49 |
+
$fs->esc_html_inline( "Sharing your name and email allows us to keep you in the loop about new features and important updates, warn you about security issues before they become public knowledge, and send you special offers.", 'opt-out-message_user' ),
|
50 |
+
sprintf(
|
51 |
+
$fs->esc_html_inline( 'By clicking "Opt Out", %s will no longer be able to view your name and email.',
|
52 |
+
'opt-out-message-clicking-opt-out' ),
|
53 |
+
$plugin_title
|
54 |
+
),
|
55 |
+
),
|
56 |
+
'prompt_cancel_label' => $fs->get_text_inline( 'Stay Connected', 'stay-connected' )
|
57 |
+
),
|
58 |
+
array(
|
59 |
+
'id' => 'diagnostic',
|
60 |
+
'type' => 'required',
|
61 |
+
'title' => $fs->get_text_inline( 'Diagnostic Info', 'diagnostic-info' ),
|
62 |
+
'desc' => '',
|
63 |
+
'permissions' => $permission_manager->get_opt_in_diagnostic_permissions( true ),
|
64 |
+
'is_enabled' => $fs->is_tracking_allowed(),
|
65 |
+
'prompt' => array(
|
66 |
+
sprintf(
|
67 |
+
$fs->esc_html_inline( 'Sharing diagnostic data helps to provide additional functionality that\'s relevant to your website, avoid WordPress or PHP version incompatibilities that can break the website, and recognize which languages & regions the %s should be translated and tailored to.',
|
68 |
+
'opt-out-message-clicking-opt-out' ),
|
69 |
+
$fs->get_module_type()
|
70 |
+
),
|
71 |
+
sprintf(
|
72 |
+
$fs->esc_html_inline( 'By clicking "Opt Out", diagnostic data will no longer be sent to %s.',
|
73 |
+
'opt-out-message-clicking-opt-out' ),
|
74 |
+
$plugin_title
|
75 |
+
),
|
76 |
+
),
|
77 |
+
'prompt_cancel_label' => $fs->get_text_inline( 'Keep Sharing', 'keep-sharing' )
|
78 |
+
),
|
79 |
+
array(
|
80 |
+
'id' => 'extensions',
|
81 |
+
'type' => 'optional',
|
82 |
+
'title' => $fs->get_text_inline( 'Extensions', 'extensions' ),
|
83 |
+
'desc' => '',
|
84 |
+
'permissions' => $optional_permissions,
|
85 |
+
),
|
86 |
+
);
|
87 |
+
} else {
|
88 |
+
$optional_permissions = $permission_manager->get_license_optional_permissions( false, true );
|
89 |
+
|
90 |
+
$permission_groups = array(
|
91 |
+
array(
|
92 |
+
'id' => 'essentials',
|
93 |
+
'type' => 'required',
|
94 |
+
'title' => $fs->esc_html_inline( 'Required', 'required' ),
|
95 |
+
'desc' => sprintf( $fs->esc_html_inline( 'For automatic delivery of security & feature updates, and license management & protection, %s needs to:',
|
96 |
+
'license-sync-disclaimer' ),
|
97 |
+
'<b>' . esc_html( $fs->get_plugin_title() ) . '</b>' ),
|
98 |
+
'permissions' => $permission_manager->get_license_required_permissions( true ),
|
99 |
+
'is_enabled' => $permission_manager->is_essentials_tracking_allowed(),
|
100 |
+
'prompt' => array(
|
101 |
+
sprintf( $fs->esc_html_inline( 'To ensure that security & feature updates are automatically delivered directly to your WordPress Admin Dashboard while protecting your license from unauthorized abuse, %2$s needs to view the website’s homepage URL, %1$s version, SDK version, and whether the %1$s is active.', 'premium-opt-out-message-usage-tracking' ), $fs->get_module_type(), $plugin_title ),
|
102 |
+
sprintf( $fs->esc_html_inline( 'By opting out from sharing this information with the updates server, you’ll have to check for new %1$s releases and manually download & install them. Not just a hassle, but missing an update can put your site at risk and cause undue compatibility issues, so we highly recommend keeping these essential permissions on.', 'opt-out-message-clicking-opt-out' ), $fs->get_module_type(), $plugin_title ),
|
103 |
+
),
|
104 |
+
'prompt_cancel_label' => $fs->get_text_inline( 'Keep automatic updates', 'premium-opt-out-cancel' )
|
105 |
+
),
|
106 |
+
array(
|
107 |
+
'id' => 'optional',
|
108 |
+
'type' => 'optional',
|
109 |
+
'title' => $fs->esc_html_inline( 'Optional', 'optional' ),
|
110 |
+
'desc' => sprintf( $fs->esc_html_inline( 'For ongoing compatibility with your website, you can optionally allow %s to:',
|
111 |
+
'optional-permissions-disclaimer' ), $plugin_title ),
|
112 |
+
'permissions' => $optional_permissions,
|
113 |
+
),
|
114 |
+
);
|
115 |
+
}
|
116 |
+
|
117 |
+
$ajax_action = 'toggle_permission_tracking';
|
118 |
+
|
119 |
+
$form_id = "fs_opt_out_{$fs->get_id()}";
|
120 |
?>
|
121 |
+
<div id="<?php echo $form_id ?>"
|
122 |
+
class="fs-modal fs-modal-opt-out"
|
123 |
+
data-plugin-id="<?php echo $fs->get_id() ?>"
|
124 |
+
data-action="<?php echo $fs->get_ajax_action( $ajax_action ) ?>"
|
125 |
+
data-security="<?php echo $fs->get_ajax_security( $ajax_action ) ?>"
|
126 |
+
style="display: none">
|
127 |
+
<div class="fs-modal-dialog">
|
128 |
+
<div class="fs-modal-header">
|
129 |
+
<h4><?php echo esc_html( $opt_out_text ) ?></h4>
|
130 |
+
<a href="!#" class="fs-close"><i class="dashicons dashicons-no" title="Dismiss"></i></a>
|
131 |
+
</div>
|
132 |
+
<div class="fs-opt-out-permissions">
|
133 |
+
<div class="fs-modal-body">
|
134 |
+
<div class="notice notice-error inline opt-out-error-message"><p></p></div>
|
135 |
+
<div class="fs-permissions fs-open">
|
136 |
+
<?php foreach ( $permission_groups as $i => $permission_group ) : ?>
|
137 |
+
<?php $permission_manager->render_permissions_group( $permission_group ) ?>
|
138 |
+
<?php if ( $i < count( $permission_groups ) - 1 ) : ?><hr><?php endif ?>
|
139 |
+
<?php endforeach ?>
|
140 |
+
</div>
|
141 |
+
</div>
|
142 |
+
<div class="fs-modal-footer">
|
143 |
+
<button class="button button-primary button-close" tabindex="1"><?php echo $fs->esc_html_inline( 'Done', 'done' ) ?></button>
|
144 |
+
</div>
|
145 |
+
</div>
|
146 |
+
<?php foreach ( $permission_groups as $i => $permission_group ) : ?>
|
147 |
+
<?php if ( ! empty( $permission_group[ 'prompt' ] ) ) : ?>
|
148 |
+
<div class="fs-<?php echo $permission_group[ 'id' ] ?>-opt-out fs-opt-out-disclaimer" data-group-id="<?php echo $permission_group[ 'id' ] ?>" style="display: none">
|
149 |
+
<div class="fs-modal-body">
|
150 |
+
<div class="fs-modal-panel active">
|
151 |
+
<div class="notice notice-error inline opt-out-error-message"><p></p></div>
|
152 |
+
<?php foreach ( $permission_group[ 'prompt' ] as $p ) : ?>
|
153 |
+
<p><?php echo $p ?></p>
|
154 |
+
<?php endforeach ?>
|
155 |
+
</div>
|
156 |
+
</div>
|
157 |
+
<div class="fs-modal-footer">
|
158 |
+
<a class="fs-opt-out-button" tabindex="2" href="#"><?php echo esc_html( $opt_out_text ) ?></a>
|
159 |
+
<button class="button button-primary fs-opt-out-cancel-button" tabindex="1"><?php echo esc_html( $permission_group[ 'prompt_cancel_label' ] ) ?></button>
|
160 |
+
</div>
|
161 |
+
</div>
|
162 |
+
<?php endif ?>
|
163 |
+
<?php endforeach ?>
|
164 |
+
</div>
|
165 |
+
</div>
|
166 |
+
|
167 |
+
<?php $permission_manager->require_permissions_js( false ) ?>
|
168 |
+
|
169 |
<script type="text/javascript">
|
170 |
(function( $ ) {
|
171 |
$( document ).ready(function() {
|
172 |
+
FS.OptOut(
|
173 |
+
'<?php echo $fs->get_id() ?>',
|
174 |
+
'<?php echo $slug ?>',
|
175 |
+
'<?php echo $fs->get_module_type() ?>',
|
176 |
+
<?php echo $fs->is_registered( true ) ? 'true' : 'false' ?>,
|
177 |
+
<?php echo $fs->is_tracking_allowed() ? 'true' : 'false' ?>,
|
178 |
+
'<?php echo esc_js( $reconnect_url ) ?>'
|
179 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
});
|
181 |
})( jQuery );
|
182 |
</script>
|
vendor/freemius/wordpress-sdk/templates/js/permissions.php
ADDED
@@ -0,0 +1,546 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.5.1
|
7 |
+
*/
|
8 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
+
exit;
|
10 |
+
}
|
11 |
+
?>
|
12 |
+
<script type="text/javascript">
|
13 |
+
( function ( $ ) {
|
14 |
+
var global = this;
|
15 |
+
|
16 |
+
// Namespace.
|
17 |
+
global.FS = global.FS || {};
|
18 |
+
|
19 |
+
//region Switches
|
20 |
+
|
21 |
+
function toggleSwitches( $switches, isOn ) {
|
22 |
+
$switches
|
23 |
+
.toggleClass( 'fs-on', ( null != isOn ? ( true === isOn ) : isOn ) )
|
24 |
+
.toggleClass( 'fs-off', ( null != isOn ? ( false === isOn ) : isOn ) );
|
25 |
+
}
|
26 |
+
|
27 |
+
function isSwitch( $switch, isOn ) {
|
28 |
+
return $switch.hasClass( isOn ? 'fs-on' : 'fs-off' );
|
29 |
+
}
|
30 |
+
|
31 |
+
function getSwitchesStates( $switches, isEnabled ) {
|
32 |
+
var switchStates = [];
|
33 |
+
for ( var i = 0; i < $switches.length; i++ ) {
|
34 |
+
switchStates.push( isSwitch( $( $switches[ i ] ), isEnabled ) );
|
35 |
+
}
|
36 |
+
|
37 |
+
return switchStates;
|
38 |
+
}
|
39 |
+
|
40 |
+
//endregion
|
41 |
+
|
42 |
+
function toggleGroupOptOut( $button, isEnabled ) {
|
43 |
+
setOptInLabel( $button, ! isEnabled );
|
44 |
+
|
45 |
+
$button.data( 'is-enabled', isEnabled );
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @param {object} $permissionsSection
|
50 |
+
*
|
51 |
+
* @returns {string[]}
|
52 |
+
*/
|
53 |
+
function getGroupPermissionIDs( $permissionsSection ) {
|
54 |
+
var permissions = [];
|
55 |
+
$permissionsSection.find( 'ul li').each( function() {
|
56 |
+
permissions.push( $( this ).data( 'permission-id' ) );
|
57 |
+
});
|
58 |
+
|
59 |
+
return permissions;
|
60 |
+
}
|
61 |
+
|
62 |
+
function getGroupOptOutButton( $section ) {
|
63 |
+
return $section.find( '.fs-group-opt-out-button' );
|
64 |
+
}
|
65 |
+
|
66 |
+
//region Opt-in/out Labels
|
67 |
+
|
68 |
+
function setUpdatingLabel( $button, isEnabled ) {
|
69 |
+
$button.text( isEnabled ?
|
70 |
+
'<?php fs_esc_js_echo_inline( 'Opting in', 'opting-in' ) ?>...' :
|
71 |
+
'<?php fs_esc_js_echo_inline( 'Opting out', 'opting-out' ) ?>...'
|
72 |
+
);
|
73 |
+
}
|
74 |
+
|
75 |
+
function getOptInLabel( isEnabled ) {
|
76 |
+
return isEnabled ?
|
77 |
+
'<?php echo esc_js( fs_text_x_inline( 'Opt In', 'verb', 'opt-in' ) ) ?>' :
|
78 |
+
'<?php echo esc_js( fs_text_x_inline( 'Opt Out', 'verb', 'opt-out' ) ) ?>';
|
79 |
+
}
|
80 |
+
|
81 |
+
function setOptInLabel( $button, isEnabled ) {
|
82 |
+
$button.text( getOptInLabel( isEnabled ) );
|
83 |
+
}
|
84 |
+
|
85 |
+
//endregion
|
86 |
+
|
87 |
+
global.FS.Permissions = function () {
|
88 |
+
var isUpdating = false;
|
89 |
+
|
90 |
+
function updateStarted() {
|
91 |
+
isUpdating = true;
|
92 |
+
$body.addClass( 'fs-loading' );
|
93 |
+
}
|
94 |
+
|
95 |
+
function updateCompleted() {
|
96 |
+
isUpdating = false;
|
97 |
+
$body.removeClass( 'fs-loading' );
|
98 |
+
}
|
99 |
+
|
100 |
+
return {
|
101 |
+
isUpdating: function() {
|
102 |
+
return isUpdating;
|
103 |
+
},
|
104 |
+
/**
|
105 |
+
* @param {Number} pluginID
|
106 |
+
* @param {Array} permissions
|
107 |
+
* @param {Boolean} isEnabled
|
108 |
+
* @param {Callback} [success]
|
109 |
+
* @param {Callback} [failure]
|
110 |
+
* @param {Callback} [complete]
|
111 |
+
*/
|
112 |
+
updatePermissions: function(
|
113 |
+
pluginID,
|
114 |
+
permissions,
|
115 |
+
isEnabled,
|
116 |
+
success,
|
117 |
+
failure,
|
118 |
+
complete
|
119 |
+
) {
|
120 |
+
if ( isUpdating ) {
|
121 |
+
return;
|
122 |
+
}
|
123 |
+
|
124 |
+
updateStarted();
|
125 |
+
|
126 |
+
var
|
127 |
+
$permissionsContainer = $( '#fs_opt_out_' + pluginID );
|
128 |
+
|
129 |
+
$.ajax( {
|
130 |
+
url : <?php echo Freemius::ajax_url() ?>,
|
131 |
+
method : 'POST',
|
132 |
+
data : {
|
133 |
+
action : $permissionsContainer.data( 'action' ),
|
134 |
+
security : $permissionsContainer.data( 'security' ),
|
135 |
+
module_id : pluginID,
|
136 |
+
_wp_http_referer: '<?php echo Freemius::current_page_url() ?>',
|
137 |
+
permissions : permissions.join( ',' ),
|
138 |
+
is_enabled : isEnabled
|
139 |
+
},
|
140 |
+
success : function ( resultObj ) {
|
141 |
+
if ( resultObj.success ) {
|
142 |
+
if ( success ) {
|
143 |
+
success( resultObj );
|
144 |
+
}
|
145 |
+
} else {
|
146 |
+
if ( failure ) {
|
147 |
+
failure( resultObj );
|
148 |
+
}
|
149 |
+
}
|
150 |
+
},
|
151 |
+
error : failure,
|
152 |
+
complete: function () {
|
153 |
+
if ( complete ) {
|
154 |
+
complete();
|
155 |
+
}
|
156 |
+
|
157 |
+
updateCompleted();
|
158 |
+
}
|
159 |
+
});
|
160 |
+
},
|
161 |
+
updateGroupPermissions: function(
|
162 |
+
pluginID,
|
163 |
+
groupID,
|
164 |
+
isEnabled,
|
165 |
+
success,
|
166 |
+
failure,
|
167 |
+
complete
|
168 |
+
) {
|
169 |
+
if ( isUpdating ) {
|
170 |
+
return;
|
171 |
+
}
|
172 |
+
|
173 |
+
var
|
174 |
+
$modal = $( '#fs_opt_out_' + pluginID ),
|
175 |
+
$permissionsSection = $modal.find( '.fs-permissions-section.fs-' + groupID + '-permissions' ),
|
176 |
+
$optOutButton = getGroupOptOutButton( $permissionsSection ),
|
177 |
+
$permissions = $permissionsSection.find( 'ul li'),
|
178 |
+
permissions = [];
|
179 |
+
|
180 |
+
$permissions.each( function() {
|
181 |
+
permissions.push( $( this ).data( 'permission-id' ) );
|
182 |
+
});
|
183 |
+
|
184 |
+
setUpdatingLabel( $optOutButton, isEnabled );
|
185 |
+
|
186 |
+
this.updatePermissions(
|
187 |
+
pluginID,
|
188 |
+
permissions,
|
189 |
+
isEnabled,
|
190 |
+
function( resultObj ) {
|
191 |
+
if ( resultObj.success ) {
|
192 |
+
toggleGroupOptOut( $optOutButton, isEnabled );
|
193 |
+
|
194 |
+
// Update permissions state.
|
195 |
+
$permissions.toggleClass( 'fs-disabled', ! isEnabled );
|
196 |
+
|
197 |
+
// Update switches state, if there are any.
|
198 |
+
toggleSwitches( $permissions.find( '.fs-switch' ), isEnabled );
|
199 |
+
|
200 |
+
if ( success ) {
|
201 |
+
success();
|
202 |
+
}
|
203 |
+
}
|
204 |
+
},
|
205 |
+
function ( resultObj ) {
|
206 |
+
setOptInLabel( $optOutButton, isEnabled );
|
207 |
+
|
208 |
+
if ( failure ) {
|
209 |
+
failure( resultObj );
|
210 |
+
}
|
211 |
+
},
|
212 |
+
complete
|
213 |
+
);
|
214 |
+
}
|
215 |
+
};
|
216 |
+
}();
|
217 |
+
|
218 |
+
var $body = $( 'body' )
|
219 |
+
|
220 |
+
global.FS.OptOut = function (
|
221 |
+
pluginID,
|
222 |
+
slug,
|
223 |
+
type,
|
224 |
+
isRegistered,
|
225 |
+
isTrackingAllowed,
|
226 |
+
reconnectUrl
|
227 |
+
) {
|
228 |
+
var $modal = $( '#fs_opt_out_' + pluginID ),
|
229 |
+
actionLinkSelector = ('theme' === type ? '#fs_theme_opt_in_out' : 'span.opt-in-or-opt-out.' + slug + ' a' );
|
230 |
+
|
231 |
+
//region Error Handling
|
232 |
+
|
233 |
+
function hideError( $optOutErrorMessage ) {
|
234 |
+
$optOutErrorMessage = $optOutErrorMessage || $modal.find( '.opt-out-error-message' );
|
235 |
+
$optOutErrorMessage.hide();
|
236 |
+
}
|
237 |
+
|
238 |
+
function showError( $optOutErrorMessage, msg ) {
|
239 |
+
$optOutErrorMessage.find( ' > p' ).html( msg );
|
240 |
+
$optOutErrorMessage.show();
|
241 |
+
}
|
242 |
+
|
243 |
+
//endregion
|
244 |
+
|
245 |
+
function backToPermissionsList() {
|
246 |
+
$modal.find( '.fs-opt-out-disclaimer' )
|
247 |
+
.hide();
|
248 |
+
|
249 |
+
$modal.find( '.fs-opt-out-permissions' )
|
250 |
+
.show();
|
251 |
+
}
|
252 |
+
|
253 |
+
function removeFeedbackIndicators() {
|
254 |
+
$modal.find( '.fs-switch-feedback' )
|
255 |
+
.remove();
|
256 |
+
}
|
257 |
+
|
258 |
+
//region Modal Dialog
|
259 |
+
|
260 |
+
function closeModal() {
|
261 |
+
$modal.removeClass( 'active' );
|
262 |
+
$body.removeClass( 'has-fs-modal' );
|
263 |
+
$modal.hide();
|
264 |
+
}
|
265 |
+
|
266 |
+
function resetModal() {
|
267 |
+
hideError();
|
268 |
+
removeFeedbackIndicators();
|
269 |
+
backToPermissionsList();
|
270 |
+
}
|
271 |
+
|
272 |
+
function showModal() {
|
273 |
+
resetModal();
|
274 |
+
|
275 |
+
// Display the dialog box.
|
276 |
+
$modal.show();
|
277 |
+
$modal.addClass( 'active' );
|
278 |
+
$body.addClass( 'has-fs-modal' );
|
279 |
+
}
|
280 |
+
|
281 |
+
//endregion
|
282 |
+
|
283 |
+
function registerActionLinkClick() {
|
284 |
+
$body.on( 'click', actionLinkSelector, function( evt ) {
|
285 |
+
evt.preventDefault();
|
286 |
+
|
287 |
+
showModal();
|
288 |
+
|
289 |
+
return false;
|
290 |
+
});
|
291 |
+
}
|
292 |
+
|
293 |
+
function registerEventHandlers() {
|
294 |
+
// If the user has clicked outside the window, close the modal.
|
295 |
+
$modal.on( 'click', '.fs-close, .button-close', function() {
|
296 |
+
closeModal();
|
297 |
+
return false;
|
298 |
+
} );
|
299 |
+
|
300 |
+
$modal.on( 'click', '.fs-permissions .fs-switch', function () {
|
301 |
+
if ( FS.Permissions.isUpdating() ) {
|
302 |
+
return false;
|
303 |
+
}
|
304 |
+
|
305 |
+
var $switch = $( this ),
|
306 |
+
$permission = $switch.closest( '.fs-permission' );
|
307 |
+
|
308 |
+
toggleSwitches( $switch );
|
309 |
+
|
310 |
+
$permission.toggleClass( 'fs-disabled' );
|
311 |
+
|
312 |
+
var $optOutContainer = $switch.closest( '.fs-modal-opt-out' );
|
313 |
+
|
314 |
+
if ( 0 === $optOutContainer.length ) {
|
315 |
+
return;
|
316 |
+
}
|
317 |
+
|
318 |
+
// Remove previously added feedback element.
|
319 |
+
$switch.closest( '.fs-modal-dialog' )
|
320 |
+
.find( '.fs-switch-feedback' )
|
321 |
+
.remove();
|
322 |
+
|
323 |
+
var $switchFeedback = $( '<span class="fs-switch-feedback"><i class="fs-ajax-spinner"></i></span>' );
|
324 |
+
|
325 |
+
$switch.after( $switchFeedback )
|
326 |
+
|
327 |
+
var
|
328 |
+
permissionID = $permission.data( 'permission-id' ),
|
329 |
+
isEnabled = isSwitch( $switch, true );
|
330 |
+
|
331 |
+
FS.Permissions.updatePermissions(
|
332 |
+
$optOutContainer.data( 'plugin-id' ),
|
333 |
+
[ permissionID ],
|
334 |
+
isEnabled,
|
335 |
+
function () {
|
336 |
+
$switchFeedback.addClass( 'success' );
|
337 |
+
$switchFeedback.html( '<i class="dashicons dashicons-yes"></i> <?php echo esc_js( fs_text_inline( 'Saved', 'saved' ) ) ?>' );
|
338 |
+
|
339 |
+
var
|
340 |
+
$permissionsGroup = $switch.closest( '.fs-permissions-section' ),
|
341 |
+
$groupPermissions = $permissionsGroup.find( 'ul li' );
|
342 |
+
|
343 |
+
var allGroupPermissionsUseSameValue = false;
|
344 |
+
|
345 |
+
if (
|
346 |
+
isEnabled &&
|
347 |
+
0 === $groupPermissions.filter( '.fs-disabled' ).length )
|
348 |
+
{
|
349 |
+
allGroupPermissionsUseSameValue = true;
|
350 |
+
} else if (
|
351 |
+
! isEnabled &&
|
352 |
+
$groupPermissions.length === $groupPermissions.filter( '.fs-disabled' ).length
|
353 |
+
) {
|
354 |
+
allGroupPermissionsUseSameValue = true;
|
355 |
+
}
|
356 |
+
|
357 |
+
if ( allGroupPermissionsUseSameValue ) {
|
358 |
+
toggleGroupOptOut( getGroupOptOutButton( $permissionsGroup ), isEnabled );
|
359 |
+
}
|
360 |
+
},
|
361 |
+
function () {
|
362 |
+
// Revert switch.
|
363 |
+
toggleSwitches( $switch );
|
364 |
+
|
365 |
+
$switchFeedback.remove();
|
366 |
+
}
|
367 |
+
)
|
368 |
+
});
|
369 |
+
|
370 |
+
// Move back to the permissions list if cancelling opt-out.
|
371 |
+
$modal.on( 'click', '.fs-opt-out-disclaimer .fs-opt-out-cancel-button', function ( evt ) {
|
372 |
+
backToPermissionsList();
|
373 |
+
});
|
374 |
+
|
375 |
+
$modal.on( 'click', '.fs-opt-out-disclaimer .fs-modal-footer .fs-opt-out-button', function ( evt ) {
|
376 |
+
var
|
377 |
+
$optOutButton = $( this ),
|
378 |
+
$actionLink = $( actionLinkSelector ),
|
379 |
+
isEnabled = true,
|
380 |
+
$optOutDisclaimer = $( $optOutButton.closest( '.fs-opt-out-disclaimer' )[ 0 ] ),
|
381 |
+
groupID = $optOutDisclaimer.data( 'group-id' ),
|
382 |
+
$errorMessage = $optOutDisclaimer.find( '.opt-out-error-message' );
|
383 |
+
|
384 |
+
setUpdatingLabel( $optOutButton, ! isEnabled );
|
385 |
+
|
386 |
+
$optOutDisclaimer.find( '.button-primary' ).prop( 'disabled', true );
|
387 |
+
|
388 |
+
hideError( $errorMessage );
|
389 |
+
|
390 |
+
FS.Permissions.updateGroupPermissions(
|
391 |
+
pluginID,
|
392 |
+
groupID,
|
393 |
+
! isEnabled,
|
394 |
+
function () {
|
395 |
+
if ( 'communication' === groupID ) {
|
396 |
+
window.location.reload();
|
397 |
+
} else {
|
398 |
+
setOptInLabel( $actionLink, ! isEnabled );
|
399 |
+
|
400 |
+
backToPermissionsList();
|
401 |
+
}
|
402 |
+
},
|
403 |
+
function ( resultObj ) {
|
404 |
+
setOptInLabel( $optOutButton, false );
|
405 |
+
|
406 |
+
showError( $errorMessage, resultObj.error );
|
407 |
+
},
|
408 |
+
function () {
|
409 |
+
if ( 'communication' !== groupID ) {
|
410 |
+
setOptInLabel( $optOutButton, false );
|
411 |
+
}
|
412 |
+
|
413 |
+
$optOutDisclaimer.find( '.button-primary' ).prop( 'disabled', false );
|
414 |
+
}
|
415 |
+
);
|
416 |
+
} );
|
417 |
+
|
418 |
+
$modal.on( 'click', '.fs-group-opt-out-button', function ( evt ) {
|
419 |
+
evt.preventDefault();
|
420 |
+
|
421 |
+
if ( FS.Permissions.isUpdating() ) {
|
422 |
+
return;
|
423 |
+
}
|
424 |
+
|
425 |
+
var
|
426 |
+
$optOutButton = $( this ),
|
427 |
+
groupID = $optOutButton.data( 'group-id' ),
|
428 |
+
isEnabled = $optOutButton.data( 'is-enabled' ),
|
429 |
+
$optOutDisclaimer = $modal.find( '.fs-' + groupID + '-opt-out' ),
|
430 |
+
isConfirmRequired = ( 0 < $optOutDisclaimer.length ),
|
431 |
+
$errorMessage = $modal.find( '.fs-opt-out-permissions .opt-out-error-message' );
|
432 |
+
|
433 |
+
$errorMessage.hide();
|
434 |
+
|
435 |
+
if ( isConfirmRequired ) {
|
436 |
+
if ( isEnabled ) {
|
437 |
+
// Move to disclaimer window.
|
438 |
+
$modal.find( '.fs-opt-out-permissions' )
|
439 |
+
.hide();
|
440 |
+
|
441 |
+
$optOutDisclaimer.show();
|
442 |
+
} else {
|
443 |
+
// Opt-in.
|
444 |
+
FS.Permissions.updateGroupPermissions(
|
445 |
+
pluginID,
|
446 |
+
groupID,
|
447 |
+
! isEnabled,
|
448 |
+
( 'communication' !== groupID ) ?
|
449 |
+
null :
|
450 |
+
function () {
|
451 |
+
window.location.reload();
|
452 |
+
},
|
453 |
+
function ( resultObj ) {
|
454 |
+
showError( $errorMessage, resultObj.error );
|
455 |
+
}
|
456 |
+
);
|
457 |
+
}
|
458 |
+
} else {
|
459 |
+
// Remove previously added feedback element.
|
460 |
+
$modal.find( '.fs-switch-feedback' )
|
461 |
+
.remove();
|
462 |
+
|
463 |
+
var $switches = $optOutButton.closest( '.fs-permissions-section' )
|
464 |
+
.find( '.fs-permission .fs-switch' );
|
465 |
+
|
466 |
+
var switchStates = getSwitchesStates( $switches, isEnabled );
|
467 |
+
|
468 |
+
toggleSwitches( $switches, ! isEnabled );
|
469 |
+
|
470 |
+
$switches.closest( '.fs-permission' )
|
471 |
+
.toggleClass( 'fs-disabled', isEnabled );
|
472 |
+
|
473 |
+
var $switchFeedback = $( '<span class="fs-switch-feedback"><i class="fs-ajax-spinner"></i></span>' );
|
474 |
+
|
475 |
+
$optOutButton.after( $switchFeedback )
|
476 |
+
|
477 |
+
setUpdatingLabel( $optOutButton, ! isEnabled );
|
478 |
+
|
479 |
+
FS.Permissions.updatePermissions(
|
480 |
+
pluginID,
|
481 |
+
getGroupPermissionIDs( $modal.find( '.fs-permissions-section.fs-' + groupID + '-permissions' ) ),
|
482 |
+
! isEnabled,
|
483 |
+
function () {
|
484 |
+
$switchFeedback.addClass( 'success' );
|
485 |
+
$switchFeedback.html( '<i class="dashicons dashicons-yes"></i> <?php echo esc_js( fs_text_inline( 'Saved', 'saved' ) ) ?>' );
|
486 |
+
|
487 |
+
toggleGroupOptOut( $optOutButton, ! isEnabled );
|
488 |
+
},
|
489 |
+
function () {
|
490 |
+
// Revert switches to their previous state.
|
491 |
+
for ( var i = 0; i < switchStates.length; i++ ) {
|
492 |
+
if ( switchStates[ i ] ) {
|
493 |
+
toggleSwitches( $( $switches[ i ] ), isEnabled );
|
494 |
+
$( $switches[ i ] ).removeClass( 'fs-disabled' );
|
495 |
+
}
|
496 |
+
}
|
497 |
+
|
498 |
+
toggleGroupOptOut( $optOutButton, isEnabled );
|
499 |
+
}
|
500 |
+
)
|
501 |
+
}
|
502 |
+
});
|
503 |
+
}
|
504 |
+
|
505 |
+
if ( 'theme' === type ) {
|
506 |
+
/**
|
507 |
+
* Add opt-in/out button to the active theme's buttons collection
|
508 |
+
* in the theme's extended details overlay.
|
509 |
+
*
|
510 |
+
* @author Vova Feldman (@svovaf)
|
511 |
+
* @since 1.2.2.7
|
512 |
+
*/
|
513 |
+
$( '.theme-overlay' ).contentChange( function () {
|
514 |
+
if ( 0 === $( '.theme-overlay.active' ).length ) {
|
515 |
+
// Add opt-in/out button only to the currently active theme.
|
516 |
+
return;
|
517 |
+
}
|
518 |
+
|
519 |
+
if ( $( '#fs_theme_opt_in_out' ).length > 0 ) {
|
520 |
+
// Button already there.
|
521 |
+
return;
|
522 |
+
}
|
523 |
+
|
524 |
+
var label = getOptInLabel( ! isTrackingAllowed ),
|
525 |
+
href = ( isTrackingAllowed || isRegistered ) ? '' : reconnectUrl,
|
526 |
+
$actionLink = $( '<a id="fs_theme_opt_in_out" href="' + encodeURI( href ) + '" class="button">' + label + '</a>' );
|
527 |
+
|
528 |
+
$( '.theme-wrap .theme-actions .active-theme' ).append( $actionLink );
|
529 |
+
|
530 |
+
if ( isRegistered && '' === href ) {
|
531 |
+
registerActionLinkClick();
|
532 |
+
}
|
533 |
+
});
|
534 |
+
}
|
535 |
+
|
536 |
+
if ( isRegistered ) {
|
537 |
+
if ( 'theme' !== type ) {
|
538 |
+
registerActionLinkClick();
|
539 |
+
}
|
540 |
+
|
541 |
+
registerEventHandlers();
|
542 |
+
}
|
543 |
+
|
544 |
+
};
|
545 |
+
} )( jQuery );
|
546 |
+
</script>
|
vendor/freemius/wordpress-sdk/templates/plugin-icon.php
CHANGED
@@ -14,7 +14,9 @@
|
|
14 |
* @var array $VARS
|
15 |
*/
|
16 |
$fs = freemius( $VARS['id'] );
|
|
|
|
|
17 |
?>
|
18 |
<div class="fs-plugin-icon">
|
19 |
-
<img src="<?php echo $fs->get_local_icon_url() ?>" width="
|
20 |
</div>
|
14 |
* @var array $VARS
|
15 |
*/
|
16 |
$fs = freemius( $VARS['id'] );
|
17 |
+
|
18 |
+
$size = isset( $VARS['size'] ) ? $VARS['size'] : 80;
|
19 |
?>
|
20 |
<div class="fs-plugin-icon">
|
21 |
+
<img src="<?php echo $fs->get_local_icon_url() ?>" width="<?php echo $size ?>" height="<?php echo $size ?>" />
|
22 |
</div>
|
vendor/freemius/wordpress-sdk/templates/plugin-info/description.php
CHANGED
@@ -52,7 +52,7 @@
|
|
52 |
<?php if ( ! empty( $plugin->info->screenshots ) ) : ?>
|
53 |
<?php $screenshots = $plugin->info->screenshots ?>
|
54 |
<div class="fs-screenshots clearfix">
|
55 |
-
<
|
56 |
<ul>
|
57 |
<?php $i = 0;
|
58 |
foreach ( $screenshots as $s => $url ) : ?>
|
52 |
<?php if ( ! empty( $plugin->info->screenshots ) ) : ?>
|
53 |
<?php $screenshots = $plugin->info->screenshots ?>
|
54 |
<div class="fs-screenshots clearfix">
|
55 |
+
<h3><?php fs_esc_html_echo_inline( 'Screenshots', 'screenshots', $plugin->slug ) ?></h3>
|
56 |
<ul>
|
57 |
<?php $i = 0;
|
58 |
foreach ( $screenshots as $s => $url ) : ?>
|
wp-fail2ban.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Plugin URI: https://wp-fail2ban.com/
|
5 |
* Description: Write a myriad of WordPress events to syslog for integration with fail2ban.
|
6 |
* Text Domain: wp-fail2ban
|
7 |
-
* Version: 4.4.0.
|
8 |
* Author: Charles Lecklider
|
9 |
* Author URI: https://invis.net/
|
10 |
* License: GPLv3
|
4 |
* Plugin URI: https://wp-fail2ban.com/
|
5 |
* Description: Write a myriad of WordPress events to syslog for integration with fail2ban.
|
6 |
* Text Domain: wp-fail2ban
|
7 |
+
* Version: 4.4.0.9
|
8 |
* Author: Charles Lecklider
|
9 |
* Author URI: https://invis.net/
|
10 |
* License: GPLv3
|