Activity Log - Version 2.2.8

Version Description

  • Tweak! Update Freemius SDK
Download this release

Release Info

Developer KingYes
Plugin Icon 128x128 Activity Log
Version 2.2.8
Comparing to
See all releases

Code changes from version 2.2.7 to 2.2.8

aryo-activity-log.php CHANGED
@@ -5,7 +5,7 @@ Plugin URI: http://wordpress.org/plugins/aryo-activity-log/
5
  Description: Get aware of any activities that are taking place on your dashboard! Imagine it like a black-box for your WordPress site. e.g. post was deleted, plugin was activated, user logged in or logged out - it's all these for you to see.
6
  Author: Yakir Sitbon, Maor Chasen, Ariel Klikstein
7
  Author URI: http://pojo.me/
8
- Version: 2.2.7
9
  Text Domain: aryo-activity-log
10
  Domain Path: /language/
11
  License: GPLv2 or later
5
  Description: Get aware of any activities that are taking place on your dashboard! Imagine it like a black-box for your WordPress site. e.g. post was deleted, plugin was activated, user logged in or logged out - it's all these for you to see.
6
  Author: Yakir Sitbon, Maor Chasen, Ariel Klikstein
7
  Author URI: http://pojo.me/
8
+ Version: 2.2.8
9
  Text Domain: aryo-activity-log
10
  Domain Path: /language/
11
  License: GPLv2 or later
classes/freemius/README.md ADDED
@@ -0,0 +1,245 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Freemius WordPress SDK
2
+ ======================
3
+
4
+ Freemius is an [analytics](https://freemius.com/wordpress/insights/) & [monetization](https://freemius.com/wordpress/) platform for plugin developers. Freemius empower developers with advanced real-time analytics and helps turning any plugin into a commercial product in less than 10 min.
5
+
6
+ The platform is fully functional and running in production. Having said that, the monetization platform is still in closed beta.
7
+ If you are a WordPress plugin developer and you are interested to monetize with Freemius [apply to our closed beta here](http://bit.ly/freemius-beta):
8
+
9
+ http://bit.ly/freemius-beta
10
+
11
+ **Below you'll find the integration instructions for our WordPress SDK.**
12
+
13
+ ## Initializing the SDK
14
+
15
+ Copy the code below and paste it into the top of your main plugin's PHP file, right after the plugin's header comment:
16
+
17
+ ```php
18
+ <?php
19
+ // Create a helper function for easy SDK access.
20
+ function my_prefix_fs() {
21
+ global $my_prefix_fs;
22
+ if ( ! isset( $my_prefix_fs ) ) {
23
+ // Include Freemius SDK.
24
+ require_once dirname(__FILE__) . '/freemius/start.php';
25
+
26
+ $my_prefix_fs = fs_dynamic_init( array(
27
+ 'id' => '1234',
28
+ 'slug' => 'my-plugin-slug',
29
+ 'menu_slug' => 'my_menu_slug', // You can also use __FILE__
30
+ 'public_key' => 'pk_MY_PUBLIC_KEY',
31
+ 'is_live' => true,
32
+ 'is_premium' => true,
33
+ 'has_addons' => false,
34
+ 'has_paid_plans' => false,
35
+ // Set the SDK to work in a sandbox mode (for development & testing).
36
+ // IMPORTANT: MAKE SURE TO REMOVE SECRET KEY BEFORE DEPLOYMENT.
37
+ 'secret_key' => 'sk_MY_SECRET_KEY',
38
+ ) );
39
+ }
40
+
41
+ return $my_prefix_fs;
42
+ }
43
+
44
+ // Init Freemius.
45
+ my_prefix_fs();
46
+ ?>
47
+ ```
48
+
49
+ - **1234** - Replace with your plugin's ID.
50
+ - **pk_MY_PUBLIC_KEY** - Replace with your plugin's public key.
51
+ - **sk_MY_SECRET_KEY** - Replace with your plugin's secret key.
52
+ - **my-plugin-slug** - Replace with your plugin's WordPress.org slug.
53
+ - **my_menu_slug** - Replace with your admin dashboard settings menu slug.
54
+
55
+
56
+ ## Usage example
57
+
58
+ You can call the SDK by using the shortcode function:
59
+
60
+ ```php
61
+ <?php my_prefix_fs()->get_upgrade_url(); ?>
62
+ ```
63
+
64
+ Or when calling Freemius multiple times in a scope, it's recommended to use it with the global variable:
65
+
66
+ ```php
67
+ <?php
68
+ global $my_prefix_fs;
69
+ $my_prefix_fs->get_account_url();
70
+ ?>
71
+ ```
72
+
73
+ ## Adding license based logic examples
74
+
75
+ Add marketing content to encourage your users to upgrade for your paid version:
76
+
77
+ ```php
78
+ <?php
79
+ if ( my_prefix_fs()->is_not_paying() ) {
80
+ echo '<section><h1>' . __('Awesome Premium Features', 'my-plugin-slug') . '</h1>';
81
+ echo '<a href="' . my_prefix_fs()->get_upgrade_url() . '">' .
82
+ __('Upgrade Now!', 'my-plugin-slug') .
83
+ '</a>';
84
+ echo '</section>';
85
+ }
86
+ ?>
87
+ ```
88
+
89
+ Add logic which will only be available in your premium plugin version:
90
+
91
+ ```php
92
+ <?php
93
+ // This "if" block will be auto removed from the Free version.
94
+ if ( my_prefix_fs()->is__premium_only() ) {
95
+
96
+ // ... premium only logic ...
97
+
98
+ }
99
+ ?>
100
+ ```
101
+
102
+ To add a function which will only be available in your premium plugin version, simply add __premium_only as the suffix of the function name. Just make sure that all lines that call that method directly or by hooks, are also wrapped in premium only logic:
103
+
104
+ ```php
105
+ <?php
106
+ class My_Plugin {
107
+ function init() {
108
+ ...
109
+
110
+ // This "if" block will be auto removed from the free version.
111
+ if ( my_prefix_fs()->is__premium_only() ) {
112
+ // Init premium version.
113
+ $this->admin_init__premium_only();
114
+
115
+ add_action( 'admin_init', array( &$this, 'admin_init_hook__premium_only' );
116
+ }
117
+
118
+ ...
119
+ }
120
+
121
+ // This method will be only included in the premium version.
122
+ function admin_init__premium_only() {
123
+ ...
124
+ }
125
+
126
+ // This method will be only included in the premium version.
127
+ function admin_init_hook__premium_only() {
128
+ ...
129
+ }
130
+ }
131
+ ?>
132
+ ```
133
+
134
+ Add logic which will only be executed for customers in your 'professional' plan:
135
+
136
+ ```php
137
+ <?php
138
+ if ( my_prefix_fs()->is_plan('professional', true) ) {
139
+ // .. logic related to Professional plan only ...
140
+ }
141
+ ?>
142
+ ```
143
+
144
+ Add logic which will only be executed for customers in your 'professional' plan or higher plans:
145
+
146
+ ```php
147
+ <?php
148
+ if ( my_prefix_fs()->is_plan('professional') ) {
149
+ // ... logic related to Professional plan and higher plans ...
150
+ }
151
+ ?>
152
+ ```
153
+
154
+ Add logic which will only be available in your premium plugin version AND will only be executed for customers in your 'professional' plan (and higher plans):
155
+
156
+ ```php
157
+ <?php
158
+ // This "if" block will be auto removed from the Free version.
159
+ if ( my_prefix_fs()->is_plan__premium_only('professional') ) {
160
+ // ... logic related to Professional plan and higher plans ...
161
+ }
162
+ ?>
163
+ ```
164
+
165
+ Add logic only for users in trial:
166
+
167
+ ```php
168
+ <?php
169
+ if ( my_prefix_fs()->is_trial() ) {
170
+ // ... logic for users in trial ...
171
+ }
172
+ ?>
173
+ ```
174
+
175
+ Add logic for specified paid plan:
176
+
177
+ ```php
178
+ <?php
179
+ // This "if" block will be auto removed from the Free version.
180
+ if ( my_prefix_fs()->is__premium_only() ) {
181
+ if ( my_prefix_fs()->is_plan( 'professional', true ) ) {
182
+
183
+ // ... logic related to Professional plan only ...
184
+
185
+ } else if ( my_prefix_fs()->is_plan( 'business' ) ) {
186
+
187
+ // ... logic related to Business plan and higher plans ...
188
+
189
+ }
190
+ }
191
+ ?>
192
+ ```
193
+
194
+ ## Excluding files and folders from the free plugin version
195
+ There are two ways to exclude files from your free version.
196
+
197
+ 1. Add `__premium_only` just before the file extension. For example, functions__premium_only.php will be only included in the premium plugin version. This works for all type of files, not only PHP.
198
+ 2. Add `@fs_premium_only` a sepcial meta tag to the plugin's main PHP file header. Example:
199
+ ```php
200
+ <?php
201
+ /**
202
+ * Plugin Name: My Very Awesome Plugin
203
+ * Plugin URI: http://my-awesome-plugin.com
204
+ * Description: Create and manage Awesomeness right in WordPress.
205
+ * Version: 1.0.0
206
+ * Author: Awesomattic
207
+ * Author URI: http://my-awesome-plugin.com/me/
208
+ * License: GPLv2
209
+ * Text Domain: myplugin
210
+ * Domain Path: /langs
211
+ *
212
+ * @fs_premium_only /lib/functions.php, /premium-files/
213
+ */
214
+
215
+ if ( ! defined( 'ABSPATH' ) ) {
216
+ exit;
217
+ }
218
+
219
+ // ... my code ...
220
+ ?>
221
+ ```
222
+ The file `/lib/functions.php` and the directory `/premium-files/` will be removed from the free plugin version.
223
+
224
+ # WordPress.org Compliance
225
+ Based on [WordPress.org Guidelines](https://wordpress.org/plugins/about/guidelines/) you are not allowed to submit a plugin that has premium code in it:
226
+ > All code hosted by WordPress.org servers must be free and fully-functional. If you want to sell advanced features for a plugin (such as a "pro" version), then you must sell and serve that code from your own site, we will not host it on our servers.
227
+
228
+ Therefore, if you want to deploy your free plugin's version to WordPress.org, make sure you wrap all your premium code with `if ( my_prefix_fs()->{{ method }}__premium_only() )` or the other methods provided to exclude premium features & files from the free version.
229
+
230
+ ## Deployment
231
+ Zip your plugin's root folder and upload it in the Deployment section in the *Freemius Developer's Dashboard*.
232
+ The plugin will be scanned and processed by a custom developed *PHP Processor* which will auto-generate two versions of your plugin:
233
+
234
+ 1. **Premium version**: Identical to your uploaded version, including all code (except your `secret_key`). Will be enabled for download ONLY for your paying or in trial customers.
235
+ 2. **Free version**: The code stripped from all your paid features (based on the logic added wrapped in `{ method }__premium_only()`).
236
+
237
+ The free version is the one that you should give your users to download. Therefore, download the free generated version and upload to your site. Or, if your plugin was WordPress.org complaint and you made sure to exclude all your premium code with the different provided techniques, you can deploy the downloaded free version to the .org repo.
238
+
239
+ ## Reporting Bugs
240
+ Email dev [at] freemius [dot] com
241
+
242
+ ## FAQ
243
+
244
+ ## Copyright
245
+ Freemius, Inc.
classes/freemius/assets/css/admin/account.css CHANGED
@@ -1 +1 @@
1
- #fs_account .postbox,#fs_account .widefat{max-width:700px}#fs_account .fs-header-actions{position:absolute;top:10px;right:10px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}.rtl #fs_account .fs-header-actions{left:10px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table td label{background:orange;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}.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 var,.fs-key-value-table code{color:#0073AA;font-size:16px;background:none}#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}
1
+ #fs_account .postbox,#fs_account .widefat{max-width:700px}#fs_account h3{font-size:1.3em;padding:12px 12px 12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}.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 td label{background:orange;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}.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 var,.fs-key-value-table code{color:#0073AA;font-size:16px;background:none}#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}
classes/freemius/assets/css/admin/common.css CHANGED
@@ -1 +1 @@
1
- .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-close{position:absolute;top:10px;right:10px;cursor:pointer;color:#ccc}.fs-notice .fs-close:hover{color:#aaa}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;bottom:-22px;top: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}.rtl .fs-notice .fs-close{left:10px;right:auto}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;box-shadow:0px 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}
1
+ .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-close{position:absolute;top:2px;bottom:2px;right:2px;cursor:pointer;color:#aaa;min-width:100px;text-align:center;padding-right:2px}.fs-notice .fs-close:hover{color:#fff;background:#A9A9A9}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;bottom:-22px;top: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}.rtl .fs-notice .fs-close{left:2px;right:auto;padding-right:0;padding-left:2px}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;box-shadow:0px 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}
classes/freemius/assets/img/icon.svg DELETED
@@ -1,78 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="256px"
5
- height="256px" viewBox="0 0 256 256" enable-background="new 0 0 256 256" xml:space="preserve">
6
- <g id="Layer_2">
7
- <rect fill="#C91E60" width="256" height="256"/>
8
- </g>
9
- <g id="Layer_5">
10
- <text transform="matrix(1 0 0 1 64.1411 78.187)"><tspan x="0" y="0" fill="#FFFFFF" font-family="'Helvetica-Light'" font-size="39.6274">Activity</tspan><tspan x="29.72" y="47.553" fill="#FFFFFF" font-family="'Helvetica-Light'" font-size="39.6274">Log</tspan></text>
11
- </g>
12
- <g id="Layer_4">
13
- <g>
14
- <path fill="none" d="M153.006,225.923c-13.807,0-25-11.193-25-25s11.193-25,25-25H256V0H0v256h256v-30.077H153.006z"/>
15
- <path fill="#FFFFFF" d="M128.006,200.923c0,13.807,11.193,25,25,25H256v-50H153.006
16
- C139.199,175.923,128.006,187.116,128.006,200.923z"/>
17
- </g>
18
- </g>
19
- <g id="Layer_6">
20
- <g>
21
- <path fill="#C91E60" d="M166.129,200.071c0,1.251-0.235,2.424-0.707,3.52c-0.472,1.099-1.121,2.059-1.946,2.885
22
- c-0.826,0.825-1.786,1.473-2.883,1.945c-1.098,0.471-2.27,0.707-3.521,0.707c-1.085,0-2.104-0.178-3.06-0.53
23
- c-0.956-0.354-1.821-0.837-2.601-1.45v7.075c0,0.472-0.165,0.871-0.495,1.202c-0.33,0.33-0.73,0.496-1.202,0.496
24
- c-0.473,0-0.873-0.166-1.203-0.496c-0.331-0.331-0.493-0.73-0.493-1.202v-14.151c0-1.251,0.234-2.424,0.705-3.52
25
- c0.472-1.097,1.118-2.058,1.946-2.884c0.826-0.826,1.786-1.474,2.884-1.946c1.096-0.471,2.269-0.706,3.519-0.706
26
- c1.251,0,2.423,0.235,3.521,0.706c1.097,0.473,2.057,1.12,2.883,1.946c0.825,0.826,1.475,1.787,1.946,2.884
27
- C165.894,197.647,166.129,198.82,166.129,200.071 M162.733,200.071c0-0.779-0.148-1.51-0.442-2.192
28
- c-0.297-0.685-0.702-1.286-1.221-1.805c-0.519-0.52-1.12-0.926-1.805-1.22c-0.685-0.296-1.416-0.443-2.193-0.443
29
- c-0.778,0-1.509,0.147-2.193,0.443c-0.685,0.294-1.285,0.7-1.805,1.22c-0.519,0.519-0.926,1.12-1.22,1.805
30
- c-0.295,0.683-0.442,1.413-0.442,2.192c0,0.778,0.147,1.51,0.442,2.193c0.294,0.684,0.701,1.286,1.22,1.805
31
- c0.52,0.519,1.12,0.926,1.805,1.22c0.685,0.298,1.415,0.442,2.193,0.442c0.777,0,1.509-0.145,2.193-0.442
32
- c0.685-0.294,1.286-0.701,1.805-1.22s0.924-1.121,1.221-1.805C162.585,201.581,162.733,200.85,162.733,200.071"/>
33
- <path fill="#C91E60" d="M167.827,200.071c0-1.251,0.236-2.424,0.707-3.52c0.472-1.097,1.121-2.058,1.947-2.884
34
- c0.824-0.826,1.785-1.474,2.882-1.946c1.098-0.471,2.271-0.706,3.521-0.706c1.249,0,2.424,0.235,3.519,0.706
35
- c1.097,0.473,2.058,1.12,2.884,1.946c0.825,0.826,1.474,1.787,1.946,2.884c0.471,1.096,0.707,2.269,0.707,3.52
36
- s-0.236,2.424-0.707,3.52c-0.473,1.099-1.121,2.059-1.946,2.885c-0.826,0.825-1.787,1.473-2.884,1.945
37
- c-1.095,0.471-2.27,0.707-3.519,0.707c-1.251,0-2.424-0.236-3.521-0.707c-1.097-0.473-2.058-1.12-2.882-1.945
38
- c-0.826-0.826-1.476-1.786-1.947-2.885C168.063,202.495,167.827,201.322,167.827,200.071 M171.224,200.071
39
- c0,0.778,0.146,1.51,0.441,2.193c0.297,0.684,0.702,1.286,1.221,1.805s1.121,0.926,1.805,1.22
40
- c0.684,0.298,1.415,0.442,2.194,0.442c0.776,0,1.508-0.145,2.191-0.442c0.686-0.294,1.286-0.701,1.806-1.22
41
- c0.518-0.519,0.925-1.121,1.22-1.805c0.296-0.684,0.443-1.415,0.443-2.193c0-0.779-0.147-1.51-0.443-2.192
42
- c-0.295-0.685-0.702-1.286-1.22-1.805c-0.52-0.52-1.12-0.926-1.806-1.22c-0.684-0.296-1.415-0.443-2.191-0.443
43
- c-0.779,0-1.511,0.147-2.194,0.443c-0.684,0.294-1.286,0.7-1.805,1.22c-0.519,0.519-0.924,1.12-1.221,1.805
44
- C171.37,198.562,171.224,199.292,171.224,200.071"/>
45
- <path fill="#C91E60" d="M185.092,215.921c-0.472,0-0.873-0.166-1.204-0.496c-0.328-0.331-0.494-0.73-0.494-1.202
46
- s0.166-0.873,0.494-1.203c0.331-0.331,0.732-0.495,1.204-0.495c0.944,0,1.746-0.33,2.405-0.99c0.66-0.662,0.991-1.463,0.991-2.406
47
- v-16.415c0-0.471,0.164-0.871,0.496-1.202c0.327-0.33,0.729-0.495,1.201-0.495s0.875,0.165,1.204,0.495
48
- c0.33,0.331,0.494,0.731,0.494,1.202v16.415c0,0.943-0.177,1.827-0.529,2.653c-0.354,0.825-0.838,1.545-1.452,2.157
49
- c-0.613,0.613-1.332,1.099-2.157,1.451C186.919,215.743,186.036,215.921,185.092,215.921 M188.205,187.901
50
- c0-0.542,0.195-1.008,0.583-1.396c0.389-0.39,0.854-0.584,1.397-0.584s1.008,0.194,1.397,0.584
51
- c0.388,0.389,0.584,0.854,0.584,1.396c0,0.543-0.196,1.01-0.584,1.398c-0.39,0.388-0.854,0.583-1.397,0.583
52
- s-1.009-0.195-1.397-0.583C188.4,188.911,188.205,188.444,188.205,187.901"/>
53
- <path fill="#C91E60" d="M194.431,200.071c0-1.251,0.235-2.424,0.707-3.52c0.473-1.097,1.119-2.058,1.947-2.884
54
- c0.824-0.826,1.783-1.474,2.883-1.946c1.097-0.471,2.27-0.706,3.519-0.706c1.25,0,2.425,0.235,3.522,0.706
55
- c1.096,0.473,2.056,1.12,2.883,1.946c0.825,0.826,1.473,1.787,1.944,2.884c0.472,1.096,0.708,2.269,0.708,3.52
56
- s-0.236,2.424-0.708,3.52c-0.472,1.099-1.119,2.059-1.944,2.885c-0.827,0.825-1.787,1.473-2.883,1.945
57
- c-1.098,0.471-2.272,0.707-3.522,0.707c-1.249,0-2.422-0.236-3.519-0.707c-1.1-0.473-2.059-1.12-2.883-1.945
58
- c-0.828-0.826-1.475-1.786-1.947-2.885C194.666,202.495,194.431,201.322,194.431,200.071 M197.827,200.071
59
- c0,0.778,0.146,1.51,0.442,2.193c0.295,0.684,0.701,1.286,1.22,1.805c0.52,0.519,1.12,0.926,1.805,1.22
60
- c0.684,0.298,1.415,0.442,2.192,0.442c0.779,0,1.511-0.145,2.194-0.442c0.684-0.294,1.284-0.701,1.803-1.22
61
- s0.926-1.121,1.224-1.805c0.294-0.684,0.439-1.415,0.439-2.193c0-0.779-0.146-1.51-0.439-2.192
62
- c-0.298-0.685-0.705-1.286-1.224-1.805c-0.519-0.52-1.119-0.926-1.803-1.22c-0.684-0.296-1.415-0.443-2.194-0.443
63
- c-0.777,0-1.509,0.147-2.192,0.443c-0.685,0.294-1.285,0.7-1.805,1.22c-0.519,0.519-0.925,1.12-1.22,1.805
64
- C197.974,198.562,197.827,199.292,197.827,200.071"/>
65
- <path fill="#353E44" d="M213.941,207.714c0.389,0,0.706,0.317,0.706,0.707s-0.317,0.707-0.706,0.707
66
- c-0.39,0-0.709-0.317-0.709-0.707S213.552,207.714,213.941,207.714"/>
67
- <path fill="#353E44" d="M223.845,208.562c0,0.318-0.246,0.565-0.564,0.565c-0.319,0-0.568-0.247-0.568-0.565v-4.528
68
- c0-1.556-1.272-2.83-2.828-2.83c-1.559,0-2.83,1.274-2.83,2.83v4.528c0,0.318-0.247,0.565-0.565,0.565
69
- c-0.319,0-0.566-0.247-0.566-0.565v-4.528c0-2.192,1.77-3.962,3.962-3.962c1.433,0,2.705,0.778,3.396,1.929
70
- c0.688-1.15,1.944-1.929,3.396-1.929c2.192,0,3.963,1.77,3.963,3.962v4.528c0,0.318-0.25,0.565-0.567,0.565
71
- c-0.318,0-0.565-0.247-0.565-0.565v-4.528c0-1.556-1.274-2.83-2.83-2.83c-1.558,0-2.831,1.274-2.831,2.83V208.562z"/>
72
- <path fill="#353E44" d="M236.441,209.128c-2.494,0-4.528-2.034-4.528-4.527s2.034-4.528,4.528-4.528
73
- c2.492,0,4.525,2.035,4.525,4.528c0,0.318-0.248,0.565-0.563,0.565h-7.325c0.285,1.609,1.682,2.83,3.363,2.83h1.131
74
- c0.317,0,0.567,0.248,0.567,0.566s-0.25,0.565-0.567,0.565H236.441z M233.078,204.034h6.705c-0.266-1.592-1.663-2.83-3.342-2.83
75
- C234.76,201.204,233.363,202.442,233.078,204.034"/>
76
- </g>
77
- </g>
78
- </svg>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/freemius/assets/scss/admin/account.scss CHANGED
@@ -6,11 +6,27 @@
6
  max-width: 700px;
7
  }
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  .fs-header-actions
10
  {
11
  position: absolute;
12
- top: 10px;
13
- right: 10px;
14
  font-size: 0.9em;
15
 
16
  ul
@@ -36,7 +52,7 @@
36
 
37
  .rtl #fs_account .fs-header-actions
38
  {
39
- left: 10px;
40
  right: auto;
41
  }
42
 
6
  max-width: 700px;
7
  }
8
 
9
+ h3
10
+ {
11
+ font-size: 1.3em;
12
+ padding: 12px 12px 12px 15px;
13
+ margin: 0 0 12px 0;
14
+ line-height: 1.4;
15
+ border-bottom: 1px solid #F1F1F1;
16
+ }
17
+
18
+ i.dashicons
19
+ {
20
+ font-size: 1.2em;
21
+ height: 1.2em;
22
+ width: 1.2em;
23
+ }
24
+
25
  .fs-header-actions
26
  {
27
  position: absolute;
28
+ top: 17px;
29
+ right: 15px;
30
  font-size: 0.9em;
31
 
32
  ul
52
 
53
  .rtl #fs_account .fs-header-actions
54
  {
55
+ left: 15px;
56
  right: auto;
57
  }
58
 
classes/freemius/assets/scss/admin/common.scss CHANGED
@@ -24,14 +24,25 @@
24
  .fs-close
25
  {
26
  position: absolute;
27
- top: 10px;
28
- right: 10px;
 
29
  cursor: pointer;
30
- color: #ccc;
 
 
 
31
 
32
  &:hover
33
  {
34
- color: #aaa;
 
 
 
 
 
 
 
35
  }
36
  }
37
 
@@ -54,8 +65,10 @@
54
 
55
  .rtl .fs-notice .fs-close
56
  {
57
- left: 10px;
58
  right: auto;
 
 
59
  }
60
 
61
  .fs-secure-notice
24
  .fs-close
25
  {
26
  position: absolute;
27
+ top: 2px;
28
+ bottom: 2px;
29
+ right: 2px;
30
  cursor: pointer;
31
+ color: #aaa;
32
+ min-width: 100px;
33
+ text-align: center;
34
+ padding-right: 2px;
35
 
36
  &:hover
37
  {
38
+ color: #fff;
39
+ background: #A9A9A9;
40
+ }
41
+
42
+ > *
43
+ {
44
+ margin-top: 7px;
45
+ display: inline-block;
46
  }
47
  }
48
 
65
 
66
  .rtl .fs-notice .fs-close
67
  {
68
+ left: 2px;
69
  right: auto;
70
+ padding-right: 0;
71
+ padding-left: 2px;
72
  }
73
 
74
  .fs-secure-notice
classes/freemius/composer.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "freemius/wordpress-sdk",
3
+ "description": "Freemius WordPress SDK",
4
+ "keywords": ["freemius", "wordpress", "plugin", "sdk"],
5
+ "homepage": "https://freemius.com",
6
+ "license": "GPL-2.0+",
7
+ "require": {
8
+ "php": ">=5.2"
9
+ }
10
+ }
classes/freemius/includes/class-freemius-abstract.php CHANGED
@@ -344,7 +344,19 @@
344
  *
345
  * @return bool
346
  */
347
- abstract function is_plugin_update();
 
 
 
 
 
 
 
 
 
 
 
 
348
 
349
  #region Marketing ------------------------------------------------------------------
350
 
344
  *
345
  * @return bool
346
  */
347
+ function is_plugin_update() {
348
+ return ! $this->is_plugin_new_install();
349
+ }
350
+
351
+ /**
352
+ * Check if Freemius was part of the plugin when the user installed it first.
353
+ *
354
+ * @author Vova Feldman (@svovaf)
355
+ * @since 1.1.5
356
+ *
357
+ * @return bool
358
+ */
359
+ abstract function is_plugin_new_install();
360
 
361
  #region Marketing ------------------------------------------------------------------
362
 
classes/freemius/includes/class-freemius.php CHANGED
@@ -16,7 +16,7 @@
16
  *
17
  * @var string
18
  */
19
- public $version = '1.1.5';
20
 
21
  #region Plugin Info
22
 
@@ -114,6 +114,12 @@
114
  */
115
  private $_has_addons;
116
 
 
 
 
 
 
 
117
  /**
118
  * @var FS_Key_Value_Storage
119
  */
@@ -311,9 +317,9 @@
311
  * @param string $sdk_prev_version
312
  * @param string $sdk_version
313
  */
314
- function _data_migration($sdk_prev_version, $sdk_version) {
315
- if ( version_compare($sdk_prev_version, '1.1.5', '<' ) &&
316
- version_compare($sdk_version, '1.1.5', '>=')
317
  ) {
318
  // On version 1.1.5 merged connectivity and is_on data.
319
  if ( isset( $this->_storage->connectivity_test ) ) {
@@ -364,7 +370,7 @@
364
 
365
  $this->add_action( 'after_plans_sync', array( &$this, '_check_for_trial_plans' ) );
366
 
367
- $this->add_action('sdk_version_update', array(&$this, '_data_migration'), WP_FS__DEFAULT_PRIORITY, 2);
368
  }
369
 
370
  /**
@@ -466,14 +472,14 @@
466
  function _get_uninstall_reasons( $user_type = 'long-term' ) {
467
  $reason_found_better_plugin = array(
468
  'id' => 2,
469
- 'text' => __fs( 'reason-found-a-better-plugin' ),
470
  'input_type' => 'textfield',
471
- 'input_placeholder' => __fs( 'placeholder-plugin-name' )
472
  );
473
 
474
  $reason_other = array(
475
  'id' => 7,
476
- 'text' => __fs( 'reason-other' ),
477
  'input_type' => 'textfield',
478
  'input_placeholder' => ''
479
  );
@@ -481,26 +487,26 @@
481
  $long_term_user_reasons = array(
482
  array(
483
  'id' => 1,
484
- 'text' => __fs( 'reason-no-longer-needed' ),
485
  'input_type' => '',
486
  'input_placeholder' => ''
487
  ),
488
  $reason_found_better_plugin,
489
  array(
490
  'id' => 3,
491
- 'text' => __fs( 'reason-needed-for-a-short-period' ),
492
  'input_type' => '',
493
  'input_placeholder' => ''
494
  ),
495
  array(
496
  'id' => 4,
497
- 'text' => __fs( 'reason-broke-my-site' ),
498
  'input_type' => '',
499
  'input_placeholder' => ''
500
  ),
501
  array(
502
  'id' => 5,
503
- 'text' => __fs( 'reason-suddenly-stopped-working' ),
504
  'input_type' => '',
505
  'input_placeholder' => ''
506
  )
@@ -509,9 +515,9 @@
509
  if ( $this->is_paying() ) {
510
  $long_term_user_reasons[] = array(
511
  'id' => 6,
512
- 'text' => __fs( 'reason-cant-pay-anymore' ),
513
  'input_type' => 'textfield',
514
- 'input_placeholder' => __fs( 'placeholder-comfortable-price' )
515
  );
516
  }
517
 
@@ -522,13 +528,13 @@
522
  'non-registered-and-non-anonymous-short-term' => array(
523
  array(
524
  'id' => 8,
525
- 'text' => __fs( 'reason-didnt-work' ),
526
  'input_type' => '',
527
  'input_placeholder' => ''
528
  ),
529
  array(
530
  'id' => 9,
531
- 'text' => __fs( 'reason-dont-like-to-share-my-information' ),
532
  'input_type' => '',
533
  'input_placeholder' => ''
534
  ),
@@ -538,34 +544,34 @@
538
  'short-term' => array(
539
  array(
540
  'id' => 10,
541
- 'text' => __fs( 'reason-couldnt-make-it-work' ),
542
  'input_type' => '',
543
  'input_placeholder' => ''
544
  ),
545
  $reason_found_better_plugin,
546
  array(
547
  'id' => 11,
548
- 'text' => __fs( 'reason-great-but-need-specific-feature' ),
549
  'input_type' => 'textarea',
550
- 'input_placeholder' => __fs( 'placeholder-feature' )
551
  ),
552
  array(
553
  'id' => 12,
554
- 'text' => __fs( 'reason-not-working' ),
555
  'input_type' => 'textarea',
556
- 'input_placeholder' => __fs( 'placeholder-share-what-didnt-work' )
557
  ),
558
  array(
559
  'id' => 13,
560
- 'text' => __fs( 'reason-not-what-i-was-looking-for' ),
561
  'input_type' => 'textarea',
562
- 'input_placeholder' => __fs( 'placeholder-what-youve-been-looking-for' )
563
  ),
564
  array(
565
  'id' => 14,
566
- 'text' => __fs( 'reason-didnt-work-as-expected' ),
567
  'input_type' => 'textarea',
568
- 'input_placeholder' => __fs( 'placeholder-what-did-you-expect' )
569
  ),
570
  $reason_other
571
  )
@@ -608,11 +614,10 @@
608
  * @since 1.0.6
609
  *
610
  * @return string
 
 
611
  */
612
  private function _find_caller_plugin_file() {
613
- $bt = debug_backtrace();
614
- $backtrace_entries_count = count( $bt );
615
-
616
  // Try to load the cached value of the file path.
617
  if ( isset( $this->_storage->plugin_main_file ) ) {
618
  if ( file_exists( $this->_storage->plugin_main_file->path ) ) {
@@ -620,33 +625,7 @@
620
  }
621
  }
622
 
623
- /**
624
- * All the code below will be executed once on activation.
625
- * If the user changes the main plugin's file name, the file_exists()
626
- * will catch it.
627
- */
628
- self::require_plugin_essentials();
629
-
630
- $all_plugins = get_plugins();
631
- $all_plugins_paths = array();
632
-
633
- // Get active plugin's main files real full names (might be symlinks).
634
- foreach ( $all_plugins as $relative_path => &$data ) {
635
- $all_plugins_paths[] = fs_normalize_path( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) );
636
- }
637
-
638
- $plugin_file = null;
639
- for ( $i = 1; $i < $backtrace_entries_count; $i ++ ) {
640
- if ( in_array( fs_normalize_path( $bt[ $i ]['file'] ), $all_plugins_paths ) ) {
641
- $plugin_file = $bt[ $i ]['file'];
642
- break;
643
- }
644
- }
645
-
646
- if ( is_null( $plugin_file ) ) {
647
- // Throw an error to the developer in case of some edge case dev environment.
648
- wp_die( __fs( 'failed-finding-main-path' ), __fs( 'error' ), array( 'back_link' => true ) );
649
- }
650
 
651
  $this->_storage->plugin_main_file = (object) array(
652
  'path' => fs_normalize_path( $plugin_file ),
@@ -821,9 +800,7 @@
821
  // Configure which Freemius powered plugins should be auto updated.
822
  // add_filter( 'auto_update_plugin', '_include_plugins_in_auto_update', 10, 2 );
823
 
824
- if ( WP_FS__DEV_MODE ) {
825
- add_action( 'admin_menu', array( 'Freemius', 'add_debug_page' ) );
826
- }
827
 
828
  self::$_statics_loaded = true;
829
  }
@@ -837,13 +814,28 @@
837
  static function add_debug_page() {
838
  self::$_static_logger->entrance();
839
 
840
- $hook = add_object_page(
841
- __fs( 'freemius-debug' ),
842
- __fs( 'freemius-debug' ),
843
- 'manage_options',
844
- 'freemius',
845
- array( 'Freemius', '_debug_page_render' )
846
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
847
 
848
  add_action( "load-$hook", array( 'Freemius', '_debug_page_actions' ) );
849
  }
@@ -853,6 +845,8 @@
853
  * @since 1.0.8
854
  */
855
  static function _debug_page_actions() {
 
 
856
  if ( fs_request_is_action( 'delete_all_accounts' ) ) {
857
  check_admin_referer( 'delete_all_accounts' );
858
 
@@ -893,12 +887,15 @@
893
  /**
894
  * Check if Freemius should be turned on for the current plugin install.
895
  *
 
 
 
896
  * @author Vova Feldman (@svovaf)
897
  * @since 1.0.9
898
  *
899
  * @return bool
900
  */
901
- private function is_on() {
902
  self::$_static_logger->entrance();
903
 
904
  if ( isset( $this->_is_on ) ) {
@@ -908,9 +905,10 @@
908
  // If already installed or pending then sure it's on :)
909
  if ( $this->is_registered() || $this->is_pending_activation() ) {
910
  $this->_is_on = true;
911
-
912
- return $this->_is_on;
913
  }
 
 
914
  }
915
 
916
  /**
@@ -923,8 +921,8 @@
923
  *
924
  * @return bool
925
  */
926
- private function has_api_connectivity($flush = false) {
927
- if (!$flush && isset( $this->_has_api_connection ) ) {
928
  return $this->_has_api_connection;
929
  }
930
 
@@ -937,17 +935,17 @@
937
  unset( $this->_storage->connectivity_test );
938
  }
939
 
940
- if (isset( $this->_storage->connectivity_test ) ) {
941
  if ( $_SERVER['HTTP_HOST'] == $this->_storage->connectivity_test['host'] &&
942
  fs_get_ip() == $this->_storage->connectivity_test['server_ip']
943
  ) {
944
  if ( ( $this->_storage->connectivity_test['is_connected'] &&
945
  $this->_storage->connectivity_test['is_active'] ) ||
946
- (!$flush &&
947
- $version == $this->_storage->connectivity_test['version'])
948
  ) {
949
  $this->_has_api_connection = $this->_storage->connectivity_test['is_connected'];
950
- $this->_is_on = $this->_storage->connectivity_test['is_active'];
951
 
952
  return $this->_has_api_connection;
953
  }
@@ -990,7 +988,7 @@
990
  );
991
 
992
  $this->_has_api_connection = $is_connected;
993
- $this->_is_on = $is_active;
994
 
995
  return $this->_has_api_connection;
996
  }
@@ -1049,133 +1047,133 @@
1049
  switch ( $api_result->error->code ) {
1050
  case 'curl_missing':
1051
  $message = sprintf(
1052
- __fs( 'x-requires-access-to-api', 'freemius' ) . ' ' .
1053
- __fs( 'curl-missing-message' ) . ' ' .
1054
  ' %s',
1055
  '<b>' . $this->get_plugin_name() . '</b>',
1056
  sprintf(
1057
  '<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
1058
  sprintf(
1059
  '<a class="fs-resolve" data-type="curl" href="#"><b>%s</b></a>%s',
1060
- __fs( 'curl-missing-no-clue-title' ),
1061
  ' - ' . sprintf(
1062
- __fs( 'curl-missing-no-clue-desc' ),
1063
  '<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
1064
  )
1065
  ),
1066
  sprintf(
1067
  '<b>%s</b> - %s',
1068
- __fs( 'sysadmin-title' ),
1069
- __fs( 'curl-missing-sysadmin-desc' )
1070
  ),
1071
  sprintf(
1072
  '<a href="%s"><b>%s</b></a>%s',
1073
  wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
1074
- __fs( 'deactivate-plugin-title' ),
1075
- ' - ' . __fs( 'deactivate-plugin-desc', 'freemius' )
1076
  )
1077
  )
1078
  );
1079
  break;
1080
  case 'cloudflare_ddos_protection':
1081
  $message = sprintf(
1082
- __fs( 'x-requires-access-to-api', 'freemius' ) . ' ' .
1083
- __fs( 'cloudflare-blocks-connection-message' ) . ' ' .
1084
- __fs( 'happy-to-resolve-issue-asap' ) .
1085
  ' %s',
1086
  '<b>' . $this->get_plugin_name() . '</b>',
1087
  sprintf(
1088
  '<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
1089
  sprintf(
1090
  '<a class="fs-resolve" data-type="cloudflare" href="#"><b>%s</b></a>%s',
1091
- __fs( 'fix-issue-title' ),
1092
  ' - ' . sprintf(
1093
- __fs( 'fix-issue-desc' ),
1094
  '<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
1095
  )
1096
  ),
1097
  sprintf(
1098
  '<a href="%s" target="_blank"><b>%s</b></a>%s',
1099
  sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
1100
- __fs( 'install-previous-title' ),
1101
- ' - ' . __fs( 'install-previous-desc' )
1102
  ),
1103
  sprintf(
1104
  '<a href="%s"><b>%s</b></a>%s',
1105
  wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
1106
- __fs( 'deactivate-plugin-title' ),
1107
- ' - ' . __fs( 'deactivate-plugin-desc', 'freemius' )
1108
  )
1109
  )
1110
  );
1111
  break;
1112
  case 'squid_cache_block':
1113
  $message = sprintf(
1114
- __fs( 'x-requires-access-to-api', 'freemius' ) . ' ' .
1115
- __fs( 'squid-blocks-connection-message' ) .
1116
  ' %s',
1117
  '<b>' . $this->get_plugin_name() . '</b>',
1118
  sprintf(
1119
  '<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
1120
  sprintf(
1121
  '<a class="fs-resolve" data-type="squid" href="#"><b>%s</b></a>%s',
1122
- __fs( 'squid-no-clue-title' ),
1123
  ' - ' . sprintf(
1124
- __fs( 'squid-no-clue-desc' ),
1125
  '<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
1126
  )
1127
  ),
1128
  sprintf(
1129
  '<b>%s</b> - %s',
1130
- __fs( 'sysadmin-title' ),
1131
  sprintf(
1132
- __fs( 'squid-sysadmin-desc' ),
1133
  // We use a filter since the plugin might require additional API connectivity.
1134
  '<b>' . implode( ', ', $this->apply_filters( 'api_domains', array( 'api.freemius.com' ) ) ) . '</b>' )
1135
  ),
1136
  sprintf(
1137
  '<a href="%s"><b>%s</b></a>%s',
1138
  wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
1139
- __fs( 'deactivate-plugin-title' ),
1140
- ' - ' . __fs( 'deactivate-plugin-desc', 'freemius' )
1141
  )
1142
  )
1143
  );
1144
  break;
1145
  default:
1146
- $message = __fs( 'connectivity-test-fails-message' );
1147
  break;
1148
  }
1149
  }
1150
 
1151
  if ( false === $message ) {
1152
  $message = sprintf(
1153
- __fs( 'x-requires-access-to-api', 'freemius' ) . ' ' .
1154
- __fs( 'connectivity-test-fails-message' ) . ' ' .
1155
- __fs( 'happy-to-resolve-issue-asap' ) .
1156
  ' %s',
1157
  '<b>' . $this->get_plugin_name() . '</b>',
1158
  sprintf(
1159
  '<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
1160
  sprintf(
1161
  '<a class="fs-resolve" data-type="general" href="#"><b>%s</b></a>%s',
1162
- __fs( 'fix-issue-title' ),
1163
  ' - ' . sprintf(
1164
- __fs( 'fix-issue-desc' ),
1165
  '<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
1166
  )
1167
  ),
1168
  sprintf(
1169
  '<a href="%s" target="_blank"><b>%s</b></a>%s',
1170
  sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
1171
- __fs( 'install-previous-title' ),
1172
- ' - ' . __fs( 'install-previous-desc' )
1173
  ),
1174
  sprintf(
1175
  '<a href="%s"><b>%s</b></a>%s',
1176
  wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
1177
- __fs( 'deactivate-plugin-title' ),
1178
- ' - ' . __fs( 'deactivate-plugin-desc', 'freemius' )
1179
  )
1180
  )
1181
  );
@@ -1184,7 +1182,7 @@
1184
  $this->_admin_notices->add_sticky(
1185
  $message,
1186
  'failed_connect_api',
1187
- __fs( 'oops' ) . '...',
1188
  'error'
1189
  );
1190
  }
@@ -1272,7 +1270,7 @@
1272
 
1273
  $this->_admin_notices->add_sticky(
1274
  sprintf(
1275
- __fs( 'fix-request-sent-message' ),
1276
  '<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
1277
  ),
1278
  'server_details_sent'
@@ -1467,6 +1465,13 @@
1467
  ) );
1468
  }
1469
 
 
 
 
 
 
 
 
1470
  private function _get_option( &$options, $key, $default = false ) {
1471
  return ! empty( $options[ $key ] ) ? $options[ $key ] : $default;
1472
  }
@@ -1552,6 +1557,7 @@
1552
  $this->_has_paid_plans = $this->_get_bool_option( $plugin_info, 'has_paid_plans', true );
1553
  $this->_is_org_compliant = $this->_get_bool_option( $plugin_info, 'is_org_compliant', true );
1554
  $this->_enable_anonymous = $this->_get_bool_option( $plugin_info, 'enable_anonymous', true );
 
1555
 
1556
  if ( ! $this->is_registered() ) {
1557
  if ( ! $this->has_api_connectivity() ) {
@@ -1609,10 +1615,10 @@
1609
  if ( ! $this->is_parent_plugin_installed() ) {
1610
  $this->_admin_notices->add(
1611
  ( is_string( $parent_name ) ?
1612
- sprintf( __fs( 'addon-cannot-run-without-x' ), $this->get_plugin_name(), $parent_name ) :
1613
- sprintf( __fs( 'addon-x-cannot-run-without-parent' ), $this->get_plugin_name() )
1614
  ),
1615
- __fs( 'oops' ) . '...',
1616
  'error'
1617
  );
1618
 
@@ -1645,7 +1651,10 @@
1645
  add_action( 'install_plugins_pre_plugin-information', 'fs_install_plugin_information' );
1646
 
1647
  // Override request for plugin information for Add-ons.
1648
- add_filter( 'fs_plugins_api', array( &$this, '_get_addon_info_filter' ), WP_FS__DEFAULT_PRIORITY, 3 );
 
 
 
1649
  } else {
1650
  if ( $this->is_paying() || $this->_has_addons() ) {
1651
  new FS_Plugin_Updater( $this );
@@ -1720,9 +1729,9 @@
1720
  ) );
1721
 
1722
  $this->_admin_notices->add_sticky(
1723
- __fs( 'premium-activated-message' ),
1724
  'premium_activated',
1725
- __fs( 'woot' ) . '!'
1726
  );
1727
  } else {
1728
  // Activated free code (after had the premium before).
@@ -1731,14 +1740,14 @@
1731
  if ( $this->is_paying() && ! $this->is_premium() ) {
1732
  $this->_admin_notices->add_sticky(
1733
  sprintf(
1734
- __fs( 'you-have-x-license' ),
1735
  $this->_site->plan->title
1736
  ) . ' ' . $this->_get_latest_download_link( sprintf(
1737
- __fs( 'download-x-version-now' ),
1738
  $this->_site->plan->title
1739
  ) ),
1740
  'plan_upgraded',
1741
- __fs( 'yee-haw' ) . '!'
1742
  );
1743
  }
1744
  }
@@ -1818,7 +1827,10 @@
1818
  }
1819
 
1820
  if ( ! empty( $selected_addon->info->screenshots ) ) {
1821
- $view_vars = array( 'screenshots' => $selected_addon->info->screenshots );
 
 
 
1822
  $data->sections['screenshots'] = fs_get_template( '/plugin-info/screenshots.php', $view_vars );
1823
  }
1824
 
@@ -1876,7 +1888,10 @@
1876
  $data->plans = $plans;
1877
 
1878
  if ( $has_features ) {
1879
- $view_vars = array( 'plans' => $plans );
 
 
 
1880
  $data->sections['features'] = fs_get_template( '/plugin-info/features.php', $view_vars );
1881
  }
1882
  }
@@ -2169,7 +2184,7 @@
2169
 
2170
  $this->_admin_notices->add_sticky(
2171
  sprintf(
2172
- __fs( 'pending-activation-message' ),
2173
  '<b>' . $this->get_plugin_name() . '</b>',
2174
  '<b>' . $email . '</b>'
2175
  ),
@@ -2223,10 +2238,10 @@
2223
  // Show notice for new plugin installations.
2224
  $this->_admin_notices->add(
2225
  sprintf(
2226
- __fs( 'you-are-step-away' ),
2227
  sprintf( '<b><a href="%s">%s</a></b>',
2228
  $this->get_activation_url(),
2229
- sprintf( __fs( 'activate-x-now' ), $this->get_plugin_name() )
2230
  )
2231
  ),
2232
  '',
@@ -2239,10 +2254,10 @@
2239
  // Show notice for new plugin installations.
2240
  $this->_admin_notices->add_sticky(
2241
  sprintf(
2242
- __fs( 'few-plugin-tweaks' ),
2243
  sprintf( '<b><a href="%s">%s</a></b>',
2244
  $this->get_activation_url(),
2245
- sprintf( __fs( 'optin-x-now' ), $this->get_plugin_name() )
2246
  )
2247
  ),
2248
  'connect_account',
@@ -2374,25 +2389,16 @@
2374
  }
2375
 
2376
  /**
2377
- * @author Vova Feldman (@svovaf)
2378
- * @since 1.1.5
2379
  *
2380
- * @return bool
2381
- */
2382
- private function is_plugin_new_install()
2383
- {
2384
- return isset($this->_storage->is_plugin_new_install) &&
2385
- $this->_storage->is_plugin_new_install;
2386
- }
2387
-
2388
- /**
2389
  * @author Vova Feldman (@svovaf)
2390
  * @since 1.1.5
2391
  *
2392
  * @return bool
2393
  */
2394
- function is_plugin_update() {
2395
- return ! $this->is_plugin_new_install();
 
2396
  }
2397
 
2398
  /**
@@ -2425,8 +2431,8 @@
2425
  deactivate_plugins( $this->_free_plugin_basename );
2426
 
2427
  $this->_admin_notices->add(
2428
- sprintf( __fs( 'successful-version-upgrade-message' ), sprintf( '<b>%s</b>', $this->_plugin->title ) ),
2429
- __fs( 'woot' ) . '!'
2430
  );
2431
  }
2432
  } else if ( $this->is_anonymous() ) {
@@ -2460,7 +2466,7 @@
2460
  $this->_storage->is_plugin_new_install = empty( $this->_storage->plugin_last_version );
2461
  }
2462
 
2463
- if ( $this->has_api_connectivity(true) ) {
2464
  // Store hint that the plugin was just activated to enable auto-redirection to settings.
2465
  add_option( "fs_{$this->_slug}_activated", true );
2466
  }
@@ -2525,13 +2531,16 @@
2525
  }
2526
 
2527
  $this->_admin_notices->clear_all_sticky();
 
 
 
2528
 
2529
  if ( ! $this->has_api_connectivity() ) {
2530
  // Reset connectivity test cache.
2531
  unset( $this->_storage->connectivity_test );
2532
  }
2533
 
2534
- if (!isset($this->_storage->is_plugin_new_install)) {
2535
  // Remember that plugin was already installed.
2536
  $this->_storage->is_plugin_new_install = false;
2537
  }
@@ -2545,6 +2554,25 @@
2545
 
2546
  // Clear API cache on deactivation.
2547
  FS_Api::clear_cache();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2548
  }
2549
 
2550
  /**
@@ -4127,7 +4155,7 @@
4127
  return;
4128
  }
4129
 
4130
- $this->_clean_admin_content_section();
4131
 
4132
  if ( fs_request_is_action( 'activate' ) && fs_request_is_post() ) {
4133
  // check_admin_referer( 'activate_' . $this->_plugin->public_key );
@@ -4331,7 +4359,7 @@
4331
 
4332
  if ( ! $this->is_paying() ) {
4333
  $this->_admin_notices->add_sticky(
4334
- sprintf( __fs( 'plugin-x-activation-message' ), '<b>' . $this->get_plugin_name() . '</b>' ),
4335
  'activation_complete'
4336
  );
4337
  }
@@ -4340,14 +4368,14 @@
4340
  if ( $this->is_paying() && ! $this->is_premium() ) {
4341
  $this->_admin_notices->add_sticky(
4342
  sprintf(
4343
- __fs( 'activation-with-plan-x-message' ),
4344
  $this->_site->plan->title
4345
  ) . ' ' . $this->_get_latest_download_link( sprintf(
4346
- __fs( 'download-latest-x-version' ),
4347
  $this->_site->plan->title
4348
  ) ),
4349
  'plan_upgraded',
4350
- __fs( 'yee-haw' ) . '!'
4351
  );
4352
  }
4353
 
@@ -4388,6 +4416,8 @@
4388
  * @since 1.0.7
4389
  */
4390
  function _install_with_new_user() {
 
 
4391
  if ( $this->is_registered() ) {
4392
  return;
4393
  }
@@ -4440,6 +4470,8 @@
4440
  * @since 1.0.7
4441
  */
4442
  function _install_with_current_user() {
 
 
4443
  if ( $this->is_registered() ) {
4444
  return;
4445
  }
@@ -4469,9 +4501,9 @@
4469
 
4470
  if ( isset( $install->error ) ) {
4471
  $this->_admin_notices->add(
4472
- sprintf( __fs( 'could-not-activate-x' ), $this->get_plugin_name() ) . ' ' .
4473
- __fs( 'contact-us-with-error-message' ) . ' ' . '<b>' . $install->error->message . '</b>',
4474
- __fs( 'oops' ) . '...',
4475
  'error'
4476
  );
4477
 
@@ -4514,9 +4546,9 @@
4514
 
4515
  if ( isset( $addon_install->error ) ) {
4516
  $this->_admin_notices->add(
4517
- sprintf( __fs( 'could-not-activate-x' ), $this->get_plugin_name() ) . ' ' .
4518
- __fs( 'contact-us-with-error-message' ) . ' ' . '<b>' . $addon_install->error->message . '</b>',
4519
- __fs( 'oops' ) . '...',
4520
  'error'
4521
  );
4522
 
@@ -4694,7 +4726,7 @@
4694
 
4695
  if ( $this->_menu->is_activation_page() ) {
4696
  // Clean admin page from distracting content.
4697
- $this->_clean_admin_content_section();
4698
  }
4699
 
4700
  if ( false !== $hook ) {
@@ -4734,9 +4766,9 @@
4734
  if ( $this->is_registered() ) {
4735
  // Add user account page.
4736
  $this->add_submenu_item(
4737
- __fs( 'account' ),
4738
  array( &$this, '_account_page_render' ),
4739
- $this->get_plugin_name() . ' &ndash; ' . __fs( 'account' ),
4740
  'manage_options',
4741
  'account',
4742
  array( &$this, '_account_page_load' ),
@@ -4747,21 +4779,21 @@
4747
 
4748
  // Add contact page.
4749
  $this->add_submenu_item(
4750
- __fs( 'contact-us' ),
4751
  array( &$this, '_contact_page_render' ),
4752
- $this->get_plugin_name() . ' &ndash; ' . __fs( 'contact-us' ),
4753
  'manage_options',
4754
  'contact',
4755
- array( &$this, '_clean_admin_content_section' ),
4756
  WP_FS__DEFAULT_PRIORITY,
4757
  $this->_menu->is_submenu_item_visible( 'contact' )
4758
  );
4759
 
4760
  if ( $this->_has_addons() ) {
4761
  $this->add_submenu_item(
4762
- __fs( 'add-ons' ),
4763
  array( &$this, '_addons_page_render' ),
4764
- $this->get_plugin_name() . ' &ndash; ' . __fs( 'add-ons' ),
4765
  'manage_options',
4766
  'addons',
4767
  array( &$this, '_addons_page_load' ),
@@ -4770,19 +4802,19 @@
4770
  );
4771
  }
4772
 
4773
- $show_pricing = ($this->has_paid_plan() && $this->_menu->is_submenu_item_visible( 'pricing' ));
4774
  // If user don't have paid plans, add pricing page
4775
  // to support add-ons checkout but don't add the submenu item.
4776
  // || (isset( $_GET['page'] ) && $this->_menu->get_slug( 'pricing' ) == $_GET['page']);
4777
 
4778
  // Add upgrade/pricing page.
4779
  $this->add_submenu_item(
4780
- ( $this->is_paying() ? __fs( 'pricing' ) : __fs( 'upgrade' ) . '&nbsp;&nbsp;&#x27a4;' ),
4781
  array( &$this, '_pricing_page_render' ),
4782
- $this->get_plugin_name() . ' &ndash; ' . __fs( 'pricing' ),
4783
  'manage_options',
4784
  'pricing',
4785
- array( &$this, '_clean_admin_content_section' ),
4786
  WP_FS__LOWEST_PRIORITY,
4787
  $show_pricing
4788
  );
@@ -4901,7 +4933,7 @@
4901
  if ( $this->is_registered() ) {
4902
  if ( $this->_menu->is_submenu_item_visible( 'support' ) ) {
4903
  $this->add_submenu_link_item(
4904
- $this->apply_filters( 'support_forum_submenu', __fs( 'support-forum' ) ),
4905
  $this->apply_filters( 'support_forum_url', 'https://wordpress.org/support/plugin/' . $this->_slug ),
4906
  'wp-support-forum',
4907
  'read',
@@ -5118,6 +5150,10 @@
5118
  *
5119
  * @param string $tag
5120
  * @param callable|bool $function_to_check Optional. The callback to check for. Default false.
 
 
 
 
5121
  */
5122
  function has_filter( $tag, $function_to_check = false ) {
5123
  $this->_logger->entrance( $tag );
@@ -5125,6 +5161,20 @@
5125
  return has_filter( 'fs_' . $tag . '_' . $this->_slug, $function_to_check );
5126
  }
5127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5128
  /* Account Page
5129
  ------------------------------------------------------------------------------------------------------------------*/
5130
  /**
@@ -5335,14 +5385,26 @@
5335
  $this->_user->last = $user->last;
5336
  $this->_user->email = $user->email;
5337
 
5338
- if ( ( ! isset( $this->_user->is_verified ) || false === $this->_user->is_verified ) && $user->is_verified ) {
5339
- $this->_user->is_verified = $user->is_verified;
 
 
 
 
5340
 
5341
  $this->do_action( 'account_email_verified', $user->email );
5342
 
5343
  $this->_admin_notices->add(
5344
- __fs( 'email-verified-message' ),
5345
- __fs( 'right-on' ) . '!'
 
 
 
 
 
 
 
 
5346
  );
5347
  }
5348
 
@@ -5350,6 +5412,20 @@
5350
  $this->_store_user();
5351
 
5352
  $this->do_action( 'after_account_user_sync', $user );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5353
  }
5354
  }
5355
 
@@ -5723,22 +5799,22 @@
5723
  $this->_admin_notices->add_sticky(
5724
  FS_Plan_Manager::instance()->has_free_plan( $plans ) ?
5725
  sprintf(
5726
- __fs( 'addon-successfully-upgraded-message' ),
5727
  $addon->title
5728
  ) . ' ' . $this->_get_latest_download_link(
5729
- __fs( 'download-latest-version' ),
5730
  $addon_id
5731
  )
5732
  :
5733
  sprintf(
5734
- __fs( 'addon-successfully-purchased-message' ),
5735
  $addon->title
5736
  ) . ' ' . $this->_get_latest_download_link(
5737
- __fs( 'download-latest-version' ),
5738
  $addon_id
5739
  ),
5740
  'addon_plan_upgraded_' . $addon->slug,
5741
- __fs( 'yee-haw' ) . '!'
5742
  );
5743
  }
5744
  }
@@ -5771,19 +5847,19 @@
5771
  // Failed to ping API - blocked!
5772
  $this->_admin_notices->add(
5773
  sprintf(
5774
- __fs( 'server-blocking-access' ),
5775
  $this->get_plugin_name(),
5776
  '<a href="' . $api->get_url() . '" target="_blank">' . $api->get_url() . '</a>'
5777
- ) . '<br> ' . __fs( 'server-error-message' ) . var_export( $site->error, true ),
5778
- __fs( 'oops' ) . '...',
5779
  'error',
5780
  $background
5781
  );
5782
  } else {
5783
  // Authentication params are broken.
5784
  $this->_admin_notices->add(
5785
- __fs( 'wrong-authentication-param-message' ),
5786
- __fs( 'oops' ) . '...',
5787
  'error'
5788
  );
5789
  }
@@ -5867,19 +5943,19 @@
5867
  if ( ! $background && is_admin() ) {
5868
  $this->_admin_notices->add(
5869
  sprintf(
5870
- __fs( 'plan-did-not-change-message' ) . ' ' .
5871
  sprintf(
5872
  '<a href="%s">%s</a>',
5873
  $this->contact_url(
5874
  'bug',
5875
- sprintf( __fs( 'plan-did-not-change-email-message', 'freemius' ),
5876
  strtoupper( $this->_site->plan->name )
5877
  )
5878
  ),
5879
- __fs( 'contact-us-here' )
5880
  )
5881
  ),
5882
- __fs( 'hmm' ) . '...',
5883
  'error'
5884
  );
5885
  }
@@ -5887,15 +5963,15 @@
5887
  case 'upgraded':
5888
  $this->_admin_notices->add_sticky(
5889
  sprintf(
5890
- __fs( 'plan-upgraded-message' ),
5891
  '<i>' . $this->get_plugin_name() . '</i>'
5892
  ) . ( $this->is_premium() ? '' : ' ' . $this->_get_latest_download_link( sprintf(
5893
- __fs( 'download-latest-x-version' ),
5894
  $this->_site->plan->title
5895
  ) )
5896
  ),
5897
  'plan_upgraded',
5898
- __fs( 'yee-haw' ) . '!'
5899
  );
5900
 
5901
  $this->_admin_notices->remove_sticky( array(
@@ -5908,7 +5984,7 @@
5908
  case 'changed':
5909
  $this->_admin_notices->add_sticky(
5910
  sprintf(
5911
- __fs( 'plan-changed-to-x-message' ),
5912
  $this->_site->plan->title
5913
  ),
5914
  'plan_changed'
@@ -5923,31 +5999,31 @@
5923
  break;
5924
  case 'downgraded':
5925
  $this->_admin_notices->add_sticky(
5926
- sprintf( __fs( 'license-expired-blocking-message' ) ),
5927
  'license_expired',
5928
- __fs( 'hmm' ) . '...'
5929
  );
5930
  $this->_admin_notices->remove_sticky( 'plan_upgraded' );
5931
  break;
5932
  case 'expired':
5933
  $this->_admin_notices->add_sticky(
5934
- sprintf( __fs( 'license-expired-non-blocking-message' ), $this->_site->plan->title ),
5935
  'license_expired',
5936
- __fs( 'hmm' ) . '...'
5937
  );
5938
  $this->_admin_notices->remove_sticky( 'plan_upgraded' );
5939
  break;
5940
  case 'trial_started':
5941
  $this->_admin_notices->add_sticky(
5942
  sprintf(
5943
- __fs( 'trial-started-message' ),
5944
  '<i>' . $this->get_plugin_name() . '</i>'
5945
  ) . ( $this->is_premium() ? '' : ' ' . $this->_get_latest_download_link( sprintf(
5946
- __fs( 'download-latest-x-version' ),
5947
  $this->_storage->trial_plan->title
5948
  ) ) ),
5949
  'trial_started',
5950
- __fs( 'yee-haw' ) . '!'
5951
  );
5952
 
5953
  $this->_admin_notices->remove_sticky( array(
@@ -5956,9 +6032,9 @@
5956
  break;
5957
  case 'trial_expired':
5958
  $this->_admin_notices->add_sticky(
5959
- __fs( 'trial-expired-message' ),
5960
  'trial_expired',
5961
- __fs( 'hmm' ) . '...'
5962
  );
5963
  $this->_admin_notices->remove_sticky( array(
5964
  'trial_started',
@@ -5994,9 +6070,9 @@
5994
  if ( isset( $license->error ) ) {
5995
  if ( ! $background ) {
5996
  $this->_admin_notices->add(
5997
- __fs( 'license-activation-failed-message' ) . '<br> ' .
5998
- __fs( 'server-error-message' ) . ' ' . var_export( $license->error, true ),
5999
- __fs( 'hmm' ) . '...',
6000
  'error'
6001
  );
6002
  }
@@ -6015,13 +6091,13 @@
6015
 
6016
  if ( ! $background ) {
6017
  $this->_admin_notices->add_sticky(
6018
- __fs( 'license-activated-message' ) .
6019
  ( $this->is_premium() ? '' : ' ' . $this->_get_latest_download_link( sprintf(
6020
- __fs( 'download-latest-x-version' ),
6021
  $this->_site->plan->title
6022
  ) ) ),
6023
  'license_activated',
6024
- __fs( 'yee-haw' ) . '!'
6025
  );
6026
  }
6027
 
@@ -6042,8 +6118,8 @@
6042
 
6043
  if ( ! is_object( $this->_license ) ) {
6044
  $this->_admin_notices->add(
6045
- sprintf( __fs( 'no-active-license-message' ), $this->_site->plan->title ),
6046
- __fs( 'hmm' ) . '...'
6047
  );
6048
 
6049
  return;
@@ -6054,9 +6130,9 @@
6054
 
6055
  if ( isset( $license->error ) ) {
6056
  $this->_admin_notices->add(
6057
- __fs( 'license-deactivation-failed-message' ) . '<br> ' .
6058
- __fs( 'server-error-message' ) . ' ' . var_export( $license->error, true ),
6059
- __fs( 'hmm' ) . '...',
6060
  'error'
6061
  );
6062
 
@@ -6081,8 +6157,8 @@
6081
 
6082
  if ( $show_notice ) {
6083
  $this->_admin_notices->add(
6084
- sprintf( __fs( 'license-deactivation-message' ), $this->_site->plan->title ),
6085
- __fs( 'ok' )
6086
  );
6087
  }
6088
 
@@ -6130,7 +6206,7 @@
6130
  $this->_admin_notices->remove_sticky( 'plan_upgraded' );
6131
 
6132
  $this->_admin_notices->add(
6133
- sprintf( __fs( 'plan-x-downgraded-message' ),
6134
  $plan->title,
6135
  human_time_diff( time(), strtotime( $this->_license->expiration ) )
6136
  )
@@ -6140,8 +6216,8 @@
6140
  $this->_store_site();
6141
  } else {
6142
  $this->_admin_notices->add(
6143
- __fs( 'plan-downgraded-failure-message' ),
6144
- __fs( 'oops' ) . '...',
6145
  'error'
6146
  );
6147
  }
@@ -6160,8 +6236,8 @@
6160
 
6161
  if ( ! $this->is_trial() ) {
6162
  $this->_admin_notices->add(
6163
- __fs( 'trial-cancel-no-trial-message' ),
6164
- __fs( 'oops' ) . '...',
6165
  'error'
6166
  );
6167
 
@@ -6190,7 +6266,7 @@
6190
  $this->_admin_notices->remove_sticky( 'plan_upgraded' );
6191
 
6192
  $this->_admin_notices->add(
6193
- sprintf( __fs( 'trial-cancel-message' ), $this->_storage->trial_plan->title )
6194
  );
6195
 
6196
  $this->_admin_notices->remove_sticky( array(
@@ -6206,8 +6282,8 @@
6206
  unset( $this->_storage->trial_plan );
6207
  } else {
6208
  $this->_admin_notices->add(
6209
- __fs( 'trial-cancel-failure-message' ),
6210
- __fs( 'oops' ) . '...',
6211
  'error'
6212
  );
6213
  }
@@ -6431,21 +6507,21 @@
6431
  if ( ! $background ) {
6432
  $this->_admin_notices->add(
6433
  sprintf(
6434
- __fs( 'version-x-released' ) . ' ' . __fS( 'please-download-x' ),
6435
  $update->version,
6436
  sprintf(
6437
  '<a href="%s" target="_blank">%s</a>',
6438
  $this->get_account_url( 'download_latest' ),
6439
- sprintf( __fs( 'latest-x-version' ), $this->_site->plan->title )
6440
  )
6441
  ),
6442
- __fs( 'new' ) . '!'
6443
  );
6444
  }
6445
  } else if ( false === $new_version && ! $background ) {
6446
  $this->_admin_notices->add(
6447
- __fs( 'you-have-latest' ),
6448
- __fs( 'you-are-good' )
6449
  );
6450
  }
6451
 
@@ -6643,7 +6719,7 @@
6643
 
6644
  if ( ! isset( $result->error ) ) {
6645
  $this->_admin_notices->add( sprintf(
6646
- __fs( 'verification-email-sent-message' ),
6647
  sprintf( '<a href="mailto:%1s">%2s</a>', esc_url( $this->_user->email ), $this->_user->email )
6648
  ) );
6649
  } else {
@@ -6770,20 +6846,20 @@
6770
  $candidate_email = fs_request_get( 'candidate_email', '' );
6771
 
6772
  if ( $this->init_change_owner( $candidate_email ) ) {
6773
- $this->_admin_notices->add( sprintf( __fs( 'change-owner-request-sent-x' ), '<b>' . $this->_user->email . '</b>' ) );
6774
  }
6775
  break;
6776
  case 'owner_confirmed':
6777
  $candidate_email = fs_request_get( 'candidate_email', '' );
6778
 
6779
- $this->_admin_notices->add( sprintf( __fs( 'change-owner-request_owner-confirmed' ), '<b>' . $candidate_email . '</b>' ) );
6780
  break;
6781
  case 'candidate_confirmed':
6782
  if ( $this->complete_change_owner() ) {
6783
  $this->_admin_notices->add_sticky(
6784
- sprintf( __fs( 'change-owner-request_candidate-confirmed' ), '<b>' . $this->_user->email . '</b>' ),
6785
  'ownership_changed',
6786
- __fs( 'congrats' ) . '!'
6787
  );
6788
  } else {
6789
  // @todo Handle failed ownership change message.
@@ -6803,23 +6879,23 @@
6803
  switch ( $result->error->code ) {
6804
  case 'user_exist':
6805
  $this->_admin_notices->add(
6806
- __fs( 'user-exist-message' ) . ' ' .
6807
- sprintf( __fs( 'user-exist-message_ownership' ), '<b>' . $new_email . '</b>' ) .
6808
  sprintf(
6809
  '<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
6810
  $this->get_account_url( 'change_owner', array(
6811
  'state' => 'init',
6812
  'candidate_email' => $new_email
6813
  ) ),
6814
- __fs( 'change-ownership' )
6815
  ),
6816
- __fs( 'oops' ) . '...',
6817
  'error'
6818
  );
6819
  break;
6820
  }
6821
  } else {
6822
- $this->_admin_notices->add( __fs( 'email-updated-message' ) );
6823
  }
6824
 
6825
  return;
@@ -6831,12 +6907,12 @@
6831
 
6832
  if ( isset( $result->error ) ) {
6833
  $this->_admin_notices->add(
6834
- __fs( 'name-update-failed-message' ),
6835
- __fs( 'oops' ) . '...',
6836
  'error'
6837
  );
6838
  } else {
6839
- $this->_admin_notices->add( __fs( 'name-updated-message' ) );
6840
  }
6841
 
6842
  return;
@@ -6889,7 +6965,7 @@
6889
  $this->do_action( 'account_property_edit', 'site', $site_property, $site_property_value );
6890
 
6891
  $this->_admin_notices->add( sprintf(
6892
- __fs( 'x-updated' ),
6893
  '<b>' . str_replace( '_', ' ', $p ) . '</b>' ) );
6894
 
6895
  return;
@@ -6983,8 +7059,8 @@
6983
 
6984
  if ( ! $this->is_registered() && $this->is_org_repo_compliant() ) {
6985
  $this->_admin_notices->add(
6986
- sprintf( __fs( 'addons-info-external-message' ), '<b>' . $this->get_plugin_name() . '</b>' ),
6987
- __fs( 'heads-up' ),
6988
  'update-nag'
6989
  );
6990
  }
@@ -7048,15 +7124,15 @@
7048
  *
7049
  * @uses remove_all_actions()
7050
  */
7051
- function _hide_admin_notices() {
7052
  remove_all_actions( 'admin_notices' );
7053
  remove_all_actions( 'network_admin_notices' );
7054
  remove_all_actions( 'all_admin_notices' );
7055
  remove_all_actions( 'user_admin_notices' );
7056
  }
7057
 
7058
- function _clean_admin_content_section_hook() {
7059
- $this->_hide_admin_notices();
7060
 
7061
  // Hide footer.
7062
  echo '<style>#wpfooter { display: none !important; }</style>';
@@ -7068,8 +7144,8 @@
7068
  * @author Vova Feldman (@svovaf)
7069
  * @since 1.0.3
7070
  */
7071
- function _clean_admin_content_section() {
7072
- add_action( 'admin_head', array( &$this, '_clean_admin_content_section_hook' ) );
7073
  }
7074
 
7075
  /* CSS & JavaScript
@@ -7223,8 +7299,8 @@
7223
  $require_subscription = $paid_plan->is_require_subscription;
7224
  $upgrade_url = $this->get_trial_url();
7225
  $cc_string = $require_subscription ?
7226
- sprintf( __fs( 'no-commitment-for-x-days' ), $paid_plan->trial_period ) :
7227
- __fs( 'no-cc-required' ) . '!';
7228
 
7229
 
7230
  $total_paid_plans = count( $this->_plans ) - ( FS_Plan_Manager::instance()->has_free_plan( $this->_plans ) ? 1 : 0 );
@@ -7232,9 +7308,9 @@
7232
  if ( $total_paid_plans === $trial_plans_count ) {
7233
  // All paid plans have trials.
7234
  $message = sprintf(
7235
- __fs( 'hey' ) . '! ' . __fs( 'trial-x-promotion-message' ),
7236
  sprintf( '<b>%s</b>', $this->get_plugin_name() ),
7237
- strtolower( __fs( 'awesome' ) ),
7238
  $paid_plan->trial_period
7239
  );
7240
  } else {
@@ -7251,7 +7327,7 @@
7251
 
7252
  // Not all paid plans have trials.
7253
  $message = sprintf(
7254
- __fs( 'hey' ) . '! ' . __fs( 'trial-x-promotion-message' ),
7255
  sprintf( '<b>%s</b>', $this->get_plugin_name() ),
7256
  $plans_string,
7257
  $paid_plan->trial_period
@@ -7264,7 +7340,7 @@
7264
  $message .= ' ' . sprintf(
7265
  '<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
7266
  $upgrade_url,
7267
- __fs( 'start-free-trial' )
7268
  );
7269
 
7270
  $this->_admin_notices->add_sticky(
@@ -7361,7 +7437,7 @@
7361
  if ( $this->is_registered() ) {
7362
  if ( ! $this->is_paying() && $this->has_paid_plan() ) {
7363
  $this->add_plugin_action_link(
7364
- __fs( 'upgrade' ),
7365
  $this->get_upgrade_url(),
7366
  false,
7367
  20,
@@ -7371,7 +7447,7 @@
7371
 
7372
  if ( $this->_has_addons() ) {
7373
  $this->add_plugin_action_link(
7374
- __fs( 'add-ons' ),
7375
  $this->_get_admin_page_url( 'addons' ),
7376
  false,
7377
  WP_FS__DEFAULT_PRIORITY,
@@ -7594,6 +7670,24 @@
7594
 
7595
  #endregion ------------------------------------------------------------------
7596
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7597
  #region Marketing ------------------------------------------------------------------
7598
 
7599
  /**
16
  *
17
  * @var string
18
  */
19
+ public $version = WP_FS__SDK_VERSION;
20
 
21
  #region Plugin Info
22
 
114
  */
115
  private $_has_addons;
116
 
117
+ /**
118
+ * @since 1.1.6
119
+ * @var string[]bool.
120
+ */
121
+ private $_permissions;
122
+
123
  /**
124
  * @var FS_Key_Value_Storage
125
  */
317
  * @param string $sdk_prev_version
318
  * @param string $sdk_version
319
  */
320
+ function _data_migration( $sdk_prev_version, $sdk_version ) {
321
+ if ( version_compare( $sdk_prev_version, '1.1.5', '<' ) &&
322
+ version_compare( $sdk_version, '1.1.5', '>=' )
323
  ) {
324
  // On version 1.1.5 merged connectivity and is_on data.
325
  if ( isset( $this->_storage->connectivity_test ) ) {
370
 
371
  $this->add_action( 'after_plans_sync', array( &$this, '_check_for_trial_plans' ) );
372
 
373
+ $this->add_action( 'sdk_version_update', array( &$this, '_data_migration' ), WP_FS__DEFAULT_PRIORITY, 2 );
374
  }
375
 
376
  /**
472
  function _get_uninstall_reasons( $user_type = 'long-term' ) {
473
  $reason_found_better_plugin = array(
474
  'id' => 2,
475
+ 'text' => __fs( 'reason-found-a-better-plugin', $this->_slug ),
476
  'input_type' => 'textfield',
477
+ 'input_placeholder' => __fs( 'placeholder-plugin-name', $this->_slug )
478
  );
479
 
480
  $reason_other = array(
481
  'id' => 7,
482
+ 'text' => __fs( 'reason-other', $this->_slug ),
483
  'input_type' => 'textfield',
484
  'input_placeholder' => ''
485
  );
487
  $long_term_user_reasons = array(
488
  array(
489
  'id' => 1,
490
+ 'text' => __fs( 'reason-no-longer-needed', $this->_slug ),
491
  'input_type' => '',
492
  'input_placeholder' => ''
493
  ),
494
  $reason_found_better_plugin,
495
  array(
496
  'id' => 3,
497
+ 'text' => __fs( 'reason-needed-for-a-short-period', $this->_slug ),
498
  'input_type' => '',
499
  'input_placeholder' => ''
500
  ),
501
  array(
502
  'id' => 4,
503
+ 'text' => __fs( 'reason-broke-my-site', $this->_slug ),
504
  'input_type' => '',
505
  'input_placeholder' => ''
506
  ),
507
  array(
508
  'id' => 5,
509
+ 'text' => __fs( 'reason-suddenly-stopped-working', $this->_slug ),
510
  'input_type' => '',
511
  'input_placeholder' => ''
512
  )
515
  if ( $this->is_paying() ) {
516
  $long_term_user_reasons[] = array(
517
  'id' => 6,
518
+ 'text' => __fs( 'reason-cant-pay-anymore', $this->_slug ),
519
  'input_type' => 'textfield',
520
+ 'input_placeholder' => __fs( 'placeholder-comfortable-price', $this->_slug )
521
  );
522
  }
523
 
528
  'non-registered-and-non-anonymous-short-term' => array(
529
  array(
530
  'id' => 8,
531
+ 'text' => __fs( 'reason-didnt-work', $this->_slug ),
532
  'input_type' => '',
533
  'input_placeholder' => ''
534
  ),
535
  array(
536
  'id' => 9,
537
+ 'text' => __fs( 'reason-dont-like-to-share-my-information', $this->_slug ),
538
  'input_type' => '',
539
  'input_placeholder' => ''
540
  ),
544
  'short-term' => array(
545
  array(
546
  'id' => 10,
547
+ 'text' => __fs( 'reason-couldnt-make-it-work', $this->_slug ),
548
  'input_type' => '',
549
  'input_placeholder' => ''
550
  ),
551
  $reason_found_better_plugin,
552
  array(
553
  'id' => 11,
554
+ 'text' => __fs( 'reason-great-but-need-specific-feature', $this->_slug ),
555
  'input_type' => 'textarea',
556
+ 'input_placeholder' => __fs( 'placeholder-feature', $this->_slug )
557
  ),
558
  array(
559
  'id' => 12,
560
+ 'text' => __fs( 'reason-not-working', $this->_slug ),
561
  'input_type' => 'textarea',
562
+ 'input_placeholder' => __fs( 'placeholder-share-what-didnt-work', $this->_slug )
563
  ),
564
  array(
565
  'id' => 13,
566
+ 'text' => __fs( 'reason-not-what-i-was-looking-for', $this->_slug ),
567
  'input_type' => 'textarea',
568
+ 'input_placeholder' => __fs( 'placeholder-what-youve-been-looking-for', $this->_slug )
569
  ),
570
  array(
571
  'id' => 14,
572
+ 'text' => __fs( 'reason-didnt-work-as-expected', $this->_slug ),
573
  'input_type' => 'textarea',
574
+ 'input_placeholder' => __fs( 'placeholder-what-did-you-expect', $this->_slug )
575
  ),
576
  $reason_other
577
  )
614
  * @since 1.0.6
615
  *
616
  * @return string
617
+ *
618
+ * @uses fs_find_caller_plugin_file
619
  */
620
  private function _find_caller_plugin_file() {
 
 
 
621
  // Try to load the cached value of the file path.
622
  if ( isset( $this->_storage->plugin_main_file ) ) {
623
  if ( file_exists( $this->_storage->plugin_main_file->path ) ) {
625
  }
626
  }
627
 
628
+ $plugin_file = fs_find_caller_plugin_file();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
629
 
630
  $this->_storage->plugin_main_file = (object) array(
631
  'path' => fs_normalize_path( $plugin_file ),
800
  // Configure which Freemius powered plugins should be auto updated.
801
  // add_filter( 'auto_update_plugin', '_include_plugins_in_auto_update', 10, 2 );
802
 
803
+ add_action( 'admin_menu', array( 'Freemius', 'add_debug_page' ) );
 
 
804
 
805
  self::$_statics_loaded = true;
806
  }
814
  static function add_debug_page() {
815
  self::$_static_logger->entrance();
816
 
817
+ $title = sprintf( '%s [v.%s]', __fs( 'freemius-debug' ), WP_FS__SDK_VERSION );
818
+
819
+ if ( WP_FS__DEV_MODE ) {
820
+ // Add top-level debug menu item.
821
+ $hook = add_object_page(
822
+ $title,
823
+ $title,
824
+ 'manage_options',
825
+ 'freemius',
826
+ array( 'Freemius', '_debug_page_render' )
827
+ );
828
+ } else {
829
+ // Add hidden debug page.
830
+ $hook = add_submenu_page(
831
+ null,
832
+ $title,
833
+ $title,
834
+ 'manage_options',
835
+ 'freemius',
836
+ array( 'Freemius', '_debug_page_render' )
837
+ );
838
+ }
839
 
840
  add_action( "load-$hook", array( 'Freemius', '_debug_page_actions' ) );
841
  }
845
  * @since 1.0.8
846
  */
847
  static function _debug_page_actions() {
848
+ self::_clean_admin_content_section();
849
+
850
  if ( fs_request_is_action( 'delete_all_accounts' ) ) {
851
  check_admin_referer( 'delete_all_accounts' );
852
 
887
  /**
888
  * Check if Freemius should be turned on for the current plugin install.
889
  *
890
+ * Note:
891
+ * $this->_is_on is updated in has_api_connectivity()
892
+ *
893
  * @author Vova Feldman (@svovaf)
894
  * @since 1.0.9
895
  *
896
  * @return bool
897
  */
898
+ function is_on() {
899
  self::$_static_logger->entrance();
900
 
901
  if ( isset( $this->_is_on ) ) {
905
  // If already installed or pending then sure it's on :)
906
  if ( $this->is_registered() || $this->is_pending_activation() ) {
907
  $this->_is_on = true;
908
+ return true;
 
909
  }
910
+
911
+ return false;
912
  }
913
 
914
  /**
921
  *
922
  * @return bool
923
  */
924
+ function has_api_connectivity( $flush = false ) {
925
+ if ( ! $flush && isset( $this->_has_api_connection ) ) {
926
  return $this->_has_api_connection;
927
  }
928
 
935
  unset( $this->_storage->connectivity_test );
936
  }
937
 
938
+ if ( isset( $this->_storage->connectivity_test ) ) {
939
  if ( $_SERVER['HTTP_HOST'] == $this->_storage->connectivity_test['host'] &&
940
  fs_get_ip() == $this->_storage->connectivity_test['server_ip']
941
  ) {
942
  if ( ( $this->_storage->connectivity_test['is_connected'] &&
943
  $this->_storage->connectivity_test['is_active'] ) ||
944
+ ( ! $flush &&
945
+ $version == $this->_storage->connectivity_test['version'] )
946
  ) {
947
  $this->_has_api_connection = $this->_storage->connectivity_test['is_connected'];
948
+ $this->_is_on = $this->_storage->connectivity_test['is_active'] || (WP_FS__DEV_MODE && $this->_has_api_connection);
949
 
950
  return $this->_has_api_connection;
951
  }
988
  );
989
 
990
  $this->_has_api_connection = $is_connected;
991
+ $this->_is_on = $is_active || (WP_FS__DEV_MODE && $is_connected);
992
 
993
  return $this->_has_api_connection;
994
  }
1047
  switch ( $api_result->error->code ) {
1048
  case 'curl_missing':
1049
  $message = sprintf(
1050
+ __fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
1051
+ __fs( 'curl-missing-message', $this->_slug ) . ' ' .
1052
  ' %s',
1053
  '<b>' . $this->get_plugin_name() . '</b>',
1054
  sprintf(
1055
  '<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
1056
  sprintf(
1057
  '<a class="fs-resolve" data-type="curl" href="#"><b>%s</b></a>%s',
1058
+ __fs( 'curl-missing-no-clue-title', $this->_slug ),
1059
  ' - ' . sprintf(
1060
+ __fs( 'curl-missing-no-clue-desc', $this->_slug ),
1061
  '<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
1062
  )
1063
  ),
1064
  sprintf(
1065
  '<b>%s</b> - %s',
1066
+ __fs( 'sysadmin-title', $this->_slug ),
1067
+ __fs( 'curl-missing-sysadmin-desc', $this->_slug )
1068
  ),
1069
  sprintf(
1070
  '<a href="%s"><b>%s</b></a>%s',
1071
  wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
1072
+ __fs( 'deactivate-plugin-title', $this->_slug ),
1073
+ ' - ' . __fs( 'deactivate-plugin-desc', 'freemius', $this->_slug )
1074
  )
1075
  )
1076
  );
1077
  break;
1078
  case 'cloudflare_ddos_protection':
1079
  $message = sprintf(
1080
+ __fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
1081
+ __fs( 'cloudflare-blocks-connection-message', $this->_slug ) . ' ' .
1082
+ __fs( 'happy-to-resolve-issue-asap', $this->_slug ) .
1083
  ' %s',
1084
  '<b>' . $this->get_plugin_name() . '</b>',
1085
  sprintf(
1086
  '<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
1087
  sprintf(
1088
  '<a class="fs-resolve" data-type="cloudflare" href="#"><b>%s</b></a>%s',
1089
+ __fs( 'fix-issue-title', $this->_slug ),
1090
  ' - ' . sprintf(
1091
+ __fs( 'fix-issue-desc', $this->_slug ),
1092
  '<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
1093
  )
1094
  ),
1095
  sprintf(
1096
  '<a href="%s" target="_blank"><b>%s</b></a>%s',
1097
  sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
1098
+ __fs( 'install-previous-title', $this->_slug ),
1099
+ ' - ' . __fs( 'install-previous-desc', $this->_slug )
1100
  ),
1101
  sprintf(
1102
  '<a href="%s"><b>%s</b></a>%s',
1103
  wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
1104
+ __fs( 'deactivate-plugin-title', $this->_slug ),
1105
+ ' - ' . __fs( 'deactivate-plugin-desc', $this->_slug )
1106
  )
1107
  )
1108
  );
1109
  break;
1110
  case 'squid_cache_block':
1111
  $message = sprintf(
1112
+ __fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
1113
+ __fs( 'squid-blocks-connection-message', $this->_slug ) .
1114
  ' %s',
1115
  '<b>' . $this->get_plugin_name() . '</b>',
1116
  sprintf(
1117
  '<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
1118
  sprintf(
1119
  '<a class="fs-resolve" data-type="squid" href="#"><b>%s</b></a>%s',
1120
+ __fs( 'squid-no-clue-title', $this->_slug ),
1121
  ' - ' . sprintf(
1122
+ __fs( 'squid-no-clue-desc', $this->_slug ),
1123
  '<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
1124
  )
1125
  ),
1126
  sprintf(
1127
  '<b>%s</b> - %s',
1128
+ __fs( 'sysadmin-title', $this->_slug ),
1129
  sprintf(
1130
+ __fs( 'squid-sysadmin-desc', $this->_slug ),
1131
  // We use a filter since the plugin might require additional API connectivity.
1132
  '<b>' . implode( ', ', $this->apply_filters( 'api_domains', array( 'api.freemius.com' ) ) ) . '</b>' )
1133
  ),
1134
  sprintf(
1135
  '<a href="%s"><b>%s</b></a>%s',
1136
  wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
1137
+ __fs( 'deactivate-plugin-title', $this->_slug ),
1138
+ ' - ' . __fs( 'deactivate-plugin-desc', $this->_slug )
1139
  )
1140
  )
1141
  );
1142
  break;
1143
  default:
1144
+ $message = __fs( 'connectivity-test-fails-message', $this->_slug );
1145
  break;
1146
  }
1147
  }
1148
 
1149
  if ( false === $message ) {
1150
  $message = sprintf(
1151
+ __fs( 'x-requires-access-to-api', $this->_slug ) . ' ' .
1152
+ __fs( 'connectivity-test-fails-message', $this->_slug ) . ' ' .
1153
+ __fs( 'happy-to-resolve-issue-asap', $this->_slug ) .
1154
  ' %s',
1155
  '<b>' . $this->get_plugin_name() . '</b>',
1156
  sprintf(
1157
  '<ol id="fs_firewall_issue_options"><li>%s</li><li>%s</li><li>%s</li></ol>',
1158
  sprintf(
1159
  '<a class="fs-resolve" data-type="general" href="#"><b>%s</b></a>%s',
1160
+ __fs( 'fix-issue-title', $this->_slug ),
1161
  ' - ' . sprintf(
1162
+ __fs( 'fix-issue-desc', $this->_slug ),
1163
  '<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
1164
  )
1165
  ),
1166
  sprintf(
1167
  '<a href="%s" target="_blank"><b>%s</b></a>%s',
1168
  sprintf( 'https://wordpress.org/plugins/%s/download/', $this->_slug ),
1169
+ __fs( 'install-previous-title', $this->_slug ),
1170
+ ' - ' . __fs( 'install-previous-desc', $this->_slug )
1171
  ),
1172
  sprintf(
1173
  '<a href="%s"><b>%s</b></a>%s',
1174
  wp_nonce_url( 'plugins.php?action=deactivate&amp;plugin=' . $this->_plugin_basename . '&amp;plugin_status=' . 'all' . '&amp;paged=' . '1' . '&amp;s=' . '', 'deactivate-plugin_' . $this->_plugin_basename ),
1175
+ __fs( 'deactivate-plugin-title', $this->_slug ),
1176
+ ' - ' . __fs( 'deactivate-plugin-desc', $this->_slug )
1177
  )
1178
  )
1179
  );
1182
  $this->_admin_notices->add_sticky(
1183
  $message,
1184
  'failed_connect_api',
1185
+ __fs( 'oops', $this->_slug ) . '...',
1186
  'error'
1187
  );
1188
  }
1270
 
1271
  $this->_admin_notices->add_sticky(
1272
  sprintf(
1273
+ __fs( 'fix-request-sent-message', $this->_slug ),
1274
  '<a href="mailto:' . $admin_email . '">' . $admin_email . '</a>'
1275
  ),
1276
  'server_details_sent'
1465
  ) );
1466
  }
1467
 
1468
+ /**
1469
+ * @param string[] $options
1470
+ * @param string $key
1471
+ * @param mixed $default
1472
+ *
1473
+ * @return bool
1474
+ */
1475
  private function _get_option( &$options, $key, $default = false ) {
1476
  return ! empty( $options[ $key ] ) ? $options[ $key ] : $default;
1477
  }
1557
  $this->_has_paid_plans = $this->_get_bool_option( $plugin_info, 'has_paid_plans', true );
1558
  $this->_is_org_compliant = $this->_get_bool_option( $plugin_info, 'is_org_compliant', true );
1559
  $this->_enable_anonymous = $this->_get_bool_option( $plugin_info, 'enable_anonymous', true );
1560
+ $this->_permissions = $this->_get_option( $plugin_info, 'permissions', array() );
1561
 
1562
  if ( ! $this->is_registered() ) {
1563
  if ( ! $this->has_api_connectivity() ) {
1615
  if ( ! $this->is_parent_plugin_installed() ) {
1616
  $this->_admin_notices->add(
1617
  ( is_string( $parent_name ) ?
1618
+ sprintf( __fs( 'addon-cannot-run-without-x', $this->_slug ), $this->get_plugin_name(), $parent_name ) :
1619
+ sprintf( __fs( 'addon-x-cannot-run-without-parent', $this->_slug ), $this->get_plugin_name() )
1620
  ),
1621
+ __fs( 'oops', $this->_slug ) . '...',
1622
  'error'
1623
  );
1624
 
1651
  add_action( 'install_plugins_pre_plugin-information', 'fs_install_plugin_information' );
1652
 
1653
  // Override request for plugin information for Add-ons.
1654
+ add_filter( 'fs_plugins_api', array(
1655
+ &$this,
1656
+ '_get_addon_info_filter'
1657
+ ), WP_FS__DEFAULT_PRIORITY, 3 );
1658
  } else {
1659
  if ( $this->is_paying() || $this->_has_addons() ) {
1660
  new FS_Plugin_Updater( $this );
1729
  ) );
1730
 
1731
  $this->_admin_notices->add_sticky(
1732
+ __fs( 'premium-activated-message', $this->_slug ),
1733
  'premium_activated',
1734
+ __fs( 'woot', $this->_slug ) . '!'
1735
  );
1736
  } else {
1737
  // Activated free code (after had the premium before).
1740
  if ( $this->is_paying() && ! $this->is_premium() ) {
1741
  $this->_admin_notices->add_sticky(
1742
  sprintf(
1743
+ __fs( 'you-have-x-license', $this->_slug ),
1744
  $this->_site->plan->title
1745
  ) . ' ' . $this->_get_latest_download_link( sprintf(
1746
+ __fs( 'download-x-version-now', $this->_slug ),
1747
  $this->_site->plan->title
1748
  ) ),
1749
  'plan_upgraded',
1750
+ __fs( 'yee-haw', $this->_slug ) . '!'
1751
  );
1752
  }
1753
  }
1827
  }
1828
 
1829
  if ( ! empty( $selected_addon->info->screenshots ) ) {
1830
+ $view_vars = array(
1831
+ 'screenshots' => $selected_addon->info->screenshots,
1832
+ 'plugin' => $selected_addon,
1833
+ );
1834
  $data->sections['screenshots'] = fs_get_template( '/plugin-info/screenshots.php', $view_vars );
1835
  }
1836
 
1888
  $data->plans = $plans;
1889
 
1890
  if ( $has_features ) {
1891
+ $view_vars = array(
1892
+ 'plans' => $plans,
1893
+ 'plugin' => $selected_addon,
1894
+ );
1895
  $data->sections['features'] = fs_get_template( '/plugin-info/features.php', $view_vars );
1896
  }
1897
  }
2184
 
2185
  $this->_admin_notices->add_sticky(
2186
  sprintf(
2187
+ __fs( 'pending-activation-message', $this->_slug ),
2188
  '<b>' . $this->get_plugin_name() . '</b>',
2189
  '<b>' . $email . '</b>'
2190
  ),
2238
  // Show notice for new plugin installations.
2239
  $this->_admin_notices->add(
2240
  sprintf(
2241
+ __fs( 'you-are-step-away', $this->_slug ),
2242
  sprintf( '<b><a href="%s">%s</a></b>',
2243
  $this->get_activation_url(),
2244
+ sprintf( __fs( 'activate-x-now', $this->_slug ), $this->get_plugin_name() )
2245
  )
2246
  ),
2247
  '',
2254
  // Show notice for new plugin installations.
2255
  $this->_admin_notices->add_sticky(
2256
  sprintf(
2257
+ __fs( 'few-plugin-tweaks', $this->_slug ),
2258
  sprintf( '<b><a href="%s">%s</a></b>',
2259
  $this->get_activation_url(),
2260
+ sprintf( __fs( 'optin-x-now', $this->_slug ), $this->get_plugin_name() )
2261
  )
2262
  ),
2263
  'connect_account',
2389
  }
2390
 
2391
  /**
2392
+ * Check if Freemius was added on new plugin installation.
 
2393
  *
 
 
 
 
 
 
 
 
 
2394
  * @author Vova Feldman (@svovaf)
2395
  * @since 1.1.5
2396
  *
2397
  * @return bool
2398
  */
2399
+ function is_plugin_new_install() {
2400
+ return isset( $this->_storage->is_plugin_new_install ) &&
2401
+ $this->_storage->is_plugin_new_install;
2402
  }
2403
 
2404
  /**
2431
  deactivate_plugins( $this->_free_plugin_basename );
2432
 
2433
  $this->_admin_notices->add(
2434
+ sprintf( __fs( 'successful-version-upgrade-message', $this->_slug ), sprintf( '<b>%s</b>', $this->_plugin->title ) ),
2435
+ __fs( 'woot', $this->_slug ) . '!'
2436
  );
2437
  }
2438
  } else if ( $this->is_anonymous() ) {
2466
  $this->_storage->is_plugin_new_install = empty( $this->_storage->plugin_last_version );
2467
  }
2468
 
2469
+ if ( $this->has_api_connectivity( true ) ) {
2470
  // Store hint that the plugin was just activated to enable auto-redirection to settings.
2471
  add_option( "fs_{$this->_slug}_activated", true );
2472
  }
2531
  }
2532
 
2533
  $this->_admin_notices->clear_all_sticky();
2534
+ if ( isset( $this->_storage->sticky_optin_added ) ) {
2535
+ unset( $this->_storage->sticky_optin_added );
2536
+ }
2537
 
2538
  if ( ! $this->has_api_connectivity() ) {
2539
  // Reset connectivity test cache.
2540
  unset( $this->_storage->connectivity_test );
2541
  }
2542
 
2543
+ if ( ! isset( $this->_storage->is_plugin_new_install ) ) {
2544
  // Remember that plugin was already installed.
2545
  $this->_storage->is_plugin_new_install = false;
2546
  }
2554
 
2555
  // Clear API cache on deactivation.
2556
  FS_Api::clear_cache();
2557
+
2558
+ $this->remove_sdk_reference();
2559
+ }
2560
+
2561
+ /**
2562
+ * @author Vova Feldman (@svovaf)
2563
+ * @since 1.1.6
2564
+ */
2565
+ private function remove_sdk_reference() {
2566
+ global $fs_active_plugins;
2567
+
2568
+ foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) {
2569
+ if ( $this->_plugin_basename == $data->plugin_path ) {
2570
+ unset( $fs_active_plugins->plugins[ $sdk_path ] );
2571
+ break;
2572
+ }
2573
+ }
2574
+
2575
+ fs_fallback_to_newest_active_sdk();
2576
  }
2577
 
2578
  /**
4155
  return;
4156
  }
4157
 
4158
+ self::_clean_admin_content_section();
4159
 
4160
  if ( fs_request_is_action( 'activate' ) && fs_request_is_post() ) {
4161
  // check_admin_referer( 'activate_' . $this->_plugin->public_key );
4359
 
4360
  if ( ! $this->is_paying() ) {
4361
  $this->_admin_notices->add_sticky(
4362
+ sprintf( __fs( 'plugin-x-activation-message', $this->_slug ), '<b>' . $this->get_plugin_name() . '</b>' ),
4363
  'activation_complete'
4364
  );
4365
  }
4368
  if ( $this->is_paying() && ! $this->is_premium() ) {
4369
  $this->_admin_notices->add_sticky(
4370
  sprintf(
4371
+ __fs( 'activation-with-plan-x-message', $this->_slug ),
4372
  $this->_site->plan->title
4373
  ) . ' ' . $this->_get_latest_download_link( sprintf(
4374
+ __fs( 'download-latest-x-version', $this->_slug ),
4375
  $this->_site->plan->title
4376
  ) ),
4377
  'plan_upgraded',
4378
+ __fs( 'yee-haw', $this->_slug ) . '!'
4379
  );
4380
  }
4381
 
4416
  * @since 1.0.7
4417
  */
4418
  function _install_with_new_user() {
4419
+ $this->_logger->entrance();
4420
+
4421
  if ( $this->is_registered() ) {
4422
  return;
4423
  }
4470
  * @since 1.0.7
4471
  */
4472
  function _install_with_current_user() {
4473
+ $this->_logger->entrance();
4474
+
4475
  if ( $this->is_registered() ) {
4476
  return;
4477
  }
4501
 
4502
  if ( isset( $install->error ) ) {
4503
  $this->_admin_notices->add(
4504
+ sprintf( __fs( 'could-not-activate-x', $this->_slug ), $this->get_plugin_name() ) . ' ' .
4505
+ __fs( 'contact-us-with-error-message', $this->_slug ) . ' ' . '<b>' . $install->error->message . '</b>',
4506
+ __fs( 'oops', $this->_slug ) . '...',
4507
  'error'
4508
  );
4509
 
4546
 
4547
  if ( isset( $addon_install->error ) ) {
4548
  $this->_admin_notices->add(
4549
+ sprintf( __fs( 'could-not-activate-x', $this->_slug ), $this->get_plugin_name() ) . ' ' .
4550
+ __fs( 'contact-us-with-error-message', $this->_slug ) . ' ' . '<b>' . $addon_install->error->message . '</b>',
4551
+ __fs( 'oops', $this->_slug ) . '...',
4552
  'error'
4553
  );
4554
 
4726
 
4727
  if ( $this->_menu->is_activation_page() ) {
4728
  // Clean admin page from distracting content.
4729
+ self::_clean_admin_content_section();
4730
  }
4731
 
4732
  if ( false !== $hook ) {
4766
  if ( $this->is_registered() ) {
4767
  // Add user account page.
4768
  $this->add_submenu_item(
4769
+ __fs( 'account', $this->_slug ),
4770
  array( &$this, '_account_page_render' ),
4771
+ $this->get_plugin_name() . ' &ndash; ' . __fs( 'account', $this->_slug ),
4772
  'manage_options',
4773
  'account',
4774
  array( &$this, '_account_page_load' ),
4779
 
4780
  // Add contact page.
4781
  $this->add_submenu_item(
4782
+ __fs( 'contact-us', $this->_slug ),
4783
  array( &$this, '_contact_page_render' ),
4784
+ $this->get_plugin_name() . ' &ndash; ' . __fs( 'contact-us', $this->_slug ),
4785
  'manage_options',
4786
  'contact',
4787
+ 'Freemius::_clean_admin_content_section',
4788
  WP_FS__DEFAULT_PRIORITY,
4789
  $this->_menu->is_submenu_item_visible( 'contact' )
4790
  );
4791
 
4792
  if ( $this->_has_addons() ) {
4793
  $this->add_submenu_item(
4794
+ __fs( 'add-ons', $this->_slug ),
4795
  array( &$this, '_addons_page_render' ),
4796
+ $this->get_plugin_name() . ' &ndash; ' . __fs( 'add-ons', $this->_slug ),
4797
  'manage_options',
4798
  'addons',
4799
  array( &$this, '_addons_page_load' ),
4802
  );
4803
  }
4804
 
4805
+ $show_pricing = ( $this->has_paid_plan() && $this->_menu->is_submenu_item_visible( 'pricing' ) );
4806
  // If user don't have paid plans, add pricing page
4807
  // to support add-ons checkout but don't add the submenu item.
4808
  // || (isset( $_GET['page'] ) && $this->_menu->get_slug( 'pricing' ) == $_GET['page']);
4809
 
4810
  // Add upgrade/pricing page.
4811
  $this->add_submenu_item(
4812
+ ( $this->is_paying() ? __fs( 'pricing', $this->_slug ) : __fs( 'upgrade', $this->_slug ) . '&nbsp;&nbsp;&#x27a4;' ),
4813
  array( &$this, '_pricing_page_render' ),
4814
+ $this->get_plugin_name() . ' &ndash; ' . __fs( 'pricing', $this->_slug ),
4815
  'manage_options',
4816
  'pricing',
4817
+ 'Freemius::_clean_admin_content_section',
4818
  WP_FS__LOWEST_PRIORITY,
4819
  $show_pricing
4820
  );
4933
  if ( $this->is_registered() ) {
4934
  if ( $this->_menu->is_submenu_item_visible( 'support' ) ) {
4935
  $this->add_submenu_link_item(
4936
+ $this->apply_filters( 'support_forum_submenu', __fs( 'support-forum', $this->_slug ) ),
4937
  $this->apply_filters( 'support_forum_url', 'https://wordpress.org/support/plugin/' . $this->_slug ),
4938
  'wp-support-forum',
4939
  'read',
5150
  *
5151
  * @param string $tag
5152
  * @param callable|bool $function_to_check Optional. The callback to check for. Default false.
5153
+ *
5154
+ * @return false|int
5155
+ *
5156
+ * @uses has_filter()
5157
  */
5158
  function has_filter( $tag, $function_to_check = false ) {
5159
  $this->_logger->entrance( $tag );
5161
  return has_filter( 'fs_' . $tag . '_' . $this->_slug, $function_to_check );
5162
  }
5163
 
5164
+ /**
5165
+ * Override default i18n text phrases.
5166
+ *
5167
+ * @author Vova Feldman (@svovaf)
5168
+ * @since 1.1.6
5169
+ *
5170
+ * @param string[] string $key_value
5171
+ *
5172
+ * @uses fs_override_i18n()
5173
+ */
5174
+ function override_i18n( $key_value ) {
5175
+ fs_override_i18n( $key_value, $this->_slug );
5176
+ }
5177
+
5178
  /* Account Page
5179
  ------------------------------------------------------------------------------------------------------------------*/
5180
  /**
5385
  $this->_user->last = $user->last;
5386
  $this->_user->email = $user->email;
5387
 
5388
+ $is_menu_item_account_visible = $this->_menu->is_submenu_item_visible( 'account' );
5389
+
5390
+ if ( $user->is_verified &&
5391
+ ( ! isset( $this->_user->is_verified ) || false === $this->_user->is_verified )
5392
+ ) {
5393
+ $this->_user->is_verified = true;
5394
 
5395
  $this->do_action( 'account_email_verified', $user->email );
5396
 
5397
  $this->_admin_notices->add(
5398
+ __fs( 'email-verified-message', $this->_slug ),
5399
+ __fs( 'right-on', $this->_slug ) . '!',
5400
+ 'success',
5401
+ // Make admin sticky if account menu item is invisible,
5402
+ // since the page will be auto redirected to the plugin's
5403
+ // main settings page, and the non-sticky message
5404
+ // will disappear.
5405
+ ! $is_menu_item_account_visible,
5406
+ false,
5407
+ 'email_verified'
5408
  );
5409
  }
5410
 
5412
  $this->_store_user();
5413
 
5414
  $this->do_action( 'after_account_user_sync', $user );
5415
+
5416
+ /**
5417
+ * If account menu item is hidden, redirect to plugin's main settings page.
5418
+ *
5419
+ * @author Vova Feldman (@svovaf)
5420
+ * @since 1.1.6
5421
+ *
5422
+ * @link https://github.com/Freemius/wordpress-sdk/issues/6
5423
+ */
5424
+ if ( ! $is_menu_item_account_visible ) {
5425
+ if ( fs_redirect( $this->_get_admin_page_url() ) ) {
5426
+ exit();
5427
+ }
5428
+ }
5429
  }
5430
  }
5431
 
5799
  $this->_admin_notices->add_sticky(
5800
  FS_Plan_Manager::instance()->has_free_plan( $plans ) ?
5801
  sprintf(
5802
+ __fs( 'addon-successfully-upgraded-message', $this->_slug ),
5803
  $addon->title
5804
  ) . ' ' . $this->_get_latest_download_link(
5805
+ __fs( 'download-latest-version', $this->_slug ),
5806
  $addon_id
5807
  )
5808
  :
5809
  sprintf(
5810
+ __fs( 'addon-successfully-purchased-message', $this->_slug ),
5811
  $addon->title
5812
  ) . ' ' . $this->_get_latest_download_link(
5813
+ __fs( 'download-latest-version', $this->_slug ),
5814
  $addon_id
5815
  ),
5816
  'addon_plan_upgraded_' . $addon->slug,
5817
+ __fs( 'yee-haw', $this->_slug ) . '!'
5818
  );
5819
  }
5820
  }
5847
  // Failed to ping API - blocked!
5848
  $this->_admin_notices->add(
5849
  sprintf(
5850
+ __fs( 'server-blocking-access', $this->_slug ),
5851
  $this->get_plugin_name(),
5852
  '<a href="' . $api->get_url() . '" target="_blank">' . $api->get_url() . '</a>'
5853
+ ) . '<br> ' . __fs( 'server-error-message', $this->_slug ) . var_export( $site->error, true ),
5854
+ __fs( 'oops', $this->_slug ) . '...',
5855
  'error',
5856
  $background
5857
  );
5858
  } else {
5859
  // Authentication params are broken.
5860
  $this->_admin_notices->add(
5861
+ __fs( 'wrong-authentication-param-message', $this->_slug ),
5862
+ __fs( 'oops', $this->_slug ) . '...',
5863
  'error'
5864
  );
5865
  }
5943
  if ( ! $background && is_admin() ) {
5944
  $this->_admin_notices->add(
5945
  sprintf(
5946
+ __fs( 'plan-did-not-change-message', $this->_slug ) . ' ' .
5947
  sprintf(
5948
  '<a href="%s">%s</a>',
5949
  $this->contact_url(
5950
  'bug',
5951
+ sprintf( __fs( 'plan-did-not-change-email-message', $this->_slug ),
5952
  strtoupper( $this->_site->plan->name )
5953
  )
5954
  ),
5955
+ __fs( 'contact-us-here', $this->_slug )
5956
  )
5957
  ),
5958
+ __fs( 'hmm', $this->_slug ) . '...',
5959
  'error'
5960
  );
5961
  }
5963
  case 'upgraded':
5964
  $this->_admin_notices->add_sticky(
5965
  sprintf(
5966
+ __fs( 'plan-upgraded-message', $this->_slug ),
5967
  '<i>' . $this->get_plugin_name() . '</i>'
5968
  ) . ( $this->is_premium() ? '' : ' ' . $this->_get_latest_download_link( sprintf(
5969
+ __fs( 'download-latest-x-version', $this->_slug ),
5970
  $this->_site->plan->title
5971
  ) )
5972
  ),
5973
  'plan_upgraded',
5974
+ __fs( 'yee-haw', $this->_slug ) . '!'
5975
  );
5976
 
5977
  $this->_admin_notices->remove_sticky( array(
5984
  case 'changed':
5985
  $this->_admin_notices->add_sticky(
5986
  sprintf(
5987
+ __fs( 'plan-changed-to-x-message', $this->_slug ),
5988
  $this->_site->plan->title
5989
  ),
5990
  'plan_changed'
5999
  break;
6000
  case 'downgraded':
6001
  $this->_admin_notices->add_sticky(
6002
+ sprintf( __fs( 'license-expired-blocking-message', $this->_slug ) ),
6003
  'license_expired',
6004
+ __fs( 'hmm', $this->_slug ) . '...'
6005
  );
6006
  $this->_admin_notices->remove_sticky( 'plan_upgraded' );
6007
  break;
6008
  case 'expired':
6009
  $this->_admin_notices->add_sticky(
6010
+ sprintf( __fs( 'license-expired-non-blocking-message', $this->_slug ), $this->_site->plan->title ),
6011
  'license_expired',
6012
+ __fs( 'hmm', $this->_slug ) . '...'
6013
  );
6014
  $this->_admin_notices->remove_sticky( 'plan_upgraded' );
6015
  break;
6016
  case 'trial_started':
6017
  $this->_admin_notices->add_sticky(
6018
  sprintf(
6019
+ __fs( 'trial-started-message', $this->_slug ),
6020
  '<i>' . $this->get_plugin_name() . '</i>'
6021
  ) . ( $this->is_premium() ? '' : ' ' . $this->_get_latest_download_link( sprintf(
6022
+ __fs( 'download-latest-x-version', $this->_slug ),
6023
  $this->_storage->trial_plan->title
6024
  ) ) ),
6025
  'trial_started',
6026
+ __fs( 'yee-haw', $this->_slug ) . '!'
6027
  );
6028
 
6029
  $this->_admin_notices->remove_sticky( array(
6032
  break;
6033
  case 'trial_expired':
6034
  $this->_admin_notices->add_sticky(
6035
+ __fs( 'trial-expired-message', $this->_slug ),
6036
  'trial_expired',
6037
+ __fs( 'hmm', $this->_slug ) . '...'
6038
  );
6039
  $this->_admin_notices->remove_sticky( array(
6040
  'trial_started',
6070
  if ( isset( $license->error ) ) {
6071
  if ( ! $background ) {
6072
  $this->_admin_notices->add(
6073
+ __fs( 'license-activation-failed-message', $this->_slug ) . '<br> ' .
6074
+ __fs( 'server-error-message', $this->_slug ) . ' ' . var_export( $license->error, true ),
6075
+ __fs( 'hmm', $this->_slug ) . '...',
6076
  'error'
6077
  );
6078
  }
6091
 
6092
  if ( ! $background ) {
6093
  $this->_admin_notices->add_sticky(
6094
+ __fs( 'license-activated-message', $this->_slug ) .
6095
  ( $this->is_premium() ? '' : ' ' . $this->_get_latest_download_link( sprintf(
6096
+ __fs( 'download-latest-x-version', $this->_slug ),
6097
  $this->_site->plan->title
6098
  ) ) ),
6099
  'license_activated',
6100
+ __fs( 'yee-haw', $this->_slug ) . '!'
6101
  );
6102
  }
6103
 
6118
 
6119
  if ( ! is_object( $this->_license ) ) {
6120
  $this->_admin_notices->add(
6121
+ sprintf( __fs( 'no-active-license-message', $this->_slug ), $this->_site->plan->title ),
6122
+ __fs( 'hmm', $this->_slug ) . '...'
6123
  );
6124
 
6125
  return;
6130
 
6131
  if ( isset( $license->error ) ) {
6132
  $this->_admin_notices->add(
6133
+ __fs( 'license-deactivation-failed-message', $this->_slug ) . '<br> ' .
6134
+ __fs( 'server-error-message', $this->_slug ) . ' ' . var_export( $license->error, true ),
6135
+ __fs( 'hmm', $this->_slug ) . '...',
6136
  'error'
6137
  );
6138
 
6157
 
6158
  if ( $show_notice ) {
6159
  $this->_admin_notices->add(
6160
+ sprintf( __fs( 'license-deactivation-message', $this->_slug ), $this->_site->plan->title ),
6161
+ __fs( 'ok', $this->_slug )
6162
  );
6163
  }
6164
 
6206
  $this->_admin_notices->remove_sticky( 'plan_upgraded' );
6207
 
6208
  $this->_admin_notices->add(
6209
+ sprintf( __fs( 'plan-x-downgraded-message', $this->_slug ),
6210
  $plan->title,
6211
  human_time_diff( time(), strtotime( $this->_license->expiration ) )
6212
  )
6216
  $this->_store_site();
6217
  } else {
6218
  $this->_admin_notices->add(
6219
+ __fs( 'plan-downgraded-failure-message', $this->_slug ),
6220
+ __fs( 'oops', $this->_slug ) . '...',
6221
  'error'
6222
  );
6223
  }
6236
 
6237
  if ( ! $this->is_trial() ) {
6238
  $this->_admin_notices->add(
6239
+ __fs( 'trial-cancel-no-trial-message', $this->_slug ),
6240
+ __fs( 'oops', $this->_slug ) . '...',
6241
  'error'
6242
  );
6243
 
6266
  $this->_admin_notices->remove_sticky( 'plan_upgraded' );
6267
 
6268
  $this->_admin_notices->add(
6269
+ sprintf( __fs( 'trial-cancel-message', $this->_slug ), $this->_storage->trial_plan->title )
6270
  );
6271
 
6272
  $this->_admin_notices->remove_sticky( array(
6282
  unset( $this->_storage->trial_plan );
6283
  } else {
6284
  $this->_admin_notices->add(
6285
+ __fs( 'trial-cancel-failure-message', $this->_slug ),
6286
+ __fs( 'oops', $this->_slug ) . '...',
6287
  'error'
6288
  );
6289
  }
6507
  if ( ! $background ) {
6508
  $this->_admin_notices->add(
6509
  sprintf(
6510
+ __fs( 'version-x-released', $this->_slug ) . ' ' . __fs( 'please-download-x', $this->_slug ),
6511
  $update->version,
6512
  sprintf(
6513
  '<a href="%s" target="_blank">%s</a>',
6514
  $this->get_account_url( 'download_latest' ),
6515
+ sprintf( __fs( 'latest-x-version', $this->_slug ), $this->_site->plan->title )
6516
  )
6517
  ),
6518
+ __fs( 'new', $this->_slug ) . '!'
6519
  );
6520
  }
6521
  } else if ( false === $new_version && ! $background ) {
6522
  $this->_admin_notices->add(
6523
+ __fs( 'you-have-latest', $this->_slug ),
6524
+ __fs( 'you-are-good', $this->_slug )
6525
  );
6526
  }
6527
 
6719
 
6720
  if ( ! isset( $result->error ) ) {
6721
  $this->_admin_notices->add( sprintf(
6722
+ __fs( 'verification-email-sent-message', $this->_slug ),
6723
  sprintf( '<a href="mailto:%1s">%2s</a>', esc_url( $this->_user->email ), $this->_user->email )
6724
  ) );
6725
  } else {
6846
  $candidate_email = fs_request_get( 'candidate_email', '' );
6847
 
6848
  if ( $this->init_change_owner( $candidate_email ) ) {
6849
+ $this->_admin_notices->add( sprintf( __fs( 'change-owner-request-sent-x', $this->_slug ), '<b>' . $this->_user->email . '</b>' ) );
6850
  }
6851
  break;
6852
  case 'owner_confirmed':
6853
  $candidate_email = fs_request_get( 'candidate_email', '' );
6854
 
6855
+ $this->_admin_notices->add( sprintf( __fs( 'change-owner-request_owner-confirmed', $this->_slug ), '<b>' . $candidate_email . '</b>' ) );
6856
  break;
6857
  case 'candidate_confirmed':
6858
  if ( $this->complete_change_owner() ) {
6859
  $this->_admin_notices->add_sticky(
6860
+ sprintf( __fs( 'change-owner-request_candidate-confirmed', $this->_slug ), '<b>' . $this->_user->email . '</b>' ),
6861
  'ownership_changed',
6862
+ __fs( 'congrats', $this->_slug ) . '!'
6863
  );
6864
  } else {
6865
  // @todo Handle failed ownership change message.
6879
  switch ( $result->error->code ) {
6880
  case 'user_exist':
6881
  $this->_admin_notices->add(
6882
+ __fs( 'user-exist-message', $this->_slug ) . ' ' .
6883
+ sprintf( __fs( 'user-exist-message_ownership', $this->_slug ), '<b>' . $new_email . '</b>' ) .
6884
  sprintf(
6885
  '<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
6886
  $this->get_account_url( 'change_owner', array(
6887
  'state' => 'init',
6888
  'candidate_email' => $new_email
6889
  ) ),
6890
+ __fs( 'change-ownership', $this->_slug )
6891
  ),
6892
+ __fs( 'oops', $this->_slug ) . '...',
6893
  'error'
6894
  );
6895
  break;
6896
  }
6897
  } else {
6898
+ $this->_admin_notices->add( __fs( 'email-updated-message', $this->_slug ) );
6899
  }
6900
 
6901
  return;
6907
 
6908
  if ( isset( $result->error ) ) {
6909
  $this->_admin_notices->add(
6910
+ __fs( 'name-update-failed-message', $this->_slug ),
6911
+ __fs( 'oops', $this->_slug ) . '...',
6912
  'error'
6913
  );
6914
  } else {
6915
+ $this->_admin_notices->add( __fs( 'name-updated-message', $this->_slug ) );
6916
  }
6917
 
6918
  return;
6965
  $this->do_action( 'account_property_edit', 'site', $site_property, $site_property_value );
6966
 
6967
  $this->_admin_notices->add( sprintf(
6968
+ __fs( 'x-updated', $this->_slug ),
6969
  '<b>' . str_replace( '_', ' ', $p ) . '</b>' ) );
6970
 
6971
  return;
7059
 
7060
  if ( ! $this->is_registered() && $this->is_org_repo_compliant() ) {
7061
  $this->_admin_notices->add(
7062
+ sprintf( __fs( 'addons-info-external-message', $this->_slug ), '<b>' . $this->get_plugin_name() . '</b>' ),
7063
+ __fs( 'heads-up', $this->_slug ),
7064
  'update-nag'
7065
  );
7066
  }
7124
  *
7125
  * @uses remove_all_actions()
7126
  */
7127
+ private static function _hide_admin_notices() {
7128
  remove_all_actions( 'admin_notices' );
7129
  remove_all_actions( 'network_admin_notices' );
7130
  remove_all_actions( 'all_admin_notices' );
7131
  remove_all_actions( 'user_admin_notices' );
7132
  }
7133
 
7134
+ static function _clean_admin_content_section_hook() {
7135
+ self::_hide_admin_notices();
7136
 
7137
  // Hide footer.
7138
  echo '<style>#wpfooter { display: none !important; }</style>';
7144
  * @author Vova Feldman (@svovaf)
7145
  * @since 1.0.3
7146
  */
7147
+ static function _clean_admin_content_section() {
7148
+ add_action( 'admin_head', 'Freemius::_clean_admin_content_section_hook' );
7149
  }
7150
 
7151
  /* CSS & JavaScript
7299
  $require_subscription = $paid_plan->is_require_subscription;
7300
  $upgrade_url = $this->get_trial_url();
7301
  $cc_string = $require_subscription ?
7302
+ sprintf( __fs( 'no-commitment-for-x-days', $this->_slug ), $paid_plan->trial_period ) :
7303
+ __fs( 'no-cc-required', $this->_slug ) . '!';
7304
 
7305
 
7306
  $total_paid_plans = count( $this->_plans ) - ( FS_Plan_Manager::instance()->has_free_plan( $this->_plans ) ? 1 : 0 );
7308
  if ( $total_paid_plans === $trial_plans_count ) {
7309
  // All paid plans have trials.
7310
  $message = sprintf(
7311
+ __fs( 'hey', $this->_slug ) . '! ' . __fs( 'trial-x-promotion-message', $this->_slug ),
7312
  sprintf( '<b>%s</b>', $this->get_plugin_name() ),
7313
+ strtolower( __fs( 'awesome', $this->_slug ) ),
7314
  $paid_plan->trial_period
7315
  );
7316
  } else {
7327
 
7328
  // Not all paid plans have trials.
7329
  $message = sprintf(
7330
+ __fs( 'hey', $this->_slug ) . '! ' . __fs( 'trial-x-promotion-message', $this->_slug ),
7331
  sprintf( '<b>%s</b>', $this->get_plugin_name() ),
7332
  $plans_string,
7333
  $paid_plan->trial_period
7340
  $message .= ' ' . sprintf(
7341
  '<a style="margin-left: 10px;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
7342
  $upgrade_url,
7343
+ __fs( 'start-free-trial', $this->_slug )
7344
  );
7345
 
7346
  $this->_admin_notices->add_sticky(
7437
  if ( $this->is_registered() ) {
7438
  if ( ! $this->is_paying() && $this->has_paid_plan() ) {
7439
  $this->add_plugin_action_link(
7440
+ __fs( 'upgrade', $this->_slug ),
7441
  $this->get_upgrade_url(),
7442
  false,
7443
  20,
7447
 
7448
  if ( $this->_has_addons() ) {
7449
  $this->add_plugin_action_link(
7450
+ __fs( 'add-ons', $this->_slug ),
7451
  $this->_get_admin_page_url( 'addons' ),
7452
  false,
7453
  WP_FS__DEFAULT_PRIORITY,
7670
 
7671
  #endregion ------------------------------------------------------------------
7672
 
7673
+ #region Permissions ------------------------------------------------------------------
7674
+
7675
+ /**
7676
+ * Check if specific permission requested.
7677
+ *
7678
+ * @author Vova Feldman (@svovaf)
7679
+ * @since 1.1.6
7680
+ *
7681
+ * @param string $permission
7682
+ *
7683
+ * @return bool
7684
+ */
7685
+ function is_permission_requested( $permission ) {
7686
+ return isset( $this->_permissions[ $permission ] ) && ( true === $this->_permissions[ $permission ] );
7687
+ }
7688
+
7689
+ #endregion Permissions ------------------------------------------------------------------
7690
+
7691
  #region Marketing ------------------------------------------------------------------
7692
 
7693
  /**
classes/freemius/includes/class-fs-plugin-updater.php CHANGED
@@ -233,7 +233,7 @@ if ( !isset($info->error) ) {
233
  $new_version = $this->_fs->_fetch_latest_version( $is_addon ? $addon->id : false );
234
 
235
  if ( $is_addon ) {
236
- $data->name = $addon->title . ' ' . __fs( 'addon' );
237
  $data->slug = $addon->slug;
238
  $data->url = WP_FS__ADDRESS;
239
  $data->package = $new_version->url;
233
  $new_version = $this->_fs->_fetch_latest_version( $is_addon ? $addon->id : false );
234
 
235
  if ( $is_addon ) {
236
+ $data->name = $addon->title . ' ' . __fs( 'addon', $this->_fs->get_slug() );
237
  $data->slug = $addon->slug;
238
  $data->url = WP_FS__ADDRESS;
239
  $data->package = $new_version->url;
classes/freemius/includes/fs-core-functions.php CHANGED
@@ -58,20 +58,6 @@
58
  return ob_get_clean();
59
  }
60
 
61
- function __fs( $key ) {
62
- global $fs_text;
63
-
64
- if ( ! isset( $fs_text ) ) {
65
- require_once( dirname( __FILE__ ) . '/i18n.php' );
66
- }
67
-
68
- return isset( $fs_text[ $key ] ) ? $fs_text[ $key ] : $key;
69
- }
70
-
71
- function _efs( $key ) {
72
- echo __fs( $key );
73
- }
74
-
75
  /* Scripts and styles including.
76
  --------------------------------------------------------------------------------------------*/
77
  function fs_enqueue_local_style( $handle, $path, $deps = array(), $ver = false, $media = 'all' ) {
@@ -96,8 +82,8 @@
96
  wp_enqueue_script( $handle, plugins_url( plugin_basename( WP_FS__DIR_JS . '/' . trim( $path, '/' ) ) ), $deps, $ver, $in_footer );
97
  }
98
 
99
- function fs_img_url( $path ) {
100
- return plugins_url( plugin_basename( WP_FS__DIR_IMG . '/' . trim( $path, '/' ) ) );
101
  }
102
 
103
  /* Request handlers.
@@ -194,91 +180,6 @@
194
  href="<?php echo wp_nonce_url( freemius( $slug )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ) ?>"><?php echo $title ?></a><?php
195
  }
196
 
197
- /* Core Redirect (copied from BuddyPress).
198
- --------------------------------------------------------------------------------------------*/
199
- /**
200
- * Redirects to another page, with a workaround for the IIS Set-Cookie bug.
201
- *
202
- * @link http://support.microsoft.com/kb/q176113/
203
- * @since 1.5.1
204
- * @uses apply_filters() Calls 'wp_redirect' hook on $location and $status.
205
- *
206
- * @param string $location The path to redirect to
207
- * @param int $status Status code to use
208
- *
209
- * @return bool False if $location is not set
210
- */
211
- function fs_redirect( $location, $status = 302 ) {
212
- global $is_IIS;
213
-
214
- if ( headers_sent() ) {
215
- return false;
216
- }
217
-
218
- if ( ! $location ) // allows the wp_redirect filter to cancel a redirect
219
- {
220
- return false;
221
- }
222
-
223
- $location = fs_sanitize_redirect( $location );
224
-
225
- if ( $is_IIS ) {
226
- header( "Refresh: 0;url=$location" );
227
- } else {
228
- if ( php_sapi_name() != 'cgi-fcgi' ) {
229
- status_header( $status );
230
- } // This causes problems on IIS and some FastCGI setups
231
- header( "Location: $location" );
232
- }
233
-
234
- return true;
235
- }
236
-
237
- /**
238
- * Sanitizes a URL for use in a redirect.
239
- *
240
- * @since 2.3
241
- *
242
- * @param string $location
243
- *
244
- * @return string redirect-sanitized URL
245
- */
246
- function fs_sanitize_redirect( $location ) {
247
- $location = preg_replace( '|[^a-z0-9-~+_.?#=&;,/:%!]|i', '', $location );
248
- $location = fs_kses_no_null( $location );
249
-
250
- // remove %0d and %0a from location
251
- $strip = array( '%0d', '%0a' );
252
- $found = true;
253
- while ( $found ) {
254
- $found = false;
255
- foreach ( (array) $strip as $val ) {
256
- while ( strpos( $location, $val ) !== false ) {
257
- $found = true;
258
- $location = str_replace( $val, '', $location );
259
- }
260
- }
261
- }
262
-
263
- return $location;
264
- }
265
-
266
- /**
267
- * Removes any NULL characters in $string.
268
- *
269
- * @since 1.0.0
270
- *
271
- * @param string $string
272
- *
273
- * @return string
274
- */
275
- function fs_kses_no_null( $string ) {
276
- $string = preg_replace( '/\0+/', '', $string );
277
- $string = preg_replace( '/(\\\\0)+/', '', $string );
278
-
279
- return $string;
280
- }
281
-
282
  /*function fs_error_handler($errno, $errstr, $errfile, $errline)
283
  {
284
  if (false === strpos($errfile, 'freemius/'))
@@ -302,29 +203,6 @@
302
 
303
  set_error_handler('fs_error_handler');*/
304
 
305
- if ( function_exists( 'wp_normalize_path' ) ) {
306
- /**
307
- * Normalize a filesystem path.
308
- *
309
- * Replaces backslashes with forward slashes for Windows systems, and ensures
310
- * no duplicate slashes exist.
311
- *
312
- * @param string $path Path to normalize.
313
- *
314
- * @return string Normalized path.
315
- */
316
- function fs_normalize_path( $path ) {
317
- return wp_normalize_path( $path );
318
- }
319
- } else {
320
- function fs_normalize_path( $path ) {
321
- $path = str_replace( '\\', '/', $path );
322
- $path = preg_replace( '|/+|', '/', $path );
323
-
324
- return $path;
325
- }
326
- }
327
-
328
  function fs_nonce_url( $actionurl, $action = - 1, $name = '_wpnonce' ) {
329
  // $actionurl = str_replace( '&amp;', '&', $actionurl );
330
  return add_query_arg( $name, wp_create_nonce( $action ), $actionurl );
58
  return ob_get_clean();
59
  }
60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  /* Scripts and styles including.
62
  --------------------------------------------------------------------------------------------*/
63
  function fs_enqueue_local_style( $handle, $path, $deps = array(), $ver = false, $media = 'all' ) {
82
  wp_enqueue_script( $handle, plugins_url( plugin_basename( WP_FS__DIR_JS . '/' . trim( $path, '/' ) ) ), $deps, $ver, $in_footer );
83
  }
84
 
85
+ function fs_img_url( $path, $img_dir = WP_FS__DIR_IMG ) {
86
+ return plugins_url( plugin_basename( $img_dir . '/' . trim( $path, '/' ) ) );
87
  }
88
 
89
  /* Request handlers.
180
  href="<?php echo wp_nonce_url( freemius( $slug )->_get_admin_page_url( $page, array_merge( $params, array( 'fs_action' => $action ) ) ), $action ) ?>"><?php echo $title ?></a><?php
181
  }
182
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  /*function fs_error_handler($errno, $errstr, $errfile, $errline)
184
  {
185
  if (false === strpos($errfile, 'freemius/'))
203
 
204
  set_error_handler('fs_error_handler');*/
205
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
206
  function fs_nonce_url( $actionurl, $action = - 1, $name = '_wpnonce' ) {
207
  // $actionurl = str_replace( '&amp;', '&', $actionurl );
208
  return add_query_arg( $name, wp_create_nonce( $action ), $actionurl );
classes/freemius/includes/fs-essential-functions.php ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package Freemius
4
+ * @copyright Copyright (c) 2015, Freemius, Inc.
5
+ * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
6
+ * @since 1.1.5
7
+ */
8
+
9
+ if ( ! function_exists( 'fs_normalize_path' ) ) {
10
+ if ( function_exists( 'wp_normalize_path' ) ) {
11
+ /**
12
+ * Normalize a filesystem path.
13
+ *
14
+ * Replaces backslashes with forward slashes for Windows systems, and ensures
15
+ * no duplicate slashes exist.
16
+ *
17
+ * @param string $path Path to normalize.
18
+ *
19
+ * @return string Normalized path.
20
+ */
21
+ function fs_normalize_path( $path ) {
22
+ return wp_normalize_path( $path );
23
+ }
24
+ } else {
25
+ function fs_normalize_path( $path ) {
26
+ $path = str_replace( '\\', '/', $path );
27
+ $path = preg_replace( '|/+|', '/', $path );
28
+
29
+ return $path;
30
+ }
31
+ }
32
+ }
33
+
34
+ #region Core Redirect (copied from BuddyPress) -----------------------------------------
35
+
36
+ if ( ! function_exists( 'fs_redirect' ) ) {
37
+ /**
38
+ * Redirects to another page, with a workaround for the IIS Set-Cookie bug.
39
+ *
40
+ * @link http://support.microsoft.com/kb/q176113/
41
+ * @since 1.5.1
42
+ * @uses apply_filters() Calls 'wp_redirect' hook on $location and $status.
43
+ *
44
+ * @param string $location The path to redirect to
45
+ * @param int $status Status code to use
46
+ *
47
+ * @return bool False if $location is not set
48
+ */
49
+ function fs_redirect( $location, $status = 302 ) {
50
+ global $is_IIS;
51
+
52
+ if ( headers_sent() ) {
53
+ return false;
54
+ }
55
+
56
+ if ( ! $location ) // allows the wp_redirect filter to cancel a redirect
57
+ {
58
+ return false;
59
+ }
60
+
61
+ $location = fs_sanitize_redirect( $location );
62
+
63
+ if ( $is_IIS ) {
64
+ header( "Refresh: 0;url=$location" );
65
+ } else {
66
+ if ( php_sapi_name() != 'cgi-fcgi' ) {
67
+ status_header( $status );
68
+ } // This causes problems on IIS and some FastCGI setups
69
+ header( "Location: $location" );
70
+ }
71
+
72
+ return true;
73
+ }
74
+
75
+ /**
76
+ * Sanitizes a URL for use in a redirect.
77
+ *
78
+ * @since 2.3
79
+ *
80
+ * @param string $location
81
+ *
82
+ * @return string redirect-sanitized URL
83
+ */
84
+ function fs_sanitize_redirect( $location ) {
85
+ $location = preg_replace( '|[^a-z0-9-~+_.?#=&;,/:%!]|i', '', $location );
86
+ $location = fs_kses_no_null( $location );
87
+
88
+ // remove %0d and %0a from location
89
+ $strip = array( '%0d', '%0a' );
90
+ $found = true;
91
+ while ( $found ) {
92
+ $found = false;
93
+ foreach ( (array) $strip as $val ) {
94
+ while ( strpos( $location, $val ) !== false ) {
95
+ $found = true;
96
+ $location = str_replace( $val, '', $location );
97
+ }
98
+ }
99
+ }
100
+
101
+ return $location;
102
+ }
103
+
104
+ /**
105
+ * Removes any NULL characters in $string.
106
+ *
107
+ * @since 1.0.0
108
+ *
109
+ * @param string $string
110
+ *
111
+ * @return string
112
+ */
113
+ function fs_kses_no_null( $string ) {
114
+ $string = preg_replace( '/\0+/', '', $string );
115
+ $string = preg_replace( '/(\\\\0)+/', '', $string );
116
+
117
+ return $string;
118
+ }
119
+ }
120
+
121
+ #endregion Core Redirect (copied from BuddyPress) -----------------------------------------
122
+
123
+ #region
124
+
125
+ if ( ! function_exists( '__fs' ) ) {
126
+ global $fs_text_overrides;
127
+
128
+ if ( ! isset( $fs_text_overrides ) ) {
129
+ $fs_text_overrides = array();
130
+ }
131
+
132
+ /**
133
+ * Retrieve a translated text by key.
134
+ *
135
+ * @author Vova Feldman (@svovaf)
136
+ * @since 1.1.4
137
+ *
138
+ * @param string $key
139
+ * @param string $slug
140
+ *
141
+ * @return string
142
+ *
143
+ * @global $fs_text , $fs_text_overrides
144
+ */
145
+ function __fs( $key, $slug = 'freemius' ) {
146
+ global $fs_text, $fs_text_overrides;
147
+
148
+ if ( ! isset( $fs_text ) ) {
149
+ require_once( dirname( __FILE__ ) . '/i18n.php' );
150
+ }
151
+
152
+ if ( isset( $fs_text_overrides[ $slug ] ) &&
153
+ isset( $fs_text_overrides[ $slug ][ $key ] )
154
+ ) {
155
+ return $fs_text_overrides[ $slug ][ $key ];
156
+ }
157
+
158
+ return isset( $fs_text[ $key ] ) ?
159
+ $fs_text[ $key ] :
160
+ $key;
161
+ }
162
+
163
+ /**
164
+ * Display a translated text by key.
165
+ *
166
+ * @author Vova Feldman (@svovaf)
167
+ * @since 1.1.4
168
+ *
169
+ * @param string $key
170
+ * @param string $slug
171
+ */
172
+ function _efs( $key, $slug = 'freemius' ) {
173
+ echo __fs( $key, $slug );
174
+ }
175
+
176
+ /**
177
+ * Override default i18n text phrases.
178
+ *
179
+ * @author Vova Feldman (@svovaf)
180
+ * @since 1.1.6
181
+ *
182
+ * @param string[] $key_value
183
+ * @param string $slug
184
+ *
185
+ * @global $fs_text_overrides
186
+ */
187
+ function fs_override_i18n( array $key_value, $slug = 'freemius' ) {
188
+ global $fs_text_overrides;
189
+
190
+ if ( ! isset( $fs_text_overrides[ $slug ] ) ) {
191
+ $fs_text_overrides[ $slug ] = array();
192
+ }
193
+
194
+ foreach ( $key_value as $key => $value ) {
195
+ $fs_text_overrides[ $slug ][ $key ] = $value;
196
+ }
197
+ }
198
+ }
199
+
200
+ /**
201
+ * Leverage backtrace to find caller plugin file path.
202
+ *
203
+ * @author Vova Feldman (@svovaf)
204
+ * @since 1.0.6
205
+ *
206
+ * @return string
207
+ */
208
+ function fs_find_caller_plugin_file() {
209
+ /**
210
+ * All the code below will be executed once on activation.
211
+ * If the user changes the main plugin's file name, the file_exists()
212
+ * will catch it.
213
+ */
214
+ if ( ! function_exists( 'get_plugins' ) ) {
215
+ require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
216
+ }
217
+
218
+ $all_plugins = get_plugins();
219
+ $all_plugins_paths = array();
220
+
221
+ // Get active plugin's main files real full names (might be symlinks).
222
+ foreach ( $all_plugins as $relative_path => &$data ) {
223
+ $all_plugins_paths[] = fs_normalize_path( realpath( WP_PLUGIN_DIR . '/' . $relative_path ) );
224
+ }
225
+
226
+ $plugin_file = null;
227
+ for ( $i = 1, $bt = debug_backtrace(), $len = count( $bt ); $i < $len; $i ++ ) {
228
+ if ( in_array( fs_normalize_path( $bt[ $i ]['file'] ), $all_plugins_paths ) ) {
229
+ $plugin_file = $bt[ $i ]['file'];
230
+ break;
231
+ }
232
+ }
233
+
234
+ if ( is_null( $plugin_file ) ) {
235
+ // Throw an error to the developer in case of some edge case dev environment.
236
+ wp_die( __fs( 'failed-finding-main-path' ), __fs( 'error' ), array( 'back_link' => true ) );
237
+ }
238
+
239
+ return $plugin_file;
240
+ }
241
+
242
+ /**
243
+ * Update SDK newest version reference.
244
+ *
245
+ * @author Vova Feldman (@svovaf)
246
+ * @since 1.1.6
247
+ *
248
+ * @param string $sdk_relative_path
249
+ * @param string|bool $plugin_file
250
+ *
251
+ * @global $fs_active_plugins
252
+ */
253
+ function fs_update_sdk_newest_version( $sdk_relative_path, $plugin_file = false ) {
254
+ global $fs_active_plugins;
255
+
256
+ if ( ! is_string( $plugin_file ) ) {
257
+ $plugin_file = plugin_basename( fs_find_caller_plugin_file() );
258
+ }
259
+
260
+ $fs_active_plugins->newest = (object) array(
261
+ 'plugin_path' => $plugin_file,
262
+ 'sdk_path' => $sdk_relative_path,
263
+ 'version' => $fs_active_plugins->plugins[ $sdk_relative_path ]->version,
264
+ 'in_activation' => ! is_plugin_active( $plugin_file ),
265
+ 'timestamp' => time(),
266
+ );
267
+
268
+ // Update DB with latest SDK version and path.
269
+ update_option( 'fs_active_plugins', $fs_active_plugins );
270
+ }
271
+
272
+ /**
273
+ * Reorder the plugins load order so the plugin with the newest Freemius SDK is loaded first.
274
+ *
275
+ * @author Vova Feldman (@svovaf)
276
+ * @since 1.1.6
277
+ *
278
+ * @return bool Was plugin order changed. Return false if plugin was loaded first anyways.
279
+ *
280
+ * @global $fs_active_plugins
281
+ */
282
+ function fs_newest_sdk_plugin_first() {
283
+ global $fs_active_plugins;
284
+
285
+ $active_plugins = get_option( 'active_plugins' );
286
+ $newest_sdk_plugin_key = array_search( $fs_active_plugins->newest->plugin_path, $active_plugins );
287
+ if ( 0 == $newest_sdk_plugin_key ) {
288
+ // if it's 0 it's the first plugin already, no need to continue
289
+ return false;
290
+ }
291
+
292
+ array_splice( $active_plugins, $newest_sdk_plugin_key, 1 );
293
+ array_unshift( $active_plugins, $fs_active_plugins->newest->plugin_path );
294
+ update_option( 'active_plugins', $active_plugins );
295
+
296
+ return true;
297
+ }
298
+
299
+ /**
300
+ * Go over all Freemius SDKs in the system and find and "remember"
301
+ * the newest SDK which is associated with an active plugin.
302
+ *
303
+ * @author Vova Feldman (@svovaf)
304
+ * @since 1.1.6
305
+ *
306
+ * @global $fs_active_plugins
307
+ */
308
+ function fs_fallback_to_newest_active_sdk() {
309
+ global $fs_active_plugins;
310
+
311
+ $newest_sdk_data = null;
312
+ $newest_sdk_path = null;
313
+
314
+ foreach ( $fs_active_plugins->plugins as $sdk_relative_path => $data ) {
315
+ if ( is_null( $newest_sdk_data ) || version_compare( $data->version, $newest_sdk_data->version, '>' )
316
+ ) {
317
+ // If plugin inactive or SDK starter file doesn't exist, remove SDK reference.
318
+ if ( ! is_plugin_active( $data->plugin_path ) ||
319
+ ! file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $sdk_relative_path . '/start.php' ) )
320
+ ) {
321
+ unset( $fs_active_plugins->plugins[ $sdk_relative_path ] );
322
+
323
+ // No need to store the data since it will be stored in fs_update_sdk_newest_version()
324
+ // or explicitly with update_option().
325
+ } else {
326
+ $newest_sdk_data = $data;
327
+ $newest_sdk_path = $sdk_relative_path;
328
+ }
329
+ }
330
+ }
331
+
332
+ if ( is_null( $newest_sdk_data ) ) {
333
+ // Couldn't find any SDK reference.
334
+ $fs_active_plugins = new stdClass();
335
+ update_option( 'fs_active_plugins', $fs_active_plugins );
336
+ } else {
337
+ fs_update_sdk_newest_version( $newest_sdk_path, $newest_sdk_data->plugin_path );
338
+ }
339
+ }
classes/freemius/includes/fs-plugin-functions.php CHANGED
@@ -91,7 +91,6 @@
91
  'changelog' => _x( 'Changelog', 'Plugin installer section title' ),
92
  'reviews' => _x( 'Reviews', 'Plugin installer section title' ),
93
  'other_notes' => _x( 'Other Notes', 'Plugin installer section title' ),
94
- 'features' => __fs( 'features-and-pricing' ),
95
  );
96
 
97
  // Sanitize HTML
@@ -105,6 +104,9 @@
105
  }
106
  }
107
 
 
 
 
108
  $_tab = esc_attr( $tab );
109
 
110
  $section = isset( $_REQUEST['section'] ) ? wp_unslash( $_REQUEST['section'] ) : 'description'; // Default to the Description tab, Do not translate, API returns English.
@@ -170,12 +172,12 @@
170
  <?php if ( isset( $api->plans ) ) : ?>
171
  <div class="plugin-information-pricing">
172
  <?php foreach ($api->plans as $plan) : ?>
173
- <h3 data-plan="<?php echo $plan->id ?>"><?php printf( __fs( 'x-plan' ), $plan->title ) ?></h3>
174
  <ul>
175
  <?php $billing_cycle = 'annual' ?>
176
  <?php if ( 1 === count( $plan->pricing ) && 1 == $plan->pricing[0]->licenses ) : ?>
177
  <?php $pricing = $plan->pricing[0] ?>
178
- <li><label><?php _efs( 'price' ) ?>: $<?php
179
  if ( isset( $pricing->annual_price ) ) {
180
  echo $pricing->annual_price . ( $plan->is_block_features ? ' / year' : '' );
181
  $billing_cycle = 'annual';
@@ -194,13 +196,13 @@
194
  value="<?php echo $pricing->id ?>"<?php checked( $first, true ) ?>><?php
195
  switch ( $pricing->licenses ) {
196
  case '1':
197
- _efs( 'license-single-site' );
198
  break;
199
  case null:
200
- _efs( 'license-unlimited' );
201
  break;
202
  default:
203
- printf( __fs( 'license-x-sites' ), $pricing->licenses );
204
  break;
205
  }
206
  ?> - $<?php
@@ -223,7 +225,7 @@
223
  'plan_id' => $plan->id,
224
  'pricing_id' => $plan->pricing[0]->id,
225
  'billing_cycle' => $billing_cycle,
226
- ), $api->checkout_link ) ) . '" target="_parent">' . __fs( 'purchase' ) . '</a>' ?>
227
  </div>
228
  <?php endforeach ?>
229
  <?php wp_enqueue_script( 'jquery' ); ?>
@@ -243,7 +245,7 @@
243
  </script>
244
  <?php endif ?>
245
  <div>
246
- <h3><?php _efs( 'details' ) ?></h3>
247
  <ul>
248
  <?php if ( ! empty( $api->version ) ) { ?>
249
  <li><strong><?php _e( 'Version:' ); ?></strong> <?php echo $api->version; ?></li>
@@ -377,7 +379,7 @@
377
  'plan_id' => $plan->id,
378
  'pricing_id' => $plan->pricing[0]->id,
379
  'billing_cycle' => $billing_cycle,
380
- ), $api->checkout_link ) ) . '" target="_parent">' . __fs( 'purchase' ) . '</a>';
381
 
382
  // @todo Add Cart concept.
383
  // echo ' <a class="button right" href="' . $status['url'] . '" target="_parent">' . __( 'Add to Cart' ) . '</a>';
91
  'changelog' => _x( 'Changelog', 'Plugin installer section title' ),
92
  'reviews' => _x( 'Reviews', 'Plugin installer section title' ),
93
  'other_notes' => _x( 'Other Notes', 'Plugin installer section title' ),
 
94
  );
95
 
96
  // Sanitize HTML
104
  }
105
  }
106
 
107
+ // Add after $api->slug is ready.
108
+ $plugins_section_titles['features'] = __fs( 'features-and-pricing', $api->slug );
109
+
110
  $_tab = esc_attr( $tab );
111
 
112
  $section = isset( $_REQUEST['section'] ) ? wp_unslash( $_REQUEST['section'] ) : 'description'; // Default to the Description tab, Do not translate, API returns English.
172
  <?php if ( isset( $api->plans ) ) : ?>
173
  <div class="plugin-information-pricing">
174
  <?php foreach ($api->plans as $plan) : ?>
175
+ <h3 data-plan="<?php echo $plan->id ?>"><?php printf( __fs( 'x-plan', $api->slug ), $plan->title ) ?></h3>
176
  <ul>
177
  <?php $billing_cycle = 'annual' ?>
178
  <?php if ( 1 === count( $plan->pricing ) && 1 == $plan->pricing[0]->licenses ) : ?>
179
  <?php $pricing = $plan->pricing[0] ?>
180
+ <li><label><?php _efs( 'price', $api->slug ) ?>: $<?php
181
  if ( isset( $pricing->annual_price ) ) {
182
  echo $pricing->annual_price . ( $plan->is_block_features ? ' / year' : '' );
183
  $billing_cycle = 'annual';
196
  value="<?php echo $pricing->id ?>"<?php checked( $first, true ) ?>><?php
197
  switch ( $pricing->licenses ) {
198
  case '1':
199
+ _efs( 'license-single-site', $api->slug );
200
  break;
201
  case null:
202
+ _efs( 'license-unlimited', $api->slug );
203
  break;
204
  default:
205
+ printf( __fs( 'license-x-sites', $api->slug ), $pricing->licenses );
206
  break;
207
  }
208
  ?> - $<?php
225
  'plan_id' => $plan->id,
226
  'pricing_id' => $plan->pricing[0]->id,
227
  'billing_cycle' => $billing_cycle,
228
+ ), $api->checkout_link ) ) . '" target="_parent">' . __fs( 'purchase', $api->slug ) . '</a>' ?>
229
  </div>
230
  <?php endforeach ?>
231
  <?php wp_enqueue_script( 'jquery' ); ?>
245
  </script>
246
  <?php endif ?>
247
  <div>
248
+ <h3><?php _efs( 'details', $api->slug ) ?></h3>
249
  <ul>
250
  <?php if ( ! empty( $api->version ) ) { ?>
251
  <li><strong><?php _e( 'Version:' ); ?></strong> <?php echo $api->version; ?></li>
379
  'plan_id' => $plan->id,
380
  'pricing_id' => $plan->pricing[0]->id,
381
  'billing_cycle' => $billing_cycle,
382
+ ), $api->checkout_link ) ) . '" target="_parent">' . __fs( 'purchase', $api->slug ) . '</a>';
383
 
384
  // @todo Add Cart concept.
385
  // echo ' <a class="button right" href="' . $status['url'] . '" target="_parent">' . __( 'Add to Cart' ) . '</a>';
classes/freemius/includes/i18n.php CHANGED
@@ -1,4 +1,23 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  global $fs_text;
3
 
4
  $fs_text = array(
@@ -38,7 +57,7 @@
38
  'you-are-step-away' => __( 'You are just one step away - %s', 'freemius' ),
39
  'activate-x-now' => _x( 'Complete "%s" Activation Now', '%s - plugin name. As complete "Jetpack" activation now', 'freemius' ),
40
  'few-plugin-tweaks' => __( 'We made a few tweaks to the plugin, %s', 'freemius' ),
41
- 'optin-x-now' => __( 'Opt-in to make "%s" Better!', 'freemius' ),
42
  'error' => __( 'Error', 'freemius' ),
43
  'failed-finding-main-path' => __( 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.', 'freemius' ),
44
  #region Account
@@ -56,6 +75,8 @@
56
  'email' => __( 'Email', 'freemius' ),
57
  'verified' => __( 'Verified', 'freemius' ),
58
  'plugin' => __( 'Plugin', 'freemius' ),
 
 
59
  'title' => __( 'Title', 'freemius' ),
60
  'slug' => _x( 'Slug', 'as WP plugin slug', 'freemius' ),
61
  'id' => __( 'ID', 'freemius' ),
@@ -69,10 +90,12 @@
69
  'no-secret' => _x( 'No Secret', 'as secret encryption key missing', 'freemius' ),
70
  'no-id' => __( 'No ID', 'freemius' ),
71
  'sync-license' => _x( 'Sync License', 'as synchronize license', 'freemius' ),
 
72
  'deactivate-license' => __( 'Deactivate License', 'freemius' ),
73
  'activate' => __( 'Activate', 'freemius' ),
74
  'deactivate' => __( 'Deactivate', 'freemius' ),
75
  'active' => _x( 'Active', 'active mode', 'freemius' ),
 
76
  'install-now' => __( 'Install Now', 'freemius' ),
77
  'install-update-now' => __( 'Install Update Now', 'freemius' ),
78
  'more-information-about-x' => __( 'More information about %s', 'freemius' ),
@@ -122,14 +145,17 @@
122
  'hey-x' => _x( 'Hey %s,', 'greeting', 'freemius' ),
123
  'thanks-x' => _x( 'Thanks %s!', 'a greeting. E.g. Thanks John!', 'freemius' ),
124
  'connect-message' => __( 'In order to enjoy all our features and functionality, %s needs to connect your user, %s at %s, to %s', 'freemius' ),
 
125
  'pending-activation-message' => __( '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 complete the install.', 'freemius' ),
126
  'what-permissions' => __( 'What permissions are being granted?', 'freemius' ),
127
  'permissions-profile' => __( 'Your Profile Overview', 'freemius' ),
128
  'permissions-profile_desc' => __( 'Name and email address', 'freemius' ),
129
  'permissions-site' => __( 'Your Site Overview', 'freemius' ),
130
- 'permissions-site_desc' => __( 'Site address and WordPress version', 'freemius' ),
131
- 'permissions-events' => __( 'Current Plugin Events', 'freemius' ),
132
  'permissions-events_desc' => __( 'Activation, deactivation and uninstall', 'freemius' ),
 
 
133
  'privacy-policy' => __( 'Privacy Policy', 'freemius' ),
134
  'tos' => __( 'Terms of Service', 'freemius' ),
135
  'activating' => _x( 'Activating', 'as activating plugin', 'freemius' ),
@@ -144,9 +170,23 @@
144
  #endregion Screenshots
145
 
146
  #region Debug
 
 
 
 
 
 
 
 
 
 
 
147
  'addons-of-x' => __( 'Add Ons of Plugin %s', 'freemius' ),
148
  'delete-all-confirm' => __( 'Are you sure you want to delete the all Freemius data?', 'freemius' ),
 
149
  'delete-all-accounts' => __( 'Delete All Accounts', 'freemius' ),
 
 
150
  #endregion Debug
151
 
152
  #region Expressions
@@ -239,7 +279,6 @@
239
  'change-owner-request_owner-confirmed' => __( 'Thanks for confirming the ownership change. An email was just sent to %s for final approval.', 'freemius' ),
240
  'change-owner-request_candidate-confirmed' => __( '%s is the new owner of the account.', 'freemius' ),
241
  #endregion Change Owner
242
- 'freemius-debug' => __( 'Freemius Debug', 'freemius' ),
243
  'addon-x-cannot-run-without-y' => _x( '%s cannot run without %s.', 'addonX cannot run without pluginY', 'freemius' ),
244
  'addon-x-cannot-run-without-parent' => _x( '%s cannot run without the plugin.', 'addonX cannot run...', 'freemius' ),
245
  'plugin-x-activation-message' => _x( '%s activation was successfully completed.', 'pluginX activation was successfully...', 'freemius' ),
1
  <?php
2
+ /**
3
+ * All strings can now be overridden.
4
+ *
5
+ * For example, if we want to override:
6
+ * 'you-are-step-away' => 'You are just one step away - %s',
7
+ *
8
+ * We can use the filter:
9
+ * fs_override_i18n( array(
10
+ * 'opt-in-connect' => __( "Yes - I'm in!", '{your-text_domain}' ),
11
+ * 'skip' => __( 'Not today', '{your-text_domain}' ),
12
+ * ), '{plugin_slug}' );
13
+ *
14
+ * Or with the Freemius instance:
15
+ *
16
+ * my_freemius->override_i18n( array(
17
+ * 'opt-in-connect' => __( "Yes - I'm in!", '{your-text_domain}' ),
18
+ * 'skip' => __( 'Not today', '{your-text_domain}' ),
19
+ * );
20
+ */
21
  global $fs_text;
22
 
23
  $fs_text = array(
57
  'you-are-step-away' => __( 'You are just one step away - %s', 'freemius' ),
58
  'activate-x-now' => _x( 'Complete "%s" Activation Now', '%s - plugin name. As complete "Jetpack" activation now', 'freemius' ),
59
  'few-plugin-tweaks' => __( 'We made a few tweaks to the plugin, %s', 'freemius' ),
60
+ 'optin-x-now' => __( 'Opt-in to make "%s" Better!', 'freemius' ),
61
  'error' => __( 'Error', 'freemius' ),
62
  'failed-finding-main-path' => __( 'Freemius SDK couldn\'t find the plugin\'s main file. Please contact sdk@freemius.com with the current error.', 'freemius' ),
63
  #region Account
75
  'email' => __( 'Email', 'freemius' ),
76
  'verified' => __( 'Verified', 'freemius' ),
77
  'plugin' => __( 'Plugin', 'freemius' ),
78
+ 'plugins' => __( 'Plugins', 'freemius' ),
79
+ 'path' => _x( 'Path', 'as file/folder path', 'freemius' ),
80
  'title' => __( 'Title', 'freemius' ),
81
  'slug' => _x( 'Slug', 'as WP plugin slug', 'freemius' ),
82
  'id' => __( 'ID', 'freemius' ),
90
  'no-secret' => _x( 'No Secret', 'as secret encryption key missing', 'freemius' ),
91
  'no-id' => __( 'No ID', 'freemius' ),
92
  'sync-license' => _x( 'Sync License', 'as synchronize license', 'freemius' ),
93
+ 'sync' => _x( 'Sync', 'as synchronize', 'freemius' ),
94
  'deactivate-license' => __( 'Deactivate License', 'freemius' ),
95
  'activate' => __( 'Activate', 'freemius' ),
96
  'deactivate' => __( 'Deactivate', 'freemius' ),
97
  'active' => _x( 'Active', 'active mode', 'freemius' ),
98
+ 'is-active' => _x( 'Is Active', 'is active mode?', 'freemius' ),
99
  'install-now' => __( 'Install Now', 'freemius' ),
100
  'install-update-now' => __( 'Install Update Now', 'freemius' ),
101
  'more-information-about-x' => __( 'More information about %s', 'freemius' ),
145
  'hey-x' => _x( 'Hey %s,', 'greeting', 'freemius' ),
146
  'thanks-x' => _x( 'Thanks %s!', 'a greeting. E.g. Thanks John!', 'freemius' ),
147
  'connect-message' => __( 'In order to enjoy all our features and functionality, %s needs to connect your user, %s at %s, to %s', 'freemius' ),
148
+ 'connect-message_on-update' => __( 'Please help us improve %2$s! If you opt-in, some data about your usage of %2$s will be sent to %5$s. If you skip this, that\'s okay! %2$s will still work just fine.', 'freemius' ),
149
  'pending-activation-message' => __( '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 complete the install.', 'freemius' ),
150
  'what-permissions' => __( 'What permissions are being granted?', 'freemius' ),
151
  'permissions-profile' => __( 'Your Profile Overview', 'freemius' ),
152
  'permissions-profile_desc' => __( 'Name and email address', 'freemius' ),
153
  'permissions-site' => __( 'Your Site Overview', 'freemius' ),
154
+ 'permissions-site_desc' => __( 'Site address, WordPress version, PHP Version', 'freemius' ),
155
+ 'permissions-events' => __( 'Plugin Events', 'freemius' ),
156
  'permissions-events_desc' => __( 'Activation, deactivation and uninstall', 'freemius' ),
157
+ 'permissions-newsletter' => __( 'Newsletter', 'freemius' ),
158
+ 'permissions-newsletter_desc' => __( 'Updates, announcements, marketing, no spam', 'freemius' ),
159
  'privacy-policy' => __( 'Privacy Policy', 'freemius' ),
160
  'tos' => __( 'Terms of Service', 'freemius' ),
161
  'activating' => _x( 'Activating', 'as activating plugin', 'freemius' ),
170
  #endregion Screenshots
171
 
172
  #region Debug
173
+ 'freemius-debug' => __( 'Freemius Debug', 'freemius' ),
174
+ 'on' => _x( 'On', 'as turned on', 'freemius' ),
175
+ 'off' => _x( 'Off', 'as turned off', 'freemius' ),
176
+ 'freemius-state' => __( 'Freemius State', 'freemius' ),
177
+ 'connected' => _x( 'Connected', 'as connection was successful', 'freemius' ),
178
+ 'blocked' => _x( 'Blocked', 'as connection blocked', 'freemius' ),
179
+ 'api' => _x( 'API', 'as application program interface', 'freemius' ),
180
+ 'sdk' => _x( 'SDK', 'as software development kit versions', 'freemius' ),
181
+ 'sdk-versions' => _x( 'SDK Versions', 'as software development kit versions', 'freemius' ),
182
+ 'plugin-path' => _x( 'Plugin Path', 'as plugin folder path', 'freemius' ),
183
+ 'sdk-path' => _x( 'SDK Path', 'as sdk path', 'freemius' ),
184
  'addons-of-x' => __( 'Add Ons of Plugin %s', 'freemius' ),
185
  'delete-all-confirm' => __( 'Are you sure you want to delete the all Freemius data?', 'freemius' ),
186
+ 'actions' => __( 'Actions', 'freemius' ),
187
  'delete-all-accounts' => __( 'Delete All Accounts', 'freemius' ),
188
+ 'clear-api-cache' => __( 'Clear API Cache', 'freemius' ),
189
+ 'sync-data-from-server' => __( 'Sync Data From Server', 'freemius' ),
190
  #endregion Debug
191
 
192
  #region Expressions
279
  'change-owner-request_owner-confirmed' => __( 'Thanks for confirming the ownership change. An email was just sent to %s for final approval.', 'freemius' ),
280
  'change-owner-request_candidate-confirmed' => __( '%s is the new owner of the account.', 'freemius' ),
281
  #endregion Change Owner
 
282
  'addon-x-cannot-run-without-y' => _x( '%s cannot run without %s.', 'addonX cannot run without pluginY', 'freemius' ),
283
  'addon-x-cannot-run-without-parent' => _x( '%s cannot run without the plugin.', 'addonX cannot run...', 'freemius' ),
284
  'plugin-x-activation-message' => _x( '%s activation was successfully completed.', 'pluginX activation was successfully...', 'freemius' ),
classes/freemius/start.php CHANGED
@@ -10,13 +10,244 @@
10
  exit;
11
  }
12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  /**
14
- * Freemius hooks collection:
15
- * fs_after_license_loaded
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  */
17
 
 
 
18
  if ( ! class_exists( 'Freemius' ) ) {
19
 
 
 
 
 
20
  // Configuration should be loaded first.
21
  require_once dirname( __FILE__ ) . '/config.php';
22
 
10
  exit;
11
  }
12
 
13
+ $this_sdk_version = '1.1.6.2';
14
+
15
+ #region SDK Selection Logic --------------------------------------------------------------------
16
+
17
+ /**
18
+ * Special logic added on 1.1.6 to make sure that every Freemius powered plugin
19
+ * will ALWAYS be loaded with the newest SDK from the active Freemius powered plugins.
20
+ *
21
+ * Since Freemius SDK is backward compatible, this will make sure that all Freemius powered
22
+ * plugins will run correctly.
23
+ *
24
+ * @since 1.1.6
25
+ */
26
+
27
+ global $fs_active_plugins;
28
+
29
+ $this_sdk_relative_path = plugin_basename( dirname( __FILE__ ) );
30
+
31
+ if ( ! isset( $fs_active_plugins ) ) {
32
+ // Require SDK essentials.
33
+ require_once dirname( __FILE__ ) . '/includes/fs-essential-functions.php';
34
+
35
+ // Load all Freemius powered active plugins.
36
+ $fs_active_plugins = get_option( 'fs_active_plugins', new stdClass() );
37
+
38
+ if ( ! isset( $fs_active_plugins->plugins ) ) {
39
+ $fs_active_plugins->plugins = array();
40
+ }
41
+ }
42
+
43
+ // Update current SDK info based on the SDK path.
44
+ if ( ! isset( $fs_active_plugins->plugins[ $this_sdk_relative_path ] ) ||
45
+ $this_sdk_version != $fs_active_plugins->plugins[ $this_sdk_relative_path ]->version
46
+ ) {
47
+ $fs_active_plugins->plugins[ $this_sdk_relative_path ] = (object) array(
48
+ 'version' => $this_sdk_version,
49
+ 'timestamp' => time(),
50
+ 'plugin_path' => plugin_basename( fs_find_caller_plugin_file() ),
51
+ );
52
+ }
53
+
54
+ $is_current_sdk_newest = isset( $fs_active_plugins->newest ) && ( $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path );
55
+
56
+ if ( ! isset( $fs_active_plugins->newest ) ) {
57
+ /**
58
+ * This will be executed only once, for the first time a Freemius powered plugin is activated.
59
+ */
60
+ fs_update_sdk_newest_version( $this_sdk_relative_path );
61
+
62
+ $is_current_sdk_newest = true;
63
+ } else if ( version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '<' ) ) {
64
+ /**
65
+ * Current SDK is newer than the newest stored SDK.
66
+ */
67
+ fs_update_sdk_newest_version( $this_sdk_relative_path );
68
+
69
+ if ( class_exists( 'Freemius' ) ) {
70
+ // Older SDK version was already loaded.
71
+
72
+ if ( ! $fs_active_plugins->newest->in_activation ) {
73
+ // Re-order plugins to load this plugin first.
74
+ fs_newest_sdk_plugin_first();
75
+ }
76
+
77
+ // Refresh page.
78
+ if ( fs_redirect( $_SERVER['REQUEST_URI'] ) ) {
79
+ exit();
80
+ }
81
+ }
82
+ } else {
83
+ if ( ! function_exists( 'get_plugins' ) ) {
84
+ require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
85
+ }
86
+
87
+ $is_newest_sdk_plugin_activate = is_plugin_active( $fs_active_plugins->newest->plugin_path );
88
+
89
+ if ( $is_current_sdk_newest &&
90
+ ! $is_newest_sdk_plugin_activate &&
91
+ ! $fs_active_plugins->newest->in_activation
92
+ ) {
93
+ // If current SDK is the newest and the plugin is NOT active, it means
94
+ // that the current plugin in activation mode.
95
+ $fs_active_plugins->newest->in_activation = true;
96
+ update_option( 'fs_active_plugins', $fs_active_plugins );
97
+ }
98
+
99
+ $is_newest_sdk_path_valid = ( $is_newest_sdk_plugin_activate || $fs_active_plugins->newest->in_activation ) && file_exists( fs_normalize_path( WP_PLUGIN_DIR . '/' . $this_sdk_relative_path . '/start.php' ) );
100
+
101
+ if ( ! $is_newest_sdk_path_valid && ! $is_current_sdk_newest ) {
102
+ // Plugin with newest SDK is no longer active, or SDK was moved to a different location.
103
+ unset( $fs_active_plugins->plugins[ $fs_active_plugins->newest->sdk_path ] );
104
+ }
105
+
106
+ if ( ! ( $is_newest_sdk_plugin_activate || $fs_active_plugins->newest->in_activation ) ||
107
+ ! $is_newest_sdk_path_valid ||
108
+ // Is newest SDK downgraded.
109
+ ( $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path &&
110
+ version_compare( $fs_active_plugins->newest->version, $this_sdk_version, '>' ) )
111
+ ) {
112
+ /**
113
+ * Plugin with newest SDK is no longer active.
114
+ * OR
115
+ * The newest SDK was in the current plugin. BUT, seems like the version of
116
+ * the SDK was downgraded to a lower SDK.
117
+ */
118
+ // Find the active plugin with the newest SDK version and update the newest reference.
119
+ fs_fallback_to_newest_active_sdk();
120
+ } else {
121
+ if ( $is_newest_sdk_plugin_activate &&
122
+ $this_sdk_relative_path == $fs_active_plugins->newest->sdk_path &&
123
+ ( $fs_active_plugins->newest->in_activation ||
124
+ ( class_exists( 'Freemius' ) && ( ! defined( 'WP_FS__SDK_VERSION' ) || version_compare( WP_FS__SDK_VERSION, $this_sdk_version, '<' ) ) )
125
+ )
126
+
127
+ ) {
128
+ if ( $fs_active_plugins->newest->in_activation ) {
129
+ // Plugin no more in activation.
130
+ $fs_active_plugins->newest->in_activation = false;
131
+ update_option( 'fs_active_plugins', $fs_active_plugins );
132
+ }
133
+
134
+ // Reorder plugins to load plugin with newest SDK first.
135
+ if ( fs_newest_sdk_plugin_first() ) {
136
+ // Refresh page after re-order to make sure activated plugin loads newest SDK.
137
+ if ( class_exists( 'Freemius' ) ) {
138
+ if ( fs_redirect( $_SERVER['REQUEST_URI'] ) ) {
139
+ exit();
140
+ }
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
146
+
147
+ if ( class_exists( 'Freemius' ) ) {
148
+ // SDK was already loaded.
149
+ return;
150
+ }
151
+
152
+ if ( version_compare( $this_sdk_version, $fs_active_plugins->newest->version, '<' ) ) {
153
+ $newest_sdk_starter = fs_normalize_path( WP_PLUGIN_DIR . '/' . $fs_active_plugins->newest->sdk_path . '/start.php' );
154
+
155
+ if ( file_exists( $newest_sdk_starter ) ) {
156
+ // Reorder plugins to load plugin with newest SDK first.
157
+ fs_newest_sdk_plugin_first();
158
+
159
+ // There's a newer SDK version, load it instead of the current one!
160
+ require_once $newest_sdk_starter;
161
+
162
+ return;
163
+ }
164
+ }
165
+
166
+ #endregion SDK Selection Logic --------------------------------------------------------------------
167
+
168
+ #region Hooks & Filters Collection --------------------------------------------------------------------
169
+
170
  /**
171
+ * Freemius hooks (actions & filters) tags structure:
172
+ *
173
+ * fs_{filter/action_name}_{plugin_slug}
174
+ *
175
+ * --------------------------------------------------------
176
+ *
177
+ * Usage with WordPress' add_action() / add_filter():
178
+ *
179
+ * add_action('fs_{filter/action_name}_{plugin_slug}', $callable);
180
+ *
181
+ * --------------------------------------------------------
182
+ *
183
+ * Usage with Freemius' instance add_action() / add_filter():
184
+ *
185
+ * // No need to add 'fs_' prefix nor '_{plugin_slug}' suffix.
186
+ * my_freemius()->add_action('{action_name}', $callable);
187
+ *
188
+ * --------------------------------------------------------
189
+ *
190
+ * Freemius filters collection:
191
+ *
192
+ * fs_connect_url_{plugin_slug}
193
+ * fs_trial_promotion_message_{plugin_slug}
194
+ * fs_is_long_term_user_{plugin_slug}
195
+ * fs_uninstall_reasons_{plugin_slug}
196
+ * fs_is_plugin_update_{plugin_slug}
197
+ * fs_api_domains_{plugin_slug}
198
+ * fs_email_template_sections_{plugin_slug}
199
+ * fs_support_forum_submenu_{plugin_slug}
200
+ * fs_support_forum_url_{plugin_slug}
201
+ * fs_connect_message_{plugin_slug}
202
+ * fs_connect_message_on_update_{plugin_slug}
203
+ * fs_uninstall_confirmation_message_{plugin_slug}
204
+ * fs_pending_activation_message_{plugin_slug}
205
+ *
206
+ * --------------------------------------------------------
207
+ *
208
+ * Freemius actions collection:
209
+ *
210
+ * fs_after_license_loaded_{plugin_slug}
211
+ * fs_after_license_change_{plugin_slug}
212
+ * fs_after_plans_sync_{plugin_slug}
213
+ *
214
+ * fs_after_account_details_{plugin_slug}
215
+ * fs_after_account_user_sync_{plugin_slug}
216
+ * fs_after_account_plan_sync_{plugin_slug}
217
+ * fs_before_account_load_{plugin_slug}
218
+ * fs_after_account_connection_{plugin_slug}
219
+ * fs_account_property_edit_{plugin_slug}
220
+ * fs_account_email_verified_{plugin_slug}
221
+ * fs_account_page_load_before_departure_{plugin_slug}
222
+ * fs_before_account_delete_{plugin_slug}
223
+ * fs_after_account_delete_{plugin_slug}
224
+ *
225
+ * fs_sdk_version_update_{plugin_slug}
226
+ * fs_plugin_version_update_{plugin_slug}
227
+ *
228
+ * fs_initiated_{plugin_slug}
229
+ * fs_after_init_plugin_registered_{plugin_slug}
230
+ * fs_after_init_plugin_anonymous_{plugin_slug}
231
+ * fs_after_init_plugin_pending_activations_{plugin_slug}
232
+ * fs_after_init_addon_registered_{plugin_slug}
233
+ * fs_after_init_addon_anonymous_{plugin_slug}
234
+ * fs_after_init_addon_pending_activations_{plugin_slug}
235
+ *
236
+ * fs_after_premium_version_activation_{plugin_slug}
237
+ * fs_after_free_version_reactivation_{plugin_slug}
238
+ *
239
+ * fs_after_uninstall_{plugin_slug}
240
+ * fs_before_admin_menu_init_{plugin_slug}
241
  */
242
 
243
+ #endregion Hooks & Filters Collection --------------------------------------------------------------------
244
+
245
  if ( ! class_exists( 'Freemius' ) ) {
246
 
247
+ if ( ! defined( 'WP_FS__SDK_VERSION' ) ) {
248
+ define( 'WP_FS__SDK_VERSION', $this_sdk_version );
249
+ }
250
+
251
  // Configuration should be loaded first.
252
  require_once dirname( __FILE__ ) . '/config.php';
253
 
classes/freemius/templates/account.php CHANGED
@@ -29,14 +29,15 @@
29
 
30
  <div class="wrap">
31
  <h2 class="nav-tab-wrapper">
32
- <a href="<?php $fs->get_account_url() ?>" class="nav-tab nav-tab-active"><?php _efs( 'account' ) ?></a>
33
  <?php if ( $fs->_has_addons() ) : ?>
34
- <a href="<?php echo $fs->_get_admin_page_url( 'addons' ) ?>" class="nav-tab"><?php _efs( 'add-ons' ) ?></a>
 
35
  <?php endif ?>
36
  <?php if ( $fs->is_not_paying() && $fs->has_paid_plan() ) : ?>
37
- <a href="<?php echo $fs->get_upgrade_url() ?>" class="nav-tab"><?php _efs( 'upgrade' ) ?></a>
38
  <?php if ( ! $fs->is_trial_utilized() && $fs->has_trial_plan() ) : ?>
39
- <a href="<?php echo $fs->get_trial_url() ?>" class="nav-tab"><?php _efs( 'free-trial' ) ?></a>
40
  <?php endif ?>
41
  <?php endif ?>
42
  </h2>
@@ -46,7 +47,7 @@
46
  <div class="has-sidebar has-right-sidebar">
47
  <div class="has-sidebar-content">
48
  <div class="postbox">
49
- <h3><?php _efs( 'account-details' ) ?></h3>
50
 
51
  <div class="fs-header-actions">
52
  <ul>
@@ -56,11 +57,19 @@
56
  <?php wp_nonce_field( 'delete_account' ) ?>
57
  <a href="#" onclick="if (confirm('<?php
58
  if ( $is_active_subscription ) {
59
- echo esc_attr( sprintf( __fs( 'delete-account-x-confirm' ), $plan->title ) );
60
  } else {
61
- _efs( 'delete-account-confirm' );
62
  }
63
- ?>')) this.parentNode.submit(); return false;"><?php _efs( 'delete-account' ) ?></a>
 
 
 
 
 
 
 
 
64
  </form>
65
  </li>
66
  <?php if ( $is_paying ) : ?>
@@ -70,7 +79,7 @@
70
  <input type="hidden" name="fs_action" value="deactivate_license">
71
  <?php wp_nonce_field( 'deactivate_license' ) ?>
72
  <a href="#"
73
- onclick="if (confirm('<?php _efs( 'deactivate-license-confirm' ) ?>')) this.parentNode.submit(); return false;"><?php _efs( 'deactivate-license' ) ?></a>
74
  </form>
75
  </li>
76
  <?php if ( ! $license->is_lifetime() &&
@@ -82,17 +91,17 @@
82
  <input type="hidden" name="fs_action" value="downgrade_account">
83
  <?php wp_nonce_field( 'downgrade_account' ) ?>
84
  <a href="#"
85
- onclick="if (confirm('<?php printf( __fs( 'downgrade-x-confirm' ), $plan->title, human_time_diff( time(), strtotime( $license->expiration ) ) ) ?> <?php if ( ! $license->is_block_features ) {
86
- printf( __fs( 'after-downgrade-non-blocking' ), $plan->title );
87
  } else {
88
- printf( __fs( 'after-downgrade-blocking' ), $plan->title );
89
- }?> <?php _efs( 'proceed-confirmation' ) ?>')) this.parentNode.submit(); return false;"><?php _efs( 'downgrade' ) ?></a>
90
  </form>
91
  </li>
92
  <?php endif ?>
93
  <li>
94
  &nbsp;•&nbsp;
95
- <a href="<?php echo $fs->get_upgrade_url() ?>"><?php _efs( 'change-plan' ) ?></a>
96
  </li>
97
  <?php endif ?>
98
  </ul>
@@ -103,43 +112,43 @@
103
  $profile = array();
104
  $profile[] = array(
105
  'id' => 'user_name',
106
- 'title' => __fs( 'name' ),
107
  'value' => $name
108
  );
109
  // if (isset($user->email) && false !== strpos($user->email, '@'))
110
  $profile[] = array(
111
  'id' => 'email',
112
- 'title' => __fs( 'email' ),
113
  'value' => $user->email
114
  );
115
  if ( is_numeric( $user->id ) ) {
116
  $profile[] = array(
117
  'id' => 'user_id',
118
- 'title' => __fs( 'user-id' ),
119
  'value' => $user->id
120
  );
121
  }
122
 
123
  $profile[] = array(
124
  'id' => 'site_id',
125
- 'title' => __fs( 'site-id' ),
126
  'value' => is_string( $site->id ) ?
127
  $site->id :
128
- __fs( 'no-id' )
129
  );
130
 
131
  $profile[] = array(
132
  'id' => 'site_public_key',
133
- 'title' => __fs( 'public-key' ),
134
  'value' => $site->public_key
135
  );
136
 
137
  $profile[] = array(
138
  'id' => 'site_secret_key',
139
- 'title' => __fs( 'secret-key' ),
140
  'value' => ( ( is_string( $site->secret_key ) ) ?
141
  $site->secret_key :
142
- __fs( 'no-secret' )
143
  )
144
  );
145
 
@@ -148,24 +157,24 @@
148
 
149
  $profile[] = array(
150
  'id' => 'plan',
151
- 'title' => __fs( 'plan' ),
152
  'value' => ( is_string( $trial_plan->name ) ?
153
  strtoupper( $trial_plan->title ) . ' ' :
154
- '' ) . strtoupper( __fs( 'trial' ) )
155
  );
156
  } else {
157
  $profile[] = array(
158
  'id' => 'plan',
159
- 'title' => __fs( 'plan' ),
160
  'value' => is_string( $site->plan->name ) ?
161
  strtoupper( $site->plan->title ) :
162
- strtoupper( __fs( 'free' ) )
163
  );
164
  }
165
 
166
  $profile[] = array(
167
  'id' => 'version',
168
- 'title' => __fs( 'version' ),
169
  'value' => $fs->get_plugin_version()
170
  );
171
  ?>
@@ -185,16 +194,16 @@
185
  <td>
186
  <code><?php echo htmlspecialchars( $p['value'] ) ?></code>
187
  <?php if ( 'email' === $p['id'] && ! $user->is_verified() ) : ?>
188
- <label><?php _efs( 'not-verified' ) ?></label>
189
  <?php endif ?>
190
  <?php if ( 'plan' === $p['id'] ) : ?>
191
  <?php if ( $fs->is_trial() ) : ?>
192
- <label><?php printf( __fs( 'expires-in' ), human_time_diff( time(), strtotime( $site->trial_ends ) ) ) ?></label>
193
  <?php elseif ( is_object( $license ) && ! $license->is_lifetime() ) : ?>
194
  <?php if ( ! $is_active_subscription && ! $license->is_first_payment_pending() ) : ?>
195
- <label><?php printf( __fs( 'expires-in' ), human_time_diff( time(), strtotime( $license->expiration ) ) ) ?></label>
196
  <?php elseif ( $is_active_subscription && ! $subscription->is_first_payment_pending() ) : ?>
197
- <label><?php printf( __fs( 'renews-in' ), human_time_diff( time(), strtotime( $subscription->next_payment ) ) ) ?></label>
198
  <?php endif ?>
199
  <?php endif ?>
200
  <?php endif ?>
@@ -206,7 +215,7 @@
206
  <input type="hidden" name="fs_action" value="verify_email">
207
  <?php wp_nonce_field( 'verify_email' ) ?>
208
  <input type="submit" class="button button-small"
209
- value="<?php _efs( 'verify-email' ) ?>">
210
  </form>
211
  <?php endif ?>
212
  <?php if ( 'plan' === $p['id'] ) : ?>
@@ -220,10 +229,10 @@
220
  <?php wp_nonce_field( 'activate_license' ) ?>
221
  <input type="submit" class="button button-primary"
222
  value="<?php printf(
223
- __fs( 'activate-x-plan' ),
224
  $premium_plan->title,
225
  ( $site->is_localhost() && $license->is_free_localhost ) ?
226
- '[' . __fs( 'localhost' ) . ']' :
227
  ( 1 < $license->left() ? $license->left() . ' left' : '' )
228
  ) ?> ">
229
  </form>
@@ -231,7 +240,7 @@
231
  <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>"
232
  method="POST" class="button-group">
233
  <input type="submit" class="button"
234
- value="<?php _efs( 'sync-license' ) ?>">
235
  <input type="hidden" name="fs_action"
236
  value="<?php echo $slug ?>_sync_license">
237
  <?php wp_nonce_field( $slug . '_sync_license' ) ?>
@@ -239,8 +248,8 @@
239
  class="button<?php if ( ! $is_paying ) {
240
  echo ' button-primary';
241
  } ?> button-upgrade"><?php ( ! $is_paying ) ?
242
- _efs( 'upgrade' ) :
243
- _efs( 'change-plan' )
244
  ?></a>
245
  </form>
246
  <?php endif ?>
@@ -250,10 +259,10 @@
250
  <?php if ( $is_paying || $fs->is_trial() ) : ?>
251
  <?php if ( ! $fs->is_allowed_to_install() ) : ?>
252
  <a target="_blank" class="button button-primary"
253
- href="<?php echo $fs->_get_latest_download_local_url() ?>"><?php echo sprintf( __fs( 'download-x-version' ), $site->plan->title ) . ( is_object( $update ) ? ' [' . $update->version . ']' : '' ) ?></a>
254
  <?php elseif ( is_object( $update ) ) : ?>
255
  <a class="button button-primary"
256
- href="<?php echo wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' . $fs->get_plugin_basename() ), 'upgrade-plugin_' . $fs->get_plugin_basename() ) ?>"><?php echo __fs( 'install-update-now' ) . ' [' . $update->version . ']' ?></a>
257
  <?php endif ?>
258
  <?php endif; ?>
259
  </div>
@@ -265,7 +274,7 @@
265
  ) ) )
266
  ) : ?>
267
  <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST"
268
- onsubmit="var val = prompt('<?php printf( __fs( 'what-is-your-x' ), $p['title'] ) ?>', '<?php echo $p['value'] ?>'); if (null == val || '' === val) return false; jQuery('input[name=fs_<?php echo $p['id'] ?>_<?php echo $slug ?>]').val(val); return true;">
269
  <input type="hidden" name="fs_action" value="update_<?php echo $p['id'] ?>">
270
  <input type="hidden" name="fs_<?php echo $p['id'] ?>_<?php echo $slug ?>"
271
  value="">
@@ -300,9 +309,9 @@
300
  <thead>
301
  <tr>
302
  <th></th>
303
- <th><?php _efs( 'version' ) ?></th>
304
- <th><?php _efs( 'plan' ) ?></th>
305
- <th><?php _efs( 'expiration' ) ?></th>
306
  <th></th>
307
  <?php if ( defined( 'WP_FS__DEV_MODE' ) && WP_FS__DEV_MODE ) : ?>
308
  <th></th>
@@ -332,7 +341,7 @@
332
  ?>
333
  <?php if ( $fs_addon->is_not_paying() ) : ?>
334
  <?php if ( $is_current_license_expired ) : ?>
335
- <td><?php _efs( 'expired' ) ?></td>
336
  <?php endif ?>
337
  <?php $premium_license = $fs_addon->_get_available_premium_license() ?>
338
  <td<?php if ( ! $is_current_license_expired ) {
@@ -343,7 +352,7 @@
343
  <?php fs_ui_action_button(
344
  $slug, 'account',
345
  'activate_license',
346
- sprintf( __fs( 'activate-x-plan' ), $fs_addon->get_plan_title(), ( $site->is_localhost() && $premium_license->is_free_localhost ) ? '[localhost]' : ( 1 < $premium_license->left() ? $premium_license->left() . ' left' : '' ) ),
347
  array( 'plugin_id' => $addon_id )
348
  ) ?>
349
  <?php else : ?>
@@ -351,16 +360,16 @@
351
  <?php fs_ui_action_button(
352
  $slug, 'account',
353
  $slug . '_sync_license',
354
- __fs( 'sync-license' ),
355
  array( 'plugin_id' => $addon_id ),
356
  false
357
  ) ?>
358
  <?php echo sprintf( '<a href="%s" class="thickbox button button-primary" aria-label="%s" data-title="%s">%s</a>',
359
  esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&parent_plugin_id=' . $fs->get_id() . '&plugin=' . $addon->slug .
360
  '&TB_iframe=true&width=600&height=550' ) ),
361
- esc_attr( sprintf( __fs( 'more-information-about-x' ), $addon->title ) ),
362
  esc_attr( $addon->title ),
363
- __fs( 'upgrade' )
364
  ) ?>
365
  </div>
366
  <?php endif ?>
@@ -369,12 +378,12 @@
369
  <?php if ( is_object( $current_license ) ) : ?>
370
  <td><?php
371
  if ( $current_license->is_lifetime() ) {
372
- _efs( 'no-expiration' );
373
  } else if ( $current_license->is_expired() ) {
374
- _efs( 'expired' );
375
  } else {
376
  echo sprintf(
377
- __fs( 'in-x' ),
378
  human_time_diff( time(), strtotime( $current_license->expiration ) )
379
  );
380
  }
@@ -383,7 +392,7 @@
383
  <?php fs_ui_action_button(
384
  $slug, 'account',
385
  'deactivate_license',
386
- __fs( 'deactivate-license' ),
387
  array( 'plugin_id' => $addon_id ),
388
  false
389
  ) ?>
@@ -398,15 +407,15 @@
398
  <?php $addon_file = $fs->get_addon_basename( $addon->slug ) ?>
399
  <a class="button button-primary"
400
  href="<?php echo wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $addon_file, 'activate-plugin_' . $addon_file ) ?>"
401
- title="<?php esc_attr( __fs( 'activate-this-addon' ) ) ?>"
402
- class="edit"><?php _efs( 'activate' ) ?></a>
403
  <?php else : ?>
404
  <?php if ( $fs->is_allowed_to_install() ) : ?>
405
  <a class="button button-primary"
406
- href="<?php echo wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $addon->slug ), 'install-plugin_' . $addon->slug ) ?>"><?php _efs( 'install-now' ) ?></a>
407
  <?php else : ?>
408
  <a target="_blank" class="button button-primary"
409
- href="<?php echo $fs->_get_latest_download_local_url( $addon_id ) ?>"><?php _efs( 'download-latest' ) ?></a>
410
  <?php endif ?>
411
  <?php endif ?>
412
  </td>
@@ -418,7 +427,7 @@
418
  fs_ui_action_button(
419
  $slug, 'account',
420
  'delete_account',
421
- __fs( 'delete' ),
422
  array( 'plugin_id' => $addon_id ),
423
  false
424
  );
29
 
30
  <div class="wrap">
31
  <h2 class="nav-tab-wrapper">
32
+ <a href="<?php $fs->get_account_url() ?>" class="nav-tab nav-tab-active"><?php _efs( 'account', $slug ) ?></a>
33
  <?php if ( $fs->_has_addons() ) : ?>
34
+ <a href="<?php echo $fs->_get_admin_page_url( 'addons' ) ?>"
35
+ class="nav-tab"><?php _efs( 'add-ons', $slug ) ?></a>
36
  <?php endif ?>
37
  <?php if ( $fs->is_not_paying() && $fs->has_paid_plan() ) : ?>
38
+ <a href="<?php echo $fs->get_upgrade_url() ?>" class="nav-tab"><?php _efs( 'upgrade', $slug ) ?></a>
39
  <?php if ( ! $fs->is_trial_utilized() && $fs->has_trial_plan() ) : ?>
40
+ <a href="<?php echo $fs->get_trial_url() ?>" class="nav-tab"><?php _efs( 'free-trial', $slug ) ?></a>
41
  <?php endif ?>
42
  <?php endif ?>
43
  </h2>
47
  <div class="has-sidebar has-right-sidebar">
48
  <div class="has-sidebar-content">
49
  <div class="postbox">
50
+ <h3><?php _efs( 'account-details', $slug ) ?></h3>
51
 
52
  <div class="fs-header-actions">
53
  <ul>
57
  <?php wp_nonce_field( 'delete_account' ) ?>
58
  <a href="#" onclick="if (confirm('<?php
59
  if ( $is_active_subscription ) {
60
+ echo esc_attr( sprintf( __fs( 'delete-account-x-confirm', $slug ), $plan->title ) );
61
  } else {
62
+ _efs( 'delete-account-confirm', $slug );
63
  }
64
+ ?>')) this.parentNode.submit(); return false;"><i class="dashicons dashicons-no"></i> <?php _efs( 'delete-account', $slug ) ?></a>
65
+ </form>
66
+ </li>
67
+ <li>
68
+ &nbsp;•&nbsp;
69
+ <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST">
70
+ <input type="hidden" name="fs_action" value="<?php echo $slug ?>_sync_license">
71
+ <?php wp_nonce_field( $slug . '_sync_license' ) ?>
72
+ <a href="#" onclick="this.parentNode.submit(); return false;"><i class="dashicons dashicons-image-rotate"></i> <?php _efs( 'sync', $slug ) ?></a>
73
  </form>
74
  </li>
75
  <?php if ( $is_paying ) : ?>
79
  <input type="hidden" name="fs_action" value="deactivate_license">
80
  <?php wp_nonce_field( 'deactivate_license' ) ?>
81
  <a href="#"
82
+ onclick="if (confirm('<?php _efs( 'deactivate-license-confirm', $slug ) ?>')) this.parentNode.submit(); return false;"><i class="dashicons dashicons-admin-network"></i> <?php _efs( 'deactivate-license', $slug ) ?></a>
83
  </form>
84
  </li>
85
  <?php if ( ! $license->is_lifetime() &&
91
  <input type="hidden" name="fs_action" value="downgrade_account">
92
  <?php wp_nonce_field( 'downgrade_account' ) ?>
93
  <a href="#"
94
+ onclick="if (confirm('<?php printf( __fs( 'downgrade-x-confirm', $slug ), $plan->title, human_time_diff( time(), strtotime( $license->expiration ) ) ) ?> <?php if ( ! $license->is_block_features ) {
95
+ printf( __fs( 'after-downgrade-non-blocking', $slug ), $plan->title );
96
  } else {
97
+ printf( __fs( 'after-downgrade-blocking', $slug ), $plan->title );
98
+ }?> <?php _efs( 'proceed-confirmation', $slug ) ?>')) this.parentNode.submit(); return false;"><i class="dashicons dashicons-download"></i> <?php _efs( 'downgrade', $slug ) ?></a>
99
  </form>
100
  </li>
101
  <?php endif ?>
102
  <li>
103
  &nbsp;•&nbsp;
104
+ <a href="<?php echo $fs->get_upgrade_url() ?>"><i class="dashicons dashicons-grid-view"></i> <?php _efs( 'change-plan', $slug ) ?></a>
105
  </li>
106
  <?php endif ?>
107
  </ul>
112
  $profile = array();
113
  $profile[] = array(
114
  'id' => 'user_name',
115
+ 'title' => __fs( 'name', $slug ),
116
  'value' => $name
117
  );
118
  // if (isset($user->email) && false !== strpos($user->email, '@'))
119
  $profile[] = array(
120
  'id' => 'email',
121
+ 'title' => __fs( 'email', $slug ),
122
  'value' => $user->email
123
  );
124
  if ( is_numeric( $user->id ) ) {
125
  $profile[] = array(
126
  'id' => 'user_id',
127
+ 'title' => __fs( 'user-id', $slug ),
128
  'value' => $user->id
129
  );
130
  }
131
 
132
  $profile[] = array(
133
  'id' => 'site_id',
134
+ 'title' => __fs( 'site-id', $slug ),
135
  'value' => is_string( $site->id ) ?
136
  $site->id :
137
+ __fs( 'no-id', $slug )
138
  );
139
 
140
  $profile[] = array(
141
  'id' => 'site_public_key',
142
+ 'title' => __fs( 'public-key', $slug ),
143
  'value' => $site->public_key
144
  );
145
 
146
  $profile[] = array(
147
  'id' => 'site_secret_key',
148
+ 'title' => __fs( 'secret-key', $slug ),
149
  'value' => ( ( is_string( $site->secret_key ) ) ?
150
  $site->secret_key :
151
+ __fs( 'no-secret', $slug )
152
  )
153
  );
154
 
157
 
158
  $profile[] = array(
159
  'id' => 'plan',
160
+ 'title' => __fs( 'plan', $slug ),
161
  'value' => ( is_string( $trial_plan->name ) ?
162
  strtoupper( $trial_plan->title ) . ' ' :
163
+ '' ) . strtoupper( __fs( 'trial', $slug ) )
164
  );
165
  } else {
166
  $profile[] = array(
167
  'id' => 'plan',
168
+ 'title' => __fs( 'plan', $slug ),
169
  'value' => is_string( $site->plan->name ) ?
170
  strtoupper( $site->plan->title ) :
171
+ strtoupper( __fs( 'free', $slug ) )
172
  );
173
  }
174
 
175
  $profile[] = array(
176
  'id' => 'version',
177
+ 'title' => __fs( 'version', $slug ),
178
  'value' => $fs->get_plugin_version()
179
  );
180
  ?>
194
  <td>
195
  <code><?php echo htmlspecialchars( $p['value'] ) ?></code>
196
  <?php if ( 'email' === $p['id'] && ! $user->is_verified() ) : ?>
197
+ <label><?php _efs( 'not-verified', $slug ) ?></label>
198
  <?php endif ?>
199
  <?php if ( 'plan' === $p['id'] ) : ?>
200
  <?php if ( $fs->is_trial() ) : ?>
201
+ <label><?php printf( __fs( 'expires-in', $slug ), human_time_diff( time(), strtotime( $site->trial_ends ) ) ) ?></label>
202
  <?php elseif ( is_object( $license ) && ! $license->is_lifetime() ) : ?>
203
  <?php if ( ! $is_active_subscription && ! $license->is_first_payment_pending() ) : ?>
204
+ <label><?php printf( __fs( 'expires-in', $slug ), human_time_diff( time(), strtotime( $license->expiration ) ) ) ?></label>
205
  <?php elseif ( $is_active_subscription && ! $subscription->is_first_payment_pending() ) : ?>
206
+ <label><?php printf( __fs( 'renews-in', $slug ), human_time_diff( time(), strtotime( $subscription->next_payment ) ) ) ?></label>
207
  <?php endif ?>
208
  <?php endif ?>
209
  <?php endif ?>
215
  <input type="hidden" name="fs_action" value="verify_email">
216
  <?php wp_nonce_field( 'verify_email' ) ?>
217
  <input type="submit" class="button button-small"
218
+ value="<?php _efs( 'verify-email', $slug ) ?>">
219
  </form>
220
  <?php endif ?>
221
  <?php if ( 'plan' === $p['id'] ) : ?>
229
  <?php wp_nonce_field( 'activate_license' ) ?>
230
  <input type="submit" class="button button-primary"
231
  value="<?php printf(
232
+ __fs( 'activate-x-plan', $slug ),
233
  $premium_plan->title,
234
  ( $site->is_localhost() && $license->is_free_localhost ) ?
235
+ '[' . __fs( 'localhost', $slug ) . ']' :
236
  ( 1 < $license->left() ? $license->left() . ' left' : '' )
237
  ) ?> ">
238
  </form>
240
  <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>"
241
  method="POST" class="button-group">
242
  <input type="submit" class="button"
243
+ value="<?php _efs( 'sync-license', $slug ) ?>">
244
  <input type="hidden" name="fs_action"
245
  value="<?php echo $slug ?>_sync_license">
246
  <?php wp_nonce_field( $slug . '_sync_license' ) ?>
248
  class="button<?php if ( ! $is_paying ) {
249
  echo ' button-primary';
250
  } ?> button-upgrade"><?php ( ! $is_paying ) ?
251
+ _efs( 'upgrade', $slug ) :
252
+ _efs( 'change-plan', $slug )
253
  ?></a>
254
  </form>
255
  <?php endif ?>
259
  <?php if ( $is_paying || $fs->is_trial() ) : ?>
260
  <?php if ( ! $fs->is_allowed_to_install() ) : ?>
261
  <a target="_blank" class="button button-primary"
262
+ href="<?php echo $fs->_get_latest_download_local_url() ?>"><?php echo sprintf( __fs( 'download-x-version', $slug ), $site->plan->title ) . ( is_object( $update ) ? ' [' . $update->version . ']' : '' ) ?></a>
263
  <?php elseif ( is_object( $update ) ) : ?>
264
  <a class="button button-primary"
265
+ href="<?php echo wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' . $fs->get_plugin_basename() ), 'upgrade-plugin_' . $fs->get_plugin_basename() ) ?>"><?php echo __fs( 'install-update-now', $slug ) . ' [' . $update->version . ']' ?></a>
266
  <?php endif ?>
267
  <?php endif; ?>
268
  </div>
274
  ) ) )
275
  ) : ?>
276
  <form action="<?php echo $fs->_get_admin_page_url( 'account' ) ?>" method="POST"
277
+ onsubmit="var val = prompt('<?php printf( __fs( 'what-is-your-x', $slug ), $p['title'] ) ?>', '<?php echo $p['value'] ?>'); if (null == val || '' === val) return false; jQuery('input[name=fs_<?php echo $p['id'] ?>_<?php echo $slug ?>]').val(val); return true;">
278
  <input type="hidden" name="fs_action" value="update_<?php echo $p['id'] ?>">
279
  <input type="hidden" name="fs_<?php echo $p['id'] ?>_<?php echo $slug ?>"
280
  value="">
309
  <thead>
310
  <tr>
311
  <th></th>
312
+ <th><?php _efs( 'version', $slug ) ?></th>
313
+ <th><?php _efs( 'plan', $slug ) ?></th>
314
+ <th><?php _efs( 'expiration', $slug ) ?></th>
315
  <th></th>
316
  <?php if ( defined( 'WP_FS__DEV_MODE' ) && WP_FS__DEV_MODE ) : ?>
317
  <th></th>
341
  ?>
342
  <?php if ( $fs_addon->is_not_paying() ) : ?>
343
  <?php if ( $is_current_license_expired ) : ?>
344
+ <td><?php _efs( 'expired', $slug ) ?></td>
345
  <?php endif ?>
346
  <?php $premium_license = $fs_addon->_get_available_premium_license() ?>
347
  <td<?php if ( ! $is_current_license_expired ) {
352
  <?php fs_ui_action_button(
353
  $slug, 'account',
354
  'activate_license',
355
+ sprintf( __fs( 'activate-x-plan', $slug ), $fs_addon->get_plan_title(), ( $site->is_localhost() && $premium_license->is_free_localhost ) ? '[localhost]' : ( 1 < $premium_license->left() ? $premium_license->left() . ' left' : '' ) ),
356
  array( 'plugin_id' => $addon_id )
357
  ) ?>
358
  <?php else : ?>
360
  <?php fs_ui_action_button(
361
  $slug, 'account',
362
  $slug . '_sync_license',
363
+ __fs( 'sync-license', $slug ),
364
  array( 'plugin_id' => $addon_id ),
365
  false
366
  ) ?>
367
  <?php echo sprintf( '<a href="%s" class="thickbox button button-primary" aria-label="%s" data-title="%s">%s</a>',
368
  esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&parent_plugin_id=' . $fs->get_id() . '&plugin=' . $addon->slug .
369
  '&TB_iframe=true&width=600&height=550' ) ),
370
+ esc_attr( sprintf( __fs( 'more-information-about-x', $slug ), $addon->title ) ),
371
  esc_attr( $addon->title ),
372
+ __fs( 'upgrade', $slug )
373
  ) ?>
374
  </div>
375
  <?php endif ?>
378
  <?php if ( is_object( $current_license ) ) : ?>
379
  <td><?php
380
  if ( $current_license->is_lifetime() ) {
381
+ _efs( 'no-expiration', $slug );
382
  } else if ( $current_license->is_expired() ) {
383
+ _efs( 'expired', $slug );
384
  } else {
385
  echo sprintf(
386
+ __fs( 'in-x', $slug ),
387
  human_time_diff( time(), strtotime( $current_license->expiration ) )
388
  );
389
  }
392
  <?php fs_ui_action_button(
393
  $slug, 'account',
394
  'deactivate_license',
395
+ __fs( 'deactivate-license', $slug ),
396
  array( 'plugin_id' => $addon_id ),
397
  false
398
  ) ?>
407
  <?php $addon_file = $fs->get_addon_basename( $addon->slug ) ?>
408
  <a class="button button-primary"
409
  href="<?php echo wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $addon_file, 'activate-plugin_' . $addon_file ) ?>"
410
+ title="<?php esc_attr( __fs( 'activate-this-addon', $slug ) ) ?>"
411
+ class="edit"><?php _efs( 'activate', $slug ) ?></a>
412
  <?php else : ?>
413
  <?php if ( $fs->is_allowed_to_install() ) : ?>
414
  <a class="button button-primary"
415
+ href="<?php echo wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=' . $addon->slug ), 'install-plugin_' . $addon->slug ) ?>"><?php _efs( 'install-now', $slug ) ?></a>
416
  <?php else : ?>
417
  <a target="_blank" class="button button-primary"
418
+ href="<?php echo $fs->_get_latest_download_local_url( $addon_id ) ?>"><?php _efs( 'download-latest', $slug ) ?></a>
419
  <?php endif ?>
420
  <?php endif ?>
421
  </td>
427
  fs_ui_action_button(
428
  $slug, 'account',
429
  'delete_account',
430
+ __fs( 'delete', $slug ),
431
  array( 'plugin_id' => $addon_id ),
432
  false
433
  );
classes/freemius/templates/add-ons.php CHANGED
@@ -22,7 +22,7 @@
22
  $addons = $fs->get_addons();
23
  ?>
24
  <div id="fs_addons" class="wrap">
25
- <h2><?php printf( __fs( 'add-ons-for-x' ), $fs->get_plugin_name() ) ?></h2>
26
 
27
  <div id="poststuff">
28
  <ul class="fs-cards-list">
@@ -64,7 +64,7 @@
64
  echo sprintf( '<a href="%s" class="thickbox fs-overlay" aria-label="%s" data-title="%s"></a>',
65
  esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&parent_plugin_id=' . $fs->get_id() . '&plugin=' . $addon->slug .
66
  '&TB_iframe=true&width=600&height=550' ) ),
67
- esc_attr( sprintf( __fs( 'more-information-about-x' ), $addon->title ) ),
68
  esc_attr( $addon->title )
69
  );
70
  ?>
@@ -86,7 +86,7 @@
86
  <li class="fs-title"><?php echo $addon->title ?></li>
87
  <li class="fs-offer">
88
  <span
89
- class="fs-price"><?php echo ( 0 == $price ) ? __fs( 'free' ) : '$' . number_format( $price, 2 ) ?></span>
90
  </li>
91
  <li class="fs-description"><?php echo ! empty( $addon->info->short_description ) ? $addon->info->short_description : 'SHORT DESCRIPTION' ?></li>
92
  </ul>
22
  $addons = $fs->get_addons();
23
  ?>
24
  <div id="fs_addons" class="wrap">
25
+ <h2><?php printf( __fs( 'add-ons-for-x', $slug ), $fs->get_plugin_name() ) ?></h2>
26
 
27
  <div id="poststuff">
28
  <ul class="fs-cards-list">
64
  echo sprintf( '<a href="%s" class="thickbox fs-overlay" aria-label="%s" data-title="%s"></a>',
65
  esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&parent_plugin_id=' . $fs->get_id() . '&plugin=' . $addon->slug .
66
  '&TB_iframe=true&width=600&height=550' ) ),
67
+ esc_attr( sprintf( __fs( 'more-information-about-x', $slug ), $addon->title ) ),
68
  esc_attr( $addon->title )
69
  );
70
  ?>
86
  <li class="fs-title"><?php echo $addon->title ?></li>
87
  <li class="fs-offer">
88
  <span
89
+ class="fs-price"><?php echo ( 0 == $price ) ? __fs( 'free', $slug ) : '$' . number_format( $price, 2 ) ?></span>
90
  </li>
91
  <li class="fs-description"><?php echo ! empty( $addon->info->short_description ) ? $addon->info->short_description : 'SHORT DESCRIPTION' ?></li>
92
  </ul>
classes/freemius/templates/admin-notice.php CHANGED
@@ -30,5 +30,7 @@
30
  class="fs-plugin-title"><?php echo $VARS['plugin'] ?></label><?php endif ?><p>
31
  <?php if ( ! empty( $VARS['title'] ) ) : ?><b><?php echo $VARS['title'] ?></b> <?php endif ?>
32
  <?php echo $VARS['message'] ?>
33
- </p><?php if ( $VARS['sticky'] ) : ?><i class="fs-close dashicons dashicons-no"
34
- title="<?php _efs( 'dismiss' ) ?>"></i><?php endif ?></div>
 
 
30
  class="fs-plugin-title"><?php echo $VARS['plugin'] ?></label><?php endif ?><p>
31
  <?php if ( ! empty( $VARS['title'] ) ) : ?><b><?php echo $VARS['title'] ?></b> <?php endif ?>
32
  <?php echo $VARS['message'] ?>
33
+ </p><?php if ( $VARS['sticky'] ) : ?>
34
+ <div class="fs-close"><i class="dashicons dashicons-no"
35
+ title="<?php _efs( 'dismiss' ) ?>"></i> <span><?php _efs( 'dismiss' ) ?></span>
36
+ </div><?php endif ?></div>
classes/freemius/templates/connect.php CHANGED
@@ -44,10 +44,26 @@
44
  </div>
45
  <div class="fs-content">
46
  <p><?php
47
- echo $fs->apply_filters( 'connect_message',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  sprintf(
49
- __fs( 'hey-x' ) . '<br>' .
50
- __fs( 'connect-message' ),
51
  $first_name,
52
  '<b>' . $fs->get_plugin_name() . '</b>',
53
  '<b>' . $current_user->user_login . '</b>',
@@ -65,7 +81,7 @@
65
  <div class="fs-actions">
66
  <?php if ( $fs->enable_anonymous() ) : ?>
67
  <a href="<?php echo wp_nonce_url( $fs->_get_admin_page_url( '', array( 'fs_action' => $slug . '_skip_activation' ) ), $slug . '_skip_activation' ) ?>"
68
- class="button button-secondary" tabindex="2"><?php _efs( 'skip' ) ?></a>
69
  <?php endif ?>
70
  <?php $fs_user = Freemius::_get_user_by_email( $current_user->user_email ) ?>
71
  <?php if ( is_object( $fs_user ) ) : ?>
@@ -73,7 +89,7 @@
73
  <input type="hidden" name="fs_action" value="<?php echo $slug ?>_activate_existing">
74
  <?php wp_nonce_field( 'activate_existing_' . $fs->get_public_key() ) ?>
75
  <button class="button button-primary" tabindex="1"
76
- type="submit"><?php _efs( 'opt-in-connect' ) ?></button>
77
  </form>
78
  <?php else : ?>
79
  <form method="post" action="<?php echo WP_FS__ADDRESS ?>/action/service/user/install/">
@@ -124,46 +140,57 @@
124
  <input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
125
  <?php endforeach ?>
126
  <button class="button button-primary" tabindex="1"
127
- type="submit"><?php _efs( 'opt-in-connect' ) ?></button>
128
  </form>
129
  <?php endif ?>
130
  </div>
131
  <div class="fs-permissions">
132
- <a class="fs-trigger" href="#"><?php _efs( 'what-permissions' ) ?></a>
133
  <ul>
134
  <li>
135
  <i class="dashicons dashicons-admin-users"></i>
136
 
137
  <div>
138
- <span><?php _efs( 'permissions-profile' ) ?></span>
139
 
140
- <p><?php _efs( 'permissions-profile_desc' ) ?></p>
141
  </div>
142
  </li>
143
  <li>
144
  <i class="dashicons dashicons-wordpress"></i>
145
 
146
  <div>
147
- <span><?php _efs( 'permissions-site' ) ?></span>
148
 
149
- <p><?php _efs( 'permissions-site_desc' ) ?></p>
150
  </div>
151
  </li>
 
 
 
 
 
 
 
 
 
 
 
152
  <li>
153
  <i class="dashicons dashicons-admin-plugins"></i>
154
 
155
  <div>
156
- <span><?php _efs( 'permissions-events' ) ?></span>
157
 
158
- <p><?php _efs( 'permissions-events_desc' ) ?></p>
159
  </div>
160
  </li>
161
  </ul>
162
  </div>
163
  <div class="fs-terms">
164
- <a href="https://freemius.com/privacy/" target="_blank"><?php _efs( 'privacy-policy' ) ?></a>
165
  &nbsp;&nbsp;-&nbsp;&nbsp;
166
- <a href="https://freemius.com/terms/" target="_blank"><?php _efs( 'tos' ) ?></a>
167
  </div>
168
  </div>
169
  <script type="text/javascript">
@@ -173,7 +200,7 @@
173
  $(document.body).css({'cursor': 'wait'});
174
  });
175
  $('.button.button-primary').on('click', function () {
176
- $(this).html('<?php _efs( 'activating' ) ?>...').css({'cursor': 'wait'});
177
  });
178
  $('.fs-permissions .fs-trigger').on('click', function () {
179
  $('.fs-permissions').toggleClass('fs-open');
44
  </div>
45
  <div class="fs-content">
46
  <p><?php
47
+ $filter = 'connect_message';
48
+ $default_optin_message = 'connect-message';
49
+
50
+ if ( $fs->is_plugin_update() ) {
51
+ // If Freemius was added on a plugin update, set different
52
+ // opt-in message.
53
+ $default_optin_message = 'connect-message_on-update';
54
+
55
+ // If user customized the opt-in message on update, use
56
+ // that message. Otherwise, fallback to regular opt-in
57
+ // custom message if exist.
58
+ if ( $fs->has_filter( 'connect_message_on_update' ) ) {
59
+ $filter = 'connect_message_on_update';
60
+ }
61
+ }
62
+
63
+ echo $fs->apply_filters( $filter,
64
  sprintf(
65
+ __fs( 'hey-x', $slug ) . '<br>' .
66
+ __fs( $default_optin_message, $slug ),
67
  $first_name,
68
  '<b>' . $fs->get_plugin_name() . '</b>',
69
  '<b>' . $current_user->user_login . '</b>',
81
  <div class="fs-actions">
82
  <?php if ( $fs->enable_anonymous() ) : ?>
83
  <a href="<?php echo wp_nonce_url( $fs->_get_admin_page_url( '', array( 'fs_action' => $slug . '_skip_activation' ) ), $slug . '_skip_activation' ) ?>"
84
+ class="button button-secondary" tabindex="2"><?php _efs( 'skip', $slug ) ?></a>
85
  <?php endif ?>
86
  <?php $fs_user = Freemius::_get_user_by_email( $current_user->user_email ) ?>
87
  <?php if ( is_object( $fs_user ) ) : ?>
89
  <input type="hidden" name="fs_action" value="<?php echo $slug ?>_activate_existing">
90
  <?php wp_nonce_field( 'activate_existing_' . $fs->get_public_key() ) ?>
91
  <button class="button button-primary" tabindex="1"
92
+ type="submit"><?php _efs( 'opt-in-connect', $slug ) ?></button>
93
  </form>
94
  <?php else : ?>
95
  <form method="post" action="<?php echo WP_FS__ADDRESS ?>/action/service/user/install/">
140
  <input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
141
  <?php endforeach ?>
142
  <button class="button button-primary" tabindex="1"
143
+ type="submit"><?php _efs( 'opt-in-connect', $slug ) ?></button>
144
  </form>
145
  <?php endif ?>
146
  </div>
147
  <div class="fs-permissions">
148
+ <a class="fs-trigger" href="#"><?php _efs( 'what-permissions', $slug ) ?></a>
149
  <ul>
150
  <li>
151
  <i class="dashicons dashicons-admin-users"></i>
152
 
153
  <div>
154
+ <span><?php _efs( 'permissions-profile', $slug ) ?></span>
155
 
156
+ <p><?php _efs( 'permissions-profile_desc', $slug ) ?></p>
157
  </div>
158
  </li>
159
  <li>
160
  <i class="dashicons dashicons-wordpress"></i>
161
 
162
  <div>
163
+ <span><?php _efs( 'permissions-site', $slug ) ?></span>
164
 
165
+ <p><?php _efs( 'permissions-site_desc', $slug ) ?></p>
166
  </div>
167
  </li>
168
+ <?php if ( $fs->is_permission_requested( 'newsletter' ) ) : ?>
169
+ <li>
170
+ <i class="dashicons dashicons-email-alt"></i>
171
+
172
+ <div>
173
+ <span><?php _efs( 'permissions-newsletter', $slug ) ?></span>
174
+
175
+ <p><?php _efs( 'permissions-newsletter_desc', $slug ) ?></p>
176
+ </div>
177
+ </li>
178
+ <?php endif ?>
179
  <li>
180
  <i class="dashicons dashicons-admin-plugins"></i>
181
 
182
  <div>
183
+ <span><?php _efs( 'permissions-events', $slug ) ?></span>
184
 
185
+ <p><?php _efs( 'permissions-events_desc', $slug ) ?></p>
186
  </div>
187
  </li>
188
  </ul>
189
  </div>
190
  <div class="fs-terms">
191
+ <a href="https://freemius.com/privacy/" target="_blank"><?php _efs( 'privacy-policy', $slug ) ?></a>
192
  &nbsp;&nbsp;-&nbsp;&nbsp;
193
+ <a href="https://freemius.com/terms/" target="_blank"><?php _efs( 'tos', $slug ) ?></a>
194
  </div>
195
  </div>
196
  <script type="text/javascript">
200
  $(document.body).css({'cursor': 'wait'});
201
  });
202
  $('.button.button-primary').on('click', function () {
203
+ $(this).html('<?php _efs( 'activating' , $slug ) ?>...').css({'cursor': 'wait'});
204
  });
205
  $('.fs-permissions .fs-trigger').on('click', function () {
206
  $('.fs-permissions').toggleClass('fs-open');
classes/freemius/templates/deactivation-feedback-modal.php CHANGED
@@ -27,11 +27,11 @@
27
  + ' <div class="fs-modal-dialog">'
28
  + ' <div class="fs-modal-body">'
29
  + ' <div class="fs-modal-panel" data-panel-id="confirm"><p><?php echo $confirmation_message; ?></p></div>'
30
- + ' <div class="fs-modal-panel active" data-panel-id="reasons"><h3><strong><?php printf( __fs( 'deactivation-share-reason' ) ); ?>:</strong></h3><ul id="reasons-list">' + reasonsHtml + '</ul></div>'
31
  + ' </div>'
32
  + ' <div class="fs-modal-footer">'
33
  + ' <a href="#" class="button button-secondary button-deactivate"></a>'
34
- + ' <a href="#" class="button button-primary button-close"><?php printf( __fs( 'deactivation-modal-button-cancel' ) ); ?></a>'
35
  + ' </div>'
36
  + ' </div>'
37
  + '</div>',
@@ -100,7 +100,7 @@
100
  var _parent = $( this ).parents( 'li:first' );
101
 
102
  $modal.find( '.reason-input' ).remove();
103
- $modal.find( '.button-deactivate').text( '<?php printf( __fs( 'deactivation-modal-button-submit' ) ); ?>' );
104
 
105
  if ( _parent.hasClass( 'has-input' ) ) {
106
  var inputType = _parent.data( 'input-type' ),
@@ -183,9 +183,9 @@
183
 
184
  // Reset the deactivate button's text.
185
  if ( 'confirm' === getCurrentPanel() ) {
186
- $deactivateButton.text( '<?php printf( __fs( 'deactivation-modal-button-confirm' ) ); ?>' );
187
  } else {
188
- $deactivateButton.text( '<?php printf( __fs( 'deactivation-modal-button-deactivate' ) ); ?>' );
189
  }
190
  }
191
 
27
  + ' <div class="fs-modal-dialog">'
28
  + ' <div class="fs-modal-body">'
29
  + ' <div class="fs-modal-panel" data-panel-id="confirm"><p><?php echo $confirmation_message; ?></p></div>'
30
+ + ' <div class="fs-modal-panel active" data-panel-id="reasons"><h3><strong><?php printf( __fs( 'deactivation-share-reason' , $slug ) ); ?>:</strong></h3><ul id="reasons-list">' + reasonsHtml + '</ul></div>'
31
  + ' </div>'
32
  + ' <div class="fs-modal-footer">'
33
  + ' <a href="#" class="button button-secondary button-deactivate"></a>'
34
+ + ' <a href="#" class="button button-primary button-close"><?php printf( __fs( 'deactivation-modal-button-cancel' , $slug ) ); ?></a>'
35
  + ' </div>'
36
  + ' </div>'
37
  + '</div>',
100
  var _parent = $( this ).parents( 'li:first' );
101
 
102
  $modal.find( '.reason-input' ).remove();
103
+ $modal.find( '.button-deactivate').text( '<?php printf( __fs( 'deactivation-modal-button-submit' , $slug ) ); ?>' );
104
 
105
  if ( _parent.hasClass( 'has-input' ) ) {
106
  var inputType = _parent.data( 'input-type' ),
183
 
184
  // Reset the deactivate button's text.
185
  if ( 'confirm' === getCurrentPanel() ) {
186
+ $deactivateButton.text( '<?php printf( __fs( 'deactivation-modal-button-confirm' , $slug ) ); ?>' );
187
  } else {
188
+ $deactivateButton.text( '<?php printf( __fs( 'deactivation-modal-button-deactivate' , $slug ) ); ?>' );
189
  }
190
  }
191
 
classes/freemius/templates/debug.php CHANGED
@@ -1,3 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <h2><?php _efs( 'plugin-installs' ) ?> / <?php _efs( 'sites' ) ?></h2>
2
  <?php
3
  /**
@@ -9,17 +112,15 @@
9
  <thead>
10
  <tr>
11
  <th><?php _efs( 'id' ) ?></th>
12
- <th><?php _efs( 'plugin' ) ?></th>
13
  <th><?php _efs( 'plan' ) ?></th>
14
  <th><?php _efs( 'public-key' ) ?></th>
15
  <th><?php _efs( 'secret-key' ) ?></th>
16
  </tr>
17
  </thead>
18
  <tbody>
19
- <?php foreach ( $sites as $plugin_basename => $site ) : ?>
20
  <tr>
21
  <td><?php echo $site->id ?></td>
22
- <td><?php echo dirname( $plugin_basename ) ?></td>
23
  <td><?php
24
  echo is_object( $site->plan ) ? $site->plan->name : ''
25
  ?></td>
@@ -93,11 +194,4 @@
93
  </tr>
94
  <?php endforeach ?>
95
  </tbody>
96
- </table>
97
- <br><br>
98
- <form action="" method="POST">
99
- <input type="hidden" name="fs_action" value="delete_all_accounts">
100
- <?php wp_nonce_field( 'delete_all_accounts' ) ?>
101
- <button class="button button-primary"
102
- onclick="if (confirm('<?php _efs( 'delete-all-confirm' ) ?>')) this.parentNode.submit(); return false;"><?php _efs( 'delete-all-accounts' ) ?></button>
103
- </form>
1
+ <?php
2
+ global $fs_active_plugins;
3
+
4
+ $fs_options = FS_Option_Manager::get_manager( WP_FS__ACCOUNTS_OPTION_NAME, true );
5
+ ?>
6
+ <h1><?php echo __fs( 'Freemius Debug' ) . ' - ' . __fs( 'SDK' ) . ' v.' . $fs_active_plugins->newest->version ?></h1>
7
+ <h2><?php _efs( 'actions' ) ?></h2>
8
+ <table>
9
+ <tbody>
10
+ <tr>
11
+ <td>
12
+ <!-- Delete All Accounts -->
13
+ <form action="" method="POST">
14
+ <input type="hidden" name="fs_action" value="delete_all_accounts">
15
+ <?php wp_nonce_field( 'delete_all_accounts' ) ?>
16
+ <button class="button button-primary"
17
+ onclick="if (confirm('<?php _efs( 'delete-all-confirm' ) ?>')) this.parentNode.submit(); return false;"><?php _efs( 'delete-all-accounts' ) ?></button>
18
+ </form>
19
+ </td>
20
+ <td>
21
+ <!-- Clear API Cache -->
22
+ <form action="" method="POST">
23
+ <input type="hidden" name="fs_clear_api_cache" value="true">
24
+ <button class="button button-primary"><?php _efs( 'clear-api-cache' ) ?></button>
25
+ </form>
26
+ </td>
27
+ <td>
28
+ <!-- Sync Data with Server -->
29
+ <form action="" method="POST">
30
+ <input type="hidden" name="background_sync" value="true">
31
+ <button class="button button-primary"><?php _efs( 'sync-data-from-server' ) ?></button>
32
+ </form>
33
+ </td>
34
+ </tr>
35
+ </tbody>
36
+ </table>
37
+ <h2><?php _efs( 'sdk-versions' ) ?></h2>
38
+ <table id="fs_sdks" class="widefat">
39
+ <thead>
40
+ <tr>
41
+ <th><?php _efs( 'version' ) ?></th>
42
+ <th><?php _efs( 'sdk-path' ) ?></th>
43
+ <th><?php _efs( 'plugin-path' ) ?></th>
44
+ <th><?php _efs( 'is-active' ) ?></th>
45
+ </tr>
46
+ </thead>
47
+ <tbody>
48
+ <?php foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) : ?>
49
+ <?php $is_active = ( WP_FS__SDK_VERSION == $data->version ) ?>
50
+ <tr<?php if ( $is_active ) {
51
+ echo ' style="background: #E6FFE6; font-weight: bold"';
52
+ } ?>>
53
+ <td><?php echo $data->version ?></td>
54
+ <td><?php echo $sdk_path ?></td>
55
+ <td><?php echo $data->plugin_path ?></td>
56
+ <td><?php echo ( $is_active ) ? 'Active' : 'Inactive' ?></td>
57
+ </tr>
58
+ <?php endforeach ?>
59
+ </tbody>
60
+ </table>
61
+ <h2><?php _efs( 'plugins' ) ?></h2>
62
+ <table id="fs_plugins" class="widefat">
63
+ <thead>
64
+ <tr>
65
+ <th><?php _efs( 'id' ) ?></th>
66
+ <th><?php _efs( 'slug' ) ?></th>
67
+ <th><?php _efs( 'version' ) ?></th>
68
+ <th><?php _efs( 'title' ) ?></th>
69
+ <th><?php _efs( 'api' ) ?></th>
70
+ <th><?php _efs( 'freemius-state' ) ?></th>
71
+ <th><?php _efs( 'plugin-path' ) ?></th>
72
+ <th><?php _efs( 'public-key' ) ?></th>
73
+ </tr>
74
+ </thead>
75
+ <tbody>
76
+ <?php $plugins = $fs_options->get_option( 'plugins' ) ?>
77
+ <?php foreach ( $plugins as $slug => $data ) : ?>
78
+ <?php $is_active = is_plugin_active( $data->file ) ?>
79
+ <?php $fs = $is_active ? freemius( $slug ) : null ?>
80
+ <tr<?php if ( $is_active ) {
81
+ echo ' style="background: #E6FFE6; font-weight: bold"';
82
+ } ?>>
83
+ <td><?php echo $data->id ?></td>
84
+ <td><?php echo $slug ?></td>
85
+ <td><?php echo $data->version ?></td>
86
+ <td><?php echo $data->title ?></td>
87
+ <td><?php if ( $is_active ) {
88
+ echo $fs->has_api_connectivity() ?
89
+ __fs( 'connected' ) :
90
+ __fs( 'blocked' );
91
+ } ?></td>
92
+ <td><?php if ( $is_active ) {
93
+ echo $fs->is_on() ?
94
+ __fs( 'on' ) :
95
+ __fs( 'off' );
96
+ } ?></td>
97
+ <td><?php echo $data->file ?></td>
98
+ <td><?php echo $data->public_key ?></td>
99
+ </tr>
100
+ <?php endforeach ?>
101
+ </tbody>
102
+ </table>
103
+
104
  <h2><?php _efs( 'plugin-installs' ) ?> / <?php _efs( 'sites' ) ?></h2>
105
  <?php
106
  /**
112
  <thead>
113
  <tr>
114
  <th><?php _efs( 'id' ) ?></th>
 
115
  <th><?php _efs( 'plan' ) ?></th>
116
  <th><?php _efs( 'public-key' ) ?></th>
117
  <th><?php _efs( 'secret-key' ) ?></th>
118
  </tr>
119
  </thead>
120
  <tbody>
121
+ <?php foreach ( $sites as $slug => $site ) : ?>
122
  <tr>
123
  <td><?php echo $site->id ?></td>
 
124
  <td><?php
125
  echo is_object( $site->plan ) ? $site->plan->name : ''
126
  ?></td>
194
  </tr>
195
  <?php endforeach ?>
196
  </tbody>
197
+ </table>
 
 
 
 
 
 
 
classes/freemius/templates/pending-activation.php CHANGED
@@ -52,8 +52,8 @@
52
  <div class="fs-content">
53
  <p><?php
54
  echo $fs->apply_filters( 'pending_activation_message', sprintf(
55
- __fs( 'thanks-x' ) . '<br>' .
56
- __fs( 'pending-activation-message' ),
57
  $first_name,
58
  '<b>' . $fs->get_plugin_name() . '</b>',
59
  '<b>' . $current_user->user_email . '</b>'
@@ -92,45 +92,56 @@
92
  <input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
93
  <?php endforeach ?>
94
  <button class="button button-primary" tabindex="1"
95
- type="submit"><?php _efs( 'resend-activation-email' ) ?></button>
96
  </form>
97
  </div>
98
  <div class="fs-permissions">
99
- <a class="fs-trigger" href="#"><?php _efs( 'what-permissions' ) ?></a>
100
  <ul>
101
  <li>
102
  <i class="dashicons dashicons-admin-users"></i>
103
 
104
  <div>
105
- <span><?php _efs( 'permissions-profile' ) ?></span>
106
 
107
- <p><?php _efs( 'permissions-profile_desc' ) ?></p>
108
  </div>
109
  </li>
110
  <li>
111
  <i class="dashicons dashicons-wordpress"></i>
112
 
113
  <div>
114
- <span><?php _efs( 'permissions-site' ) ?></span>
115
 
116
- <p><?php _efs( 'permissions-site_desc' ) ?></p>
117
  </div>
118
  </li>
 
 
 
 
 
 
 
 
 
 
 
119
  <li>
120
  <i class="dashicons dashicons-admin-plugins"></i>
121
 
122
  <div>
123
- <span><?php _efs( 'permissions-events' ) ?></span>
124
 
125
- <p><?php _efs( 'permissions-events_desc' ) ?></p>
126
  </div>
127
  </li>
128
  </ul>
129
  </div>
130
  <div class="fs-terms">
131
- <a href="https://freemius.com/privacy/" target="_blank"><?php _efs( 'privacy-policy' ) ?></a>
132
  &nbsp;&nbsp;-&nbsp;&nbsp;
133
- <a href="https://freemius.com/terms/" target="_blank"><?php _efs( 'tos' ) ?></a>
134
  </div>
135
  </div>
136
  <script type="text/javascript">
52
  <div class="fs-content">
53
  <p><?php
54
  echo $fs->apply_filters( 'pending_activation_message', sprintf(
55
+ __fs( 'thanks-x', $slug ) . '<br>' .
56
+ __fs( 'pending-activation-message', $slug ),
57
  $first_name,
58
  '<b>' . $fs->get_plugin_name() . '</b>',
59
  '<b>' . $current_user->user_email . '</b>'
92
  <input type="hidden" name="<?php echo $name ?>" value="<?php echo esc_attr( $value ) ?>">
93
  <?php endforeach ?>
94
  <button class="button button-primary" tabindex="1"
95
+ type="submit"><?php _efs( 'resend-activation-email', $slug ) ?></button>
96
  </form>
97
  </div>
98
  <div class="fs-permissions">
99
+ <a class="fs-trigger" href="#"><?php _efs( 'what-permissions', $slug ) ?></a>
100
  <ul>
101
  <li>
102
  <i class="dashicons dashicons-admin-users"></i>
103
 
104
  <div>
105
+ <span><?php _efs( 'permissions-profile', $slug ) ?></span>
106
 
107
+ <p><?php _efs( 'permissions-profile_desc', $slug ) ?></p>
108
  </div>
109
  </li>
110
  <li>
111
  <i class="dashicons dashicons-wordpress"></i>
112
 
113
  <div>
114
+ <span><?php _efs( 'permissions-site', $slug ) ?></span>
115
 
116
+ <p><?php _efs( 'permissions-site_desc', $slug ) ?></p>
117
  </div>
118
  </li>
119
+ <?php if ( $fs->is_permission_requested( 'newsletter' ) ) : ?>
120
+ <li>
121
+ <i class="dashicons dashicons-email-alt"></i>
122
+
123
+ <div>
124
+ <span><?php _efs( 'permissions-newsletter', $slug ) ?></span>
125
+
126
+ <p><?php _efs( 'permissions-newsletter_desc', $slug ) ?></p>
127
+ </div>
128
+ </li>
129
+ <?php endif ?>
130
  <li>
131
  <i class="dashicons dashicons-admin-plugins"></i>
132
 
133
  <div>
134
+ <span><?php _efs( 'permissions-events', $slug ) ?></span>
135
 
136
+ <p><?php _efs( 'permissions-events_desc', $slug ) ?></p>
137
  </div>
138
  </li>
139
  </ul>
140
  </div>
141
  <div class="fs-terms">
142
+ <a href="https://freemius.com/privacy/" target="_blank"><?php _efs( 'privacy-policy', $slug ) ?></a>
143
  &nbsp;&nbsp;-&nbsp;&nbsp;
144
+ <a href="https://freemius.com/terms/" target="_blank"><?php _efs( 'tos', $slug ) ?></a>
145
  </div>
146
  </div>
147
  <script type="text/javascript">
classes/freemius/templates/plugin-icon.php CHANGED
@@ -8,10 +8,23 @@
8
  $slug = $VARS['slug'];
9
  $fs = freemius( $slug );
10
 
11
- $icons = glob( fs_normalize_path( WP_FS__DIR_IMG . '/icon.*' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  if ( ! is_array( $icons ) || 0 === count( $icons ) ) {
13
  $icon_found = false;
14
- $local_path = fs_normalize_path( WP_FS__DIR_IMG . '/icon.png' );
15
 
16
  if ( WP_FS__IS_LOCALHOST && $fs->is_org_repo_compliant() ) {
17
  /**
@@ -35,7 +48,7 @@
35
  foreach ( $suffixes as $s ) {
36
  $headers = get_headers( $base_url . $s );
37
  if ( strpos( $headers[0], '200' ) ) {
38
- $local_path = fs_normalize_path( WP_FS__DIR_IMG . '/icon.' . substr( $s, strpos( $s, '.' ) + 1 ) );
39
  fs_download_image( $base_url . $s, $local_path );
40
  $icon_found = true;
41
  break;
@@ -45,13 +58,13 @@
45
 
46
  if ( ! $icon_found ) {
47
  // No icons found, fallback to default icon.
48
- copy( fs_normalize_path( WP_FS__DIR_IMG . '/plugin-icon.png' ), $local_path );
49
  }
50
 
51
  $icons = array( $local_path );
52
  }
53
 
54
- $relative_url = fs_img_url( substr( $icons[0], strlen( fs_normalize_path( WP_FS__DIR_IMG ) ) ) );
55
  ?>
56
  <div class="fs-plugin-icon">
57
  <img src="<?php echo $relative_url ?>"/>
8
  $slug = $VARS['slug'];
9
  $fs = freemius( $slug );
10
 
11
+ global $fs_active_plugins;
12
+
13
+ $img_dir = WP_FS__DIR_IMG;
14
+
15
+ if ( 1 < count( $fs_active_plugins->plugins ) ) {
16
+ foreach ( $fs_active_plugins->plugins as $sdk_path => &$data ) {
17
+ if ( $data->plugin_path == $fs->get_plugin_basename() ) {
18
+ $img_dir = WP_PLUGIN_DIR . '/' . $sdk_path . '/assets/img';
19
+ break;
20
+ }
21
+ }
22
+ }
23
+
24
+ $icons = glob( fs_normalize_path( $img_dir . '/icon.*' ) );
25
  if ( ! is_array( $icons ) || 0 === count( $icons ) ) {
26
  $icon_found = false;
27
+ $local_path = fs_normalize_path( $img_dir . '/icon.png' );
28
 
29
  if ( WP_FS__IS_LOCALHOST && $fs->is_org_repo_compliant() ) {
30
  /**
48
  foreach ( $suffixes as $s ) {
49
  $headers = get_headers( $base_url . $s );
50
  if ( strpos( $headers[0], '200' ) ) {
51
+ $local_path = fs_normalize_path( $img_dir . '/icon.' . substr( $s, strpos( $s, '.' ) + 1 ) );
52
  fs_download_image( $base_url . $s, $local_path );
53
  $icon_found = true;
54
  break;
58
 
59
  if ( ! $icon_found ) {
60
  // No icons found, fallback to default icon.
61
+ copy( fs_normalize_path( $img_dir . '/plugin-icon.png' ), $local_path );
62
  }
63
 
64
  $icons = array( $local_path );
65
  }
66
 
67
+ $relative_url = fs_img_url( substr( $icons[0], strlen( fs_normalize_path( $img_dir ) ) ), $img_dir );
68
  ?>
69
  <div class="fs-plugin-icon">
70
  <img src="<?php echo $relative_url ?>"/>
classes/freemius/templates/plugin-info/description.php CHANGED
@@ -39,7 +39,7 @@
39
  <?php if ( ! empty( $plugin->info->screenshots ) ) : ?>
40
  <?php $screenshots = $plugin->info->screenshots ?>
41
  <div class="fs-screenshots clearfix">
42
- <h2><?php _efs( 'screenshots' ) ?></h2>
43
  <ul>
44
  <?php $i = 0;
45
  foreach ( $screenshots as $s => $url ) : ?>
@@ -49,12 +49,13 @@
49
  $url = 'http' . ( WP_FS__IS_HTTPS ? 's' : '' ) . ':' . $url; ?>
50
  <li class="<?php echo ( 0 === $i % 2 ) ? 'odd' : 'even' ?>">
51
  <style>
52
- #section-description .fs-screenshots .fs-screenshot-<?php echo $i ?>
53
  {
54
  background-image: url('<?php echo $url ?>');
55
  }
56
  </style>
57
- <a href="<?php echo $url ?>" title="<?php printf( __fs( 'view-full-size-x' ), $i ) ?>"
 
58
  class="fs-screenshot-<?php echo $i ?>"></a>
59
  </li>
60
  <?php $i ++; endforeach ?>
39
  <?php if ( ! empty( $plugin->info->screenshots ) ) : ?>
40
  <?php $screenshots = $plugin->info->screenshots ?>
41
  <div class="fs-screenshots clearfix">
42
+ <h2><?php _efs( 'screenshots', $plugin->slug ) ?></h2>
43
  <ul>
44
  <?php $i = 0;
45
  foreach ( $screenshots as $s => $url ) : ?>
49
  $url = 'http' . ( WP_FS__IS_HTTPS ? 's' : '' ) . ':' . $url; ?>
50
  <li class="<?php echo ( 0 === $i % 2 ) ? 'odd' : 'even' ?>">
51
  <style>
52
+ #section-description .fs-screenshots <?php echo ".fs-screenshot-{$i}" ?>
53
  {
54
  background-image: url('<?php echo $url ?>');
55
  }
56
  </style>
57
+ <a href="<?php echo $url ?>"
58
+ title="<?php printf( __fs( 'view-full-size-x', $plugin->slug ), $i ) ?>"
59
  class="fs-screenshot-<?php echo $i ?>"></a>
60
  </li>
61
  <?php $i ++; endforeach ?>
classes/freemius/templates/plugin-info/features.php CHANGED
@@ -1,4 +1,9 @@
1
  <?php
 
 
 
 
 
2
  $plans = $VARS['plans'];
3
 
4
  $features_plan_map = array();
@@ -20,7 +25,7 @@
20
  if ( ! isset( $features_plan_map['support'] ) ) {
21
  $support_feature = new stdClass();
22
  $support_feature->id = 'support';
23
- $support_feature->title = __fs( 'Support' );
24
  $features_plan_map[ $support_feature->id ] = array( 'feature' => $support_feature, 'plans' => array() );
25
  } else {
26
  $support_feature = $features_plan_map['support'];
@@ -33,7 +38,7 @@
33
  // Add updates as a feature for all plans.
34
  $updates_feature = new stdClass();
35
  $updates_feature->id = 'updates';
36
- $updates_feature->title = __fs( 'unlimited-updates' );
37
  $features_plan_map[ $updates_feature->id ] = array( 'feature' => $updates_feature, 'plans' => array() );
38
  foreach ( $plans as $plan ) {
39
  $features_plan_map[ $updates_feature->id ]['plans'][ $plan->id ] = $updates_feature;
1
  <?php
2
+ /**
3
+ * @var FS_Plugin $plugin
4
+ */
5
+ $plugin = $VARS['plugin'];
6
+
7
  $plans = $VARS['plans'];
8
 
9
  $features_plan_map = array();
25
  if ( ! isset( $features_plan_map['support'] ) ) {
26
  $support_feature = new stdClass();
27
  $support_feature->id = 'support';
28
+ $support_feature->title = __fs( 'Support', $plugin->slug );
29
  $features_plan_map[ $support_feature->id ] = array( 'feature' => $support_feature, 'plans' => array() );
30
  } else {
31
  $support_feature = $features_plan_map['support'];
38
  // Add updates as a feature for all plans.
39
  $updates_feature = new stdClass();
40
  $updates_feature->id = 'updates';
41
+ $updates_feature->title = __fs( 'unlimited-updates', $plugin->slug );
42
  $features_plan_map[ $updates_feature->id ] = array( 'feature' => $updates_feature, 'plans' => array() );
43
  foreach ( $plans as $plan ) {
44
  $features_plan_map[ $updates_feature->id ]['plans'][ $plan->id ] = $updates_feature;
classes/freemius/templates/plugin-info/screenshots.php CHANGED
@@ -2,6 +2,8 @@
2
  /**
3
  * @var FS_Plugin $plugin
4
  */
 
 
5
  $screenshots = $VARS['screenshots'];
6
  ?>
7
  <ol>
@@ -12,7 +14,8 @@
12
  // therefore we need to set absolute URLs.
13
  $url = 'http' . ( WP_FS__IS_HTTPS ? 's' : '' ) . ':' . $url; ?>
14
  <li>
15
- <a href="<?php echo $url ?>" title="<?php printf( __fs( 'view-full-size-x' ), $i ) ?>"><img
 
16
  src="<?php echo $url ?>"></a>
17
  </li>
18
  <?php $i ++; endforeach ?>
2
  /**
3
  * @var FS_Plugin $plugin
4
  */
5
+ $plugin = $VARS['plugin'];
6
+
7
  $screenshots = $VARS['screenshots'];
8
  ?>
9
  <ol>
14
  // therefore we need to set absolute URLs.
15
  $url = 'http' . ( WP_FS__IS_HTTPS ? 's' : '' ) . ':' . $url; ?>
16
  <li>
17
+ <a href="<?php echo $url ?>"
18
+ title="<?php printf( __fs( 'view-full-size-x', $plugin->slug ), $i ) ?>"><img
19
  src="<?php echo $url ?>"></a>
20
  </li>
21
  <?php $i ++; endforeach ?>
language/aryo-activity-log.pot CHANGED
@@ -6,9 +6,9 @@
6
  #, fuzzy
7
  msgid ""
8
  msgstr ""
9
- "Project-Id-Version: aryo-activity-log 2.2.7\n"
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2016-01-04 18:51+0200\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -65,7 +65,7 @@ msgid "Description"
65
  msgstr ""
66
 
67
  #: classes/class-aal-activity-log-list-table.php:142
68
- #: classes/freemius/includes/fs-plugin-functions.php:259
69
  #, php-format
70
  msgid "%s ago"
71
  msgstr ""
@@ -303,468 +303,487 @@ msgctxt "Plugin installer section title"
303
  msgid "Other Notes"
304
  msgstr ""
305
 
306
- #: classes/freemius/includes/fs-plugin-functions.php:116
307
  msgid "Plugin Install"
308
  msgstr ""
309
 
310
- #: classes/freemius/includes/fs-plugin-functions.php:249
311
  msgid "Version:"
312
  msgstr ""
313
 
314
- #: classes/freemius/includes/fs-plugin-functions.php:253
315
  msgid "Author:"
316
  msgstr ""
317
 
318
- #: classes/freemius/includes/fs-plugin-functions.php:257
319
  msgid "Last Updated:"
320
  msgstr ""
321
 
322
- #: classes/freemius/includes/fs-plugin-functions.php:264
323
  msgid "Requires WordPress Version:"
324
  msgstr ""
325
 
326
- #: classes/freemius/includes/fs-plugin-functions.php:264
327
  #, php-format
328
  msgid "%s or higher"
329
  msgstr ""
330
 
331
- #: classes/freemius/includes/fs-plugin-functions.php:268
332
  msgid "Compatible up to:"
333
  msgstr ""
334
 
335
- #: classes/freemius/includes/fs-plugin-functions.php:272
336
  msgid "Downloaded:"
337
  msgstr ""
338
 
339
- #: classes/freemius/includes/fs-plugin-functions.php:272
340
  #, php-format
341
  msgid "%s time"
342
  msgid_plural "%s times"
343
  msgstr[0] ""
344
  msgstr[1] ""
345
 
346
- #: classes/freemius/includes/fs-plugin-functions.php:277
347
  msgid "WordPress.org Plugin Page &#187;"
348
  msgstr ""
349
 
350
- #: classes/freemius/includes/fs-plugin-functions.php:282
351
  msgid "Plugin Homepage &#187;"
352
  msgstr ""
353
 
354
- #: classes/freemius/includes/fs-plugin-functions.php:287
355
- #: classes/freemius/includes/fs-plugin-functions.php:344
356
  msgid "Donate to this plugin &#187;"
357
  msgstr ""
358
 
359
- #: classes/freemius/includes/fs-plugin-functions.php:293
360
  msgid "Average Rating"
361
  msgstr ""
362
 
363
- #: classes/freemius/includes/fs-plugin-functions.php:299
364
  #, php-format
365
  msgid "(based on %s rating)"
366
  msgid_plural "(based on %s ratings)"
367
  msgstr[0] ""
368
  msgstr[1] ""
369
 
370
- #: classes/freemius/includes/fs-plugin-functions.php:312
371
  #, php-format
372
  msgid "Click to see reviews that provided a rating of %d star"
373
  msgid_plural "Click to see reviews that provided a rating of %d stars"
374
  msgstr[0] ""
375
  msgstr[1] ""
376
 
377
- #: classes/freemius/includes/fs-plugin-functions.php:312
378
  #, php-format
379
  msgid "%d star"
380
  msgid_plural "%d stars"
381
  msgstr[0] ""
382
  msgstr[1] ""
383
 
384
- #: classes/freemius/includes/fs-plugin-functions.php:323
385
  msgid "Contributors"
386
  msgstr ""
387
 
388
- #: classes/freemius/includes/fs-plugin-functions.php:351
389
  #: classes/freemius/includes/fs-plugin-functions.php:353
 
390
  msgid "Warning:"
391
  msgstr ""
392
 
393
- #: classes/freemius/includes/fs-plugin-functions.php:351
394
  msgid "This plugin has not been tested with your current version of WordPress."
395
  msgstr ""
396
 
397
- #: classes/freemius/includes/fs-plugin-functions.php:353
398
  msgid ""
399
  "This plugin has not been marked as compatible with your version of WordPress."
400
  msgstr ""
401
 
402
- #: classes/freemius/includes/fs-plugin-functions.php:390
403
- #: classes/freemius/includes/i18n.php:76
404
  msgid "Install Now"
405
  msgstr ""
406
 
407
- #: classes/freemius/includes/fs-plugin-functions.php:395
408
- #: classes/freemius/includes/i18n.php:77
409
  msgid "Install Update Now"
410
  msgstr ""
411
 
412
- #: classes/freemius/includes/fs-plugin-functions.php:399
413
  #, php-format
414
  msgid "Newer Version (%s) Installed"
415
  msgstr ""
416
 
417
- #: classes/freemius/includes/fs-plugin-functions.php:402
418
  msgid "Latest Version Installed"
419
  msgstr ""
420
 
421
- #: classes/freemius/includes/i18n.php:5
422
  msgid "Account"
423
  msgstr ""
424
 
425
- #: classes/freemius/includes/i18n.php:6
426
  msgid "Add On"
427
  msgstr ""
428
 
429
- #: classes/freemius/includes/i18n.php:7
430
  msgid "Contact Us"
431
  msgstr ""
432
 
433
- #: classes/freemius/includes/i18n.php:8
434
  msgid "Change Ownership"
435
  msgstr ""
436
 
437
- #: classes/freemius/includes/i18n.php:9
438
  msgid "Support"
439
  msgstr ""
440
 
441
- #: classes/freemius/includes/i18n.php:10
442
  msgid "Support Forum"
443
  msgstr ""
444
 
445
- #: classes/freemius/includes/i18n.php:11
446
  msgid "Add Ons"
447
  msgstr ""
448
 
449
- #: classes/freemius/includes/i18n.php:12
450
  msgctxt "verb"
451
  msgid "Upgrade"
452
  msgstr ""
453
 
454
- #: classes/freemius/includes/i18n.php:13
455
  msgid "Awesome"
456
  msgstr ""
457
 
458
- #: classes/freemius/includes/i18n.php:14
459
  msgctxt "noun"
460
  msgid "Pricing"
461
  msgstr ""
462
 
463
- #: classes/freemius/includes/i18n.php:15
464
  msgctxt "noun"
465
  msgid "Price"
466
  msgstr ""
467
 
468
- #: classes/freemius/includes/i18n.php:16
469
  msgid "Unlimited Updates"
470
  msgstr ""
471
 
472
- #: classes/freemius/includes/i18n.php:17
473
  msgctxt "verb"
474
  msgid "Downgrade"
475
  msgstr ""
476
 
477
- #: classes/freemius/includes/i18n.php:18
478
  msgid "Free Trial"
479
  msgstr ""
480
 
481
- #: classes/freemius/includes/i18n.php:19
482
  msgid "Details"
483
  msgstr ""
484
 
485
- #: classes/freemius/includes/i18n.php:20
486
  msgid "Account Details"
487
  msgstr ""
488
 
489
- #: classes/freemius/includes/i18n.php:21
490
  msgctxt "verb"
491
  msgid "Delete"
492
  msgstr ""
493
 
494
- #: classes/freemius/includes/i18n.php:22
495
  msgid "Delete Account"
496
  msgstr ""
497
 
498
- #: classes/freemius/includes/i18n.php:23
499
  msgctxt "as close a window"
500
  msgid "Dismiss"
501
  msgstr ""
502
 
503
- #: classes/freemius/includes/i18n.php:24
504
  msgctxt "as product pricing plan"
505
  msgid "Plan"
506
  msgstr ""
507
 
508
- #: classes/freemius/includes/i18n.php:25
509
  msgid "Change Plan"
510
  msgstr ""
511
 
512
- #: classes/freemius/includes/i18n.php:26
513
  #, php-format
514
  msgctxt "as download professional version"
515
  msgid "Download %s Version"
516
  msgstr ""
517
 
518
- #: classes/freemius/includes/i18n.php:27
519
  #, php-format
520
  msgctxt "as download professional version now"
521
  msgid "Download %s version now"
522
  msgstr ""
523
 
524
- #: classes/freemius/includes/i18n.php:28
525
  msgctxt "as download latest version"
526
  msgid "Download Latest"
527
  msgstr ""
528
 
529
- #: classes/freemius/includes/i18n.php:29
530
  #, php-format
531
  msgctxt "E.g. you have a professional license."
532
  msgid "You have a %s license."
533
  msgstr ""
534
 
535
- #: classes/freemius/includes/i18n.php:30
536
  msgid "New"
537
  msgstr ""
538
 
539
- #: classes/freemius/includes/i18n.php:31
540
  msgid "Free"
541
  msgstr ""
542
 
543
- #: classes/freemius/includes/i18n.php:32
544
  msgctxt "as trial plan"
545
  msgid "Trial"
546
  msgstr ""
547
 
548
- #: classes/freemius/includes/i18n.php:33
549
  msgctxt "verb"
550
  msgid "Purchase"
551
  msgstr ""
552
 
553
- #: classes/freemius/includes/i18n.php:34
554
  msgid "Single Site License"
555
  msgstr ""
556
 
557
- #: classes/freemius/includes/i18n.php:35
558
  msgid "Unlimited Licenses"
559
  msgstr ""
560
 
561
- #: classes/freemius/includes/i18n.php:36
562
  #, php-format
563
  msgid "Up to %s Sites"
564
  msgstr ""
565
 
566
- #: classes/freemius/includes/i18n.php:37
567
  #, php-format
568
  msgctxt "e.g. Professional Plan"
569
  msgid "%s Plan"
570
  msgstr ""
571
 
572
- #: classes/freemius/includes/i18n.php:38
573
  #, php-format
574
  msgid "You are just one step away - %s"
575
  msgstr ""
576
 
577
- #: classes/freemius/includes/i18n.php:39
578
  #, php-format
579
  msgctxt "%s - plugin name. As complete \"Jetpack\" activation now"
580
  msgid "Complete \"%s\" Activation Now"
581
  msgstr ""
582
 
583
- #: classes/freemius/includes/i18n.php:40
584
  #, php-format
585
  msgid "We made a few tweaks to the plugin, %s"
586
  msgstr ""
587
 
588
- #: classes/freemius/includes/i18n.php:41
589
  #, php-format
590
  msgid "Opt-in to make \"%s\" Better!"
591
  msgstr ""
592
 
593
- #: classes/freemius/includes/i18n.php:42
594
  msgid "Error"
595
  msgstr ""
596
 
597
- #: classes/freemius/includes/i18n.php:43
598
  msgid ""
599
  "Freemius SDK couldn't find the plugin's main file. Please contact "
600
  "sdk@freemius.com with the current error."
601
  msgstr ""
602
 
603
- #: classes/freemius/includes/i18n.php:46
604
  msgctxt "as expiration date"
605
  msgid "Expiration"
606
  msgstr ""
607
 
608
- #: classes/freemius/includes/i18n.php:47
609
  msgid "not verified"
610
  msgstr ""
611
 
612
- #: classes/freemius/includes/i18n.php:48
613
  msgid "Verify Email"
614
  msgstr ""
615
 
616
- #: classes/freemius/includes/i18n.php:49
617
  #, php-format
618
  msgctxt "e.g. expires in 2 months"
619
  msgid "Expires in %s"
620
  msgstr ""
621
 
622
- #: classes/freemius/includes/i18n.php:50
623
  #, php-format
624
  msgctxt "e.g. auto renews in 2 months"
625
  msgid "Auto renews in %s"
626
  msgstr ""
627
 
628
- #: classes/freemius/includes/i18n.php:51
629
  msgid "No expiration"
630
  msgstr ""
631
 
632
- #: classes/freemius/includes/i18n.php:52
633
  msgid "Expired"
634
  msgstr ""
635
 
636
- #: classes/freemius/includes/i18n.php:53
637
  #, php-format
638
  msgid "In %s"
639
  msgstr ""
640
 
641
- #: classes/freemius/includes/i18n.php:54
642
  msgctxt "as plugin version"
643
  msgid "Version"
644
  msgstr ""
645
 
646
- #: classes/freemius/includes/i18n.php:55
647
  msgid "Name"
648
  msgstr ""
649
 
650
- #: classes/freemius/includes/i18n.php:56
651
  #: notifications/class-aal-notification-email.php:15
652
  msgid "Email"
653
  msgstr ""
654
 
655
- #: classes/freemius/includes/i18n.php:57
656
  msgid "Verified"
657
  msgstr ""
658
 
659
- #: classes/freemius/includes/i18n.php:58 language/strings.php:29
660
  msgid "Plugin"
661
  msgstr ""
662
 
663
- #: classes/freemius/includes/i18n.php:59
 
 
 
 
 
 
 
 
 
664
  msgid "Title"
665
  msgstr ""
666
 
667
- #: classes/freemius/includes/i18n.php:60
668
  msgctxt "as WP plugin slug"
669
  msgid "Slug"
670
  msgstr ""
671
 
672
- #: classes/freemius/includes/i18n.php:61
673
  msgid "ID"
674
  msgstr ""
675
 
676
- #: classes/freemius/includes/i18n.php:62
677
  msgid "Users"
678
  msgstr ""
679
 
680
- #: classes/freemius/includes/i18n.php:63
681
  msgid "Plugin Installs"
682
  msgstr ""
683
 
684
- #: classes/freemius/includes/i18n.php:64
685
  msgctxt "like websites"
686
  msgid "Sites"
687
  msgstr ""
688
 
689
- #: classes/freemius/includes/i18n.php:65
690
  msgid "User ID"
691
  msgstr ""
692
 
693
- #: classes/freemius/includes/i18n.php:66
694
  msgid "Site ID"
695
  msgstr ""
696
 
697
- #: classes/freemius/includes/i18n.php:67
698
  msgid "Public Key"
699
  msgstr ""
700
 
701
- #: classes/freemius/includes/i18n.php:68
702
  msgid "Secret Key"
703
  msgstr ""
704
 
705
- #: classes/freemius/includes/i18n.php:69
706
  msgctxt "as secret encryption key missing"
707
  msgid "No Secret"
708
  msgstr ""
709
 
710
- #: classes/freemius/includes/i18n.php:70
711
  msgid "No ID"
712
  msgstr ""
713
 
714
- #: classes/freemius/includes/i18n.php:71
715
  msgctxt "as synchronize license"
716
  msgid "Sync License"
717
  msgstr ""
718
 
719
- #: classes/freemius/includes/i18n.php:72
 
 
 
 
 
720
  msgid "Deactivate License"
721
  msgstr ""
722
 
723
- #: classes/freemius/includes/i18n.php:73
724
  msgid "Activate"
725
  msgstr ""
726
 
727
- #: classes/freemius/includes/i18n.php:74 classes/freemius/includes/i18n.php:95
728
  msgid "Deactivate"
729
  msgstr ""
730
 
731
- #: classes/freemius/includes/i18n.php:75
732
  msgctxt "active mode"
733
  msgid "Active"
734
  msgstr ""
735
 
736
- #: classes/freemius/includes/i18n.php:78
 
 
 
 
 
737
  #, php-format
738
  msgid "More information about %s"
739
  msgstr ""
740
 
741
- #: classes/freemius/includes/i18n.php:79
742
  msgid "Localhost"
743
  msgstr ""
744
 
745
- #: classes/freemius/includes/i18n.php:80
746
  #, php-format
747
  msgctxt "as activate Professional plan"
748
  msgid "Activate %s Plan"
749
  msgstr ""
750
 
751
- #: classes/freemius/includes/i18n.php:81
752
  #, php-format
753
  msgid "What is your %s?"
754
  msgstr ""
755
 
756
- #: classes/freemius/includes/i18n.php:82
757
  msgid "Activate this add-on"
758
  msgstr ""
759
 
760
- #: classes/freemius/includes/i18n.php:83
761
  msgid ""
762
  "Deactivating your license will block all premium features, but will enable "
763
  "you to activate the license on another site. Are you sure you want to "
764
  "proceed?"
765
  msgstr ""
766
 
767
- #: classes/freemius/includes/i18n.php:84
768
  #, php-format
769
  msgid ""
770
  "Deleting the account will automatically deactivate your %s plan license so "
@@ -773,162 +792,170 @@ msgid ""
773
  "account. Are you sure you would like to continue with the deletion?"
774
  msgstr ""
775
 
776
- #: classes/freemius/includes/i18n.php:85
777
  msgid ""
778
  "Deletion is not temporary. Only delete if you no longer want to use this "
779
  "plugin anymore. Are you sure you would like to continue with the deletion?"
780
  msgstr ""
781
 
782
- #: classes/freemius/includes/i18n.php:86
783
  #, php-format
784
  msgid ""
785
  "Downgrading your plan will immediately stop all future recurring payments "
786
  "and your %s plan license will expire in %s."
787
  msgstr ""
788
 
789
- #: classes/freemius/includes/i18n.php:87
790
  #, php-format
791
  msgid ""
792
  "You can still enjoy all %s features but you will not have access to plugin "
793
  "updates and support."
794
  msgstr ""
795
 
796
- #: classes/freemius/includes/i18n.php:88
797
  #, php-format
798
  msgid ""
799
  "Once your license expire you can still use the Free version but you will NOT "
800
  "have access to the %s features."
801
  msgstr ""
802
 
803
- #: classes/freemius/includes/i18n.php:89
804
  msgid "Are you sure you want to proceed?"
805
  msgstr ""
806
 
807
- #: classes/freemius/includes/i18n.php:92
808
  #, php-format
809
  msgid "Add Ons for %s"
810
  msgstr ""
811
 
812
- #: classes/freemius/includes/i18n.php:94
813
  msgid "If you have a moment, please let us know why you are deactivating"
814
  msgstr ""
815
 
816
- #: classes/freemius/includes/i18n.php:96
817
  msgid "Yes - Deactivate"
818
  msgstr ""
819
 
820
- #: classes/freemius/includes/i18n.php:97
821
  msgid "Submit & Deactivate"
822
  msgstr ""
823
 
824
- #: classes/freemius/includes/i18n.php:98
825
  msgctxt "the text of the cancel button of the plugin deactivation dialog box."
826
  msgid "Cancel"
827
  msgstr ""
828
 
829
- #: classes/freemius/includes/i18n.php:99
830
  msgid "I no longer need the plugin"
831
  msgstr ""
832
 
833
- #: classes/freemius/includes/i18n.php:100
834
  msgid "I found a better plugin"
835
  msgstr ""
836
 
837
- #: classes/freemius/includes/i18n.php:101
838
  msgid "I only needed the plugin for a short period"
839
  msgstr ""
840
 
841
- #: classes/freemius/includes/i18n.php:102
842
  msgid "The plugin broke my site"
843
  msgstr ""
844
 
845
- #: classes/freemius/includes/i18n.php:103
846
  msgid "The plugin suddenly stopped working"
847
  msgstr ""
848
 
849
- #: classes/freemius/includes/i18n.php:104
850
  msgid "I can't pay for it anymore"
851
  msgstr ""
852
 
853
- #: classes/freemius/includes/i18n.php:105
854
  msgctxt ""
855
  "the text of the \"other\" reason for deactivating the plugin that is shown "
856
  "in the modal box."
857
  msgid "Other"
858
  msgstr ""
859
 
860
- #: classes/freemius/includes/i18n.php:106
861
  msgid "What's the plugin's name?"
862
  msgstr ""
863
 
864
- #: classes/freemius/includes/i18n.php:107
865
  msgid "What price would you feel comfortable paying?"
866
  msgstr ""
867
 
868
- #: classes/freemius/includes/i18n.php:108
869
  msgid "I couldn't understand how to make it work"
870
  msgstr ""
871
 
872
- #: classes/freemius/includes/i18n.php:109
873
  msgid "The plugin is great, but I need specific feature that you don't support"
874
  msgstr ""
875
 
876
- #: classes/freemius/includes/i18n.php:110
877
  msgid "The plugin is not working"
878
  msgstr ""
879
 
880
- #: classes/freemius/includes/i18n.php:111
881
  msgid "It's not what I was looking for"
882
  msgstr ""
883
 
884
- #: classes/freemius/includes/i18n.php:112
885
  msgid "The plugin didn't work as expected"
886
  msgstr ""
887
 
888
- #: classes/freemius/includes/i18n.php:113
889
  msgid "What feature?"
890
  msgstr ""
891
 
892
- #: classes/freemius/includes/i18n.php:114
893
  msgid "Kindly share what didn't work so we can fix it for future users..."
894
  msgstr ""
895
 
896
- #: classes/freemius/includes/i18n.php:115
897
  msgid "What you've been looking for?"
898
  msgstr ""
899
 
900
- #: classes/freemius/includes/i18n.php:116
901
  msgid "What did you expect?"
902
  msgstr ""
903
 
904
- #: classes/freemius/includes/i18n.php:117
905
  msgid "The plugin didn't work"
906
  msgstr ""
907
 
908
- #: classes/freemius/includes/i18n.php:118
909
  msgid "I don't like to share my information with you"
910
  msgstr ""
911
 
912
- #: classes/freemius/includes/i18n.php:122
913
  #, php-format
914
  msgctxt "greeting"
915
  msgid "Hey %s,"
916
  msgstr ""
917
 
918
- #: classes/freemius/includes/i18n.php:123
919
  #, php-format
920
  msgctxt "a greeting. E.g. Thanks John!"
921
  msgid "Thanks %s!"
922
  msgstr ""
923
 
924
- #: classes/freemius/includes/i18n.php:124
925
  #, php-format
926
  msgid ""
927
  "In order to enjoy all our features and functionality, %s needs to connect "
928
  "your user, %s at %s, to %s"
929
  msgstr ""
930
 
931
- #: classes/freemius/includes/i18n.php:125
 
 
 
 
 
 
 
 
932
  #, php-format
933
  msgid ""
934
  "You should receive an activation email for %s to your mailbox at %s. Please "
@@ -936,341 +963,414 @@ msgid ""
936
  "install."
937
  msgstr ""
938
 
939
- #: classes/freemius/includes/i18n.php:126
940
  msgid "What permissions are being granted?"
941
  msgstr ""
942
 
943
- #: classes/freemius/includes/i18n.php:127
944
  msgid "Your Profile Overview"
945
  msgstr ""
946
 
947
- #: classes/freemius/includes/i18n.php:128
948
  msgid "Name and email address"
949
  msgstr ""
950
 
951
- #: classes/freemius/includes/i18n.php:129
952
  msgid "Your Site Overview"
953
  msgstr ""
954
 
955
- #: classes/freemius/includes/i18n.php:130
956
- msgid "Site address and WordPress version"
957
  msgstr ""
958
 
959
- #: classes/freemius/includes/i18n.php:131
960
- msgid "Current Plugin Events"
961
  msgstr ""
962
 
963
- #: classes/freemius/includes/i18n.php:132
964
  msgid "Activation, deactivation and uninstall"
965
  msgstr ""
966
 
967
- #: classes/freemius/includes/i18n.php:133
 
 
 
 
 
 
 
 
968
  msgid "Privacy Policy"
969
  msgstr ""
970
 
971
- #: classes/freemius/includes/i18n.php:134
972
  msgid "Terms of Service"
973
  msgstr ""
974
 
975
- #: classes/freemius/includes/i18n.php:135
976
  msgctxt "as activating plugin"
977
  msgid "Activating"
978
  msgstr ""
979
 
980
- #: classes/freemius/includes/i18n.php:136
981
  msgctxt "button label"
982
  msgid "Allow & Continue"
983
  msgstr ""
984
 
985
- #: classes/freemius/includes/i18n.php:137
986
  msgctxt "verb"
987
  msgid "Skip"
988
  msgstr ""
989
 
990
- #: classes/freemius/includes/i18n.php:138
991
  msgid "Re-send activation email"
992
  msgstr ""
993
 
994
- #: classes/freemius/includes/i18n.php:142
995
  msgid "Screenshots"
996
  msgstr ""
997
 
998
- #: classes/freemius/includes/i18n.php:143
999
  #, php-format
1000
  msgid "Click to view full-size screenshot %d"
1001
  msgstr ""
1002
 
1003
- #: classes/freemius/includes/i18n.php:147
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1004
  #, php-format
1005
  msgid "Add Ons of Plugin %s"
1006
  msgstr ""
1007
 
1008
- #: classes/freemius/includes/i18n.php:148
1009
  msgid "Are you sure you want to delete the all Freemius data?"
1010
  msgstr ""
1011
 
1012
- #: classes/freemius/includes/i18n.php:149
 
 
 
 
1013
  msgid "Delete All Accounts"
1014
  msgstr ""
1015
 
1016
- #: classes/freemius/includes/i18n.php:153
 
 
 
 
 
 
 
 
1017
  msgctxt "as congratulations"
1018
  msgid "Congrats"
1019
  msgstr ""
1020
 
1021
- #: classes/freemius/includes/i18n.php:154
1022
  msgctxt "exclamation"
1023
  msgid "Oops"
1024
  msgstr ""
1025
 
1026
- #: classes/freemius/includes/i18n.php:155
1027
  msgctxt "interjection expressing joy or exuberance"
1028
  msgid "Yee-haw"
1029
  msgstr ""
1030
 
1031
- #: classes/freemius/includes/i18n.php:156
1032
  msgctxt ""
1033
  "(especially in electronic communication) used to express elation, "
1034
  "enthusiasm, or triumph."
1035
  msgid "W00t"
1036
  msgstr ""
1037
 
1038
- #: classes/freemius/includes/i18n.php:157
1039
  msgctxt "a positive response"
1040
  msgid "Right on"
1041
  msgstr ""
1042
 
1043
- #: classes/freemius/includes/i18n.php:158
1044
  msgctxt ""
1045
  "something somebody says when they are thinking about what you have just "
1046
  "said. "
1047
  msgid "Hmm"
1048
  msgstr ""
1049
 
1050
- #: classes/freemius/includes/i18n.php:159
1051
  msgid "O.K"
1052
  msgstr ""
1053
 
1054
- #: classes/freemius/includes/i18n.php:160
1055
  msgctxt "exclamation"
1056
  msgid "Hey"
1057
  msgstr ""
1058
 
1059
- #: classes/freemius/includes/i18n.php:161
1060
  msgctxt "advance notice of something that will need attention."
1061
  msgid "Heads up"
1062
  msgstr ""
1063
 
1064
- #: classes/freemius/includes/i18n.php:165
1065
  msgid "Seems like you got the latest release."
1066
  msgstr ""
1067
 
1068
- #: classes/freemius/includes/i18n.php:166
1069
  msgid "You are all good!"
1070
  msgstr ""
1071
 
1072
- #: classes/freemius/includes/i18n.php:167
1073
  msgid ""
1074
  "Sorry, we could not complete the email update. Another user with the same "
1075
  "email is already registered."
1076
  msgstr ""
1077
 
1078
- #: classes/freemius/includes/i18n.php:168
1079
  #, php-format
1080
  msgid ""
1081
  "If you would like to give up the ownership of the plugin's account to %s "
1082
  "click the Change Ownership button."
1083
  msgstr ""
1084
 
1085
- #: classes/freemius/includes/i18n.php:169
1086
  msgid ""
1087
  "Your email was successfully updated. You should receive an email with "
1088
  "confirmation instructions in few moments."
1089
  msgstr ""
1090
 
1091
- #: classes/freemius/includes/i18n.php:170
1092
  msgid "Your name was successfully updated."
1093
  msgstr ""
1094
 
1095
- #: classes/freemius/includes/i18n.php:171
1096
  #, php-format
1097
  msgid "You have successfully updated your %s."
1098
  msgstr ""
1099
 
1100
- #: classes/freemius/includes/i18n.php:172
1101
  msgid "Please provide your full name."
1102
  msgstr ""
1103
 
1104
- #: classes/freemius/includes/i18n.php:173
1105
  #, php-format
1106
  msgid ""
1107
  "Verification mail was just sent to %s. If you can't find it after 5 min, "
1108
  "please check your spam box."
1109
  msgstr ""
1110
 
1111
- #: classes/freemius/includes/i18n.php:174
1112
  #, php-format
1113
  msgid ""
1114
  "Just letting you know that the add-ons information of %s is being pulled "
1115
  "from external server."
1116
  msgstr ""
1117
 
1118
- #: classes/freemius/includes/i18n.php:175
1119
  msgid "No credit card required"
1120
  msgstr ""
1121
 
1122
- #: classes/freemius/includes/i18n.php:176
1123
  msgid "Premium plugin version was successfully activated."
1124
  msgstr ""
1125
 
1126
- #: classes/freemius/includes/i18n.php:177
1127
  #, php-format
1128
  msgid "The upgrade of %s was successfully completed."
1129
  msgstr ""
1130
 
1131
- #: classes/freemius/includes/i18n.php:178
1132
  #, php-format
1133
  msgid "Your account was successfully activated with the %s plan."
1134
  msgstr ""
1135
 
1136
- #: classes/freemius/includes/i18n.php:179
1137
  #, php-format
1138
  msgid "Download the latest %s version now"
1139
  msgstr ""
1140
 
1141
- #: classes/freemius/includes/i18n.php:180
1142
  msgid "Download the latest version now"
1143
  msgstr ""
1144
 
1145
- #: classes/freemius/includes/i18n.php:181
1146
  #, php-format
1147
  msgctxt "%s - product name, e.g. Facebook add-on was successfully..."
1148
  msgid "%s Add-on was successfully purchased."
1149
  msgstr ""
1150
 
1151
- #: classes/freemius/includes/i18n.php:182
1152
  #, php-format
1153
  msgid "Your %s Add-on plan was successfully upgraded."
1154
  msgstr ""
1155
 
1156
- #: classes/freemius/includes/i18n.php:183
1157
  msgid "Your email has been successfully verified - you are AWESOME!"
1158
  msgstr ""
1159
 
1160
- #: classes/freemius/includes/i18n.php:184
1161
  msgid "Your plan was successfully upgraded."
1162
  msgstr ""
1163
 
1164
- #: classes/freemius/includes/i18n.php:185
1165
  #, php-format
1166
  msgid "Your plan was successfully changed to %s."
1167
  msgstr ""
1168
 
1169
- #: classes/freemius/includes/i18n.php:186
1170
  msgid ""
1171
  "Your license has expired. You can still continue using the free plugin "
1172
  "forever."
1173
  msgstr ""
1174
 
1175
- #: classes/freemius/includes/i18n.php:187
1176
  msgid "Your trial has been successfully started."
1177
  msgstr ""
1178
 
1179
- #: classes/freemius/includes/i18n.php:188
1180
  msgid "Your license was successfully activated."
1181
  msgstr ""
1182
 
1183
- #: classes/freemius/includes/i18n.php:189
1184
  msgid "It looks like your site currently don't have an active license."
1185
  msgstr ""
1186
 
1187
- #: classes/freemius/includes/i18n.php:190
1188
  #, php-format
1189
  msgid "Your license was successfully deactivated, you are back to the %s plan."
1190
  msgstr ""
1191
 
1192
- #: classes/freemius/includes/i18n.php:191
1193
  msgid "It looks like the license deactivation failed."
1194
  msgstr ""
1195
 
1196
- #: classes/freemius/includes/i18n.php:192
1197
  msgid "It looks like the license could not be activated."
1198
  msgstr ""
1199
 
1200
- #: classes/freemius/includes/i18n.php:193
1201
  msgid "Error received from the server:"
1202
  msgstr ""
1203
 
1204
- #: classes/freemius/includes/i18n.php:194
1205
  msgid ""
1206
  "Your trial has expired. You can still continue using all our free features."
1207
  msgstr ""
1208
 
1209
- #: classes/freemius/includes/i18n.php:195
1210
  #, php-format
1211
  msgid ""
1212
  "Your plan was successfully downgraded. Your %s plan license will expire in "
1213
  "%s."
1214
  msgstr ""
1215
 
1216
- #: classes/freemius/includes/i18n.php:196
1217
  msgid ""
1218
  "Seems like we are having some temporary issue with your plan downgrade. "
1219
  "Please try again in few minutes."
1220
  msgstr ""
1221
 
1222
- #: classes/freemius/includes/i18n.php:197
1223
  msgid ""
1224
  "It looks like you are not in trial mode anymore so there's nothing to "
1225
  "cancel :)"
1226
  msgstr ""
1227
 
1228
- #: classes/freemius/includes/i18n.php:198
1229
  #, php-format
1230
  msgid "Your %s Plan trial was successfully cancelled."
1231
  msgstr ""
1232
 
1233
- #: classes/freemius/includes/i18n.php:199
1234
  #, php-format
1235
  msgctxt "%s - numeric version number"
1236
  msgid "Version %s was released."
1237
  msgstr ""
1238
 
1239
- #: classes/freemius/includes/i18n.php:200
1240
  #, php-format
1241
  msgid "Please download %s."
1242
  msgstr ""
1243
 
1244
- #: classes/freemius/includes/i18n.php:201
1245
  #, php-format
1246
  msgctxt "%s - plan name, as the latest professional version here"
1247
  msgid "the latest %s version here"
1248
  msgstr ""
1249
 
1250
- #: classes/freemius/includes/i18n.php:202
1251
  #, php-format
1252
  msgid ""
1253
  "How do you like %s so far? Test all our %s premium features with a %d-day "
1254
  "free trial."
1255
  msgstr ""
1256
 
1257
- #: classes/freemius/includes/i18n.php:203
1258
  msgctxt "call to action"
1259
  msgid "Start free trial"
1260
  msgstr ""
1261
 
1262
- #: classes/freemius/includes/i18n.php:204
1263
  msgid ""
1264
  "Seems like we are having some temporary issue with your trial cancellation. "
1265
  "Please try again in few minutes."
1266
  msgstr ""
1267
 
1268
- #: classes/freemius/includes/i18n.php:205
1269
  #, php-format
1270
  msgid "No commitment for %s days - cancel anytime!"
1271
  msgstr ""
1272
 
1273
- #: classes/freemius/includes/i18n.php:206
1274
  #, php-format
1275
  msgid ""
1276
  "Your license has expired. You can still continue using all the %s features, "
@@ -1278,130 +1378,130 @@ msgid ""
1278
  "support."
1279
  msgstr ""
1280
 
1281
- #: classes/freemius/includes/i18n.php:207
1282
  #, php-format
1283
  msgid "Couldn't activate %s."
1284
  msgstr ""
1285
 
1286
- #: classes/freemius/includes/i18n.php:208
1287
  msgid "Please contact us with the following message:"
1288
  msgstr ""
1289
 
1290
- #: classes/freemius/includes/i18n.php:209
1291
  msgid ""
1292
  "It looks like your plan did't change. If you did upgrade, it's probably an "
1293
  "issue on our side - sorry."
1294
  msgstr ""
1295
 
1296
- #: classes/freemius/includes/i18n.php:210
1297
  msgid "Please contact us here"
1298
  msgstr ""
1299
 
1300
- #: classes/freemius/includes/i18n.php:211
1301
  #, php-format
1302
  msgid ""
1303
  "I have upgraded my account but when I try to Sync the License, the plan "
1304
  "remains %s."
1305
  msgstr ""
1306
 
1307
- #: classes/freemius/includes/i18n.php:214
1308
  msgid "From unknown reason, the API connectivity test fails."
1309
  msgstr ""
1310
 
1311
- #: classes/freemius/includes/i18n.php:215
1312
  msgid ""
1313
  "We use PHP cURL library for the API calls, which is a very common library "
1314
  "and usually installed out of the box. Unfortunately, cURL is not installed "
1315
  "on your server."
1316
  msgstr ""
1317
 
1318
- #: classes/freemius/includes/i18n.php:216
1319
  msgid ""
1320
  "From unknown reason, CloudFlare, the firewall we use, blocks the connection."
1321
  msgstr ""
1322
 
1323
- #: classes/freemius/includes/i18n.php:217
1324
  #, php-format
1325
  msgctxt "as pluginX requires an access to our API"
1326
  msgid "%s requires an access to our API."
1327
  msgstr ""
1328
 
1329
- #: classes/freemius/includes/i18n.php:218
1330
  msgid ""
1331
  "It looks like your server is using Squid ACL (access control lists), which "
1332
  "blocks the connection."
1333
  msgstr ""
1334
 
1335
- #: classes/freemius/includes/i18n.php:219
1336
  msgid "I don't know what is Squid or ACL, help me!"
1337
  msgstr ""
1338
 
1339
- #: classes/freemius/includes/i18n.php:220
1340
- #: classes/freemius/includes/i18n.php:224
1341
  #, php-format
1342
  msgid ""
1343
  "We'll make sure to contact your hosting company and resolve the issue. You "
1344
  "will get a follow-up email to %s once we have an update."
1345
  msgstr ""
1346
 
1347
- #: classes/freemius/includes/i18n.php:221
1348
  msgid "I'm a system administrator"
1349
  msgstr ""
1350
 
1351
- #: classes/freemius/includes/i18n.php:222
1352
  #, php-format
1353
  msgid ""
1354
  "Great, please whitelist the following domains: %s. Once you done, deactivate "
1355
  "the plugin and activate it again."
1356
  msgstr ""
1357
 
1358
- #: classes/freemius/includes/i18n.php:223
1359
  msgid "I don't know what is cURL or how to install it, help me!"
1360
  msgstr ""
1361
 
1362
- #: classes/freemius/includes/i18n.php:225
1363
  msgid ""
1364
  "Great, please install cURL and enable it in your php.ini file. To make sure "
1365
  "it was successfully activated, use 'phpinfo()'. Once activated, deactivate "
1366
  "the plugin and reactivate it back again."
1367
  msgstr ""
1368
 
1369
- #: classes/freemius/includes/i18n.php:226
1370
  msgid ""
1371
  "We are sure it's an issue on our side and more than happy to resolve it for "
1372
  "you ASAP if you give us a chance."
1373
  msgstr ""
1374
 
1375
- #: classes/freemius/includes/i18n.php:227
1376
  msgid "Yes - I'm giving you a chance to fix it"
1377
  msgstr ""
1378
 
1379
- #: classes/freemius/includes/i18n.php:228
1380
  #, php-format
1381
  msgid ""
1382
  "We will do our best to whitelist your server and resolve this issue ASAP. "
1383
  "You will get a follow-up email to %s once we have an update."
1384
  msgstr ""
1385
 
1386
- #: classes/freemius/includes/i18n.php:229
1387
  msgid "Let's try your previous version"
1388
  msgstr ""
1389
 
1390
- #: classes/freemius/includes/i18n.php:230
1391
  msgid "Uninstall this version and install the previous one."
1392
  msgstr ""
1393
 
1394
- #: classes/freemius/includes/i18n.php:231
1395
  msgid "That's exhausting, please deactivate"
1396
  msgstr ""
1397
 
1398
- #: classes/freemius/includes/i18n.php:232
1399
  msgid ""
1400
  "We feel your frustration and sincerely apologize for the inconvenience. Hope "
1401
  "to see you again in the future."
1402
  msgstr ""
1403
 
1404
- #: classes/freemius/includes/i18n.php:233
1405
  #, php-format
1406
  msgid ""
1407
  "Thank for giving us the chance to fix it! A message was just sent to our "
@@ -1409,7 +1509,7 @@ msgid ""
1409
  "Appreciate your patience."
1410
  msgstr ""
1411
 
1412
- #: classes/freemius/includes/i18n.php:234
1413
  #, php-format
1414
  msgctxt "%1s - plugin title, %2s - API domain"
1415
  msgid ""
@@ -1417,13 +1517,13 @@ msgid ""
1417
  "%1s license synchronization. Please contact your host to whitelist %2s"
1418
  msgstr ""
1419
 
1420
- #: classes/freemius/includes/i18n.php:235
1421
  msgid ""
1422
  "It seems like one of the authentication parameters is wrong. Update your "
1423
  "Public Key, Secret Key & User ID, and try again."
1424
  msgstr ""
1425
 
1426
- #: classes/freemius/includes/i18n.php:238
1427
  #, php-format
1428
  msgid ""
1429
  "Please check your mailbox, you should receive an email via %s to confirm the "
@@ -1431,46 +1531,42 @@ msgid ""
1431
  "the next 15 min. If you cannot find the email, please check your spam folder."
1432
  msgstr ""
1433
 
1434
- #: classes/freemius/includes/i18n.php:239
1435
  #, php-format
1436
  msgid ""
1437
  "Thanks for confirming the ownership change. An email was just sent to %s for "
1438
  "final approval."
1439
  msgstr ""
1440
 
1441
- #: classes/freemius/includes/i18n.php:240
1442
  #, php-format
1443
  msgid "%s is the new owner of the account."
1444
  msgstr ""
1445
 
1446
- #: classes/freemius/includes/i18n.php:242
1447
- msgid "Freemius Debug"
1448
- msgstr ""
1449
-
1450
- #: classes/freemius/includes/i18n.php:243
1451
  #, php-format
1452
  msgctxt "addonX cannot run without pluginY"
1453
  msgid "%s cannot run without %s."
1454
  msgstr ""
1455
 
1456
- #: classes/freemius/includes/i18n.php:244
1457
  #, php-format
1458
  msgctxt "addonX cannot run..."
1459
  msgid "%s cannot run without the plugin."
1460
  msgstr ""
1461
 
1462
- #: classes/freemius/includes/i18n.php:245
1463
  #, php-format
1464
  msgctxt "pluginX activation was successfully..."
1465
  msgid "%s activation was successfully completed."
1466
  msgstr ""
1467
 
1468
- #: classes/freemius/includes/i18n.php:246
1469
  msgctxt "Plugin installer section title"
1470
  msgid "Features & Pricing"
1471
  msgstr ""
1472
 
1473
- #: classes/freemius/templates/account.php:274
1474
  msgctxt "verb"
1475
  msgid "Edit"
1476
  msgstr ""
6
  #, fuzzy
7
  msgid ""
8
  msgstr ""
9
+ "Project-Id-Version: aryo-activity-log 2.2.8\n"
10
  "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2016-01-17 16:31+0200\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
65
  msgstr ""
66
 
67
  #: classes/class-aal-activity-log-list-table.php:142
68
+ #: classes/freemius/includes/fs-plugin-functions.php:261
69
  #, php-format
70
  msgid "%s ago"
71
  msgstr ""
303
  msgid "Other Notes"
304
  msgstr ""
305
 
306
+ #: classes/freemius/includes/fs-plugin-functions.php:118
307
  msgid "Plugin Install"
308
  msgstr ""
309
 
310
+ #: classes/freemius/includes/fs-plugin-functions.php:251
311
  msgid "Version:"
312
  msgstr ""
313
 
314
+ #: classes/freemius/includes/fs-plugin-functions.php:255
315
  msgid "Author:"
316
  msgstr ""
317
 
318
+ #: classes/freemius/includes/fs-plugin-functions.php:259
319
  msgid "Last Updated:"
320
  msgstr ""
321
 
322
+ #: classes/freemius/includes/fs-plugin-functions.php:266
323
  msgid "Requires WordPress Version:"
324
  msgstr ""
325
 
326
+ #: classes/freemius/includes/fs-plugin-functions.php:266
327
  #, php-format
328
  msgid "%s or higher"
329
  msgstr ""
330
 
331
+ #: classes/freemius/includes/fs-plugin-functions.php:270
332
  msgid "Compatible up to:"
333
  msgstr ""
334
 
335
+ #: classes/freemius/includes/fs-plugin-functions.php:274
336
  msgid "Downloaded:"
337
  msgstr ""
338
 
339
+ #: classes/freemius/includes/fs-plugin-functions.php:274
340
  #, php-format
341
  msgid "%s time"
342
  msgid_plural "%s times"
343
  msgstr[0] ""
344
  msgstr[1] ""
345
 
346
+ #: classes/freemius/includes/fs-plugin-functions.php:279
347
  msgid "WordPress.org Plugin Page &#187;"
348
  msgstr ""
349
 
350
+ #: classes/freemius/includes/fs-plugin-functions.php:284
351
  msgid "Plugin Homepage &#187;"
352
  msgstr ""
353
 
354
+ #: classes/freemius/includes/fs-plugin-functions.php:289
355
+ #: classes/freemius/includes/fs-plugin-functions.php:346
356
  msgid "Donate to this plugin &#187;"
357
  msgstr ""
358
 
359
+ #: classes/freemius/includes/fs-plugin-functions.php:295
360
  msgid "Average Rating"
361
  msgstr ""
362
 
363
+ #: classes/freemius/includes/fs-plugin-functions.php:301
364
  #, php-format
365
  msgid "(based on %s rating)"
366
  msgid_plural "(based on %s ratings)"
367
  msgstr[0] ""
368
  msgstr[1] ""
369
 
370
+ #: classes/freemius/includes/fs-plugin-functions.php:314
371
  #, php-format
372
  msgid "Click to see reviews that provided a rating of %d star"
373
  msgid_plural "Click to see reviews that provided a rating of %d stars"
374
  msgstr[0] ""
375
  msgstr[1] ""
376
 
377
+ #: classes/freemius/includes/fs-plugin-functions.php:314
378
  #, php-format
379
  msgid "%d star"
380
  msgid_plural "%d stars"
381
  msgstr[0] ""
382
  msgstr[1] ""
383
 
384
+ #: classes/freemius/includes/fs-plugin-functions.php:325
385
  msgid "Contributors"
386
  msgstr ""
387
 
 
388
  #: classes/freemius/includes/fs-plugin-functions.php:353
389
+ #: classes/freemius/includes/fs-plugin-functions.php:355
390
  msgid "Warning:"
391
  msgstr ""
392
 
393
+ #: classes/freemius/includes/fs-plugin-functions.php:353
394
  msgid "This plugin has not been tested with your current version of WordPress."
395
  msgstr ""
396
 
397
+ #: classes/freemius/includes/fs-plugin-functions.php:355
398
  msgid ""
399
  "This plugin has not been marked as compatible with your version of WordPress."
400
  msgstr ""
401
 
402
+ #: classes/freemius/includes/fs-plugin-functions.php:392
403
+ #: classes/freemius/includes/i18n.php:99
404
  msgid "Install Now"
405
  msgstr ""
406
 
407
+ #: classes/freemius/includes/fs-plugin-functions.php:397
408
+ #: classes/freemius/includes/i18n.php:100
409
  msgid "Install Update Now"
410
  msgstr ""
411
 
412
+ #: classes/freemius/includes/fs-plugin-functions.php:401
413
  #, php-format
414
  msgid "Newer Version (%s) Installed"
415
  msgstr ""
416
 
417
+ #: classes/freemius/includes/fs-plugin-functions.php:404
418
  msgid "Latest Version Installed"
419
  msgstr ""
420
 
421
+ #: classes/freemius/includes/i18n.php:24
422
  msgid "Account"
423
  msgstr ""
424
 
425
+ #: classes/freemius/includes/i18n.php:25
426
  msgid "Add On"
427
  msgstr ""
428
 
429
+ #: classes/freemius/includes/i18n.php:26
430
  msgid "Contact Us"
431
  msgstr ""
432
 
433
+ #: classes/freemius/includes/i18n.php:27
434
  msgid "Change Ownership"
435
  msgstr ""
436
 
437
+ #: classes/freemius/includes/i18n.php:28
438
  msgid "Support"
439
  msgstr ""
440
 
441
+ #: classes/freemius/includes/i18n.php:29
442
  msgid "Support Forum"
443
  msgstr ""
444
 
445
+ #: classes/freemius/includes/i18n.php:30
446
  msgid "Add Ons"
447
  msgstr ""
448
 
449
+ #: classes/freemius/includes/i18n.php:31
450
  msgctxt "verb"
451
  msgid "Upgrade"
452
  msgstr ""
453
 
454
+ #: classes/freemius/includes/i18n.php:32
455
  msgid "Awesome"
456
  msgstr ""
457
 
458
+ #: classes/freemius/includes/i18n.php:33
459
  msgctxt "noun"
460
  msgid "Pricing"
461
  msgstr ""
462
 
463
+ #: classes/freemius/includes/i18n.php:34
464
  msgctxt "noun"
465
  msgid "Price"
466
  msgstr ""
467
 
468
+ #: classes/freemius/includes/i18n.php:35
469
  msgid "Unlimited Updates"
470
  msgstr ""
471
 
472
+ #: classes/freemius/includes/i18n.php:36
473
  msgctxt "verb"
474
  msgid "Downgrade"
475
  msgstr ""
476
 
477
+ #: classes/freemius/includes/i18n.php:37
478
  msgid "Free Trial"
479
  msgstr ""
480
 
481
+ #: classes/freemius/includes/i18n.php:38
482
  msgid "Details"
483
  msgstr ""
484
 
485
+ #: classes/freemius/includes/i18n.php:39
486
  msgid "Account Details"
487
  msgstr ""
488
 
489
+ #: classes/freemius/includes/i18n.php:40
490
  msgctxt "verb"
491
  msgid "Delete"
492
  msgstr ""
493
 
494
+ #: classes/freemius/includes/i18n.php:41
495
  msgid "Delete Account"
496
  msgstr ""
497
 
498
+ #: classes/freemius/includes/i18n.php:42
499
  msgctxt "as close a window"
500
  msgid "Dismiss"
501
  msgstr ""
502
 
503
+ #: classes/freemius/includes/i18n.php:43
504
  msgctxt "as product pricing plan"
505
  msgid "Plan"
506
  msgstr ""
507
 
508
+ #: classes/freemius/includes/i18n.php:44
509
  msgid "Change Plan"
510
  msgstr ""
511
 
512
+ #: classes/freemius/includes/i18n.php:45
513
  #, php-format
514
  msgctxt "as download professional version"
515
  msgid "Download %s Version"
516
  msgstr ""
517
 
518
+ #: classes/freemius/includes/i18n.php:46
519
  #, php-format
520
  msgctxt "as download professional version now"
521
  msgid "Download %s version now"
522
  msgstr ""
523
 
524
+ #: classes/freemius/includes/i18n.php:47
525
  msgctxt "as download latest version"
526
  msgid "Download Latest"
527
  msgstr ""
528
 
529
+ #: classes/freemius/includes/i18n.php:48
530
  #, php-format
531
  msgctxt "E.g. you have a professional license."
532
  msgid "You have a %s license."
533
  msgstr ""
534
 
535
+ #: classes/freemius/includes/i18n.php:49
536
  msgid "New"
537
  msgstr ""
538
 
539
+ #: classes/freemius/includes/i18n.php:50
540
  msgid "Free"
541
  msgstr ""
542
 
543
+ #: classes/freemius/includes/i18n.php:51
544
  msgctxt "as trial plan"
545
  msgid "Trial"
546
  msgstr ""
547
 
548
+ #: classes/freemius/includes/i18n.php:52
549
  msgctxt "verb"
550
  msgid "Purchase"
551
  msgstr ""
552
 
553
+ #: classes/freemius/includes/i18n.php:53
554
  msgid "Single Site License"
555
  msgstr ""
556
 
557
+ #: classes/freemius/includes/i18n.php:54
558
  msgid "Unlimited Licenses"
559
  msgstr ""
560
 
561
+ #: classes/freemius/includes/i18n.php:55
562
  #, php-format
563
  msgid "Up to %s Sites"
564
  msgstr ""
565
 
566
+ #: classes/freemius/includes/i18n.php:56
567
  #, php-format
568
  msgctxt "e.g. Professional Plan"
569
  msgid "%s Plan"
570
  msgstr ""
571
 
572
+ #: classes/freemius/includes/i18n.php:57
573
  #, php-format
574
  msgid "You are just one step away - %s"
575
  msgstr ""
576
 
577
+ #: classes/freemius/includes/i18n.php:58
578
  #, php-format
579
  msgctxt "%s - plugin name. As complete \"Jetpack\" activation now"
580
  msgid "Complete \"%s\" Activation Now"
581
  msgstr ""
582
 
583
+ #: classes/freemius/includes/i18n.php:59
584
  #, php-format
585
  msgid "We made a few tweaks to the plugin, %s"
586
  msgstr ""
587
 
588
+ #: classes/freemius/includes/i18n.php:60
589
  #, php-format
590
  msgid "Opt-in to make \"%s\" Better!"
591
  msgstr ""
592
 
593
+ #: classes/freemius/includes/i18n.php:61
594
  msgid "Error"
595
  msgstr ""
596
 
597
+ #: classes/freemius/includes/i18n.php:62
598
  msgid ""
599
  "Freemius SDK couldn't find the plugin's main file. Please contact "
600
  "sdk@freemius.com with the current error."
601
  msgstr ""
602
 
603
+ #: classes/freemius/includes/i18n.php:65
604
  msgctxt "as expiration date"
605
  msgid "Expiration"
606
  msgstr ""
607
 
608
+ #: classes/freemius/includes/i18n.php:66
609
  msgid "not verified"
610
  msgstr ""
611
 
612
+ #: classes/freemius/includes/i18n.php:67
613
  msgid "Verify Email"
614
  msgstr ""
615
 
616
+ #: classes/freemius/includes/i18n.php:68
617
  #, php-format
618
  msgctxt "e.g. expires in 2 months"
619
  msgid "Expires in %s"
620
  msgstr ""
621
 
622
+ #: classes/freemius/includes/i18n.php:69
623
  #, php-format
624
  msgctxt "e.g. auto renews in 2 months"
625
  msgid "Auto renews in %s"
626
  msgstr ""
627
 
628
+ #: classes/freemius/includes/i18n.php:70
629
  msgid "No expiration"
630
  msgstr ""
631
 
632
+ #: classes/freemius/includes/i18n.php:71
633
  msgid "Expired"
634
  msgstr ""
635
 
636
+ #: classes/freemius/includes/i18n.php:72
637
  #, php-format
638
  msgid "In %s"
639
  msgstr ""
640
 
641
+ #: classes/freemius/includes/i18n.php:73
642
  msgctxt "as plugin version"
643
  msgid "Version"
644
  msgstr ""
645
 
646
+ #: classes/freemius/includes/i18n.php:74
647
  msgid "Name"
648
  msgstr ""
649
 
650
+ #: classes/freemius/includes/i18n.php:75
651
  #: notifications/class-aal-notification-email.php:15
652
  msgid "Email"
653
  msgstr ""
654
 
655
+ #: classes/freemius/includes/i18n.php:76
656
  msgid "Verified"
657
  msgstr ""
658
 
659
+ #: classes/freemius/includes/i18n.php:77 language/strings.php:29
660
  msgid "Plugin"
661
  msgstr ""
662
 
663
+ #: classes/freemius/includes/i18n.php:78
664
+ msgid "Plugins"
665
+ msgstr ""
666
+
667
+ #: classes/freemius/includes/i18n.php:79
668
+ msgctxt "as file/folder path"
669
+ msgid "Path"
670
+ msgstr ""
671
+
672
+ #: classes/freemius/includes/i18n.php:80
673
  msgid "Title"
674
  msgstr ""
675
 
676
+ #: classes/freemius/includes/i18n.php:81
677
  msgctxt "as WP plugin slug"
678
  msgid "Slug"
679
  msgstr ""
680
 
681
+ #: classes/freemius/includes/i18n.php:82
682
  msgid "ID"
683
  msgstr ""
684
 
685
+ #: classes/freemius/includes/i18n.php:83
686
  msgid "Users"
687
  msgstr ""
688
 
689
+ #: classes/freemius/includes/i18n.php:84
690
  msgid "Plugin Installs"
691
  msgstr ""
692
 
693
+ #: classes/freemius/includes/i18n.php:85
694
  msgctxt "like websites"
695
  msgid "Sites"
696
  msgstr ""
697
 
698
+ #: classes/freemius/includes/i18n.php:86
699
  msgid "User ID"
700
  msgstr ""
701
 
702
+ #: classes/freemius/includes/i18n.php:87
703
  msgid "Site ID"
704
  msgstr ""
705
 
706
+ #: classes/freemius/includes/i18n.php:88
707
  msgid "Public Key"
708
  msgstr ""
709
 
710
+ #: classes/freemius/includes/i18n.php:89
711
  msgid "Secret Key"
712
  msgstr ""
713
 
714
+ #: classes/freemius/includes/i18n.php:90
715
  msgctxt "as secret encryption key missing"
716
  msgid "No Secret"
717
  msgstr ""
718
 
719
+ #: classes/freemius/includes/i18n.php:91
720
  msgid "No ID"
721
  msgstr ""
722
 
723
+ #: classes/freemius/includes/i18n.php:92
724
  msgctxt "as synchronize license"
725
  msgid "Sync License"
726
  msgstr ""
727
 
728
+ #: classes/freemius/includes/i18n.php:93
729
+ msgctxt "as synchronize"
730
+ msgid "Sync"
731
+ msgstr ""
732
+
733
+ #: classes/freemius/includes/i18n.php:94
734
  msgid "Deactivate License"
735
  msgstr ""
736
 
737
+ #: classes/freemius/includes/i18n.php:95
738
  msgid "Activate"
739
  msgstr ""
740
 
741
+ #: classes/freemius/includes/i18n.php:96 classes/freemius/includes/i18n.php:118
742
  msgid "Deactivate"
743
  msgstr ""
744
 
745
+ #: classes/freemius/includes/i18n.php:97
746
  msgctxt "active mode"
747
  msgid "Active"
748
  msgstr ""
749
 
750
+ #: classes/freemius/includes/i18n.php:98
751
+ msgctxt "is active mode?"
752
+ msgid "Is Active"
753
+ msgstr ""
754
+
755
+ #: classes/freemius/includes/i18n.php:101
756
  #, php-format
757
  msgid "More information about %s"
758
  msgstr ""
759
 
760
+ #: classes/freemius/includes/i18n.php:102
761
  msgid "Localhost"
762
  msgstr ""
763
 
764
+ #: classes/freemius/includes/i18n.php:103
765
  #, php-format
766
  msgctxt "as activate Professional plan"
767
  msgid "Activate %s Plan"
768
  msgstr ""
769
 
770
+ #: classes/freemius/includes/i18n.php:104
771
  #, php-format
772
  msgid "What is your %s?"
773
  msgstr ""
774
 
775
+ #: classes/freemius/includes/i18n.php:105
776
  msgid "Activate this add-on"
777
  msgstr ""
778
 
779
+ #: classes/freemius/includes/i18n.php:106
780
  msgid ""
781
  "Deactivating your license will block all premium features, but will enable "
782
  "you to activate the license on another site. Are you sure you want to "
783
  "proceed?"
784
  msgstr ""
785
 
786
+ #: classes/freemius/includes/i18n.php:107
787
  #, php-format
788
  msgid ""
789
  "Deleting the account will automatically deactivate your %s plan license so "
792
  "account. Are you sure you would like to continue with the deletion?"
793
  msgstr ""
794
 
795
+ #: classes/freemius/includes/i18n.php:108
796
  msgid ""
797
  "Deletion is not temporary. Only delete if you no longer want to use this "
798
  "plugin anymore. Are you sure you would like to continue with the deletion?"
799
  msgstr ""
800
 
801
+ #: classes/freemius/includes/i18n.php:109
802
  #, php-format
803
  msgid ""
804
  "Downgrading your plan will immediately stop all future recurring payments "
805
  "and your %s plan license will expire in %s."
806
  msgstr ""
807
 
808
+ #: classes/freemius/includes/i18n.php:110
809
  #, php-format
810
  msgid ""
811
  "You can still enjoy all %s features but you will not have access to plugin "
812
  "updates and support."
813
  msgstr ""
814
 
815
+ #: classes/freemius/includes/i18n.php:111
816
  #, php-format
817
  msgid ""
818
  "Once your license expire you can still use the Free version but you will NOT "
819
  "have access to the %s features."
820
  msgstr ""
821
 
822
+ #: classes/freemius/includes/i18n.php:112
823
  msgid "Are you sure you want to proceed?"
824
  msgstr ""
825
 
826
+ #: classes/freemius/includes/i18n.php:115
827
  #, php-format
828
  msgid "Add Ons for %s"
829
  msgstr ""
830
 
831
+ #: classes/freemius/includes/i18n.php:117
832
  msgid "If you have a moment, please let us know why you are deactivating"
833
  msgstr ""
834
 
835
+ #: classes/freemius/includes/i18n.php:119
836
  msgid "Yes - Deactivate"
837
  msgstr ""
838
 
839
+ #: classes/freemius/includes/i18n.php:120
840
  msgid "Submit & Deactivate"
841
  msgstr ""
842
 
843
+ #: classes/freemius/includes/i18n.php:121
844
  msgctxt "the text of the cancel button of the plugin deactivation dialog box."
845
  msgid "Cancel"
846
  msgstr ""
847
 
848
+ #: classes/freemius/includes/i18n.php:122
849
  msgid "I no longer need the plugin"
850
  msgstr ""
851
 
852
+ #: classes/freemius/includes/i18n.php:123
853
  msgid "I found a better plugin"
854
  msgstr ""
855
 
856
+ #: classes/freemius/includes/i18n.php:124
857
  msgid "I only needed the plugin for a short period"
858
  msgstr ""
859
 
860
+ #: classes/freemius/includes/i18n.php:125
861
  msgid "The plugin broke my site"
862
  msgstr ""
863
 
864
+ #: classes/freemius/includes/i18n.php:126
865
  msgid "The plugin suddenly stopped working"
866
  msgstr ""
867
 
868
+ #: classes/freemius/includes/i18n.php:127
869
  msgid "I can't pay for it anymore"
870
  msgstr ""
871
 
872
+ #: classes/freemius/includes/i18n.php:128
873
  msgctxt ""
874
  "the text of the \"other\" reason for deactivating the plugin that is shown "
875
  "in the modal box."
876
  msgid "Other"
877
  msgstr ""
878
 
879
+ #: classes/freemius/includes/i18n.php:129
880
  msgid "What's the plugin's name?"
881
  msgstr ""
882
 
883
+ #: classes/freemius/includes/i18n.php:130
884
  msgid "What price would you feel comfortable paying?"
885
  msgstr ""
886
 
887
+ #: classes/freemius/includes/i18n.php:131
888
  msgid "I couldn't understand how to make it work"
889
  msgstr ""
890
 
891
+ #: classes/freemius/includes/i18n.php:132
892
  msgid "The plugin is great, but I need specific feature that you don't support"
893
  msgstr ""
894
 
895
+ #: classes/freemius/includes/i18n.php:133
896
  msgid "The plugin is not working"
897
  msgstr ""
898
 
899
+ #: classes/freemius/includes/i18n.php:134
900
  msgid "It's not what I was looking for"
901
  msgstr ""
902
 
903
+ #: classes/freemius/includes/i18n.php:135
904
  msgid "The plugin didn't work as expected"
905
  msgstr ""
906
 
907
+ #: classes/freemius/includes/i18n.php:136
908
  msgid "What feature?"
909
  msgstr ""
910
 
911
+ #: classes/freemius/includes/i18n.php:137
912
  msgid "Kindly share what didn't work so we can fix it for future users..."
913
  msgstr ""
914
 
915
+ #: classes/freemius/includes/i18n.php:138
916
  msgid "What you've been looking for?"
917
  msgstr ""
918
 
919
+ #: classes/freemius/includes/i18n.php:139
920
  msgid "What did you expect?"
921
  msgstr ""
922
 
923
+ #: classes/freemius/includes/i18n.php:140
924
  msgid "The plugin didn't work"
925
  msgstr ""
926
 
927
+ #: classes/freemius/includes/i18n.php:141
928
  msgid "I don't like to share my information with you"
929
  msgstr ""
930
 
931
+ #: classes/freemius/includes/i18n.php:145
932
  #, php-format
933
  msgctxt "greeting"
934
  msgid "Hey %s,"
935
  msgstr ""
936
 
937
+ #: classes/freemius/includes/i18n.php:146
938
  #, php-format
939
  msgctxt "a greeting. E.g. Thanks John!"
940
  msgid "Thanks %s!"
941
  msgstr ""
942
 
943
+ #: classes/freemius/includes/i18n.php:147
944
  #, php-format
945
  msgid ""
946
  "In order to enjoy all our features and functionality, %s needs to connect "
947
  "your user, %s at %s, to %s"
948
  msgstr ""
949
 
950
+ #: classes/freemius/includes/i18n.php:148
951
+ #, php-format
952
+ msgid ""
953
+ "Please help us improve %2$s! If you opt-in, some data about your usage of "
954
+ "%2$s will be sent to %5$s. If you skip this, that's okay! %2$s will still "
955
+ "work just fine."
956
+ msgstr ""
957
+
958
+ #: classes/freemius/includes/i18n.php:149
959
  #, php-format
960
  msgid ""
961
  "You should receive an activation email for %s to your mailbox at %s. Please "
963
  "install."
964
  msgstr ""
965
 
966
+ #: classes/freemius/includes/i18n.php:150
967
  msgid "What permissions are being granted?"
968
  msgstr ""
969
 
970
+ #: classes/freemius/includes/i18n.php:151
971
  msgid "Your Profile Overview"
972
  msgstr ""
973
 
974
+ #: classes/freemius/includes/i18n.php:152
975
  msgid "Name and email address"
976
  msgstr ""
977
 
978
+ #: classes/freemius/includes/i18n.php:153
979
  msgid "Your Site Overview"
980
  msgstr ""
981
 
982
+ #: classes/freemius/includes/i18n.php:154
983
+ msgid "Site address, WordPress version, PHP Version"
984
  msgstr ""
985
 
986
+ #: classes/freemius/includes/i18n.php:155
987
+ msgid "Plugin Events"
988
  msgstr ""
989
 
990
+ #: classes/freemius/includes/i18n.php:156
991
  msgid "Activation, deactivation and uninstall"
992
  msgstr ""
993
 
994
+ #: classes/freemius/includes/i18n.php:157
995
+ msgid "Newsletter"
996
+ msgstr ""
997
+
998
+ #: classes/freemius/includes/i18n.php:158
999
+ msgid "Updates, announcements, marketing, no spam"
1000
+ msgstr ""
1001
+
1002
+ #: classes/freemius/includes/i18n.php:159
1003
  msgid "Privacy Policy"
1004
  msgstr ""
1005
 
1006
+ #: classes/freemius/includes/i18n.php:160
1007
  msgid "Terms of Service"
1008
  msgstr ""
1009
 
1010
+ #: classes/freemius/includes/i18n.php:161
1011
  msgctxt "as activating plugin"
1012
  msgid "Activating"
1013
  msgstr ""
1014
 
1015
+ #: classes/freemius/includes/i18n.php:162
1016
  msgctxt "button label"
1017
  msgid "Allow & Continue"
1018
  msgstr ""
1019
 
1020
+ #: classes/freemius/includes/i18n.php:163
1021
  msgctxt "verb"
1022
  msgid "Skip"
1023
  msgstr ""
1024
 
1025
+ #: classes/freemius/includes/i18n.php:164
1026
  msgid "Re-send activation email"
1027
  msgstr ""
1028
 
1029
+ #: classes/freemius/includes/i18n.php:168
1030
  msgid "Screenshots"
1031
  msgstr ""
1032
 
1033
+ #: classes/freemius/includes/i18n.php:169
1034
  #, php-format
1035
  msgid "Click to view full-size screenshot %d"
1036
  msgstr ""
1037
 
1038
+ #: classes/freemius/includes/i18n.php:173
1039
+ msgid "Freemius Debug"
1040
+ msgstr ""
1041
+
1042
+ #: classes/freemius/includes/i18n.php:174
1043
+ msgctxt "as turned on"
1044
+ msgid "On"
1045
+ msgstr ""
1046
+
1047
+ #: classes/freemius/includes/i18n.php:175
1048
+ msgctxt "as turned off"
1049
+ msgid "Off"
1050
+ msgstr ""
1051
+
1052
+ #: classes/freemius/includes/i18n.php:176
1053
+ msgid "Freemius State"
1054
+ msgstr ""
1055
+
1056
+ #: classes/freemius/includes/i18n.php:177
1057
+ msgctxt "as connection was successful"
1058
+ msgid "Connected"
1059
+ msgstr ""
1060
+
1061
+ #: classes/freemius/includes/i18n.php:178
1062
+ msgctxt "as connection blocked"
1063
+ msgid "Blocked"
1064
+ msgstr ""
1065
+
1066
+ #: classes/freemius/includes/i18n.php:179
1067
+ msgctxt "as application program interface"
1068
+ msgid "API"
1069
+ msgstr ""
1070
+
1071
+ #: classes/freemius/includes/i18n.php:180
1072
+ msgctxt "as software development kit versions"
1073
+ msgid "SDK"
1074
+ msgstr ""
1075
+
1076
+ #: classes/freemius/includes/i18n.php:181
1077
+ msgctxt "as software development kit versions"
1078
+ msgid "SDK Versions"
1079
+ msgstr ""
1080
+
1081
+ #: classes/freemius/includes/i18n.php:182
1082
+ msgctxt "as plugin folder path"
1083
+ msgid "Plugin Path"
1084
+ msgstr ""
1085
+
1086
+ #: classes/freemius/includes/i18n.php:183
1087
+ msgctxt "as sdk path"
1088
+ msgid "SDK Path"
1089
+ msgstr ""
1090
+
1091
+ #: classes/freemius/includes/i18n.php:184
1092
  #, php-format
1093
  msgid "Add Ons of Plugin %s"
1094
  msgstr ""
1095
 
1096
+ #: classes/freemius/includes/i18n.php:185
1097
  msgid "Are you sure you want to delete the all Freemius data?"
1098
  msgstr ""
1099
 
1100
+ #: classes/freemius/includes/i18n.php:186
1101
+ msgid "Actions"
1102
+ msgstr ""
1103
+
1104
+ #: classes/freemius/includes/i18n.php:187
1105
  msgid "Delete All Accounts"
1106
  msgstr ""
1107
 
1108
+ #: classes/freemius/includes/i18n.php:188
1109
+ msgid "Clear API Cache"
1110
+ msgstr ""
1111
+
1112
+ #: classes/freemius/includes/i18n.php:189
1113
+ msgid "Sync Data From Server"
1114
+ msgstr ""
1115
+
1116
+ #: classes/freemius/includes/i18n.php:193
1117
  msgctxt "as congratulations"
1118
  msgid "Congrats"
1119
  msgstr ""
1120
 
1121
+ #: classes/freemius/includes/i18n.php:194
1122
  msgctxt "exclamation"
1123
  msgid "Oops"
1124
  msgstr ""
1125
 
1126
+ #: classes/freemius/includes/i18n.php:195
1127
  msgctxt "interjection expressing joy or exuberance"
1128
  msgid "Yee-haw"
1129
  msgstr ""
1130
 
1131
+ #: classes/freemius/includes/i18n.php:196
1132
  msgctxt ""
1133
  "(especially in electronic communication) used to express elation, "
1134
  "enthusiasm, or triumph."
1135
  msgid "W00t"
1136
  msgstr ""
1137
 
1138
+ #: classes/freemius/includes/i18n.php:197
1139
  msgctxt "a positive response"
1140
  msgid "Right on"
1141
  msgstr ""
1142
 
1143
+ #: classes/freemius/includes/i18n.php:198
1144
  msgctxt ""
1145
  "something somebody says when they are thinking about what you have just "
1146
  "said. "
1147
  msgid "Hmm"
1148
  msgstr ""
1149
 
1150
+ #: classes/freemius/includes/i18n.php:199
1151
  msgid "O.K"
1152
  msgstr ""
1153
 
1154
+ #: classes/freemius/includes/i18n.php:200
1155
  msgctxt "exclamation"
1156
  msgid "Hey"
1157
  msgstr ""
1158
 
1159
+ #: classes/freemius/includes/i18n.php:201
1160
  msgctxt "advance notice of something that will need attention."
1161
  msgid "Heads up"
1162
  msgstr ""
1163
 
1164
+ #: classes/freemius/includes/i18n.php:205
1165
  msgid "Seems like you got the latest release."
1166
  msgstr ""
1167
 
1168
+ #: classes/freemius/includes/i18n.php:206
1169
  msgid "You are all good!"
1170
  msgstr ""
1171
 
1172
+ #: classes/freemius/includes/i18n.php:207
1173
  msgid ""
1174
  "Sorry, we could not complete the email update. Another user with the same "
1175
  "email is already registered."
1176
  msgstr ""
1177
 
1178
+ #: classes/freemius/includes/i18n.php:208
1179
  #, php-format
1180
  msgid ""
1181
  "If you would like to give up the ownership of the plugin's account to %s "
1182
  "click the Change Ownership button."
1183
  msgstr ""
1184
 
1185
+ #: classes/freemius/includes/i18n.php:209
1186
  msgid ""
1187
  "Your email was successfully updated. You should receive an email with "
1188
  "confirmation instructions in few moments."
1189
  msgstr ""
1190
 
1191
+ #: classes/freemius/includes/i18n.php:210
1192
  msgid "Your name was successfully updated."
1193
  msgstr ""
1194
 
1195
+ #: classes/freemius/includes/i18n.php:211
1196
  #, php-format
1197
  msgid "You have successfully updated your %s."
1198
  msgstr ""
1199
 
1200
+ #: classes/freemius/includes/i18n.php:212
1201
  msgid "Please provide your full name."
1202
  msgstr ""
1203
 
1204
+ #: classes/freemius/includes/i18n.php:213
1205
  #, php-format
1206
  msgid ""
1207
  "Verification mail was just sent to %s. If you can't find it after 5 min, "
1208
  "please check your spam box."
1209
  msgstr ""
1210
 
1211
+ #: classes/freemius/includes/i18n.php:214
1212
  #, php-format
1213
  msgid ""
1214
  "Just letting you know that the add-ons information of %s is being pulled "
1215
  "from external server."
1216
  msgstr ""
1217
 
1218
+ #: classes/freemius/includes/i18n.php:215
1219
  msgid "No credit card required"
1220
  msgstr ""
1221
 
1222
+ #: classes/freemius/includes/i18n.php:216
1223
  msgid "Premium plugin version was successfully activated."
1224
  msgstr ""
1225
 
1226
+ #: classes/freemius/includes/i18n.php:217
1227
  #, php-format
1228
  msgid "The upgrade of %s was successfully completed."
1229
  msgstr ""
1230
 
1231
+ #: classes/freemius/includes/i18n.php:218
1232
  #, php-format
1233
  msgid "Your account was successfully activated with the %s plan."
1234
  msgstr ""
1235
 
1236
+ #: classes/freemius/includes/i18n.php:219
1237
  #, php-format
1238
  msgid "Download the latest %s version now"
1239
  msgstr ""
1240
 
1241
+ #: classes/freemius/includes/i18n.php:220
1242
  msgid "Download the latest version now"
1243
  msgstr ""
1244
 
1245
+ #: classes/freemius/includes/i18n.php:221
1246
  #, php-format
1247
  msgctxt "%s - product name, e.g. Facebook add-on was successfully..."
1248
  msgid "%s Add-on was successfully purchased."
1249
  msgstr ""
1250
 
1251
+ #: classes/freemius/includes/i18n.php:222
1252
  #, php-format
1253
  msgid "Your %s Add-on plan was successfully upgraded."
1254
  msgstr ""
1255
 
1256
+ #: classes/freemius/includes/i18n.php:223
1257
  msgid "Your email has been successfully verified - you are AWESOME!"
1258
  msgstr ""
1259
 
1260
+ #: classes/freemius/includes/i18n.php:224
1261
  msgid "Your plan was successfully upgraded."
1262
  msgstr ""
1263
 
1264
+ #: classes/freemius/includes/i18n.php:225
1265
  #, php-format
1266
  msgid "Your plan was successfully changed to %s."
1267
  msgstr ""
1268
 
1269
+ #: classes/freemius/includes/i18n.php:226
1270
  msgid ""
1271
  "Your license has expired. You can still continue using the free plugin "
1272
  "forever."
1273
  msgstr ""
1274
 
1275
+ #: classes/freemius/includes/i18n.php:227
1276
  msgid "Your trial has been successfully started."
1277
  msgstr ""
1278
 
1279
+ #: classes/freemius/includes/i18n.php:228
1280
  msgid "Your license was successfully activated."
1281
  msgstr ""
1282
 
1283
+ #: classes/freemius/includes/i18n.php:229
1284
  msgid "It looks like your site currently don't have an active license."
1285
  msgstr ""
1286
 
1287
+ #: classes/freemius/includes/i18n.php:230
1288
  #, php-format
1289
  msgid "Your license was successfully deactivated, you are back to the %s plan."
1290
  msgstr ""
1291
 
1292
+ #: classes/freemius/includes/i18n.php:231
1293
  msgid "It looks like the license deactivation failed."
1294
  msgstr ""
1295
 
1296
+ #: classes/freemius/includes/i18n.php:232
1297
  msgid "It looks like the license could not be activated."
1298
  msgstr ""
1299
 
1300
+ #: classes/freemius/includes/i18n.php:233
1301
  msgid "Error received from the server:"
1302
  msgstr ""
1303
 
1304
+ #: classes/freemius/includes/i18n.php:234
1305
  msgid ""
1306
  "Your trial has expired. You can still continue using all our free features."
1307
  msgstr ""
1308
 
1309
+ #: classes/freemius/includes/i18n.php:235
1310
  #, php-format
1311
  msgid ""
1312
  "Your plan was successfully downgraded. Your %s plan license will expire in "
1313
  "%s."
1314
  msgstr ""
1315
 
1316
+ #: classes/freemius/includes/i18n.php:236
1317
  msgid ""
1318
  "Seems like we are having some temporary issue with your plan downgrade. "
1319
  "Please try again in few minutes."
1320
  msgstr ""
1321
 
1322
+ #: classes/freemius/includes/i18n.php:237
1323
  msgid ""
1324
  "It looks like you are not in trial mode anymore so there's nothing to "
1325
  "cancel :)"
1326
  msgstr ""
1327
 
1328
+ #: classes/freemius/includes/i18n.php:238
1329
  #, php-format
1330
  msgid "Your %s Plan trial was successfully cancelled."
1331
  msgstr ""
1332
 
1333
+ #: classes/freemius/includes/i18n.php:239
1334
  #, php-format
1335
  msgctxt "%s - numeric version number"
1336
  msgid "Version %s was released."
1337
  msgstr ""
1338
 
1339
+ #: classes/freemius/includes/i18n.php:240
1340
  #, php-format
1341
  msgid "Please download %s."
1342
  msgstr ""
1343
 
1344
+ #: classes/freemius/includes/i18n.php:241
1345
  #, php-format
1346
  msgctxt "%s - plan name, as the latest professional version here"
1347
  msgid "the latest %s version here"
1348
  msgstr ""
1349
 
1350
+ #: classes/freemius/includes/i18n.php:242
1351
  #, php-format
1352
  msgid ""
1353
  "How do you like %s so far? Test all our %s premium features with a %d-day "
1354
  "free trial."
1355
  msgstr ""
1356
 
1357
+ #: classes/freemius/includes/i18n.php:243
1358
  msgctxt "call to action"
1359
  msgid "Start free trial"
1360
  msgstr ""
1361
 
1362
+ #: classes/freemius/includes/i18n.php:244
1363
  msgid ""
1364
  "Seems like we are having some temporary issue with your trial cancellation. "
1365
  "Please try again in few minutes."
1366
  msgstr ""
1367
 
1368
+ #: classes/freemius/includes/i18n.php:245
1369
  #, php-format
1370
  msgid "No commitment for %s days - cancel anytime!"
1371
  msgstr ""
1372
 
1373
+ #: classes/freemius/includes/i18n.php:246
1374
  #, php-format
1375
  msgid ""
1376
  "Your license has expired. You can still continue using all the %s features, "
1378
  "support."
1379
  msgstr ""
1380
 
1381
+ #: classes/freemius/includes/i18n.php:247
1382
  #, php-format
1383
  msgid "Couldn't activate %s."
1384
  msgstr ""
1385
 
1386
+ #: classes/freemius/includes/i18n.php:248
1387
  msgid "Please contact us with the following message:"
1388
  msgstr ""
1389
 
1390
+ #: classes/freemius/includes/i18n.php:249
1391
  msgid ""
1392
  "It looks like your plan did't change. If you did upgrade, it's probably an "
1393
  "issue on our side - sorry."
1394
  msgstr ""
1395
 
1396
+ #: classes/freemius/includes/i18n.php:250
1397
  msgid "Please contact us here"
1398
  msgstr ""
1399
 
1400
+ #: classes/freemius/includes/i18n.php:251
1401
  #, php-format
1402
  msgid ""
1403
  "I have upgraded my account but when I try to Sync the License, the plan "
1404
  "remains %s."
1405
  msgstr ""
1406
 
1407
+ #: classes/freemius/includes/i18n.php:254
1408
  msgid "From unknown reason, the API connectivity test fails."
1409
  msgstr ""
1410
 
1411
+ #: classes/freemius/includes/i18n.php:255
1412
  msgid ""
1413
  "We use PHP cURL library for the API calls, which is a very common library "
1414
  "and usually installed out of the box. Unfortunately, cURL is not installed "
1415
  "on your server."
1416
  msgstr ""
1417
 
1418
+ #: classes/freemius/includes/i18n.php:256
1419
  msgid ""
1420
  "From unknown reason, CloudFlare, the firewall we use, blocks the connection."
1421
  msgstr ""
1422
 
1423
+ #: classes/freemius/includes/i18n.php:257
1424
  #, php-format
1425
  msgctxt "as pluginX requires an access to our API"
1426
  msgid "%s requires an access to our API."
1427
  msgstr ""
1428
 
1429
+ #: classes/freemius/includes/i18n.php:258
1430
  msgid ""
1431
  "It looks like your server is using Squid ACL (access control lists), which "
1432
  "blocks the connection."
1433
  msgstr ""
1434
 
1435
+ #: classes/freemius/includes/i18n.php:259
1436
  msgid "I don't know what is Squid or ACL, help me!"
1437
  msgstr ""
1438
 
1439
+ #: classes/freemius/includes/i18n.php:260
1440
+ #: classes/freemius/includes/i18n.php:264
1441
  #, php-format
1442
  msgid ""
1443
  "We'll make sure to contact your hosting company and resolve the issue. You "
1444
  "will get a follow-up email to %s once we have an update."
1445
  msgstr ""
1446
 
1447
+ #: classes/freemius/includes/i18n.php:261
1448
  msgid "I'm a system administrator"
1449
  msgstr ""
1450
 
1451
+ #: classes/freemius/includes/i18n.php:262
1452
  #, php-format
1453
  msgid ""
1454
  "Great, please whitelist the following domains: %s. Once you done, deactivate "
1455
  "the plugin and activate it again."
1456
  msgstr ""
1457
 
1458
+ #: classes/freemius/includes/i18n.php:263
1459
  msgid "I don't know what is cURL or how to install it, help me!"
1460
  msgstr ""
1461
 
1462
+ #: classes/freemius/includes/i18n.php:265
1463
  msgid ""
1464
  "Great, please install cURL and enable it in your php.ini file. To make sure "
1465
  "it was successfully activated, use 'phpinfo()'. Once activated, deactivate "
1466
  "the plugin and reactivate it back again."
1467
  msgstr ""
1468
 
1469
+ #: classes/freemius/includes/i18n.php:266
1470
  msgid ""
1471
  "We are sure it's an issue on our side and more than happy to resolve it for "
1472
  "you ASAP if you give us a chance."
1473
  msgstr ""
1474
 
1475
+ #: classes/freemius/includes/i18n.php:267
1476
  msgid "Yes - I'm giving you a chance to fix it"
1477
  msgstr ""
1478
 
1479
+ #: classes/freemius/includes/i18n.php:268
1480
  #, php-format
1481
  msgid ""
1482
  "We will do our best to whitelist your server and resolve this issue ASAP. "
1483
  "You will get a follow-up email to %s once we have an update."
1484
  msgstr ""
1485
 
1486
+ #: classes/freemius/includes/i18n.php:269
1487
  msgid "Let's try your previous version"
1488
  msgstr ""
1489
 
1490
+ #: classes/freemius/includes/i18n.php:270
1491
  msgid "Uninstall this version and install the previous one."
1492
  msgstr ""
1493
 
1494
+ #: classes/freemius/includes/i18n.php:271
1495
  msgid "That's exhausting, please deactivate"
1496
  msgstr ""
1497
 
1498
+ #: classes/freemius/includes/i18n.php:272
1499
  msgid ""
1500
  "We feel your frustration and sincerely apologize for the inconvenience. Hope "
1501
  "to see you again in the future."
1502
  msgstr ""
1503
 
1504
+ #: classes/freemius/includes/i18n.php:273
1505
  #, php-format
1506
  msgid ""
1507
  "Thank for giving us the chance to fix it! A message was just sent to our "
1509
  "Appreciate your patience."
1510
  msgstr ""
1511
 
1512
+ #: classes/freemius/includes/i18n.php:274
1513
  #, php-format
1514
  msgctxt "%1s - plugin title, %2s - API domain"
1515
  msgid ""
1517
  "%1s license synchronization. Please contact your host to whitelist %2s"
1518
  msgstr ""
1519
 
1520
+ #: classes/freemius/includes/i18n.php:275
1521
  msgid ""
1522
  "It seems like one of the authentication parameters is wrong. Update your "
1523
  "Public Key, Secret Key & User ID, and try again."
1524
  msgstr ""
1525
 
1526
+ #: classes/freemius/includes/i18n.php:278
1527
  #, php-format
1528
  msgid ""
1529
  "Please check your mailbox, you should receive an email via %s to confirm the "
1531
  "the next 15 min. If you cannot find the email, please check your spam folder."
1532
  msgstr ""
1533
 
1534
+ #: classes/freemius/includes/i18n.php:279
1535
  #, php-format
1536
  msgid ""
1537
  "Thanks for confirming the ownership change. An email was just sent to %s for "
1538
  "final approval."
1539
  msgstr ""
1540
 
1541
+ #: classes/freemius/includes/i18n.php:280
1542
  #, php-format
1543
  msgid "%s is the new owner of the account."
1544
  msgstr ""
1545
 
1546
+ #: classes/freemius/includes/i18n.php:282
 
 
 
 
1547
  #, php-format
1548
  msgctxt "addonX cannot run without pluginY"
1549
  msgid "%s cannot run without %s."
1550
  msgstr ""
1551
 
1552
+ #: classes/freemius/includes/i18n.php:283
1553
  #, php-format
1554
  msgctxt "addonX cannot run..."
1555
  msgid "%s cannot run without the plugin."
1556
  msgstr ""
1557
 
1558
+ #: classes/freemius/includes/i18n.php:284
1559
  #, php-format
1560
  msgctxt "pluginX activation was successfully..."
1561
  msgid "%s activation was successfully completed."
1562
  msgstr ""
1563
 
1564
+ #: classes/freemius/includes/i18n.php:285
1565
  msgctxt "Plugin installer section title"
1566
  msgid "Features & Pricing"
1567
  msgstr ""
1568
 
1569
+ #: classes/freemius/templates/account.php:283
1570
  msgctxt "verb"
1571
  msgid "Edit"
1572
  msgstr ""
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: pojo.me, KingYes, ariel.k, maor, freemius
3
  Tags: actions, activity, Activity Log, activity logs, admin, admin actions, administration, analytics, audit, audit log, audit logs, bbPress, change, changes, dashboard, email notifications, event, event log, log, logger, Logs, monitor, multi-users, multisite, notifications, security, security audit trail, security event log, stats, stream, tracking, troubleshooting, user activity report, user tracking, woocommerce, woocommerce log, woocommerce monitor, woocommerce monitoring, woocommrece security, wordpress activity log, WordPress Admin, wordpress admin monitoring, wordpress audit, wordpress email alerts, wordpress log, wordpress monitor, wordpress monitoring, wordpress multisite, wordpress security, wordpress security alerts, wordpress security audit log, wordpress security monitor, wordpress security plugin, wordpress user tracking
4
  Requires at least: 3.5
5
  Tested up to: 4.4
6
- Stable tag: 2.2.7
7
  License: GPLv2 or later
8
 
9
  Get aware of any activities that are taking place on your dashboard! Imagine it like a black-box for your WordPress site.
@@ -96,6 +96,9 @@ Would you like to like to contribute to Activity Log? You are more than welcome
96
 
97
  == Changelog ==
98
 
 
 
 
99
  = 2.2.7 =
100
  * Added! - Freemius Insights platform to improve plugin UX
101
  * Tweak! Update translate: Russian (ru_RU) - Thanks to Oleg Reznikov
3
  Tags: actions, activity, Activity Log, activity logs, admin, admin actions, administration, analytics, audit, audit log, audit logs, bbPress, change, changes, dashboard, email notifications, event, event log, log, logger, Logs, monitor, multi-users, multisite, notifications, security, security audit trail, security event log, stats, stream, tracking, troubleshooting, user activity report, user tracking, woocommerce, woocommerce log, woocommerce monitor, woocommerce monitoring, woocommrece security, wordpress activity log, WordPress Admin, wordpress admin monitoring, wordpress audit, wordpress email alerts, wordpress log, wordpress monitor, wordpress monitoring, wordpress multisite, wordpress security, wordpress security alerts, wordpress security audit log, wordpress security monitor, wordpress security plugin, wordpress user tracking
4
  Requires at least: 3.5
5
  Tested up to: 4.4
6
+ Stable tag: 2.2.8
7
  License: GPLv2 or later
8
 
9
  Get aware of any activities that are taking place on your dashboard! Imagine it like a black-box for your WordPress site.
96
 
97
  == Changelog ==
98
 
99
+ = 2.2.8 =
100
+ * Tweak! Update Freemius SDK
101
+
102
  = 2.2.7 =
103
  * Added! - Freemius Insights platform to improve plugin UX
104
  * Tweak! Update translate: Russian (ru_RU) - Thanks to Oleg Reznikov