WP fail2ban - Version 4.4.0.9

Version Description

  • Preparation for v5: prevent auto-updating across major release.
  • Update Freemius library.
Download this release

Release Info

Developer invisnet
Plugin Icon 128x128 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

Files changed (75) hide show
  1. constants.php +1 -1
  2. filters.d/wordpress-extra.conf +1 -1
  3. filters.d/wordpress-hard.conf +4 -4
  4. filters.d/wordpress-soft.conf +1 -1
  5. functions.php +1 -0
  6. init.php +5 -0
  7. lib/update.php +39 -0
  8. readme.txt +43 -30
  9. vendor/freemius/wordpress-sdk/assets/css/admin/account.css +1 -1
  10. vendor/freemius/wordpress-sdk/assets/css/admin/add-ons.css +1 -1
  11. vendor/freemius/wordpress-sdk/assets/css/admin/add-ons.css.map +1 -1
  12. vendor/freemius/wordpress-sdk/assets/css/admin/affiliation.css +1 -1
  13. vendor/freemius/wordpress-sdk/assets/css/admin/checkout.css +1 -1
  14. vendor/freemius/wordpress-sdk/assets/css/admin/clone-resolution.css +1 -1
  15. vendor/freemius/wordpress-sdk/assets/css/admin/common.css +1 -1
  16. vendor/freemius/wordpress-sdk/assets/css/admin/common.css.map +1 -1
  17. vendor/freemius/wordpress-sdk/assets/css/admin/connect.css +1 -1
  18. vendor/freemius/wordpress-sdk/assets/css/admin/connect.css.map +1 -1
  19. vendor/freemius/wordpress-sdk/assets/css/admin/debug.css +1 -1
  20. vendor/freemius/wordpress-sdk/assets/css/admin/debug.css.map +1 -1
  21. vendor/freemius/wordpress-sdk/assets/css/admin/dialog-boxes.css +1 -1
  22. vendor/freemius/wordpress-sdk/assets/css/admin/dialog-boxes.css.map +1 -1
  23. vendor/freemius/wordpress-sdk/assets/css/admin/gdpr-optin-notice.css +1 -1
  24. vendor/freemius/wordpress-sdk/assets/css/admin/optout.css +1 -0
  25. vendor/freemius/wordpress-sdk/assets/css/admin/optout.css.map +1 -0
  26. vendor/freemius/wordpress-sdk/assets/css/admin/plugins.css +1 -1
  27. vendor/freemius/wordpress-sdk/assets/css/customizer.css +1 -1
  28. vendor/freemius/wordpress-sdk/includes/class-freemius-abstract.php +4 -63
  29. vendor/freemius/wordpress-sdk/includes/class-freemius.php +740 -663
  30. vendor/freemius/wordpress-sdk/includes/class-fs-admin-notices.php +4 -3
  31. vendor/freemius/wordpress-sdk/includes/class-fs-lock.php +110 -0
  32. vendor/freemius/wordpress-sdk/includes/class-fs-plugin-updater.php +71 -40
  33. vendor/freemius/wordpress-sdk/includes/class-fs-storage.php +106 -80
  34. vendor/freemius/wordpress-sdk/includes/class-fs-user-lock.php +10 -46
  35. vendor/freemius/wordpress-sdk/includes/entities/class-fs-plugin-tag.php +4 -0
  36. vendor/freemius/wordpress-sdk/includes/entities/class-fs-site.php +16 -17
  37. vendor/freemius/wordpress-sdk/includes/fs-core-functions.php +1 -1
  38. vendor/freemius/wordpress-sdk/includes/fs-plugin-info-dialog.php +54 -3
  39. vendor/freemius/wordpress-sdk/includes/managers/class-fs-admin-notice-manager.php +8 -2
  40. vendor/freemius/wordpress-sdk/includes/managers/class-fs-clone-manager.php +213 -140
  41. vendor/freemius/wordpress-sdk/includes/managers/class-fs-option-manager.php +10 -4
  42. vendor/freemius/wordpress-sdk/includes/managers/class-fs-permission-manager.php +698 -0
  43. vendor/freemius/wordpress-sdk/includes/sdk/FreemiusBase.php +169 -171
  44. vendor/freemius/wordpress-sdk/includes/sdk/FreemiusWordPress.php +2 -4
  45. vendor/freemius/wordpress-sdk/includes/supplements/fs-migration-2.5.1.php +31 -0
  46. vendor/freemius/wordpress-sdk/languages/freemius-cs_CZ.mo +0 -0
  47. vendor/freemius/wordpress-sdk/languages/freemius-da_DK.mo +0 -0
  48. vendor/freemius/wordpress-sdk/languages/freemius-de_DE.mo +0 -0
  49. vendor/freemius/wordpress-sdk/languages/freemius-en.mo +0 -0
  50. vendor/freemius/wordpress-sdk/languages/freemius-es_ES.mo +0 -0
  51. vendor/freemius/wordpress-sdk/languages/freemius-fr_FR.mo +0 -0
  52. vendor/freemius/wordpress-sdk/languages/freemius-he_IL.mo +0 -0
  53. vendor/freemius/wordpress-sdk/languages/freemius-hu_HU.mo +0 -0
  54. vendor/freemius/wordpress-sdk/languages/freemius-it_IT.mo +0 -0
  55. vendor/freemius/wordpress-sdk/languages/freemius-ja.mo +0 -0
  56. vendor/freemius/wordpress-sdk/languages/freemius-nl_NL.mo +0 -0
  57. vendor/freemius/wordpress-sdk/languages/freemius-ru_RU.mo +0 -0
  58. vendor/freemius/wordpress-sdk/languages/freemius-ta.mo +0 -0
  59. vendor/freemius/wordpress-sdk/languages/freemius-zh_CN.mo +0 -0
  60. vendor/freemius/wordpress-sdk/languages/freemius.pot +1289 -463
  61. vendor/freemius/wordpress-sdk/require.php +1 -0
  62. vendor/freemius/wordpress-sdk/start.php +1 -1
  63. vendor/freemius/wordpress-sdk/templates/account/partials/site.php +5 -3
  64. vendor/freemius/wordpress-sdk/templates/clone-resolution-js.php +10 -8
  65. vendor/freemius/wordpress-sdk/templates/connect.php +111 -133
  66. vendor/freemius/wordpress-sdk/templates/connect/index.php +3 -0
  67. vendor/freemius/wordpress-sdk/templates/connect/permission.php +43 -0
  68. vendor/freemius/wordpress-sdk/templates/connect/permissions-group.php +72 -0
  69. vendor/freemius/wordpress-sdk/templates/debug.php +52 -8
  70. vendor/freemius/wordpress-sdk/templates/forms/license-activation.php +2 -9
  71. vendor/freemius/wordpress-sdk/templates/forms/optout.php +147 -301
  72. vendor/freemius/wordpress-sdk/templates/js/permissions.php +546 -0
  73. vendor/freemius/wordpress-sdk/templates/plugin-icon.php +3 -1
  74. vendor/freemius/wordpress-sdk/templates/plugin-info/description.php +1 -1
  75. 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.8');
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-10-20T00:47:43+01:00
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-10-20T00:47:43+01:00
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-10-20T00:47:43+01:00
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.8
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
- * **Failed Login Attempts**
29
- The very first feature of *WPf2b*: logging failed login attempts so the IP can be banned. Just as useful today as it was then.
30
-
31
- * **Block User Enumeration**
32
- One of the most common precursors to a password-guessing brute force attack is [user enumeration](https://wp-fail2ban.com/features/block-user-enumeration/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0). *WPf2b* can block it, stopping the attack before it starts.
 
 
 
 
 
 
33
 
34
  * **Block username logins**
35
- Sometimes it's not possible to block user enumeration (for example, if your theme provides Author profiles). *WPf2b* can require users to login with their email address instead of their username.
36
 
37
- * **Blocking Users**
38
- Anther of the older *WPf2b* features: the login process can be aborted for specified usernames.
39
- Say a bot collected your site's usernames before you blocked user enumeration. Once you've changed all the usernames, add the old ones to the list; anything using them will trigger a "hard" fail.
 
 
40
 
41
- * **Empty Username Login Attempts**
42
- Some bots will try to login without a username; harmless, but annoying. These attempts are logged as a "soft" fail so the more persistent bots will be banned.
 
 
43
 
44
- * **Spam**
45
- *WPf2b* will log a spammer's IP address as a "hard" fail when their comment is marked as spam.
46
 
47
- * **Attempted Comments**
48
- Some spam bots try to comment on everything, even things that aren't there. *WPf2b* detects these and logs them as a "hard" fail.
49
 
50
  * **Pingbacks**
51
- Pingbacks are a great feature, but they can be abused to attack the rest of the WWW. Rather than disable them completely, *WPf2b* effectively rate-limits potential attackers by logging the IP address as a "soft" fail.
52
 
53
- * **Block XML-RPC Requests** [Premium]
54
- The only reason most sites need XML-RPC (other than Pingbacks) is for Jetpack; *WPf2b* Premium can block XML-RPC while allowing Jetpack and/or Pingbacks.
55
 
56
- * **Block Countries** [Premium]
57
- Sometimes you just need a bigger hammer - if you're seeing nothing but attacks from some countries, block them!
58
 
59
- * **Cloudflare and Proxy Servers**
60
- *WPf2b* will work with [Cloudflare](https://wp-fail2ban.com/features/cloudflare-and-proxy-servers/?utm_source=wordpress.org&utm_medium=readme&utm_campaign=wp-fail2ban-4.4.0).
61
- You can also configure your own list of trusted proxies.
62
 
63
- * **syslog Dashboard Widget**
64
- Ever wondered what's being logged? The dashboard widget shows the last 5 messages; the Premium version keeps a full history to help you analyse and prevent attacks.
65
 
66
  * **`mu-plugins` Support**
67
- *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).
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}}/*# sourceMappingURL=account.css.map */
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,mBAKA,iZAEI,WAGJ,gDAEI,eAGJ,4DAEI,oBACA,6BAEA,+DAEI,SAEA,kEAEI,UACA,6BAEA,8EAEI,MF3LF,QE4LE,cACA,sBACA,iBACA,WACA,mBAGJ,qEAEI,2BDqCpB,+DACI,WACA,cACA,WC/BI,4DAEI,gBACA,SAEA,+DAEI,YACA,aACA,WACA,mBDjKf,gBCkKmC,YDjKtC,mBCiKsC,YDhK9B,WCgK8B,YAEpB,iEAEI,cACA,WACA,YACA,iBD3LnB,gBC4LmB,2BD3LtB,mBC2LsB,2BD1Ld,WC0Lc,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,MFzYE,QE0YF,mBACA,cACA,kBAMJ,qDAEI,0BACA,eACA,kBACA,YACA,MFxZE,QE0ZF,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,gBDrcD,gBCscC,iGDrcJ,mBCqcI,iGDpcI,WCocJ,iGAEA,qIACE,SAEA,yIACE,cACA,iBACA,qBACA,iBAGF,iJACE,iBF9dU,QE+dV,WAEA,qJACE,WAON,iJDveD,mBCweG,cDveN,sBCueM,cDteE,cCseF,cAKF,qID7eD,mBC8eG,cD7eN,sBC6eM,cD5eE,cC4eF,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"}
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}/*# sourceMappingURL=affiliation.css.map */
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}}/*# sourceMappingURL=checkout.css.map */
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}/*# sourceMappingURL=clone-resolution.css.map */
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-switch-feedback{margin-left:10px}.fs-switch-feedback.success{color:#71ae00}.rtl .fs-switch-feedback{margin-left:0;margin-right:10px}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media(max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}.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}/*# sourceMappingURL=common.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)}.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,UAMhB,oBACI,iBAEA,4BACI,MH3Fc,QG8FlB,yBAEI,cACA,kBChHR,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,WHjCH,mBGkCG,YHjCN,sBGiCM,YHhCE,cGgCF,YACA,UACA,eACA,iBACA,YAMJ,oEAII,yBAMJ,0BAMI,WAIR,kBAEI,eACA,SACA,WACA,QACA,mBACA,kBACA,YACA,aHhEC,gBGiED,2BHhEF,mBGgEE,2BH/DM,WG+DN,2BHuHA,QGtHiB,IHwHjB,yBGtHA,wBHoHA,QGlHqB,EHoHrB,0BGjHA,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,gBCzNR,6BAEI,SACA,yBACA,aACA,cACA","file":"common.css"}
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/connect.scss","../../scss/_mixins.scss","../../scss/_colors.scss","../../scss/admin/_multisite-options.scss","../../scss/admin/_tooltip.scss","../../scss/admin/_gdpr-consent.scss"],"names":[],"mappings":"CAIA,YAEI,MAJS,MCsDR,gBDjDD,2BCkDF,mBDlDE,2BCmDM,WDnDN,2BACA,cAEA,qCANJ,YCoDK,gBD7CG,KC8CN,mBD9CM,KC+CE,WD/CF,KACA,WACA,oBAGJ,wBAEI,gBACA,kBAEA,kCACI,gBACA,MEHY,QFIZ,yBCgCP,gBD/BO,2BCgCV,mBDhCU,2BCiCF,WDjCE,2BACA,kBACA,YACA,mBAGJ,0BAEI,SACA,UACA,gBAIR,sCACI,kBACA,YACA,wBAEA,4CACI,WAGJ,iDACI,kBACA,QACA,UAMA,4DACI,eAKZ,qCACI,kBACA,YACA,YACA,sBACA,iBACA,iBACA,yBACA,qBAEA,yCACI,iBACA,eAIR,wBAEI,kBACA,mBAEA,gCAEI,mBACA,iBACA,YACA,eACA,gBAEA,2CAEI,eACA,iBACA,kBAGJ,+CAEI,mBACA,kBAEA,qDAEI,aAKA,gEAEI,WAKZ,iDAEI,YAiBJ,qEAEI,WAKZ,4BAEI,kBACA,mBC2BH,gBDzBG,oBC0BD,cD1BC,oBC2BF,eD3BE,oBC4BN,mBD5BM,oBC6BE,WD7BF,oBAEA,wDACI,kBACA,aAGJ,wCAEI,eACA,qBACA,kBACA,cAGJ,+BAEI,SACA,gBACA,SAEA,kCAEI,mBAEA,6CAEI,gBAGJ,8CAEI,WACA,eACA,WACA,YAGJ,6CACI,YAGJ,6DAEI,iBAEA,kEAEI,iBACA,yBACA,cAGJ,+DAEI,iBAMhB,oCAEI,gBAEA,uCAEI,iBACA,YACA,2BAIR,qCA9EJ,4BA+EQ,gBAEA,wCAEI,aAGJ,+BAEI,YACA,aAKZ,mCACI,YAEA,gBACA,WAEA,qCACI,kBACA,cACA,SACA,UAGJ,qCACI,cACA,0BAQR,uBAEI,aACA,cACA,mBACA,OATQ,KAUR,kBAEA,qCAEI,kBACA,UACA,IAdI,KAiBR,wCAEI,kBACA,WACA,IArBI,KAwBR,uCAEI,kBACA,IA3BI,KA4BJ,SACA,kBAGJ,qIAKI,MAvCI,KAwCJ,OAxCI,KA2CR,4CAEI,eACA,WE/OM,QFgPN,WACA,WACA,YACA,QAjDU,IAoDd,uCAEI,kBACA,QACA,eACA,iBACA,WAEA,gDAEI,SAEJ,iDAEI,SAIR,oHAII,sBACA,YACA,gBAIR,sBAEI,kBACA,gBACA,YACA,2BAEA,8CAEI,WAGJ,wBAEI,qBGhWZ,gCACI,gBACA,sBACA,YAEA,kCACI,qBAEA,wCACI,gBAGJ,2CACI,iBAIR,sDACI,cACA,UAEA,4EACI,iBAEA,iGACI,aAKZ,yDACI,aACA,cAEA,kEACI,0BACA,gBCpCZ,oBAOI,kBALA,2BAEI,YAKJ,gCAEI,UACA,kBHkKH,gBGjKG,wBHkKD,cGlKC,wBHmKF,eGnKE,wBHoKN,mBGpKM,wBHqKE,WGrKF,wBACA,kBACA,WFqEY,eEpEZ,sBACA,0BACA,eACA,aACA,eACA,YACA,kBACA,WACA,QHuBH,mBGtBG,IHuBN,sBGvBM,IHwBE,cGxBF,IH+BH,gBG9BG,2BH+BN,mBG/BM,2BHgCE,WGhCF,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,UCjEZ,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,kBLgSJ,6BAEI,kBACA,mBAII,gDAEI,eACA,iBACA,kBAKA,0DAEI,aAKA,qEAEI,WAKZ,sDAEI,WAWA,kEAEI,kBACA,cAGJ,kDACI,WAGJ,mDAEI,YASZ,0CAEI,WACA,UAGJ,6CAEI,WACA,UAMhB,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,gBACA,mBAEA,gDAEI,iCAEA,kGAEI,cAQZ,gCAEI,SCzbH,gBD0bG,KCzbN,mBDybM,KCxbE,WDwbF,KAMJ,uCAEI,UAKA,oDAEI,4BAEJ,0DAEI,4BAMJ,uDAEI,yBAEJ,6DAEI,yBAMJ,qDAEI,2BAEJ,2DAEI,2BAMJ,sDAEI,0BAEJ,4DAEI,0BAKZ,qBACI,cACA,kBACA,eACA","file":"connect.css"}
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}/*# sourceMappingURL=debug.css.map */
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":"AAEA,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"}
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,oBCxB4B,QD2B7B,oCACC,iBC7BuB,QDkCxB,mCACC,oBC9ByB,QDiC1B,iCACC,iBCnCoB,QDwCrB,oCACC,oBC1C0B,QD6C3B,kCACC,iBC/CqB,QDoDvB,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,WErEP,mBFsEO,KErEV,sBFqEU,KEpEF,cFoEE,KACA,YEwDP,gBFvDO,oBEwDL,cFxDK,oBEyDN,eFzDM,oBE0DV,mBF1DU,oBE2DF,WF3DE,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,gBGtMA,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"}
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}/*# sourceMappingURL=gdpr-optin-notice.css.map */
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}/*# sourceMappingURL=plugins.css.map */
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}/*# sourceMappingURL=customizer.css.map */
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 ( version_compare( $sdk_prev_version, '2.1.0', '<' ) &&
952
- version_compare( $sdk_version, '2.1.0', '>=' )
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
- // On version 1.1.5 merged connectivity and is_on data.
984
- if ( isset( $this->_storage->connectivity_test ) ) {
985
- if ( ! isset( $this->_storage->is_on ) ) {
986
- unset( $this->_storage->connectivity_test );
987
- } else {
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
- // Remove previous structure.
996
- unset( $this->_storage->is_on );
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
- $this->_add_tracking_links();
 
 
 
 
 
 
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
- trailingslashit( fs_strip_url_protocol( $this->_site->url ) ) !== self::get_unfiltered_site_url( null, true, true )
 
3601
  );
3602
  }
3603
 
@@ -3772,7 +3648,7 @@
3772
  } else {
3773
  // Add hidden debug page.
3774
  $hook = FS_Admin_Menu_Manager::add_subpage(
3775
- null,
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 an access to...) */
4517
- $x_requires_access_to_api = $this->esc_html_inline( '%s requires an access to our API.', 'x-requires-access-to-api' );
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 dialogbox won't work properly. This is esepcially
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
- * @author Leo Fajardo (@leorw)
 
 
5439
  *
5440
- * @since 1.2.1.5
5441
  */
5442
- function _stop_tracking_callback() {
5443
  $this->_logger->entrance();
5444
 
5445
- $this->check_ajax_referer( 'stop_tracking' );
5446
-
5447
- $result = $this->stop_tracking( fs_is_network_admin() );
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
- $this->check_ajax_referer( 'allow_tracking' );
5471
-
5472
- $result = $this->allow_tracking( fs_is_network_admin() );
5473
-
5474
- if ( true === $result ) {
5475
- self::shoot_ajax_success();
5476
  }
5477
 
5478
- $this->_logger->api_error( $result );
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
- * Opt-out from usage tracking.
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
- // Send update to FS.
5517
- $result = $this->api_site_call( '/?fields=is_disconnected', 'put', array(
5518
- 'is_disconnected' => true
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
- * Opt-out network from usage tracking.
5541
- *
5542
- * Note: This will not delete the account information but will stop all tracking.
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
- * @author Leo Fajardo (@leorw)
5550
- * @since 1.2.1.5
5551
- *
5552
- * @return bool|object
5553
  */
5554
- function stop_network_tracking() {
 
 
 
 
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
- $installs_map = $this->get_blog_install_map();
5564
 
5565
- $opt_out_all = true;
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
- // Opt-out only from non-delegated installs.
5576
- $opt_out_all = false;
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[] = array( 'is_disconnected' => true );
 
 
 
 
5590
 
5591
  // Send update to FS.
5592
- $result = $this->get_current_or_network_user_api_scope()->call( "/plugins/{$this->_module_id}/installs.json", 'put', $params );
 
 
 
 
5593
 
5594
- if ( ! $this->is_api_result_object( $result, 'installs' ) ) {
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
- * Opt-out from usage tracking.
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 bool|object
5629
  */
5630
- function stop_tracking( $is_network_action = false ) {
5631
- $this->_logger->entrance();
 
5632
 
5633
- return $is_network_action ?
5634
- $this->stop_network_tracking() :
5635
- $this->stop_site_tracking();
 
 
 
 
 
 
 
 
 
5636
  }
5637
 
5638
  /**
5639
- * Opt-in back into usage tracking.
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 allow_site_tracking() {
5654
  $this->_logger->entrance();
5655
 
5656
- if ( ! $this->is_registered() ) {
5657
- // User never opted-in.
5658
- return false;
5659
- }
5660
 
5661
- if ( $this->is_tracking_allowed() ) {
5662
- // Tracking already allowed.
5663
- return true;
5664
  }
5665
 
5666
- $result = $this->api_site_call( '/?is_disconnected', 'put', array(
5667
- 'is_disconnected' => false
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
- return $result;
 
5677
  }
5678
 
5679
- $this->_site->is_disconnected = $result->is_disconnected;
5680
- $this->_store_site();
5681
 
5682
- $this->schedule_sync_cron();
5683
 
5684
- // Successfully reconnected.
5685
- return true;
 
 
 
5686
  }
5687
 
5688
  /**
5689
- * Opt-in network back into usage tracking.
5690
- *
5691
- * Note: This will only work if the user opted-in previously.
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|object
5702
  */
5703
- function allow_network_tracking() {
5704
- $this->_logger->entrance();
5705
-
5706
- if ( ! $this->is_registered() ) {
5707
  // User never opted-in.
5708
  return false;
5709
  }
5710
 
5711
- $install_id_2_blog_id = array();
5712
- $installs_map = $this->get_blog_install_map();
5713
-
5714
- $params = array();
5715
- foreach ( $installs_map as $blog_id => $install ) {
5716
- if ( $install->is_tracking_allowed() ) {
5717
- continue;
5718
- }
5719
-
5720
- $params[] = array( 'id' => $install->id );
5721
-
5722
- $install_id_2_blog_id[ $install->id ] = $blog_id;
5723
  }
5724
 
5725
- if ( empty( $install_id_2_blog_id ) ) {
5726
- return true;
 
 
 
 
 
 
 
 
5727
  }
5728
 
5729
- $params[] = array( 'is_disconnected' => false );
 
5730
 
5731
- // Send update to FS.
5732
- $result = $this->get_current_or_network_user_api_scope()->call( "/plugins/{$this->_module_id}/installs.json", 'put', $params );
 
 
 
 
 
 
 
 
 
 
5733
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5734
 
5735
- if ( ! $this->is_api_result_object( $result, 'installs' ) ) {
5736
- $this->_logger->api_error( $result );
 
5737
 
5738
- return $result;
5739
- }
 
 
 
 
 
5740
 
5741
- foreach ( $result->installs as $r_install ) {
5742
- $blog_id = $install_id_2_blog_id[ $r_install->id ];
5743
- $install = $installs_map[ $blog_id ];
5744
- $install->is_disconnected = $r_install->is_disconnected;
5745
- $this->_store_site( true, $blog_id, $install );
5746
  }
5747
 
5748
- $this->schedule_sync_cron();
 
 
 
 
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
- * @param bool $is_network_action
5768
  *
5769
  * @return bool|object
5770
  */
5771
- function allow_tracking( $is_network_action = false ) {
5772
  $this->_logger->entrance();
5773
 
5774
- return $is_network_action ?
5775
- $this->allow_network_tracking() :
5776
- $this->allow_site_tracking();
 
 
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->_site->is_disconnected = false;
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 ( $install->is_tracking_prohibited() ) {
5807
- $install->is_disconnected = false;
5808
- $this->_store_site( true, $blog_id, $install );
5809
  }
5810
  }
5811
  }
5812
  }
5813
 
5814
  /**
5815
- * @author Vova Feldman (@svovaf)
5816
- * @since 2.3.2
5817
  *
5818
- * @return bool
 
 
 
 
5819
  */
5820
- function is_extensions_tracking_allowed() {
5821
- return ( true === $this->apply_filters(
5822
- 'is_extensions_tracking_allowed',
5823
- $this->_storage->get( 'is_extensions_tracking_allowed', null )
5824
- ) );
5825
- }
5826
 
5827
- /**
5828
- * @author Vova Feldman (@svovaf)
5829
- * @since 2.3.2
5830
- */
5831
- function _update_tracking_permission_callback() {
5832
- $this->_logger->entrance();
5833
 
5834
- $this->check_ajax_referer( 'update_tracking_permission' );
 
 
5835
 
5836
- $is_enabled = fs_request_get_bool( 'is_enabled', null );
 
 
 
 
 
 
 
5837
 
5838
- if ( ! is_bool( $is_enabled ) ) {
5839
- self::shoot_ajax_failure();
 
5840
  }
5841
 
5842
- $permission = fs_request_get( 'permission' );
 
 
 
 
 
 
 
 
 
 
 
5843
 
5844
- switch ( $permission ) {
5845
- case 'extensions':
5846
- $this->update_extensions_tracking_flag( $is_enabled );
5847
- break;
5848
- default:
5849
  $permission = 'no_match';
5850
- }
5851
 
5852
- if ( 'no_match' === $permission ) {
5853
- self::shoot_ajax_failure();
5854
  }
5855
 
5856
- self::shoot_ajax_success( array(
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 of the
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 ( ! fs_is_network_admin() ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- is_numeric( $this->_storage->network_install_blog_id ) &&
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 ( is_object( $install ) &&
6894
- ( $this->is_premium() || $install->is_tracking_allowed() )
 
 
6895
  ) {
6896
- return $this->_storage->network_install_blog_id;
 
 
 
 
 
 
 
 
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
- ( $this->is_premium() || $install->is_tracking_allowed() )
6906
  ) {
6907
  return $blog_id;
6908
  }
@@ -6934,7 +6771,7 @@
6934
  /**
6935
  * @var FS_Site $install
6936
  */
6937
- if ( $install->is_tracking_allowed() ) {
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->is_premium() || $install->is_tracking_allowed() ) {
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 an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s.', 'pending-activation-message' ),
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 install', 'complete-the-install' ) )
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( null, fs_is_network_admin() );
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 string
7986
  */
7987
  private function can_activate_previous_theme() {
7988
- $slug = $this->get_previous_theme_slug();
 
 
 
 
 
 
 
 
 
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 $network_or_blog_id Since 2.0.0.
9127
  */
9128
- private function reset_anonymous_mode( $network_or_blog_id = 0 ) {
9129
- if ( true === $network_or_blog_id ) {
9130
- unset( $this->_storage->is_anonymous_ms );
9131
- } else {
9132
- $this->_storage->remove( 'is_anonymous', true, $network_or_blog_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 array|null $sites Since 2.0.0. Specific sites.
9194
- * @param bool $skip_all_network Since 2.0.0. If true, skip connection for all sites.
9195
  */
9196
- function skip_connection( $sites = null, $skip_all_network = false ) {
9197
  $this->_logger->entrance();
9198
 
9199
  $this->_admin_notices->remove_sticky( 'connect_account' );
9200
 
9201
- if ( $skip_all_network ) {
9202
  $this->set_anonymous_mode( true, true );
9203
- }
9204
 
9205
- if ( ! $skip_all_network && empty( $sites ) ) {
9206
- $this->skip_site_connection();
9207
- } else {
9208
- $uids = array();
9209
 
9210
- if ( $skip_all_network ) {
9211
- $this->set_anonymous_mode( true, true );
 
 
 
 
 
 
9212
 
9213
- $sites = self::get_sites();
9214
- foreach ( $sites as $site ) {
9215
- $blog_id = self::get_site_blog_id( $site );
9216
- $this->skip_site_connection( $blog_id, false );
9217
- $uids[] = $this->get_anonymous_id( $blog_id );
9218
- }
9219
- } else if ( ! empty( $sites ) ) {
9220
- foreach ( $sites as $site ) {
9221
- $uids[] = $site['uid'];
9222
- $this->skip_site_connection( $site['blog_id'], false );
9223
  }
9224
  }
 
9225
 
9226
- // Send anonymous skip event.
9227
- // No user identified info nor any tracking will be sent after the user skips the opt-in.
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, $send_skip = true ) {
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
- if ( $this->is_extensions_tracking_allowed() ) {
 
 
 
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 = $include_blog_data ?
9667
- array(
9668
- 'language' => self::get_sanitized_language(),
9669
- 'title' => get_bloginfo( 'name' ),
9670
- 'url' => self::get_unfiltered_site_url(),
9671
- ) :
9672
- array();
 
 
 
 
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->is_premium() && $install->is_tracking_prohibited() ) {
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/terms/{$this->_plugin->id}/{$this->_slug}/"
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 is_object( $this->_user );
 
 
 
 
 
 
 
11242
  }
11243
 
11244
  /**
@@ -11249,8 +11208,34 @@
11249
  *
11250
  * @return bool
11251
  */
11252
- function is_tracking_allowed() {
11253
- return ( is_object( $this->_site ) && $this->_site->is_tracking_allowed() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
 
 
 
14230
 
14231
  $error = false;
14232
  $next_page = false;
@@ -14391,8 +14384,8 @@
14391
  }
14392
  }
14393
 
14394
- $all_sites = self::get_sites();
14395
- $pending_sites = array();
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
- $pending_sites[] = self::get_site_info( $site );
14426
  }
14427
 
14428
- if ( ! empty( $pending_sites ) ) {
14429
  if ( $fs->is_freemium() && $fs->is_enable_anonymous() ) {
14430
- $fs->skip_connection( $pending_sites );
14431
  } else {
14432
- $fs->delegate_connection( $pending_sites );
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 array|null $sites
15689
  */
15690
- private function delegate_connection( $sites = null ) {
15691
  $this->_logger->entrance();
15692
 
15693
  $this->_admin_notices->remove_sticky( 'connect_account' );
15694
 
15695
- if ( is_null( $sites ) ) {
15696
  // All sites delegation.
15697
- $this->_storage->store( 'is_delegated_connection', true, true, true );
15698
  } else {
15699
  // Specified sites delegation.
15700
- foreach ( $sites as $site ) {
15701
- $this->delegate_site_connection( $site['blog_id'] );
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, true );
15718
  }
15719
 
15720
  /**
@@ -15754,7 +15747,7 @@
15754
  }
15755
 
15756
  /**
15757
- * Check if delegated the connection. When running within the the network admin,
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
- if ( function_exists( 'get_sites' ) ) {
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' => $this->get_anonymous_id( $blog_id ),
16190
- 'url' => $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
- $this->is_user_in_admin() &&
17141
- $this->is_clone() &&
17142
- empty( FS_Clone_Manager::instance()->get_clone_identification_timestamp() )
17143
- ) {
17144
- FS_Clone_Manager::instance()->store_clone_identification_timestamp();
 
17145
  }
17146
  }
17147
 
@@ -17221,11 +17256,14 @@
17221
  * @return array
17222
  */
17223
  private function get_versions() {
17224
- $versions = array(
17225
- 'platform_version' => get_bloginfo( 'version' ),
17226
- 'sdk_version' => $this->version,
17227
- 'programming_language_version' => phpversion(),
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
- $params = array_merge( $params, array(
 
 
 
 
 
 
 
 
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 or not to opt in without tracking.
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'] = $is_disconnected;
17597
- $params['format'] = 'json';
 
 
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 activation was successfully completed.', 'plugin-x-activation-message' ), '<b>' . $this->get_plugin_name() . '</b>' ),
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->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
 
 
 
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->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
 
 
 
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->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
 
 
 
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( null, fs_is_network_admin() );
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->update_extensions_tracking_flag( fs_request_get_bool( 'is_extensions_tracking_allowed', null ) );
 
 
 
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
- null,
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
- null,
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
- null,
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
- sprintf( $this->get_text_inline( 'Unexpected API error. Please contact the %s\'s author with the following error.', 'unexpected-api-error' ), $this->_module_type )
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 ( ! $this->is_registered() &&
 
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->allow_site_tracking() ) {
23142
  $this->_admin_notices->add(
23143
- sprintf( $this->get_text_inline( 'We appreciate your help in making the %s better by letting us track some usage data.', 'opt-out-message-appreciation' ), $this->_module_type ),
23144
  $this->get_text_inline( 'Thank you!', 'thank-you' )
23145
  );
23146
  }
23147
  } else {
23148
- if ( $this->stop_site_tracking() ) {
 
 
23149
  $this->_admin_notices->add(
23150
  sprintf(
23151
- $this->get_text_inline( 'We will no longer be sending any usage data of %s on %s to %s.', 'opted-out-successfully' ),
23152
- $this->get_plugin_title(),
23153
  self::get_unfiltered_site_url( $blog_id, true ),
23154
- sprintf(
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
- self::_hide_admin_notices();
 
 
 
 
 
 
 
 
 
 
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
- * 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.
23903
- *
23904
- * @author Leo Fajardo (@leorw)
23905
- * @since 2.5.0
23906
- */
23907
  if (
23908
  $this->is_registered() &&
23909
  FS_Api::is_api_result_entity( $result ) &&
23910
  isset( $result->url )
23911
  ) {
23912
- $stored_local_url = trailingslashit( $this->_site->url );
23913
  $stored_remote_url = trailingslashit( $result->url );
23914
 
23915
- if ( $stored_local_url !== $stored_remote_url ) {
23916
  $this->_site->url = $result->url;
23917
- $this->_store_site();
23918
- }
23919
 
23920
- if ( fs_strip_url_protocol( $stored_remote_url ) !== self::get_unfiltered_site_url( null, true, true ) ) {
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( 'stop_tracking', array( &$this, '_stop_tracking_callback' ) ) ) {
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
- return ! empty( $premium_plugin );
 
 
 
 
24821
  }
24822
 
24823
  /**
@@ -24853,7 +24922,9 @@
24853
  * @author Leo Fajardo (@leorw)
24854
  * @since 2.2.1
24855
  */
24856
- $premium_plugin_basename = $this->premium_plugin_basename();
 
 
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
- wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $premium_plugin_basename, 'activate-plugin_' . $premium_plugin_basename ),
 
 
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/upload-wp-' . $this->_module_type . 's' ),
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 ( ! $this->is_product_settings_page() ||
25344
- ! $this->is_matching_url( $this->main_menu_url() )
 
 
25345
  ) {
25346
  return;
25347
  }
@@ -25395,8 +25470,10 @@
25395
  function _store_tabs_styles() {
25396
  $this->_logger->entrance();
25397
 
25398
- if ( ! $this->is_product_settings_page() ||
25399
- ! $this->is_matching_url( $this->main_menu_url() )
 
 
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&amp;stylesheet=' . $premium_theme_slug_or_plugin_basename, 'switch-theme_' . $premium_theme_slug_or_plugin_basename ) :
24938
+ wp_nonce_url( 'plugins.php?action=activate&amp;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
- $update_button_id_attribute_pos = strpos( $contents, 'id="plugin_update_from_iframe"' );
170
 
171
- if ( false !== $update_button_id_attribute_pos ) {
172
- $update_button_start_pos = strrpos(
173
- substr( $contents, 0, $update_button_id_attribute_pos ),
 
 
 
 
174
  '<a'
175
  );
176
 
177
- $update_button_end_pos = ( strpos( $contents, '</a>', $update_button_id_attribute_pos ) + strlen( '</a>' ) );
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, $update_button_start_pos );
186
 
187
- $update_button = substr( $contents, $update_button_start_pos, ( $update_button_end_pos - $update_button_start_pos ) );
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
- $update_button = preg_replace(
195
- '/(\<a.+)(id="plugin_update_from_iframe")(.+href=")([^\s]+)(".*\>)(.+)(\<\/a>)/is',
196
  is_object( $license ) ?
197
  sprintf(
198
- '$1$3%s$5%s$7',
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$3%s$5%s$7',
210
  $this->_fs->pricing_url(),
211
  fs_text_inline( 'Buy license', 'buy-license', $this->_fs->get_slug() )
212
  ),
213
- $update_button
214
  );
215
 
216
  /**
@@ -219,7 +223,7 @@
219
  * @author Leo Fajardo (@leorw)
220
  * @since 2.2.5
221
  */
222
- $modified_contents .= $update_button;
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, $update_button_end_pos );
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->is_tracking_allowed()
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
- empty( $themes_update->response[ $theme_basename ]['package'] )
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
- version_compare( $translation_update['version'], $current_plugin_translation_updates_map[ $lang ]['version'], '>' )
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 = new stdClass();
664
- $update->slug = $this->_fs->get_slug();
665
- $update->new_version = $new_version->version;
666
- $update->url = WP_FS__ADDRESS;
667
- $update->package = $new_version->url;
668
- $update->tested = $new_version->tested_up_to_version;
669
- $update->requires = $new_version->requires_platform_version;
 
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
- ! isset( $transient_data->response ) ||
812
  ! is_array( $transient_data->response ) ||
813
- empty( $transient_data->response[ $basename ] )
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.0/';
841
- if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) {
842
- $url = set_url_scheme( $url, 'https' );
843
- }
844
-
845
- $args = array(
846
- 'timeout' => 15,
847
- 'body' => array(
848
  'action' => $action,
849
- 'request' => serialize( $args )
850
- )
 
851
  );
852
 
853
- $request = wp_remote_post( $url, $args );
 
 
 
 
 
854
 
855
  if ( is_wp_error( $request ) ) {
856
  return false;
857
  }
858
 
859
- $res = maybe_unserialize( wp_remote_retrieve_body( $request ) );
 
 
 
 
 
860
 
861
- if ( ! is_object( $res ) && ! is_array( $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 $is_network_activation
19
- * @property int $network_install_blog_id
20
- * @property object $sync_cron
 
 
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( $key, $value, $network_level_or_blog_id = null, $flush = true ) {
148
- if ( $this->should_use_network_storage( $key, $network_level_or_blog_id ) ) {
 
 
 
 
 
 
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( $key, $default = false, $network_level_or_blog_id = null ) {
206
- if ( $this->should_use_network_storage( $key, $network_level_or_blog_id ) ) {
 
 
 
 
 
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' => 0,
340
- 'beta_data' => 0,
341
- 'connectivity_test' => 0,
342
- 'handle_gdpr_admin_notice' => 0,
343
- 'has_trial_plan' => 0,
344
- 'install_sync_timestamp' => 0,
345
- 'install_sync_cron' => 0,
346
- 'is_anonymous_ms' => 0,
347
- 'is_network_activated' => 0,
348
- 'is_on' => 0,
349
- 'is_plugin_new_install' => 0,
350
- 'network_install_blog_id' => 0,
351
- 'pending_sites_info' => 0,
352
- 'plugin_last_version' => 0,
353
- 'plugin_main_file' => 0,
354
- 'plugin_version' => 0,
355
- 'sdk_downgrade_mode' => 0,
356
- 'sdk_last_version' => 0,
357
- 'sdk_upgrade_mode' => 0,
358
- 'sdk_version' => 0,
359
- 'sticky_optin_added_ms' => 0,
360
- 'subscriptions' => 0,
361
- 'sync_timestamp' => 0,
362
- 'sync_cron' => 0,
363
- 'was_plugin_loaded' => 0,
364
- 'network_user_id' => 0,
365
- 'plugin_upgrade_mode' => 0,
366
- 'plugin_downgrade_mode' => 0,
367
- 'is_network_connected' => 0,
368
  /**
369
- * Special flag that is used when a super-admin upgrades to the new version of the SDK that
370
- * supports network level integration, when the connection decision wasn't made for all of the
371
- * sites in the network.
372
  */
373
- 'is_network_activation' => 0,
374
- 'license_migration' => 0,
375
 
376
  // When network activated, then network level.
377
- 'install_timestamp' => 1,
378
- 'prev_is_premium' => 1,
379
- 'require_license_activation' => 1,
380
 
381
  // If not network activated OR delegated, then site level.
382
- 'activation_timestamp' => 2,
383
- 'expired_license_notice_shown' => 2,
384
- 'is_whitelabeled' => 2,
385
- 'last_license_key' => 2,
386
- 'last_license_user_id' => 2,
387
- 'prev_user_id' => 2,
388
- 'sticky_optin_added' => 2,
389
- 'uninstall_reason' => 2,
390
- 'is_pending_activation' => 2,
391
- 'pending_license_key' => 2,
392
- 'is_extensions_tracking_allowed' => 2,
393
 
394
  // Site level options.
395
- 'is_anonymous' => 3,
 
396
  );
397
  }
398
 
@@ -403,25 +413,33 @@
403
  * @since 2.0.0
404
  *
405
  * @param string $key
 
406
  *
407
- * @return bool|mixed
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 ( ! isset( self::$_NETWORK_OPTIONS_MAP[ $key ] ) ) {
 
 
 
 
 
 
 
415
  // Option not found -> use site level storage.
416
  return false;
417
  }
418
 
419
- if ( 0 === self::$_NETWORK_OPTIONS_MAP[ $key ] ) {
420
  // Option found and set to always use the network level storage on a multisite.
421
  return true;
422
  }
423
 
424
- if ( 3 === self::$_NETWORK_OPTIONS_MAP[ $key ] ) {
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 ( 1 === self::$_NETWORK_OPTIONS_MAP[ $key ] ) {
434
  // Network activated.
435
  return true;
436
  }
437
 
438
- if ( 2 === self::$_NETWORK_OPTIONS_MAP[ $key ] && ! $this->_is_delegated_connection ) {
 
 
 
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( $key, $network_level_or_blog_id = null ) {
 
 
 
 
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 int
19
- */
20
- private $_wp_user_id;
21
- /**
22
- * @var int
23
  */
24
- private $_thread_id;
25
 
26
  #--------------------------------------------------------------------------------
27
  #region Singleton
@@ -49,10 +47,10 @@
49
  #endregion
50
 
51
  private function __construct() {
52
- $this->_wp_user_id = Freemius::get_current_wp_user_id();
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
- if ( $this->is_locked() ) {
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
- set_site_transient( "locked_{$this->_wp_user_id}", true, $expiration );
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
- delete_site_transient( "locked_{$this->_wp_user_id}" );
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 Vova Feldman (@svovaf)
229
- * @since 2.0.0
230
  *
231
  * @return bool
232
  */
233
- function is_tracking_allowed() {
234
- return ( true !== $this->is_disconnected );
235
  }
236
 
237
  /**
238
- * @author Vova Feldman (@svovaf)
239
- * @since 2.0.0
240
  *
241
- * @return bool
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 is_beta() {
253
- return ( isset( $this->is_beta ) && true === $this->is_beta );
 
 
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 its a tie.
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( fs_text_inline( '%s or higher', 'x-or-higher', $api->slug ), $api->requires ) ) ?>
 
 
 
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
- if ( ! empty( $api->tested ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->tested ) ), $api->tested, '>' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 ( ! empty( $api->requires ) && version_compare( substr( $GLOBALS['wp_version'], 0, strlen( $api->requires ) ), $api->requires, '<' ) ) {
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
- $this->_sticky_storage->clear_all();
 
 
 
 
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
- $this->_data = $this->_storage->get_option( self::OPTION_NAME, array() );
120
- $this->_network_data = $this->_network_storage->get_option( self::OPTION_NAME, array() );
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
- $defaults = array(
126
- 'clone_identification_timestamp' => null,
127
- 'temporary_duplicate_mode_selection_timestamp' => null,
128
- 'temporary_duplicate_notice_shown_timestamp' => null,
129
- 'request_handler_id' => null,
130
- 'request_handler_timestamp' => null,
131
- 'request_handler_retries_count' => null,
 
 
 
 
132
  );
133
 
134
- if ( ! is_array( $this->_data ) ) {
135
- $this->_data = $defaults;
136
- } else {
137
- foreach ( $defaults as $name => $value ) {
138
- $this->_data[ $name ] = isset( $this->_data[ $name ] ) ?
139
- $this->_data[ $name ] :
140
- $value;
141
- }
142
- }
143
 
144
- if (
145
- ! is_array( $this->_network_data ) ||
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
- empty( $this->get_clone_identification_timestamp() ) &&
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 ( Freemius::is_ajax() ) {
172
- Freemius::add_ajax_action_static( 'handle_clone_resolution', array( $this, '_clone_resolution_action_ajax_handler' ) );
 
 
 
 
 
 
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?search=" . urlencode( $url ) . "&all=true", true );
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
- $instances_with_clone_count = 0;
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
- if ( ! $instance->is_clone() ) {
837
- continue;
 
838
  }
839
 
840
- $instances_with_clone_count ++;
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
- $redirect_url = '';
858
-
859
- if (
860
- 1 === $instances_with_clone_count &&
861
- $has_error
862
- ) {
863
- $redirect_url = $instance_with_error->get_activation_url();
864
  }
865
 
866
- $result = ( array( 'redirect_url' => $redirect_url ) );
 
 
 
 
 
 
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
- private function maybe_show_clone_admin_notice() {
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->last_time_temporary_duplicate_notice_was_shown();
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' => get_current_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
- $storage = FS_Option_Manager::get_manager( WP_FS___OPTION_PREFIX . self::OPTION_MANAGER_NAME, true, $blog_id );
1449
- $data = $storage->get_option( self::OPTION_NAME, array() );
1450
-
1451
- if ( ! is_array( $data ) ) {
1452
- return false;
1453
- }
1454
 
1455
- $was_temporary_duplicate_mode_selected = (
1456
- isset( $data['temporary_duplicate_mode_selection_timestamp'] ) &&
1457
- is_numeric( $data['temporary_duplicate_mode_selection_timestamp'] )
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 ( ! isset( $this->temporary_duplicate_notice_shown_timestamp ) ) ?
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 = null;
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
- if ( ! $this->should_use_network_storage( $name ) ) {
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
- isset( $this->_data[ $name ] ) ||
1567
- isset( $this->_network_data[ $name ] )
1568
- );
 
 
 
 
1569
  }
1570
 
1571
  /**
@@ -1574,13 +1649,11 @@
1574
  * @return null|int|string
1575
  */
1576
  function __get( $name ) {
1577
- $data = ( ! $this->should_use_network_storage( $name ) ) ?
1578
- $this->_data :
1579
- $this->_network_data;
1580
-
1581
- return array_key_exists( $name, $data ) ?
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
- return;
51
- }
52
-
53
- abstract class Freemius_Api_Base {
54
- const VERSION = '1.0.4';
55
- const FORMAT = 'json';
56
-
57
- protected $_id;
58
- protected $_public;
59
- protected $_secret;
60
- protected $_scope;
61
- protected $_isSandbox;
62
-
63
- /**
64
- * @param string $pScope 'app', 'developer', 'plugin', 'user' or 'install'.
65
- * @param number $pID Element's id.
66
- * @param string $pPublic Public key.
67
- * @param string $pSecret Element's secret key.
68
- * @param bool $pIsSandbox Whether or not to run API in sandbox mode.
69
- */
70
- public function Init( $pScope, $pID, $pPublic, $pSecret, $pIsSandbox = false ) {
71
- $this->_id = $pID;
72
- $this->_public = $pPublic;
73
- $this->_secret = $pSecret;
74
- $this->_scope = $pScope;
75
- $this->_isSandbox = $pIsSandbox;
76
- }
77
-
78
- public function IsSandbox() {
79
- return $this->_isSandbox;
80
- }
81
-
82
- function CanonizePath( $pPath ) {
83
- $pPath = trim( $pPath, '/' );
84
- $query_pos = strpos( $pPath, '?' );
85
- $query = '';
86
-
87
- if ( false !== $query_pos ) {
88
- $query = substr( $pPath, $query_pos );
89
- $pPath = substr( $pPath, 0, $query_pos );
90
- }
91
-
92
- // Trim '.json' suffix.
93
- $format_length = strlen( '.' . self::FORMAT );
94
- $start = $format_length * ( - 1 ); //negative
95
- if ( substr( strtolower( $pPath ), $start ) === ( '.' . self::FORMAT ) ) {
96
- $pPath = substr( $pPath, 0, strlen( $pPath ) - $format_length );
97
- }
98
-
99
- switch ( $this->_scope ) {
100
- case 'app':
101
- $base = '/apps/' . $this->_id;
102
- break;
103
- case 'developer':
104
- $base = '/developers/' . $this->_id;
105
- break;
106
- case 'user':
107
- $base = '/users/' . $this->_id;
108
- break;
109
- case 'plugin':
110
- $base = '/plugins/' . $this->_id;
111
- break;
112
- case 'install':
113
- $base = '/installs/' . $this->_id;
114
- break;
115
- default:
116
- throw new Freemius_Exception( 'Scope not implemented.' );
117
- }
118
-
119
- return '/v' . FS_API__VERSION . $base .
120
- ( ! empty( $pPath ) ? '/' : '' ) . $pPath .
121
- ( ( false === strpos( $pPath, '.' ) ) ? '.' . self::FORMAT : '' ) . $query;
122
- }
123
-
124
- abstract function MakeRequest( $pCanonizedPath, $pMethod = 'GET', $pParams = array() );
125
-
126
- /**
127
- * @param string $pPath
128
- * @param string $pMethod
129
- * @param array $pParams
130
- *
131
- * @return object[]|object|null
132
- */
133
- private function _Api( $pPath, $pMethod = 'GET', $pParams = array() ) {
134
- $pMethod = strtoupper( $pMethod );
135
-
136
- try {
137
- $result = $this->MakeRequest( $pPath, $pMethod, $pParams );
138
- } catch ( Freemius_Exception $e ) {
139
- // Map to error object.
140
- $result = (object) $e->getResult();
141
- } catch ( Exception $e ) {
142
- // Map to error object.
143
- $result = (object) array(
144
- 'error' => (object) array(
145
- 'type' => 'Unknown',
146
- 'message' => $e->getMessage() . ' (' . $e->getFile() . ': ' . $e->getLine() . ')',
147
- 'code' => 'unknown',
148
- 'http' => 402
149
- )
150
- );
151
- }
152
-
153
- return $result;
154
- }
155
-
156
- public function Api( $pPath, $pMethod = 'GET', $pParams = array() ) {
157
- return $this->_Api( $this->CanonizePath( $pPath ), $pMethod, $pParams );
158
- }
159
-
160
- /**
161
- * Base64 decoding that does not need to be urldecode()-ed.
162
- *
163
- * Exactly the same as PHP base64 encode except it uses
164
- * `-` instead of `+`
165
- * `_` instead of `/`
166
- * No padded =
167
- *
168
- * @param string $input Base64UrlEncoded() string
169
- *
170
- * @return string
171
- */
172
- protected static function Base64UrlDecode( $input ) {
173
- /**
174
- * IMPORTANT NOTE:
175
- * This is a hack suggested by @otto42 and @greenshady from
176
- * the theme's review team. The usage of base64 for API
177
- * signature encoding was approved in a Slack meeting
178
- * held on Tue (10/25 2016).
179
- *
180
- * @todo Remove this hack once the base64 error is removed from the Theme Check.
181
- *
182
- * @since 1.2.2
183
- * @author Vova Feldman (@svovaf)
184
- */
185
- $fn = 'base64' . '_decode';
186
- return $fn( strtr( $input, '-_', '+/' ) );
187
- }
188
-
189
- /**
190
- * Base64 encoding that does not need to be urlencode()ed.
191
- *
192
- * Exactly the same as base64 encode except it uses
193
- * `-` instead of `+
194
- * `_` instead of `/`
195
- *
196
- * @param string $input string
197
- *
198
- * @return string Base64 encoded string
199
- */
200
- protected static function Base64UrlEncode( $input ) {
201
- /**
202
- * IMPORTANT NOTE:
203
- * This is a hack suggested by @otto42 and @greenshady from
204
- * the theme's review team. The usage of base64 for API
205
- * signature encoding was approved in a Slack meeting
206
- * held on Tue (10/25 2016).
207
- *
208
- * @todo Remove this hack once the base64 error is removed from the Theme Check.
209
- *
210
- * @since 1.2.2
211
- * @author Vova Feldman (@svovaf)
212
- */
213
- $fn = 'base64' . '_encode';
214
- $str = strtr( $fn( $input ), '+/', '-_' );
215
- $str = str_replace( '=', '', $str );
216
-
217
- return $str;
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:1932, templates/account.php:941
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:1939
25
  msgid "Would you like to proceed with the update?"
26
  msgstr ""
27
 
28
- #: includes/class-freemius.php:3751, templates/debug.php:20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  msgid "Freemius Debug"
30
  msgstr ""
31
 
32
- #: includes/class-freemius.php:13791
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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:13869
 
 
 
 
 
 
 
 
 
 
 
 
37
  msgid "An unknown error has occurred while trying to set the user's beta mode."
38
  msgstr ""
39
 
40
- #: includes/class-freemius.php:13942
41
  msgid "Invalid new user ID or email address."
42
  msgstr ""
43
 
44
- #: includes/class-freemius.php:23326
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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:364, includes/class-fs-plugin-updater.php:331
57
  msgid "There is a %s of %s available."
58
  msgstr ""
59
 
60
- #: includes/class-fs-plugin-updater.php:369, includes/class-fs-plugin-updater.php:333
61
  msgid "new Beta version"
62
  msgstr ""
63
 
64
- #: includes/class-fs-plugin-updater.php:370, includes/class-fs-plugin-updater.php:334
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:1551
 
 
 
 
 
 
 
 
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:541
77
  msgid "Purchase More"
78
  msgstr ""
79
 
80
- #: includes/fs-plugin-info-dialog.php:542, templates/account/partials/addon.php:390
81
  msgctxt "verb"
82
  msgid "Purchase"
83
  msgstr ""
84
 
85
- #. translators: %s: N-days trial
86
- #: includes/fs-plugin-info-dialog.php:546
87
  msgid "Start my free %s"
88
  msgstr ""
89
 
90
- #: includes/fs-plugin-info-dialog.php:754
91
- msgid "Install Free Version Now"
92
  msgstr ""
93
 
94
- #: includes/fs-plugin-info-dialog.php:755, templates/add-ons.php:323, templates/auto-installation.php:111, templates/account/partials/addon.php:423, templates/account/partials/addon.php:370
95
- msgid "Install Now"
96
  msgstr ""
97
 
98
- #: includes/fs-plugin-info-dialog.php:744
99
- msgid "Install Free Version Update Now"
100
  msgstr ""
101
 
102
- #: includes/fs-plugin-info-dialog.php:745, templates/account.php:650
103
- msgid "Install Update Now"
104
  msgstr ""
105
 
106
- #: includes/fs-plugin-info-dialog.php:771
107
  msgctxt "as download latest version"
108
  msgid "Download Latest Free Version"
109
  msgstr ""
110
 
111
- #: includes/fs-plugin-info-dialog.php:772, templates/account.php:109, templates/add-ons.php:37, templates/account/partials/addon.php:30
112
  msgctxt "as download latest version"
113
  msgid "Download Latest"
114
  msgstr ""
115
 
116
- #: includes/fs-plugin-info-dialog.php:787, templates/add-ons.php:329, templates/account/partials/addon.php:417, templates/account/partials/addon.php:361
117
  msgid "Activate this add-on"
118
  msgstr ""
119
 
120
- #: includes/fs-plugin-info-dialog.php:789, templates/connect.php:483
121
  msgid "Activate Free Version"
122
  msgstr ""
123
 
124
- #: includes/fs-plugin-info-dialog.php:790, templates/account.php:133, templates/add-ons.php:330, templates/account/partials/addon.php:53
125
  msgid "Activate"
126
  msgstr ""
127
 
128
- #: includes/fs-plugin-info-dialog.php:1002
129
  msgctxt "Plugin installer section title"
130
  msgid "Description"
131
  msgstr ""
132
 
133
- #: includes/fs-plugin-info-dialog.php:1003
134
  msgctxt "Plugin installer section title"
135
  msgid "Installation"
136
  msgstr ""
137
 
138
- #: includes/fs-plugin-info-dialog.php:1004
139
  msgctxt "Plugin installer section title"
140
  msgid "FAQ"
141
  msgstr ""
142
 
143
- #: includes/fs-plugin-info-dialog.php:1005, templates/plugin-info/description.php:55
144
  msgid "Screenshots"
145
  msgstr ""
146
 
147
- #: includes/fs-plugin-info-dialog.php:1006
148
  msgctxt "Plugin installer section title"
149
  msgid "Changelog"
150
  msgstr ""
151
 
152
- #: includes/fs-plugin-info-dialog.php:1007
153
  msgctxt "Plugin installer section title"
154
  msgid "Reviews"
155
  msgstr ""
156
 
157
- #: includes/fs-plugin-info-dialog.php:1008
158
  msgctxt "Plugin installer section title"
159
  msgid "Other Notes"
160
  msgstr ""
161
 
162
- #: includes/fs-plugin-info-dialog.php:1023
163
  msgctxt "Plugin installer section title"
164
  msgid "Features & Pricing"
165
  msgstr ""
166
 
167
- #: includes/fs-plugin-info-dialog.php:1033
168
  msgid "Plugin Install"
169
  msgstr ""
170
 
171
- #: includes/fs-plugin-info-dialog.php:1105
172
  msgctxt "e.g. Professional Plan"
173
  msgid "%s Plan"
174
  msgstr ""
175
 
176
- #: includes/fs-plugin-info-dialog.php:1131
177
  msgctxt "e.g. the best product"
178
  msgid "Best"
179
  msgstr ""
180
 
181
- #: includes/fs-plugin-info-dialog.php:1137, includes/fs-plugin-info-dialog.php:1157
182
  msgctxt "as every month"
183
  msgid "Monthly"
184
  msgstr ""
185
 
186
- #: includes/fs-plugin-info-dialog.php:1140
187
  msgctxt "as once a year"
188
  msgid "Annual"
189
  msgstr ""
190
 
191
- #: includes/fs-plugin-info-dialog.php:1143
192
  msgid "Lifetime"
193
  msgstr ""
194
 
195
- #: includes/fs-plugin-info-dialog.php:1157, includes/fs-plugin-info-dialog.php:1159, includes/fs-plugin-info-dialog.php:1161
196
  msgctxt "e.g. billed monthly"
197
  msgid "Billed %s"
198
  msgstr ""
199
 
200
- #: includes/fs-plugin-info-dialog.php:1159
201
  msgctxt "as once a year"
202
  msgid "Annually"
203
  msgstr ""
204
 
205
- #: includes/fs-plugin-info-dialog.php:1161
206
  msgctxt "as once a year"
207
  msgid "Once"
208
  msgstr ""
209
 
210
- #: includes/fs-plugin-info-dialog.php:1167
211
  msgid "Single Site License"
212
  msgstr ""
213
 
214
- #: includes/fs-plugin-info-dialog.php:1169
215
  msgid "Unlimited Licenses"
216
  msgstr ""
217
 
218
- #: includes/fs-plugin-info-dialog.php:1171
219
  msgid "Up to %s Sites"
220
  msgstr ""
221
 
222
- #: includes/fs-plugin-info-dialog.php:1181, templates/plugin-info/features.php:82
223
  msgctxt "as monthly period"
224
  msgid "mo"
225
  msgstr ""
226
 
227
- #: includes/fs-plugin-info-dialog.php:1188, templates/plugin-info/features.php:80
228
  msgctxt "as annual period"
229
  msgid "year"
230
  msgstr ""
231
 
232
- #: includes/fs-plugin-info-dialog.php:1242
233
  msgctxt "noun"
234
  msgid "Price"
235
  msgstr ""
236
 
237
- #. translators: %s: Discount (e.g. discount of $5 or 10%)
238
- #: includes/fs-plugin-info-dialog.php:1290
239
  msgid "Save %s"
240
  msgstr ""
241
 
242
- #: includes/fs-plugin-info-dialog.php:1300
243
  msgid "No commitment for %s - cancel anytime"
244
  msgstr ""
245
 
246
- #: includes/fs-plugin-info-dialog.php:1303
247
  msgid "After your free %s, pay as little as %s"
248
  msgstr ""
249
 
250
- #: includes/fs-plugin-info-dialog.php:1314
251
  msgid "Details"
252
  msgstr ""
253
 
254
- #: includes/fs-plugin-info-dialog.php:1318, templates/account.php:120, templates/debug.php:215, templates/debug.php:252, templates/debug.php:466, templates/account/partials/addon.php:41
255
  msgctxt "product version"
256
  msgid "Version"
257
  msgstr ""
258
 
259
- #: includes/fs-plugin-info-dialog.php:1325
260
  msgctxt "as the plugin author"
261
  msgid "Author"
262
  msgstr ""
263
 
264
- #: includes/fs-plugin-info-dialog.php:1332
265
  msgid "Last Updated"
266
  msgstr ""
267
 
268
- #. translators: %s: time period (e.g. "2 hours" ago)
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:1346
275
  msgid "Requires WordPress Version"
276
  msgstr ""
277
 
278
- #: includes/fs-plugin-info-dialog.php:1347
279
  msgid "%s or higher"
280
  msgstr ""
281
 
282
- #: includes/fs-plugin-info-dialog.php:1354
283
  msgid "Compatible up to"
284
  msgstr ""
285
 
286
- #: includes/fs-plugin-info-dialog.php:1362
 
 
 
 
287
  msgid "Downloaded"
288
  msgstr ""
289
 
290
- #. translators: %s: 1 or One (Number of times downloaded)
291
- #: includes/fs-plugin-info-dialog.php:1366
292
  msgid "%s time"
293
  msgstr ""
294
 
295
- #. translators: %s: Number of times downloaded
296
- #: includes/fs-plugin-info-dialog.php:1368
297
  msgid "%s times"
298
  msgstr ""
299
 
300
- #: includes/fs-plugin-info-dialog.php:1379
301
  msgid "WordPress.org Plugin Page"
302
  msgstr ""
303
 
304
- #: includes/fs-plugin-info-dialog.php:1388
305
  msgid "Plugin Homepage"
306
  msgstr ""
307
 
308
- #: includes/fs-plugin-info-dialog.php:1397, includes/fs-plugin-info-dialog.php:1481
309
  msgid "Donate to this plugin"
310
  msgstr ""
311
 
312
- #: includes/fs-plugin-info-dialog.php:1404
313
  msgid "Average Rating"
314
  msgstr ""
315
 
316
- #: includes/fs-plugin-info-dialog.php:1411
317
  msgid "based on %s"
318
  msgstr ""
319
 
320
- #. translators: %s: 1 or One
321
- #: includes/fs-plugin-info-dialog.php:1415
322
  msgid "%s rating"
323
  msgstr ""
324
 
325
- #. translators: %s: Number larger than 1
326
- #: includes/fs-plugin-info-dialog.php:1417
327
  msgid "%s ratings"
328
  msgstr ""
329
 
330
- #. translators: %s: 1 or One
331
- #: includes/fs-plugin-info-dialog.php:1432
332
  msgid "%s star"
333
  msgstr ""
334
 
335
- #. translators: %s: Number larger than 1
336
- #: includes/fs-plugin-info-dialog.php:1434
337
  msgid "%s stars"
338
  msgstr ""
339
 
340
- #. translators: %s: # of stars (e.g. 5 stars)
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:1459
346
  msgid "Contributors"
347
  msgstr ""
348
 
349
- #: includes/fs-plugin-info-dialog.php:1491, includes/fs-plugin-info-dialog.php:1489
350
- msgid "Warning"
351
  msgstr ""
352
 
353
- #: includes/fs-plugin-info-dialog.php:1491
354
- msgid "This plugin has not been marked as compatible with your version of WordPress."
 
 
 
 
355
  msgstr ""
356
 
357
- #: includes/fs-plugin-info-dialog.php:1489
358
  msgid "This plugin has not been tested with your current version of WordPress."
359
  msgstr ""
360
 
361
- #: includes/fs-plugin-info-dialog.php:1510
 
 
 
 
362
  msgid "Paid add-on must be deployed to Freemius."
363
  msgstr ""
364
 
365
- #: includes/fs-plugin-info-dialog.php:1511
366
  msgid "Add-on must be deployed to WordPress.org or Freemius."
367
  msgstr ""
368
 
369
- #: includes/fs-plugin-info-dialog.php:1540
370
- msgid "Latest Version Installed"
371
  msgstr ""
372
 
373
- #: includes/fs-plugin-info-dialog.php:1541
374
- msgid "Latest Free Version Installed"
375
  msgstr ""
376
 
377
- #: includes/fs-plugin-info-dialog.php:1532
378
- msgid "Newer Version (%s) Installed"
379
  msgstr ""
380
 
381
- #: includes/fs-plugin-info-dialog.php:1533
382
- msgid "Newer Free Version (%s) Installed"
383
  msgstr ""
384
 
385
- #: templates/account.php:110, templates/forms/subscription-cancellation.php:96, templates/account/partials/addon.php:31, templates/account/partials/site.php:311
386
  msgid "Downgrading your plan"
387
  msgstr ""
388
 
389
- #: templates/account.php:111, templates/forms/subscription-cancellation.php:97, templates/account/partials/addon.php:32, templates/account/partials/site.php:312
390
  msgid "Cancelling the subscription"
391
  msgstr ""
392
 
393
  #. translators: %1$s: Either 'Downgrading your plan' or 'Cancelling the subscription'
394
- #: templates/account.php:113, templates/forms/subscription-cancellation.php:99, templates/account/partials/site.php:314
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:114, templates/forms/subscription-cancellation.php:100, templates/account/partials/addon.php:35, templates/account/partials/site.php:315
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:115, templates/forms/subscription-cancellation.php:106, templates/account/partials/addon.php:36
403
  msgid "Cancelling the trial will immediately block access to all premium features. Are you sure?"
404
  msgstr ""
405
 
406
- #: templates/account.php:116, templates/forms/subscription-cancellation.php:101, templates/account/partials/addon.php:37, templates/account/partials/site.php:316
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:117, templates/forms/subscription-cancellation.php:102, templates/account/partials/addon.php:38, templates/account/partials/site.php:317
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:119, templates/account/partials/activate-license-button.php:31, templates/account/partials/addon.php:40
416
  msgid "Activate %s Plan"
417
  msgstr ""
418
 
419
  #. translators: %s: Time period (e.g. Auto renews in "2 months")
420
- #: templates/account.php:122, templates/account/partials/addon.php:43, templates/account/partials/site.php:291
421
  msgid "Auto renews in %s"
422
  msgstr ""
423
 
424
  #. translators: %s: Time period (e.g. Expires in "2 months")
425
- #: templates/account.php:124, templates/account/partials/addon.php:45, templates/account/partials/site.php:293
426
  msgid "Expires in %s"
427
  msgstr ""
428
 
429
- #: templates/account.php:125
430
  msgctxt "as synchronize license"
431
  msgid "Sync License"
432
  msgstr ""
433
 
434
- #: templates/account.php:126, templates/account/partials/addon.php:46
435
  msgid "Cancel Trial"
436
  msgstr ""
437
 
438
- #: templates/account.php:127, templates/account/partials/addon.php:47
439
  msgid "Change Plan"
440
  msgstr ""
441
 
442
- #: templates/account.php:128, templates/account/partials/addon.php:48
443
  msgctxt "verb"
444
  msgid "Upgrade"
445
  msgstr ""
446
 
447
- #: templates/account.php:129, templates/account/partials/addon.php:49
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:131, templates/add-ons.php:250, templates/account/partials/addon.php:51
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:134, templates/debug.php:385, templates/account/partials/addon.php:54
466
  msgctxt "as product pricing plan"
467
  msgid "Plan"
468
  msgstr ""
469
 
470
- #: templates/account.php:135
471
  msgid "Bundle Plan"
472
  msgstr ""
473
 
474
- #: templates/account.php:251, templates/debug.php:338
475
- msgid "Account"
476
- msgstr ""
477
-
478
- #: templates/account.php:259
479
  msgid "Free Trial"
480
  msgstr ""
481
 
482
- #: templates/account.php:270
483
  msgid "Account Details"
484
  msgstr ""
485
 
486
- #: templates/account.php:279
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:286
495
- msgid "Billing & Invoices"
496
  msgstr ""
497
 
498
  #: templates/account.php:299
499
- msgid "Deletion is not temporary. Only delete if you no longer want to use this %s anymore. Are you sure you would like to continue with the deletion?"
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:314, templates/account/partials/addon.php:236, templates/account/partials/deactivate-license-button.php:35
511
  msgid "Deactivate License"
512
  msgstr ""
513
 
514
- #: templates/account.php:337, templates/forms/subscription-cancellation.php:125
515
  msgid "Are you sure you want to proceed?"
516
  msgstr ""
517
 
518
- #: templates/account.php:337, templates/account/partials/addon.php:260
519
  msgid "Cancel Subscription"
520
  msgstr ""
521
 
522
- #: templates/account.php:366, templates/account/partials/addon.php:345
523
  msgctxt "as synchronize"
524
  msgid "Sync"
525
  msgstr ""
526
 
527
- #: templates/account.php:381, templates/debug.php:523
528
  msgid "Name"
529
  msgstr ""
530
 
531
- #: templates/account.php:387, templates/debug.php:524
532
  msgid "Email"
533
  msgstr ""
534
 
535
- #: templates/account.php:394, templates/debug.php:383, templates/debug.php:573
536
  msgid "User ID"
537
  msgstr ""
538
 
539
- #: templates/account.php:403, templates/account.php:411, templates/debug.php:372, templates/debug.php:567
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:419
552
  msgid "Site ID"
553
  msgstr ""
554
 
555
- #: templates/account.php:422
556
  msgid "No ID"
557
  msgstr ""
558
 
559
- #: templates/account.php:427, templates/debug.php:257, templates/debug.php:386, templates/debug.php:467, templates/debug.php:526, templates/account/partials/site.php:227
560
  msgid "Public Key"
561
  msgstr ""
562
 
563
- #: templates/account.php:433, templates/debug.php:387, templates/debug.php:468, templates/debug.php:527, templates/account/partials/site.php:239
564
  msgid "Secret Key"
565
  msgstr ""
566
 
567
- #: templates/account.php:436
568
  msgctxt "as secret encryption key missing"
569
  msgid "No Secret"
570
  msgstr ""
571
 
572
- #: templates/account.php:490, templates/debug.php:579, templates/account/partials/site.php:260
573
- msgid "License Key"
574
  msgstr ""
575
 
576
- #: templates/account.php:463, templates/account/partials/site.php:122, templates/account/partials/site.php:120
577
- msgid "Trial"
578
  msgstr ""
579
 
580
- #: templates/account.php:521
581
  msgid "Join the Beta program"
582
  msgstr ""
583
 
584
- #: templates/account.php:527
585
  msgid "not verified"
586
  msgstr ""
587
 
588
- #: templates/account.php:598
589
- msgid "Free version"
590
  msgstr ""
591
 
592
- #: templates/account.php:596
593
  msgid "Premium version"
594
  msgstr ""
595
 
596
- #: templates/account.php:536, templates/account/partials/addon.php:195
597
- msgid "Expired"
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:610
605
  msgid "Verify Email"
606
  msgstr ""
607
 
608
- #: templates/account.php:687, templates/forms/user-change.php:27
609
- msgid "Change User"
610
- msgstr ""
611
-
612
- #: templates/account.php:674
613
- msgid "What is your %s?"
614
  msgstr ""
615
 
616
- #: templates/account.php:682, templates/account/billing.php:21
617
- msgctxt "verb"
618
- msgid "Edit"
619
  msgstr ""
620
 
621
- #: templates/account.php:658, templates/account.php:921, templates/account/partials/site.php:248, templates/account/partials/site.php:270
622
  msgctxt "verb"
623
  msgid "Show"
624
  msgstr ""
625
 
626
- #: templates/account.php:661, templates/account.php:718, templates/account/partials/addon.php:327, templates/account/partials/site.php:271
627
- msgid "Change License"
628
  msgstr ""
629
 
630
- #: templates/account.php:624
631
- msgid "Download %s Version"
 
632
  msgstr ""
633
 
634
- #: templates/account.php:640
635
- msgid "Download Paid Version"
636
  msgstr ""
637
 
638
- #: templates/account.php:711
639
  msgid "Sites"
640
  msgstr ""
641
 
642
- #: templates/account.php:724
643
  msgid "Search by address"
644
  msgstr ""
645
 
646
- #: templates/account.php:733, templates/debug.php:380
647
  msgid "Address"
648
  msgstr ""
649
 
650
- #: templates/account.php:734
651
  msgid "License"
652
  msgstr ""
653
 
654
- #: templates/account.php:735
655
  msgid "Plan"
656
  msgstr ""
657
 
658
- #: templates/account.php:786
659
  msgctxt "as software license"
660
  msgid "License"
661
  msgstr ""
662
 
663
- #: templates/account.php:915
664
  msgctxt "verb"
665
  msgid "Hide"
666
  msgstr ""
667
 
668
- #: templates/account.php:937, templates/forms/data-debug-mode.php:31, templates/forms/deactivation/form.php:358, templates/forms/deactivation/form.php:389
669
  msgid "Processing"
670
  msgstr ""
671
 
672
- #: templates/account.php:940
673
  msgid "Get updates for bleeding edge Beta versions of %s."
674
  msgstr ""
675
 
676
- #: templates/account.php:998
677
  msgid "Cancelling %s"
678
  msgstr ""
679
 
680
- #: templates/account.php:998, templates/account.php:1015, templates/forms/subscription-cancellation.php:27, templates/forms/deactivation/form.php:178
681
  msgid "trial"
682
  msgstr ""
683
 
684
- #: templates/account.php:1013, templates/forms/deactivation/form.php:195
685
  msgid "Cancelling %s..."
686
  msgstr ""
687
 
688
- #: templates/account.php:1016, templates/forms/subscription-cancellation.php:28, templates/forms/deactivation/form.php:179
689
  msgid "subscription"
690
  msgstr ""
691
 
692
- #: templates/account.php:1030
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:1104
697
  msgid "Disabling white-label mode"
698
  msgstr ""
699
 
700
- #: templates/account.php:1105
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:250, templates/forms/resend-key.php:80
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:181
772
- msgid "Allow & Continue"
773
  msgstr ""
774
 
775
- #: templates/connect.php:210, templates/connect.php:217
776
- msgid "Never miss an important update - opt in to our security & feature updates notifications, educational content, offers, and non-sensitive diagnostic tracking with %4$s."
777
  msgstr ""
778
 
779
- #: templates/connect.php:211, templates/connect.php:218
780
- msgid "Never miss an important update - opt in to our security & feature updates notifications, and non-sensitive diagnostic tracking with %4$s."
781
  msgstr ""
782
 
783
- #: templates/connect.php:221
784
- msgid "If you skip this, that's okay! %1$s will still work just fine."
785
  msgstr ""
786
 
787
- #: templates/connect.php:199, templates/forms/license-activation.php:46
788
- msgid "Agree & Activate License"
789
  msgstr ""
790
 
791
- #: templates/connect.php:203
792
  msgid "Welcome to %s! To get started, please enter your license key:"
793
  msgstr ""
794
 
795
- #: templates/connect.php:185
796
- msgid "Re-send activation email"
797
  msgstr ""
798
 
799
- #: templates/connect.php:189
800
- msgid "Thanks %s!"
801
  msgstr ""
802
 
803
- #: templates/connect.php:190
804
- msgid "You should receive an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s."
 
805
  msgstr ""
806
 
807
- #: templates/connect.php:194
808
- msgid "complete the install"
809
  msgstr ""
810
 
811
- #: templates/connect.php:251
812
- msgid "We're excited to introduce the Freemius network-level integration."
813
  msgstr ""
814
 
815
- #: templates/connect.php:265
816
- msgid "During the update process we detected %s site(s) in the network that are still pending your attention."
817
  msgstr ""
818
 
819
- #: templates/connect.php:254
 
 
 
 
820
  msgid "During the update process we detected %d site(s) that are still pending license activation."
821
  msgstr ""
822
 
823
- #: templates/connect.php:256
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:258
828
  msgid "%s's paid features"
829
  msgstr ""
830
 
831
- #: templates/connect.php:263
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:274, templates/forms/data-debug-mode.php:35, templates/forms/license-activation.php:49
836
- msgid "License key"
837
  msgstr ""
838
 
839
- #: templates/connect.php:277, templates/forms/license-activation.php:22
840
- msgid "Can't find your license key?"
841
  msgstr ""
842
 
843
- #: templates/connect.php:308
844
- msgid "Please let us know if you'd like us to contact you for security & feature updates, educational content, and occasional offers:"
845
  msgstr ""
846
 
847
- #: templates/connect.php:340, templates/connect.php:730, templates/forms/deactivation/retry-skip.php:20
848
  msgctxt "verb"
849
  msgid "Skip"
850
  msgstr ""
851
 
852
- #: templates/connect.php:343
853
  msgid "Delegate to Site Admins"
854
  msgstr ""
855
 
856
- #: templates/connect.php:343
857
  msgid "If you click it, this decision will be delegated to the sites administrators."
858
  msgstr ""
859
 
860
- #: templates/connect.php:368
861
  msgid "License issues?"
862
  msgstr ""
863
 
864
- #: templates/connect.php:454
865
- msgid "What permissions are being granted?"
866
  msgstr ""
867
 
868
- #: templates/connect.php:448
869
- msgid "The %1$s will periodically send %2$s to %3$s for security & feature updates delivery, and license management."
870
  msgstr ""
871
 
872
- #: templates/connect.php:450
873
- msgid "diagnostic data"
874
  msgstr ""
875
 
876
- #: templates/connect.php:485
877
  msgid "Have a license key?"
878
  msgstr ""
879
 
880
- #: templates/connect.php:482
881
- msgid "Don't have a license key?"
882
  msgstr ""
883
 
884
- #: templates/connect.php:493
885
  msgid "Privacy Policy"
886
  msgstr ""
887
 
888
- #: templates/connect.php:495
889
  msgid "License Agreement"
890
  msgstr ""
891
 
892
- #: templates/connect.php:495
893
  msgid "Terms of Service"
894
  msgstr ""
895
 
896
- #: templates/connect.php:896
897
  msgctxt "as in the process of sending an email"
898
  msgid "Sending email"
899
  msgstr ""
900
 
901
- #: templates/connect.php:897
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:20
917
  msgid "SDK"
918
  msgstr ""
919
 
920
- #: templates/debug.php:24
921
  msgctxt "as code debugging"
922
  msgid "Debugging"
923
  msgstr ""
924
 
925
- #: templates/debug.php:54, templates/debug.php:262, templates/debug.php:388, templates/debug.php:528
926
  msgid "Actions"
927
  msgstr ""
928
 
929
- #: templates/debug.php:64
930
  msgid "Are you sure you want to delete all Freemius data?"
931
  msgstr ""
932
 
933
- #: templates/debug.php:64
934
  msgid "Delete All Accounts"
935
  msgstr ""
936
 
937
- #: templates/debug.php:71
938
  msgid "Clear API Cache"
939
  msgstr ""
940
 
941
- #: templates/debug.php:79
942
  msgid "Clear Updates Transients"
943
  msgstr ""
944
 
945
- #: templates/debug.php:88
946
  msgid "Reset Deactivation Snoozing"
947
  msgstr ""
948
 
949
- #: templates/debug.php:96
950
  msgid "Sync Data From Server"
951
  msgstr ""
952
 
953
- #: templates/debug.php:105
954
  msgid "Migrate Options to Network"
955
  msgstr ""
956
 
957
- #: templates/debug.php:110
958
  msgid "Load DB Option"
959
  msgstr ""
960
 
961
- #: templates/debug.php:113
962
  msgid "Set DB Option"
963
  msgstr ""
964
 
965
- #: templates/debug.php:194
966
  msgid "Key"
967
  msgstr ""
968
 
969
- #: templates/debug.php:195
970
  msgid "Value"
971
  msgstr ""
972
 
973
- #: templates/debug.php:211
974
  msgctxt "as software development kit versions"
975
  msgid "SDK Versions"
976
  msgstr ""
977
 
978
- #: templates/debug.php:216
979
  msgid "SDK Path"
980
  msgstr ""
981
 
982
- #: templates/debug.php:217, templates/debug.php:256
983
  msgid "Module Path"
984
  msgstr ""
985
 
986
- #: templates/debug.php:218
987
  msgid "Is Active"
988
  msgstr ""
989
 
990
- #: templates/debug.php:246, templates/debug/plugins-themes-sync.php:35
991
  msgid "Plugins"
992
  msgstr ""
993
 
994
- #: templates/debug.php:246, templates/debug/plugins-themes-sync.php:56
995
  msgid "Themes"
996
  msgstr ""
997
 
998
- #: templates/debug.php:251, templates/debug.php:382, templates/debug.php:465, templates/debug/scheduled-crons.php:80
999
  msgid "Slug"
1000
  msgstr ""
1001
 
1002
- #: templates/debug.php:253, templates/debug.php:464
1003
  msgid "Title"
1004
  msgstr ""
1005
 
1006
- #: templates/debug.php:254
1007
  msgctxt "as application program interface"
1008
  msgid "API"
1009
  msgstr ""
1010
 
1011
- #: templates/debug.php:255
1012
  msgid "Freemius State"
1013
  msgstr ""
1014
 
1015
- #: templates/debug.php:259
1016
  msgid "Network Blog"
1017
  msgstr ""
1018
 
1019
- #: templates/debug.php:260
1020
  msgid "Network User"
1021
  msgstr ""
1022
 
1023
- #: templates/debug.php:297
1024
  msgctxt "as connection was successful"
1025
  msgid "Connected"
1026
  msgstr ""
1027
 
1028
- #: templates/debug.php:298
1029
  msgctxt "as connection blocked"
1030
  msgid "Blocked"
1031
  msgstr ""
1032
 
1033
- #: templates/debug.php:334
1034
  msgid "Simulate Trial Promotion"
1035
  msgstr ""
1036
 
1037
- #: templates/debug.php:346
1038
  msgid "Simulate Network Upgrade"
1039
  msgstr ""
1040
 
1041
- #. translators: %s: 'plugin' or 'theme'
1042
- #: templates/debug.php:371
1043
  msgid "%s Installs"
1044
  msgstr ""
1045
 
1046
- #: templates/debug.php:373
1047
  msgctxt "like websites"
1048
  msgid "Sites"
1049
  msgstr ""
1050
 
1051
- #: templates/debug.php:379, templates/account/partials/site.php:156
1052
  msgid "Blog ID"
1053
  msgstr ""
1054
 
1055
- #: templates/debug.php:384
1056
  msgid "License ID"
1057
  msgstr ""
1058
 
1059
- #: templates/debug.php:445, templates/debug.php:551, templates/account/partials/addon.php:440
1060
  msgctxt "verb"
1061
  msgid "Delete"
1062
  msgstr ""
1063
 
1064
- #: templates/debug.php:459
1065
  msgid "Add Ons of module %s"
1066
  msgstr ""
1067
 
1068
- #: templates/debug.php:518
1069
  msgid "Users"
1070
  msgstr ""
1071
 
1072
- #: templates/debug.php:525
1073
  msgid "Verified"
1074
  msgstr ""
1075
 
1076
- #: templates/debug.php:567
1077
  msgid "%s Licenses"
1078
  msgstr ""
1079
 
1080
- #: templates/debug.php:572
1081
  msgid "Plugin ID"
1082
  msgstr ""
1083
 
1084
- #: templates/debug.php:574
1085
  msgid "Plan ID"
1086
  msgstr ""
1087
 
1088
- #: templates/debug.php:575
1089
  msgid "Quota"
1090
  msgstr ""
1091
 
1092
- #: templates/debug.php:576
1093
  msgid "Activated"
1094
  msgstr ""
1095
 
1096
- #: templates/debug.php:577
1097
  msgid "Blocking"
1098
  msgstr ""
1099
 
1100
- #: templates/debug.php:578, templates/debug.php:649, templates/debug/logger.php:22
1101
  msgid "Type"
1102
  msgstr ""
1103
 
1104
- #: templates/debug.php:580
1105
  msgctxt "as expiration date"
1106
  msgid "Expiration"
1107
  msgstr ""
1108
 
1109
- #: templates/debug.php:608
1110
  msgid "Debug Log"
1111
  msgstr ""
1112
 
1113
- #: templates/debug.php:612
1114
  msgid "All Types"
1115
  msgstr ""
1116
 
1117
- #: templates/debug.php:619
1118
  msgid "All Requests"
1119
  msgstr ""
1120
 
1121
- #: templates/debug.php:624, templates/debug.php:653, templates/debug/logger.php:25
1122
  msgid "File"
1123
  msgstr ""
1124
 
1125
- #: templates/debug.php:625, templates/debug.php:651, templates/debug/logger.php:23
1126
  msgid "Function"
1127
  msgstr ""
1128
 
1129
- #: templates/debug.php:626
1130
  msgid "Process ID"
1131
  msgstr ""
1132
 
1133
- #: templates/debug.php:627
1134
  msgid "Logger"
1135
  msgstr ""
1136
 
1137
- #: templates/debug.php:628, templates/debug.php:652, templates/debug/logger.php:24
1138
  msgid "Message"
1139
  msgstr ""
1140
 
1141
- #: templates/debug.php:630
1142
  msgid "Filter"
1143
  msgstr ""
1144
 
1145
- #: templates/debug.php:638
1146
  msgid "Download"
1147
  msgstr ""
1148
 
1149
- #: templates/debug.php:654, templates/debug/logger.php:26
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:703
1167
  msgid "Invalid clone resolution action."
1168
  msgstr ""
1169
 
1170
- #: includes/managers/class-fs-clone-manager.php:851
1171
  msgid "products"
1172
  msgstr ""
1173
 
1174
- #: includes/managers/class-fs-clone-manager.php:1039
1175
- 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"
1176
  msgstr ""
1177
 
1178
- #: includes/managers/class-fs-clone-manager.php:1040
1179
- 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"
1180
  msgstr ""
1181
 
1182
- #: includes/managers/class-fs-clone-manager.php:1033
1183
- msgid "%1$s has been placed into safe mode because we noticed that %2$s is an exact copy of %3$s."
1184
  msgstr ""
1185
 
1186
- #: includes/managers/class-fs-clone-manager.php:1066
1187
  msgid "the above-mentioned sites"
1188
  msgstr ""
1189
 
1190
- #: includes/managers/class-fs-clone-manager.php:1079
1191
  msgid "Is %2$s a duplicate of %4$s?"
1192
  msgstr ""
1193
 
1194
- #: includes/managers/class-fs-clone-manager.php:1080
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:1085
1199
  msgid "Long-Term Duplicate"
1200
  msgstr ""
1201
 
1202
- #: includes/managers/class-fs-clone-manager.php:1090
1203
  msgid "Duplicate Website"
1204
  msgstr ""
1205
 
1206
- #: includes/managers/class-fs-clone-manager.php:1096
1207
  msgid "Is %2$s the new home of %4$s?"
1208
  msgstr ""
1209
 
1210
- #: includes/managers/class-fs-clone-manager.php:1098
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:1099, templates/forms/subscription-cancellation.php:52
1215
  msgid "license"
1216
  msgstr ""
1217
 
1218
- #: includes/managers/class-fs-clone-manager.php:1099
1219
  msgid "data"
1220
  msgstr ""
1221
 
1222
- #: includes/managers/class-fs-clone-manager.php:1105
1223
  msgid "Migrate License"
1224
  msgstr ""
1225
 
1226
- #: includes/managers/class-fs-clone-manager.php:1106
1227
  msgid "Migrate"
1228
  msgstr ""
1229
 
1230
- #: includes/managers/class-fs-clone-manager.php:1112
1231
  msgid "Is %2$s a new website?"
1232
  msgstr ""
1233
 
1234
- #: includes/managers/class-fs-clone-manager.php:1113
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:1115
1239
  msgid "It requires license activation."
1240
  msgstr ""
1241
 
1242
- #: includes/managers/class-fs-clone-manager.php:1122
1243
  msgid "New Website"
1244
  msgstr ""
1245
 
1246
- #: includes/managers/class-fs-clone-manager.php:1145
1247
  msgctxt "Clone resolution admin notice products list label"
1248
  msgid "Products"
1249
  msgstr ""
1250
 
1251
- #: includes/managers/class-fs-clone-manager.php:1230
1252
  msgid "You marked this website, %s, as a temporary duplicate of %s."
1253
  msgstr ""
1254
 
1255
- #: includes/managers/class-fs-clone-manager.php:1231
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:1245
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:1248
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:1251
1269
  msgid "The following products'"
1270
  msgstr ""
1271
 
1272
- #: includes/managers/class-fs-clone-manager.php:1259
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:1261
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:132
1442
- msgid "Due to violation of our affiliation terms, we decided to temporarily block your affiliation account. If you have any questions, please contact support."
1443
  msgstr ""
1444
 
1445
- #: templates/forms/affiliation.php:129
1446
- 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."
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:123
1454
- 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."
1455
  msgstr ""
1456
 
1457
- #: templates/forms/affiliation.php:108
1458
- msgid "Your affiliate application for %s has been accepted! Log in to your affiliate area at: %s."
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:41
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/optout.php:31
1660
- msgctxt "verb"
1661
- msgid "Opt In"
1662
  msgstr ""
1663
 
1664
- #: templates/forms/optout.php:41
1665
- msgid "We appreciate your help in making the %s better by letting us track some usage data."
1666
  msgstr ""
1667
 
1668
  #: templates/forms/optout.php:44
1669
- msgid "Usage tracking is done in the name of making %s better. Making a better user experience, prioritizing new features, and more good things. We'd really appreciate if you'll reconsider letting us continue with the tracking."
1670
  msgstr ""
1671
 
1672
- #: templates/forms/optout.php:45
1673
- msgid "On second thought - I want to continue helping"
1674
  msgstr ""
1675
 
1676
- #: templates/forms/optout.php:34
1677
- msgid "Connectivity to the licensing engine was successfully re-established. Automatic security & feature updates are now available through the WP Admin Dashboard."
1678
  msgstr ""
1679
 
1680
- #: templates/forms/optout.php:36
1681
- msgid "Warning: Opting out will block automatic updates"
1682
  msgstr ""
1683
 
1684
- #: templates/forms/optout.php:37
1685
- msgid "Ongoing connectivity with the licensing engine is essential for receiving automatic security & feature updates of the paid product. To receive these updates, data like your license key, %1$s version, and WordPress version, is periodically sent to the server to check for updates. By opting out, you understand that your site won't receive automatic updates for %2$s from within the WP Admin Dashboard. This can put your site at risk, and we highly recommend to keep this connection active. If you do choose to opt-out, you'll need to check for %1$s updates and install them manually."
1686
  msgstr ""
1687
 
1688
- #: templates/forms/optout.php:39
1689
- msgid "I'd like to keep automatic updates"
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/partials/network-activation.php:36
1805
- msgid "Activate license on all pending sites."
1806
  msgstr ""
1807
 
1808
- #: templates/partials/network-activation.php:37
1809
- msgid "Apply on all pending sites."
 
 
 
 
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/addon.php:190
1867
- msgid "Cancelled"
1868
  msgstr ""
1869
 
1870
- #: templates/account/partials/site.php:49, templates/account/partials/site.php:169
1871
- msgid "Opt In"
1872
  msgstr ""
1873
 
1874
- #: templates/account/partials/site.php:169
1875
- msgid "Opt Out"
 
 
 
 
1876
  msgstr ""
1877
 
1878
- #: templates/account/partials/site.php:189
1879
  msgid "Owner Name"
1880
  msgstr ""
1881
 
1882
- #: templates/account/partials/site.php:201
1883
  msgid "Owner Email"
1884
  msgstr ""
1885
 
1886
- #: templates/account/partials/site.php:213
1887
  msgid "Owner ID"
1888
  msgstr ""
1889
 
1890
- #: templates/account/partials/site.php:286
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 "&#x2190;"
380
+ msgstr ""
381
+
382
+ #: includes/class-freemius.php:19336
383
+ msgctxt "ASCII arrow right icon"
384
+ msgid "&#x27a4;"
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.0.18';
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 ( $install->is_disconnected ) {
168
  echo ' button-primary';
169
- } ?>" data-is-disconnected="<?php echo $install->is_disconnected ? 'true' : 'false' ?>"><?php $install->is_disconnected ? fs_esc_html_echo_inline( 'Opt In', 'opt-in', $slug ) : fs_esc_html_echo_inline( 'Opt Out', 'opt-out', $slug ) ?></button>
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 colspan="2"><code><?php echo htmlspecialchars( $install->public_key ) ?></code></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 = $( this ),
33
- $body = $( 'body' ),
34
- cursor = $body.css( 'cursor' );
35
 
36
  if ( $this.hasClass( 'disabled' ) ) {
37
  return;
38
  }
39
 
40
- var beforeUnload = function() {
41
- return '<?php fs_esc_js_echo_inline( 'Please wait', 'please-wait' ) ?>';
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 : $this.parents( '.fs-clone-resolution-options-container' ).data( 'ajax-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
- <div class="fs-visual">
165
- <b class="fs-site-icon"><i class="dashicons dashicons-wordpress"></i></b>
166
- <i class="dashicons dashicons-plus fs-first"></i>
167
- <?php
168
- $vars = array( 'id' => $fs->get_id() );
169
- fs_require_once_template( 'plugin-icon.php', $vars );
170
- ?>
171
- <i class="dashicons dashicons-plus fs-second"></i>
172
- <img class="fs-connect-logo" width="80" height="80" src="//img.freemius.com/logo/connect.svg"/>
173
- </div>
 
 
 
 
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 an activation email for %s to your mailbox at %s. Please make sure you click the activation button in that email to %s.', 'pending-activation-message', $slug ),
191
  $first_name,
192
  '<b>' . $fs->get_plugin_name() . '</b>',
193
  '<b>' . $current_user->user_email . '</b>',
194
- fs_text_inline( 'complete the install', 'complete-the-install', $slug )
195
  ) );
196
  } else if ( $require_license_key ) {
197
- $button_label = $is_network_upgrade_mode ?
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
- $filter = 'connect_message';
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
- $default_optin_message = $is_gdpr_required ?
217
- 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_on-update', $slug ) :
218
- 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_on-update', $slug );
 
 
 
 
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 exist.
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
- esc_html( $default_optin_message ),
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
- $freemius_link
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['newsletter'] = array(
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['extensions'] = array(
428
- 'icon-class' => 'dashicons dashicons-menu',
429
- 'label' => $fs->get_text_inline( 'Plugins & Themes', 'permissions-extensions' ) . ( $require_license_key ? ' (' . $fs->get_text_inline( 'optional' ) . ')' : '' ),
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
- <?php if ( $require_license_key ) : ?>
446
- <p class="fs-license-sync-disclaimer"><?php
447
- echo sprintf(
448
- fs_esc_html_inline( 'The %1$s will periodically send %2$s to %3$s for security & feature updates delivery, and license management.', 'license-sync-disclaimer', $slug ),
449
- $fs->get_module_label( true ),
450
- sprintf('<a class="fs-trigger" href="#" tabindex="1">%s</a>', fs_esc_html_inline('diagnostic data', 'send-data')),
451
- '<a class="fs-tooltip-trigger' . (is_rtl() ? ' rtl' : '') . '" href="' . $freemius_site_url . '" target="_blank" rel="noopener" tabindex="1">freemius.com <i class="dashicons dashicons-editor-help" style="text-decoration: none;"><span class="fs-tooltip" style="width: 170px">' . $fs->get_text_inline( 'Freemius is our licensing and software updates engine', 'permissions-extensions_desc' ) . '</span></i></a>'
452
- ) ?></p>
453
- <?php else : ?>
454
- <a class="fs-trigger" href="#" tabindex="1"><?php fs_esc_html_echo_inline( 'What permissions are being granted?', 'what-permissions', $slug ) ?></a>
455
  <?php endif ?>
456
  <ul><?php
457
- foreach ( $permissions as $id => $permission ) : ?>
458
- <?php $is_permission_on = ( ! isset( $permission['default'] ) || true === $permission['default'] ); ?>
459
- <li id="fs-permission-<?php echo esc_attr( $id ); ?>"
460
- class="fs-permission fs-<?php echo esc_attr( $id ); ?><?php echo ( ! $is_permission_on ) ? ' fs-disabled' : ''; ?>">
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
  &nbsp;&nbsp;-&nbsp;&nbsp;
@@ -556,13 +522,12 @@
556
  // Reset loading mode.
557
  $primaryCta.html(primaryCtaLabel);
558
  $primaryCta.prop('disabled', false);
559
- $(document.body).css({'cursor': 'auto'});
560
- $('.fs-loading').removeClass('fs-loading');
561
 
562
  console.log('resetLoadingMode - Primary button was enabled');
563
  },
564
  setLoadingMode = function () {
565
- $(document.body).css({'cursor': 'wait'});
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 = $('#fs-permission-extensions .fs-switch'),
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
+ &nbsp;&nbsp;-&nbsp;&nbsp;
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
  &nbsp;&nbsp;-&nbsp;&nbsp;
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 $fs = $is_active ? freemius( $data->id ) : null ?>
 
 
 
 
 
 
 
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
- $is_multisite = is_multisite();
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><?php echo $site->id ?></td>
 
 
 
 
 
400
  <?php if ( $is_multisite ) : ?>
401
- <td><?php echo $site->blog_id ?></td>
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
- $freemius_link
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
- $plugin_title = "<strong>{$fs->get_plugin()->title}</strong>";
30
- $opt_out_text = fs_text_x_inline( 'Opt Out', 'verb', 'opt-out', $slug );
31
- $opt_in_text = fs_text_x_inline( 'Opt In', 'verb', 'opt-in', $slug );
32
-
33
- if ( $fs->is_premium() ) {
34
- $opt_in_message_appreciation = fs_text_inline( 'Connectivity to the licensing engine was successfully re-established. Automatic security & feature updates are now available through the WP Admin Dashboard.', 'premium-opt-in-message-appreciation', $slug );
35
-
36
- $opt_out_message_subtitle = sprintf( fs_text_inline( 'Warning: Opting out will block automatic updates', 'premium-opt-out-message-appreciation', $slug ), $fs->get_module_type() );
37
- $opt_out_message_usage_tracking = sprintf( fs_text_inline( 'Ongoing connectivity with the licensing engine is essential for receiving automatic security & feature updates of the paid product. To receive these updates, data like your license key, %1$s version, and WordPress version, is periodically sent to the server to check for updates. By opting out, you understand that your site won\'t receive automatic updates for %2$s from within the WP Admin Dashboard. This can put your site at risk, and we highly recommend to keep this connection active. If you do choose to opt-out, you\'ll need to check for %1$s updates and install them manually.', 'premium-opt-out-message-usage-tracking', $slug ), $fs->get_module_type(), $plugin_title );
38
-
39
- $primary_cta_label = fs_text_inline( 'I\'d like to keep automatic updates', 'premium-opt-out-cancel', $slug );
40
- } else {
41
- $opt_in_message_appreciation = sprintf( fs_text_inline( 'We appreciate your help in making the %s better by letting us track some usage data.', 'opt-in-message-appreciation', $slug ), $fs->get_module_type() );
42
-
43
- $opt_out_message_subtitle = $opt_in_message_appreciation;
44
- $opt_out_message_usage_tracking = sprintf( fs_text_inline( "Usage tracking is done in the name of making %s better. Making a better user experience, prioritizing new features, and more good things. We'd really appreciate if you'll reconsider letting us continue with the tracking.", 'opt-out-message-usage-tracking', $slug ), $plugin_title );
45
- $primary_cta_label = fs_text_inline( 'On second thought - I want to continue helping', 'opt-out-cancel', $slug );
46
- }
47
-
48
- $opt_out_message_clicking_opt_out = sprintf(
49
- fs_text_inline( 'By clicking "Opt Out", we will no longer be sending any data from %s to %s.', 'opt-out-message-clicking-opt-out', $slug ),
50
- $plugin_title,
51
- sprintf(
52
- '<a href="%s" target="_blank" rel="noopener">%s</a>',
53
- 'https://freemius.com',
54
- 'freemius.com'
55
- )
56
- );
57
 
58
- $admin_notice_params = array(
59
- 'id' => '',
60
- 'slug' => $fs->get_id(),
61
- 'type' => 'success',
62
- 'sticky' => false,
63
- 'plugin' => $fs->get_plugin()->title,
64
- 'message' => $opt_in_message_appreciation
65
- );
66
-
67
- $admin_notice_html = fs_get_template( 'admin-notice.php', $admin_notice_params );
68
-
69
- $modal_content_html = "
70
- <h2" . ( $fs->is_premium() ? ' style="color: red"' : '' ) . ">{$opt_out_message_subtitle}</h2>
71
- <div class=\"notice notice-error inline opt-out-error-message\"><p></p></div>
72
- <p>{$opt_out_message_usage_tracking}</p>
73
- <p>{$opt_out_message_clicking_opt_out}</p>
74
- <label class=\"fs-permission-extensions\"><div class=\"fs-switch fs-small fs-round fs-" . ( $fs->is_extensions_tracking_allowed() ? 'on' : 'off' ) . "\"><div class=\"fs-toggle\"></div></div> " . fs_text_inline( 'Plugins & themes tracking' ) . " <span class=\"fs-switch-feedback success\"></span></label>";
75
 
76
  fs_enqueue_local_style( 'fs_dialog_boxes', '/admin/dialog-boxes.css' );
 
77
  fs_enqueue_local_style( 'fs_common', '/admin/common.css' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  <script type="text/javascript">
80
  (function( $ ) {
81
  $( document ).ready(function() {
82
- var modalContentHtml = <?php echo json_encode( $modal_content_html ) ?>,
83
- modalHtml =
84
- '<div class="fs-modal fs-modal-opt-out">'
85
- + ' <div class="fs-modal-dialog">'
86
- + ' <div class="fs-modal-header">'
87
- + ' <h4><?php echo esc_js( $opt_out_text ) ?></h4>'
88
- + ' </div>'
89
- + ' <div class="fs-modal-body">'
90
- + ' <div class="fs-modal-panel active">' + modalContentHtml + '</div>'
91
- + ' </div>'
92
- + ' <div class="fs-modal-footer">'
93
- + ' <button class="button <?php echo $fs->is_premium() ? 'button-primary warn' : 'button-secondary' ?> button-opt-out" tabindex="1"><?php echo esc_js( $opt_out_text ) ?></button>'
94
- + ' <button class="button <?php echo $fs->is_premium() ? 'button-secondary' : 'button-primary' ?> button-close" tabindex="2"><?php echo esc_js( $primary_cta_label ) ?></button>'
95
- + ' </div>'
96
- + ' </div>'
97
- + '</div>',
98
- $modal = $(modalHtml),
99
- $adminNotice = $( <?php echo json_encode( $admin_notice_html ) ?> ),
100
- action = '<?php echo $action ?>',
101
- 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="80" height="80"/>
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
- <h2><?php fs_esc_html_echo_inline( 'Screenshots', 'screenshots', $plugin->slug ) ?></h2>
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
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